eoss-ui 0.3.97

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 (378) hide show
  1. package/CHANGELOG.md +929 -0
  2. package/README.md +30 -0
  3. package/lib/button-group.js +2857 -0
  4. package/lib/button.js +2884 -0
  5. package/lib/card.js +603 -0
  6. package/lib/cascader.js +373 -0
  7. package/lib/checkbox-group.js +3099 -0
  8. package/lib/clients.js +375 -0
  9. package/lib/config/api.js +205 -0
  10. package/lib/data-table-form.js +3848 -0
  11. package/lib/data-table.js +6315 -0
  12. package/lib/date-picker.js +2821 -0
  13. package/lib/dialog.js +3730 -0
  14. package/lib/enterprise.js +372 -0
  15. package/lib/eoss-ui.common.js +65365 -0
  16. package/lib/error-page.js +293 -0
  17. package/lib/flow-group.js +4200 -0
  18. package/lib/flow-list.js +4350 -0
  19. package/lib/flow.js +12893 -0
  20. package/lib/form.js +15635 -0
  21. package/lib/handle-user.js +2900 -0
  22. package/lib/handler.js +3118 -0
  23. package/lib/index.js +1 -0
  24. package/lib/input-number.js +2743 -0
  25. package/lib/input.js +2935 -0
  26. package/lib/label.js +411 -0
  27. package/lib/login.js +5048 -0
  28. package/lib/main.js +5816 -0
  29. package/lib/mainComp.js +6530 -0
  30. package/lib/menu.js +529 -0
  31. package/lib/nav.js +3048 -0
  32. package/lib/notify.js +1079 -0
  33. package/lib/page.js +3036 -0
  34. package/lib/pagination.js +354 -0
  35. package/lib/player.js +2904 -0
  36. package/lib/qr-code.js +2860 -0
  37. package/lib/radio-group.js +3091 -0
  38. package/lib/select-ganged.js +3242 -0
  39. package/lib/select.js +3295 -0
  40. package/lib/selector-panel.js +4425 -0
  41. package/lib/selector.js +3722 -0
  42. package/lib/sizer.js +3067 -0
  43. package/lib/steps.js +2943 -0
  44. package/lib/switch.js +2784 -0
  45. package/lib/table-form.js +6211 -0
  46. package/lib/tabs-panel.js +274 -0
  47. package/lib/tabs.js +4988 -0
  48. package/lib/theme-chalk/base.css +1 -0
  49. package/lib/theme-chalk/button-group.css +1 -0
  50. package/lib/theme-chalk/button.css +0 -0
  51. package/lib/theme-chalk/card.css +1 -0
  52. package/lib/theme-chalk/cascader.css +0 -0
  53. package/lib/theme-chalk/checkbox-group.css +1 -0
  54. package/lib/theme-chalk/clients.css +1 -0
  55. package/lib/theme-chalk/data-table-form.css +1 -0
  56. package/lib/theme-chalk/data-table.css +1 -0
  57. package/lib/theme-chalk/date-picker.css +1 -0
  58. package/lib/theme-chalk/dialog.css +1 -0
  59. package/lib/theme-chalk/enterprise.css +1 -0
  60. package/lib/theme-chalk/error-page.css +1 -0
  61. package/lib/theme-chalk/flow-chart.css +0 -0
  62. package/lib/theme-chalk/flow-group.css +1 -0
  63. package/lib/theme-chalk/flow-list.css +1 -0
  64. package/lib/theme-chalk/flow.css +1 -0
  65. package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
  66. package/lib/theme-chalk/fonts/iconfont.woff +0 -0
  67. package/lib/theme-chalk/form.css +1 -0
  68. package/lib/theme-chalk/handle-user.css +1 -0
  69. package/lib/theme-chalk/handler.css +1 -0
  70. package/lib/theme-chalk/icon.css +1 -0
  71. package/lib/theme-chalk/index.css +1 -0
  72. package/lib/theme-chalk/input-number.css +0 -0
  73. package/lib/theme-chalk/input.css +1 -0
  74. package/lib/theme-chalk/label.css +1 -0
  75. package/lib/theme-chalk/login.css +1 -0
  76. package/lib/theme-chalk/main.css +1 -0
  77. package/lib/theme-chalk/mainComp.css +0 -0
  78. package/lib/theme-chalk/menu.css +1 -0
  79. package/lib/theme-chalk/nav.css +1 -0
  80. package/lib/theme-chalk/notify.css +0 -0
  81. package/lib/theme-chalk/page.css +1 -0
  82. package/lib/theme-chalk/pagination.css +1 -0
  83. package/lib/theme-chalk/player.css +1 -0
  84. package/lib/theme-chalk/qr-code.css +1 -0
  85. package/lib/theme-chalk/radio-group.css +1 -0
  86. package/lib/theme-chalk/radio.css +1 -0
  87. package/lib/theme-chalk/select-ganged.css +1 -0
  88. package/lib/theme-chalk/select.css +0 -0
  89. package/lib/theme-chalk/selector-panel.css +1 -0
  90. package/lib/theme-chalk/selector.css +1 -0
  91. package/lib/theme-chalk/sizer.css +1 -0
  92. package/lib/theme-chalk/steps.css +1 -0
  93. package/lib/theme-chalk/switch.css +1 -0
  94. package/lib/theme-chalk/table-form.css +0 -0
  95. package/lib/theme-chalk/tabs-panel.css +0 -0
  96. package/lib/theme-chalk/tabs.css +1 -0
  97. package/lib/theme-chalk/tips.css +1 -0
  98. package/lib/theme-chalk/toolbar.css +1 -0
  99. package/lib/theme-chalk/tree-group.css +1 -0
  100. package/lib/theme-chalk/tree.css +1 -0
  101. package/lib/theme-chalk/upload.css +1 -0
  102. package/lib/theme-chalk/wujie.css +0 -0
  103. package/lib/theme-chalk/wxlogin.css +1 -0
  104. package/lib/tips.js +2830 -0
  105. package/lib/toolbar.js +531 -0
  106. package/lib/tree-group.js +3373 -0
  107. package/lib/tree.js +3482 -0
  108. package/lib/upload.js +3913 -0
  109. package/lib/utils/bus.js +9 -0
  110. package/lib/utils/date-util.js +318 -0
  111. package/lib/utils/http.js +58 -0
  112. package/lib/utils/rules.js +19 -0
  113. package/lib/utils/store.js +22 -0
  114. package/lib/utils/util.js +2056 -0
  115. package/lib/wujie.js +2845 -0
  116. package/lib/wxlogin.js +2799 -0
  117. package/package.json +151 -0
  118. package/packages/button/index.js +5 -0
  119. package/packages/button/src/main.vue +264 -0
  120. package/packages/button-group/index.js +5 -0
  121. package/packages/button-group/src/main.vue +130 -0
  122. package/packages/card/index.js +5 -0
  123. package/packages/card/src/main.vue +144 -0
  124. package/packages/cascader/index.js +5 -0
  125. package/packages/cascader/src/main.vue +144 -0
  126. package/packages/checkbox-group/index.js +5 -0
  127. package/packages/checkbox-group/src/main.vue +285 -0
  128. package/packages/clients/index.js +5 -0
  129. package/packages/clients/src/main.vue +50 -0
  130. package/packages/data-table/index.js +5 -0
  131. package/packages/data-table/src/children.vue +40 -0
  132. package/packages/data-table/src/column.vue +796 -0
  133. package/packages/data-table/src/main copy.vue +1383 -0
  134. package/packages/data-table/src/main.vue +1229 -0
  135. package/packages/data-table/src/mixins/table.js +12 -0
  136. package/packages/data-table/src/sizer.vue +160 -0
  137. package/packages/data-table-form/index.js +5 -0
  138. package/packages/data-table-form/src/colgroup.vue +17 -0
  139. package/packages/data-table-form/src/main.vue +167 -0
  140. package/packages/data-table-form/src/table.vue +192 -0
  141. package/packages/data-table-form/src/tbody.vue +219 -0
  142. package/packages/data-table-form/src/thead.vue +68 -0
  143. package/packages/date-picker/index.js +5 -0
  144. package/packages/date-picker/src/main.vue +185 -0
  145. package/packages/dialog/index.js +5 -0
  146. package/packages/dialog/src/main.vue +442 -0
  147. package/packages/enterprise/index.js +5 -0
  148. package/packages/enterprise/src/main.vue +66 -0
  149. package/packages/error-page/index.js +5 -0
  150. package/packages/error-page/src/main.vue +44 -0
  151. package/packages/flow/index.js +5 -0
  152. package/packages/flow/src/component/CommonOpinions.vue +290 -0
  153. package/packages/flow/src/component/CustomPreset.vue +311 -0
  154. package/packages/flow/src/component/FileList.vue +97 -0
  155. package/packages/flow/src/component/Preset.vue +253 -0
  156. package/packages/flow/src/component/SendMsg.vue +221 -0
  157. package/packages/flow/src/component/TimeLimit.vue +190 -0
  158. package/packages/flow/src/component/taskUnionExamine.vue +507 -0
  159. package/packages/flow/src/form.vue +120 -0
  160. package/packages/flow/src/main.vue +2107 -0
  161. package/packages/flow/src/processForm.vue +866 -0
  162. package/packages/flow/src/processReject.vue +262 -0
  163. package/packages/flow/src/selectUser.vue +425 -0
  164. package/packages/flow/src/startTaskRead.vue +556 -0
  165. package/packages/flow/src/table.vue +51 -0
  166. package/packages/flow-group/index.js +5 -0
  167. package/packages/flow-group/src/main.vue +540 -0
  168. package/packages/flow-list/index.js +5 -0
  169. package/packages/flow-list/src/flow-table.vue +445 -0
  170. package/packages/flow-list/src/main.vue +456 -0
  171. package/packages/form/index.js +5 -0
  172. package/packages/form/src/main.vue +4429 -0
  173. package/packages/form/src/table.vue +1196 -0
  174. package/packages/handle-user/index.js +5 -0
  175. package/packages/handle-user/src/main.vue +122 -0
  176. package/packages/handler/index.js +5 -0
  177. package/packages/handler/src/main.vue +306 -0
  178. package/packages/input/index.js +5 -0
  179. package/packages/input/src/main.vue +307 -0
  180. package/packages/input-number/index.js +5 -0
  181. package/packages/input-number/src/main.vue +106 -0
  182. package/packages/label/index.js +5 -0
  183. package/packages/label/src/main.vue +208 -0
  184. package/packages/login/index.js +5 -0
  185. package/packages/login/src/main.vue +1193 -0
  186. package/packages/login/src/resetPassword.vue +332 -0
  187. package/packages/main/index.js +5 -0
  188. package/packages/main/src/main.vue +1496 -0
  189. package/packages/main/src/message.vue +239 -0
  190. package/packages/main/src/notice.vue +145 -0
  191. package/packages/main/src/settings.vue +105 -0
  192. package/packages/main/src/userinfo.vue +430 -0
  193. package/packages/mainComp/index.js +5 -0
  194. package/packages/mainComp/src/async-component/index.vue +85 -0
  195. package/packages/mainComp/src/main.vue +1934 -0
  196. package/packages/mainComp/src/message.vue +239 -0
  197. package/packages/mainComp/src/notice.vue +152 -0
  198. package/packages/mainComp/src/settings.vue +105 -0
  199. package/packages/mainComp/src/userinfo.vue +423 -0
  200. package/packages/menu/index.js +5 -0
  201. package/packages/menu/src/main.vue +401 -0
  202. package/packages/nav/index.js +5 -0
  203. package/packages/nav/src/main.vue +250 -0
  204. package/packages/notify/index.js +5 -0
  205. package/packages/notify/src/main.vue +538 -0
  206. package/packages/page/index.js +5 -0
  207. package/packages/page/src/main.vue +167 -0
  208. package/packages/pagination/index.js +5 -0
  209. package/packages/pagination/src/main.vue +77 -0
  210. package/packages/player/index.js +5 -0
  211. package/packages/player/src/main.vue +194 -0
  212. package/packages/qr-code/index.js +5 -0
  213. package/packages/qr-code/src/main.vue +154 -0
  214. package/packages/radio/index.js +5 -0
  215. package/packages/radio/src/main.vue +259 -0
  216. package/packages/radio-group/index.js +6 -0
  217. package/packages/radio-group/src/main.vue +267 -0
  218. package/packages/select/index.js +5 -0
  219. package/packages/select/src/main.vue +683 -0
  220. package/packages/select-ganged/index.js +5 -0
  221. package/packages/select-ganged/src/main.vue +686 -0
  222. package/packages/selector/index.js +5 -0
  223. package/packages/selector/src/main.vue +588 -0
  224. package/packages/selector-panel/index.js +5 -0
  225. package/packages/selector-panel/src/main.vue +968 -0
  226. package/packages/selector-panel/src/selection.vue +142 -0
  227. package/packages/selector-panel/src/tree.vue +129 -0
  228. package/packages/sizer/index.js +5 -0
  229. package/packages/sizer/src/main.vue +254 -0
  230. package/packages/steps/index.js +5 -0
  231. package/packages/steps/src/main.vue +175 -0
  232. package/packages/switch/index.js +5 -0
  233. package/packages/switch/src/main.vue +154 -0
  234. package/packages/table-form/index.js +5 -0
  235. package/packages/tabs/index.js +5 -0
  236. package/packages/tabs/src/main.vue +749 -0
  237. package/packages/tabs-panel/index.js +5 -0
  238. package/packages/tabs-panel/src/main.vue +18 -0
  239. package/packages/theme-chalk/README.md +33 -0
  240. package/packages/theme-chalk/lib/base.css +1 -0
  241. package/packages/theme-chalk/lib/button-group.css +1 -0
  242. package/packages/theme-chalk/lib/button.css +0 -0
  243. package/packages/theme-chalk/lib/card.css +1 -0
  244. package/packages/theme-chalk/lib/cascader.css +0 -0
  245. package/packages/theme-chalk/lib/checkbox-group.css +1 -0
  246. package/packages/theme-chalk/lib/clients.css +1 -0
  247. package/packages/theme-chalk/lib/data-table-form.css +1 -0
  248. package/packages/theme-chalk/lib/data-table.css +1 -0
  249. package/packages/theme-chalk/lib/date-picker.css +1 -0
  250. package/packages/theme-chalk/lib/dialog.css +1 -0
  251. package/packages/theme-chalk/lib/enterprise.css +1 -0
  252. package/packages/theme-chalk/lib/error-page.css +1 -0
  253. package/packages/theme-chalk/lib/flow-chart.css +0 -0
  254. package/packages/theme-chalk/lib/flow-group.css +1 -0
  255. package/packages/theme-chalk/lib/flow-list.css +1 -0
  256. package/packages/theme-chalk/lib/flow.css +1 -0
  257. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  258. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  259. package/packages/theme-chalk/lib/form.css +1 -0
  260. package/packages/theme-chalk/lib/handle-user.css +1 -0
  261. package/packages/theme-chalk/lib/handler.css +1 -0
  262. package/packages/theme-chalk/lib/icon.css +1 -0
  263. package/packages/theme-chalk/lib/index.css +1 -0
  264. package/packages/theme-chalk/lib/input-number.css +0 -0
  265. package/packages/theme-chalk/lib/input.css +1 -0
  266. package/packages/theme-chalk/lib/label.css +1 -0
  267. package/packages/theme-chalk/lib/login.css +1 -0
  268. package/packages/theme-chalk/lib/main.css +1 -0
  269. package/packages/theme-chalk/lib/mainComp.css +0 -0
  270. package/packages/theme-chalk/lib/menu.css +1 -0
  271. package/packages/theme-chalk/lib/nav.css +1 -0
  272. package/packages/theme-chalk/lib/notify.css +0 -0
  273. package/packages/theme-chalk/lib/page.css +1 -0
  274. package/packages/theme-chalk/lib/pagination.css +1 -0
  275. package/packages/theme-chalk/lib/player.css +1 -0
  276. package/packages/theme-chalk/lib/qr-code.css +1 -0
  277. package/packages/theme-chalk/lib/radio-group.css +1 -0
  278. package/packages/theme-chalk/lib/radio.css +1 -0
  279. package/packages/theme-chalk/lib/select-ganged.css +1 -0
  280. package/packages/theme-chalk/lib/select.css +0 -0
  281. package/packages/theme-chalk/lib/selector-panel.css +1 -0
  282. package/packages/theme-chalk/lib/selector.css +1 -0
  283. package/packages/theme-chalk/lib/sizer.css +1 -0
  284. package/packages/theme-chalk/lib/steps.css +1 -0
  285. package/packages/theme-chalk/lib/switch.css +1 -0
  286. package/packages/theme-chalk/lib/table-form.css +0 -0
  287. package/packages/theme-chalk/lib/tabs-panel.css +0 -0
  288. package/packages/theme-chalk/lib/tabs.css +1 -0
  289. package/packages/theme-chalk/lib/tips.css +1 -0
  290. package/packages/theme-chalk/lib/toolbar.css +1 -0
  291. package/packages/theme-chalk/lib/tree-group.css +1 -0
  292. package/packages/theme-chalk/lib/tree.css +1 -0
  293. package/packages/theme-chalk/lib/upload.css +1 -0
  294. package/packages/theme-chalk/lib/wujie.css +0 -0
  295. package/packages/theme-chalk/lib/wxlogin.css +1 -0
  296. package/packages/theme-chalk/package.json +35 -0
  297. package/packages/theme-chalk/src/base.scss +165 -0
  298. package/packages/theme-chalk/src/button-group.scss +9 -0
  299. package/packages/theme-chalk/src/button.scss +0 -0
  300. package/packages/theme-chalk/src/card.scss +55 -0
  301. package/packages/theme-chalk/src/cascader.scss +0 -0
  302. package/packages/theme-chalk/src/checkbox-group.scss +8 -0
  303. package/packages/theme-chalk/src/clients.scss +72 -0
  304. package/packages/theme-chalk/src/common/var.scss +1516 -0
  305. package/packages/theme-chalk/src/data-table-form.scss +55 -0
  306. package/packages/theme-chalk/src/data-table.scss +202 -0
  307. package/packages/theme-chalk/src/date-picker.scss +8 -0
  308. package/packages/theme-chalk/src/dialog.scss +52 -0
  309. package/packages/theme-chalk/src/enterprise.scss +5 -0
  310. package/packages/theme-chalk/src/error-page.scss +18 -0
  311. package/packages/theme-chalk/src/flow-chart.scss +0 -0
  312. package/packages/theme-chalk/src/flow-group.scss +101 -0
  313. package/packages/theme-chalk/src/flow-list.scss +41 -0
  314. package/packages/theme-chalk/src/flow.scss +285 -0
  315. package/packages/theme-chalk/src/fonts/iconfont.ttf +0 -0
  316. package/packages/theme-chalk/src/fonts/iconfont.woff +0 -0
  317. package/packages/theme-chalk/src/form.scss +451 -0
  318. package/packages/theme-chalk/src/handle-user.scss +40 -0
  319. package/packages/theme-chalk/src/handler.scss +131 -0
  320. package/packages/theme-chalk/src/icon.scss +1714 -0
  321. package/packages/theme-chalk/src/index.scss +50 -0
  322. package/packages/theme-chalk/src/input-number.scss +0 -0
  323. package/packages/theme-chalk/src/input.scss +3 -0
  324. package/packages/theme-chalk/src/label.scss +24 -0
  325. package/packages/theme-chalk/src/login.scss +490 -0
  326. package/packages/theme-chalk/src/main.scss +483 -0
  327. package/packages/theme-chalk/src/mainComp.scss +0 -0
  328. package/packages/theme-chalk/src/menu.scss +201 -0
  329. package/packages/theme-chalk/src/mixins/color.scss +117 -0
  330. package/packages/theme-chalk/src/mixins/mixins.scss +25 -0
  331. package/packages/theme-chalk/src/nav.scss +73 -0
  332. package/packages/theme-chalk/src/notify.scss +0 -0
  333. package/packages/theme-chalk/src/page.scss +3 -0
  334. package/packages/theme-chalk/src/pagination.scss +14 -0
  335. package/packages/theme-chalk/src/player.scss +9 -0
  336. package/packages/theme-chalk/src/qr-code.scss +17 -0
  337. package/packages/theme-chalk/src/radio-group.scss +9 -0
  338. package/packages/theme-chalk/src/radio.scss +3 -0
  339. package/packages/theme-chalk/src/select-ganged.scss +9 -0
  340. package/packages/theme-chalk/src/select.scss +0 -0
  341. package/packages/theme-chalk/src/selector-panel.scss +203 -0
  342. package/packages/theme-chalk/src/selector.scss +85 -0
  343. package/packages/theme-chalk/src/sizer.scss +36 -0
  344. package/packages/theme-chalk/src/steps.scss +88 -0
  345. package/packages/theme-chalk/src/switch.scss +3 -0
  346. package/packages/theme-chalk/src/table-form.scss +1 -0
  347. package/packages/theme-chalk/src/tabs-panel.scss +0 -0
  348. package/packages/theme-chalk/src/tabs.scss +91 -0
  349. package/packages/theme-chalk/src/tips.scss +7 -0
  350. package/packages/theme-chalk/src/toolbar.scss +121 -0
  351. package/packages/theme-chalk/src/tree-group.scss +64 -0
  352. package/packages/theme-chalk/src/tree.scss +140 -0
  353. package/packages/theme-chalk/src/upload.scss +131 -0
  354. package/packages/theme-chalk/src/wujie.scss +0 -0
  355. package/packages/theme-chalk/src/wxlogin.scss +3 -0
  356. package/packages/tips/index.js +5 -0
  357. package/packages/tips/src/main.vue +126 -0
  358. package/packages/toolbar/index.js +5 -0
  359. package/packages/toolbar/src/main.vue +377 -0
  360. package/packages/tree/index.js +5 -0
  361. package/packages/tree/src/main.vue +636 -0
  362. package/packages/tree-group/index.js +5 -0
  363. package/packages/tree-group/src/main.vue +435 -0
  364. package/packages/upload/index.js +5 -0
  365. package/packages/upload/src/main.vue +1033 -0
  366. package/packages/upload/src/picture.js +15 -0
  367. package/packages/wujie/index.js +5 -0
  368. package/packages/wujie/src/main.vue +137 -0
  369. package/packages/wxlogin/index.js +5 -0
  370. package/packages/wxlogin/src/main.vue +110 -0
  371. package/src/config/api.js +211 -0
  372. package/src/index.js +167 -0
  373. package/src/utils/bus.js +3 -0
  374. package/src/utils/date-util.js +312 -0
  375. package/src/utils/http.js +50 -0
  376. package/src/utils/rules.js +18 -0
  377. package/src/utils/store.js +21 -0
  378. package/src/utils/util.js +2105 -0
