eoss-ui 0.7.53 → 0.7.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/lib/button-group.js +2 -2
  2. package/lib/button.js +2 -2
  3. package/lib/calogin.js +235 -235
  4. package/lib/checkbox-group.js +2 -2
  5. package/lib/config/api.js +1 -1
  6. package/lib/data-table-form.js +2 -2
  7. package/lib/data-table.js +2 -2
  8. package/lib/date-picker.js +2 -2
  9. package/lib/dialog.js +2 -2
  10. package/lib/eoss-ui.common.js +882 -795
  11. package/lib/flow-group.js +2 -2
  12. package/lib/flow-list.js +83 -83
  13. package/lib/flow.js +294 -292
  14. package/lib/form.js +2 -2
  15. package/lib/handle-user.js +2 -2
  16. package/lib/handler.js +2 -2
  17. package/lib/icon.js +2 -2
  18. package/lib/icons.js +1 -1
  19. package/lib/index.js +1 -1
  20. package/lib/input-number.js +2 -2
  21. package/lib/input.js +2 -2
  22. package/lib/login.js +6 -6
  23. package/lib/main.js +238 -153
  24. package/lib/nav.js +2 -2
  25. package/lib/notify.js +2 -2
  26. package/lib/page.js +2 -2
  27. package/lib/pagination.js +2 -2
  28. package/lib/player.js +2 -2
  29. package/lib/qr-code.js +15 -15
  30. package/lib/radio-group.js +2 -2
  31. package/lib/retrial-auth.js +2 -2
  32. package/lib/select-ganged.js +2 -2
  33. package/lib/select.js +2 -2
  34. package/lib/selector-panel.js +2 -2
  35. package/lib/selector.js +2 -2
  36. package/lib/sizer.js +2 -2
  37. package/lib/steps.js +2 -2
  38. package/lib/switch.js +2 -2
  39. package/lib/table-form.js +2 -2
  40. package/lib/tabs.js +2 -2
  41. package/lib/theme-chalk/base.css +1 -1
  42. package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
  43. package/lib/theme-chalk/fonts/iconfont.woff +0 -0
  44. package/lib/theme-chalk/icon.css +1 -1
  45. package/lib/theme-chalk/index.css +1 -1
  46. package/lib/theme-chalk/main.css +1 -1
  47. package/lib/theme-chalk/menu.css +1 -1
  48. package/lib/theme-chalk/simplicity.css +1 -1
  49. package/lib/theme-chalk/sizer.css +1 -1
  50. package/lib/theme-chalk/upload.css +1 -1
  51. package/lib/tips.js +2 -2
  52. package/lib/tree-group.js +2 -2
  53. package/lib/tree.js +2 -2
  54. package/lib/upload.js +15 -15
  55. package/lib/wujie.js +2 -2
  56. package/lib/wxlogin.js +2 -2
  57. package/package.json +160 -160
  58. package/packages/.DS_Store +0 -0
  59. package/packages/button/index.js +5 -5
  60. package/packages/button/src/main.vue +418 -418
  61. package/packages/button-group/index.js +5 -5
  62. package/packages/button-group/src/main.vue +346 -346
  63. package/packages/calendar/index.js +5 -5
  64. package/packages/calogin/.DS_Store +0 -0
  65. package/packages/calogin/index.js +5 -5
  66. package/packages/calogin/src/main.vue +412 -412
  67. package/packages/calogin/src/plugin.js +915 -915
  68. package/packages/card/index.js +5 -5
  69. package/packages/card/src/main.vue +156 -156
  70. package/packages/cascader/index.js +5 -5
  71. package/packages/cascader/src/main.vue +168 -168
  72. package/packages/checkbox-group/index.js +5 -5
  73. package/packages/checkbox-group/src/main.vue +333 -333
  74. package/packages/clients/index.js +5 -5
  75. package/packages/clients/src/main.vue +151 -151
  76. package/packages/data-table/index.js +5 -5
  77. package/packages/data-table/src/children.vue +39 -39
  78. package/packages/data-table/src/column.vue +992 -992
  79. package/packages/data-table/src/main.vue +1840 -1840
  80. package/packages/data-table/src/sizer.vue +195 -195
  81. package/packages/data-table-form/index.js +5 -5
  82. package/packages/data-table-form/src/checkbox.vue +101 -101
  83. package/packages/data-table-form/src/colgroup.vue +17 -17
  84. package/packages/data-table-form/src/main.vue +181 -181
  85. package/packages/data-table-form/src/radio.vue +65 -65
  86. package/packages/data-table-form/src/table.vue +233 -233
  87. package/packages/data-table-form/src/tbody.vue +336 -336
  88. package/packages/data-table-form/src/thead.vue +68 -68
  89. package/packages/date-picker/.DS_Store +0 -0
  90. package/packages/date-picker/index.js +5 -5
  91. package/packages/date-picker/src/.DS_Store +0 -0
  92. package/packages/date-picker/src/main.vue +236 -236
  93. package/packages/dialog/.DS_Store +0 -0
  94. package/packages/dialog/index.js +5 -5
  95. package/packages/enable-drag/index.js +5 -5
  96. package/packages/enterprise/index.js +5 -5
  97. package/packages/enterprise/src/main.vue +66 -66
  98. package/packages/error-page/index.js +5 -5
  99. package/packages/error-page/src/main.vue +44 -44
  100. package/packages/flow/.DS_Store +0 -0
  101. package/packages/flow/index.js +5 -5
  102. package/packages/flow/src/.DS_Store +0 -0
  103. package/packages/flow/src/component/Circulate.vue +413 -413
  104. package/packages/flow/src/component/CommonOpinions.vue +373 -373
  105. package/packages/flow/src/component/CustomPreset.vue +322 -322
  106. package/packages/flow/src/component/FileList.vue +97 -97
  107. package/packages/flow/src/component/FreeCirculation.vue +241 -240
  108. package/packages/flow/src/component/Preset.vue +255 -255
  109. package/packages/flow/src/component/SendMsg.vue +242 -242
  110. package/packages/flow/src/component/TimeLimit.vue +190 -190
  111. package/packages/flow/src/component/taskUnionExamine.vue +756 -756
  112. package/packages/flow/src/form.vue +121 -121
  113. package/packages/flow/src/freeStartFlow.vue +2846 -2846
  114. package/packages/flow/src/main.vue +3878 -3878
  115. package/packages/flow/src/processForm.vue +1365 -1365
  116. package/packages/flow/src/processReject.vue +309 -309
  117. package/packages/flow/src/reset.vue +942 -942
  118. package/packages/flow/src/startTaskRead.vue +692 -692
  119. package/packages/flow/src/supervise.vue +159 -159
  120. package/packages/flow/src/table.vue +58 -58
  121. package/packages/flow-group/index.js +5 -5
  122. package/packages/flow-group/src/main.vue +717 -717
  123. package/packages/flow-list/.DS_Store +0 -0
  124. package/packages/flow-list/index.js +5 -5
  125. package/packages/flow-list/src/main.vue +1801 -1801
  126. package/packages/form/.DS_Store +0 -0
  127. package/packages/form/index.js +5 -5
  128. package/packages/form/src/main.vue +3901 -3901
  129. package/packages/form/src/table.vue +1512 -1512
  130. package/packages/handle-user/index.js +5 -5
  131. package/packages/handle-user/src/main.vue +137 -137
  132. package/packages/handler/index.js +5 -5
  133. package/packages/handler/src/main.vue +496 -496
  134. package/packages/icon/.DS_Store +0 -0
  135. package/packages/icon/index.js +5 -5
  136. package/packages/icon/src/main.vue +104 -104
  137. package/packages/icons/index.js +5 -5
  138. package/packages/icons/src/icon.json +1 -1
  139. package/packages/icons/src/main.vue +81 -81
  140. package/packages/input/index.js +5 -5
  141. package/packages/input/src/main.vue +356 -356
  142. package/packages/input-number/index.js +5 -5
  143. package/packages/input-number/src/main.vue +106 -106
  144. package/packages/label/index.js +5 -5
  145. package/packages/label/src/main.vue +457 -457
  146. package/packages/layout/index.js +5 -5
  147. package/packages/layout/src/item.vue +152 -152
  148. package/packages/layout/src/main.vue +31 -31
  149. package/packages/login/.DS_Store +0 -0
  150. package/packages/login/index.js +5 -5
  151. package/packages/login/src/main.vue +2082 -2082
  152. package/packages/login/src/resetPassword.vue +557 -557
  153. package/packages/main/.DS_Store +0 -0
  154. package/packages/main/index.js +5 -5
  155. package/packages/main/src/.DS_Store +0 -0
  156. package/packages/main/src/default/message.vue +249 -249
  157. package/packages/main/src/default/notice.vue +157 -157
  158. package/packages/main/src/default/userinfo.vue +503 -503
  159. package/packages/main/src/public/online.vue +89 -89
  160. package/packages/main/src/public/search.vue +464 -464
  161. package/packages/main/src/public/settings.vue +227 -227
  162. package/packages/main/src/simplicity/apps.vue +388 -388
  163. package/packages/main/src/simplicity/avatar.vue +82 -82
  164. package/packages/main/src/simplicity/handler.vue +160 -160
  165. package/packages/main/src/simplicity/index.vue +2307 -2277
  166. package/packages/main/src/simplicity/lists.vue +84 -84
  167. package/packages/main/src/simplicity/menu-list.vue +135 -135
  168. package/packages/main/src/simplicity/message.vue +293 -293
  169. package/packages/main/src/simplicity/notice.vue +222 -222
  170. package/packages/main/src/simplicity/router-page.vue +45 -45
  171. package/packages/main/src/simplicity/sub-menu.vue +274 -274
  172. package/packages/main/src/simplicity/user.vue +259 -259
  173. package/packages/main/src/simplicity/userinfo.vue +401 -401
  174. package/packages/menu/.DS_Store +0 -0
  175. package/packages/menu/index.js +5 -5
  176. package/packages/menu/src/main.vue +595 -595
  177. package/packages/nav/index.js +5 -5
  178. package/packages/nav/src/main.vue +351 -351
  179. package/packages/notify/index.js +5 -5
  180. package/packages/notify/src/main.vue +538 -538
  181. package/packages/page/index.js +5 -5
  182. package/packages/page/src/main.vue +167 -167
  183. package/packages/pagination/index.js +5 -5
  184. package/packages/pagination/src/main.vue +96 -96
  185. package/packages/player/index.js +5 -5
  186. package/packages/player/src/main.vue +194 -194
  187. package/packages/qr-code/index.js +5 -5
  188. package/packages/qr-code/src/main.vue +170 -170
  189. package/packages/radio-group/index.js +6 -6
  190. package/packages/radio-group/src/main.vue +319 -319
  191. package/packages/retrial-auth/index.js +5 -5
  192. package/packages/retrial-auth/src/main.vue +280 -280
  193. package/packages/select/.DS_Store +0 -0
  194. package/packages/select/index.js +5 -5
  195. package/packages/select/src/main.vue +782 -782
  196. package/packages/select-ganged/index.js +5 -5
  197. package/packages/select-ganged/src/main.vue +724 -724
  198. package/packages/selector/.DS_Store +0 -0
  199. package/packages/selector/index.js +5 -5
  200. package/packages/selector/src/main.vue +761 -761
  201. package/packages/selector-panel/.DS_Store +0 -0
  202. package/packages/selector-panel/index.js +5 -5
  203. package/packages/selector-panel/src/main.vue +1027 -1027
  204. package/packages/selector-panel/src/selection.vue +170 -170
  205. package/packages/selector-panel/src/tree.vue +129 -129
  206. package/packages/sizer/index.js +5 -5
  207. package/packages/sizer/src/main.vue +254 -254
  208. package/packages/steps/index.js +5 -5
  209. package/packages/steps/src/main.vue +181 -181
  210. package/packages/switch/index.js +5 -5
  211. package/packages/switch/src/main.vue +170 -170
  212. package/packages/table-form/index.js +5 -5
  213. package/packages/tabs/index.js +5 -5
  214. package/packages/tabs/src/main.vue +788 -788
  215. package/packages/tabs-panel/index.js +5 -5
  216. package/packages/tabs-panel/src/main.vue +29 -29
  217. package/packages/theme-chalk/lib/base.css +1 -1
  218. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  219. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  220. package/packages/theme-chalk/lib/icon.css +1 -1
  221. package/packages/theme-chalk/lib/index.css +1 -1
  222. package/packages/theme-chalk/lib/main.css +1 -1
  223. package/packages/theme-chalk/lib/menu.css +1 -1
  224. package/packages/theme-chalk/lib/simplicity.css +1 -1
  225. package/packages/theme-chalk/lib/sizer.css +1 -1
  226. package/packages/theme-chalk/lib/upload.css +1 -1
  227. package/packages/theme-chalk/src/.DS_Store +0 -0
  228. package/packages/theme-chalk/src/base.scss +261 -261
  229. package/packages/theme-chalk/src/button-group.scss +176 -176
  230. package/packages/theme-chalk/src/button.scss +24 -24
  231. package/packages/theme-chalk/src/calendar.scss +113 -113
  232. package/packages/theme-chalk/src/card.scss +99 -99
  233. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  234. package/packages/theme-chalk/src/clients.scss +87 -87
  235. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  236. package/packages/theme-chalk/src/data-table.scss +297 -297
  237. package/packages/theme-chalk/src/date-picker.scss +7 -7
  238. package/packages/theme-chalk/src/dialog.scss +77 -77
  239. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  240. package/packages/theme-chalk/src/enterprise.scss +5 -5
  241. package/packages/theme-chalk/src/error-page.scss +18 -18
  242. package/packages/theme-chalk/src/flow-group.scss +110 -110
  243. package/packages/theme-chalk/src/flow-list.scss +39 -39
  244. package/packages/theme-chalk/src/flow.scss +351 -351
  245. package/packages/theme-chalk/src/fonts/iconfont.ttf +0 -0
  246. package/packages/theme-chalk/src/fonts/iconfont.woff +0 -0
  247. package/packages/theme-chalk/src/form.scss +501 -501
  248. package/packages/theme-chalk/src/handle-user.scss +40 -40
  249. package/packages/theme-chalk/src/handler.scss +148 -148
  250. package/packages/theme-chalk/src/icon.scss +1608 -1540
  251. package/packages/theme-chalk/src/icons.scss +99 -99
  252. package/packages/theme-chalk/src/input.scss +9 -9
  253. package/packages/theme-chalk/src/label.scss +24 -24
  254. package/packages/theme-chalk/src/layout.scss +46 -46
  255. package/packages/theme-chalk/src/login.scss +1006 -1006
  256. package/packages/theme-chalk/src/main.scss +663 -663
  257. package/packages/theme-chalk/src/menu.scss +224 -224
  258. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  259. package/packages/theme-chalk/src/nav.scss +111 -111
  260. package/packages/theme-chalk/src/page.scss +3 -3
  261. package/packages/theme-chalk/src/pagination.scss +29 -29
  262. package/packages/theme-chalk/src/player.scss +9 -9
  263. package/packages/theme-chalk/src/qr-code.scss +17 -17
  264. package/packages/theme-chalk/src/radio-group.scss +9 -9
  265. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  266. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  267. package/packages/theme-chalk/src/select.scss +8 -8
  268. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  269. package/packages/theme-chalk/src/selector.scss +114 -114
  270. package/packages/theme-chalk/src/simplicity.scss +1404 -1395
  271. package/packages/theme-chalk/src/sizer.scss +36 -36
  272. package/packages/theme-chalk/src/steps.scss +88 -88
  273. package/packages/theme-chalk/src/switch.scss +3 -3
  274. package/packages/theme-chalk/src/table-form.scss +1 -1
  275. package/packages/theme-chalk/src/tabs.scss +87 -87
  276. package/packages/theme-chalk/src/tips.scss +7 -7
  277. package/packages/theme-chalk/src/toolbar.scss +179 -179
  278. package/packages/theme-chalk/src/tree-group.scss +72 -72
  279. package/packages/theme-chalk/src/tree.scss +165 -165
  280. package/packages/theme-chalk/src/upload.scss +172 -172
  281. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  282. package/packages/tips/index.js +5 -5
  283. package/packages/tips/src/main.vue +141 -141
  284. package/packages/toolbar/index.js +5 -5
  285. package/packages/toolbar/src/main.vue +430 -430
  286. package/packages/tree/index.js +5 -5
  287. package/packages/tree-group/index.js +5 -5
  288. package/packages/upload/.DS_Store +0 -0
  289. package/packages/upload/index.js +5 -5
  290. package/packages/upload/src/main.vue +1344 -1344
  291. package/packages/upload/src/picture.js +15 -15
  292. package/packages/wujie/index.js +5 -5
  293. package/packages/wujie/src/main.vue +145 -145
  294. package/packages/wxlogin/index.js +5 -5
  295. package/packages/wxlogin/src/main.vue +128 -128
  296. package/src/.DS_Store +0 -0
  297. package/src/config/api.js +317 -317
  298. package/src/config/image.js +2 -2
  299. package/src/index.js +163 -163
  300. package/src/utils/.DS_Store +0 -0
  301. package/src/utils/bus.js +3 -3
  302. package/src/utils/date-util.js +312 -312
  303. package/src/utils/http.js +50 -50
  304. package/src/utils/rules.js +18 -18
  305. package/src/utils/store.js +21 -21
  306. package/src/utils/webSocket.js +107 -107
