permissionSettingDialog.vue 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829
  1. <template>
  2. <div>
  3. <el-dialog
  4. title="权限设置"
  5. class="permissionSettingDialog"
  6. :visible.sync="show"
  7. :close-on-click-modal="false"
  8. width="1400px"
  9. top="8vh"
  10. >
  11. <div v-loading="loading" class="ps_area">
  12. <div class="pa_a_head">
  13. <div class="pa_a_h_tag">
  14. <span
  15. :class="{ pa_a_h_active: tagType == 'basics' }"
  16. @click="changeTagType('basics')"
  17. >基本信息</span
  18. >
  19. <span
  20. :class="{ pa_a_h_active: tagType == 'desktop' }"
  21. @click="changeTagType('desktop')"
  22. >桌面</span
  23. >
  24. <span
  25. :class="{ pa_a_h_active: tagType == 'admin-banner' }"
  26. @click="changeTagType('admin-banner')"
  27. >平台Banner</span
  28. >
  29. <span
  30. :class="{ pa_a_h_active: tagType == 'admin-index' }"
  31. @click="changeTagType('admin-index')"
  32. >平台首页</span
  33. >
  34. <span
  35. :class="{ pa_a_h_active: tagType == 'admin-cocoFlow' }"
  36. @click="changeTagType('admin-cocoFlow')"
  37. >平台首页CocoFlow</span
  38. >
  39. <span
  40. :class="{ pa_a_h_active: tagType == 'admin-cocoFlow2' }"
  41. @click="changeTagType('admin-cocoFlow2')"
  42. >平台首页CocoFlow2</span
  43. >
  44. <span
  45. :class="{ pa_a_h_active: tagType == 'admin-sidebar' }"
  46. @click="changeTagType('admin-sidebar')"
  47. >平台侧边栏</span
  48. >
  49. <span
  50. :class="{ pa_a_h_active: tagType == 'admin-school' }"
  51. @click="changeTagType('admin-school')"
  52. v-if="type == 'org'"
  53. >学校设置</span
  54. >
  55. <span
  56. :class="{ pa_a_h_active: tagType == 'admin-feature' }"
  57. @click="changeTagType('admin-feature')"
  58. >校区特色</span
  59. >
  60. <!-- v-if="data.parentid" -->
  61. </div>
  62. <div class="ea_add">
  63. <el-button
  64. size="mini"
  65. v-if="['admin-sidebar', 'admin-school'].includes(tagType)"
  66. type="primary"
  67. @click="addMenu(tagType)"
  68. >添加菜单</el-button
  69. >
  70. <el-button
  71. size="mini"
  72. v-if="['admin-banner'].includes(tagType)"
  73. type="primary"
  74. @click="addBanner()"
  75. >添加Banner</el-button
  76. >
  77. <el-button
  78. size="mini"
  79. v-if="['admin-cocoFlow', 'admin-cocoFlow2','admin-feature'].includes(tagType)"
  80. type="primary"
  81. @click="addApp()"
  82. >添加应用</el-button
  83. >
  84. <el-button
  85. size="mini"
  86. v-if="
  87. ['desktop', 'admin-index', 'admin-sidebar'].includes(tagType)
  88. "
  89. type="primary"
  90. @click="addTool(tagType)"
  91. >添加工具</el-button
  92. >
  93. </div>
  94. </div>
  95. <div class="pa_a_editBox">
  96. <div class="editArea pa_a_eb_basics" v-show="tagType == 'basics'">
  97. <div class="ea_basics_input">
  98. <span>标题</span>
  99. <el-input
  100. v-model="form.basics.title"
  101. placeholder="请输入标题内容"
  102. ></el-input>
  103. </div>
  104. <div class="ea_basics_input">
  105. <span>简介</span>
  106. <el-input
  107. v-model="form.basics.brief"
  108. placeholder="请输入简介内容"
  109. ></el-input>
  110. </div>
  111. <div class="ea_basics_logo">
  112. <span>logo</span>
  113. <el-tooltip
  114. class="item"
  115. effect="dark"
  116. :content="form.basics.logo ? '更改图标' : '上传图标'"
  117. placement="top"
  118. >
  119. <el-image
  120. style="width: 60px; height: 60px; margin-left: 20px"
  121. :src="form.basics.logo"
  122. fit="cover"
  123. @click="addBasicsIcon('logo')"
  124. >
  125. <div
  126. slot="error"
  127. class="image-slot"
  128. @click="addBasicsIcon('logo')"
  129. >
  130. <i class="el-icon-picture-outline"></i>
  131. </div>
  132. </el-image>
  133. </el-tooltip>
  134. </div>
  135. <div class="ea_basics_logo">
  136. <span>登录页logo</span>
  137. <el-tooltip
  138. class="item"
  139. effect="dark"
  140. :content="form.basics.loginLogo ? '更改图标' : '上传图标'"
  141. placement="top"
  142. >
  143. <el-image
  144. style="width: 60px; height: 60px; margin-left: 20px"
  145. :src="form.basics.loginLogo"
  146. fit="cover"
  147. @click="addBasicsIcon('loginLogo')"
  148. >
  149. <div
  150. slot="error"
  151. class="image-slot"
  152. @click="addBasicsIcon('loginLogo')"
  153. >
  154. <i class="el-icon-picture-outline"></i>
  155. </div>
  156. </el-image>
  157. </el-tooltip>
  158. </div>
  159. <div class="ea_basics_logo">
  160. <span>登录页banner</span>
  161. <el-tooltip
  162. class="item"
  163. effect="dark"
  164. :content="form.basics.loginBanner ? '更改' : '上传'"
  165. placement="top"
  166. >
  167. <el-image
  168. style="width: 60px; height: 60px; margin-left: 20px"
  169. :src="form.basics.loginBanner"
  170. fit="cover"
  171. @click="addBasicsIcon('loginBanner')"
  172. >
  173. <div
  174. slot="error"
  175. class="image-slot"
  176. @click="addBasicsIcon('loginBanner')"
  177. >
  178. <i class="el-icon-picture-outline"></i>
  179. </div>
  180. </el-image>
  181. </el-tooltip>
  182. </div>
  183. <div class="ea_basics_logo">
  184. <span>CocoFlow图标</span>
  185. <el-tooltip
  186. class="item"
  187. effect="dark"
  188. :content="form.basics.cocoFlow ? '更改图标' : '上传图标'"
  189. placement="top"
  190. >
  191. <el-image
  192. style="width: 60px; height: 60px; margin-left: 20px"
  193. :src="form.basics.cocoFlow"
  194. fit="cover"
  195. @click="addBasicsIcon('cocoFlow')"
  196. >
  197. <div
  198. slot="error"
  199. class="image-slot"
  200. @click="addBasicsIcon('cocoFlow')"
  201. >
  202. <i class="el-icon-picture-outline"></i>
  203. </div>
  204. </el-image>
  205. </el-tooltip>
  206. </div>
  207. </div>
  208. <div class="editArea pa_a_eb_desktop" v-show="tagType == 'desktop'">
  209. <div class="ea_table">
  210. <el-table
  211. :data="form.desktop.list"
  212. stripe
  213. border
  214. style="width: 100%"
  215. :header-cell-style="headerCellStyle"
  216. >
  217. <el-table-column
  218. label="标识"
  219. min-width="100"
  220. show-overflow-tooltip
  221. >
  222. <template slot-scope="scope">{{
  223. scope.row.toolId ? scope.row.toolId : "-"
  224. }}</template>
  225. </el-table-column>
  226. <!-- <el-table-column
  227. label="宽度"
  228. min-width="45"
  229. show-overflow-tooltip
  230. >
  231. <template slot-scope="scope">{{
  232. scope.row.dialogWidth ? scope.row.dialogWidth : "-"
  233. }}</template>
  234. </el-table-column>
  235. <el-table-column
  236. label="高度"
  237. min-width="45"
  238. show-overflow-tooltip
  239. >
  240. <template slot-scope="scope">{{
  241. scope.row.dialogHeight ? scope.row.dialogHeight : "-"
  242. }}</template>
  243. </el-table-column> -->
  244. <el-table-column
  245. label="描述"
  246. min-width="200"
  247. show-overflow-tooltip
  248. >
  249. <template slot-scope="scope">{{
  250. scope.row.description ? scope.row.description : "-"
  251. }}</template>
  252. </el-table-column>
  253. <el-table-column
  254. label="工具设置"
  255. min-width="80"
  256. show-overflow-tooltip
  257. >
  258. <template slot-scope="scope">
  259. <el-popover placement="bottom" width="840" trigger="hover">
  260. <div class="urlItemBox">
  261. <div
  262. class="urlItem"
  263. v-for="(item, index) in scope.row.url"
  264. :key="scope.row.id + '-' + index"
  265. >
  266. <span>{{ item.region }}</span>
  267. <div class="ui_message">
  268. <div>名称:{{ item.name ? item.name : "-" }}</div>
  269. <div>
  270. <span>链接:</span
  271. ><a
  272. :href="item.url"
  273. v-if="item.url"
  274. target="_blank"
  275. >{{ item.url }}</a
  276. ><span v-else>-</span>
  277. </div>
  278. <div>
  279. <span>桌面图标:</span>
  280. <div class="ui_m_image">
  281. <el-image
  282. v-if="item.icon"
  283. style="width: 100%; height: 100%"
  284. :src="item.icon"
  285. fit="cover"
  286. ></el-image>
  287. <span v-else>-</span>
  288. </div>
  289. </div>
  290. <div>
  291. <span>平台图标:</span>
  292. <div class="ui_m_image">
  293. <el-image
  294. v-if="item.platformIcon"
  295. style="width: 100%; height: 100%"
  296. :src="item.platformIcon"
  297. fit="cover"
  298. ></el-image>
  299. <span v-else>-</span>
  300. </div>
  301. </div>
  302. <div>
  303. <span>默认图标:</span>
  304. <div class="ui_m_image">
  305. <el-image
  306. v-if="item.defaultIcon"
  307. style="width: 100%; height: 100%"
  308. :src="item.defaultIcon"
  309. fit="cover"
  310. ></el-image>
  311. <span v-else>-</span>
  312. </div>
  313. </div>
  314. <div>
  315. <span>激活图标:</span>
  316. <div class="ui_m_image">
  317. <el-image
  318. v-if="item.activeIcon"
  319. style="width: 100%; height: 100%"
  320. :src="item.activeIcon"
  321. fit="cover"
  322. ></el-image>
  323. <span v-else>-</span>
  324. </div>
  325. </div>
  326. <div>
  327. <span>hover图标:</span>
  328. <div class="ui_m_image">
  329. <el-image
  330. v-if="item.hoverIcon"
  331. style="width: 100%; height: 100%"
  332. :src="item.hoverIcon"
  333. fit="cover"
  334. ></el-image>
  335. <span v-else>-</span>
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. </div>
  341. <el-button slot="reference" size="small"
  342. >查看设置</el-button
  343. >
  344. </el-popover>
  345. </template>
  346. </el-table-column>
  347. <el-table-column
  348. label="仅管理员显示"
  349. min-width="80"
  350. show-overflow-tooltip
  351. >
  352. <template slot-scope="scope">{{
  353. scope.row.isAdmin == "1" ? "是" : "否"
  354. }}</template>
  355. </el-table-column>
  356. <el-table-column
  357. label="操作"
  358. width="200px"
  359. show-overflow-tooltip
  360. >
  361. <template slot-scope="scope">
  362. <button
  363. @click="moveUp(scope.row)"
  364. v-if="scope.$index > 0"
  365. style="
  366. color: #308fff;
  367. background: none;
  368. border: none;
  369. cursor: pointer;
  370. margin-left: 25px;
  371. "
  372. >
  373. 上移
  374. </button>
  375. <button
  376. @click="moveDown(scope.row)"
  377. v-if="form.desktop.list.length - 1 > scope.$index"
  378. style="
  379. color: #308fff;
  380. background: none;
  381. border: none;
  382. cursor: pointer;
  383. margin-left: 25px;
  384. "
  385. >
  386. 下移
  387. </button>
  388. <button
  389. @click="del(scope.row)"
  390. style="
  391. color: #ff2570;
  392. background: none;
  393. border: none;
  394. cursor: pointer;
  395. margin-left: 25px;
  396. "
  397. >
  398. 删除
  399. </button>
  400. </template>
  401. </el-table-column>
  402. </el-table>
  403. </div>
  404. </div>
  405. <div class="editArea appList" v-show="tagType == 'admin-cocoFlow'">
  406. <template v-if="form.admin.cocoFlow">
  407. <div
  408. class="appItem"
  409. v-for="(item, index) in form.admin.cocoFlow"
  410. :key="item.id"
  411. >
  412. <div class="ai_left">
  413. <el-image
  414. style="width: 100%; height: 100%; cursor: pointer"
  415. :src="item.setIcon ? item.setIcon : item.json.icon"
  416. fit="cover"
  417. @click="updateIconCocoFLow(index)"
  418. ></el-image>
  419. </div>
  420. <div class="ai_right">
  421. <div>{{ item.name }}</div>
  422. <div class="ai_r_btn">
  423. <svg
  424. @click="moveApp(item.id, 0)"
  425. v-if="index != 0"
  426. t="1744598539024"
  427. class="icon"
  428. viewBox="0 0 1470 1024"
  429. version="1.1"
  430. xmlns="http://www.w3.org/2000/svg"
  431. p-id="2613"
  432. width="200"
  433. height="200"
  434. >
  435. <path
  436. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  437. p-id="2614"
  438. ></path>
  439. </svg>
  440. <svg
  441. @click="moveApp(item.id, 1)"
  442. v-if="index != form.admin.cocoFlow.length - 1"
  443. style="transform: rotate(180deg)"
  444. t="1744598539024"
  445. class="icon"
  446. viewBox="0 0 1470 1024"
  447. version="1.1"
  448. xmlns="http://www.w3.org/2000/svg"
  449. p-id="2613"
  450. width="200"
  451. height="200"
  452. >
  453. <path
  454. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  455. p-id="2614"
  456. ></path>
  457. </svg>
  458. </div>
  459. <span>{{ item.detail }}</span>
  460. </div>
  461. </div>
  462. </template>
  463. </div>
  464. <div class="editArea appList" v-show="tagType == 'admin-cocoFlow2'">
  465. <template v-if="form.admin.cocoFlow2">
  466. <div
  467. class="appItem"
  468. v-for="(item, index) in form.admin.cocoFlow2"
  469. :key="item.id"
  470. >
  471. <div class="ai_left">
  472. <el-image
  473. style="width: 100%; height: 100%; cursor: pointer"
  474. :src="item.setIcon ? item.setIcon : item.json.icon"
  475. fit="cover"
  476. @click="updateIconCocoFLow(index)"
  477. ></el-image>
  478. </div>
  479. <div class="ai_right">
  480. <div>{{ item.name }}</div>
  481. <div class="ai_r_btn">
  482. <svg
  483. @click="moveApp(item.id, 0)"
  484. v-if="index != 0"
  485. t="1744598539024"
  486. class="icon"
  487. viewBox="0 0 1470 1024"
  488. version="1.1"
  489. xmlns="http://www.w3.org/2000/svg"
  490. p-id="2613"
  491. width="200"
  492. height="200"
  493. >
  494. <path
  495. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  496. p-id="2614"
  497. ></path>
  498. </svg>
  499. <svg
  500. @click="moveApp(item.id, 1)"
  501. v-if="index != form.admin.cocoFlow2.length - 1"
  502. style="transform: rotate(180deg)"
  503. t="1744598539024"
  504. class="icon"
  505. viewBox="0 0 1470 1024"
  506. version="1.1"
  507. xmlns="http://www.w3.org/2000/svg"
  508. p-id="2613"
  509. width="200"
  510. height="200"
  511. >
  512. <path
  513. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  514. p-id="2614"
  515. ></path>
  516. </svg>
  517. </div>
  518. <span>{{ item.detail }}</span>
  519. </div>
  520. </div>
  521. </template>
  522. </div>
  523. <div
  524. class="editArea pa_a_eb_admin-index"
  525. v-show="tagType == 'admin-index'"
  526. >
  527. <div class="ea_table">
  528. <el-table
  529. :data="form.admin.index.list"
  530. stripe
  531. border
  532. style="width: 100%"
  533. :header-cell-style="headerCellStyle"
  534. >
  535. <el-table-column
  536. label="标识"
  537. min-width="100"
  538. show-overflow-tooltip
  539. >
  540. <template slot-scope="scope">{{
  541. scope.row.toolId ? scope.row.toolId : "-"
  542. }}</template>
  543. </el-table-column>
  544. <!-- <el-table-column
  545. label="宽度"
  546. min-width="45"
  547. show-overflow-tooltip
  548. >
  549. <template slot-scope="scope">{{
  550. scope.row.dialogWidth ? scope.row.dialogWidth : "-"
  551. }}</template>
  552. </el-table-column>
  553. <el-table-column
  554. label="高度"
  555. min-width="45"
  556. show-overflow-tooltip
  557. >
  558. <template slot-scope="scope">{{
  559. scope.row.dialogHeight ? scope.row.dialogHeight : "-"
  560. }}</template>
  561. </el-table-column> -->
  562. <el-table-column
  563. label="描述"
  564. min-width="200"
  565. show-overflow-tooltip
  566. >
  567. <template slot-scope="scope">{{
  568. scope.row.description ? scope.row.description : "-"
  569. }}</template>
  570. </el-table-column>
  571. <el-table-column
  572. label="工具设置"
  573. min-width="80"
  574. show-overflow-tooltip
  575. >
  576. <template slot-scope="scope">
  577. <el-popover placement="bottom" width="840" trigger="hover">
  578. <div class="urlItemBox">
  579. <div
  580. class="urlItem"
  581. v-for="(item, index) in scope.row.url"
  582. :key="scope.row.id + '-' + index"
  583. >
  584. <span>{{ item.region }}</span>
  585. <div class="ui_message">
  586. <div>名称:{{ item.name ? item.name : "-" }}</div>
  587. <div>
  588. <span>链接:</span
  589. ><a
  590. :href="item.url"
  591. v-if="item.url"
  592. target="_blank"
  593. >{{ item.url }}</a
  594. ><span v-else>-</span>
  595. </div>
  596. <div>
  597. <span>桌面图标:</span>
  598. <div class="ui_m_image">
  599. <el-image
  600. v-if="item.icon"
  601. style="width: 100%; height: 100%"
  602. :src="item.icon"
  603. fit="cover"
  604. ></el-image>
  605. <span v-else>-</span>
  606. </div>
  607. </div>
  608. <div>
  609. <span>平台图标:</span>
  610. <div class="ui_m_image">
  611. <el-image
  612. v-if="item.platformIcon"
  613. style="width: 100%; height: 100%"
  614. :src="item.platformIcon"
  615. fit="cover"
  616. ></el-image>
  617. <span v-else>-</span>
  618. </div>
  619. </div>
  620. <div>
  621. <span>默认图标:</span>
  622. <div class="ui_m_image">
  623. <el-image
  624. v-if="item.defaultIcon"
  625. style="width: 100%; height: 100%"
  626. :src="item.defaultIcon"
  627. fit="cover"
  628. ></el-image>
  629. <span v-else>-</span>
  630. </div>
  631. </div>
  632. <div>
  633. <span>激活图标:</span>
  634. <div class="ui_m_image">
  635. <el-image
  636. v-if="item.activeIcon"
  637. style="width: 100%; height: 100%"
  638. :src="item.activeIcon"
  639. fit="cover"
  640. ></el-image>
  641. <span v-else>-</span>
  642. </div>
  643. </div>
  644. <div>
  645. <span>hover图标:</span>
  646. <div class="ui_m_image">
  647. <el-image
  648. v-if="item.hoverIcon"
  649. style="width: 100%; height: 100%"
  650. :src="item.hoverIcon"
  651. fit="cover"
  652. ></el-image>
  653. <span v-else>-</span>
  654. </div>
  655. </div>
  656. </div>
  657. </div>
  658. </div>
  659. <el-button slot="reference" size="small"
  660. >查看设置</el-button
  661. >
  662. </el-popover>
  663. </template>
  664. </el-table-column>
  665. <el-table-column
  666. label="仅管理员显示"
  667. min-width="80"
  668. show-overflow-tooltip
  669. >
  670. <template slot-scope="scope">{{
  671. scope.row.isAdmin == "1" ? "是" : "否"
  672. }}</template>
  673. </el-table-column>
  674. <el-table-column
  675. label="操作"
  676. width="200px"
  677. show-overflow-tooltip
  678. >
  679. <template slot-scope="scope">
  680. <button
  681. @click="moveUp(scope.row)"
  682. v-if="scope.$index > 0"
  683. style="
  684. color: #308fff;
  685. background: none;
  686. border: none;
  687. cursor: pointer;
  688. margin-left: 25px;
  689. "
  690. >
  691. 上移
  692. </button>
  693. <button
  694. @click="moveDown(scope.row)"
  695. v-if="form.admin.index.list.length - 1 > scope.$index"
  696. style="
  697. color: #308fff;
  698. background: none;
  699. border: none;
  700. cursor: pointer;
  701. margin-left: 25px;
  702. "
  703. >
  704. 下移
  705. </button>
  706. <button
  707. @click="del(scope.row)"
  708. style="
  709. color: #ff2570;
  710. background: none;
  711. border: none;
  712. cursor: pointer;
  713. margin-left: 25px;
  714. "
  715. >
  716. 删除
  717. </button>
  718. </template>
  719. </el-table-column>
  720. </el-table>
  721. </div>
  722. </div>
  723. <div
  724. class="editArea pa_a_eb_admin-index"
  725. v-show="tagType == 'admin-banner'"
  726. >
  727. <div class="ea_table">
  728. <el-table
  729. :data="form.admin.banner"
  730. stripe
  731. border
  732. style="width: 100%"
  733. :header-cell-style="headerCellStyle"
  734. >
  735. <el-table-column
  736. label="标题"
  737. min-width="100"
  738. show-overflow-tooltip
  739. >
  740. <template slot-scope="scope">{{
  741. scope.row.title ? scope.row.title : "-"
  742. }}</template>
  743. </el-table-column>
  744. <el-table-column label="图片" width="450">
  745. <template slot-scope="scope">
  746. <el-image
  747. :src="scope.row.src"
  748. v-if="scope.row.src"
  749. style="width: 400px; height: 200px"
  750. ></el-image>
  751. <span v-else>-</span>
  752. </template>
  753. </el-table-column>
  754. <el-table-column
  755. label="跳转链接"
  756. width="80"
  757. show-overflow-tooltip
  758. >
  759. <template slot-scope="scope">
  760. <el-tooltip
  761. class="item"
  762. effect="dark"
  763. :content="scope.row.url"
  764. placement="top"
  765. v-if="scope.row.url"
  766. >
  767. <a :href="scope.row.url" target="_blank">点击跳转</a>
  768. </el-tooltip>
  769. <span v-else>-</span>
  770. </template>
  771. </el-table-column>
  772. <el-table-column
  773. label="操作"
  774. width="250px"
  775. show-overflow-tooltip
  776. >
  777. <template slot-scope="scope">
  778. <button
  779. @click="editBanner(scope.row)"
  780. style="
  781. color: #308fff;
  782. background: none;
  783. border: none;
  784. cursor: pointer;
  785. margin-left: 25px;
  786. "
  787. >
  788. 修改
  789. </button>
  790. <button
  791. @click="moveUp(scope.row)"
  792. v-if="scope.$index > 0"
  793. style="
  794. color: #308fff;
  795. background: none;
  796. border: none;
  797. cursor: pointer;
  798. margin-left: 25px;
  799. "
  800. >
  801. 上移
  802. </button>
  803. <button
  804. @click="moveDown(scope.row)"
  805. v-if="form.admin.banner.length - 1 > scope.$index"
  806. style="
  807. color: #308fff;
  808. background: none;
  809. border: none;
  810. cursor: pointer;
  811. margin-left: 25px;
  812. "
  813. >
  814. 下移
  815. </button>
  816. <button
  817. @click="del(scope.row)"
  818. style="
  819. color: #ff2570;
  820. background: none;
  821. border: none;
  822. cursor: pointer;
  823. margin-left: 25px;
  824. "
  825. >
  826. 删除
  827. </button>
  828. </template>
  829. </el-table-column>
  830. </el-table>
  831. </div>
  832. </div>
  833. <div
  834. class="editArea pa_a_eb_admin-sidebar"
  835. v-show="tagType == 'admin-sidebar'"
  836. >
  837. <div class="ea_table">
  838. <el-table
  839. :data="form.admin.sidebar.list"
  840. stripe
  841. border
  842. style="width: 100%"
  843. row-key="typeId"
  844. :header-cell-style="headerCellStyle"
  845. :tree-props="{
  846. children: 'children',
  847. hasChildren: 'hasChildren',
  848. }"
  849. >
  850. <el-table-column
  851. label="标识"
  852. min-width="100"
  853. show-overflow-tooltip
  854. >
  855. <template slot-scope="scope">{{
  856. scope.row.toolId ? scope.row.toolId : "-"
  857. }}</template>
  858. </el-table-column>
  859. <el-table-column
  860. label="描述"
  861. min-width="200"
  862. show-overflow-tooltip
  863. >
  864. <template slot-scope="scope">{{
  865. scope.row.description ? scope.row.description : "-"
  866. }}</template>
  867. </el-table-column>
  868. <el-table-column
  869. label="菜单名称"
  870. min-width="200"
  871. show-overflow-tooltip
  872. >
  873. <template slot-scope="scope">{{
  874. scope.row.menuName ? scope.row.menuName : "-"
  875. }}</template>
  876. </el-table-column>
  877. <el-table-column
  878. label="菜单默认图标"
  879. min-width="200"
  880. show-overflow-tooltip
  881. >
  882. <template slot-scope="scope">
  883. <el-image
  884. v-if="scope.row.menuIcon"
  885. style="width: 50px; height: 50px"
  886. :src="scope.row.menuIcon"
  887. fit="cover"
  888. >
  889. <div slot="error" class="image-slot">
  890. <i class="el-icon-picture-outline"></i>
  891. </div>
  892. </el-image>
  893. <span v-else>-</span>
  894. </template>
  895. </el-table-column>
  896. <el-table-column
  897. label="菜单激活图标"
  898. min-width="200"
  899. show-overflow-tooltip
  900. >
  901. <template slot-scope="scope">
  902. <el-image
  903. v-if="scope.row.menuActiveIcon"
  904. style="width: 50px; height: 50px"
  905. :src="scope.row.menuActiveIcon"
  906. fit="cover"
  907. >
  908. <div slot="error" class="image-slot">
  909. <i class="el-icon-picture-outline"></i>
  910. </div>
  911. </el-image>
  912. <span v-else>-</span>
  913. </template>
  914. </el-table-column>
  915. <el-table-column
  916. label="工具设置"
  917. min-width="110"
  918. show-overflow-tooltip
  919. >
  920. <template slot-scope="scope">
  921. <el-popover
  922. placement="bottom"
  923. width="840"
  924. trigger="hover"
  925. v-if="scope.row.url"
  926. >
  927. <div class="urlItemBox">
  928. <div
  929. class="urlItem"
  930. v-for="(item, index) in scope.row.url"
  931. :key="scope.row.id + '-' + index"
  932. >
  933. <span>{{ item.region }}</span>
  934. <div class="ui_message">
  935. <div>名称:{{ item.name ? item.name : "-" }}</div>
  936. <div>
  937. <span>链接:</span
  938. ><a
  939. :href="item.url"
  940. v-if="item.url"
  941. target="_blank"
  942. >{{ item.url }}</a
  943. ><span v-else>-</span>
  944. </div>
  945. <div>
  946. <span>桌面图标:</span>
  947. <div class="ui_m_image">
  948. <el-image
  949. v-if="item.icon"
  950. style="width: 100%; height: 100%"
  951. :src="item.icon"
  952. fit="cover"
  953. ></el-image>
  954. <span v-else>-</span>
  955. </div>
  956. </div>
  957. <div>
  958. <span>平台图标:</span>
  959. <div class="ui_m_image">
  960. <el-image
  961. v-if="item.platformIcon"
  962. style="width: 100%; height: 100%"
  963. :src="item.platformIcon"
  964. fit="cover"
  965. ></el-image>
  966. <span v-else>-</span>
  967. </div>
  968. </div>
  969. <div>
  970. <span>默认图标:</span>
  971. <div class="ui_m_image">
  972. <el-image
  973. v-if="item.defaultIcon"
  974. style="width: 100%; height: 100%"
  975. :src="item.defaultIcon"
  976. fit="cover"
  977. ></el-image>
  978. <span v-else>-</span>
  979. </div>
  980. </div>
  981. <div>
  982. <span>激活图标:</span>
  983. <div class="ui_m_image">
  984. <el-image
  985. v-if="item.activeIcon"
  986. style="width: 100%; height: 100%"
  987. :src="item.activeIcon"
  988. fit="cover"
  989. ></el-image>
  990. <span v-else>-</span>
  991. </div>
  992. </div>
  993. <div>
  994. <span>hover图标:</span>
  995. <div class="ui_m_image">
  996. <el-image
  997. v-if="item.hoverIcon"
  998. style="width: 100%; height: 100%"
  999. :src="item.hoverIcon"
  1000. fit="cover"
  1001. ></el-image>
  1002. <span v-else>-</span>
  1003. </div>
  1004. </div>
  1005. </div>
  1006. </div>
  1007. </div>
  1008. <el-button slot="reference" size="small"
  1009. >查看设置</el-button
  1010. >
  1011. </el-popover>
  1012. <span v-else>-</span>
  1013. </template>
  1014. </el-table-column>
  1015. <el-table-column
  1016. label="仅管理员显示"
  1017. min-width="80"
  1018. show-overflow-tooltip
  1019. >
  1020. <template slot-scope="scope">
  1021. <span v-if="scope.row.isAdmin">{{
  1022. scope.row.isAdmin == "1" ? "是" : "否"
  1023. }}</span>
  1024. <span v-else>-</span>
  1025. </template>
  1026. </el-table-column>
  1027. <el-table-column
  1028. label="操作"
  1029. width="320px"
  1030. fixed="right"
  1031. show-overflow-tooltip
  1032. >
  1033. <template slot-scope="scope">
  1034. <button
  1035. @click="addToolSidebar(scope.row.id)"
  1036. v-if="scope.row.menuName"
  1037. style="
  1038. color: #308fff;
  1039. background: none;
  1040. border: none;
  1041. cursor: pointer;
  1042. margin-left: 25px;
  1043. "
  1044. >
  1045. 添加工具
  1046. </button>
  1047. <button
  1048. @click="editMenu(scope.row)"
  1049. v-if="scope.row.menuName"
  1050. style="
  1051. color: #308fff;
  1052. background: none;
  1053. border: none;
  1054. cursor: pointer;
  1055. margin-left: 25px;
  1056. "
  1057. >
  1058. 修改
  1059. </button>
  1060. <button
  1061. @click="moveUp(scope.row, scope.row.typeId)"
  1062. style="
  1063. color: #308fff;
  1064. background: none;
  1065. border: none;
  1066. cursor: pointer;
  1067. margin-left: 25px;
  1068. "
  1069. >
  1070. 上移
  1071. </button>
  1072. <button
  1073. @click="moveDown(scope.row, scope.row.typeId)"
  1074. style="
  1075. color: #308fff;
  1076. background: none;
  1077. border: none;
  1078. cursor: pointer;
  1079. margin-left: 25px;
  1080. "
  1081. >
  1082. 下移
  1083. </button>
  1084. <button
  1085. @click="del(scope.row, scope.row.typeId)"
  1086. style="
  1087. color: #ff2570;
  1088. background: none;
  1089. border: none;
  1090. cursor: pointer;
  1091. margin-left: 25px;
  1092. "
  1093. >
  1094. 删除
  1095. </button>
  1096. </template>
  1097. </el-table-column>
  1098. </el-table>
  1099. </div>
  1100. </div>
  1101. <div
  1102. class="editArea pa_a_eb_admin-sidebar"
  1103. v-show="tagType == 'admin-school'"
  1104. >
  1105. <div class="ea_table">
  1106. <el-table
  1107. :data="form.admin.school.list"
  1108. stripe
  1109. border
  1110. style="width: 100%"
  1111. row-key="typeId"
  1112. :header-cell-style="headerCellStyle"
  1113. :tree-props="{
  1114. children: 'children',
  1115. hasChildren: 'hasChildren',
  1116. }"
  1117. >
  1118. <el-table-column
  1119. label="菜单名称"
  1120. min-width="200"
  1121. show-overflow-tooltip
  1122. >
  1123. <template slot-scope="scope">{{
  1124. scope.row.menuName ? scope.row.menuName : "-"
  1125. }}</template>
  1126. </el-table-column>
  1127. <el-table-column
  1128. label="菜单默认图标"
  1129. min-width="200"
  1130. show-overflow-tooltip
  1131. >
  1132. <template slot-scope="scope">
  1133. <el-image
  1134. v-if="scope.row.menuIcon"
  1135. style="width: 50px; height: 50px"
  1136. :src="scope.row.menuIcon"
  1137. fit="cover"
  1138. >
  1139. <div slot="error" class="image-slot">
  1140. <i class="el-icon-picture-outline"></i>
  1141. </div>
  1142. </el-image>
  1143. <span v-else>-</span>
  1144. </template>
  1145. </el-table-column>
  1146. <el-table-column
  1147. label="学校名称"
  1148. min-width="200"
  1149. show-overflow-tooltip
  1150. >
  1151. <template slot-scope="scope">{{
  1152. scope.row.name ? scope.row.name : "-"
  1153. }}</template>
  1154. </el-table-column>
  1155. <el-table-column
  1156. label="编码"
  1157. min-width="100"
  1158. show-overflow-tooltip
  1159. >
  1160. <template slot-scope="scope">{{
  1161. scope.row.code ? scope.row.code : "-"
  1162. }}</template>
  1163. </el-table-column>
  1164. <el-table-column
  1165. label="组织名称"
  1166. min-width="300"
  1167. show-overflow-tooltip
  1168. >
  1169. <template slot-scope="scope">{{
  1170. scope.row.orgName ? scope.row.orgName : "-"
  1171. }}</template>
  1172. </el-table-column>
  1173. <el-table-column
  1174. label="操作"
  1175. width="320px"
  1176. fixed="right"
  1177. show-overflow-tooltip
  1178. >
  1179. <template slot-scope="scope">
  1180. <button
  1181. @click="addSchool(scope.row.id)"
  1182. v-if="scope.row.menuName"
  1183. style="
  1184. color: #308fff;
  1185. background: none;
  1186. border: none;
  1187. cursor: pointer;
  1188. margin-left: 25px;
  1189. "
  1190. >
  1191. 添加学校
  1192. </button>
  1193. <button
  1194. @click="editMenu(scope.row)"
  1195. v-if="scope.row.s"
  1196. style="
  1197. color: #308fff;
  1198. background: none;
  1199. border: none;
  1200. cursor: pointer;
  1201. margin-left: 25px;
  1202. "
  1203. >
  1204. 修改
  1205. </button>
  1206. <button
  1207. @click="moveUp(scope.row, scope.row.typeId)"
  1208. style="
  1209. color: #308fff;
  1210. background: none;
  1211. border: none;
  1212. cursor: pointer;
  1213. margin-left: 25px;
  1214. "
  1215. >
  1216. 上移
  1217. </button>
  1218. <button
  1219. @click="moveDown(scope.row, scope.row.typeId)"
  1220. style="
  1221. color: #308fff;
  1222. background: none;
  1223. border: none;
  1224. cursor: pointer;
  1225. margin-left: 25px;
  1226. "
  1227. >
  1228. 下移
  1229. </button>
  1230. <button
  1231. @click="del(scope.row, scope.row.typeId)"
  1232. style="
  1233. color: #ff2570;
  1234. background: none;
  1235. border: none;
  1236. cursor: pointer;
  1237. margin-left: 25px;
  1238. "
  1239. >
  1240. 删除
  1241. </button>
  1242. </template>
  1243. </el-table-column>
  1244. </el-table>
  1245. </div>
  1246. </div>
  1247. <div class="editArea pa_a_eb_feature" v-show="tagType == 'admin-feature'">
  1248. <div class="ea_appList">
  1249. <div class="ea_appListTit">集团简介</div>
  1250. <el-input
  1251. type="textarea"
  1252. :rows="2"
  1253. resize="none"
  1254. placeholder="请输入内容"
  1255. v-model="form.admin.CampusF.GroupBri">
  1256. </el-input>
  1257. </div>
  1258. <div class="ea_appList">
  1259. <div class="ea_appListTit">办学特色</div>
  1260. <el-table
  1261. :data="form.admin.CampusF.feature"
  1262. stripe
  1263. border
  1264. style="width: 100%"
  1265. :header-cell-style="headerCellStyle"
  1266. >
  1267. <el-table-column
  1268. label="icon"
  1269. min-width="200"
  1270. show-overflow-tooltip
  1271. >
  1272. <template slot-scope="scope">
  1273. <img style="height: 30px;width: 30px;object-fit: cover;" :src="scope.row.icon" alt="">
  1274. </template>
  1275. </el-table-column>
  1276. <el-table-column
  1277. label="标题"
  1278. min-width="200"
  1279. show-overflow-tooltip
  1280. >
  1281. <template slot-scope="scope">{{
  1282. scope.row.name ? scope.row.name : "-"
  1283. }}</template>
  1284. </el-table-column>
  1285. <el-table-column
  1286. label="简介"
  1287. min-width="200"
  1288. show-overflow-tooltip
  1289. >
  1290. <template slot-scope="scope">{{
  1291. scope.row.bri ? scope.row.bri : "-"
  1292. }}</template>
  1293. </el-table-column>
  1294. <el-table-column
  1295. label="修改"
  1296. min-width="200"
  1297. show-overflow-tooltip
  1298. >
  1299. <template slot-scope="scope">
  1300. <button
  1301. @click="editRunS(scope.$index,scope.row,0)"
  1302. style="
  1303. color: #308fff;
  1304. background: none;
  1305. border: none;
  1306. cursor: pointer;
  1307. margin-left: 25px;
  1308. "
  1309. >
  1310. 修改
  1311. </button>
  1312. <button
  1313. v-if="form.admin.CampusF.feature.length > 1"
  1314. @click="delFe(scope.$index,0)"
  1315. style="
  1316. color: red;
  1317. background: none;
  1318. border: none;
  1319. cursor: pointer;
  1320. margin-left: 25px;
  1321. "
  1322. >
  1323. 删除
  1324. </button>
  1325. <button
  1326. v-if="scope.$index == form.admin.CampusF.feature.length - 1"
  1327. @click="addCon(0)"
  1328. style="
  1329. color: #308fff;
  1330. background: none;
  1331. border: none;
  1332. cursor: pointer;
  1333. margin-left: 25px;
  1334. "
  1335. >
  1336. 添加
  1337. </button>
  1338. </template>
  1339. </el-table-column>
  1340. </el-table>
  1341. </div>
  1342. <div class="ea_appList">
  1343. <div class="ea_appListTit">师资力量</div>
  1344. <el-input
  1345. style="margin-bottom: 10px;"
  1346. type="textarea"
  1347. :rows="2"
  1348. resize="none"
  1349. placeholder="请输入描述"
  1350. v-model="form.admin.CampusF.teacherN.teaBri">
  1351. </el-input>
  1352. <el-table
  1353. :data="form.admin.CampusF.teacherN.list"
  1354. stripe
  1355. border
  1356. style="width: 100%"
  1357. :header-cell-style="headerCellStyle"
  1358. >
  1359. <el-table-column
  1360. label="标题"
  1361. min-width="200"
  1362. show-overflow-tooltip
  1363. >
  1364. <template slot-scope="scope">{{
  1365. scope.row.name ? scope.row.name : "-"
  1366. }}</template>
  1367. </el-table-column>
  1368. <el-table-column
  1369. label="简介"
  1370. min-width="200"
  1371. show-overflow-tooltip
  1372. >
  1373. <template slot-scope="scope">{{
  1374. scope.row.bri ? scope.row.bri : "-"
  1375. }}</template>
  1376. </el-table-column>
  1377. <el-table-column
  1378. label="修改"
  1379. min-width="200"
  1380. show-overflow-tooltip
  1381. >
  1382. <template slot-scope="scope">
  1383. <button
  1384. @click="editRunS(scope.$index,scope.row,1)"
  1385. style="
  1386. color: #308fff;
  1387. background: none;
  1388. border: none;
  1389. cursor: pointer;
  1390. margin-left: 25px;
  1391. "
  1392. >
  1393. 修改
  1394. </button>
  1395. <button
  1396. v-if="form.admin.CampusF.teacherN.list.length > 1"
  1397. @click="delFe(scope.$index,1)"
  1398. style="
  1399. color: red;
  1400. background: none;
  1401. border: none;
  1402. cursor: pointer;
  1403. margin-left: 25px;
  1404. "
  1405. >
  1406. 删除
  1407. </button>
  1408. <button
  1409. v-if="scope.$index == form.admin.CampusF.teacherN.list.length - 1"
  1410. @click="addCon(1)"
  1411. style="
  1412. color: #308fff;
  1413. background: none;
  1414. border: none;
  1415. cursor: pointer;
  1416. margin-left: 25px;
  1417. "
  1418. >
  1419. 添加
  1420. </button>
  1421. </template>
  1422. </el-table-column>
  1423. </el-table>
  1424. </div>
  1425. <div class="ea_appList">
  1426. <div class="ea_appListTit">
  1427. 特色应用
  1428. </div>
  1429. <div style="display: flex;flex-wrap: wrap;">
  1430. <template v-if="form.admin.CampusF.appList.length">
  1431. <div
  1432. class="appItem"
  1433. v-for="(item, index) in form.admin.CampusF.appList"
  1434. :key="item.id"
  1435. >
  1436. <div class="ai_left">
  1437. <el-image
  1438. style="width: 100%; height: 100%; cursor: pointer"
  1439. :src="item.setIcon ? item.setIcon : item.json.icon"
  1440. fit="cover"
  1441. @click="updateIconCocoFLow(index)"
  1442. ></el-image>
  1443. </div>
  1444. <div class="ai_right">
  1445. <div>{{ item.name }}</div>
  1446. <div class="ai_r_btn">
  1447. <svg
  1448. @click="moveApp(item.id, 0)"
  1449. v-if="index != 0"
  1450. t="1744598539024"
  1451. class="icon"
  1452. viewBox="0 0 1470 1024"
  1453. version="1.1"
  1454. xmlns="http://www.w3.org/2000/svg"
  1455. p-id="2613"
  1456. width="200"
  1457. height="200"
  1458. >
  1459. <path
  1460. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  1461. p-id="2614"
  1462. ></path>
  1463. </svg>
  1464. <svg
  1465. @click="moveApp(item.id, 1)"
  1466. v-if="index != form.admin.cocoFlow.length - 1"
  1467. style="transform: rotate(180deg)"
  1468. t="1744598539024"
  1469. class="icon"
  1470. viewBox="0 0 1470 1024"
  1471. version="1.1"
  1472. xmlns="http://www.w3.org/2000/svg"
  1473. p-id="2613"
  1474. width="200"
  1475. height="200"
  1476. >
  1477. <path
  1478. d="M664.965051 36.390373L20.010522 880.212016c-44.471546 58.191134-2.978155 142.114864 70.271066 142.114863h1289.8254c73.232489 0 114.725879-83.923729 70.271065-142.114863L805.473719 36.390373a88.441155 88.441155 0 0 0-140.508668 0z"
  1479. p-id="2614"
  1480. ></path>
  1481. </svg>
  1482. </div>
  1483. <span>{{ item.detail }}</span>
  1484. </div>
  1485. </div>
  1486. </template>
  1487. </div>
  1488. </div>
  1489. </div>
  1490. </div>
  1491. </div>
  1492. <!-- 按钮区域 -->
  1493. <div slot="footer" class="el-dialog__footer">
  1494. <el-button @click="close()">取 消</el-button>
  1495. <el-button type="primary" @click="submit()">确认</el-button>
  1496. </div>
  1497. </el-dialog>
  1498. <selectToolDialog ref="selectToolDialogRef" @success="selectToolSuccess" />
  1499. <addMenuDialog ref="addMenuDialogRef" @success="addMenuSuccess" />
  1500. <selectAppDialog ref="selectAppDialogRef" @success="selectAppSuccess" />
  1501. <addBannerDialog ref="addBannerDialogRef" @success="addBannerSuccess" />
  1502. <selectSchoolDialog
  1503. ref="selectSchoolDialogRef"
  1504. @success="selectSchoolSuccess"
  1505. :id="data ? data.id : ''"
  1506. />
  1507. <addCampusDialog ref="addCampusDialogRef" @success="addCampusSuccess" />
  1508. </div>
  1509. </template>
  1510. <script>
  1511. import "@/common/aws-sdk-2.235.1.min.js";
  1512. import selectToolDialog from "./selectToolDialog.vue";
  1513. import { API_CONFIG } from "@/common/apiConfig";
  1514. import addMenuDialog from "./addMenuDialog.vue";
  1515. import { addOp } from "@/api/user";
  1516. import { mapGetters } from "vuex";
  1517. import selectAppDialog from "./selectAppDialog.vue";
  1518. import selectSchoolDialog from "./selectSchoolDialog.vue";
  1519. import addBannerDialog from "./addBannerDialog";
  1520. import addCampusDialog from "./addCampusDialog";
  1521. export default {
  1522. components: {
  1523. selectToolDialog,
  1524. addMenuDialog,
  1525. selectAppDialog,
  1526. addBannerDialog,
  1527. selectSchoolDialog,
  1528. addCampusDialog
  1529. },
  1530. computed: {
  1531. ...mapGetters(["userid"]),
  1532. },
  1533. data() {
  1534. return {
  1535. show: false,
  1536. loading: false,
  1537. data: null,
  1538. type: null,
  1539. tagType: "basics",
  1540. addToolIndex: null,
  1541. toolList: [],
  1542. appList: [],
  1543. form: {
  1544. basics: {
  1545. title: "",
  1546. brief: "",
  1547. logo: "",
  1548. loginLogo: "",
  1549. loginBanner: "",
  1550. cocoFlow:"",
  1551. },
  1552. //桌面 管理平台首页 管理平台侧边栏
  1553. desktop: {
  1554. list: [],
  1555. },
  1556. // 修改小区特色信息
  1557. CampusData:'',
  1558. CampusType:0,
  1559. // 0 办学特色 1 师资力量
  1560. CampusNum:0,
  1561. admin: {
  1562. index: {
  1563. list: [],
  1564. cocoFlow: [],
  1565. },
  1566. sidebar: {
  1567. list: [],
  1568. },
  1569. school: {
  1570. list: [],
  1571. },
  1572. CampusF: {
  1573. GroupBri:'',
  1574. feature:[],
  1575. teacherN:{
  1576. teaBri:'',
  1577. list: [],
  1578. },
  1579. appList: [],
  1580. },
  1581. },
  1582. },
  1583. };
  1584. },
  1585. methods: {
  1586. delFe(index,type){
  1587. if (type == 0) {
  1588. this.form.admin.CampusF.feature.splice(index,1)
  1589. }else{
  1590. this.form.admin.CampusF.teacherN.list.splice(index,1)
  1591. }
  1592. },
  1593. addCon(type){
  1594. if (type == 0) {
  1595. this.CampusNum = this.form.admin.CampusF.feature.length
  1596. this.CampusType = type
  1597. this.$refs.addCampusDialogRef.open({bri:'',icon:'',name:''}, type);
  1598. }else{
  1599. this.CampusNum = this.form.admin.CampusF.teacherN.list.length
  1600. this.CampusType = type
  1601. this.$refs.addCampusDialogRef.open({bri:'',name:''}, type);
  1602. }
  1603. },
  1604. // 修改 0办学特色 1师资力量
  1605. editRunS(index,val,type){
  1606. this.CampusData = val
  1607. this.CampusType = type
  1608. this.CampusNum = index
  1609. this.$refs.addCampusDialogRef.open(val, type);
  1610. },
  1611. // 修改数据0办学特色 1师资力量
  1612. addCampusSuccess(val){
  1613. if (this.CampusType == 0) {
  1614. this.form.admin.CampusF.feature.splice(this.CampusNum,1,val.item)
  1615. }else{
  1616. this.form.admin.CampusF.teacherN.list.splice(this.CampusNum,1,val.item)
  1617. }
  1618. },
  1619. open(data, type) {
  1620. this.init();
  1621. let _data = JSON.parse(JSON.stringify(data));
  1622. console.log('_data',_data);
  1623. if (_data.json) {
  1624. let _form = JSON.parse(_data.json);
  1625. if (!_form.admin.school) {
  1626. _form.admin.school = { list: [] };
  1627. }
  1628. if (!_form.admin.CampusF) {
  1629. _form.admin.CampusF = {
  1630. GroupBri:'',
  1631. feature:[
  1632. {icon:'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/tese1745913146000.svg',
  1633. name:'默认标题',bri:'暂无简介'},
  1634. ],
  1635. teacherN:{
  1636. teaBri:'',
  1637. list: [
  1638. {name:'默认标题',bri:'暂无简介'}
  1639. ],
  1640. },
  1641. appList: [],
  1642. };
  1643. }
  1644. this.form = _form;
  1645. }
  1646. Promise.all([this.getToolData(), this.getAppData()])
  1647. .then(() => {
  1648. this.setDataListToo(this.toolList, this.appList);
  1649. })
  1650. .catch((e) => {
  1651. console.log("👉", e);
  1652. });
  1653. this.data = _data;
  1654. this.type = type;
  1655. this.show = true;
  1656. },
  1657. close() {
  1658. this.show = false;
  1659. this.init();
  1660. },
  1661. init() {
  1662. this.form = {
  1663. basics: {
  1664. title: "",
  1665. brief: "",
  1666. logo: "",
  1667. loginLogo: "",
  1668. loginBanner: "",
  1669. cocoFlow:"",
  1670. },
  1671. //桌面 管理平台首页 管理平台侧边栏
  1672. desktop: {
  1673. list: [],
  1674. },
  1675. admin: {
  1676. index: {
  1677. list: [],
  1678. cocoFlow: [],
  1679. },
  1680. sidebar: {
  1681. list: [],
  1682. },
  1683. school: {
  1684. list: [],
  1685. },
  1686. CampusF: {
  1687. GroupBri:'',
  1688. feature:[
  1689. {icon:'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/tese1745913146000.svg',
  1690. name:'默认标题',bri:'暂无简介'},
  1691. ],
  1692. teacherN:{
  1693. teaBri:'',
  1694. list: [
  1695. {name:'默认标题',bri:'暂无简介'}
  1696. ],
  1697. },
  1698. appList: [],
  1699. },
  1700. },
  1701. };
  1702. this.type = null;
  1703. this.data = null;
  1704. this.tagType = "basics";
  1705. },
  1706. submit() {
  1707. // this.close();
  1708. console.log(this.form);
  1709. this.setJson();
  1710. },
  1711. async addBasicsIcon(type = "logo") {
  1712. let _url = await this.uploadFile("image/*");
  1713. if (_url) {
  1714. this.form.basics[type] = _url;
  1715. this.$forceUpdate();
  1716. console.log(this.form);
  1717. await addOp({
  1718. uid: this.userid,
  1719. cid: this.data.id,
  1720. type: "user_op",
  1721. content: `修改了${this.data.name}的基本信息的${type}`,
  1722. });
  1723. } else {
  1724. return console.log("无图片");
  1725. }
  1726. },
  1727. uploadFile(accept = "*") {
  1728. return new Promise((resolve) => {
  1729. const input = document.createElement("input");
  1730. input.type = "file";
  1731. input.accept = accept;
  1732. input.onchange = (event) => {
  1733. const file = event.target.files[0];
  1734. if (file) {
  1735. let credentials = {
  1736. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1737. secretAccessKey: "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",
  1738. }; //秘钥形式的登录上传
  1739. window.AWS.config.update(credentials);
  1740. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1741. let bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1742. // let _name = file.name;
  1743. // let size = file.size;
  1744. let params = {
  1745. Key:
  1746. file.name.split(".")[0] +
  1747. new Date().getTime() +
  1748. "." +
  1749. file.name.split(".")[file.name.split(".").length - 1],
  1750. ContentType: file.type,
  1751. Body: file,
  1752. "Access-Control-Allow-Credentials": "*",
  1753. ACL: "public-read",
  1754. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1755. let options = {
  1756. partSize: 2048 * 1024 * 1024,
  1757. queueSize: 2,
  1758. leavePartsOnError: true,
  1759. };
  1760. bucket
  1761. .upload(params, options)
  1762. .on("httpUploadProgress", (evt) => {
  1763. console.log(evt);
  1764. })
  1765. .send((err, data) => {
  1766. if (err) {
  1767. this.$message.error("上传失败");
  1768. return resolve("");
  1769. } else {
  1770. return resolve(data.Location);
  1771. }
  1772. });
  1773. } else {
  1774. resolve("");
  1775. }
  1776. };
  1777. input.click();
  1778. });
  1779. },
  1780. changeTagType(newType) {
  1781. this.tagType = newType;
  1782. },
  1783. addTool(type) {
  1784. let selectList = [];
  1785. if (type == "desktop") selectList = this.form.desktop.list;
  1786. if (type == "admin-index") selectList = this.form.admin.index.list;
  1787. if (type == "admin-sidebar") selectList = this.form.admin.sidebar.list;
  1788. this.$refs.selectToolDialogRef.open(
  1789. selectList,
  1790. type,
  1791. ["admin-index", "admin-sidebar"].includes(type)
  1792. ? this.form.desktop.list
  1793. : []
  1794. );
  1795. },
  1796. async selectToolSuccess([_list, type]) {
  1797. console.log(type, "===", _list);
  1798. let list = _list;
  1799. if (type == "desktop") {
  1800. this.form.desktop.list = list;
  1801. this.$refs.selectToolDialogRef.close();
  1802. await addOp({
  1803. uid: this.userid,
  1804. cid: this.data.id,
  1805. type: "user_op",
  1806. content: `修改了${this.data.name}的桌面端工具`,
  1807. });
  1808. } else if (type == "admin-index") {
  1809. this.form.admin.index.list = list;
  1810. this.$refs.selectToolDialogRef.close();
  1811. await addOp({
  1812. uid: this.userid,
  1813. cid: this.data.id,
  1814. type: "user_op",
  1815. content: `修改了${this.data.name}的平台首页工具`,
  1816. });
  1817. } else if (type == "admin-sidebar" || type == "admin-sidebar2") {
  1818. if (this.addToolIndex != null) {
  1819. let _index = this.form.admin.sidebar.list.findIndex(
  1820. (i) => i.id == this.addToolIndex
  1821. );
  1822. if (_index == -1) return this.$message.error("未找到对应的菜单");
  1823. list.forEach((i) => (i.typeId = this.addToolIndex + "," + i.id));
  1824. this.form.admin.sidebar.list[_index].children.push(
  1825. ...JSON.parse(JSON.stringify(list))
  1826. );
  1827. this.addToolIndex = null;
  1828. } else {
  1829. list.forEach((i) => (i.typeId = i.id));
  1830. this.form.admin.sidebar.list.push(
  1831. ...JSON.parse(JSON.stringify(list))
  1832. );
  1833. }
  1834. await addOp({
  1835. uid: this.userid,
  1836. cid: this.data.id,
  1837. type: "user_op",
  1838. content: `修改了${this.data.name}的平台侧边栏工具`,
  1839. });
  1840. this.$refs.selectToolDialogRef.close();
  1841. }
  1842. this.$forceUpdate();
  1843. },
  1844. addBanner() {
  1845. this.$refs.addBannerDialogRef.open("", "add");
  1846. },
  1847. addBannerSuccess({ item, type }) {
  1848. if (type == "add") {
  1849. item.id = new Date().getTime();
  1850. if (this.form.admin.banner) {
  1851. item.id = new Date().getTime();
  1852. this.form.admin.banner.push(item);
  1853. } else {
  1854. this.form.admin.banner = [item];
  1855. }
  1856. this.$refs.addBannerDialogRef.close();
  1857. } else if (type == "edit") {
  1858. let index = this.form.admin.banner.findIndex(
  1859. (banner) => banner.id === item.id
  1860. );
  1861. if (index !== -1) {
  1862. this.form.admin.banner.splice(index, 1, item);
  1863. }
  1864. this.$refs.addBannerDialogRef.close();
  1865. }
  1866. this.$forceUpdate();
  1867. },
  1868. editBanner(row) {
  1869. this.$refs.addBannerDialogRef.open(row, "edit");
  1870. },
  1871. // 表头的背景色
  1872. headerCellStyle() {
  1873. return { backgroundColor: "#f1f1f1" };
  1874. },
  1875. moveUp(row, typeId) {
  1876. console.log(typeId);
  1877. if (this.tagType == "desktop") {
  1878. let _index = this.form.desktop.list.findIndex((i) => i.id == row.id);
  1879. if (_index > 0) {
  1880. const itemToMove = this.form.desktop.list.splice(_index, 1)[0];
  1881. this.form.desktop.list.splice(_index - 1, 0, itemToMove);
  1882. }
  1883. } else if (this.tagType == "admin-index") {
  1884. let _index = this.form.admin.index.list.findIndex(
  1885. (i) => i.id == row.id
  1886. );
  1887. if (_index > 0) {
  1888. const itemToMove = this.form.admin.index.list.splice(_index, 1)[0];
  1889. this.form.admin.index.list.splice(_index - 1, 0, itemToMove);
  1890. }
  1891. } else if (this.tagType == "admin-sidebar") {
  1892. let typeIdList = typeId.split(",");
  1893. console.log(typeIdList);
  1894. if (typeIdList.length == 1) {
  1895. let _index = this.form.admin.sidebar.list.findIndex(
  1896. (i) => i.typeId == typeIdList[0]
  1897. );
  1898. if (_index > 0) {
  1899. const itemToMove = this.form.admin.sidebar.list.splice(
  1900. _index,
  1901. 1
  1902. )[0];
  1903. this.form.admin.sidebar.list.splice(_index - 1, 0, itemToMove);
  1904. }
  1905. } else if (typeIdList.length == 2) {
  1906. let _index = this.form.admin.sidebar.list.findIndex(
  1907. (i) => i.typeId == typeIdList[0]
  1908. );
  1909. let _index2 = this.form.admin.sidebar.list[_index].children.findIndex(
  1910. (i) => i.id == typeIdList[1]
  1911. );
  1912. console.log(_index2);
  1913. if (_index2 > 0) {
  1914. const itemToMove = this.form.admin.sidebar.list[
  1915. _index
  1916. ].children.splice(_index2, 1)[0];
  1917. this.form.admin.sidebar.list[_index].children.splice(
  1918. _index2 - 1,
  1919. 0,
  1920. itemToMove
  1921. );
  1922. }
  1923. }
  1924. } else if (this.tagType == "admin-banner") {
  1925. let _index = this.form.admin.banner.findIndex((i) => i.id == row.id);
  1926. if (_index > 0) {
  1927. const itemToMove = this.form.admin.banner.splice(_index, 1)[0];
  1928. this.form.admin.banner.splice(_index - 1, 0, itemToMove);
  1929. }
  1930. } else if (this.tagType == "admin-school") {
  1931. let typeIdList = typeId.split("-");
  1932. console.log(typeIdList);
  1933. if (typeIdList.length == 1) {
  1934. let _index = this.form.admin.school.list.findIndex(
  1935. (i) => i.typeId == typeIdList[0]
  1936. );
  1937. if (_index > 0) {
  1938. const itemToMove = this.form.admin.school.list.splice(_index, 1)[0];
  1939. this.form.admin.school.list.splice(_index - 1, 0, itemToMove);
  1940. }
  1941. } else if (typeIdList.length == 2) {
  1942. let _index = this.form.admin.school.list.findIndex(
  1943. (i) => i.typeId == typeIdList[0]
  1944. );
  1945. let _index2 = this.form.admin.school.list[_index].children.findIndex(
  1946. (i) => i.code == typeIdList[1]
  1947. );
  1948. console.log(_index2);
  1949. if (_index2 > 0) {
  1950. const itemToMove = this.form.admin.school.list[
  1951. _index
  1952. ].children.splice(_index2, 1)[0];
  1953. this.form.admin.school.list[_index].children.splice(
  1954. _index2 - 1,
  1955. 0,
  1956. itemToMove
  1957. );
  1958. }
  1959. }
  1960. }
  1961. },
  1962. moveDown(row, typeId) {
  1963. console.log(typeId);
  1964. if (this.tagType == "desktop") {
  1965. let _index = this.form.desktop.list.findIndex((i) => i.id == row.id);
  1966. if (_index < this.form.desktop.list.length - 1) {
  1967. const itemToMove = this.form.desktop.list.splice(_index, 1)[0];
  1968. this.form.desktop.list.splice(_index + 1, 0, itemToMove);
  1969. }
  1970. } else if (this.tagType == "admin-index") {
  1971. let _index = this.form.admin.index.list.findIndex(
  1972. (i) => i.id == row.id
  1973. );
  1974. if (_index < this.form.admin.index.list.length - 1) {
  1975. const itemToMove = this.form.admin.index.list.splice(_index, 1)[0];
  1976. this.form.admin.index.list.splice(_index + 1, 0, itemToMove);
  1977. }
  1978. } else if (this.tagType == "admin-sidebar") {
  1979. let typeIdList = typeId.split(",");
  1980. if (typeIdList.length == 1) {
  1981. let _index = this.form.admin.sidebar.list.findIndex(
  1982. (i) => i.typeId == typeIdList[0]
  1983. );
  1984. if (_index < this.form.admin.sidebar.list.length - 1) {
  1985. const itemToMove = this.form.admin.sidebar.list.splice(
  1986. _index,
  1987. 1
  1988. )[0];
  1989. this.form.admin.sidebar.list.splice(_index + 1, 0, itemToMove);
  1990. }
  1991. } else if (typeIdList.length == 2) {
  1992. let _index = this.form.admin.sidebar.list.findIndex(
  1993. (i) => i.typeId == typeIdList[0]
  1994. );
  1995. let _index2 = this.form.admin.sidebar.list[_index].children.findIndex(
  1996. (i) => i.id == typeIdList[1]
  1997. );
  1998. if (
  1999. _index2 <
  2000. this.form.admin.sidebar.list[_index].children.length - 1
  2001. ) {
  2002. const itemToMove = this.form.admin.sidebar.list[
  2003. _index
  2004. ].children.splice(_index2, 1)[0];
  2005. this.form.admin.sidebar.list[_index].children.splice(
  2006. _index2 + 1,
  2007. 0,
  2008. itemToMove
  2009. );
  2010. }
  2011. }
  2012. } else if (this.tagType == "admin-banner") {
  2013. let _index = this.form.admin.banner.findIndex((i) => i.id == row.id);
  2014. if (_index < this.form.admin.banner.length - 1) {
  2015. const itemToMove = this.form.admin.banner.splice(_index, 1)[0];
  2016. this.form.admin.banner.splice(_index + 1, 0, itemToMove);
  2017. }
  2018. } else if (this.tagType == "admin-school") {
  2019. let typeIdList = typeId.split("-");
  2020. if (typeIdList.length == 1) {
  2021. let _index = this.form.admin.school.list.findIndex(
  2022. (i) => i.typeId == typeIdList[0]
  2023. );
  2024. if (_index < this.form.admin.school.list.length - 1) {
  2025. const itemToMove = this.form.admin.school.list.splice(_index, 1)[0];
  2026. this.form.admin.school.list.splice(_index + 1, 0, itemToMove);
  2027. }
  2028. } else if (typeIdList.length == 2) {
  2029. let _index = this.form.admin.school.list.findIndex(
  2030. (i) => i.typeId == typeIdList[0]
  2031. );
  2032. let _index2 = this.form.admin.school.list[_index].children.findIndex(
  2033. (i) => i.code == typeIdList[1]
  2034. );
  2035. if (
  2036. _index2 <
  2037. this.form.admin.school.list[_index].children.length - 1
  2038. ) {
  2039. const itemToMove = this.form.admin.school.list[
  2040. _index
  2041. ].children.splice(_index2, 1)[0];
  2042. this.form.admin.school.list[_index].children.splice(
  2043. _index2 + 1,
  2044. 0,
  2045. itemToMove
  2046. );
  2047. }
  2048. }
  2049. }
  2050. },
  2051. del(row, typeId) {
  2052. if (this.tagType == "desktop") {
  2053. const index = this.form.desktop.list.findIndex((i) => i.id === row.id);
  2054. if (index > -1) {
  2055. this.form.desktop.list.splice(index, 1);
  2056. }
  2057. } else if (this.tagType == "admin-index") {
  2058. const index = this.form.admin.index.list.findIndex(
  2059. (i) => i.id === row.id
  2060. );
  2061. if (index > -1) {
  2062. this.form.admin.index.list.splice(index, 1);
  2063. }
  2064. } else if (this.tagType == "admin-sidebar") {
  2065. let typeIdList = typeId.split(",");
  2066. if (typeIdList.length == 1) {
  2067. let _index = this.form.admin.sidebar.list.findIndex(
  2068. (i) => i.typeId == typeIdList[0]
  2069. );
  2070. this.form.admin.sidebar.list.splice(_index, 1);
  2071. } else if (typeIdList.length == 2) {
  2072. let _index = this.form.admin.sidebar.list.findIndex(
  2073. (i) => i.typeId == typeIdList[0]
  2074. );
  2075. let _index2 = this.form.admin.sidebar.list[_index].children.findIndex(
  2076. (i) => i.typeId == typeIdList[1]
  2077. );
  2078. this.form.admin.sidebar.list[_index].children.splice(_index2, 1);
  2079. }
  2080. // this.form.admin.sidebar.list.splice(_index, 1);
  2081. } else if (this.tagType == "admin-banner") {
  2082. const index = this.form.admin.banner.findIndex((i) => i.id === row.id);
  2083. if (index > -1) {
  2084. this.form.admin.banner.splice(index, 1);
  2085. }
  2086. } else if (this.tagType == "admin-school") {
  2087. let typeIdList = typeId.split("-");
  2088. if (typeIdList.length == 1) {
  2089. let _index = this.form.admin.school.list.findIndex(
  2090. (i) => i.typeId == typeIdList[0]
  2091. );
  2092. this.form.admin.school.list.splice(_index, 1);
  2093. } else if (typeIdList.length == 2) {
  2094. let _index = this.form.admin.school.list.findIndex(
  2095. (i) => i.typeId == typeIdList[0]
  2096. );
  2097. let _index2 = this.form.admin.school.list[_index].children.findIndex(
  2098. (i) => i.code == typeIdList[1]
  2099. );
  2100. this.form.admin.school.list[_index].children.splice(_index2, 1);
  2101. }
  2102. // this.form.admin.sidebar.list.splice(_index, 1);
  2103. }
  2104. },
  2105. getToolData() {
  2106. return new Promise((resolve) => {
  2107. let params = [
  2108. {
  2109. functionName: "select_desktopToolByPage",
  2110. status: "",
  2111. page: 1,
  2112. lim: 9999999,
  2113. },
  2114. ];
  2115. this.loading = true;
  2116. this.$ajax
  2117. .post(API_CONFIG.baseUrl, params)
  2118. .then((res) => {
  2119. let _data = res.data;
  2120. let _list = _data[0];
  2121. _list.forEach((i) => {
  2122. i.url = JSON.parse(i.url);
  2123. i.json = JSON.parse(i.json);
  2124. i.argumentList = JSON.parse(i.argumentList);
  2125. });
  2126. this.toolList = _list;
  2127. this.loading = false;
  2128. resolve(_list);
  2129. })
  2130. .catch((err) => {
  2131. console.log(err);
  2132. this.loading = false;
  2133. this.$message.error("获取工具数据失败");
  2134. this.close();
  2135. });
  2136. });
  2137. },
  2138. getAppData() {
  2139. return new Promise((resolve) => {
  2140. let params = [
  2141. {
  2142. functionName: "select_schUsuallyApp",
  2143. userid: "",
  2144. stand: "cn",
  2145. },
  2146. ];
  2147. this.loading = true;
  2148. this.$ajax
  2149. .post(API_CONFIG.baseUrl, params)
  2150. .then((res) => {
  2151. let _data = res.data;
  2152. let _list = _data[0];
  2153. _list.forEach((i) => {
  2154. i.json = JSON.parse(i.json);
  2155. });
  2156. this.appList = _list;
  2157. this.loading = false;
  2158. resolve(_list);
  2159. })
  2160. .catch((err) => {
  2161. console.log(err);
  2162. this.loading = false;
  2163. this.$message.error("获取应用数据失败");
  2164. this.close();
  2165. });
  2166. });
  2167. },
  2168. setJson() {
  2169. let _form = JSON.parse(JSON.stringify(this.form));
  2170. _form.desktop.list = _form.desktop.list.map((i) => i.id);
  2171. _form.admin.index.list = _form.admin.index.list.map((i) => i.id);
  2172. _form.admin.sidebar.list.forEach((i, index) => {
  2173. if (i.children) {
  2174. _form.admin.sidebar.list[index].children = i.children.map(
  2175. (i) => i.id
  2176. );
  2177. } else {
  2178. _form.admin.sidebar.list[index] = i.id;
  2179. }
  2180. });
  2181. _form.admin.cocoFlow = _form.admin.cocoFlow
  2182. ? _form.admin.cocoFlow.map((i) => {
  2183. return { id: i.id, setIcon: i.setIcon }})
  2184. : [];
  2185. _form.admin.cocoFlow2 = _form.admin.cocoFlow2
  2186. ? _form.admin.cocoFlow2.map((i) => {
  2187. return { id: i.id, setIcon: i.setIcon }})
  2188. : [];
  2189. _form.admin.CampusF.appList = _form.admin.CampusF.appList
  2190. ? _form.admin.CampusF.appList.map((i) => {
  2191. return { id: i.id, setIcon: i.setIcon }})
  2192. : [];
  2193. let params = [
  2194. {
  2195. functionName: "update_orgOroid_json_byId",
  2196. id: this.data.id,
  2197. ujson: JSON.stringify(_form),
  2198. type: this.type,
  2199. },
  2200. ];
  2201. console.log('_form',_form);
  2202. this.loading = true;
  2203. this.$ajax
  2204. .post(API_CONFIG.baseUrl, params)
  2205. .then(async (res) => {
  2206. let _data = res.data;
  2207. if (_data == 1) {
  2208. this.$message.success("修改权限成功");
  2209. this.$emit("getData");
  2210. await addOp({
  2211. uid: this.userid,
  2212. cid: this.data.id,
  2213. type: "user_op",
  2214. content: `修改了${this.data.name}的权限设置`,
  2215. });
  2216. this.close();
  2217. } else {
  2218. this.$message.error("修改权限失败");
  2219. }
  2220. this.loading = false;
  2221. })
  2222. .catch((err) => {
  2223. console.log(err);
  2224. this.loading = false;
  2225. this.$message.error("修改权限失败");
  2226. });
  2227. },
  2228. setDataListToo(toolList = [], appList = []) {
  2229. let _form = JSON.parse(JSON.stringify(this.form));
  2230. _form.desktop.list.forEach((i, index) => {
  2231. let _index = toolList.findIndex((i2) => i == i2.id);
  2232. if (_index != -1) {
  2233. _form.desktop.list[index] = toolList[_index];
  2234. } else {
  2235. console.log("无工具", i);
  2236. }
  2237. });
  2238. if (_form.admin.cocoFlow) {
  2239. _form.admin.cocoFlow.forEach((i, index) => {
  2240. let _index = appList.findIndex((i2) => i.id == i2.id);
  2241. if (_index != -1) {
  2242. let _setData = appList[_index];
  2243. _setData.setIcon = i.setIcon;
  2244. _form.admin.cocoFlow[index] = _setData;
  2245. } else {
  2246. console.log("无应用", i);
  2247. }
  2248. });
  2249. }
  2250. if (_form.admin.cocoFlow2) {
  2251. _form.admin.cocoFlow2.forEach((i, index) => {
  2252. let _index = appList.findIndex((i2) => i.id == i2.id);
  2253. if (_index != -1) {
  2254. let _setData = appList[_index];
  2255. _setData.setIcon = i.setIcon;
  2256. _form.admin.cocoFlow2[index] = _setData;
  2257. } else {
  2258. console.log("无应用", i);
  2259. }
  2260. });
  2261. }
  2262. if (_form.admin.CampusF.appList && _form.admin.CampusF.appList.length) {
  2263. _form.admin.CampusF.appList.forEach((i, index) => {
  2264. let _index = appList.findIndex((i2) => i.id == i2.id);
  2265. if (_index != -1) {
  2266. let _setData = appList[_index];
  2267. _setData.setIcon = i.setIcon;
  2268. _form.admin.CampusF.appList[index] = _setData;
  2269. } else {
  2270. console.log("无应用", i);
  2271. }
  2272. });
  2273. }
  2274. _form.admin.index.list.forEach((i, index) => {
  2275. let _index = toolList.findIndex((i2) => i == i2.id);
  2276. if (_index != -1) {
  2277. _form.admin.index.list[index] = toolList[_index];
  2278. } else {
  2279. console.log("无工具", i);
  2280. }
  2281. });
  2282. _form.admin.sidebar.list.forEach((i, index) => {
  2283. if (i.children) {
  2284. i.children.forEach((i2, index2) => {
  2285. let _toolList = JSON.parse(JSON.stringify(toolList));
  2286. let _index = _toolList.findIndex((i3) => i2 == i3.id);
  2287. if (_index != -1) {
  2288. _form.admin.sidebar.list[index].children[index2] =
  2289. _toolList[_index];
  2290. _form.admin.sidebar.list[index].children[index2].typeId =
  2291. _form.admin.sidebar.list[index].typeId +
  2292. "," +
  2293. _toolList[_index].id;
  2294. } else {
  2295. console.log("无工具", i);
  2296. }
  2297. });
  2298. } else {
  2299. let _toolList = JSON.parse(JSON.stringify(toolList));
  2300. let _index = _toolList.findIndex((i2) => i == i2.id);
  2301. if (_index != -1) {
  2302. _form.admin.sidebar.list[index] = _toolList[_index];
  2303. _form.admin.sidebar.list[index].typeId =
  2304. _form.admin.sidebar.list[index].id;
  2305. } else {
  2306. console.log("无工具", i);
  2307. }
  2308. }
  2309. });
  2310. this.form = _form;
  2311. this.$forceUpdate();
  2312. },
  2313. addToolSidebar(id) {
  2314. this.addToolIndex = id;
  2315. let index = this.form.admin.sidebar.list.findIndex((i) => i.id == id);
  2316. if (index == -1) return this.$message.error("未找到对应菜单");
  2317. let selectList = [];
  2318. selectList = this.form.admin.sidebar.list[index].children;
  2319. this.$refs.selectToolDialogRef.open(
  2320. selectList,
  2321. "admin-sidebar",
  2322. this.form.desktop.list
  2323. );
  2324. },
  2325. async addMenuSuccess({ item, type, tagType }) {
  2326. console.log(item, type);
  2327. if (tagType == "admin-sidebar") {
  2328. if (type == "add") {
  2329. item.id = String(new Date().getTime());
  2330. item.typeId = item.id;
  2331. this.form.admin.sidebar.list.push(item);
  2332. await addOp({
  2333. uid: this.userid,
  2334. cid: "",
  2335. type: "user_op",
  2336. content: `添加了侧边栏一级菜单:${item.menuName}`,
  2337. });
  2338. } else if (type == "edit") {
  2339. let _index = this.form.admin.sidebar.list.findIndex(
  2340. (i) => i.typeId == item.typeId
  2341. );
  2342. if (_index != -1) {
  2343. let _sidebar = JSON.parse(JSON.stringify(this.form.admin.sidebar));
  2344. _sidebar.list[_index] = item;
  2345. this.form.admin.sidebar = JSON.parse(JSON.stringify(_sidebar));
  2346. this.$forceUpdate();
  2347. await addOp({
  2348. uid: this.userid,
  2349. cid: "",
  2350. type: "user_op",
  2351. content: `修改了侧边栏一级菜单:${item.menuName}`,
  2352. });
  2353. }
  2354. }
  2355. } else if (tagType == "admin-school") {
  2356. if (type == "add") {
  2357. item.id = String(new Date().getTime());
  2358. item.typeId = item.id;
  2359. delete item.menuActiveIcon;
  2360. this.form.admin.school.list.push(item);
  2361. await addOp({
  2362. uid: this.userid,
  2363. cid: "",
  2364. type: "user_op",
  2365. content: `添加了学校一级菜单:${item.menuName}`,
  2366. });
  2367. } else if (type == "edit") {
  2368. let _index = this.form.admin.school.list.findIndex(
  2369. (i) => i.typeId == item.typeId
  2370. );
  2371. if (_index != -1) {
  2372. let _school = JSON.parse(JSON.stringify(this.form.admin.school));
  2373. _school.list[_index] = item;
  2374. this.form.admin.school = JSON.parse(JSON.stringify(_school));
  2375. this.$forceUpdate();
  2376. await addOp({
  2377. uid: this.userid,
  2378. cid: "",
  2379. type: "user_op",
  2380. content: `修改了了学校一级菜单:${item.menuName}`,
  2381. });
  2382. }
  2383. }
  2384. }
  2385. this.$refs.addMenuDialogRef.close();
  2386. },
  2387. addMenu(type) {
  2388. this.$refs.addMenuDialogRef.open("", "add", type);
  2389. },
  2390. editMenu(row) {
  2391. this.$refs.addMenuDialogRef.open(row, "edit", this.tagType);
  2392. },
  2393. addApp() {
  2394. let _list = [];
  2395. let _max = 0
  2396. if (this.tagType == "admin-cocoFlow") {
  2397. _list = this.form.admin.cocoFlow ? this.form.admin.cocoFlow : [];
  2398. _max = 8;
  2399. } else if (this.tagType == "admin-cocoFlow2") {
  2400. _list = this.form.admin.cocoFlow2 ? this.form.admin.cocoFlow2 : [];
  2401. _max = 4;
  2402. } else if (this.tagType == "admin-feature") {
  2403. _list = this.form.admin.CampusF.appList ? this.form.admin.CampusF.appList : [];
  2404. _max = 8;
  2405. }
  2406. this.$refs.selectAppDialogRef.open({
  2407. select: _list,
  2408. max:_max
  2409. });
  2410. },
  2411. moveApp(id, type) {
  2412. if(this.tagType=='admin-cocoFlow'){
  2413. let _index = this.form.admin.cocoFlow.findIndex((i) => i.id == id);
  2414. if (type == 0 && _index != 0) {
  2415. //上移
  2416. let temp = this.form.admin.cocoFlow[_index - 1];
  2417. this.form.admin.cocoFlow[_index - 1] = this.form.admin.cocoFlow[_index];
  2418. this.form.admin.cocoFlow[_index] = temp;
  2419. } else if (type == 1 && _index != this.form.admin.cocoFlow.length - 1) {
  2420. let temp = this.form.admin.cocoFlow[_index + 1];
  2421. this.form.admin.cocoFlow[_index + 1] = this.form.admin.cocoFlow[_index];
  2422. this.form.admin.cocoFlow[_index] = temp;
  2423. }
  2424. }else if(this.tagType=='admin-cocoFlow2'){
  2425. let _index = this.form.admin.cocoFlow2.findIndex((i) => i.id == id);
  2426. if (type == 0 && _index != 0) {
  2427. //上移
  2428. let temp = this.form.admin.cocoFlow2[_index - 1];
  2429. this.form.admin.cocoFlow2[_index - 1] = this.form.admin.cocoFlow2[_index];
  2430. this.form.admin.cocoFlow2[_index] = temp;
  2431. } else if (type == 1 && _index != this.form.admin.cocoFlow2.length - 1) {
  2432. let temp = this.form.admin.cocoFlow2[_index + 1];
  2433. this.form.admin.cocoFlow2[_index + 1] = this.form.admin.cocoFlow2[_index];
  2434. this.form.admin.cocoFlow2[_index] = temp;
  2435. }
  2436. }else if(this.tagType=='admin-feature'){
  2437. let _index = this.form.admin.CampusF.appList.findIndex((i) => i.id == id);
  2438. if (type == 0 && _index != 0) {
  2439. //上移
  2440. let temp = this.form.admin.CampusF.appList[_index - 1];
  2441. this.form.admin.CampusF.appList[_index - 1] = this.form.admin.CampusF.appList[_index];
  2442. this.form.admin.CampusF.appList[_index] = temp;
  2443. } else if (type == 1 && _index != this.form.admin.CampusF.appList.length - 1) {
  2444. let temp = this.form.admin.CampusF.appList[_index + 1];
  2445. this.form.admin.CampusF.appList[_index + 1] = this.form.admin.CampusF.appList[_index];
  2446. this.form.admin.CampusF.appList[_index] = temp;
  2447. }
  2448. }
  2449. this.$forceUpdate();
  2450. },
  2451. selectAppSuccess(data) {
  2452. if (this.tagType == "admin-cocoFlow") {
  2453. this.form.admin.cocoFlow = JSON.parse(JSON.stringify(data));
  2454. } else if (this.tagType == "admin-cocoFlow2") {
  2455. this.form.admin.cocoFlow2 = JSON.parse(JSON.stringify(data));
  2456. } else if (this.tagType == "admin-feature") {
  2457. this.form.admin.CampusF.appList = JSON.parse(JSON.stringify(data));
  2458. }
  2459. this.$forceUpdate();
  2460. this.$refs.selectAppDialogRef.close();
  2461. },
  2462. addSchool(id) {
  2463. console.log("👉", id);
  2464. let _children = this.form.admin.school.list.find(
  2465. (i) => i.id == id
  2466. ).children;
  2467. this.$refs.selectSchoolDialogRef.open(_children, id);
  2468. },
  2469. selectSchoolSuccess({ data, type }) {
  2470. let _data = JSON.parse(JSON.stringify(data));
  2471. _data.forEach((i) => {
  2472. delete i.json;
  2473. i.typeId = `${type}-${i.code}`;
  2474. });
  2475. this.form.admin.school.list.find((i) => i.id == type).children = _data;
  2476. this.$refs.selectSchoolDialogRef.close();
  2477. },
  2478. async updateIconCocoFLow(index) {
  2479. let _url = await this.uploadFile("image/*");
  2480. if (_url) {
  2481. if (this.tagType == "admin-cocoFlow") {
  2482. let _data = JSON.parse(JSON.stringify(this.form.admin.cocoFlow));
  2483. _data[index].setIcon = _url;
  2484. this.form.admin.cocoFlow = _data;
  2485. } else if (this.tagType == "admin-cocoFlow2") {
  2486. let _data = JSON.parse(JSON.stringify(this.form.admin.cocoFlow2));
  2487. _data[index].setIcon = _url;
  2488. this.form.admin.cocoFlow2 = _data;
  2489. } else if (this.tagType == "admin-feature") {
  2490. let _data = JSON.parse(JSON.stringify(this.form.admin.CampusF.appList));
  2491. _data[index].setIcon = _url;
  2492. this.form.admin.CampusF.appList = _data;
  2493. }
  2494. this.$forceUpdate();
  2495. } else {
  2496. return console.log("无图片");
  2497. }
  2498. },
  2499. },
  2500. };
  2501. </script>
  2502. <style scoped>
  2503. .permissionSettingDialog >>> .el-dialog__header {
  2504. padding: 15px 20px;
  2505. background: #454545;
  2506. }
  2507. .permissionSettingDialog >>> .el-dialog__title {
  2508. color: #fff;
  2509. }
  2510. .el-dialog__footer {
  2511. padding: 10px 0 0 10px;
  2512. }
  2513. .ps_area {
  2514. width: 100%;
  2515. height: 800px;
  2516. }
  2517. .pa_a_head {
  2518. width: 100%;
  2519. height: 40px;
  2520. display: flex;
  2521. align-items: center;
  2522. box-sizing: border-box;
  2523. overflow: auto;
  2524. border-bottom: 1px solid #e4e7ed;
  2525. }
  2526. .pa_a_h_tag {
  2527. width: calc(100%);
  2528. height: 100%;
  2529. display: flex;
  2530. align-items: center;
  2531. box-sizing: border-box;
  2532. overflow: auto;
  2533. }
  2534. .pa_a_h_tag > span {
  2535. font-size: 16px;
  2536. display: block;
  2537. width: auto;
  2538. height: 100%;
  2539. padding: 0 20px;
  2540. display: flex;
  2541. justify-content: center;
  2542. align-items: center;
  2543. margin-right: 10px;
  2544. cursor: pointer;
  2545. transition: 0.2s;
  2546. white-space: nowrap;
  2547. }
  2548. .pa_a_h_active {
  2549. color: #409eff;
  2550. }
  2551. .pa_a_editBox {
  2552. width: 100%;
  2553. height: 100%;
  2554. overflow: auto;
  2555. }
  2556. .editArea {
  2557. width: 100%;
  2558. height: auto;
  2559. box-sizing: border-box;
  2560. }
  2561. .ea_basics_input {
  2562. width: 100%;
  2563. height: auto;
  2564. margin-top: 20px;
  2565. display: flex;
  2566. align-items: center;
  2567. }
  2568. .ea_basics_input > span {
  2569. display: block;
  2570. width: 60px;
  2571. height: auto;
  2572. }
  2573. .ea_basics_logo {
  2574. margin-top: 30px;
  2575. width: auto;
  2576. height: auto;
  2577. cursor: pointer;
  2578. display: flex;
  2579. align-items: center;
  2580. }
  2581. .ea_basics_logo > span {
  2582. display: block;
  2583. min-width: 80px;
  2584. }
  2585. .ea_basics_logo >>> .image-slot {
  2586. width: 100%;
  2587. height: 100%;
  2588. font-size: 22px;
  2589. display: flex;
  2590. justify-content: center;
  2591. align-items: center;
  2592. }
  2593. .ea_item {
  2594. width: 83px;
  2595. height: 83px;
  2596. margin: 10px;
  2597. display: flex;
  2598. align-items: center;
  2599. justify-content: center;
  2600. }
  2601. .pa_a_eb_desktop {
  2602. display: flex;
  2603. flex-direction: column;
  2604. padding: 0;
  2605. }
  2606. .ea_add {
  2607. width: 200px;
  2608. display: flex;
  2609. align-items: center;
  2610. justify-content: flex-end;
  2611. }
  2612. .urlItemBox {
  2613. display: flex;
  2614. flex-wrap: wrap;
  2615. }
  2616. .urlItem {
  2617. width: 400px;
  2618. height: 300px;
  2619. overflow: auto;
  2620. position: relative;
  2621. box-sizing: border-box;
  2622. border-bottom: solid 1px #ebeef5;
  2623. }
  2624. .urlItem:nth-child(2n) {
  2625. margin-left: 20px;
  2626. }
  2627. .urlItem > span {
  2628. font-size: 18px;
  2629. font-weight: bold;
  2630. }
  2631. .ui_m_image {
  2632. width: 40px;
  2633. height: 40px;
  2634. float: left;
  2635. display: flex;
  2636. align-items: center;
  2637. }
  2638. .ui_message > div {
  2639. display: flex;
  2640. align-items: center;
  2641. }
  2642. .ui_message > div > span {
  2643. white-space: nowrap;
  2644. }
  2645. .appList {
  2646. display: flex;
  2647. flex-wrap: wrap;
  2648. box-sizing: border-box;
  2649. padding-top: 20px;
  2650. }
  2651. .appItem {
  2652. width: 298px;
  2653. height: 100px;
  2654. background-color: white;
  2655. box-sizing: border-box;
  2656. border: solid 1px #f3f4f6;
  2657. padding: 10px;
  2658. border-radius: 8px;
  2659. cursor: pointer;
  2660. margin-bottom: 20px;
  2661. margin-right: 20px;
  2662. display: flex;
  2663. align-items: center;
  2664. justify-content: center;
  2665. transition: 0.3s;
  2666. }
  2667. .appActive {
  2668. border-color: #409eff;
  2669. box-shadow: 0px 6px 30px 5px #00000015;
  2670. }
  2671. .appItem:hover {
  2672. box-shadow: 0px 6px 30px 5px #00000015;
  2673. }
  2674. .ai_left {
  2675. width: 80px;
  2676. height: 80px;
  2677. box-sizing: border-box;
  2678. padding: 10px;
  2679. margin-right: 10px;
  2680. }
  2681. .ai_right {
  2682. width: calc(100% - 80px - 10px);
  2683. position: relative;
  2684. }
  2685. .ai_right > div {
  2686. max-width: calc(100% - 50px);
  2687. font-weight: bold;
  2688. overflow: hidden;
  2689. white-space: nowrap;
  2690. text-overflow: ellipsis;
  2691. font-size: 16px;
  2692. color: #000;
  2693. margin-bottom: 10px;
  2694. }
  2695. .ai_r_btn {
  2696. width: auto;
  2697. display: flex;
  2698. position: absolute;
  2699. right: 0;
  2700. top: 0;
  2701. }
  2702. .ai_r_btn > svg {
  2703. width: 10px;
  2704. height: 10px;
  2705. margin-left: 15px;
  2706. cursor: pointer;
  2707. }
  2708. .ai_right > span {
  2709. font-size: 14px;
  2710. color: #00000099;
  2711. display: -webkit-box;
  2712. -webkit-box-orient: vertical;
  2713. -webkit-line-clamp: 2;
  2714. overflow: hidden;
  2715. text-overflow: ellipsis;
  2716. }
  2717. .pa_a_eb_feature{
  2718. display: flex;
  2719. flex-direction: column;
  2720. }
  2721. .ea_appListTit{
  2722. height: 40px;
  2723. line-height: 40px;
  2724. margin: 20px 0 0;
  2725. }
  2726. .ea_appList{
  2727. }
  2728. </style>