@@ -0,0 +1,1496 @@
1
+ <template>
2
+ <div class="es-main" :class="{ 'es-main-topside': modal === 'topside' }">
3
+ <div
4
+ v-if="showHeader"
5
+ class="es-main-header"
6
+ :style="{ backgroundImage: headerImg ? 'url(' + headerImg + ')' : '' }"
7
+ >
8
+ <img
9
+ class="es-main-logo"
10
+ :src="logoUrl"
11
+ v-if="modal !== 'topside' && logoUrl"
12
+ />
13
+ <div class="es-main-top-nav">
14
+ <es-menu
15
+ v-if="navs.length"
16
+ class="es-fourth-tabs"
17
+ mode="horizontal"
18
+ :icons="icons"
19
+ :popperClass="`el-menu--popup-${modal}`"
20
+ :data="navs"
21
+ :deep="modal === 'topnav'"
22
+ :default-active="topActive"
23
+ @select="
24
+ res => {
25
+ handleSelect(res, 'nav');
26
+ }
27
+ "
28
+ ></es-menu>
29
+ </div>
30
+ <es-handler
31
+ :userModel="userModel"
32
+ :hide="hide"
33
+ :subSystem="subsystem"
34
+ :online="online"
35
+ :application="application"
36
+ :storage="storage"
37
+ :notice="notice"
38
+ :data="handleData"
39
+ @select="
40
+ res => {
41
+ handleSelect(res, 'sys');
42
+ }
43
+ "
44
+ @click="handleClick"
45
+ ></es-handler>
46
+ </div>
47
+ <div class="es-main-box" v-if="reset">
48
+ <div class="es-main-left" v-if="modal !== 'topnav'">
49
+ <div class="es-main-side" v-if="modal === 'topside'">
50
+ <div class="es-main-side-logo">
51
+ <img class="es-main-logo" :src="logoUrl" v-if="logoUrl" />
52
+ </div>
53
+ <es-handle-user
54
+ :data="{ type: 'user' }"
55
+ @click="handleClick"
56
+ ></es-handle-user>
57
+ </div>
58
+ <es-nav
59
+ v-if="showMenu"
60
+ :data="menu"
61
+ :default-active="active"
62
+ :width="navWidth"
63
+ :icons="icons"
64
+ :biserial="biserial"
65
+ :title="showNavTitle ? title : false"
66
+ :showCollapse="showNavTitle"
67
+ :menu-tips="menuTips"
68
+ :is-default="isDefault"
69
+ @trigger="
70
+ res => {
71
+ handleSelect(res, 'sub');
72
+ }
73
+ "
74
+ @select="
75
+ res => {
76
+ handleSelect(res, 'menu');
77
+ }
78
+ "
79
+ ></es-nav>
80
+ </div>
81
+ <div class="es-main-body">
82
+ <div v-if="fourthTabs" class="es-fourth-tabs">
83
+ <es-menu
84
+ mode="horizontal"
85
+ :data="tabs"
86
+ :titleIcons="false"
87
+ :default-active="tabsId"
88
+ :menu-tips="menuTips"
89
+ @select="
90
+ res => {
91
+ handleSelect(res, 'tabs');
92
+ }
93
+ "
94
+ ></es-menu>
95
+ </div>
96
+ <div class="es-body">
97
+ <div
98
+ class="es-body-main"
99
+ v-loading="pageLoading"
100
+ element-loading-background="rgba(0, 0, 0, 0.5)"
101
+ >
102
+ <iframe
103
+ v-if="method === 'iframe'"
104
+ :id="iframeId"
105
+ :name="iframeId"
106
+ frameborder="0"
107
+ width="100%"
108
+ height="100%"
109
+ :src="page"
110
+ ></iframe>
111
+ <template v-else-if="method === 'wujie' && refresh">
112
+ <es-wujie
113
+ :show="true"
114
+ :props="wjProps"
115
+ :attrs="wjAttrs"
116
+ :name="wjName"
117
+ :url="page"
118
+ ></es-wujie>
119
+ </template>
120
+ <template v-else-if="method === 'router' && refresh">
121
+ <router-view v-if="!isKeepAlive" :key="routerKey" />
122
+ <keep-alive>
123
+ <router-view v-if="isKeepAlive" :key="routerKey"
124
+ /></keep-alive>
125
+ </template>
126
+ </div>
127
+ <message
128
+ v-if="showMsg"
129
+ ref="message"
130
+ :total.sync="notice"
131
+ :visible.sync="showMsg"
132
+ :winopen="winopen"
133
+ @ignore="handleChange"
134
+ @handle="handleMenuTips"
135
+ ></message>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ <!-- <div v-show="set" ref="box" class="es-sets-button">
140
+ <el-button
141
+ type="primary"
142
+ class="es-icon-xitongguanli"
143
+ ref="area"
144
+ ></el-button>
145
+ </div> -->
146
+ <settings
147
+ v-bind="$attrs"
148
+ :theme="color"
149
+ :predefine="themes"
150
+ :visible.sync="showSet"
151
+ @change="handleChange"
152
+ ></settings>
153
+ <es-dialog
154
+ v-if="showUserInfo"
155
+ title="用户信息配置"
156
+ height="740px"
157
+ :visible.sync="showUserInfo"
158
+ >
159
+ <slot name="user">
160
+ <userinfo
161
+ v-bind="$attrs"
162
+ @change="handleUserModel"
163
+ @reGetConfig="reGetConfig"
164
+ >
165
+ <slot name="userInfo"></slot>
166
+ </userinfo>
167
+ </slot>
168
+ </es-dialog>
169
+ <notice :data="sysMsg" :winopen="winopen" @opened="handleOpened"></notice>
170
+ </div>
171
+ </template>
172
+ <script>
173
+ import userinfo from './userinfo.vue';
174
+ import settings from './settings.vue';
175
+ import message from './message.vue';
176
+ import notice from './notice.vue';
177
+ import {
178
+ mainConfig,
179
+ updateUserCustomInfo,
180
+ getComplexApplications,
181
+ getComplexApplicationsNew,
182
+ wss,
183
+ topic
184
+ } from 'eoss-ui/src/config/api.js';
185
+ import store from 'eoss-ui/src/utils/store';
186
+ import util from 'eoss-ui/src/utils/util';
187
+ import SockJS from 'sockjs-client';
188
+ import Stomp from 'stompjs';
189
+ const isIE = navigator.userAgent.indexOf('MSIE') != -1;
190
+ const log = util.getParams('console');
191
+ export default {
192
+ name: 'EsMain',
193
+ inheritAttrs: false,
194
+ components: {
195
+ userinfo,
196
+ settings,
197
+ message,
198
+ notice
199
+ },
200
+ props: {
201
+ //菜单导航地址
202
+ menuUrl: String,
203
+ //菜单展开关闭
204
+ icons: Object,
205
+ //logo
206
+ logo: {
207
+ type: String,
208
+ default: 'errorlogo'
209
+ },
210
+ //菜单显示类型
211
+ scene: {
212
+ type: String,
213
+ default: 'default'
214
+ },
215
+ //host
216
+ host: {
217
+ type: String,
218
+ default() {
219
+ return util.getStorage('host') ? util.getStorage('host') : '';
220
+ }
221
+ },
222
+ header: {
223
+ type: Boolean,
224
+ default: true
225
+ },
226
+ //操作栏配置
227
+ handleData: Array,
228
+ //本地导航
229
+ data: Array,
230
+ //头部背景图片
231
+ headerImage: String,
232
+ //默认主题颜色
233
+ theme: {
234
+ type: String,
235
+ default: '#409eff'
236
+ },
237
+ //主题颜色选择颜色集合
238
+ themes: Array,
239
+ //需要隐藏的头部功能
240
+ hides: Object,
241
+ //储存数据
242
+ storage: {
243
+ type: String,
244
+ default() {
245
+ return util.getStorage('storage');
246
+ }
247
+ },
248
+ //是否启用子应用菜单接口
249
+ application: {
250
+ type: Boolean,
251
+ default: false
252
+ },
253
+ //是否显示设置按钮
254
+ set: {
255
+ type: Boolean,
256
+ default: false
257
+ },
258
+ //websocket
259
+ socket: {
260
+ type: Boolean,
261
+ default: true
262
+ },
263
+ //无界微前端属性
264
+ wjProps: Object,
265
+ wjAttrs: Object,
266
+ //socket调试
267
+ console: Boolean,
268
+ //消息办理是否采用window.open的方式打开
269
+ winopen: {
270
+ type: Boolean,
271
+ default: true
272
+ },
273
+ //获取用户信息的接口
274
+ mainConfig: {
275
+ type: String,
276
+ default: mainConfig
277
+ },
278
+ iframeId: {
279
+ type: String,
280
+ default: 'stage'
281
+ },
282
+ routePath: {
283
+ type: String,
284
+ default: '/main'
285
+ },
286
+ setFirstAsDefault: Boolean,
287
+ pathUrl: {
288
+ type: String,
289
+ default: '/primary'
290
+ },
291
+ keepAlive: Boolean,
292
+ loadWujie: {
293
+ type: Boolean,
294
+ default: true
295
+ },
296
+ downgrade: {
297
+ type: Boolean,
298
+ default: true
299
+ },
300
+ remote: {
301
+ type: Boolean,
302
+ default: true
303
+ }
304
+ },
305
+ computed: {
306
+ //菜单类型
307
+ modal() {
308
+ return this.scene.toLowerCase();
309
+ },
310
+ showHeader() {
311
+ return this.isHeader == 0 ? false : this.header;
312
+ },
313
+ isHomePage() {
314
+ if (util.getParams('applicationid') || util.getParams('applicationId')) {
315
+ return false;
316
+ }
317
+ if (util.getStorage('mainConfig')) {
318
+ let hash = util.win.location.hash;
319
+ if (
320
+ hash &&
321
+ hash.split('?')[0] !== '#/' &&
322
+ hash.split('?')[0] !== '#/main'
323
+ ) {
324
+ return false;
325
+ }
326
+ }
327
+ return true;
328
+ },
329
+ navWidth() {
330
+ return this.modal === 'topside' ? '230px' : undefined;
331
+ },
332
+ showNavTitle() {
333
+ return this.modal !== 'topside';
334
+ },
335
+ //tabs菜单
336
+ fourthTabs() {
337
+ return this.tabs.length;
338
+ },
339
+ //菜单接口
340
+ action() {
341
+ if (this.menuUrl) {
342
+ return this.menuUrl;
343
+ }
344
+ if (this.application) {
345
+ return getComplexApplicationsNew;
346
+ }
347
+ return getComplexApplications;
348
+ },
349
+ //是否双列右侧菜单
350
+ biserial() {
351
+ if (
352
+ this.modal === 'subsystem' ||
353
+ this.modal === 'topside' ||
354
+ this.application
355
+ ) {
356
+ return false;
357
+ } else {
358
+ return true;
359
+ }
360
+ },
361
+ //隐藏操作按键
362
+ hide() {
363
+ if (this.modal === 'subsystem' || this.application) {
364
+ if (this.hides && Object.keys(this.hides).length) {
365
+ return { ...this.hides, set: !this.set, system: false };
366
+ } else {
367
+ return { set: !this.set, system: false };
368
+ }
369
+ } else if (this.modal === 'topside') {
370
+ if (this.hides && Object.keys(this.hides).length) {
371
+ return {
372
+ ...this.hides,
373
+ set: !this.set,
374
+ system: true,
375
+ user: true
376
+ };
377
+ } else {
378
+ return { set: !this.set, system: true, user: true };
379
+ }
380
+ } else {
381
+ if (this.hides && Object.keys(this.hides).length) {
382
+ return {
383
+ ...this.hides,
384
+ set: !this.set,
385
+ system: true,
386
+ user: true
387
+ };
388
+ } else {
389
+ return { set: !this.set, system: true };
390
+ }
391
+ }
392
+ },
393
+ logoUrl() {
394
+ if (this.mainLogo) {
395
+ return this.mainLogo;
396
+ }
397
+ return this.logo;
398
+ },
399
+ isConsole() {
400
+ return log ? true : this.console;
401
+ }
402
+ },
403
+ watch: {
404
+ data: {
405
+ deep: true,
406
+ handler() {
407
+ !this.remote && this.renderMenu();
408
+ }
409
+ },
410
+ menuTips: {
411
+ immediate: true,
412
+ deep: true,
413
+ handler(val) {
414
+ if (Object.keys(val).length && this.menus.length) {
415
+ this.setTips(this.menus);
416
+ }
417
+ }
418
+ },
419
+ color: {
420
+ immediate: true,
421
+ handler(val) {
422
+ if (this.set) {
423
+ localStorage.setItem('theme', val);
424
+ util.updateTheme(val);
425
+ }
426
+ }
427
+ }
428
+ },
429
+ data() {
430
+ return {
431
+ pageLoading: false,
432
+ client: null,
433
+ websocket: null,
434
+ connect: 0,
435
+ wjName: 'singlespa',
436
+ menus: '',
437
+ //头部导航
438
+ navs: [],
439
+ //头部默认选择
440
+ topActive: '',
441
+ //子系统菜单
442
+ subsystem: [],
443
+ //头部子系统子导航默认选中项
444
+ sysId: '',
445
+ //导航默认选择
446
+ active: [],
447
+ //完整导航选中的ID
448
+ actives: [],
449
+ //初始默认选中菜单id
450
+ defaultActive: [],
451
+ //侧边导航
452
+ menu: [],
453
+ //菜单名称
454
+ title: '',
455
+ //菜单提醒气泡
456
+ menuTips: {},
457
+ //面包屑导航
458
+ tabs: [],
459
+ //页签导航默认选中值
460
+ tabsId: '',
461
+ //路由类型
462
+ method: 'router',
463
+ //页面地址
464
+ page: '',
465
+ //选中的地址
466
+ selectPage: '',
467
+ //主页面
468
+ homePage: '',
469
+ //header背景
470
+ mainLogo: null,
471
+ headerImg: this.headerImage,
472
+ //在线人数
473
+ online: 1,
474
+ //通知数
475
+ notice: 0,
476
+ //是否显示消息列表框
477
+ showMsg: false,
478
+ //即时消息
479
+ sysMsg: [],
480
+ //定时关闭及时消息对象
481
+ sysMsgOut: null,
482
+ //额外信息数据
483
+ extraData: '',
484
+ //用户信息
485
+ userModel: null,
486
+ //刷新路由
487
+ refresh: true,
488
+ //显示设置面板
489
+ showSet: false,
490
+ //当前设置的主题
491
+ color: util.getStorage('theme') ? util.getStorage('theme') : this.theme,
492
+ //显示用户信息
493
+ showUserInfo: false,
494
+ //是否展示侧边导航
495
+ showMenu: true,
496
+ props: {},
497
+ //是否首次加载
498
+ isDefault: true,
499
+ reset: true,
500
+ isKeepAlive: this.keepAlive,
501
+ routerKey: '',
502
+ defaultwjprops: {},
503
+ isTabs: false,
504
+ isHeader: ''
505
+ };
506
+ },
507
+ created() {
508
+ this.isHeader = util.getParams('header');
509
+ this.getConfig();
510
+ if (this.remote) {
511
+ this.getMenu();
512
+ } else {
513
+ this.renderMenu();
514
+ }
515
+ if (this.socket) {
516
+ this.initWebSocket();
517
+ }
518
+ },
519
+ mounted() {
520
+ util.win.reLogin = this.handleReLogin;
521
+ this.handleListener();
522
+ util.win.refresh = this.handleRefresh;
523
+ util.win.jumpMenu = this.jumpMenu;
524
+ if (util.win.$wujie) {
525
+ util.win.$wujie.bus.$on('changeTheme', res => {
526
+ util.updateTheme(res);
527
+ });
528
+ }
529
+ util.win.windowOpen = this.openPage;
530
+ },
531
+ methods: {
532
+ renderMenu() {
533
+ if (this.data !== undefined && this.data.length) {
534
+ this.menus = JSON.parse(JSON.stringify(this.data));
535
+ let applicationid =
536
+ util.getParams('applicationid') || util.getParams('applicationId');
537
+ if (applicationid) {
538
+ var ids = this.getId(this.menus, applicationid);
539
+ if (ids) {
540
+ this.defaultActive = ids;
541
+ }
542
+ } else {
543
+ let hash = util.win.location.hash;
544
+ if (hash) {
545
+ hash = hash.split('?')[0];
546
+ }
547
+ if (hash !== '#/' && hash !== '#/main') {
548
+ let ids = this.getId(this.menus, util.win.location.hash, true);
549
+ if (ids) {
550
+ this.defaultActive = ids;
551
+ }
552
+ }
553
+ }
554
+ this.setMenu(this.menus);
555
+ }
556
+ },
557
+ //设置主题颜色
558
+ setTheme(color) {
559
+ if (!color) {
560
+ return;
561
+ }
562
+ util
563
+ .ajax({
564
+ url: updateUserCustomInfo,
565
+ params: { color: escape(color.toLowerCase()) },
566
+ data: { color: escape(color.toLowerCase()) }
567
+ })
568
+ .then(res => {
569
+ if (res.rCode === 0) {
570
+ this.color = color;
571
+ localStorage.setItem('theme', color);
572
+ let mainConfig = JSON.parse(util.getStorage('mainConfig'));
573
+ mainConfig.userStyle.color = this.color;
574
+ sessionStorage.setItem('mainConfig', JSON.stringify(mainConfig));
575
+ this.$emit('setting', 'theme', this.color);
576
+ this.$message({
577
+ message: res.msg,
578
+ type: 'success',
579
+ duration: 2000
580
+ });
581
+ } else {
582
+ let msg = res.msg || '系统错误,请联系管理员!';
583
+ this.$message.error(msg);
584
+ }
585
+ })
586
+ .catch(err => {
587
+ if (err.message && err.message !== 'canceled') {
588
+ this.$message.error(err.message);
589
+ }
590
+ });
591
+ },
592
+ //显示隐藏设置面板
593
+ handleSet() {
594
+ this.showSet = !this.showSet;
595
+ },
596
+ setConfig(results, flag) {
597
+ if (flag) {
598
+ sessionStorage.setItem('mainConfig', JSON.stringify(results));
599
+ util.setStorage({
600
+ type: this.storage,
601
+ key: {
602
+ userId: results.userModel.userId,
603
+ userName: results.userModel.username,
604
+ useCaseCodes: results.resourceCodes
605
+ }
606
+ });
607
+ }
608
+ for (let i in results) {
609
+ if (i === 'mainLogoUrl' && results[i]) {
610
+ this.mainLogo = results[i];
611
+ }
612
+ if (
613
+ i === 'mainBannerUrl' &&
614
+ results[i] &&
615
+ this.headerImage === undefined
616
+ ) {
617
+ this.headerImg = results[i];
618
+ }
619
+ if (i === 'initApplication' && results[i]) {
620
+ this.results[i] = results[i].split(',');
621
+ }
622
+ if (i === 'indexUrl') {
623
+ this.homePage = results[i];
624
+ if (this.isHomePage) {
625
+ if (this.menus) {
626
+ let ids = null;
627
+ this.homePage && (ids = this.getId(this.menus, this.homePage));
628
+ if (ids) {
629
+ this.defaultActive = ids;
630
+ } else if (this.homePage) {
631
+ this.handleJump(this.homePage);
632
+ }
633
+ this.setMenu(this.menus);
634
+ }
635
+ }
636
+ //this.isHomePage && this.handleJump(this.homePage);
637
+ }
638
+ if (i === 'doorIndex' && results[i]) {
639
+ window.open(results[i]);
640
+ }
641
+ if (i === 'subsystemName') {
642
+ document.title = results[i];
643
+ }
644
+ if (i === 'resourceCodes') {
645
+ sessionStorage.setItem('useCaseCodes', results[i]);
646
+ }
647
+ if (i === 'sysLogoIco' && results[i]) {
648
+ util.setFavicon(results[i]);
649
+ }
650
+ if (i === 'userStyle' && results[i].color) {
651
+ this.color = unescape(results[i].color).toLowerCase();
652
+ }
653
+ if (i === 'subsystemExtend' && results[i].webPageWatermark) {
654
+ util.watermark(results[i].webPageWatermark);
655
+ }
656
+ store.set(i, results[i]);
657
+ }
658
+ this.userModel = results.userModel;
659
+ },
660
+ //获取用户配置及信息
661
+ getConfig() {
662
+ if (util.getStorage('mainConfig')) {
663
+ const results = JSON.parse(util.getStorage('mainConfig'));
664
+ this.setConfig(results);
665
+ return true;
666
+ }
667
+ util
668
+ .ajax({ url: this.mainConfig })
669
+ .then(res => {
670
+ if (res && res.rCode === 0) {
671
+ this.setConfig(res.results, 1);
672
+ } else {
673
+ let msg = res.msg || '系统错误,请联系管理员!';
674
+ this.$message.error(msg);
675
+ }
676
+ })
677
+ .catch(err => {
678
+ if (err.message && err.message !== 'canceled') {
679
+ this.$message.error(err.message);
680
+ }
681
+ });
682
+ },
683
+ reGetConfig() {
684
+ util
685
+ .ajax({ url: this.mainConfig })
686
+ .then(res => {
687
+ if (res && res.rCode === 0) {
688
+ const results = JSON.parse(JSON.stringify(res.results));
689
+ this.setConfig(results, 1);
690
+ } else {
691
+ let msg = res.msg || '系统错误,请联系管理员!';
692
+ this.$message.error(msg);
693
+ }
694
+ })
695
+ .catch(err => {
696
+ if (err.message && err.message !== 'canceled') {
697
+ this.$message.error(err.message);
698
+ }
699
+ });
700
+ },
701
+ jumpMenu(res) {
702
+ if (typeof res === 'string') {
703
+ res = res.split(',');
704
+ }
705
+ this.setDefault(this.menus, res);
706
+ },
707
+ getId(arry, res, path) {
708
+ if (!res) {
709
+ return false;
710
+ }
711
+ for (let i = 0; i < arry.length; i++) {
712
+ let item = arry[i];
713
+ if (
714
+ Object.prototype.hasOwnProperty.call(item, 'children') &&
715
+ item.children.length
716
+ ) {
717
+ let id = this.getId(item.children, res, path);
718
+ if (id) {
719
+ if (typeof id === 'string') {
720
+ this.isTabs = false;
721
+ }
722
+ if (item.pid === 'root') {
723
+ return [item.id].concat(id);
724
+ } else if (typeof id === 'string') {
725
+ return [item.id, id];
726
+ }
727
+ return id;
728
+ }
729
+ } else if (
730
+ Object.prototype.hasOwnProperty.call(item, 'fourthTabs') &&
731
+ item.fourthTabs.length
732
+ ) {
733
+ let id = this.getId(item.fourthTabs, res, path);
734
+ if (id) {
735
+ if (typeof id === 'string') {
736
+ this.isTabs = true;
737
+ }
738
+ if (item.pid === 'root') {
739
+ return [item.id].concat(id);
740
+ } else if (typeof id === 'string') {
741
+ return [item.id, id];
742
+ }
743
+ return id;
744
+ }
745
+ } else if (item.id === res || item.url == res) {
746
+ return item.id;
747
+ } else {
748
+ if (path && item.url) {
749
+ let url = new URL(item.url, window.location.origin);
750
+ if (url.hash == res) {
751
+ return item.id;
752
+ }
753
+ }
754
+ }
755
+ }
756
+ return false;
757
+ },
758
+ //获取应用导航菜单
759
+ getMenu() {
760
+ util
761
+ .ajax({ url: this.action })
762
+ .then(res => {
763
+ if (res.rCode === 0) {
764
+ this.menus = JSON.parse(JSON.stringify(res.results));
765
+ let applicationid =
766
+ util.getParams('applicationid') ||
767
+ util.getParams('applicationId');
768
+ if (applicationid) {
769
+ let ids = this.getId(this.menus, applicationid);
770
+ if (ids) {
771
+ this.defaultActive = ids;
772
+ }
773
+ } else {
774
+ let hash = util.win.location.hash;
775
+ if (hash) {
776
+ hash = hash.split('?')[0];
777
+ }
778
+ if (hash !== '#/' && hash !== '#/main') {
779
+ let ids = this.getId(this.menus, util.win.location.hash, true);
780
+ if (ids) {
781
+ this.defaultActive = ids;
782
+ }
783
+ }
784
+ }
785
+ this.setTips(this.menus);
786
+ store.set('nav', this.menus);
787
+ this.setMenu(this.menus);
788
+ } else {
789
+ let msg = res.msg || '系统错误,请联系管理员!';
790
+ this.$message.error(msg);
791
+ }
792
+ })
793
+ .catch(err => {
794
+ if (err.message && err.message !== 'canceled') {
795
+ this.$message.error(err.message);
796
+ }
797
+ });
798
+ },
799
+ //设置默认左侧导航
800
+ setMenu(res) {
801
+ if (this.defaultActive && this.defaultActive.length) {
802
+ this.isDefault = false;
803
+ this.setDefault(res, this.defaultActive);
804
+ } else {
805
+ if (this.homePage || !util.getStorage('mainConfig')) {
806
+ this.isDefault = true;
807
+ if (
808
+ this.homePage &&
809
+ (!this.defaultActive || !this.defaultActive.length)
810
+ ) {
811
+ let ids = this.getId(this.menus, this.homePage);
812
+ if (ids) {
813
+ this.defaultActive = ids;
814
+ this.isDefault = false;
815
+ this.setDefault(res, this.defaultActive);
816
+ return false;
817
+ } else {
818
+ this.handleJump(this.homePage);
819
+ }
820
+ }
821
+ } else {
822
+ this.isDefault = false;
823
+ }
824
+ if (this.modal === 'subsystem' || this.modal === 'topside') {
825
+ if (this.modal === 'subsystem') {
826
+ this.subsystem = res;
827
+ } else if (this.modal === 'topside') {
828
+ this.navs = res;
829
+ this.topActive = res[0].id;
830
+ }
831
+ if (this.application) {
832
+ for (let i = 0; i < res.length; i++) {
833
+ if (res[i].hasPermission) {
834
+ this.menu = res[i].children;
835
+ this.title = res[i].text;
836
+ break;
837
+ }
838
+ }
839
+ } else {
840
+ this.menu = res[0].children;
841
+ this.title = res[0].text;
842
+ }
843
+ if (!this.isDefault) {
844
+ this.active = this.getFirst(this.menu[0]);
845
+ }
846
+ } else if (this.modal === 'topnav') {
847
+ this.navs = res;
848
+ this.topActive = this.getFirst(res[0]);
849
+ } else {
850
+ this.menu = res;
851
+ if (!this.isDefault) {
852
+ this.active = [this.menu[0].id];
853
+ let id = this.getFirst(this.menu[0]);
854
+ if (id && this.menu[0].id !== id) {
855
+ this.active.push(id);
856
+ } else {
857
+ this.handleJump(
858
+ this.menu[0].url,
859
+ this.menu[0].urlopenmode,
860
+ this.menu[0]
861
+ );
862
+ }
863
+ }
864
+ }
865
+ }
866
+ },
867
+ //获取菜单第一条数据
868
+ getFirst(obj) {
869
+ if (!obj) {
870
+ return '';
871
+ }
872
+ if (obj.children && obj.children.length) {
873
+ return this.getFirst(obj.children[0]);
874
+ } else if (obj.fourthTabs && obj.fourthTabs.length) {
875
+ if (this.modal === 'topnav') {
876
+ return this.getFirst(obj.fourthTabs[0]);
877
+ } else {
878
+ this.tabs = obj.fourthTabs;
879
+ if (obj.url) {
880
+ let tab = obj.fourthTabs.filter(item => {
881
+ return item.url === obj.url;
882
+ })[0];
883
+ if (tab) {
884
+ this.tabsId = tab.id;
885
+ this.handleJump(tab.url, tab.urlopenmode, tab);
886
+ }
887
+ } else {
888
+ this.tabsId = this.tabs[0].id;
889
+ this.handleJump(
890
+ this.tabs[0].url,
891
+ this.tabs[0].urlopenmode,
892
+ this.tabs[0]
893
+ );
894
+ }
895
+ return obj.id;
896
+ }
897
+ } else {
898
+ this.handleJump(obj.url, obj.urlopenmode, obj);
899
+ }
900
+ return obj.id;
901
+ },
902
+ //遍历设置菜单气泡提醒
903
+ setTips(obj) {
904
+ if (Array.isArray(obj)) {
905
+ obj.forEach(item => {
906
+ this.setTips(item);
907
+ });
908
+ } else {
909
+ if (Object.prototype.hasOwnProperty.call(obj, 'tips') && obj.tips) {
910
+ this.$set(obj, 'tips', false);
911
+ delete obj.tips;
912
+ }
913
+ let flag = false;
914
+ if (obj.children && obj.children.length) {
915
+ obj.children.forEach(item => {
916
+ if (this.setTips(item)) {
917
+ flag = true;
918
+ }
919
+ });
920
+ if (flag) {
921
+ this.$set(obj, 'tips', true);
922
+ return true;
923
+ }
924
+ } else if (obj.fourthTabs && obj.fourthTabs.length) {
925
+ obj.fourthTabs.forEach(item => {
926
+ if (this.setTips(item)) {
927
+ flag = true;
928
+ }
929
+ });
930
+ if (flag) {
931
+ this.$set(obj, 'tips', true);
932
+ return true;
933
+ }
934
+ } else {
935
+ if (this.menuTips[obj.id] && Number(this.menuTips[obj.id])) {
936
+ this.$set(obj, 'tips', Number(this.menuTips[obj.id]));
937
+ return true;
938
+ }
939
+ }
940
+ }
941
+ return false;
942
+ },
943
+ //设置默认导航页面
944
+ setDefault(res, active) {
945
+ this.sysId = '';
946
+ this.tabsId = '';
947
+ this.active = '';
948
+ this.getUrl(res, active);
949
+ if (
950
+ this.modal === 'subsystem' ||
951
+ this.modal === 'subSystem' ||
952
+ this.modal === 'topnav' ||
953
+ this.modal === 'topNav' ||
954
+ this.modal === 'topside' ||
955
+ this.modal === 'topSide'
956
+ ) {
957
+ if (this.modal === 'subsystem' || this.modal === 'subSystem') {
958
+ this.subsystem = res;
959
+ this.sysId = active[0];
960
+ } else if (
961
+ this.modal === 'topnav' ||
962
+ this.modal === 'topNav' ||
963
+ this.modal === 'topside' ||
964
+ this.modal === 'topSide'
965
+ ) {
966
+ this.navs = res;
967
+ this.topActive = active[0];
968
+ }
969
+ if (this.tabs.length || this.isTabs) {
970
+ this.tabsId = active[active.length - 1];
971
+ this.active = active.slice(1, active.length - 1);
972
+ } else {
973
+ this.active = active.slice(1);
974
+ }
975
+ for (let i = 0; i < res.length; i++) {
976
+ if (res[i].id === active[0]) {
977
+ this.menu = res[i].children;
978
+ this.title = res[i].text;
979
+ break;
980
+ }
981
+ }
982
+ } else {
983
+ this.menu = res;
984
+ if (this.biserial) {
985
+ this.active = active.slice(
986
+ 0,
987
+ active.length > 2 ? active.length - 1 : active.length
988
+ );
989
+ } else {
990
+ this.active = active.slice(1);
991
+ }
992
+ this.tabsId = active[active.length - 1];
993
+ }
994
+ },
995
+ //获取页面类型及地址
996
+ getUrl(res, active, index) {
997
+ index = index === undefined ? 0 : index;
998
+ for (let i = 0; i < res.length; i++) {
999
+ let item = res[i];
1000
+ if (item.id === active[index]) {
1001
+ if (index === active.length - 1) {
1002
+ this.handleJump(item.url, item.urlopenmode, item);
1003
+ return item.url;
1004
+ } else {
1005
+ if (item.children && item.children.length) {
1006
+ index++;
1007
+ let url = this.getUrl(item.children, active, index);
1008
+ if (url && index === active.length - 1) {
1009
+ this.tabs = '';
1010
+ }
1011
+ return url;
1012
+ }
1013
+ if (item.fourthTabs && item.fourthTabs.length) {
1014
+ index++;
1015
+ let url = this.getUrl(item.fourthTabs, active, index);
1016
+ if (url) {
1017
+ this.$set(this, 'tabs', item.fourthTabs);
1018
+ }
1019
+ return url;
1020
+ }
1021
+ }
1022
+ } else if (item.children && item.children.length) {
1023
+ this.getUrl(item.children, active, index);
1024
+ }
1025
+ }
1026
+ return false;
1027
+ },
1028
+
1029
+ setUrl(url, param) {
1030
+ let obj = param ? param : {};
1031
+ let params = util.getParams({ url: url }, true);
1032
+ for (let i in params) {
1033
+ if (i != 'model' && i != 'view' && i != '_baseUrl') {
1034
+ obj[i] = params[i];
1035
+ }
1036
+ }
1037
+ let _url = params._baseUrl ? params._baseUrl : './primary.html';
1038
+ return util.urlJoinParams({ url: _url, param: obj });
1039
+ },
1040
+ //应用导航交互
1041
+ handleSelect(res, type) {
1042
+ this.isDefault = false;
1043
+ const { node } = res;
1044
+ switch (type) {
1045
+ case 'nav':
1046
+ this.tabs = [];
1047
+ this.active = '';
1048
+ if (this.modal === 'topside') {
1049
+ this.menu = node.children;
1050
+ this.title = node.text;
1051
+ this.active = this.getFirst(node.children[0]);
1052
+ } else {
1053
+ if (node.url) {
1054
+ let tab = node.fourthTabs.filter(item => {
1055
+ return item.url === node.url;
1056
+ })[0];
1057
+ if (tab) {
1058
+ this.tabs = node.fourthTabs;
1059
+ this.tabsId = tab.id;
1060
+ }
1061
+ } else {
1062
+ if (node.fourthTabs.length) {
1063
+ this.tabs = node.fourthTabs;
1064
+ this.tabsId = this.tabs[0].id;
1065
+ this.handleJump(
1066
+ this.tabs[0].url,
1067
+ this.tabs[0].urlopenmode,
1068
+ this.tabs[0]
1069
+ );
1070
+ }
1071
+ }
1072
+ }
1073
+ break;
1074
+ case 'sys':
1075
+ this.tabs = [];
1076
+ this.menu = node.children;
1077
+ this.title = node.text;
1078
+ this.active = this.getFirst(node.children[0]);
1079
+ break;
1080
+ case 'sub':
1081
+ if (node.url) {
1082
+ this.tabs = [];
1083
+ }
1084
+ if (this.setFirstAsDefault) {
1085
+ let id = this.getFirst(node);
1086
+ if (node.id !== id) {
1087
+ this.$set(this.active, 0, node.id);
1088
+ this.$set(this.active, 1, id);
1089
+ }
1090
+ }
1091
+ break;
1092
+ case 'menu':
1093
+ this.tabsId = '';
1094
+ this.tabs = [];
1095
+ if (this.setFirstAsDefault) {
1096
+ if (this.biserial) {
1097
+ this.$set(this.active, 1, node.id);
1098
+ } else {
1099
+ this.active = node.id;
1100
+ }
1101
+ }
1102
+ if (node.url) {
1103
+ let tab = (node.fourthTabs || []).filter(item => {
1104
+ return item.url === node.url;
1105
+ })[0];
1106
+ if (tab) {
1107
+ this.tabs = node.fourthTabs;
1108
+ this.tabsId = tab.id;
1109
+ }
1110
+ } else if (node.fourthTabs.length) {
1111
+ this.tabs = node.fourthTabs;
1112
+ this.tabsId = this.tabs[0].id;
1113
+ this.handleJump(
1114
+ this.tabs[0].url,
1115
+ this.tabs[0].urlopenmode,
1116
+ this.tabs[0]
1117
+ );
1118
+ }
1119
+ break;
1120
+ case 'tabs':
1121
+ break;
1122
+ }
1123
+ if (node.url) {
1124
+ this.selectPage = node.url;
1125
+ this.refresh = false;
1126
+ this.handleJump(node.url, Number(node.urlopenmode), node);
1127
+ }
1128
+ },
1129
+ hasRouter(res, url) {
1130
+ if (!url) {
1131
+ return false;
1132
+ }
1133
+ if (Array.isArray(res)) {
1134
+ for (let i in res) {
1135
+ let path = this.hasRouter(res[i], url);
1136
+ if (path) {
1137
+ return path;
1138
+ }
1139
+ }
1140
+ } else {
1141
+ let path = res.path;
1142
+ if (path !== '/' && path !== '/404') {
1143
+ path = path.replace(path[1], path[1].toLowerCase());
1144
+ }
1145
+ let pathname = url.substring(url.indexOf('#/') + 1);
1146
+ pathname = pathname
1147
+ .replace(pathname[1], pathname[1].toLowerCase())
1148
+ .split('?')[0];
1149
+ if (res.path !== '/' && pathname == path) {
1150
+ return pathname;
1151
+ }
1152
+ if (Object.prototype.hasOwnProperty.call(res, 'children')) {
1153
+ let path = this.hasRouter(res.children, url);
1154
+ if (path) {
1155
+ return path;
1156
+ }
1157
+ }
1158
+ }
1159
+ return false;
1160
+ },
1161
+ handleTrigger(res) {},
1162
+ //头部工具交互事件
1163
+ handleClick(res) {
1164
+ const { type } = res;
1165
+ switch (type) {
1166
+ //刷新
1167
+ case 'refresh':
1168
+ this.handleRefresh();
1169
+ break;
1170
+ case 'home':
1171
+ this.reset = false;
1172
+ if (this.homePage) {
1173
+ this.handleJump(this.homePage);
1174
+ }
1175
+ this.active = '';
1176
+ this.defaultActive = [];
1177
+ this.tabs = [];
1178
+ this.setMenu(this.menus);
1179
+ this.$nextTick(() => {
1180
+ this.reset = true;
1181
+ });
1182
+ break;
1183
+ case 'user':
1184
+ this.showUserInfo = true;
1185
+ break;
1186
+ case 'online':
1187
+ this.dialog = {
1188
+ title: '查看在线人员',
1189
+ show: true,
1190
+ url: '/main/sysuseronline/list.dhtml'
1191
+ };
1192
+ break;
1193
+ case 'notice':
1194
+ this.showMsg = !this.showMsg;
1195
+ break;
1196
+ case 'set':
1197
+ this.handleSet();
1198
+ break;
1199
+ case 'goView':
1200
+ util.win.open(res.path, '_blank');
1201
+ break;
1202
+ }
1203
+ },
1204
+ //刷新子页面、子路由
1205
+ handleRefresh() {
1206
+ if (this.method === 'iframe') {
1207
+ this.page = util.handlerUrl(this.page);
1208
+ } else {
1209
+ this.refresh = false;
1210
+ this.$nextTick(() => {
1211
+ this.refresh = true;
1212
+ });
1213
+ }
1214
+ },
1215
+ //跳转页面
1216
+ handleJump(page, type, res) {
1217
+ console.log(page);
1218
+ if (util.win.location.hash === page) {
1219
+ this.refresh = true;
1220
+ return;
1221
+ }
1222
+ if (type == 1) {
1223
+ util.win.open(page);
1224
+ } else if (type == 2) {
1225
+ location.href = page;
1226
+ } else if (type == 3) {
1227
+ this.method = 'iframe';
1228
+ this.refresh = false;
1229
+ this.page = util.handlerUrl(page);
1230
+ } else if (page) {
1231
+ let urls = page.split('?');
1232
+ if (urls[0].indexOf('.js') > 1) {
1233
+ this.method = 'wujie';
1234
+ this.wjName = 'singlespa';
1235
+ this.page = page;
1236
+ this.$nextTick(() => {
1237
+ this.refresh = true;
1238
+ });
1239
+ } else if (
1240
+ urls[0].indexOf('.dhtml') > 0 ||
1241
+ (urls[0].indexOf('.html') > 0 && urls[0].indexOf('.html#') === -1)
1242
+ ) {
1243
+ this.method = 'iframe';
1244
+ this.refresh = false;
1245
+ this.page = util.handlerUrl(page);
1246
+ } else {
1247
+ if (urls[0].indexOf('.html') === -1 && urls[0].indexOf('#/') === -1) {
1248
+ this.method = 'iframe';
1249
+ this.refresh = false;
1250
+ this.page = util.handlerUrl(page);
1251
+ } else {
1252
+ this.method = 'router';
1253
+ const routes = this.$router.options.routes;
1254
+ if (routes) {
1255
+ let path = this.hasRouter(routes, urls[0]);
1256
+ if (path) {
1257
+ let params = util.getParams({ url: page });
1258
+ if (res) {
1259
+ this.routerKey = res.id;
1260
+ if (Object.prototype.hasOwnProperty.call(res, 'keepAlive')) {
1261
+ this.isKeepAlive = res.keepAlive;
1262
+ }
1263
+ }
1264
+ this.$router.push({
1265
+ path: path,
1266
+ query: params
1267
+ });
1268
+ this.$nextTick(() => {
1269
+ this.refresh = true;
1270
+ });
1271
+ } else {
1272
+ let urlopenmode = util.getParams({
1273
+ url: page,
1274
+ name: 'urlopenmode'
1275
+ });
1276
+ if (
1277
+ this.loadWujie === false ||
1278
+ (this.downgrade && isIE) ||
1279
+ urlopenmode == 3
1280
+ ) {
1281
+ this.method = 'iframe';
1282
+ this.refresh = false;
1283
+ this.page = util.handlerUrl(page);
1284
+ } else {
1285
+ this.method = 'wujie';
1286
+ this.wjName = res.appCode ? res.appCode : 'application';
1287
+ this.page = page;
1288
+ this.$nextTick(() => {
1289
+ this.refresh = true;
1290
+ });
1291
+ }
1292
+ }
1293
+ } else {
1294
+ console.error('缺少路由配置');
1295
+ return;
1296
+ }
1297
+ }
1298
+ }
1299
+ }
1300
+ },
1301
+ //设置回调
1302
+ handleChange(res) {
1303
+ const { type, value } = res;
1304
+ switch (type) {
1305
+ case 'theme':
1306
+ this.setTheme(value);
1307
+ break;
1308
+ case 'ignore':
1309
+ this.notice = 0;
1310
+ break;
1311
+ }
1312
+ },
1313
+ //监听改变菜单
1314
+ handleListener() {
1315
+ util.win.addEventListener(
1316
+ 'message',
1317
+ e => {
1318
+ var msg = e.data;
1319
+ if (msg.key == 'jump_Menu') {
1320
+ let res = msg.data1;
1321
+ if (typeof res === 'string') {
1322
+ res = res.split(',');
1323
+ }
1324
+ this.setDefault(this.menus, res);
1325
+ }
1326
+ },
1327
+ false
1328
+ );
1329
+ },
1330
+ //开启weosocket
1331
+ initWebSocket() {
1332
+ //初始化weosocket
1333
+ if (!this.websocket) {
1334
+ const url = (util.getStorage('wshost') || '') + wss;
1335
+ this.websocket = new SockJS(url);
1336
+ }
1337
+ this.client = Stomp.over(this.websocket);
1338
+ if (!this.isConsole && this.client) {
1339
+ this.client.debug = null;
1340
+ }
1341
+ this.handleConnect(this.client);
1342
+ },
1343
+ handleConnect(client) {
1344
+ client.connect(
1345
+ {},
1346
+ () => {
1347
+ //localStorage.setItem("socket",true);
1348
+ //订阅服务端的
1349
+ client.subscribe(topic, response => {
1350
+ let res = JSON.parse(response.body);
1351
+ let data = res.data;
1352
+ for (let i in data) {
1353
+ if (data[i] !== null && data[i] !== undefined) {
1354
+ if (i === 'onlineUserNums' && data[i] > 0) {
1355
+ this.online = data[i];
1356
+ }
1357
+ if (i === 'sysMsgNums') {
1358
+ this.notice = data[i];
1359
+ if (this.showMsg) {
1360
+ this.$refs.message.getMsg(true);
1361
+ }
1362
+ }
1363
+ if (i === 'menuTipsMap') {
1364
+ this.menuTips = data[i];
1365
+ }
1366
+ if (i === 'sysMsgList') {
1367
+ this.sysMsg = data[i];
1368
+ }
1369
+ if (i === 'extraData') {
1370
+ this.extraData = data[i];
1371
+ }
1372
+ }
1373
+ }
1374
+ });
1375
+ },
1376
+ error => {
1377
+ console.log('webSocket连接失败');
1378
+ client.disconnect();
1379
+ }
1380
+ );
1381
+ },
1382
+ handleOpened(res) {
1383
+ if (res === undefined) {
1384
+ this.sysMsg = [];
1385
+ } else if (res == false && this.sysMsg.length) {
1386
+ this.sysMsgOut = setTimeout(() => {
1387
+ this.sysMsg = [];
1388
+ }, 3000);
1389
+ } else if (this.sysMsgOut) {
1390
+ clearTimeout(this.sysMsgOut);
1391
+ }
1392
+ },
1393
+ handleDialog(obj) {
1394
+ this.dialog = obj;
1395
+ },
1396
+ handleUserModel(name, val) {
1397
+ this.$set(this.userModel, name, val);
1398
+ },
1399
+ handleMenuTips(id, num) {
1400
+ if (num) {
1401
+ this.$set(this.menuTips, id, num);
1402
+ } else {
1403
+ let n = parseInt(this.menuTips[id], 10) - 1;
1404
+ this.$set(this.menuTips, id, n);
1405
+ }
1406
+ },
1407
+ handleReLogin(res) {
1408
+ if (res && typeof res == 'string') {
1409
+ res = JSON.parse(res);
1410
+ }
1411
+ let msg = '提示';
1412
+ let btn = {
1413
+ confirmButtonText: '确定',
1414
+ cancelButtonText: '取消',
1415
+ closeOnClickModal: false,
1416
+ type: 'warning'
1417
+ };
1418
+ if (res) {
1419
+ if (res.rCode === 69) {
1420
+ msg = '该账号在其他地方已登陆!';
1421
+ btn = {
1422
+ confirmButtonText: '确定',
1423
+ closeOnClickModal: false,
1424
+ type: 'warning'
1425
+ };
1426
+ } else {
1427
+ console.log('handleReLogin');
1428
+ msg = '登录已过期,请重新登录!';
1429
+ }
1430
+ }
1431
+ this.$confirm(msg, btn)
1432
+ .then(() => {
1433
+ util.removeStorage([
1434
+ 'Authorization',
1435
+ 'token',
1436
+ 'ssId',
1437
+ 'userId',
1438
+ 'userName',
1439
+ 'auth',
1440
+ 'deviceUnique',
1441
+ 'menus',
1442
+ 'useCaseCodes',
1443
+ 'mainConfig'
1444
+ ]);
1445
+ if (util.win.top.location.href.indexOf('main.html') > -1) {
1446
+ util.win.top.location.href = './login.html';
1447
+ } else {
1448
+ const hash = util.win.top.location.hash;
1449
+ if (hash) {
1450
+ const len = util.win.top.location.href.indexOf(hash);
1451
+ let href = util.win.top.location.href.slice(0, len) + '#/login';
1452
+ util.win.top.location.href = href;
1453
+ } else {
1454
+ const loginPage =
1455
+ util.getStorage('login') || util.getStorage('loginPage');
1456
+ if (loginPage) {
1457
+ util.win.top.location.href = loginPage;
1458
+ } else {
1459
+ util.win.top.location.href = '/login.html';
1460
+ }
1461
+ }
1462
+ }
1463
+ })
1464
+ .catch(e => {});
1465
+ },
1466
+ openPage(url, name, width, height) {
1467
+ let src = url;
1468
+ if (!util.startWith(url, ['http', '/'])) {
1469
+ let pathname = window.location.pathname;
1470
+ if (pathname !== '/') {
1471
+ pathname = pathname.split('/');
1472
+ pathname.splice(pathname.length - 1);
1473
+ pathname = pathname.join('/');
1474
+ }
1475
+ src = pathname + url.replace('./', '');
1476
+ }
1477
+ if (name) {
1478
+ let w = width ? width : util.win.top.screen.availWidth - 10;
1479
+ let h = height ? height : util.win.top.screen.availHeight - 60;
1480
+ util.win.open(
1481
+ src,
1482
+ name,
1483
+ `width=${w}px,height=${h}px,resizable=yes,status=yes,menubar=no,scrollbars=yes`
1484
+ );
1485
+ } else {
1486
+ util.win.open(src);
1487
+ }
1488
+ }
1489
+ },
1490
+ beforeDestroy() {
1491
+ if (this.client && this.client.connected) {
1492
+ this.client.disconnect();
1493
+ }
1494
+ }
1495
+ };
1496
+ </script>