eoss-ui 0.5.79 → 0.5.81-beta

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