@@ -1,2277 +1,2307 @@
1
- <template>
2
- <div class="es-main">
3
- <div class="es-simplicity-side">
4
- <img class="es-simplicity-logo" v-if="mainLogo" :src="mainLogo" />
5
- <div
6
- class="es-simplicity-org-name es-text-ellipsis-row4"
7
- :title="simpleUserInfo.orgShortName || simpleUserInfo.orgName"
8
- >
9
- {{ simpleUserInfo.orgShortName || simpleUserInfo.orgName }}
10
- </div>
11
- <el-popover
12
- class="es-simplicity-user-popover"
13
- placement="right-start"
14
- width="360"
15
- trigger="click"
16
- >
17
- <!-- 用户信息 -->
18
- <user
19
- :user="user"
20
- :notifyList="notifyList"
21
- :notify="notify"
22
- :contents="userInfoContents"
23
- @success="handleSuccess"
24
- @change="handleChangeConfig"
25
- @close="handlerClose"
26
- ></user>
27
- <div slot="reference" class="es-simplicity-pannel-user">
28
- <avatar
29
- v-show="showAvatar"
30
- :user="user"
31
- :size="56"
32
- :show-name="true"
33
- ></avatar>
34
- <div class="es-simplicity-username">{{ user.username }}</div>
35
- <div class="es-simplicity-greeting" v-show="!showAvatar">
36
- {{ greeting }}
37
- </div>
38
- </div>
39
- <!-- 用户信息 end -->
40
- </el-popover>
41
- <div class="es-simplicity-side-Application">
42
- <!-- 常用应用 -->
43
- <el-scrollbar>
44
- <div
45
- class="es-simplicity-side-app"
46
- v-for="item in userApps"
47
- :class="{ 'is-active': active == item.id }"
48
- :key="item.id"
49
- :title="item.text || item.name"
50
- @click="handlerClickApp(item)"
51
- >
52
- <el-badge
53
- class="es-simplicity-side-app-badge"
54
- v-bind="getBadge(item)"
55
- >
56
- <es-icon
57
- class="es-simplicity-side-app-icon"
58
- :contents="item.icons || item.icon || menuIcon"
59
- ></es-icon>
60
- <div class="es-simplicity-side-app-text">
61
- {{ item.text || item.name }}
62
- </div>
63
- </el-badge>
64
- </div>
65
- <div
66
- class="es-simplicity-side-app"
67
- @click="handlerClickApp()"
68
- v-show="applications.length"
69
- >
70
- <es-icon
71
- class="es-simplicity-side-app-icon"
72
- contents="es-icon-more"
73
- ></es-icon>
74
- <div class="es-simplicity-side-app-text">更多</div>
75
- </div>
76
- <div
77
- class="es-simplicity-side-app"
78
- v-for="(item, index) in newApps"
79
- :class="{ 'is-active': active == item.id }"
80
- :key="item.id"
81
- :title="item.text || item.name"
82
- @click.stop="handlerClickApp(item)"
83
- >
84
- <i
85
- class="el-icon-circle-close"
86
- @click.stop="handleDelete(index)"
87
- ></i>
88
- <el-badge v-bind="getBadge(item)">
89
- <es-icon
90
- class="es-simplicity-side-app-icon"
91
- :contents="item.icons || item.icon || menuIcon"
92
- ></es-icon>
93
- <div class="es-simplicity-side-app-text">
94
- {{ item.text || item.name }}
95
- </div>
96
- </el-badge>
97
- </div>
98
- </el-scrollbar>
99
- <!-- 常用应用 end -->
100
- </div>
101
- <div class="es-simplicity-side-app" v-if="_aiConfig && showAi">
102
- <img
103
- :src="_aiConfig.icon"
104
- class="es-simplicity-ai-icon"
105
- @click="handlerSetDrawer(_aiConfig, 'ai')"
106
- />
107
- </div>
108
- </div>
109
- <div class="es-simplicity-main">
110
- <!-- 应用 -->
111
- <apps
112
- :visible.sync="showApps"
113
- :menu-icon="menuIcon"
114
- :color="appColor"
115
- :backgroundColor="appBackgroundColor"
116
- :applications="applications"
117
- :business="business"
118
- :systems="systems"
119
- :user="user"
120
- @click="handlerClickApps"
121
- ></apps>
122
- <!-- 应用 end -->
123
-
124
- <!-- AI/IM -->
125
- <el-drawer
126
- class="es-simplicity-public-drawer"
127
- :direction="drawer.direction"
128
- modal-class="es-simplicity-apps-modal"
129
- size="100%"
130
- show-close
131
- :modal-append-to-body="false"
132
- :visible.sync="drawer.visible"
133
- >
134
- <div
135
- class="es-public-drawer-main"
136
- v-if="drawer.ai && drawer.ai.url"
137
- v-show="drawer.active == 'ai'"
138
- >
139
- <template v-if="isIE || drawer.ai.method !== 'wujie'">
140
- <iframe
141
- frameborder="0"
142
- width="100%"
143
- height="100%"
144
- :src="drawer.ai.url"
145
- ></iframe>
146
- </template>
147
- <template v-else>
148
- <es-wujie
149
- :host="host"
150
- :show="true"
151
- :props="wjProps"
152
- :attrs="wjAttrs"
153
- :name="drawer.ai.name"
154
- :url="drawer.ai.url"
155
- ></es-wujie>
156
- </template>
157
- </div>
158
- <div
159
- class="es-public-drawer-main"
160
- v-if="drawer.im && drawer.im.url"
161
- v-show="drawer.active == 'im'"
162
- >
163
- <template v-if="isIE || drawer.im.method !== 'wujie'">
164
- <iframe
165
- frameborder="0"
166
- width="100%"
167
- height="100%"
168
- :src="drawer.im.url"
169
- ></iframe>
170
- </template>
171
- <template v-else>
172
- <es-wujie
173
- :host="host"
174
- :show="true"
175
- :props="wjProps"
176
- :attrs="wjAttrs"
177
- :name="drawer.im.name"
178
- :url="drawer.im.url"
179
- ></es-wujie>
180
- </template>
181
- </div>
182
- </el-drawer>
183
- <!-- AI/IM end -->
184
-
185
- <!-- 路由、iframe -->
186
- <div class="es-simplicity-tabs-handler-mask" v-show="showTabsHandler">
187
- <el-card class="es-simplicity-tabs-handler" ref="tabsHandler">
188
- <div
189
- class="es-simplicity-tabs-handler-item"
190
- :class="{ 'is-disabled': isDisabled.refresh }"
191
- @click="isDisabled.refresh ? '' : handleTabsEvents(0)"
192
- >
193
- 刷新
194
- </div>
195
- <div
196
- class="es-simplicity-tabs-handler-item"
197
- @click="handleTabsEvents(1)"
198
- >
199
- 关闭标签
200
- </div>
201
- <div
202
- class="es-simplicity-tabs-handler-item"
203
- :class="{ 'is-disabled': isDisabled.other }"
204
- @click="isDisabled.other ? '' : handleTabsEvents(2)"
205
- >
206
- 关闭其他
207
- </div>
208
- <div
209
- class="es-simplicity-tabs-handler-item"
210
- :class="{ 'is-disabled': isDisabled.left }"
211
- @click="isDisabled.left ? '' : handleTabsEvents(3)"
212
- >
213
- 关闭左侧
214
- </div>
215
- <div
216
- class="es-simplicity-tabs-handler-item"
217
- :class="{ 'is-disabled': isDisabled.right }"
218
- @click="isDisabled.right ? '' : handleTabsEvents(4)"
219
- >
220
- 关闭右侧
221
- </div>
222
- </el-card>
223
- </div>
224
- <el-tabs
225
- class="es-simplicity-iframe"
226
- :class="{ 'is-open': showMenu, 'is-fold': fold }"
227
- v-model="activeName"
228
- closable
229
- hide-bar
230
- opacity
231
- @tab-click="handleTabClick"
232
- @tab-remove="handleRemove"
233
- @tab-contextmenu="handleContextmenu"
234
- >
235
- <!-- 操作栏 -->
236
- <handler
237
- slot="append"
238
- v-bind="handleConfig"
239
- :show-title-type="showTitleType"
240
- :data="_handleDatas"
241
- :nums="handleNums"
242
- @click="handleClick"
243
- ></handler>
244
- <!-- 操作栏 end-->
245
-
246
- <!-- 菜单 -->
247
- <sub-menu
248
- v-if="subMenus"
249
- :collapse="isCollapse"
250
- :mode="mode"
251
- :visible.sync="showMenu"
252
- :closed.sync="fold"
253
- :size="menuWidth"
254
- :title="title"
255
- :color="menuColor"
256
- :backgroundColor="menuBackgroundColor"
257
- :menu-icon="menuIcon"
258
- :active="subActive"
259
- v-bind="subMenus"
260
- @command="handlerClickMenu"
261
- ></sub-menu>
262
- <!-- 菜单 end -->
263
- <el-tab-pane
264
- v-for="item in tabs"
265
- :key="item.id"
266
- :label="item.text || item.name"
267
- :name="item.id"
268
- >
269
- <router-page
270
- v-if="item.method === 'router'"
271
- v-bind="item"
272
- :query="$parent.params"
273
- ></router-page>
274
- <iframe
275
- v-else-if="isIE || item.method == 'iframe'"
276
- v-loading="item.loading"
277
- frameborder="0"
278
- width="100%"
279
- height="100%"
280
- :id="activeName == item.id ? iframeId : item.id || item.appCode"
281
- :name="activeName == item.id ? iframeId : item.id || item.appCode"
282
- :onload="handleLoadIframe(item)"
283
- :src="item.url"
284
- ></iframe>
285
- <es-wujie
286
- v-else-if="item.method === 'wujie' && item.url"
287
- :host="host"
288
- :show="true"
289
- :props="wjProps"
290
- :attrs="wjAttrs"
291
- :name="item.appCode"
292
- :url="item.url"
293
- ></es-wujie>
294
- </el-tab-pane>
295
- </el-tabs>
296
- <!-- 路由、iframe end -->
297
-
298
- <!-- 消息列表 -->
299
- <message
300
- v-if="showMsg"
301
- ref="message"
302
- :total.sync="handleNums.notice"
303
- :visible.sync="showMsg"
304
- :winopen="winopen"
305
- @ignore="handleChange"
306
- @handle="handleMenuTips"
307
- ></message>
308
- <!-- 消息列表 end-->
309
-
310
- <!-- 设置 -->
311
- <settings
312
- v-bind="$attrs"
313
- layout-type="simplicity"
314
- active="simplicity"
315
- :theme="themeColor"
316
- :predefine="themes"
317
- :visible.sync="showSet"
318
- @change="handleChange"
319
- @layout="handleLayout"
320
- ></settings>
321
- <!-- 设置 end-->
322
-
323
- <!-- 消息提醒 -->
324
- <notice :data="sysMsg" :winopen="winopen" @opened="handleOpened"></notice>
325
- <!-- 消息提醒 end -->
326
-
327
- <es-dialog
328
- class="es-public-search-dialog"
329
- :visible.sync="showSearch"
330
- size="lg"
331
- >
332
- <search
333
- :apps="applications"
334
- :menus="menus"
335
- :menuIcon="menuIcon"
336
- @select="handleSelect"
337
- ></search>
338
- </es-dialog>
339
- <!-- 公用弹窗 -->
340
- <es-dialog :title="dialog.title" :visible.sync="dialog.show" size="md">
341
- <template v-if="dialog.title == '查看在线人员' && !dialog.src">
342
- <online></online>
343
- </template>
344
- <iframe
345
- v-else-if="dialog.show"
346
- width="100%"
347
- height="100%"
348
- frameborder="0"
349
- :src="dialog.src"
350
- ></iframe>
351
- </es-dialog>
352
- <!-- 公用弹窗 end -->
353
- </div>
354
- </div>
355
- </template>
356
-
357
- <script>
358
- import avatar from './avatar.vue';
359
- import handler from './handler.vue';
360
- import subMenu from './sub-menu.vue';
361
- import apps from './apps.vue';
362
- import user from './user.vue';
363
- import message from './message.vue';
364
- import notice from './notice.vue';
365
- import settings from '../public/settings.vue';
366
- import routerPage from './router-page.vue';
367
- import online from '../public/online.vue';
368
- import search from '../public/search.vue';
369
- import {
370
- wss,
371
- logout,
372
- topic,
373
- getUserAppWithTag,
374
- recordUserApp,
375
- getComplexApplications,
376
- getComplexApplicationsNew
377
- } from 'eoss-ui/src/config/api.js';
378
- import store from 'eoss-ui/src/utils/store';
379
- import util from 'eoss-ui/src/utils/util';
380
- const isIE = /MSIE|Trident/.test(navigator.userAgent);
381
- const systemMode = util.win.systemMode || 'default';
382
- import WujieVue from 'wujie-vue2';
383
- let events = [
384
- (tabs, index, that) => {
385
- let tab = tabs[index];
386
- if (tab.method == 'iframe') {
387
- tabs[index].url = util.handlerUrl(tab.url);
388
- }
389
- if (tab.method === 'wujie' && tab.appCode) {
390
- const url = tab.url;
391
- tab.url = '';
392
- that.$nextTick(() => {
393
- tab.url = url;
394
- });
395
- }
396
- if (tab.method === 'router') {
397
- that.$set(tabs[index], 'keys', util.uuid());
398
- }
399
- return tabs;
400
- },
401
- (tabs, index, that) => {
402
- let i = util.indexOfObj(tabs, that.activeName, 'id');
403
- if (tabs.length == 1) {
404
- that.activeName = '';
405
- } else if (i == index) {
406
- if (index < tabs.length - 1) {
407
- that.activeName = tabs[index + 1].id;
408
- } else {
409
- that.activeName = tabs[index - 1].id;
410
- }
411
- }
412
- tabs.splice(index, 1);
413
- return tabs;
414
- },
415
- (tabs, index, that) => {
416
- let tab = tabs.slice(index, index + 1);
417
- that.activeName = tab[0].id;
418
- return tab;
419
- },
420
- (tabs, index, that) => {
421
- let i = util.indexOfObj(tabs, that.activeName, 'id');
422
- if (i < index) {
423
- that.activeName = tabs[index].id;
424
- }
425
- tabs.splice(0, index);
426
- return tabs;
427
- },
428
- (tabs, index, that) => {
429
- let i = util.indexOfObj(tabs, that.activeName, 'id');
430
- if (i > index) {
431
- that.activeName = tabs[index].id;
432
- }
433
- tabs.splice(index + 1, tabs.length - index);
434
- return tabs;
435
- }
436
- ];
437
- export default {
438
- name: 'Simplicity',
439
- provide() {
440
- return {
441
- esMain: this,
442
- refresh: this.handleRefresh,
443
- jumpMenu: this.jumpMenu
444
- };
445
- },
446
- components: {
447
- avatar,
448
- handler,
449
- subMenu,
450
- apps,
451
- user,
452
- message,
453
- notice,
454
- settings,
455
- routerPage,
456
- online,
457
- search
458
- },
459
- props: {
460
- //是否显示头像
461
- avatar: {
462
- type: Boolean,
463
- default: true
464
- },
465
- //im用例编码
466
- imUseCaseCode: String,
467
- //ai用例编码
468
- aiUseCaseCode: String,
469
- //模式
470
- mode: {
471
- type: String,
472
- default: systemMode
473
- },
474
- sysCode: String,
475
- appCode: String,
476
- //logo
477
- logo: String,
478
- //菜单、应用默认图标
479
- menuIcon: {
480
- type: String,
481
- default: 'es-icon-application'
482
- },
483
- //默认主题颜色
484
- theme: {
485
- type: String,
486
- default: '#409eff'
487
- },
488
- //主题颜色选择颜色集合
489
- themes: Array,
490
- //操作栏配置
491
- handleData: {
492
- type: Array,
493
- default: () => [
494
- {
495
- type: 'contact'
496
- },
497
- { type: 'dateTime' },
498
- { type: 'online' },
499
- {
500
- type: 'search',
501
- icon: 'es-icon-sousuo',
502
- title: '搜索'
503
- },
504
- {
505
- type: 'im',
506
- icon: 'es-icon-message',
507
- title: 'IM'
508
- },
509
- {
510
- type: 'index',
511
- icon: 'es-icon-home',
512
- title: '门户'
513
- },
514
- {
515
- type: 'home',
516
- icon: 'es-icon-zhuye',
517
- title: '首页'
518
- },
519
- {
520
- type: 'notice',
521
- icon: 'es-icon-xiaoxi',
522
- title: '消息'
523
- },
524
- {
525
- type: 'quit',
526
- icon: 'es-icon-tuichu',
527
- title: '退出'
528
- },
529
- {
530
- type: 'set',
531
- icon: 'es-icon-shezhi',
532
- title: '设置'
533
- }
534
- ]
535
- },
536
- //操作栏单项配置
537
- handleConfig: Object,
538
- //需要隐藏的头部功能
539
- hides: Object,
540
- //菜单颜色
541
- menuColor: [String, Array],
542
- //菜单背景颜色
543
- menuBackgroundColor: [String, Array],
544
- //菜单是否折叠形式
545
- collapse: Boolean,
546
- //应用颜色
547
- appColor: [String, Array],
548
- //应用背景颜色
549
- appBackgroundColor: [String, Array],
550
- //默认头像
551
- userHead: String,
552
- //应用列表接口
553
- appsUrl: {
554
- type: String,
555
- default: getUserAppWithTag
556
- },
557
- //是否启用子应用菜单接口
558
- application: {
559
- type: Boolean,
560
- default: false
561
- },
562
- //菜单接口
563
- menuUrl: String,
564
- //远程请求菜单
565
- remote: {
566
- type: Boolean,
567
- default: true
568
- },
569
- //websocket
570
- socket: {
571
- type: Boolean,
572
- default: true
573
- },
574
- //iframeId
575
- iframeId: {
576
- type: String,
577
- default: 'stage'
578
- },
579
- //查看在线人数
580
- onlineView: {
581
- type: [String, Boolean],
582
- default: true
583
- },
584
- //消息办理是否采用window.open的方式打开
585
- winopen: {
586
- type: Boolean,
587
- default: true
588
- },
589
- //是否采用wujie微前端加载页面
590
- loadWujie: {
591
- type: Boolean,
592
- default: true
593
- },
594
- //无界微前端Props属性
595
- wjProps: Object,
596
- //无界微前端Attrs属性
597
- wjAttrs: Object,
598
- //菜单宽度
599
- menuWidth: {
600
- type: Number,
601
- default: 220
602
- },
603
- //路由方式
604
- routeType: String,
605
- host: {
606
- type: String,
607
- default() {
608
- return sessionStorage.getItem('host') || '';
609
- }
610
- },
611
- //切换旧版样式
612
- oldVersion: Boolean,
613
- //运维联系人
614
- contacts: Object,
615
- //展示系统操作按钮标题类型
616
- showHandlerTitleType: {
617
- type: String,
618
- default: 'tooltip',
619
- validator(val) {
620
- return ['tooltip', 'text'].includes(val);
621
- }
622
- }
623
- },
624
- data() {
625
- return {
626
- //是否显示头像
627
- showAvatar: this.avatar,
628
- // 问候语
629
- greeting: util.timeCycle() + '好!',
630
- //用例权限编码
631
- useCaseCodes: util.getStorage('useCaseCodes'),
632
- //显示用户信息
633
- showUser: false,
634
- //主题色
635
- themeColor: this.theme,
636
- //是否ie浏览器
637
- isIE: isIE,
638
- //logo
639
- mainLogo: this.logo,
640
- //侧边用户应用
641
- userApps: [],
642
- //点击应用存侧边
643
- newApps: [],
644
- //所有菜单
645
- menus: [],
646
- //菜单名称
647
- title: '',
648
- //子菜单
649
- subMenus: null,
650
- //展示菜单导航
651
- showMenu: false,
652
- //子菜单选中
653
- subActive: '',
654
- //折叠菜单
655
- fold: false,
656
- //菜单样式是否折叠形式
657
- isCollapse: this.collapse,
658
- //人工智能配置
659
- aiConfig: null,
660
- //im配置
661
- imConfig: null,
662
- //公用窗口面板配置
663
- drawer: {
664
- visible: false,
665
- direction: 'ltr',
666
- ai: {},
667
- im: {},
668
- active: ''
669
- },
670
- //所有应用
671
- applications: [],
672
- //业务系统
673
- business: [],
674
- //系统管理
675
- systems: [],
676
- //气泡数
677
- menuTips: {},
678
- //展示所有应用
679
- showApps: false,
680
- //用户信息
681
- userModel: {},
682
- //通知类型列表
683
- notifyList: [],
684
- //用户样式
685
- userStyle: {},
686
- //通知类型
687
- notify: '',
688
- //用户信息表单结构
689
- userInfoContents: undefined,
690
- //窗口页签
691
- tabs: [],
692
- //页签选中name
693
- activeName: '',
694
- //初始应用菜单页
695
- initApps: null,
696
- //首页地址
697
- indexUrl: '',
698
- //首页名称
699
- indexTitle: '首页',
700
- //首页配置
701
- homePage: {},
702
- //门户跳转页地址
703
- doorIndex: '',
704
- //弹窗
705
- dialog: {},
706
- handleNums: {
707
- //消息数
708
- notice: 0,
709
- //在线人数
710
- online: 1
711
- },
712
- //消息列表展示状态
713
- showMsg: false,
714
- //搜索
715
- showSearch: false,
716
- //即时消息
717
- sysMsg: [],
718
- //定时关闭及时消息对象
719
- sysMsgOut: null,
720
- //额外信息数据
721
- extraData: '',
722
- //显示设置面板
723
- showSet: false,
724
- //窗口是否可选
725
- isDisabled: {},
726
- //显示页签操作
727
- showTabsHandler: false,
728
- //页签对象
729
- pane: null,
730
- //选中菜单
731
- active: '',
732
- //单位名称
733
- simpleUserInfo: {},
734
- handleDatas: this.handleData,
735
- //顶部右侧工具隐藏
736
- handleHides: '',
737
- // 显示旧设计
738
- showOld: this.oldVersion,
739
- //运维联系人
740
- contact: this.contacts,
741
- //单点退出地址
742
- singleLogout: null,
743
- //展示系统操作按钮标题类型
744
- showTitleType: this.showHandlerTitleType
745
- };
746
- },
747
- computed: {
748
- _handleDatas() {
749
- const handleDatas = this.handleDatas.filter((item, index) => {
750
- if (item.type === 'contact' && this.contact) {
751
- this.$set(this.handleDatas, index, { ...item, ...this.contact });
752
- }
753
- if (item.type === 'contact' && !this.contact) {
754
- return false;
755
- }
756
- return !item.hide && !this.hide[item.type];
757
- });
758
- return handleDatas;
759
- },
760
- //菜单接口
761
- _menuUrl() {
762
- if (this.menuUrl) {
763
- return this.menuUrl;
764
- }
765
- if (this.application) {
766
- return getComplexApplicationsNew;
767
- }
768
- return getComplexApplications;
769
- },
770
- //人工智能配置
771
- _aiConfig() {
772
- return this.aiConfig
773
- ? {
774
- ...this.aiConfig,
775
- icon: 'data:image/png;base64,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'
776
- }
777
- : false;
778
- },
779
- showAi() {
780
- return this.aiUseCaseCode
781
- ? this.useCaseCodes.indexOf(this.aiUseCaseCode) > -1
782
- : true;
783
- },
784
- //用户信息
785
- user() {
786
- return this.userModel ? this.userModel : store.get('userModel');
787
- },
788
- //在线人数列表地址
789
- onlineUrl() {
790
- if (this.onlineView) {
791
- return typeof this.onlineView == 'string' ? this.onlineView : '';
792
- }
793
- return false;
794
- },
795
- //隐藏操作按键
796
- hide() {
797
- let handleHides = {};
798
- if (this.handleHides) {
799
- handleHides = JSON.parse(
800
- this.handleHides.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2":')
801
- );
802
- }
803
- let hides = {
804
- contact: this.contact ? false : true,
805
- im: this.imConfig
806
- ? this.imUseCaseCode
807
- ? this.useCaseCodes.indexOf(this.imUseCaseCode) == -1
808
- : false
809
- : true,
810
- home: this.indexUrl ? false : true,
811
- index: this.doorIndex ? false : true,
812
- old: this.showOld ? false : true
813
- };
814
-
815
- if (this.layout === 'subsystem' || this.application) {
816
- hides.system = false;
817
- }
818
- if (this.layout === 'topside' || this.layout === 'side') {
819
- hides.user = true;
820
- }
821
- return { ...hides, ...this.hides, ...handleHides };
822
- }
823
- },
824
- watch: {
825
- menuTips: {
826
- deep: true,
827
- handler() {
828
- this.setTips(this.userApps);
829
- this.setTips(this.applications);
830
- this.setTips(this.business);
831
- this.setTips(this.systems);
832
- this.setTips(this.menus);
833
- }
834
- }
835
- },
836
- created() {
837
- this.doorIndex = sessionStorage.getItem('doorIndex');
838
- },
839
- mounted() {
840
- this.handleListener();
841
- },
842
- methods: {
843
- /**
844
- * @desc:匹配路由
845
- * @author huangbo
846
- * @date 2024年9月7日
847
- **/
848
- hasRouter(res, url, code) {
849
- if (!url) {
850
- return false;
851
- }
852
- if (Array.isArray(res)) {
853
- for (let i in res) {
854
- let path = this.hasRouter(res[i], url, code);
855
- if (path) {
856
- return path;
857
- }
858
- }
859
- } else {
860
- let path = res.path;
861
- if (path !== '/' && path !== '/404') {
862
- path = path.replace(path[1], path[1].toLowerCase());
863
- }
864
- let pathname = url.substring(url.indexOf('#/') + 1);
865
- pathname = pathname.split('?')[0];
866
- let appCode;
867
- if (res.path !== '/' && pathname == path) {
868
- if (res.components) {
869
- if (!res.components[code]) {
870
- console.error(
871
- '路由“命名视图”规范属性名称与菜单appCode不一致',
872
- res,
873
- code
874
- );
875
- appCode = Object.keys(res.components).filter((item) => {
876
- return item !== 'default';
877
- })[0];
878
- }
879
- } else {
880
- console.error(
881
- '请根据路由“命名视图”规范,正确添加components属性名称',
882
- res
883
- );
884
- }
885
- return appCode ? { path: pathname, appCode } : pathname;
886
- }
887
- if (res && Object.prototype.hasOwnProperty.call(res, 'children')) {
888
- let path = this.hasRouter(res.children, url, code);
889
- if (path) {
890
- return path;
891
- }
892
- }
893
- }
894
- return false;
895
- },
896
- /**
897
- * @desc:获取初始数据
898
- * @author huangbo
899
- * @date 2024年9月7日
900
- **/
901
- init(results, first) {
902
- this.setConfig(results);
903
- if (this.remote && first) {
904
- this.getApplications();
905
- }
906
- },
907
- /**
908
- * @desc:设置用户配置及信息
909
- * @author huangbo
910
- * @date 2024年9月7日
911
- **/
912
- setConfig(results) {
913
- localStorage.setItem('mainConfig', JSON.stringify(results));
914
- util.setStorage({
915
- type: this.storage,
916
- key: {
917
- depId: results.userModel.depId,
918
- orgId: results.userModel.orgId,
919
- userId: results.userModel.userId,
920
- userName: results.userModel.username || results.userModel.userName,
921
- useCaseCodes: results.resourceCodes || results.userModel.resourceCodes
922
- }
923
- });
924
- for (let i in results) {
925
- if (i === 'mainLogoUrl' && results[i]) {
926
- this.mainLogo = results[i];
927
- }
928
- if (
929
- i === 'mainBannerUrl' &&
930
- results[i] &&
931
- this.headerImage === undefined
932
- ) {
933
- this.headerImg = results[i];
934
- }
935
- if (i === 'initApplication' && results[i]) {
936
- this.initApps = results[i].split(',');
937
- }
938
- if (i === 'indexUrl' && results[i]) {
939
- this.indexUrl = results[i];
940
- }
941
- if (i === 'doorIndex' && results[i]) {
942
- util.win.open(results[i]);
943
- this.doorIndex = results[i];
944
- }
945
- if (i === 'subsystemName' && results[i]) {
946
- document.title = results[i];
947
- }
948
- if (i === 'loginPage' && results[i]) {
949
- util.setStorage({ key: 'loginPage', value: results[i] });
950
- }
951
- if (i === 'sysLogoIco' && results[i]) {
952
- localStorage.setItem('sysLogoIco', results[i]);
953
- util.setFavicon(results[i]);
954
- }
955
- if (i === 'userStyle' && results[i]) {
956
- if (results[i].color) {
957
- let color = unescape(results[i].color).toLowerCase();
958
- if (util.startWith(color, '#')) {
959
- this.themeColor = color;
960
- }
961
- }
962
- if (results[i].indexUrl) {
963
- this.indexUrl = results[i].indexUrl;
964
- }
965
- this.userStyle = results[i];
966
- this.notify = results[i].notify || '';
967
- }
968
- if (i === 'subsystemExtend' && results[i]) {
969
- if (results[i].indexTitle) {
970
- this.indexTitle = results[i].indexTitle;
971
- }
972
- if (Object.prototype.hasOwnProperty.call(results[i], 'showAvatar')) {
973
- this.showAvatar = JSON.parse(results[i].showAvatar);
974
- }
975
- if (results[i].themeColor) {
976
- let color = unescape(results[i].themeColor).toLowerCase();
977
- if (util.startWith(color, '#')) {
978
- this.themeColor = color;
979
- }
980
- }
981
- //三方单点登录退出地址
982
- if (results[i].singleLogout) {
983
- this.singleLogout = results[i].singleLogout.split(',');
984
- }
985
- if (results[i].userInfoContents) {
986
- this.userInfoContents = JSON.parse(results[i].userInfoContents);
987
- }
988
- //水印配置
989
- if (results[i].webPageWatermark) {
990
- try {
991
- util.win.webPageWatermark = results[i].webPageWatermark;
992
- util.watermark(results[i].webPageWatermark);
993
- } catch (error) {}
994
- }
995
- //登录页页面地址
996
- if (results[i].loginPage) {
997
- util.setStorage({ key: 'loginPage', value: results[i].loginPage });
998
- }
999
- //登录页页面地址
1000
- if (results[i].openModel) {
1001
- util.setStorage({ key: 'openModel', value: results[i].openModel });
1002
- }
1003
- //ai配置
1004
- if (results[i].aiConfig) {
1005
- if (typeof results[i].aiConfig == 'string') {
1006
- try {
1007
- this.aiConfig = JSON.parse(results[i].aiConfig);
1008
- } catch (error) {
1009
- this.aiConfig = { url: results[i].aiConfig };
1010
- }
1011
- } else {
1012
- this.aiConfig = results[i].aiConfig;
1013
- }
1014
- }
1015
- //im配置
1016
- if (results[i].imConfig) {
1017
- if (typeof results[i].imConfig == 'string') {
1018
- try {
1019
- this.imConfig = JSON.parse(results[i].imConfig);
1020
- } catch (error) {
1021
- this.imConfig = { url: results[i].imConfig };
1022
- }
1023
- } else {
1024
- this.imConfig = results[i].imConfig;
1025
- }
1026
- }
1027
- if (results[i].portalPage || results[i].portalpage) {
1028
- this.doorIndex = results[i].portalPage || results[i].portalpage;
1029
- }
1030
- if (results[i].multipleVersion || results[i].oldVersion) {
1031
- this.showOld = results[i].oldVersion
1032
- ? JSON.parse(results[i].oldVersion)
1033
- : true;
1034
- }
1035
-
1036
- if (results[i].handleDatas) {
1037
- this.handleDatas = JSON.parse(results[i].handleDatas);
1038
- }
1039
- if (results[i].topRightToolHide || results[i].handleHides) {
1040
- this.handleHides = JSON.parse(
1041
- results[i].topRightToolHide || results[i].handleHides
1042
- );
1043
- }
1044
- if (results[i].contact) {
1045
- let contact = JSON.parse(results[i].contact);
1046
- let content = contact.content.split(',');
1047
- this;
1048
- this.contact = {
1049
- ...contact,
1050
- content
1051
- };
1052
- }
1053
- //展示系统操作按钮标题类型
1054
- if (results[i].showHandlerTitleType) {
1055
- this.showTitleType = results[i].showHandlerTitleType;
1056
- }
1057
- //菜单样式是否折叠形式
1058
- if (results[i].menuCollapse !== undefined) {
1059
- this.isCollapse =
1060
- results[i].menuCollapse !== false &&
1061
- results[i].menuCollapse !== 'false';
1062
- }
1063
- }
1064
- if (i === 'userModel' && results[i]) {
1065
- if (results[i].userHeadUrl) {
1066
- results[i].userHeadUrl = util.jointUrl({
1067
- url: results[i].userHeadUrl,
1068
- reg: '/main2'
1069
- });
1070
- } else {
1071
- results[i].userHeadUrl = this.userHead;
1072
- }
1073
- this.userModel = results[i];
1074
- if (results[i].openModel) {
1075
- util.setStorage({ key: 'openModel', value: results[i].openModel });
1076
- }
1077
- }
1078
- if (i === 'notifyList' && results[i]) {
1079
- this.notifyList = results[i];
1080
- }
1081
- store.set(i, results[i]);
1082
- }
1083
- },
1084
- /**
1085
- * @desc:获取所有应用
1086
- * @author huangbo
1087
- * @date 2024年9月7日
1088
- **/
1089
- getApplications() {
1090
- let loading = util.loading('', '加载中...');
1091
- util
1092
- .ajax({
1093
- url: this.appsUrl,
1094
- defaults: true
1095
- })
1096
- .then((res) => {
1097
- if (this.socket) {
1098
- this.initWebSocket();
1099
- }
1100
- if (res.rCode === 0) {
1101
- if (res.results && Object.keys(res.results).length) {
1102
- let { all, app_special_business_system, app_system, app_user } =
1103
- res.results;
1104
- this.userApps = app_user.filter((item) => {
1105
- return item.permission !== false;
1106
- });
1107
- this.applications = all;
1108
- this.business = app_special_business_system;
1109
- this.systems = app_system;
1110
- this.setTips(this.userApps);
1111
- this.setTips(this.applications);
1112
- this.setTips(this.business);
1113
- this.setTips(this.systems);
1114
- } else {
1115
- this.$message.error('未分配应用菜单权限,请联系管理员!');
1116
- }
1117
- this.getMenus(loading);
1118
- } else {
1119
- loading.close();
1120
- let msg = res.msg || '系统错误,请联系管理员!';
1121
- this.$message.error(msg);
1122
- }
1123
- })
1124
- .catch((err) => {
1125
- loading.close();
1126
- if (err.message && err.message !== 'canceled') {
1127
- this.$message.error(err.message);
1128
- }
1129
- });
1130
- },
1131
- /**
1132
- * @desc:获取菜单列表
1133
- * @author huangbo
1134
- * @date 2024年9月7日
1135
- **/
1136
- getMenus(loading) {
1137
- const menuData = store.get('nav');
1138
- if (menuData && menuData.length) {
1139
- loading.close();
1140
- this.renderMenus(menuData);
1141
- return;
1142
- }
1143
- util
1144
- .ajax({ url: this._menuUrl })
1145
- .then((res) => {
1146
- loading.close();
1147
- if (res.rCode === 0) {
1148
- if (res.results && res.results.length) {
1149
- //this.$emit('update:menuData', res.results);
1150
- store.set('nav', JSON.parse(JSON.stringify(res.results)));
1151
- this.renderMenus(JSON.parse(JSON.stringify(res.results)));
1152
- } else {
1153
- this.$message.error('未分配菜单权限,请联系管理员!');
1154
- }
1155
- } else {
1156
- let msg = res.msg || '系统错误,请联系管理员!';
1157
- this.$message.error(msg);
1158
- }
1159
- })
1160
- .catch((err) => {
1161
- loading.close();
1162
- if (err.message && err.message !== 'canceled') {
1163
- this.$message.error(err.message);
1164
- }
1165
- });
1166
- },
1167
- /**
1168
- * @desc:处理菜单列表
1169
- * @author huangbo
1170
- * @date 2024年9月7日
1171
- **/
1172
- renderMenus(res) {
1173
- this.menus = res;
1174
- this.setTips(this.menus);
1175
- store.set('nav', this.menus);
1176
- if (this.indexUrl) {
1177
- let obj = this.getMenu(this.menus, this.indexUrl);
1178
- obj = obj
1179
- ? JSON.parse(JSON.stringify(obj))
1180
- : {
1181
- url: this.indexUrl,
1182
- text: this.indexTitle,
1183
- id: '0',
1184
- appCode: 'indexUrl'
1185
- };
1186
- this.homePage = this.setIframeType(obj);
1187
- if (!this.appCode) {
1188
- this.tabs = [this.homePage];
1189
- this.activeName = this.homePage.id;
1190
- }
1191
- }
1192
- if (this.appCode) {
1193
- let code = this.sysCode || this.appCode;
1194
- let app = this.userApps.filter((item) => {
1195
- return item.code === code;
1196
- })[0];
1197
- if (app) {
1198
- this.active = app.id;
1199
- if (app.url) {
1200
- let obj = this.getMenu(this.menus, app.url);
1201
- if (obj) {
1202
- obj = JSON.parse(JSON.stringify(obj));
1203
- let tab = this.setIframeType(obj);
1204
- this.tabs = [tab];
1205
- this.activeName = tab.id;
1206
- } else {
1207
- this.tabs = [app];
1208
- }
1209
- }
1210
- }
1211
- if (this.sysCode) {
1212
- let subMenus = this.getMenu(this.menus, this.sysCode, 'appCode');
1213
- if (subMenus) {
1214
- let obj = this.getMenu(this.menus, this.appCode, 'appCode');
1215
- if (obj) {
1216
- if (obj.url) {
1217
- obj = JSON.parse(JSON.stringify(obj));
1218
- } else {
1219
- obj = JSON.parse(JSON.stringify(this.getFirst(obj)));
1220
- }
1221
- this.subActive = obj.id;
1222
- let tab = this.setIframeType(obj);
1223
- this.tabs = [tab];
1224
- this.activeName = tab.id;
1225
- } else {
1226
- this.subActive = '';
1227
- }
1228
- this.subMenus = subMenus;
1229
- this.showMenu =
1230
- (subMenus.children && subMenus.children.length > 0) ||
1231
- (subMenus.fourthTabs && subMenus.fourthTabs.length > 0);
1232
- } else {
1233
- this.subMenus = null;
1234
- this.showMenu = false;
1235
- this.$message.error('未分配菜单权限,请联系管理员!');
1236
- }
1237
- } else {
1238
- let subMenus = this.getMenu(this.menus, this.appCode, 'appCode');
1239
- if (subMenus) {
1240
- if (this.tabs.length == 0) {
1241
- let obj = this.getFirst(subMenus);
1242
- if (obj) {
1243
- obj = JSON.parse(JSON.stringify(obj));
1244
- this.subActive = obj.id;
1245
- let tab = this.setIframeType(obj);
1246
- this.tabs = [tab];
1247
- this.activeName = tab.id;
1248
- } else {
1249
- this.subActive = '';
1250
- }
1251
- }
1252
- this.subMenus = subMenus;
1253
- this.showMenu =
1254
- (subMenus.children && subMenus.children.length > 0) ||
1255
- (subMenus.fourthTabs && subMenus.fourthTabs.length > 0);
1256
- } else {
1257
- this.subMenus = null;
1258
- this.showMenu = false;
1259
- this.$message.error('未分配菜单权限,请联系管理员!');
1260
- }
1261
- }
1262
- } else if (this.initApps && this.initApps.length && !this.indexUrl) {
1263
- let obj = this.getMenu(
1264
- this.menus,
1265
- this.initApps[this.initApps.length - 1]
1266
- );
1267
- if (obj) {
1268
- let tab = this.setIframeType(JSON.parse(JSON.stringify(obj)));
1269
- this.tabs.push(tab);
1270
- this.activeName = tab.id;
1271
- }
1272
- }
1273
- },
1274
- /**
1275
- * @desc:设置页面加载类型
1276
- * @author huangbo
1277
- * @date 2024年9月7日
1278
- **/
1279
- setIframeType(res) {
1280
- let { url } = res;
1281
- let urls = url.split('?');
1282
- if (urls[0].indexOf('.js') > 1 && !isIE) {
1283
- res.method = 'wujie';
1284
- if (!res.appCode) {
1285
- res.appCode = 'application_' + Date.now();
1286
- }
1287
- } else if (
1288
- urls[0].indexOf('.dhtml') > 0 ||
1289
- (urls[0].indexOf('.html') > 0 && urls[0].indexOf('.html#') === -1)
1290
- ) {
1291
- res.method = 'iframe';
1292
- } else {
1293
- if (urls[0].indexOf('.html') === -1 && urls[0].indexOf('#/') === -1) {
1294
- res.method = 'iframe';
1295
- } else {
1296
- const routes = this.$router.options.routes;
1297
- if (routes) {
1298
- let path = this.hasRouter(routes, urls[0], res.appCode);
1299
- if (path && this.routeType !== 'wujie') {
1300
- res.method = 'router';
1301
- if (typeof path === 'string') {
1302
- res.path = path;
1303
- } else {
1304
- res.path = path.path;
1305
- res.appCode = path.appCode;
1306
- }
1307
- res.keys = util.uuid();
1308
- } else {
1309
- let urlopenmode = util.getParams({
1310
- url: url,
1311
- name: 'urlopenmode'
1312
- });
1313
- if (
1314
- this.loadWujie === false ||
1315
- isIE ||
1316
- res.urlopenmode == 3 ||
1317
- urlopenmode == 3
1318
- ) {
1319
- res.method = 'iframe';
1320
- } else {
1321
- res.method = 'wujie';
1322
- if (!res.appCode) {
1323
- res.appCode = 'application_' + Date.now();
1324
- }
1325
- }
1326
- }
1327
- } else if (
1328
- (urls[0].indexOf('.html') > -1 && urls[0].indexOf('#/') > -1) ||
1329
- urls[0].indexOf('/#/') > -1
1330
- ) {
1331
- res.method = 'wujie';
1332
- if (!res.appCode) {
1333
- res.appCode = 'application_' + Date.now();
1334
- }
1335
- } else {
1336
- res.method = 'iframe';
1337
- }
1338
- }
1339
- }
1340
- return res;
1341
- },
1342
- /**
1343
- * @desc:获取菜单
1344
- * @author huangbo
1345
- * @date 2024年9月7日
1346
- **/
1347
- getMenu(menus, res, key) {
1348
- if (Array.isArray(menus)) {
1349
- for (let i = 0; i < menus.length; i++) {
1350
- let item = menus[i];
1351
- if (key) {
1352
- if (item[key] === res) {
1353
- return item;
1354
- }
1355
- } else if (
1356
- item.url === res ||
1357
- item.id === res ||
1358
- item.appCode === res
1359
- ) {
1360
- return item;
1361
- }
1362
- if (
1363
- Object.prototype.hasOwnProperty.call(item, 'children') &&
1364
- item.children.length
1365
- ) {
1366
- let obj = this.getMenu(item.children, res, key);
1367
- if (obj) {
1368
- return obj;
1369
- }
1370
- } else if (
1371
- Object.prototype.hasOwnProperty.call(item, 'fourthTabs') &&
1372
- item.fourthTabs.length
1373
- ) {
1374
- let obj = this.getMenu(item.fourthTabs, res, key);
1375
- if (obj) {
1376
- return obj;
1377
- }
1378
- }
1379
- }
1380
- }
1381
- return false;
1382
- },
1383
- /**
1384
- * @desc:获取菜单第一条数据
1385
- * @author huangbo
1386
- * @date 2024年9月7日
1387
- **/
1388
- getFirst(obj) {
1389
- if (!obj) {
1390
- return '';
1391
- }
1392
- let openIdex = 0;
1393
- if (
1394
- obj.extendData &&
1395
- (obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen)
1396
- ) {
1397
- openIdex = parseInt(
1398
- obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen,
1399
- 10
1400
- );
1401
- }
1402
- if (obj.children && obj.children.length && obj.children[openIdex]) {
1403
- return this.getFirst(obj.children[openIdex]);
1404
- } else if (
1405
- obj.fourthTabs &&
1406
- obj.fourthTabs.length &&
1407
- obj.fourthTabs[openIdex]
1408
- ) {
1409
- return this.getFirst(obj.fourthTabs[openIdex]);
1410
- } else if (obj.url && obj.urlopenmode !== 1 && obj.urlopenmode !== 2) {
1411
- return obj;
1412
- }
1413
- },
1414
- /**
1415
- * @desc:遍历设置菜单气泡提醒
1416
- * @author huangbo
1417
- * @date 2024年9月7日
1418
- **/
1419
- setTips(obj) {
1420
- if (Array.isArray(obj)) {
1421
- obj.forEach((item) => {
1422
- this.setTips(item);
1423
- });
1424
- } else {
1425
- if (
1426
- obj &&
1427
- Object.prototype.hasOwnProperty.call(obj, 'tips') &&
1428
- obj.tips
1429
- ) {
1430
- this.$set(obj, 'tips', false);
1431
- delete obj.tips;
1432
- }
1433
- let flag = 0;
1434
- if (obj.children && obj.children.length) {
1435
- obj.children.forEach((item) => {
1436
- let n = this.setTips(item);
1437
- flag += n ? parseInt(n) : 0;
1438
- });
1439
- if (flag) {
1440
- this.$set(obj, 'tips', flag);
1441
- this.setDot(this.userApps, obj.appCode);
1442
- this.setDot(this.applications, obj.appCode);
1443
- this.setDot(this.business, obj.appCode);
1444
- this.setDot(this.systems, obj.appCode);
1445
- return flag;
1446
- }
1447
- } else if (obj.fourthTabs && obj.fourthTabs.length) {
1448
- obj.fourthTabs.forEach((item) => {
1449
- let n = this.setTips(item);
1450
- flag += n ? parseInt(n) : 0;
1451
- });
1452
- if (flag) {
1453
- this.$set(obj, 'tips', flag);
1454
- this.setDot(this.userApps, obj.appCode);
1455
- this.setDot(this.applications, obj.appCode);
1456
- this.setDot(this.business, obj.appCode);
1457
- this.setDot(this.systems, obj.appCode);
1458
- return flag;
1459
- }
1460
- } else {
1461
- let num =
1462
- this.menuTips[obj.id] ||
1463
- this.menuTips[obj.code] ||
1464
- this.menuTips[obj.appCode];
1465
- if (num && Number(num)) {
1466
- this.$set(obj, 'tips', Number(num));
1467
- return num;
1468
- }
1469
- }
1470
- }
1471
- return false;
1472
- },
1473
- setDot(obj, code) {
1474
- if (Array.isArray(obj)) {
1475
- obj.forEach((item) => {
1476
- this.setDot(item, code);
1477
- });
1478
- } else if (obj.code === code) {
1479
- this.$set(obj, 'tips', true);
1480
- }
1481
- },
1482
- /**
1483
- * @desc:获取气泡提醒
1484
- * @author huangbo
1485
- * @date 2024年9月7日
1486
- **/
1487
- getBadge(res) {
1488
- let num = res.tips || 0;
1489
- return num === true
1490
- ? {
1491
- isDot: true
1492
- //hidden: item.tips
1493
- }
1494
- : {
1495
- value: num,
1496
- max: 99,
1497
- hidden: !num
1498
- };
1499
- },
1500
- /**
1501
- * @desc:开启weosocket
1502
- * @author huangbo
1503
- * @date 2024年9月7日
1504
- **/
1505
- initWebSocket() {
1506
- this.webSocket = util.socket({
1507
- url: wss,
1508
- take: topic,
1509
- success: (res) => {
1510
- let data = res.data || {};
1511
- for (let i in data) {
1512
- if (data[i] !== null && data[i] !== undefined) {
1513
- if (i === 'onlineUserNums' && data[i] > 0) {
1514
- this.$set(this.handleNums, 'online', data[i]);
1515
- }
1516
- if (i === 'sysMsgNums' && data[i] !== null) {
1517
- this.$set(this.handleNums, 'notice', data[i]);
1518
- if (this.showMsg) {
1519
- this.$refs.message.getMsg(true);
1520
- }
1521
- }
1522
- if (i === 'menuTipsMap' && data[i] !== null) {
1523
- this.menuTips = data[i];
1524
- }
1525
- if (i === 'sysMsgList' && data[i] !== null) {
1526
- this.sysMsg = data[i];
1527
- data[i] && data[i].length && this.$emit('bus-emit', 'waitdone');
1528
- }
1529
- if (i === 'extraData' && data[i] !== null) {
1530
- this.extraData = data[i];
1531
- }
1532
- }
1533
- }
1534
- if (this.$store) {
1535
- try {
1536
- this.$store.commit('websocket', data);
1537
- } catch (error) {}
1538
- }
1539
- const bus = this.bus || this.$eventBus || this.$root.Bus;
1540
- if (bus) {
1541
- bus.$emit('websocket', data);
1542
- }
1543
- if (util.win.eventBus) {
1544
- util.win.eventBus.$emit('websocket', data);
1545
- }
1546
- }
1547
- });
1548
- },
1549
- /**
1550
- * @desc:显示用户信息
1551
- * @author huangbo
1552
- * @date 2024年9月7日
1553
- **/
1554
- showUserInfo() {
1555
- if (this.showUser === false) {
1556
- this.showUser = true;
1557
- }
1558
- },
1559
- /**
1560
- * @desc:删除更多应用菜单点击
1561
- * @author huangbo
1562
- * @date 2024年9月7日
1563
- **/
1564
- handleDelete(index) {
1565
- this.newApps.splice(index, 1);
1566
- },
1567
- /**
1568
- * @desc:储存更多应用菜单点击
1569
- * @author huangbo
1570
- * @date 2024年9月7日
1571
- **/
1572
- handlerClickApps(res) {
1573
- if (res.permission === false) {
1574
- return false;
1575
- }
1576
- let i = util.indexOfObj(this.newApps, res, 'id');
1577
- if (i == -1) {
1578
- this.newApps.push(res);
1579
- }
1580
- this.handlerClickApp(res);
1581
- },
1582
- /**
1583
- * @desc:侧边应用菜单点击
1584
- * @author huangbo
1585
- * @date 2024年9月7日
1586
- **/
1587
- handlerClickApp(res) {
1588
- this.showMsg = false;
1589
- this.showSet = false;
1590
- this.fold = false;
1591
- this.showApps = false;
1592
- this.drawer.visible = false;
1593
- if (res) {
1594
- if (res.permission === false) {
1595
- return false;
1596
- }
1597
- if (
1598
- (res.children && res.children.length) ||
1599
- (res.fourthTabs && res.fourthTabs.length)
1600
- ) {
1601
- this.subMenus = res;
1602
- this.showMenu = true;
1603
- } else {
1604
- this.subMenus = null;
1605
- this.showMenu = false;
1606
- }
1607
- let set = true;
1608
- if (res.url) {
1609
- if (res.urlopenmode == 1 || res.openModel == 1) {
1610
- set = false;
1611
- util.win.open(res.url);
1612
- } else if (res.urlopenmode == 2 || res.openModel == 2) {
1613
- set = false;
1614
- util.win.open(res.url, '_self');
1615
- } else {
1616
- let i = util.indexOfObj(this.tabs, res, 'id');
1617
- this.activeName = res.id;
1618
- if (i == -1) {
1619
- let obj = res.code
1620
- ? this.getMenu(this.menus, res.code, 'appCode')
1621
- : null;
1622
- if (obj) {
1623
- obj = JSON.parse(JSON.stringify(obj));
1624
- let n = util.indexOfObj(this.tabs, obj, 'id');
1625
- if (n == -1) {
1626
- let tab = this.setIframeType(obj);
1627
- this.tabs.push(tab);
1628
- this.activeName = tab.id;
1629
- } else {
1630
- if (obj.method == 'iframe') {
1631
- obj.url = util.handlerUrl(obj.url);
1632
- }
1633
- }
1634
- } else {
1635
- let tab = this.setIframeType(res);
1636
- this.tabs.push(tab);
1637
- this.activeName = tab.id;
1638
- }
1639
- } else {
1640
- if (res.method == 'iframe') {
1641
- res.url = util.handlerUrl(res.url);
1642
- }
1643
- }
1644
- }
1645
- }
1646
- if (set && res.code) {
1647
- let subMenus = this.getMenu(this.menus, res.code, 'appCode');
1648
- if (!subMenus && !res.url) {
1649
- this.$alert('没有关联菜单,请联系管理员!', '提示', {
1650
- confirmButtonText: '确定',
1651
- type: 'warning'
1652
- }).catch(() => {});
1653
- } else {
1654
- this.title = res.text || res.name;
1655
- this.subMenus = subMenus ? subMenus : null;
1656
- this.showMenu = subMenus
1657
- ? (subMenus.children && subMenus.children.length > 0) ||
1658
- (subMenus.fourthTabs && subMenus.fourthTabs.length > 0)
1659
- : false;
1660
- this.showApps = false;
1661
- if (subMenus && subMenus.url) {
1662
- subMenus = JSON.parse(JSON.stringify(subMenus));
1663
- let i = util.indexOfObj(this.tabs, subMenus, 'id');
1664
- this.activeName = subMenus.id;
1665
- if (i == -1) {
1666
- let tab = this.setIframeType(subMenus);
1667
- this.tabs.push(tab);
1668
- } else {
1669
- if (subMenus.method == 'iframe') {
1670
- this.tabs[i].url = util.handlerUrl(subMenus.url);
1671
- }
1672
- }
1673
- }
1674
- }
1675
- }
1676
- this.active = res.id;
1677
- } else {
1678
- this.showApps = !this.showApps;
1679
- }
1680
- },
1681
- /**
1682
- * @desc:显示Drawer界面
1683
- * @author huangbo
1684
- * @date 2024年9月7日
1685
- **/
1686
- handlerSetDrawer(res, type, direction = 'ltr') {
1687
- this.drawer.visible = true;
1688
- this.drawer.active = type;
1689
- this.drawer.direction = direction;
1690
- if (res) {
1691
- let { mounted, url } = res;
1692
- this.drawer[type] = {
1693
- mounted,
1694
- url,
1695
- name: res.name || util.uuid()
1696
- };
1697
- }
1698
- },
1699
- /**
1700
- * @desc:关闭Drawer界面
1701
- * @author huangbo
1702
- * @date 2024年9月7日
1703
- **/
1704
- handleCloseDrawer() {
1705
- this.drawer = { visible: false };
1706
- },
1707
- /**
1708
- * @desc:菜单点击
1709
- * @author huangbo
1710
- * @date 2024年9月7日
1711
- **/
1712
- handlerClickMenu(res) {
1713
- util
1714
- .ajax({
1715
- url: recordUserApp,
1716
- params: {
1717
- userId: this.user.userId,
1718
- appId: res.id
1719
- }
1720
- })
1721
- .then(() => {})
1722
- .catch(() => {});
1723
- this.showMsg = false;
1724
- this.showSet = false;
1725
-
1726
- if (res.url) {
1727
- if (res.urlopenmode == 1 || res.openModel == 1) {
1728
- util.win.open(res.url);
1729
- return;
1730
- } else if (res.urlopenmode == 2 || res.openModel == 2) {
1731
- util.win.open(res.url, '_self');
1732
- return;
1733
- }
1734
- }
1735
- let i = util.indexOfObj(this.tabs, res, 'id');
1736
- if (i == -1) {
1737
- let tab = this.setIframeType(res);
1738
- this.tabs.push(tab);
1739
- this.activeName = res.id;
1740
- } else {
1741
- this.tabs = events[0](this.tabs, i, this);
1742
- // let tab = this.tabs[i];
1743
- // if (tab.method === 'iframe') {
1744
- // this.activeName = res.id;
1745
- // this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1746
- // } else {
1747
- // if (tab.method === 'wujie' && tab.appCode) {
1748
- // window.document
1749
- // .querySelector(`iframe[name=${tab.appCode}]`)
1750
- // .contentWindow.location.reload(true);
1751
- // }
1752
- // if (tab.method === 'router') {
1753
- // this.$set(this.tabs[i], 'keys', util.uuid());
1754
- // }
1755
- // this.activeName = res.id;
1756
- // }
1757
- this.activeName = res.id;
1758
- }
1759
- },
1760
-
1761
- /**
1762
- * @desc:用户详情请求成功
1763
- * @author huangbo
1764
- * @date 2024年9月7日
1765
- **/
1766
- handleSuccess(res) {
1767
- this.simpleUserInfo = res.simpleUserInfo;
1768
- },
1769
- /**
1770
- * @desc:修改用户配置
1771
- * @author huangbo
1772
- * @date 2024年9月7日
1773
- **/
1774
- handleChangeConfig(name, res) {
1775
- if (name == 'userHeadUrl') {
1776
- this.$set(this.userModel, 'userHeadUrl', res);
1777
- store.set('userModel', this.userModel);
1778
- let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1779
- sessionStorage.setItem(
1780
- 'mainConfig',
1781
- JSON.stringify({ ...mainConfig, userModel: this.userModel })
1782
- );
1783
- } else {
1784
- this.$set(this.userStyle, 'notify', res);
1785
- store.set('userStyle', this.userStyle);
1786
- let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1787
- localStorage.setItem(
1788
- 'mainConfig',
1789
- JSON.stringify({ ...mainConfig, userStyle: this.userStyle })
1790
- );
1791
- }
1792
- },
1793
- /**
1794
- * @desc:关闭webSocket
1795
- * @author huangbo
1796
- * @date 2024年9月7日
1797
- **/
1798
- handlerClose() {
1799
- if (this.webSocket) {
1800
- this.webSocket.destroy();
1801
- }
1802
- },
1803
- /**
1804
- * @desc:刷新选中iframe页签
1805
- * @author huangbo
1806
- * @date 2024年9月7日
1807
- **/
1808
- handleRefresh(arg) {
1809
- let i =
1810
- arg && arg != true && arg !== 'pageData'
1811
- ? util.indexOfObj(this.tabs, arg, 'appCode,code,id,url')
1812
- : util.indexOfObj(this.tabs, this.activeName, 'id');
1813
- let tab = this.tabs[i];
1814
- if (isIE || tab.method === 'iframe') {
1815
- if (arg && arg === 'pageData') {
1816
- let iframe = document.getElementById(tab.id || tab.appCode);
1817
- let source = tab.url;
1818
- if (source && !util.startWith(source, ['http', 'https'], true)) {
1819
- source = location.origin + source.replace('./', '/');
1820
- }
1821
- !iframe && (iframe = document.getElementById(this.iframeId));
1822
- iframe &&
1823
- iframe.contentWindow.postMessage(
1824
- { method: 'pageData' },
1825
- source || '*'
1826
- );
1827
- } else {
1828
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1829
- }
1830
- return;
1831
- }
1832
- if (tab.method === 'wujie' && tab.appCode) {
1833
- if (arg && arg === 'pageData') {
1834
- WujieVue.$emit('pageData', tab);
1835
- } else {
1836
- window.document
1837
- .querySelector(`iframe[name=${tab.appCode}]`)
1838
- .contentWindow.location.reload(true);
1839
- }
1840
- return;
1841
- }
1842
- if (tab.method === 'router') {
1843
- if (arg && arg === 'pageData') {
1844
- const bus = this.bus || this.$root.Bus;
1845
- bus.$emit('pageData', tab);
1846
- } else {
1847
- this.$set(this.tabs[i], 'keys', util.uuid());
1848
- }
1849
- }
1850
- },
1851
- /**
1852
- * @desc:删除iframe
1853
- * @author huangbo
1854
- * @date 2024年9月7日
1855
- **/
1856
- handleRemove(name) {
1857
- let len = this.tabs.length - 1;
1858
- let i = util.indexOfObj(this.tabs, name, 'id,code,appCode');
1859
- if (i > -1) {
1860
- this.tabs.splice(i, 1);
1861
- if (this.tabs.length == 0) {
1862
- this.activeName = '';
1863
- } else if (i == len) {
1864
- this.activeName = this.tabs[len - 1].id;
1865
- } else {
1866
- this.activeName = this.tabs[i].id;
1867
- }
1868
- }
1869
- },
1870
- /**
1871
- * @desc:tabs鼠标右键事件
1872
- * @author huangbo
1873
- * @date 2024年9月7日
1874
- **/
1875
- handleContextmenu(tabs, e) {
1876
- let disabled = {};
1877
- let index = parseInt(tabs.index, 10);
1878
- if (index == 0) {
1879
- disabled.left = true;
1880
- }
1881
- if (index == this.tabs.length - 1) {
1882
- disabled.right = true;
1883
- }
1884
- if (this.tabs.length == 1) {
1885
- disabled.other = true;
1886
- }
1887
- if (this.tabs[index].id != this.activeName) {
1888
- disabled.refresh = true;
1889
- }
1890
- this.isDisabled = disabled;
1891
- this.$refs.tabsHandler.$el.style.setProperty('left', `${e.x}px`);
1892
- this.$refs.tabsHandler.$el.style.setProperty('top', `${e.y}px`);
1893
- this.showTabsHandler = true;
1894
- this.pane = index;
1895
- window.addEventListener('click', this.closeTabsEvents);
1896
- },
1897
- /**
1898
- * @desc:tabs页签事件
1899
- * @author huangbo
1900
- * @date 2024年9月7日
1901
- **/
1902
- handleTabsEvents(num) {
1903
- if (this.pane !== null) {
1904
- this.tabs = events[num](this.tabs, this.pane, this);
1905
- }
1906
- this.showTabsHandler = false;
1907
- window.removeEventListener('click', this.closeTabsEvents);
1908
- },
1909
-
1910
- /**
1911
- * @desc:关闭页签事件面板
1912
- * @author huangbo
1913
- * @date 2024年9月7日
1914
- **/
1915
- closeTabsEvents(e) {
1916
- if (
1917
- e.target.parentNode != this.$refs.tabsHandler.$el &&
1918
- e.target.parentNode.parentNode != this.$refs.tabsHandler.$el
1919
- ) {
1920
- this.showTabsHandler = false;
1921
- }
1922
- window.removeEventListener('click', this.closeTabsEvents);
1923
- },
1924
-
1925
- /**
1926
- * @desc:tabs页签点击事件
1927
- * @author huangbo
1928
- * @date 2024年9月7日
1929
- **/
1930
- handleTabClick() {
1931
- this.active = '';
1932
- this.subMenus = null;
1933
- this.showMenu = false;
1934
- },
1935
- /**
1936
- * @desc:handler工具栏点击事件
1937
- * @author huangbo
1938
- * @date 2024年9月7日
1939
- **/
1940
- handleClick(res) {
1941
- const { type, event, open, link } = res;
1942
- if (event) {
1943
- event();
1944
- } else if (open) {
1945
- util.win.open(open);
1946
- } else if (link) {
1947
- util.win.open(link, '_self');
1948
- } else {
1949
- switch (type) {
1950
- case 'quit':
1951
- this.handleQuit();
1952
- break;
1953
- case 'online':
1954
- this.showMsg = false;
1955
- this.showSet = false;
1956
- this.dialog = {
1957
- title: '查看在线人员',
1958
- show: true,
1959
- src: this.onlineUrl
1960
- };
1961
- break;
1962
- case 'notice':
1963
- this.showMsg = !this.showMsg;
1964
- this.showSet = false;
1965
- break;
1966
- case 'index':
1967
- util.win.open(this.doorIndex, '_self');
1968
- break;
1969
- case 'set':
1970
- this.showSet = !this.showSet;
1971
- this.showMsg = false;
1972
- break;
1973
- case 'home':
1974
- let i = util.indexOfObj(this.tabs, this.homePage.id, 'id');
1975
- if (i == -1) {
1976
- this.tabs.unshift(this.homePage);
1977
- } else {
1978
- let tab = this.tabs[i];
1979
- if (tab.method === 'iframe') {
1980
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1981
- }
1982
- if (tab.method === 'wujie' && tab.appCode) {
1983
- window.document
1984
- .querySelector(`iframe[name=${tab.appCode}]`)
1985
- .contentWindow.location.reload(true);
1986
- }
1987
- if (tab.method === 'router') {
1988
- this.$set(this.tabs[i], 'keys', util.uuid());
1989
- }
1990
- }
1991
- this.activeName = this.homePage.id;
1992
- this.showMsg = false;
1993
- this.showSet = false;
1994
- this.active = '';
1995
- this.subMenus = null;
1996
- this.showMenu = false;
1997
- break;
1998
- case 'search':
1999
- this.showSearch = true;
2000
- this.showMsg = false;
2001
- this.showSet = false;
2002
- break;
2003
- case 'ai':
2004
- this.handlerSetDrawer(this._aiConfig, 'ai', 'rtl');
2005
- break;
2006
- case 'im':
2007
- this.handlerSetDrawer(this.imConfig, 'im', 'rtl');
2008
- break;
2009
- case 'goView':
2010
- util.win.open(res.path, '_blank');
2011
- break;
2012
- }
2013
- }
2014
- this.$emit('handler-click', res);
2015
- },
2016
- /**
2017
- * @desc:退出登录
2018
- * @author huangbo
2019
- * @date 2024年9月7日
2020
- **/
2021
- handleQuit() {
2022
- this.$confirm('确定退出吗?', '退出系统', {
2023
- confirmButtonText: '确定',
2024
- cancelButtonText: '取消',
2025
- type: 'warning'
2026
- })
2027
- .then(() => {
2028
- let iframes = document.getElementsByTagName('iframe');
2029
- for (let i = 0; i < iframes.length; i++) {
2030
- let src = iframes[i] ? iframes[i].src : null;
2031
- let origin = util.win.location.origin;
2032
- if (
2033
- src &&
2034
- util.startWith(src, 'http') &&
2035
- src.indexOf(origin) === -1
2036
- ) {
2037
- iframes[i] && iframes[i].contentWindow.postMessage('logout', '*');
2038
- }
2039
- break;
2040
- }
2041
- if (this.singleLogout) {
2042
- for (let i = 0; i < this.singleLogout.length; i++) {
2043
- let iframe = document.createElement('iframe');
2044
- iframe.style.display = 'none';
2045
- iframe.src = this.singleLogout[i];
2046
- document.body.appendChild(iframe);
2047
- }
2048
- }
2049
- util
2050
- .ajax({ method: 'post', url: logout })
2051
- .then((res) => {
2052
- if (res.rCode == 0) {
2053
- util.removeStorage([
2054
- 'Authorization',
2055
- 'token',
2056
- 'ssId',
2057
- 'userId',
2058
- 'userName',
2059
- 'auth',
2060
- 'deviceUnique',
2061
- 'menus',
2062
- 'useCaseCodes',
2063
- 'mainConfig',
2064
- 'jump'
2065
- ]);
2066
- if (this.onQuit && typeof this.onQuit === 'function') {
2067
- this.onQuit();
2068
- } else {
2069
- try {
2070
- const loginPage =
2071
- util.getStorage('login') || util.getStorage('loginPage');
2072
- if (loginPage) {
2073
- let src;
2074
- if (!util.startWith(loginPage, ['http', '/'], true)) {
2075
- let pathname = util.win.top.location.pathname;
2076
- if (pathname !== '/') {
2077
- pathname = pathname.split('/');
2078
- pathname.splice(pathname.length - 1);
2079
- pathname = pathname.join('/');
2080
- src = pathname + '/' + loginPage.replace('./', '');
2081
- } else {
2082
- src = pathname + loginPage.replace('./', '');
2083
- }
2084
- } else {
2085
- src = loginPage;
2086
- }
2087
- util.win.top.location.href = src;
2088
- } else if (
2089
- util.win.top.location.href.indexOf('main.html') > -1
2090
- ) {
2091
- util.win.top.location.href = './login.html';
2092
- } else {
2093
- const hash = util.win.top.location.hash;
2094
- if (hash) {
2095
- const len = util.win.top.location.href.indexOf(hash);
2096
- util.win.top.location.href =
2097
- util.win.location.href.slice(0, len) + '#/login';
2098
- } else {
2099
- util.win.top.location.href = '/login.html';
2100
- }
2101
- }
2102
- } catch (error) {
2103
- util.win.top.postMessage({ type: 1 }, '*');
2104
- }
2105
- }
2106
- }
2107
- })
2108
- .catch((err) => {
2109
- if (err.message && err.message !== 'canceled') {
2110
- this.$message.error(err.message);
2111
- }
2112
- });
2113
- })
2114
- .catch((e) => {});
2115
- },
2116
- /**
2117
- * @desc:主题、消息回调
2118
- * @author huangbo
2119
- * @date 2024年9月7日
2120
- **/
2121
- handleChange(res) {
2122
- const { type, value } = res;
2123
- switch (type) {
2124
- case 'theme':
2125
- this.setTheme(value);
2126
- break;
2127
- case 'ignore':
2128
- this.$set(this.handleNums, 'notice', 0);
2129
- break;
2130
- }
2131
- },
2132
- /**
2133
- * @desc:菜单布局样式切换
2134
- * @author huangbo
2135
- * @date 2024年9月7日
2136
- **/
2137
- handleLayout(res, active) {
2138
- if (active) {
2139
- localStorage.setItem('layout', active);
2140
- }
2141
- this.$emit('chang-layout', res, active);
2142
- },
2143
- /**
2144
- * @desc:消息修改总数
2145
- * @author huangbo
2146
- * @date 2024年9月7日
2147
- **/
2148
- handleMenuTips(id, num) {
2149
- if (num) {
2150
- this.$set(this.menuTips, id, num);
2151
- } else {
2152
- let n = parseInt(this.menuTips[id], 10) - 1;
2153
- this.$set(this.menuTips, id, n);
2154
- }
2155
- },
2156
- /**
2157
- * @desc:处理即时消息
2158
- * @author huangbo
2159
- * @date 2024年9月7日
2160
- **/
2161
- handleOpened(res) {
2162
- if (res === undefined) {
2163
- this.sysMsg = [];
2164
- } else if (res == false && this.sysMsg.length) {
2165
- this.sysMsgOut = setTimeout(() => {
2166
- this.sysMsg = [];
2167
- }, 3000);
2168
- } else if (this.sysMsgOut) {
2169
- clearTimeout(this.sysMsgOut);
2170
- }
2171
- },
2172
- jumpMenu(res, close, params = {}) {
2173
- let apps = res;
2174
- let param = params;
2175
- let reload = true;
2176
- if (typeof res === 'string') {
2177
- apps = res.split(',');
2178
- } else if (util.isObject(res)) {
2179
- apps = Array.isArray(res.appCode)
2180
- ? res.appCode
2181
- : res.appCode.split(',');
2182
- res.param && (param = { ...res.param, ...params });
2183
- reload = Object.prototype.hasOwnProperty.call(res, 'reload')
2184
- ? res.reload
2185
- : true;
2186
- }
2187
- let obj = this.getMenu(this.menus, apps[apps.length - 1]);
2188
- if (obj) {
2189
- obj = JSON.parse(JSON.stringify(obj));
2190
- let i = util.indexOfObj(this.tabs, obj, 'id,code,appCode');
2191
- let n = util.indexOfObj(this.tabs, this.activeName, 'id');
2192
- let old = this.activeName;
2193
- this.activeName = obj.id;
2194
- if (i == -1) {
2195
- let tab = this.setIframeType(obj);
2196
- this.$set(tab, 'url', util.handlerUrl(tab.url, param));
2197
- this.tabs.splice(n + 1, 0, tab);
2198
- } else {
2199
- let tab = this.tabs[i];
2200
- if (tab.method === 'iframe') {
2201
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url, param));
2202
- }
2203
- if (tab.method === 'wujie' && tab.appCode) {
2204
- const url = param ? util.handlerUrl(tab.url, param) : tab.url;
2205
- if (reload || param) {
2206
- tab.url = '';
2207
- this.$nextTick(() => {
2208
- tab.url = url;
2209
- });
2210
- }
2211
- // if (param) {
2212
- // window.document.querySelector(
2213
- // `iframe[name=${tab.appCode}]`
2214
- // ).contentWindow.location.href = util.handlerUrl(tab.url, param);
2215
- // } else {
2216
- // window.document
2217
- // .querySelector(`iframe[name=${tab.appCode}]`)
2218
- // .contentWindow.location.reload(true);
2219
- // }
2220
- }
2221
- if (tab.method === 'router') {
2222
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url, param));
2223
- this.$set(this.tabs[i], 'keys', util.uuid());
2224
- }
2225
- }
2226
- if (close) {
2227
- if (close === old) {
2228
- this.tabs.splice(n, 1);
2229
- } else {
2230
- let d = util.indexOfObj(this.tabs, close, 'id,code,appCode');
2231
- if (d > -1) {
2232
- this.tabs.splice(d, 1);
2233
- }
2234
- }
2235
- }
2236
- } else {
2237
- this.$message.error('没有此菜单!');
2238
- }
2239
- },
2240
- //监听改变菜单
2241
- handleListener() {
2242
- util.win.addEventListener(
2243
- 'message',
2244
- (e) => {
2245
- var msg = e.data;
2246
- if (msg.key == 'jump_Menu') {
2247
- let res = msg.data1;
2248
- this.jumpMenu(res);
2249
- }
2250
- },
2251
- false
2252
- );
2253
- },
2254
- handleSelect(res, parent) {
2255
- this.showSearch = false;
2256
- if (parent.name === '应用') {
2257
- this.handlerClickApps(res);
2258
- }
2259
- if (parent.name === '菜单') {
2260
- this.handlerClickApp(res);
2261
- }
2262
- },
2263
- handleLoadIframe(item) {
2264
- this.$set(item, 'loading', false);
2265
- }
2266
- },
2267
- beforeDestroy() {
2268
- clearTimeout(this.timer);
2269
- this.timer = null;
2270
- if (this.webSocket) {
2271
- this.webSocket.destroy();
2272
- }
2273
- }
2274
- };
2275
- </script>
2276
-
2277
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <div class="es-main">
3
+ <div class="es-simplicity-side">
4
+ <img class="es-simplicity-logo" v-if="mainLogo" :src="mainLogo" />
5
+ <div
6
+ class="es-simplicity-org-name es-text-ellipsis-row4"
7
+ :title="simpleUserInfo.orgShortName || simpleUserInfo.orgName"
8
+ >
9
+ {{ simpleUserInfo.orgShortName || simpleUserInfo.orgName }}
10
+ </div>
11
+ <el-popover
12
+ class="es-simplicity-user-popover"
13
+ placement="right-start"
14
+ width="360"
15
+ trigger="click"
16
+ >
17
+ <!-- 用户信息 -->
18
+ <user
19
+ ref="user"
20
+ :user="user"
21
+ :notifyList="notifyList"
22
+ :notify="notify"
23
+ :contents="userInfoContents"
24
+ @success="handleSuccess"
25
+ @change="handleChangeConfig"
26
+ @close="handlerClose"
27
+ ></user>
28
+ <div slot="reference" class="es-simplicity-pannel-user">
29
+ <avatar
30
+ v-show="showAvatar"
31
+ :user="user"
32
+ :size="56"
33
+ :show-name="true"
34
+ ></avatar>
35
+ <div class="es-simplicity-greeting" v-show="!showAvatar">
36
+ {{ greeting }}
37
+ </div>
38
+ <div class="es-simplicity-username">{{ user.username }}</div>
39
+ </div>
40
+ <!-- 用户信息 end -->
41
+ </el-popover>
42
+ <el-dropdown
43
+ v-if="user.identityList && user.identityList.length"
44
+ trigger="click"
45
+ placement="bottom-start"
46
+ @command="handleDepSelect"
47
+ >
48
+ <div class="es-simplicity-dep-post">
49
+ <span class="es-simplicity-dep-name"> {{ user.depName }}</span>
50
+ <template v-if="user.postName">
51
+ |
52
+ <span class="es-simplicity-post-name">{{
53
+ user.position || user.postName
54
+ }}</span>
55
+ </template>
56
+ <i class="es-icon-qiehuangangwei"></i>
57
+ </div>
58
+ <el-dropdown-menu slot="dropdown">
59
+ <el-dropdown-item
60
+ v-for="item in user.identityList"
61
+ :key="item.id"
62
+ :command="item"
63
+ :class="{ 'is-active': user.identityId == item.id }"
64
+ >{{ item.name }}</el-dropdown-item
65
+ >
66
+ </el-dropdown-menu>
67
+ </el-dropdown>
68
+ <div class="es-simplicity-side-Application">
69
+ <!-- 常用应用 -->
70
+ <el-scrollbar>
71
+ <div
72
+ class="es-simplicity-side-app"
73
+ v-for="item in userApps"
74
+ :class="{ 'is-active': active == item.id }"
75
+ :key="item.id"
76
+ :title="item.text || item.name"
77
+ @click="handlerClickApp(item)"
78
+ >
79
+ <el-badge
80
+ class="es-simplicity-side-app-badge"
81
+ v-bind="getBadge(item)"
82
+ >
83
+ <es-icon
84
+ class="es-simplicity-side-app-icon"
85
+ :contents="item.icons || item.icon || menuIcon"
86
+ ></es-icon>
87
+ <div class="es-simplicity-side-app-text">
88
+ {{ item.text || item.name }}
89
+ </div>
90
+ </el-badge>
91
+ </div>
92
+ <div
93
+ class="es-simplicity-side-app"
94
+ @click="handlerClickApp()"
95
+ v-show="applications.length"
96
+ >
97
+ <es-icon
98
+ class="es-simplicity-side-app-icon"
99
+ contents="es-icon-more"
100
+ ></es-icon>
101
+ <div class="es-simplicity-side-app-text">更多</div>
102
+ </div>
103
+ <div
104
+ class="es-simplicity-side-app"
105
+ v-for="(item, index) in newApps"
106
+ :class="{ 'is-active': active == item.id }"
107
+ :key="item.id"
108
+ :title="item.text || item.name"
109
+ @click.stop="handlerClickApp(item)"
110
+ >
111
+ <i
112
+ class="el-icon-circle-close"
113
+ @click.stop="handleDelete(index)"
114
+ ></i>
115
+ <el-badge v-bind="getBadge(item)">
116
+ <es-icon
117
+ class="es-simplicity-side-app-icon"
118
+ :contents="item.icons || item.icon || menuIcon"
119
+ ></es-icon>
120
+ <div class="es-simplicity-side-app-text">
121
+ {{ item.text || item.name }}
122
+ </div>
123
+ </el-badge>
124
+ </div>
125
+ </el-scrollbar>
126
+ <!-- 常用应用 end -->
127
+ </div>
128
+ <div class="es-simplicity-side-app" v-if="_aiConfig && showAi">
129
+ <img
130
+ :src="_aiConfig.icon"
131
+ class="es-simplicity-ai-icon"
132
+ @click="handlerSetDrawer(_aiConfig, 'ai')"
133
+ />
134
+ </div>
135
+ </div>
136
+ <div class="es-simplicity-main">
137
+ <!-- 应用 -->
138
+ <apps
139
+ :visible.sync="showApps"
140
+ :menu-icon="menuIcon"
141
+ :color="appColor"
142
+ :backgroundColor="appBackgroundColor"
143
+ :applications="applications"
144
+ :business="business"
145
+ :systems="systems"
146
+ :user="user"
147
+ @click="handlerClickApps"
148
+ ></apps>
149
+ <!-- 应用 end -->
150
+
151
+ <!-- AI/IM -->
152
+ <el-drawer
153
+ class="es-simplicity-public-drawer"
154
+ :direction="drawer.direction"
155
+ modal-class="es-simplicity-apps-modal"
156
+ size="100%"
157
+ show-close
158
+ :modal-append-to-body="false"
159
+ :visible.sync="drawer.visible"
160
+ >
161
+ <div
162
+ class="es-public-drawer-main"
163
+ v-if="drawer.ai && drawer.ai.url"
164
+ v-show="drawer.active == 'ai'"
165
+ >
166
+ <template v-if="isIE || drawer.ai.method !== 'wujie'">
167
+ <iframe
168
+ frameborder="0"
169
+ width="100%"
170
+ height="100%"
171
+ :src="drawer.ai.url"
172
+ ></iframe>
173
+ </template>
174
+ <template v-else>
175
+ <es-wujie
176
+ :host="host"
177
+ :show="true"
178
+ :props="wjProps"
179
+ :attrs="wjAttrs"
180
+ :name="drawer.ai.name"
181
+ :url="drawer.ai.url"
182
+ ></es-wujie>
183
+ </template>
184
+ </div>
185
+ <div
186
+ class="es-public-drawer-main"
187
+ v-if="drawer.im && drawer.im.url"
188
+ v-show="drawer.active == 'im'"
189
+ >
190
+ <template v-if="isIE || drawer.im.method !== 'wujie'">
191
+ <iframe
192
+ frameborder="0"
193
+ width="100%"
194
+ height="100%"
195
+ :src="drawer.im.url"
196
+ ></iframe>
197
+ </template>
198
+ <template v-else>
199
+ <es-wujie
200
+ :host="host"
201
+ :show="true"
202
+ :props="wjProps"
203
+ :attrs="wjAttrs"
204
+ :name="drawer.im.name"
205
+ :url="drawer.im.url"
206
+ ></es-wujie>
207
+ </template>
208
+ </div>
209
+ </el-drawer>
210
+ <!-- AI/IM end -->
211
+
212
+ <!-- 路由、iframe -->
213
+ <div class="es-simplicity-tabs-handler-mask" v-show="showTabsHandler">
214
+ <el-card class="es-simplicity-tabs-handler" ref="tabsHandler">
215
+ <div
216
+ class="es-simplicity-tabs-handler-item"
217
+ :class="{ 'is-disabled': isDisabled.refresh }"
218
+ @click="isDisabled.refresh ? '' : handleTabsEvents(0)"
219
+ >
220
+ 刷新
221
+ </div>
222
+ <div
223
+ class="es-simplicity-tabs-handler-item"
224
+ @click="handleTabsEvents(1)"
225
+ >
226
+ 关闭标签
227
+ </div>
228
+ <div
229
+ class="es-simplicity-tabs-handler-item"
230
+ :class="{ 'is-disabled': isDisabled.other }"
231
+ @click="isDisabled.other ? '' : handleTabsEvents(2)"
232
+ >
233
+ 关闭其他
234
+ </div>
235
+ <div
236
+ class="es-simplicity-tabs-handler-item"
237
+ :class="{ 'is-disabled': isDisabled.left }"
238
+ @click="isDisabled.left ? '' : handleTabsEvents(3)"
239
+ >
240
+ 关闭左侧
241
+ </div>
242
+ <div
243
+ class="es-simplicity-tabs-handler-item"
244
+ :class="{ 'is-disabled': isDisabled.right }"
245
+ @click="isDisabled.right ? '' : handleTabsEvents(4)"
246
+ >
247
+ 关闭右侧
248
+ </div>
249
+ </el-card>
250
+ </div>
251
+ <el-tabs
252
+ class="es-simplicity-iframe"
253
+ :class="{ 'is-open': showMenu, 'is-fold': fold }"
254
+ v-model="activeName"
255
+ closable
256
+ hide-bar
257
+ opacity
258
+ @tab-click="handleTabClick"
259
+ @tab-remove="handleRemove"
260
+ @tab-contextmenu="handleContextmenu"
261
+ >
262
+ <!-- 操作栏 -->
263
+ <handler
264
+ slot="append"
265
+ v-bind="handleConfig"
266
+ :show-title-type="showTitleType"
267
+ :data="_handleDatas"
268
+ :nums="handleNums"
269
+ @click="handleClick"
270
+ ></handler>
271
+ <!-- 操作栏 end-->
272
+
273
+ <!-- 菜单 -->
274
+ <sub-menu
275
+ v-if="subMenus"
276
+ :collapse="isCollapse"
277
+ :mode="mode"
278
+ :visible.sync="showMenu"
279
+ :closed.sync="fold"
280
+ :size="menuWidth"
281
+ :title="title"
282
+ :color="menuColor"
283
+ :backgroundColor="menuBackgroundColor"
284
+ :menu-icon="menuIcon"
285
+ :active="subActive"
286
+ v-bind="subMenus"
287
+ @command="handlerClickMenu"
288
+ ></sub-menu>
289
+ <!-- 菜单 end -->
290
+ <el-tab-pane
291
+ v-for="item in tabs"
292
+ :key="item.id"
293
+ :label="item.text || item.name"
294
+ :name="item.id"
295
+ >
296
+ <router-page
297
+ v-if="item.method === 'router'"
298
+ v-bind="item"
299
+ :query="$parent.params"
300
+ ></router-page>
301
+ <iframe
302
+ v-else-if="isIE || item.method == 'iframe'"
303
+ v-loading="item.loading"
304
+ frameborder="0"
305
+ width="100%"
306
+ height="100%"
307
+ :id="activeName == item.id ? iframeId : item.id || item.appCode"
308
+ :name="activeName == item.id ? iframeId : item.id || item.appCode"
309
+ :onload="handleLoadIframe(item)"
310
+ :src="item.url"
311
+ ></iframe>
312
+ <es-wujie
313
+ v-else-if="item.method === 'wujie' && item.url"
314
+ :host="host"
315
+ :show="true"
316
+ :props="wjProps"
317
+ :attrs="wjAttrs"
318
+ :name="item.appCode"
319
+ :url="item.url"
320
+ ></es-wujie>
321
+ </el-tab-pane>
322
+ </el-tabs>
323
+ <!-- 路由、iframe end -->
324
+
325
+ <!-- 消息列表 -->
326
+ <message
327
+ v-if="showMsg"
328
+ ref="message"
329
+ :total.sync="handleNums.notice"
330
+ :visible.sync="showMsg"
331
+ :winopen="winopen"
332
+ @ignore="handleChange"
333
+ @handle="handleMenuTips"
334
+ ></message>
335
+ <!-- 消息列表 end-->
336
+
337
+ <!-- 设置 -->
338
+ <settings
339
+ v-bind="$attrs"
340
+ layout-type="simplicity"
341
+ active="simplicity"
342
+ :theme="themeColor"
343
+ :predefine="themes"
344
+ :visible.sync="showSet"
345
+ @change="handleChange"
346
+ @layout="handleLayout"
347
+ ></settings>
348
+ <!-- 设置 end-->
349
+
350
+ <!-- 消息提醒 -->
351
+ <notice :data="sysMsg" :winopen="winopen" @opened="handleOpened"></notice>
352
+ <!-- 消息提醒 end -->
353
+
354
+ <es-dialog
355
+ class="es-public-search-dialog"
356
+ :visible.sync="showSearch"
357
+ size="lg"
358
+ >
359
+ <search
360
+ :apps="applications"
361
+ :menus="menus"
362
+ :menuIcon="menuIcon"
363
+ @select="handleSelect"
364
+ ></search>
365
+ </es-dialog>
366
+ <!-- 公用弹窗 -->
367
+ <es-dialog :title="dialog.title" :visible.sync="dialog.show" size="md">
368
+ <template v-if="dialog.title == '查看在线人员' && !dialog.src">
369
+ <online></online>
370
+ </template>
371
+ <iframe
372
+ v-else-if="dialog.show"
373
+ width="100%"
374
+ height="100%"
375
+ frameborder="0"
376
+ :src="dialog.src"
377
+ ></iframe>
378
+ </es-dialog>
379
+ <!-- 公用弹窗 end -->
380
+ </div>
381
+ </div>
382
+ </template>
383
+
384
+ <script>
385
+ import avatar from './avatar.vue';
386
+ import handler from './handler.vue';
387
+ import subMenu from './sub-menu.vue';
388
+ import apps from './apps.vue';
389
+ import user from './user.vue';
390
+ import message from './message.vue';
391
+ import notice from './notice.vue';
392
+ import settings from '../public/settings.vue';
393
+ import routerPage from './router-page.vue';
394
+ import online from '../public/online.vue';
395
+ import search from '../public/search.vue';
396
+ import {
397
+ wss,
398
+ logout,
399
+ topic,
400
+ getUserAppWithTag,
401
+ recordUserApp,
402
+ getComplexApplications,
403
+ getComplexApplicationsNew
404
+ } from 'eoss-ui/src/config/api.js';
405
+ import store from 'eoss-ui/src/utils/store';
406
+ import util from 'eoss-ui/src/utils/util';
407
+ const isIE = /MSIE|Trident/.test(navigator.userAgent);
408
+ const systemMode = util.win.systemMode || 'default';
409
+ import WujieVue from 'wujie-vue2';
410
+ let events = [
411
+ (tabs, index, that) => {
412
+ let tab = tabs[index];
413
+ if (tab.method == 'iframe') {
414
+ tabs[index].url = util.handlerUrl(tab.url);
415
+ }
416
+ if (tab.method === 'wujie' && tab.appCode) {
417
+ const url = tab.url;
418
+ tab.url = '';
419
+ that.$nextTick(() => {
420
+ tab.url = url;
421
+ });
422
+ }
423
+ if (tab.method === 'router') {
424
+ that.$set(tabs[index], 'keys', util.uuid());
425
+ }
426
+ return tabs;
427
+ },
428
+ (tabs, index, that) => {
429
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
430
+ if (tabs.length == 1) {
431
+ that.activeName = '';
432
+ } else if (i == index) {
433
+ if (index < tabs.length - 1) {
434
+ that.activeName = tabs[index + 1].id;
435
+ } else {
436
+ that.activeName = tabs[index - 1].id;
437
+ }
438
+ }
439
+ tabs.splice(index, 1);
440
+ return tabs;
441
+ },
442
+ (tabs, index, that) => {
443
+ let tab = tabs.slice(index, index + 1);
444
+ that.activeName = tab[0].id;
445
+ return tab;
446
+ },
447
+ (tabs, index, that) => {
448
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
449
+ if (i < index) {
450
+ that.activeName = tabs[index].id;
451
+ }
452
+ tabs.splice(0, index);
453
+ return tabs;
454
+ },
455
+ (tabs, index, that) => {
456
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
457
+ if (i > index) {
458
+ that.activeName = tabs[index].id;
459
+ }
460
+ tabs.splice(index + 1, tabs.length - index);
461
+ return tabs;
462
+ }
463
+ ];
464
+ export default {
465
+ name: 'Simplicity',
466
+ provide() {
467
+ return {
468
+ esMain: this,
469
+ refresh: this.handleRefresh,
470
+ jumpMenu: this.jumpMenu
471
+ };
472
+ },
473
+ components: {
474
+ avatar,
475
+ handler,
476
+ subMenu,
477
+ apps,
478
+ user,
479
+ message,
480
+ notice,
481
+ settings,
482
+ routerPage,
483
+ online,
484
+ search
485
+ },
486
+ props: {
487
+ //是否显示头像
488
+ avatar: {
489
+ type: Boolean,
490
+ default: true
491
+ },
492
+ //im用例编码
493
+ imUseCaseCode: String,
494
+ //ai用例编码
495
+ aiUseCaseCode: String,
496
+ //模式
497
+ mode: {
498
+ type: String,
499
+ default: systemMode
500
+ },
501
+ sysCode: String,
502
+ appCode: String,
503
+ //logo
504
+ logo: String,
505
+ //菜单、应用默认图标
506
+ menuIcon: {
507
+ type: String,
508
+ default: 'es-icon-application'
509
+ },
510
+ //默认主题颜色
511
+ theme: {
512
+ type: String,
513
+ default: '#409eff'
514
+ },
515
+ //主题颜色选择颜色集合
516
+ themes: Array,
517
+ //操作栏配置
518
+ handleData: {
519
+ type: Array,
520
+ default: () => [
521
+ {
522
+ type: 'contact'
523
+ },
524
+ { type: 'dateTime' },
525
+ { type: 'online' },
526
+ {
527
+ type: 'search',
528
+ icon: 'es-icon-sousuo',
529
+ title: '搜索'
530
+ },
531
+ {
532
+ type: 'im',
533
+ icon: 'es-icon-message',
534
+ title: 'IM'
535
+ },
536
+ {
537
+ type: 'index',
538
+ icon: 'es-icon-home',
539
+ title: '门户'
540
+ },
541
+ {
542
+ type: 'home',
543
+ icon: 'es-icon-zhuye',
544
+ title: '首页'
545
+ },
546
+ {
547
+ type: 'notice',
548
+ icon: 'es-icon-xiaoxi',
549
+ title: '消息'
550
+ },
551
+ {
552
+ type: 'quit',
553
+ icon: 'es-icon-tuichu',
554
+ title: '退出'
555
+ },
556
+ {
557
+ type: 'set',
558
+ icon: 'es-icon-shezhi',
559
+ title: '设置'
560
+ }
561
+ ]
562
+ },
563
+ //操作栏单项配置
564
+ handleConfig: Object,
565
+ //需要隐藏的头部功能
566
+ hides: Object,
567
+ //菜单颜色
568
+ menuColor: [String, Array],
569
+ //菜单背景颜色
570
+ menuBackgroundColor: [String, Array],
571
+ //菜单是否折叠形式
572
+ collapse: Boolean,
573
+ //应用颜色
574
+ appColor: [String, Array],
575
+ //应用背景颜色
576
+ appBackgroundColor: [String, Array],
577
+ //默认头像
578
+ userHead: String,
579
+ //应用列表接口
580
+ appsUrl: {
581
+ type: String,
582
+ default: getUserAppWithTag
583
+ },
584
+ //是否启用子应用菜单接口
585
+ application: {
586
+ type: Boolean,
587
+ default: false
588
+ },
589
+ //菜单接口
590
+ menuUrl: String,
591
+ //远程请求菜单
592
+ remote: {
593
+ type: Boolean,
594
+ default: true
595
+ },
596
+ //websocket
597
+ socket: {
598
+ type: Boolean,
599
+ default: true
600
+ },
601
+ //iframeId
602
+ iframeId: {
603
+ type: String,
604
+ default: 'stage'
605
+ },
606
+ //查看在线人数
607
+ onlineView: {
608
+ type: [String, Boolean],
609
+ default: true
610
+ },
611
+ //消息办理是否采用window.open的方式打开
612
+ winopen: {
613
+ type: Boolean,
614
+ default: true
615
+ },
616
+ //是否采用wujie微前端加载页面
617
+ loadWujie: {
618
+ type: Boolean,
619
+ default: true
620
+ },
621
+ //无界微前端Props属性
622
+ wjProps: Object,
623
+ //无界微前端Attrs属性
624
+ wjAttrs: Object,
625
+ //菜单宽度
626
+ menuWidth: {
627
+ type: Number,
628
+ default: 220
629
+ },
630
+ //路由方式
631
+ routeType: String,
632
+ host: {
633
+ type: String,
634
+ default() {
635
+ return sessionStorage.getItem('host') || '';
636
+ }
637
+ },
638
+ //切换旧版样式
639
+ oldVersion: Boolean,
640
+ //运维联系人
641
+ contacts: Object,
642
+ //展示系统操作按钮标题类型
643
+ showHandlerTitleType: {
644
+ type: String,
645
+ default: 'tooltip',
646
+ validator(val) {
647
+ return ['tooltip', 'text'].includes(val);
648
+ }
649
+ }
650
+ },
651
+ data() {
652
+ return {
653
+ //是否显示头像
654
+ showAvatar: this.avatar,
655
+ // 问候语
656
+ greeting: util.timeCycle() + '好!',
657
+ //用例权限编码
658
+ useCaseCodes: util.getStorage('useCaseCodes'),
659
+ //显示用户信息
660
+ showUser: false,
661
+ //主题色
662
+ themeColor: this.theme,
663
+ //是否ie浏览器
664
+ isIE: isIE,
665
+ //logo
666
+ mainLogo: this.logo,
667
+ //侧边用户应用
668
+ userApps: [],
669
+ //点击应用存侧边
670
+ newApps: [],
671
+ //所有菜单
672
+ menus: [],
673
+ //菜单名称
674
+ title: '',
675
+ //子菜单
676
+ subMenus: null,
677
+ //展示菜单导航
678
+ showMenu: false,
679
+ //子菜单选中
680
+ subActive: '',
681
+ //折叠菜单
682
+ fold: false,
683
+ //菜单样式是否折叠形式
684
+ isCollapse: this.collapse,
685
+ //人工智能配置
686
+ aiConfig: null,
687
+ //im配置
688
+ imConfig: null,
689
+ //公用窗口面板配置
690
+ drawer: {
691
+ visible: false,
692
+ direction: 'ltr',
693
+ ai: {},
694
+ im: {},
695
+ active: ''
696
+ },
697
+ //所有应用
698
+ applications: [],
699
+ //业务系统
700
+ business: [],
701
+ //系统管理
702
+ systems: [],
703
+ //气泡数
704
+ menuTips: {},
705
+ //展示所有应用
706
+ showApps: false,
707
+ //用户信息
708
+ userModel: {},
709
+ //通知类型列表
710
+ notifyList: [],
711
+ //用户样式
712
+ userStyle: {},
713
+ //通知类型
714
+ notify: '',
715
+ //用户信息表单结构
716
+ userInfoContents: undefined,
717
+ //窗口页签
718
+ tabs: [],
719
+ //页签选中name
720
+ activeName: '',
721
+ //初始应用菜单页
722
+ initApps: null,
723
+ //首页地址
724
+ indexUrl: '',
725
+ //首页名称
726
+ indexTitle: '首页',
727
+ //首页配置
728
+ homePage: {},
729
+ //门户跳转页地址
730
+ doorIndex: '',
731
+ //弹窗
732
+ dialog: {},
733
+ handleNums: {
734
+ //消息数
735
+ notice: 0,
736
+ //在线人数
737
+ online: 1
738
+ },
739
+ //消息列表展示状态
740
+ showMsg: false,
741
+ //搜索
742
+ showSearch: false,
743
+ //即时消息
744
+ sysMsg: [],
745
+ //定时关闭及时消息对象
746
+ sysMsgOut: null,
747
+ //额外信息数据
748
+ extraData: '',
749
+ //显示设置面板
750
+ showSet: false,
751
+ //窗口是否可选
752
+ isDisabled: {},
753
+ //显示页签操作
754
+ showTabsHandler: false,
755
+ //页签对象
756
+ pane: null,
757
+ //选中菜单
758
+ active: '',
759
+ //单位名称
760
+ simpleUserInfo: {},
761
+ handleDatas: this.handleData,
762
+ //顶部右侧工具隐藏
763
+ handleHides: '',
764
+ // 显示旧设计
765
+ showOld: this.oldVersion,
766
+ //运维联系人
767
+ contact: this.contacts,
768
+ //单点退出地址
769
+ singleLogout: null,
770
+ //展示系统操作按钮标题类型
771
+ showTitleType: this.showHandlerTitleType
772
+ };
773
+ },
774
+ computed: {
775
+ _handleDatas() {
776
+ const handleDatas = this.handleDatas.filter((item, index) => {
777
+ if (item.type === 'contact' && this.contact) {
778
+ this.$set(this.handleDatas, index, { ...item, ...this.contact });
779
+ }
780
+ if (item.type === 'contact' && !this.contact) {
781
+ return false;
782
+ }
783
+ return !item.hide && !this.hide[item.type];
784
+ });
785
+ return handleDatas;
786
+ },
787
+ //菜单接口
788
+ _menuUrl() {
789
+ if (this.menuUrl) {
790
+ return this.menuUrl;
791
+ }
792
+ if (this.application) {
793
+ return getComplexApplicationsNew;
794
+ }
795
+ return getComplexApplications;
796
+ },
797
+ //人工智能配置
798
+ _aiConfig() {
799
+ return this.aiConfig
800
+ ? {
801
+ ...this.aiConfig,
802
+ icon: 'data:image/png;base64,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'
803
+ }
804
+ : false;
805
+ },
806
+ showAi() {
807
+ return this.aiUseCaseCode
808
+ ? this.useCaseCodes.indexOf(this.aiUseCaseCode) > -1
809
+ : true;
810
+ },
811
+ //用户信息
812
+ user() {
813
+ return this.userModel ? this.userModel : store.get('userModel');
814
+ },
815
+ //在线人数列表地址
816
+ onlineUrl() {
817
+ if (this.onlineView) {
818
+ return typeof this.onlineView == 'string' ? this.onlineView : '';
819
+ }
820
+ return false;
821
+ },
822
+ //隐藏操作按键
823
+ hide() {
824
+ let handleHides = {};
825
+ if (this.handleHides) {
826
+ handleHides = JSON.parse(
827
+ this.handleHides.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2":')
828
+ );
829
+ }
830
+ let hides = {
831
+ contact: this.contact ? false : true,
832
+ im: this.imConfig
833
+ ? this.imUseCaseCode
834
+ ? this.useCaseCodes.indexOf(this.imUseCaseCode) == -1
835
+ : false
836
+ : true,
837
+ home: this.indexUrl ? false : true,
838
+ index: this.doorIndex ? false : true,
839
+ old: this.showOld ? false : true
840
+ };
841
+
842
+ if (this.layout === 'subsystem' || this.application) {
843
+ hides.system = false;
844
+ }
845
+ if (this.layout === 'topside' || this.layout === 'side') {
846
+ hides.user = true;
847
+ }
848
+ return { ...hides, ...this.hides, ...handleHides };
849
+ }
850
+ },
851
+ watch: {
852
+ menuTips: {
853
+ deep: true,
854
+ handler() {
855
+ this.setTips(this.userApps);
856
+ this.setTips(this.applications);
857
+ this.setTips(this.business);
858
+ this.setTips(this.systems);
859
+ this.setTips(this.menus);
860
+ }
861
+ }
862
+ },
863
+ created() {
864
+ this.doorIndex = sessionStorage.getItem('doorIndex');
865
+ },
866
+ mounted() {
867
+ this.handleListener();
868
+ },
869
+ methods: {
870
+ handleDepSelect(res) {
871
+ this.$refs.user.handleSelect(res);
872
+ },
873
+ /**
874
+ * @desc:匹配路由
875
+ * @author huangbo
876
+ * @date 2024年9月7日
877
+ **/
878
+ hasRouter(res, url, code) {
879
+ if (!url) {
880
+ return false;
881
+ }
882
+ if (Array.isArray(res)) {
883
+ for (let i in res) {
884
+ let path = this.hasRouter(res[i], url, code);
885
+ if (path) {
886
+ return path;
887
+ }
888
+ }
889
+ } else {
890
+ let path = res.path;
891
+ if (path !== '/' && path !== '/404') {
892
+ path = path.replace(path[1], path[1].toLowerCase());
893
+ }
894
+ let pathname = url.substring(url.indexOf('#/') + 1);
895
+ pathname = pathname.split('?')[0];
896
+ let appCode;
897
+ if (res.path !== '/' && pathname == path) {
898
+ if (res.components) {
899
+ if (!res.components[code]) {
900
+ console.error(
901
+ '路由“命名视图”规范属性名称与菜单appCode不一致',
902
+ res,
903
+ code
904
+ );
905
+ appCode = Object.keys(res.components).filter((item) => {
906
+ return item !== 'default';
907
+ })[0];
908
+ }
909
+ } else {
910
+ console.error(
911
+ '请根据路由“命名视图”规范,正确添加components属性名称',
912
+ res
913
+ );
914
+ }
915
+ return appCode ? { path: pathname, appCode } : pathname;
916
+ }
917
+ if (res && Object.prototype.hasOwnProperty.call(res, 'children')) {
918
+ let path = this.hasRouter(res.children, url, code);
919
+ if (path) {
920
+ return path;
921
+ }
922
+ }
923
+ }
924
+ return false;
925
+ },
926
+ /**
927
+ * @desc:获取初始数据
928
+ * @author huangbo
929
+ * @date 2024年9月7日
930
+ **/
931
+ init(results, first) {
932
+ this.setConfig(results);
933
+ if (this.remote && first) {
934
+ this.getApplications();
935
+ }
936
+ },
937
+ /**
938
+ * @desc:设置用户配置及信息
939
+ * @author huangbo
940
+ * @date 2024年9月7日
941
+ **/
942
+ setConfig(results) {
943
+ localStorage.setItem('mainConfig', JSON.stringify(results));
944
+ util.setStorage({
945
+ type: this.storage,
946
+ key: {
947
+ depId: results.userModel.depId,
948
+ orgId: results.userModel.orgId,
949
+ userId: results.userModel.userId,
950
+ userName: results.userModel.username || results.userModel.userName,
951
+ useCaseCodes: results.resourceCodes || results.userModel.resourceCodes
952
+ }
953
+ });
954
+ for (let i in results) {
955
+ if (i === 'mainLogoUrl' && results[i]) {
956
+ this.mainLogo = results[i];
957
+ }
958
+ if (
959
+ i === 'mainBannerUrl' &&
960
+ results[i] &&
961
+ this.headerImage === undefined
962
+ ) {
963
+ this.headerImg = results[i];
964
+ }
965
+ if (i === 'initApplication' && results[i]) {
966
+ this.initApps = results[i].split(',');
967
+ }
968
+ if (i === 'indexUrl' && results[i]) {
969
+ this.indexUrl = results[i];
970
+ }
971
+ if (i === 'doorIndex' && results[i]) {
972
+ util.win.open(results[i]);
973
+ this.doorIndex = results[i];
974
+ }
975
+ if (i === 'subsystemName' && results[i]) {
976
+ document.title = results[i];
977
+ }
978
+ if (i === 'loginPage' && results[i]) {
979
+ util.setStorage({ key: 'loginPage', value: results[i] });
980
+ }
981
+ if (i === 'sysLogoIco' && results[i]) {
982
+ localStorage.setItem('sysLogoIco', results[i]);
983
+ util.setFavicon(results[i]);
984
+ }
985
+ if (i === 'userStyle' && results[i]) {
986
+ if (results[i].color) {
987
+ let color = unescape(results[i].color).toLowerCase();
988
+ if (util.startWith(color, '#')) {
989
+ this.themeColor = color;
990
+ }
991
+ }
992
+ if (results[i].indexUrl) {
993
+ this.indexUrl = results[i].indexUrl;
994
+ }
995
+ this.userStyle = results[i];
996
+ this.notify = results[i].notify || '';
997
+ }
998
+ if (i === 'subsystemExtend' && results[i]) {
999
+ if (results[i].indexTitle) {
1000
+ this.indexTitle = results[i].indexTitle;
1001
+ }
1002
+ if (Object.prototype.hasOwnProperty.call(results[i], 'showAvatar')) {
1003
+ this.showAvatar = JSON.parse(results[i].showAvatar);
1004
+ }
1005
+ if (results[i].themeColor) {
1006
+ let color = unescape(results[i].themeColor).toLowerCase();
1007
+ if (util.startWith(color, '#')) {
1008
+ this.themeColor = color;
1009
+ }
1010
+ }
1011
+ //三方单点登录退出地址
1012
+ if (results[i].singleLogout) {
1013
+ this.singleLogout = results[i].singleLogout.split(',');
1014
+ }
1015
+ if (results[i].userInfoContents) {
1016
+ this.userInfoContents = JSON.parse(results[i].userInfoContents);
1017
+ }
1018
+ //水印配置
1019
+ if (results[i].webPageWatermark) {
1020
+ try {
1021
+ util.win.webPageWatermark = results[i].webPageWatermark;
1022
+ util.watermark(results[i].webPageWatermark);
1023
+ } catch (error) {}
1024
+ }
1025
+ //登录页页面地址
1026
+ if (results[i].loginPage) {
1027
+ util.setStorage({ key: 'loginPage', value: results[i].loginPage });
1028
+ }
1029
+ //登录页页面地址
1030
+ if (results[i].openModel) {
1031
+ util.setStorage({ key: 'openModel', value: results[i].openModel });
1032
+ }
1033
+ //ai配置
1034
+ if (results[i].aiConfig) {
1035
+ if (typeof results[i].aiConfig == 'string') {
1036
+ try {
1037
+ this.aiConfig = JSON.parse(results[i].aiConfig);
1038
+ } catch (error) {
1039
+ this.aiConfig = { url: results[i].aiConfig };
1040
+ }
1041
+ } else {
1042
+ this.aiConfig = results[i].aiConfig;
1043
+ }
1044
+ }
1045
+ //im配置
1046
+ if (results[i].imConfig) {
1047
+ if (typeof results[i].imConfig == 'string') {
1048
+ try {
1049
+ this.imConfig = JSON.parse(results[i].imConfig);
1050
+ } catch (error) {
1051
+ this.imConfig = { url: results[i].imConfig };
1052
+ }
1053
+ } else {
1054
+ this.imConfig = results[i].imConfig;
1055
+ }
1056
+ }
1057
+ if (results[i].portalPage || results[i].portalpage) {
1058
+ this.doorIndex = results[i].portalPage || results[i].portalpage;
1059
+ }
1060
+ if (results[i].multipleVersion || results[i].oldVersion) {
1061
+ this.showOld = results[i].oldVersion
1062
+ ? JSON.parse(results[i].oldVersion)
1063
+ : true;
1064
+ }
1065
+
1066
+ if (results[i].handleDatas) {
1067
+ this.handleDatas = JSON.parse(results[i].handleDatas);
1068
+ }
1069
+ if (results[i].topRightToolHide || results[i].handleHides) {
1070
+ this.handleHides = JSON.parse(
1071
+ results[i].topRightToolHide || results[i].handleHides
1072
+ );
1073
+ }
1074
+ if (results[i].contact) {
1075
+ let contact = JSON.parse(results[i].contact);
1076
+ let content = contact.content.split(',');
1077
+ this;
1078
+ this.contact = {
1079
+ ...contact,
1080
+ content
1081
+ };
1082
+ }
1083
+ //展示系统操作按钮标题类型
1084
+ if (results[i].showHandlerTitleType) {
1085
+ this.showTitleType = results[i].showHandlerTitleType;
1086
+ }
1087
+ //菜单样式是否折叠形式
1088
+ if (results[i].menuCollapse !== undefined) {
1089
+ this.isCollapse =
1090
+ results[i].menuCollapse !== false &&
1091
+ results[i].menuCollapse !== 'false';
1092
+ }
1093
+ }
1094
+ if (i === 'userModel' && results[i]) {
1095
+ if (results[i].userHeadUrl) {
1096
+ results[i].userHeadUrl = util.jointUrl({
1097
+ url: results[i].userHeadUrl,
1098
+ reg: '/main2'
1099
+ });
1100
+ } else {
1101
+ results[i].userHeadUrl = this.userHead;
1102
+ }
1103
+ this.userModel = results[i];
1104
+ if (results[i].openModel) {
1105
+ util.setStorage({ key: 'openModel', value: results[i].openModel });
1106
+ }
1107
+ }
1108
+ if (i === 'notifyList' && results[i]) {
1109
+ this.notifyList = results[i];
1110
+ }
1111
+ store.set(i, results[i]);
1112
+ }
1113
+ },
1114
+ /**
1115
+ * @desc:获取所有应用
1116
+ * @author huangbo
1117
+ * @date 2024年9月7日
1118
+ **/
1119
+ getApplications() {
1120
+ let loading = util.loading('', '加载中...');
1121
+ util
1122
+ .ajax({
1123
+ url: this.appsUrl,
1124
+ defaults: true
1125
+ })
1126
+ .then((res) => {
1127
+ if (this.socket) {
1128
+ this.initWebSocket();
1129
+ }
1130
+ if (res.rCode === 0) {
1131
+ if (res.results && Object.keys(res.results).length) {
1132
+ let { all, app_special_business_system, app_system, app_user } =
1133
+ res.results;
1134
+ this.userApps = app_user.filter((item) => {
1135
+ return item.permission !== false;
1136
+ });
1137
+ this.applications = all;
1138
+ this.business = app_special_business_system;
1139
+ this.systems = app_system;
1140
+ this.setTips(this.userApps);
1141
+ this.setTips(this.applications);
1142
+ this.setTips(this.business);
1143
+ this.setTips(this.systems);
1144
+ } else {
1145
+ this.$message.error('未分配应用菜单权限,请联系管理员!');
1146
+ }
1147
+ this.getMenus(loading);
1148
+ } else {
1149
+ loading.close();
1150
+ let msg = res.msg || '系统错误,请联系管理员!';
1151
+ this.$message.error(msg);
1152
+ }
1153
+ })
1154
+ .catch((err) => {
1155
+ loading.close();
1156
+ if (err.message && err.message !== 'canceled') {
1157
+ this.$message.error(err.message);
1158
+ }
1159
+ });
1160
+ },
1161
+ /**
1162
+ * @desc:获取菜单列表
1163
+ * @author huangbo
1164
+ * @date 2024年9月7日
1165
+ **/
1166
+ getMenus(loading) {
1167
+ const menuData = store.get('nav');
1168
+ if (menuData && menuData.length) {
1169
+ loading.close();
1170
+ this.renderMenus(menuData);
1171
+ return;
1172
+ }
1173
+ util
1174
+ .ajax({ url: this._menuUrl })
1175
+ .then((res) => {
1176
+ loading.close();
1177
+ if (res.rCode === 0) {
1178
+ if (res.results && res.results.length) {
1179
+ //this.$emit('update:menuData', res.results);
1180
+ store.set('nav', JSON.parse(JSON.stringify(res.results)));
1181
+ this.renderMenus(JSON.parse(JSON.stringify(res.results)));
1182
+ } else {
1183
+ this.$message.error('未分配菜单权限,请联系管理员!');
1184
+ }
1185
+ } else {
1186
+ let msg = res.msg || '系统错误,请联系管理员!';
1187
+ this.$message.error(msg);
1188
+ }
1189
+ })
1190
+ .catch((err) => {
1191
+ loading.close();
1192
+ if (err.message && err.message !== 'canceled') {
1193
+ this.$message.error(err.message);
1194
+ }
1195
+ });
1196
+ },
1197
+ /**
1198
+ * @desc:处理菜单列表
1199
+ * @author huangbo
1200
+ * @date 2024年9月7日
1201
+ **/
1202
+ renderMenus(res) {
1203
+ this.menus = res;
1204
+ this.setTips(this.menus);
1205
+ store.set('nav', this.menus);
1206
+ if (this.indexUrl) {
1207
+ let obj = this.getMenu(this.menus, this.indexUrl);
1208
+ obj = obj
1209
+ ? JSON.parse(JSON.stringify(obj))
1210
+ : {
1211
+ url: this.indexUrl,
1212
+ text: this.indexTitle,
1213
+ id: '0',
1214
+ appCode: 'indexUrl'
1215
+ };
1216
+ this.homePage = this.setIframeType(obj);
1217
+ if (!this.appCode) {
1218
+ this.tabs = [this.homePage];
1219
+ this.activeName = this.homePage.id;
1220
+ }
1221
+ }
1222
+ if (this.appCode) {
1223
+ let code = this.sysCode || this.appCode;
1224
+ let app = this.userApps.filter((item) => {
1225
+ return item.code === code;
1226
+ })[0];
1227
+ if (app) {
1228
+ this.active = app.id;
1229
+ if (app.url) {
1230
+ let obj = this.getMenu(this.menus, app.url);
1231
+ if (obj) {
1232
+ obj = JSON.parse(JSON.stringify(obj));
1233
+ let tab = this.setIframeType(obj);
1234
+ this.tabs = [tab];
1235
+ this.activeName = tab.id;
1236
+ } else {
1237
+ this.tabs = [app];
1238
+ }
1239
+ }
1240
+ }
1241
+ if (this.sysCode) {
1242
+ let subMenus = this.getMenu(this.menus, this.sysCode, 'appCode');
1243
+ if (subMenus) {
1244
+ let obj = this.getMenu(this.menus, this.appCode, 'appCode');
1245
+ if (obj) {
1246
+ if (obj.url) {
1247
+ obj = JSON.parse(JSON.stringify(obj));
1248
+ } else {
1249
+ obj = JSON.parse(JSON.stringify(this.getFirst(obj)));
1250
+ }
1251
+ this.subActive = obj.id;
1252
+ let tab = this.setIframeType(obj);
1253
+ this.tabs = [tab];
1254
+ this.activeName = tab.id;
1255
+ } else {
1256
+ this.subActive = '';
1257
+ }
1258
+ this.subMenus = subMenus;
1259
+ this.showMenu =
1260
+ (subMenus.children && subMenus.children.length > 0) ||
1261
+ (subMenus.fourthTabs && subMenus.fourthTabs.length > 0);
1262
+ } else {
1263
+ this.subMenus = null;
1264
+ this.showMenu = false;
1265
+ this.$message.error('未分配菜单权限,请联系管理员!');
1266
+ }
1267
+ } else {
1268
+ let subMenus = this.getMenu(this.menus, this.appCode, 'appCode');
1269
+ if (subMenus) {
1270
+ if (this.tabs.length == 0) {
1271
+ let obj = this.getFirst(subMenus);
1272
+ if (obj) {
1273
+ obj = JSON.parse(JSON.stringify(obj));
1274
+ this.subActive = obj.id;
1275
+ let tab = this.setIframeType(obj);
1276
+ this.tabs = [tab];
1277
+ this.activeName = tab.id;
1278
+ } else {
1279
+ this.subActive = '';
1280
+ }
1281
+ }
1282
+ this.subMenus = subMenus;
1283
+ this.showMenu =
1284
+ (subMenus.children && subMenus.children.length > 0) ||
1285
+ (subMenus.fourthTabs && subMenus.fourthTabs.length > 0);
1286
+ } else {
1287
+ this.subMenus = null;
1288
+ this.showMenu = false;
1289
+ this.$message.error('未分配菜单权限,请联系管理员!');
1290
+ }
1291
+ }
1292
+ } else if (this.initApps && this.initApps.length && !this.indexUrl) {
1293
+ let obj = this.getMenu(
1294
+ this.menus,
1295
+ this.initApps[this.initApps.length - 1]
1296
+ );
1297
+ if (obj) {
1298
+ let tab = this.setIframeType(JSON.parse(JSON.stringify(obj)));
1299
+ this.tabs.push(tab);
1300
+ this.activeName = tab.id;
1301
+ }
1302
+ }
1303
+ },
1304
+ /**
1305
+ * @desc:设置页面加载类型
1306
+ * @author huangbo
1307
+ * @date 2024年9月7日
1308
+ **/
1309
+ setIframeType(res) {
1310
+ let { url } = res;
1311
+ let urls = url.split('?');
1312
+ if (urls[0].indexOf('.js') > 1 && !isIE) {
1313
+ res.method = 'wujie';
1314
+ if (!res.appCode) {
1315
+ res.appCode = 'application_' + Date.now();
1316
+ }
1317
+ } else if (
1318
+ urls[0].indexOf('.dhtml') > 0 ||
1319
+ (urls[0].indexOf('.html') > 0 && urls[0].indexOf('.html#') === -1)
1320
+ ) {
1321
+ res.method = 'iframe';
1322
+ } else {
1323
+ if (urls[0].indexOf('.html') === -1 && urls[0].indexOf('#/') === -1) {
1324
+ res.method = 'iframe';
1325
+ } else {
1326
+ const routes = this.$router.options.routes;
1327
+ if (routes) {
1328
+ let path = this.hasRouter(routes, urls[0], res.appCode);
1329
+ if (path && this.routeType !== 'wujie') {
1330
+ res.method = 'router';
1331
+ if (typeof path === 'string') {
1332
+ res.path = path;
1333
+ } else {
1334
+ res.path = path.path;
1335
+ res.appCode = path.appCode;
1336
+ }
1337
+ res.keys = util.uuid();
1338
+ } else {
1339
+ let urlopenmode = util.getParams({
1340
+ url: url,
1341
+ name: 'urlopenmode'
1342
+ });
1343
+ if (
1344
+ this.loadWujie === false ||
1345
+ isIE ||
1346
+ res.urlopenmode == 3 ||
1347
+ urlopenmode == 3
1348
+ ) {
1349
+ res.method = 'iframe';
1350
+ } else {
1351
+ res.method = 'wujie';
1352
+ if (!res.appCode) {
1353
+ res.appCode = 'application_' + Date.now();
1354
+ }
1355
+ }
1356
+ }
1357
+ } else if (
1358
+ (urls[0].indexOf('.html') > -1 && urls[0].indexOf('#/') > -1) ||
1359
+ urls[0].indexOf('/#/') > -1
1360
+ ) {
1361
+ res.method = 'wujie';
1362
+ if (!res.appCode) {
1363
+ res.appCode = 'application_' + Date.now();
1364
+ }
1365
+ } else {
1366
+ res.method = 'iframe';
1367
+ }
1368
+ }
1369
+ }
1370
+ return res;
1371
+ },
1372
+ /**
1373
+ * @desc:获取菜单
1374
+ * @author huangbo
1375
+ * @date 2024年9月7日
1376
+ **/
1377
+ getMenu(menus, res, key) {
1378
+ if (Array.isArray(menus)) {
1379
+ for (let i = 0; i < menus.length; i++) {
1380
+ let item = menus[i];
1381
+ if (key) {
1382
+ if (item[key] === res) {
1383
+ return item;
1384
+ }
1385
+ } else if (
1386
+ item.url === res ||
1387
+ item.id === res ||
1388
+ item.appCode === res
1389
+ ) {
1390
+ return item;
1391
+ }
1392
+ if (
1393
+ Object.prototype.hasOwnProperty.call(item, 'children') &&
1394
+ item.children.length
1395
+ ) {
1396
+ let obj = this.getMenu(item.children, res, key);
1397
+ if (obj) {
1398
+ return obj;
1399
+ }
1400
+ } else if (
1401
+ Object.prototype.hasOwnProperty.call(item, 'fourthTabs') &&
1402
+ item.fourthTabs.length
1403
+ ) {
1404
+ let obj = this.getMenu(item.fourthTabs, res, key);
1405
+ if (obj) {
1406
+ return obj;
1407
+ }
1408
+ }
1409
+ }
1410
+ }
1411
+ return false;
1412
+ },
1413
+ /**
1414
+ * @desc:获取菜单第一条数据
1415
+ * @author huangbo
1416
+ * @date 2024年9月7日
1417
+ **/
1418
+ getFirst(obj) {
1419
+ if (!obj) {
1420
+ return '';
1421
+ }
1422
+ let openIdex = 0;
1423
+ if (
1424
+ obj.extendData &&
1425
+ (obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen)
1426
+ ) {
1427
+ openIdex = parseInt(
1428
+ obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen,
1429
+ 10
1430
+ );
1431
+ }
1432
+ if (obj.children && obj.children.length && obj.children[openIdex]) {
1433
+ return this.getFirst(obj.children[openIdex]);
1434
+ } else if (
1435
+ obj.fourthTabs &&
1436
+ obj.fourthTabs.length &&
1437
+ obj.fourthTabs[openIdex]
1438
+ ) {
1439
+ return this.getFirst(obj.fourthTabs[openIdex]);
1440
+ } else if (obj.url && obj.urlopenmode !== 1 && obj.urlopenmode !== 2) {
1441
+ return obj;
1442
+ }
1443
+ },
1444
+ /**
1445
+ * @desc:遍历设置菜单气泡提醒
1446
+ * @author huangbo
1447
+ * @date 2024年9月7日
1448
+ **/
1449
+ setTips(obj) {
1450
+ if (Array.isArray(obj)) {
1451
+ obj.forEach((item) => {
1452
+ this.setTips(item);
1453
+ });
1454
+ } else {
1455
+ if (
1456
+ obj &&
1457
+ Object.prototype.hasOwnProperty.call(obj, 'tips') &&
1458
+ obj.tips
1459
+ ) {
1460
+ this.$set(obj, 'tips', false);
1461
+ delete obj.tips;
1462
+ }
1463
+ let flag = 0;
1464
+ if (obj.children && obj.children.length) {
1465
+ obj.children.forEach((item) => {
1466
+ let n = this.setTips(item);
1467
+ flag += n ? parseInt(n) : 0;
1468
+ });
1469
+ if (flag) {
1470
+ this.$set(obj, 'tips', flag);
1471
+ this.setDot(this.userApps, obj.appCode);
1472
+ this.setDot(this.applications, obj.appCode);
1473
+ this.setDot(this.business, obj.appCode);
1474
+ this.setDot(this.systems, obj.appCode);
1475
+ return flag;
1476
+ }
1477
+ } else if (obj.fourthTabs && obj.fourthTabs.length) {
1478
+ obj.fourthTabs.forEach((item) => {
1479
+ let n = this.setTips(item);
1480
+ flag += n ? parseInt(n) : 0;
1481
+ });
1482
+ if (flag) {
1483
+ this.$set(obj, 'tips', flag);
1484
+ this.setDot(this.userApps, obj.appCode);
1485
+ this.setDot(this.applications, obj.appCode);
1486
+ this.setDot(this.business, obj.appCode);
1487
+ this.setDot(this.systems, obj.appCode);
1488
+ return flag;
1489
+ }
1490
+ } else {
1491
+ let num =
1492
+ this.menuTips[obj.id] ||
1493
+ this.menuTips[obj.code] ||
1494
+ this.menuTips[obj.appCode];
1495
+ if (num && Number(num)) {
1496
+ this.$set(obj, 'tips', Number(num));
1497
+ return num;
1498
+ }
1499
+ }
1500
+ }
1501
+ return false;
1502
+ },
1503
+ setDot(obj, code) {
1504
+ if (Array.isArray(obj)) {
1505
+ obj.forEach((item) => {
1506
+ this.setDot(item, code);
1507
+ });
1508
+ } else if (obj.code === code) {
1509
+ this.$set(obj, 'tips', true);
1510
+ }
1511
+ },
1512
+ /**
1513
+ * @desc:获取气泡提醒
1514
+ * @author huangbo
1515
+ * @date 2024年9月7日
1516
+ **/
1517
+ getBadge(res) {
1518
+ let num = res.tips || 0;
1519
+ return num === true
1520
+ ? {
1521
+ isDot: true
1522
+ //hidden: item.tips
1523
+ }
1524
+ : {
1525
+ value: num,
1526
+ max: 99,
1527
+ hidden: !num
1528
+ };
1529
+ },
1530
+ /**
1531
+ * @desc:开启weosocket
1532
+ * @author huangbo
1533
+ * @date 2024年9月7日
1534
+ **/
1535
+ initWebSocket() {
1536
+ this.webSocket = util.socket({
1537
+ url: wss,
1538
+ take: topic,
1539
+ success: (res) => {
1540
+ let data = res.data || {};
1541
+ for (let i in data) {
1542
+ if (data[i] !== null && data[i] !== undefined) {
1543
+ if (i === 'onlineUserNums' && data[i] > 0) {
1544
+ this.$set(this.handleNums, 'online', data[i]);
1545
+ }
1546
+ if (i === 'sysMsgNums' && data[i] !== null) {
1547
+ this.$set(this.handleNums, 'notice', data[i]);
1548
+ if (this.showMsg) {
1549
+ this.$refs.message.getMsg(true);
1550
+ }
1551
+ }
1552
+ if (i === 'menuTipsMap' && data[i] !== null) {
1553
+ this.menuTips = data[i];
1554
+ }
1555
+ if (i === 'sysMsgList' && data[i] !== null) {
1556
+ this.sysMsg = data[i];
1557
+ data[i] && data[i].length && this.$emit('bus-emit', 'waitdone');
1558
+ }
1559
+ if (i === 'extraData' && data[i] !== null) {
1560
+ this.extraData = data[i];
1561
+ }
1562
+ }
1563
+ }
1564
+ if (this.$store) {
1565
+ try {
1566
+ this.$store.commit('websocket', data);
1567
+ } catch (error) {}
1568
+ }
1569
+ const bus = this.bus || this.$eventBus || this.$root.Bus;
1570
+ if (bus) {
1571
+ bus.$emit('websocket', data);
1572
+ }
1573
+ if (util.win.eventBus) {
1574
+ util.win.eventBus.$emit('websocket', data);
1575
+ }
1576
+ }
1577
+ });
1578
+ },
1579
+ /**
1580
+ * @desc:显示用户信息
1581
+ * @author huangbo
1582
+ * @date 2024年9月7日
1583
+ **/
1584
+ showUserInfo() {
1585
+ if (this.showUser === false) {
1586
+ this.showUser = true;
1587
+ }
1588
+ },
1589
+ /**
1590
+ * @desc:删除更多应用菜单点击
1591
+ * @author huangbo
1592
+ * @date 2024年9月7日
1593
+ **/
1594
+ handleDelete(index) {
1595
+ this.newApps.splice(index, 1);
1596
+ },
1597
+ /**
1598
+ * @desc:储存更多应用菜单点击
1599
+ * @author huangbo
1600
+ * @date 2024年9月7日
1601
+ **/
1602
+ handlerClickApps(res) {
1603
+ if (res.permission === false) {
1604
+ return false;
1605
+ }
1606
+ let i = util.indexOfObj(this.newApps, res, 'id');
1607
+ if (i == -1) {
1608
+ this.newApps.push(res);
1609
+ }
1610
+ this.handlerClickApp(res);
1611
+ },
1612
+ /**
1613
+ * @desc:侧边应用菜单点击
1614
+ * @author huangbo
1615
+ * @date 2024年9月7日
1616
+ **/
1617
+ handlerClickApp(res) {
1618
+ this.showMsg = false;
1619
+ this.showSet = false;
1620
+ this.fold = false;
1621
+ this.showApps = false;
1622
+ this.drawer.visible = false;
1623
+ if (res) {
1624
+ if (res.permission === false) {
1625
+ return false;
1626
+ }
1627
+ if (
1628
+ (res.children && res.children.length) ||
1629
+ (res.fourthTabs && res.fourthTabs.length)
1630
+ ) {
1631
+ this.subMenus = res;
1632
+ this.showMenu = true;
1633
+ } else {
1634
+ this.subMenus = null;
1635
+ this.showMenu = false;
1636
+ }
1637
+ let set = true;
1638
+ if (res.url) {
1639
+ if (res.urlopenmode == 1 || res.openModel == 1) {
1640
+ set = false;
1641
+ util.win.open(res.url);
1642
+ } else if (res.urlopenmode == 2 || res.openModel == 2) {
1643
+ set = false;
1644
+ util.win.open(res.url, '_self');
1645
+ } else {
1646
+ let i = util.indexOfObj(this.tabs, res, 'id');
1647
+ this.activeName = res.id;
1648
+ if (i == -1) {
1649
+ let obj = res.code
1650
+ ? this.getMenu(this.menus, res.code, 'appCode')
1651
+ : null;
1652
+ if (obj) {
1653
+ obj = JSON.parse(JSON.stringify(obj));
1654
+ let n = util.indexOfObj(this.tabs, obj, 'id');
1655
+ if (n == -1) {
1656
+ let tab = this.setIframeType(obj);
1657
+ this.tabs.push(tab);
1658
+ this.activeName = tab.id;
1659
+ } else {
1660
+ if (obj.method == 'iframe') {
1661
+ obj.url = util.handlerUrl(obj.url);
1662
+ }
1663
+ }
1664
+ } else {
1665
+ let tab = this.setIframeType(res);
1666
+ this.tabs.push(tab);
1667
+ this.activeName = tab.id;
1668
+ }
1669
+ } else {
1670
+ if (res.method == 'iframe') {
1671
+ res.url = util.handlerUrl(res.url);
1672
+ }
1673
+ }
1674
+ }
1675
+ }
1676
+ if (set && res.code) {
1677
+ let subMenus = this.getMenu(this.menus, res.code, 'appCode');
1678
+ if (!subMenus && !res.url) {
1679
+ this.$alert('没有关联菜单,请联系管理员!', '提示', {
1680
+ confirmButtonText: '确定',
1681
+ type: 'warning'
1682
+ }).catch(() => {});
1683
+ } else {
1684
+ this.title = res.text || res.name;
1685
+ this.subMenus = subMenus ? subMenus : null;
1686
+ this.showMenu = subMenus
1687
+ ? (subMenus.children && subMenus.children.length > 0) ||
1688
+ (subMenus.fourthTabs && subMenus.fourthTabs.length > 0)
1689
+ : false;
1690
+ this.showApps = false;
1691
+ if (subMenus && subMenus.url) {
1692
+ subMenus = JSON.parse(JSON.stringify(subMenus));
1693
+ let i = util.indexOfObj(this.tabs, subMenus, 'id');
1694
+ this.activeName = subMenus.id;
1695
+ if (i == -1) {
1696
+ let tab = this.setIframeType(subMenus);
1697
+ this.tabs.push(tab);
1698
+ } else {
1699
+ if (subMenus.method == 'iframe') {
1700
+ this.tabs[i].url = util.handlerUrl(subMenus.url);
1701
+ }
1702
+ }
1703
+ }
1704
+ }
1705
+ }
1706
+ this.active = res.id;
1707
+ } else {
1708
+ this.showApps = !this.showApps;
1709
+ }
1710
+ },
1711
+ /**
1712
+ * @desc:显示Drawer界面
1713
+ * @author huangbo
1714
+ * @date 2024年9月7日
1715
+ **/
1716
+ handlerSetDrawer(res, type, direction = 'ltr') {
1717
+ this.drawer.visible = true;
1718
+ this.drawer.active = type;
1719
+ this.drawer.direction = direction;
1720
+ if (res) {
1721
+ let { mounted, url } = res;
1722
+ this.drawer[type] = {
1723
+ mounted,
1724
+ url,
1725
+ name: res.name || util.uuid()
1726
+ };
1727
+ }
1728
+ },
1729
+ /**
1730
+ * @desc:关闭Drawer界面
1731
+ * @author huangbo
1732
+ * @date 2024年9月7日
1733
+ **/
1734
+ handleCloseDrawer() {
1735
+ this.drawer = { visible: false };
1736
+ },
1737
+ /**
1738
+ * @desc:菜单点击
1739
+ * @author huangbo
1740
+ * @date 2024年9月7日
1741
+ **/
1742
+ handlerClickMenu(res) {
1743
+ util
1744
+ .ajax({
1745
+ url: recordUserApp,
1746
+ params: {
1747
+ userId: this.user.userId,
1748
+ appId: res.id
1749
+ }
1750
+ })
1751
+ .then(() => {})
1752
+ .catch(() => {});
1753
+ this.showMsg = false;
1754
+ this.showSet = false;
1755
+
1756
+ if (res.url) {
1757
+ if (res.urlopenmode == 1 || res.openModel == 1) {
1758
+ util.win.open(res.url);
1759
+ return;
1760
+ } else if (res.urlopenmode == 2 || res.openModel == 2) {
1761
+ util.win.open(res.url, '_self');
1762
+ return;
1763
+ }
1764
+ }
1765
+ let i = util.indexOfObj(this.tabs, res, 'id');
1766
+ if (i == -1) {
1767
+ let tab = this.setIframeType(res);
1768
+ this.tabs.push(tab);
1769
+ this.activeName = res.id;
1770
+ } else {
1771
+ this.tabs = events[0](this.tabs, i, this);
1772
+ // let tab = this.tabs[i];
1773
+ // if (tab.method === 'iframe') {
1774
+ // this.activeName = res.id;
1775
+ // this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1776
+ // } else {
1777
+ // if (tab.method === 'wujie' && tab.appCode) {
1778
+ // window.document
1779
+ // .querySelector(`iframe[name=${tab.appCode}]`)
1780
+ // .contentWindow.location.reload(true);
1781
+ // }
1782
+ // if (tab.method === 'router') {
1783
+ // this.$set(this.tabs[i], 'keys', util.uuid());
1784
+ // }
1785
+ // this.activeName = res.id;
1786
+ // }
1787
+ this.activeName = res.id;
1788
+ }
1789
+ },
1790
+
1791
+ /**
1792
+ * @desc:用户详情请求成功
1793
+ * @author huangbo
1794
+ * @date 2024年9月7日
1795
+ **/
1796
+ handleSuccess(res) {
1797
+ this.simpleUserInfo = res.simpleUserInfo;
1798
+ },
1799
+ /**
1800
+ * @desc:修改用户配置
1801
+ * @author huangbo
1802
+ * @date 2024年9月7日
1803
+ **/
1804
+ handleChangeConfig(name, res) {
1805
+ if (name == 'userHeadUrl') {
1806
+ this.$set(this.userModel, 'userHeadUrl', res);
1807
+ store.set('userModel', this.userModel);
1808
+ let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1809
+ sessionStorage.setItem(
1810
+ 'mainConfig',
1811
+ JSON.stringify({ ...mainConfig, userModel: this.userModel })
1812
+ );
1813
+ } else {
1814
+ this.$set(this.userStyle, 'notify', res);
1815
+ store.set('userStyle', this.userStyle);
1816
+ let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1817
+ localStorage.setItem(
1818
+ 'mainConfig',
1819
+ JSON.stringify({ ...mainConfig, userStyle: this.userStyle })
1820
+ );
1821
+ }
1822
+ },
1823
+ /**
1824
+ * @desc:关闭webSocket
1825
+ * @author huangbo
1826
+ * @date 2024年9月7日
1827
+ **/
1828
+ handlerClose() {
1829
+ if (this.webSocket) {
1830
+ this.webSocket.destroy();
1831
+ }
1832
+ },
1833
+ /**
1834
+ * @desc:刷新选中iframe页签
1835
+ * @author huangbo
1836
+ * @date 2024年9月7日
1837
+ **/
1838
+ handleRefresh(arg) {
1839
+ let i =
1840
+ arg && arg != true && arg !== 'pageData'
1841
+ ? util.indexOfObj(this.tabs, arg, 'appCode,code,id,url')
1842
+ : util.indexOfObj(this.tabs, this.activeName, 'id');
1843
+ let tab = this.tabs[i];
1844
+ if (isIE || tab.method === 'iframe') {
1845
+ if (arg && arg === 'pageData') {
1846
+ let iframe = document.getElementById(tab.id || tab.appCode);
1847
+ let source = tab.url;
1848
+ if (source && !util.startWith(source, ['http', 'https'], true)) {
1849
+ source = location.origin + source.replace('./', '/');
1850
+ }
1851
+ !iframe && (iframe = document.getElementById(this.iframeId));
1852
+ iframe &&
1853
+ iframe.contentWindow.postMessage(
1854
+ { method: 'pageData' },
1855
+ source || '*'
1856
+ );
1857
+ } else {
1858
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1859
+ }
1860
+ return;
1861
+ }
1862
+ if (tab.method === 'wujie' && tab.appCode) {
1863
+ if (arg && arg === 'pageData') {
1864
+ WujieVue.$emit('pageData', tab);
1865
+ } else {
1866
+ window.document
1867
+ .querySelector(`iframe[name=${tab.appCode}]`)
1868
+ .contentWindow.location.reload(true);
1869
+ }
1870
+ return;
1871
+ }
1872
+ if (tab.method === 'router') {
1873
+ if (arg && arg === 'pageData') {
1874
+ const bus = this.bus || this.$root.Bus;
1875
+ bus.$emit('pageData', tab);
1876
+ } else {
1877
+ this.$set(this.tabs[i], 'keys', util.uuid());
1878
+ }
1879
+ }
1880
+ },
1881
+ /**
1882
+ * @desc:删除iframe
1883
+ * @author huangbo
1884
+ * @date 2024年9月7日
1885
+ **/
1886
+ handleRemove(name) {
1887
+ let len = this.tabs.length - 1;
1888
+ let i = util.indexOfObj(this.tabs, name, 'id,code,appCode');
1889
+ if (i > -1) {
1890
+ this.tabs.splice(i, 1);
1891
+ if (this.tabs.length == 0) {
1892
+ this.activeName = '';
1893
+ } else if (i == len) {
1894
+ this.activeName = this.tabs[len - 1].id;
1895
+ } else {
1896
+ this.activeName = this.tabs[i].id;
1897
+ }
1898
+ }
1899
+ },
1900
+ /**
1901
+ * @desc:tabs鼠标右键事件
1902
+ * @author huangbo
1903
+ * @date 2024年9月7日
1904
+ **/
1905
+ handleContextmenu(tabs, e) {
1906
+ let disabled = {};
1907
+ let index = parseInt(tabs.index, 10);
1908
+ if (index == 0) {
1909
+ disabled.left = true;
1910
+ }
1911
+ if (index == this.tabs.length - 1) {
1912
+ disabled.right = true;
1913
+ }
1914
+ if (this.tabs.length == 1) {
1915
+ disabled.other = true;
1916
+ }
1917
+ if (this.tabs[index].id != this.activeName) {
1918
+ disabled.refresh = true;
1919
+ }
1920
+ this.isDisabled = disabled;
1921
+ this.$refs.tabsHandler.$el.style.setProperty('left', `${e.x}px`);
1922
+ this.$refs.tabsHandler.$el.style.setProperty('top', `${e.y}px`);
1923
+ this.showTabsHandler = true;
1924
+ this.pane = index;
1925
+ window.addEventListener('click', this.closeTabsEvents);
1926
+ },
1927
+ /**
1928
+ * @desc:tabs页签事件
1929
+ * @author huangbo
1930
+ * @date 2024年9月7日
1931
+ **/
1932
+ handleTabsEvents(num) {
1933
+ if (this.pane !== null) {
1934
+ this.tabs = events[num](this.tabs, this.pane, this);
1935
+ }
1936
+ this.showTabsHandler = false;
1937
+ window.removeEventListener('click', this.closeTabsEvents);
1938
+ },
1939
+
1940
+ /**
1941
+ * @desc:关闭页签事件面板
1942
+ * @author huangbo
1943
+ * @date 2024年9月7日
1944
+ **/
1945
+ closeTabsEvents(e) {
1946
+ if (
1947
+ e.target.parentNode != this.$refs.tabsHandler.$el &&
1948
+ e.target.parentNode.parentNode != this.$refs.tabsHandler.$el
1949
+ ) {
1950
+ this.showTabsHandler = false;
1951
+ }
1952
+ window.removeEventListener('click', this.closeTabsEvents);
1953
+ },
1954
+
1955
+ /**
1956
+ * @desc:tabs页签点击事件
1957
+ * @author huangbo
1958
+ * @date 2024年9月7日
1959
+ **/
1960
+ handleTabClick() {
1961
+ this.active = '';
1962
+ this.subMenus = null;
1963
+ this.showMenu = false;
1964
+ },
1965
+ /**
1966
+ * @desc:handler工具栏点击事件
1967
+ * @author huangbo
1968
+ * @date 2024年9月7日
1969
+ **/
1970
+ handleClick(res) {
1971
+ const { type, event, open, link } = res;
1972
+ if (event) {
1973
+ event();
1974
+ } else if (open) {
1975
+ util.win.open(open);
1976
+ } else if (link) {
1977
+ util.win.open(link, '_self');
1978
+ } else {
1979
+ switch (type) {
1980
+ case 'quit':
1981
+ this.handleQuit();
1982
+ break;
1983
+ case 'online':
1984
+ this.showMsg = false;
1985
+ this.showSet = false;
1986
+ this.dialog = {
1987
+ title: '查看在线人员',
1988
+ show: true,
1989
+ src: this.onlineUrl
1990
+ };
1991
+ break;
1992
+ case 'notice':
1993
+ this.showMsg = !this.showMsg;
1994
+ this.showSet = false;
1995
+ break;
1996
+ case 'index':
1997
+ util.win.open(this.doorIndex, '_self');
1998
+ break;
1999
+ case 'set':
2000
+ this.showSet = !this.showSet;
2001
+ this.showMsg = false;
2002
+ break;
2003
+ case 'home':
2004
+ let i = util.indexOfObj(this.tabs, this.homePage.id, 'id');
2005
+ if (i == -1) {
2006
+ this.tabs.unshift(this.homePage);
2007
+ } else {
2008
+ let tab = this.tabs[i];
2009
+ if (tab.method === 'iframe') {
2010
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
2011
+ }
2012
+ if (tab.method === 'wujie' && tab.appCode) {
2013
+ window.document
2014
+ .querySelector(`iframe[name=${tab.appCode}]`)
2015
+ .contentWindow.location.reload(true);
2016
+ }
2017
+ if (tab.method === 'router') {
2018
+ this.$set(this.tabs[i], 'keys', util.uuid());
2019
+ }
2020
+ }
2021
+ this.activeName = this.homePage.id;
2022
+ this.showMsg = false;
2023
+ this.showSet = false;
2024
+ this.active = '';
2025
+ this.subMenus = null;
2026
+ this.showMenu = false;
2027
+ break;
2028
+ case 'search':
2029
+ this.showSearch = true;
2030
+ this.showMsg = false;
2031
+ this.showSet = false;
2032
+ break;
2033
+ case 'ai':
2034
+ this.handlerSetDrawer(this._aiConfig, 'ai', 'rtl');
2035
+ break;
2036
+ case 'im':
2037
+ this.handlerSetDrawer(this.imConfig, 'im', 'rtl');
2038
+ break;
2039
+ case 'goView':
2040
+ util.win.open(res.path, '_blank');
2041
+ break;
2042
+ }
2043
+ }
2044
+ this.$emit('handler-click', res);
2045
+ },
2046
+ /**
2047
+ * @desc:退出登录
2048
+ * @author huangbo
2049
+ * @date 2024年9月7日
2050
+ **/
2051
+ handleQuit() {
2052
+ this.$confirm('确定退出吗?', '退出系统', {
2053
+ confirmButtonText: '确定',
2054
+ cancelButtonText: '取消',
2055
+ type: 'warning'
2056
+ })
2057
+ .then(() => {
2058
+ let iframes = document.getElementsByTagName('iframe');
2059
+ for (let i = 0; i < iframes.length; i++) {
2060
+ let src = iframes[i] ? iframes[i].src : null;
2061
+ let origin = util.win.location.origin;
2062
+ if (
2063
+ src &&
2064
+ util.startWith(src, 'http') &&
2065
+ src.indexOf(origin) === -1
2066
+ ) {
2067
+ iframes[i] && iframes[i].contentWindow.postMessage('logout', '*');
2068
+ }
2069
+ break;
2070
+ }
2071
+ if (this.singleLogout) {
2072
+ for (let i = 0; i < this.singleLogout.length; i++) {
2073
+ let iframe = document.createElement('iframe');
2074
+ iframe.style.display = 'none';
2075
+ iframe.src = this.singleLogout[i];
2076
+ document.body.appendChild(iframe);
2077
+ }
2078
+ }
2079
+ util
2080
+ .ajax({ method: 'post', url: logout })
2081
+ .then((res) => {
2082
+ if (res.rCode == 0) {
2083
+ util.removeStorage([
2084
+ 'Authorization',
2085
+ 'token',
2086
+ 'ssId',
2087
+ 'userId',
2088
+ 'userName',
2089
+ 'auth',
2090
+ 'deviceUnique',
2091
+ 'menus',
2092
+ 'useCaseCodes',
2093
+ 'mainConfig',
2094
+ 'jump'
2095
+ ]);
2096
+ if (this.onQuit && typeof this.onQuit === 'function') {
2097
+ this.onQuit();
2098
+ } else {
2099
+ try {
2100
+ const loginPage =
2101
+ util.getStorage('login') || util.getStorage('loginPage');
2102
+ if (loginPage) {
2103
+ let src;
2104
+ if (!util.startWith(loginPage, ['http', '/'], true)) {
2105
+ let pathname = util.win.top.location.pathname;
2106
+ if (pathname !== '/') {
2107
+ pathname = pathname.split('/');
2108
+ pathname.splice(pathname.length - 1);
2109
+ pathname = pathname.join('/');
2110
+ src = pathname + '/' + loginPage.replace('./', '');
2111
+ } else {
2112
+ src = pathname + loginPage.replace('./', '');
2113
+ }
2114
+ } else {
2115
+ src = loginPage;
2116
+ }
2117
+ util.win.top.location.href = src;
2118
+ } else if (
2119
+ util.win.top.location.href.indexOf('main.html') > -1
2120
+ ) {
2121
+ util.win.top.location.href = './login.html';
2122
+ } else {
2123
+ const hash = util.win.top.location.hash;
2124
+ if (hash) {
2125
+ const len = util.win.top.location.href.indexOf(hash);
2126
+ util.win.top.location.href =
2127
+ util.win.location.href.slice(0, len) + '#/login';
2128
+ } else {
2129
+ util.win.top.location.href = '/login.html';
2130
+ }
2131
+ }
2132
+ } catch (error) {
2133
+ util.win.top.postMessage({ type: 1 }, '*');
2134
+ }
2135
+ }
2136
+ }
2137
+ })
2138
+ .catch((err) => {
2139
+ if (err.message && err.message !== 'canceled') {
2140
+ this.$message.error(err.message);
2141
+ }
2142
+ });
2143
+ })
2144
+ .catch((e) => {});
2145
+ },
2146
+ /**
2147
+ * @desc:主题、消息回调
2148
+ * @author huangbo
2149
+ * @date 2024年9月7日
2150
+ **/
2151
+ handleChange(res) {
2152
+ const { type, value } = res;
2153
+ switch (type) {
2154
+ case 'theme':
2155
+ this.setTheme(value);
2156
+ break;
2157
+ case 'ignore':
2158
+ this.$set(this.handleNums, 'notice', 0);
2159
+ break;
2160
+ }
2161
+ },
2162
+ /**
2163
+ * @desc:菜单布局样式切换
2164
+ * @author huangbo
2165
+ * @date 2024年9月7日
2166
+ **/
2167
+ handleLayout(res, active) {
2168
+ if (active) {
2169
+ localStorage.setItem('layout', active);
2170
+ }
2171
+ this.$emit('chang-layout', res, active);
2172
+ },
2173
+ /**
2174
+ * @desc:消息修改总数
2175
+ * @author huangbo
2176
+ * @date 2024年9月7日
2177
+ **/
2178
+ handleMenuTips(id, num) {
2179
+ if (num) {
2180
+ this.$set(this.menuTips, id, num);
2181
+ } else {
2182
+ let n = parseInt(this.menuTips[id], 10) - 1;
2183
+ this.$set(this.menuTips, id, n);
2184
+ }
2185
+ },
2186
+ /**
2187
+ * @desc:处理即时消息
2188
+ * @author huangbo
2189
+ * @date 2024年9月7日
2190
+ **/
2191
+ handleOpened(res) {
2192
+ if (res === undefined) {
2193
+ this.sysMsg = [];
2194
+ } else if (res == false && this.sysMsg.length) {
2195
+ this.sysMsgOut = setTimeout(() => {
2196
+ this.sysMsg = [];
2197
+ }, 3000);
2198
+ } else if (this.sysMsgOut) {
2199
+ clearTimeout(this.sysMsgOut);
2200
+ }
2201
+ },
2202
+ jumpMenu(res, close, params = {}) {
2203
+ let apps = res;
2204
+ let param = params;
2205
+ let reload = true;
2206
+ if (typeof res === 'string') {
2207
+ apps = res.split(',');
2208
+ } else if (util.isObject(res)) {
2209
+ apps = Array.isArray(res.appCode)
2210
+ ? res.appCode
2211
+ : res.appCode.split(',');
2212
+ res.param && (param = { ...res.param, ...params });
2213
+ reload = Object.prototype.hasOwnProperty.call(res, 'reload')
2214
+ ? res.reload
2215
+ : true;
2216
+ }
2217
+ let obj = this.getMenu(this.menus, apps[apps.length - 1]);
2218
+ if (obj) {
2219
+ obj = JSON.parse(JSON.stringify(obj));
2220
+ let i = util.indexOfObj(this.tabs, obj, 'id,code,appCode');
2221
+ let n = util.indexOfObj(this.tabs, this.activeName, 'id');
2222
+ let old = this.activeName;
2223
+ this.activeName = obj.id;
2224
+ if (i == -1) {
2225
+ let tab = this.setIframeType(obj);
2226
+ this.$set(tab, 'url', util.handlerUrl(tab.url, param));
2227
+ this.tabs.splice(n + 1, 0, tab);
2228
+ } else {
2229
+ let tab = this.tabs[i];
2230
+ if (tab.method === 'iframe') {
2231
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url, param));
2232
+ }
2233
+ if (tab.method === 'wujie' && tab.appCode) {
2234
+ const url = param ? util.handlerUrl(tab.url, param) : tab.url;
2235
+ if (reload || param) {
2236
+ tab.url = '';
2237
+ this.$nextTick(() => {
2238
+ tab.url = url;
2239
+ });
2240
+ }
2241
+ // if (param) {
2242
+ // window.document.querySelector(
2243
+ // `iframe[name=${tab.appCode}]`
2244
+ // ).contentWindow.location.href = util.handlerUrl(tab.url, param);
2245
+ // } else {
2246
+ // window.document
2247
+ // .querySelector(`iframe[name=${tab.appCode}]`)
2248
+ // .contentWindow.location.reload(true);
2249
+ // }
2250
+ }
2251
+ if (tab.method === 'router') {
2252
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url, param));
2253
+ this.$set(this.tabs[i], 'keys', util.uuid());
2254
+ }
2255
+ }
2256
+ if (close) {
2257
+ if (close === old) {
2258
+ this.tabs.splice(n, 1);
2259
+ } else {
2260
+ let d = util.indexOfObj(this.tabs, close, 'id,code,appCode');
2261
+ if (d > -1) {
2262
+ this.tabs.splice(d, 1);
2263
+ }
2264
+ }
2265
+ }
2266
+ } else {
2267
+ this.$message.error('没有此菜单!');
2268
+ }
2269
+ },
2270
+ //监听改变菜单
2271
+ handleListener() {
2272
+ util.win.addEventListener(
2273
+ 'message',
2274
+ (e) => {
2275
+ var msg = e.data;
2276
+ if (msg.key == 'jump_Menu') {
2277
+ let res = msg.data1;
2278
+ this.jumpMenu(res);
2279
+ }
2280
+ },
2281
+ false
2282
+ );
2283
+ },
2284
+ handleSelect(res, parent) {
2285
+ this.showSearch = false;
2286
+ if (parent.name === '应用') {
2287
+ this.handlerClickApps(res);
2288
+ }
2289
+ if (parent.name === '菜单') {
2290
+ this.handlerClickApp(res);
2291
+ }
2292
+ },
2293
+ handleLoadIframe(item) {
2294
+ this.$set(item, 'loading', false);
2295
+ }
2296
+ },
2297
+ beforeDestroy() {
2298
+ clearTimeout(this.timer);
2299
+ this.timer = null;
2300
+ if (this.webSocket) {
2301
+ this.webSocket.destroy();
2302
+ }
2303
+ }
2304
+ };
2305
+ </script>
2306
+
2307
+ <style lang="scss" scoped></style>