eoss-ui 0.6.19 → 0.6.20

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 (102) hide show
  1. package/lib/eoss-ui.common.js +780 -678
  2. package/lib/flow.js +619 -515
  3. package/lib/index.js +1 -1
  4. package/lib/login.js +3 -2
  5. package/lib/main.js +143 -146
  6. package/lib/qr-code.js +13 -13
  7. package/lib/theme-chalk/index.css +1 -1
  8. package/lib/theme-chalk/login.css +1 -1
  9. package/package.json +157 -157
  10. package/packages/button/src/main.vue +418 -418
  11. package/packages/button-group/src/main.vue +298 -298
  12. package/packages/checkbox-group/src/main.vue +333 -333
  13. package/packages/clients/src/main.vue +144 -144
  14. package/packages/data-table/src/children.vue +39 -39
  15. package/packages/data-table/src/column.vue +983 -983
  16. package/packages/data-table/src/main.vue +1812 -1812
  17. package/packages/data-table/src/sizer.vue +195 -195
  18. package/packages/date-picker/src/main.vue +236 -236
  19. package/packages/flow/src/component/CustomPreset.vue +1 -1
  20. package/packages/flow/src/component/Preset.vue +1 -1
  21. package/packages/flow/src/component/SendMsg.vue +3 -1
  22. package/packages/flow/src/component/taskUnionExamine.vue +38 -20
  23. package/packages/flow/src/main.vue +2731 -2711
  24. package/packages/flow/src/processForm.vue +13 -2
  25. package/packages/flow/src/processReject.vue +14 -3
  26. package/packages/flow/src/startTaskRead.vue +23 -5
  27. package/packages/flow-group/src/main.vue +684 -684
  28. package/packages/form/src/main.vue +3582 -3582
  29. package/packages/form/src/table.vue +1420 -1420
  30. package/packages/handle-user/src/main.vue +134 -134
  31. package/packages/handler/src/main.vue +374 -374
  32. package/packages/icon/src/main.vue +101 -101
  33. package/packages/input/src/main.vue +356 -356
  34. package/packages/login/src/main.vue +1851 -1850
  35. package/packages/login/src/resetPassword.vue +557 -557
  36. package/packages/main/src/default/message.vue +249 -249
  37. package/packages/main/src/default/notice.vue +157 -157
  38. package/packages/main/src/default/userinfo.vue +494 -494
  39. package/packages/main/src/public/online.vue +89 -89
  40. package/packages/main/src/public/search.vue +454 -454
  41. package/packages/main/src/public/settings.vue +221 -221
  42. package/packages/main/src/simplicity/apps.vue +388 -388
  43. package/packages/main/src/simplicity/avatar.vue +82 -82
  44. package/packages/main/src/simplicity/handler.vue +183 -183
  45. package/packages/main/src/simplicity/index.vue +1930 -1931
  46. package/packages/main/src/simplicity/lists.vue +84 -84
  47. package/packages/main/src/simplicity/menu-list.vue +128 -128
  48. package/packages/main/src/simplicity/message.vue +259 -259
  49. package/packages/main/src/simplicity/notice.vue +190 -190
  50. package/packages/main/src/simplicity/router-page.vue +45 -45
  51. package/packages/main/src/simplicity/sub-menu.vue +241 -241
  52. package/packages/main/src/simplicity/user.vue +248 -248
  53. package/packages/main/src/simplicity/userinfo.vue +304 -304
  54. package/packages/menu/src/main.vue +536 -536
  55. package/packages/pagination/src/main.vue +96 -96
  56. package/packages/qr-code/src/main.vue +170 -170
  57. package/packages/radio-group/src/main.vue +319 -319
  58. package/packages/select/src/main.vue +761 -761
  59. package/packages/selector/src/main.vue +677 -677
  60. package/packages/selector-panel/src/main.vue +1020 -1020
  61. package/packages/selector-panel/src/selection.vue +160 -160
  62. package/packages/tabs/src/main.vue +788 -788
  63. package/packages/theme-chalk/lib/index.css +1 -1
  64. package/packages/theme-chalk/lib/login.css +1 -1
  65. package/packages/theme-chalk/src/base.scss +260 -260
  66. package/packages/theme-chalk/src/button-group.scss +175 -175
  67. package/packages/theme-chalk/src/calendar.scss +113 -113
  68. package/packages/theme-chalk/src/clients.scss +87 -87
  69. package/packages/theme-chalk/src/common/var.scss +1 -4
  70. package/packages/theme-chalk/src/data-table.scss +276 -276
  71. package/packages/theme-chalk/src/dialog.scss +77 -77
  72. package/packages/theme-chalk/src/flow-group.scss +110 -110
  73. package/packages/theme-chalk/src/form.scss +496 -496
  74. package/packages/theme-chalk/src/handler.scss +133 -133
  75. package/packages/theme-chalk/src/icon.scss +1745 -1745
  76. package/packages/theme-chalk/src/icons.scss +99 -99
  77. package/packages/theme-chalk/src/login.scss +917 -926
  78. package/packages/theme-chalk/src/main.scss +632 -632
  79. package/packages/theme-chalk/src/menu.scss +222 -222
  80. package/packages/theme-chalk/src/nav.scss +125 -125
  81. package/packages/theme-chalk/src/pagination.scss +29 -29
  82. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  83. package/packages/theme-chalk/src/simplicity.scss +1246 -1246
  84. package/packages/theme-chalk/src/tabs.scss +87 -87
  85. package/packages/theme-chalk/src/toolbar.scss +179 -179
  86. package/packages/theme-chalk/src/tree-group.scss +72 -72
  87. package/packages/theme-chalk/src/tree.scss +165 -165
  88. package/packages/upload/src/main.vue +1313 -1313
  89. package/packages/wujie/src/main.vue +145 -145
  90. package/src/config/api.js +236 -236
  91. package/src/config/image.js +2 -2
  92. package/src/index.js +157 -157
  93. package/packages/.DS_Store +0 -0
  94. package/packages/checkbox-group/.DS_Store +0 -0
  95. package/packages/data-table/.DS_Store +0 -0
  96. package/packages/dialog/.DS_Store +0 -0
  97. package/packages/handler/.DS_Store +0 -0
  98. package/packages/login/.DS_Store +0 -0
  99. package/packages/main/.DS_Store +0 -0
  100. package/packages/main/src/.DS_Store +0 -0
  101. package/packages/theme-chalk/src/.DS_Store +0 -0
  102. package/src/.DS_Store +0 -0
@@ -1,1931 +1,1930 @@
1
- <template>
2
- <div class="es-main">
3
- <div class="es-simplicity-side">
4
- <img class="es-simplicity-logo" v-if="mainLogo" :src="mainLogo" />
5
- <div
6
- class="es-simplicity-org-name es-text-ellipsis-row2"
7
- :title="simpleUserInfo.orgShortName || simpleUserInfo.orgName"
8
- >
9
- {{ simpleUserInfo.orgShortName || simpleUserInfo.orgName }}
10
- </div>
11
- <el-popover
12
- class="es-simplicity-user-popover"
13
- placement="right-start"
14
- width="360"
15
- trigger="click"
16
- >
17
- <!-- 用户信息 -->
18
- <user
19
- :user="user"
20
- :notifyList="notifyList"
21
- :notify="notify"
22
- :contents="userInfoContents"
23
- @success="handleSuccess"
24
- @change="handleChangeConfig"
25
- @close="handlerClose"
26
- ></user>
27
- <avatar slot="reference" :user="user" :size="56"> </avatar>
28
- <!-- 用户信息 end -->
29
- </el-popover>
30
- <div class="es-simplicity-side-Application">
31
- <!-- 常用应用 -->
32
- <el-scrollbar>
33
- <div
34
- class="es-simplicity-side-app"
35
- v-for="item in userApps"
36
- :class="{ 'is-active': active == item.id }"
37
- :key="item.id"
38
- :title="item.text || item.name"
39
- @click="handlerClickApp(item)"
40
- >
41
- <el-badge v-bind="getBadge(item)">
42
- <es-icon
43
- class="es-simplicity-side-app-icon"
44
- :contents="item.icons || item.icon || menuIcon"
45
- ></es-icon>
46
- <div class="es-simplicity-side-app-text">
47
- {{ item.text || item.name }}
48
- </div>
49
- </el-badge>
50
- </div>
51
- <div
52
- class="es-simplicity-side-app"
53
- @click="handlerClickApp()"
54
- v-show="menus.length"
55
- >
56
- <es-icon
57
- class="es-simplicity-side-app-icon"
58
- contents="es-icon-omit"
59
- ></es-icon>
60
- <div class="es-simplicity-side-app-text">更多</div>
61
- </div>
62
- <div
63
- class="es-simplicity-side-app"
64
- v-for="(item, index) in newApps"
65
- :class="{ 'is-active': active == item.id }"
66
- :key="item.id"
67
- :title="item.text || item.name"
68
- @click.stop="handlerClickApp(item)"
69
- >
70
- <i
71
- class="el-icon-circle-close"
72
- @click.stop="handleDelete(index)"
73
- ></i>
74
- <el-badge v-bind="getBadge(item)">
75
- <es-icon
76
- class="es-simplicity-side-app-icon"
77
- :contents="item.icons || item.icon || menuIcon"
78
- ></es-icon>
79
- <div class="es-simplicity-side-app-text">
80
- {{ item.text || item.name }}
81
- </div>
82
- </el-badge>
83
- </div>
84
- </el-scrollbar>
85
- <!-- 常用应用 end -->
86
- </div>
87
- <div
88
- class="es-simplicity-side-app"
89
- v-if="_aiConfig"
90
- :style="_aibackground"
91
- @click="handlerSetDrawer(_aiConfig)"
92
- >
93
- <es-icon
94
- v-show="_aiConfig.icon"
95
- class="es-simplicity-side-app-icon"
96
- :contents="_aiConfig.icon"
97
- ></es-icon>
98
- <div class="es-simplicity-side-app-text" v-show="_aiConfig.text">
99
- {{ _aiConfig.text }}
100
- </div>
101
- </div>
102
- </div>
103
- <div class="es-simplicity-main">
104
- <!-- 应用 -->
105
- <apps
106
- :visible.sync="showApps"
107
- :menu-icon="menuIcon"
108
- :color="appColor"
109
- :backgroundColor="appBackgroundColor"
110
- :applications="applications"
111
- :business="business"
112
- :systems="systems"
113
- :user="user"
114
- @click="handlerClickApps"
115
- ></apps>
116
- <!-- 应用 end -->
117
-
118
- <!-- AI -->
119
- <el-drawer
120
- class="es-simplicity-public-drawer"
121
- direction="ltr"
122
- modal-class="es-simplicity-apps-modal"
123
- size="100%"
124
- show-close
125
- :modal-append-to-body="false"
126
- :visible.sync="drawer.visible"
127
- >
128
- <!-- <i
129
- class="es-icon-close es-simplicity-drawer-close"
130
- @click="handleCloseDrawer"
131
- ></i> -->
132
- <template v-if="drawer.url">
133
- <template v-if="isIE || drawer.method !== 'wujie'">
134
- <iframe
135
- frameborder="0"
136
- width="100%"
137
- height="100%"
138
- :src="drawer.url"
139
- ></iframe>
140
- </template>
141
- <template v-else>
142
- <es-wujie
143
- :host="host"
144
- :show="true"
145
- :props="wjProps"
146
- :attrs="wjAttrs"
147
- :name="drawer.name"
148
- :url="drawer.url"
149
- ></es-wujie>
150
- </template>
151
- </template>
152
- </el-drawer>
153
- <!-- AI end -->
154
-
155
- <!-- 路由、iframe -->
156
- <div class="es-simplicity-tabs-handler-mask" v-show="showTabsHandler">
157
- <el-card class="es-simplicity-tabs-handler" ref="tabsHandler">
158
- <div
159
- class="es-simplicity-tabs-handler-item"
160
- :class="{ 'is-disabled': isDisabled.refresh }"
161
- @click="isDisabled.refresh ? '' : handleTabsEvents(0)"
162
- >
163
- 刷新
164
- </div>
165
- <div
166
- class="es-simplicity-tabs-handler-item"
167
- @click="handleTabsEvents(1)"
168
- >
169
- 关闭标签
170
- </div>
171
- <div
172
- class="es-simplicity-tabs-handler-item"
173
- :class="{ 'is-disabled': isDisabled.other }"
174
- @click="isDisabled.other ? '' : handleTabsEvents(2)"
175
- >
176
- 关闭其他
177
- </div>
178
- <div
179
- class="es-simplicity-tabs-handler-item"
180
- :class="{ 'is-disabled': isDisabled.left }"
181
- @click="isDisabled.left ? '' : handleTabsEvents(3)"
182
- >
183
- 关闭左侧
184
- </div>
185
- <div
186
- class="es-simplicity-tabs-handler-item"
187
- :class="{ 'is-disabled': isDisabled.right }"
188
- @click="isDisabled.right ? '' : handleTabsEvents(4)"
189
- >
190
- 关闭右侧
191
- </div>
192
- </el-card>
193
- </div>
194
- <el-tabs
195
- class="es-simplicity-iframe"
196
- :class="{ 'is-open': showMenu, 'is-fold': fold }"
197
- v-model="activeName"
198
- closable
199
- hide-bar
200
- opacity
201
- @tab-remove="handleRemove"
202
- @tab-contextmenu="handleContextmenu"
203
- >
204
- <!-- 操作栏 -->
205
- <handler
206
- slot="append"
207
- v-bind="handleConfig"
208
- :data="handleData"
209
- :hide="hide"
210
- :online="userNums"
211
- :notice-num="notice"
212
- @click="handleClick"
213
- ></handler>
214
- <!-- 操作栏 end-->
215
-
216
- <!-- 菜单 -->
217
- <sub-menu
218
- :mode="mode"
219
- :visible.sync="showMenu"
220
- :closed.sync="fold"
221
- :size="menuWidth"
222
- :title="title"
223
- :color="menuColor"
224
- :backgroundColor="menuBackgroundColor"
225
- :menu-icon="menuIcon"
226
- :active="subActive"
227
- v-bind="subMenus"
228
- @command="handlerClickMenu"
229
- ></sub-menu>
230
- <!-- 菜单 end -->
231
- <el-tab-pane
232
- v-for="item in tabs"
233
- :key="item.id"
234
- :label="item.text || item.name"
235
- :name="item.id"
236
- >
237
- <router-page
238
- v-if="item.method === 'router'"
239
- v-bind="item"
240
- :query="$parent.params"
241
- ></router-page>
242
- <iframe
243
- v-else-if="isIE || item.method == 'iframe'"
244
- :id="activeName == item.id ? iframeId : ''"
245
- :name="activeName == item.id ? iframeId : ''"
246
- frameborder="0"
247
- width="100%"
248
- height="100%"
249
- :src="item.url"
250
- ></iframe>
251
- <es-wujie
252
- v-else-if="item.method === 'wujie' && item.url"
253
- :host="host"
254
- :show="true"
255
- :props="wjProps"
256
- :attrs="wjAttrs"
257
- :name="item.appCode"
258
- :url="item.url"
259
- ></es-wujie>
260
- </el-tab-pane>
261
- </el-tabs>
262
- <!-- 路由、iframe end -->
263
-
264
- <!-- 消息列表 -->
265
- <message
266
- v-if="showMsg"
267
- ref="message"
268
- :total.sync="notice"
269
- :visible.sync="showMsg"
270
- :winopen="winopen"
271
- @ignore="handleChange"
272
- @handle="handleMenuTips"
273
- ></message>
274
- <!-- 消息列表 end-->
275
-
276
- <!-- 设置 -->
277
- <settings
278
- v-bind="$attrs"
279
- layout-type="simplicity"
280
- active="simplicity"
281
- :theme="themeColor"
282
- :predefine="themes"
283
- :visible.sync="showSet"
284
- @change="handleChange"
285
- @layout="handleLayout"
286
- ></settings>
287
- <!-- 设置 end-->
288
-
289
- <!-- 消息提醒 -->
290
- <notice :data="sysMsg" :winopen="winopen" @opened="handleOpened"></notice>
291
- <!-- 消息提醒 end -->
292
-
293
- <es-dialog
294
- class="es-public-search-dialog"
295
- :visible.sync="showSearch"
296
- size="lg"
297
- >
298
- <search
299
- :apps="applications"
300
- :menus="menus"
301
- :menuIcon="menuIcon"
302
- @select="handleSelect"
303
- ></search>
304
- </es-dialog>
305
- <!-- 公用弹窗 -->
306
- <es-dialog :title="dialog.title" :visible.sync="dialog.show" size="md">
307
- <template v-if="dialog.title == '查看在线人员' && !dialog.src">
308
- <online></online>
309
- </template>
310
- <iframe
311
- v-else-if="dialog.show"
312
- width="100%"
313
- height="100%"
314
- frameborder="0"
315
- :src="dialog.src"
316
- ></iframe>
317
- </es-dialog>
318
- <!-- 公用弹窗 end -->
319
- </div>
320
- </div>
321
- </template>
322
-
323
- <script>
324
- import avatar from './avatar.vue';
325
- import handler from './handler.vue';
326
- import subMenu from './sub-menu.vue';
327
- import apps from './apps.vue';
328
- import user from './user.vue';
329
- import message from './message.vue';
330
- import notice from './notice.vue';
331
- import settings from '../public/settings.vue';
332
- import routerPage from './router-page.vue';
333
- import online from '../public/online.vue';
334
- import search from '../public/search.vue';
335
- import {
336
- wss,
337
- logout,
338
- topic,
339
- getUserAppWithTag,
340
- recordUserApp,
341
- getComplexApplications,
342
- getComplexApplicationsNew
343
- } from 'eoss-ui/src/config/api.js';
344
- import store from 'eoss-ui/src/utils/store';
345
- import util from 'eoss-ui/src/utils/util';
346
- const isIE = navigator.userAgent.indexOf('MSIE') != -1;
347
- const systemMode = util.win.systemMode || 'default';
348
- let events = [
349
- (tabs, index, that) => {
350
- let tab = tabs[index];
351
- if (tab.method == 'iframe') {
352
- tabs[index].url = util.handlerUrl(tab.url);
353
- }
354
- if (tab.method === 'wujie' && tab.appCode) {
355
- const url = tab.url;
356
- tab.url = '';
357
- that.$nextTick(() => {
358
- tab.url = url;
359
- });
360
- }
361
- if (tab.method === 'router') {
362
- that.$set(tabs[index], 'keys', util.uuid());
363
- }
364
- return tabs;
365
- },
366
- (tabs, index, that) => {
367
- let i = util.indexOfObj(tabs, that.activeName, 'id');
368
- if (tabs.length == 1) {
369
- that.activeName = '';
370
- } else if (i == index) {
371
- if (index < tabs.length - 1) {
372
- that.activeName = tabs[index + 1].id;
373
- } else {
374
- that.activeName = tabs[index - 1].id;
375
- }
376
- }
377
- tabs.splice(index, 1);
378
- return tabs;
379
- },
380
- (tabs, index, that) => {
381
- let tab = tabs.slice(index, index + 1);
382
- that.activeName = tab[0].id;
383
- return tab;
384
- },
385
- (tabs, index, that) => {
386
- let i = util.indexOfObj(tabs, that.activeName, 'id');
387
- if (i < index) {
388
- that.activeName = tabs[index].id;
389
- }
390
- tabs.splice(0, index);
391
- return tabs;
392
- },
393
- (tabs, index, that) => {
394
- let i = util.indexOfObj(tabs, that.activeName, 'id');
395
- if (i > index) {
396
- that.activeName = tabs[index].id;
397
- }
398
- tabs.splice(index + 1, tabs.length - index);
399
- return tabs;
400
- }
401
- ];
402
- export default {
403
- name: 'Simplicity',
404
- provide() {
405
- return {
406
- esMain: this,
407
- refresh: this.handleRefresh,
408
- jumpMenu: this.jumpMenu
409
- };
410
- },
411
- components: {
412
- avatar,
413
- handler,
414
- subMenu,
415
- apps,
416
- user,
417
- message,
418
- notice,
419
- settings,
420
- routerPage,
421
- online,
422
- search
423
- },
424
- props: {
425
- //模式
426
- mode: {
427
- type: String,
428
- default: systemMode
429
- },
430
- sysCode: String,
431
- appCode: String,
432
- //logo
433
- logo: String,
434
- //菜单、应用默认图标
435
- menuIcon: {
436
- type: String,
437
- default: 'es-icon-application'
438
- },
439
- //默认主题颜色
440
- theme: {
441
- type: String,
442
- default: '#409eff'
443
- },
444
- //主题颜色选择颜色集合
445
- themes: Array,
446
- //操作栏配置
447
- handleData: Array,
448
- //操作栏单项配置
449
- handleConfig: Object,
450
- //需要隐藏的头部功能
451
- hides: Object,
452
- //菜单颜色
453
- menuColor: [String, Array],
454
- //菜单背景颜色
455
- menuBackgroundColor: [String, Array],
456
- //应用颜色
457
- appColor: [String, Array],
458
- //应用背景颜色
459
- appBackgroundColor: [String, Array],
460
- //默认头像
461
- userHead: String,
462
- //应用列表接口
463
- appsUrl: {
464
- type: String,
465
- default: getUserAppWithTag
466
- },
467
- //是否启用子应用菜单接口
468
- application: {
469
- type: Boolean,
470
- default: false
471
- },
472
- //菜单接口
473
- menuUrl: String,
474
- //远程请求菜单
475
- remote: {
476
- type: Boolean,
477
- default: true
478
- },
479
- //websocket
480
- socket: {
481
- type: Boolean,
482
- default: true
483
- },
484
- //人工智能配置
485
- ai: Object,
486
- //iframeId
487
- iframeId: {
488
- type: String,
489
- default: 'stage'
490
- },
491
- //查看在线人数
492
- onlineView: {
493
- type: [String, Boolean],
494
- default: true
495
- },
496
- //消息办理是否采用window.open的方式打开
497
- winopen: {
498
- type: Boolean,
499
- default: true
500
- },
501
- //是否采用wujie微前端加载页面
502
- loadWujie: {
503
- type: Boolean,
504
- default: true
505
- },
506
- //无界微前端Props属性
507
- wjProps: Object,
508
- //无界微前端Attrs属性
509
- wjAttrs: Object,
510
- //菜单宽度
511
- menuWidth: {
512
- type: Number,
513
- default: 220
514
- },
515
- //路由方式
516
- routeType: String,
517
- host: {
518
- type: String,
519
- default() {
520
- return sessionStorage.getItem('host') || '';
521
- }
522
- },
523
- //切换旧版样式
524
- oldVersion: Boolean
525
- },
526
- data() {
527
- return {
528
- //显示用户信息
529
- showUser: false,
530
- //主题色
531
- themeColor: this.theme,
532
- //是否ie浏览器
533
- isIE: isIE,
534
- //logo
535
- mainLogo: this.logo,
536
- //侧边用户应用
537
- userApps: [],
538
- //点击应用存侧边
539
- newApps: [],
540
- //所有菜单
541
- menus: [],
542
- //菜单名称
543
- title: '',
544
- //子菜单
545
- subMenus: null,
546
- //展示菜单导航
547
- showMenu: false,
548
- //子菜单选中
549
- subActive: '',
550
- //折叠菜单
551
- fold: false,
552
- //人工智能配置
553
- aiConfig: null,
554
- //公用窗口面板配置
555
- drawer: {
556
- visible: false
557
- },
558
- //所有应用
559
- applications: [],
560
- //业务系统
561
- business: [],
562
- //系统管理
563
- systems: [],
564
- //气泡数
565
- menuTips: {},
566
- //展示所有应用
567
- showApps: false,
568
- //用户信息
569
- userModel: {},
570
- //通知类型列表
571
- notifyList: [],
572
- //用户样式
573
- userStyle: {},
574
- //通知类型
575
- notify: '',
576
- //用户信息表单结构
577
- userInfoContents: undefined,
578
- //窗口页签
579
- tabs: [],
580
- //页签选中name
581
- activeName: '',
582
- //初始应用菜单页
583
- initApps: null,
584
- //首页地址
585
- indexUrl: '',
586
- //首页配置
587
- homePage: {},
588
- //门户跳转页地址
589
- doorIndex: '',
590
- //弹窗
591
- dialog: {},
592
- //在线人数
593
- userNums: 1,
594
- //消息列表展示状态
595
- showMsg: false,
596
- //搜索
597
- showSearch: false,
598
- //消息数
599
- notice: 0,
600
- //即时消息
601
- sysMsg: [],
602
- //定时关闭及时消息对象
603
- sysMsgOut: null,
604
- //额外信息数据
605
- extraData: '',
606
- //显示设置面板
607
- showSet: false,
608
- //窗口是否可选
609
- isDisabled: {},
610
- //显示页签操作
611
- showTabsHandler: false,
612
- //页签对象
613
- pane: null,
614
- //选中菜单
615
- active: '',
616
- //单位名称
617
- simpleUserInfo: {},
618
- topRightToolHide: '',
619
- showOld: this.oldVersion
620
- };
621
- },
622
- computed: {
623
- //菜单接口
624
- _menuUrl() {
625
- if (this.menuUrl) {
626
- return this.menuUrl;
627
- }
628
- if (this.application) {
629
- return getComplexApplicationsNew;
630
- }
631
- return getComplexApplications;
632
- },
633
- //人工智能配置
634
- _aiConfig() {
635
- return this.aiConfig || this.ai
636
- ? {
637
- icon: 'data:image/png;base64,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',
638
- ...(this.aiConfig || this.ai)
639
- }
640
- : false;
641
- },
642
- //人工智能图片背景
643
- _aibackground() {
644
- return this._aiConfig && (this._aiConfig.image || this._aiConfig.icon)
645
- ? {
646
- 'background-image': `url(${
647
- this._aiConfig.image || this._aiConfig.icon
648
- })`
649
- }
650
- : {};
651
- },
652
- //用户信息
653
- user() {
654
- return this.userModel ? this.userModel : store.get('userModel');
655
- },
656
- //在线人数列表地址
657
- onlineUrl() {
658
- if (this.onlineView) {
659
- return typeof this.onlineView == 'string' ? this.onlineView : '';
660
- }
661
- return false;
662
- },
663
- //隐藏操作按键
664
- hide() {
665
- let topRightToolHide = {};
666
- if (this.topRightToolHide) {
667
- topRightToolHide = JSON.parse(
668
- this.topRightToolHide.replace(
669
- /(['"])?([a-zA-Z0-9_]+)(['"])?:/g,
670
- '"$2":'
671
- )
672
- );
673
- }
674
- let hides = {
675
- home: this.indexUrl ? false : true,
676
- index: this.doorIndex ? false : true,
677
- old: this.showOld ? false : true
678
- };
679
-
680
- if (this.layout === 'subsystem' || this.application) {
681
- hides.system = false;
682
- }
683
- if (this.layout === 'topside' || this.layout === 'side') {
684
- hides.user = true;
685
- }
686
- return { ...hides, ...this.hides, ...topRightToolHide };
687
- }
688
- },
689
- watch: {
690
- menuTips: {
691
- deep: true,
692
- handler() {
693
- this.setTips(this.userApps);
694
- this.setTips(this.applications);
695
- this.setTips(this.business);
696
- this.setTips(this.systems);
697
- this.setTips(this.menus);
698
- }
699
- }
700
- },
701
- created() {
702
- this.doorIndex = sessionStorage.getItem('doorIndex');
703
- },
704
- mounted() {
705
- this.handleListener();
706
- },
707
- methods: {
708
- /**
709
- * @desc:匹配路由
710
- * @author huangbo
711
- * @date 2024年9月7日
712
- **/
713
- hasRouter(res, url, code) {
714
- if (!url) {
715
- return false;
716
- }
717
- if (Array.isArray(res)) {
718
- for (let i in res) {
719
- let path = this.hasRouter(res[i], url, code);
720
- if (path) {
721
- return path;
722
- }
723
- }
724
- } else {
725
- let path = res.path;
726
- if (path !== '/' && path !== '/404') {
727
- path = path.replace(path[1], path[1].toLowerCase());
728
- }
729
- let pathname = url.substring(url.indexOf('#/') + 1);
730
- pathname = pathname.split('?')[0];
731
- let appCode;
732
- if (res.path !== '/' && pathname == path) {
733
- if (res.components) {
734
- if (!res.components[code]) {
735
- console.error(
736
- '路由“命名视图”规范属性名称与菜单appCode不一致',
737
- res,
738
- code
739
- );
740
- appCode = Object.keys(res.components).filter((item) => {
741
- return item !== 'default';
742
- })[0];
743
- }
744
- } else {
745
- console.error(
746
- '请根据路由“命名视图”规范,正确添加components属性名称',
747
- res
748
- );
749
- }
750
- return appCode ? { path: pathname, appCode } : pathname;
751
- }
752
- if (res && Object.prototype.hasOwnProperty.call(res, 'children')) {
753
- let path = this.hasRouter(res.children, url, code);
754
- if (path) {
755
- return path;
756
- }
757
- }
758
- }
759
- return false;
760
- },
761
- /**
762
- * @desc:获取初始数据
763
- * @author huangbo
764
- * @date 2024年9月7日
765
- **/
766
- init(results, first) {
767
- this.setConfig(results);
768
- if (this.remote && first) {
769
- this.getApplications();
770
- }
771
- },
772
- /**
773
- * @desc:设置用户配置及信息
774
- * @author huangbo
775
- * @date 2024年9月7日
776
- **/
777
- setConfig(results) {
778
- localStorage.setItem('mainConfig', JSON.stringify(results));
779
- util.setStorage({
780
- type: this.storage,
781
- key: {
782
- depId: results.userModel.depId,
783
- orgId: results.userModel.orgId,
784
- userId: results.userModel.userId,
785
- userName: results.userModel.username || results.userModel.userName,
786
- useCaseCodes: results.resourceCodes || results.userModel.resourceCodes
787
- }
788
- });
789
- for (let i in results) {
790
- if (i === 'mainLogoUrl' && results[i]) {
791
- this.mainLogo = results[i];
792
- }
793
- if (
794
- i === 'mainBannerUrl' &&
795
- results[i] &&
796
- this.headerImage === undefined
797
- ) {
798
- this.headerImg = results[i];
799
- }
800
- if (i === 'initApplication' && results[i]) {
801
- this.initApps = results[i].split(',');
802
- }
803
- if (i === 'indexUrl' && results[i]) {
804
- this.indexUrl = results[i];
805
- }
806
- if (i === 'doorIndex' && results[i]) {
807
- util.win.open(results[i]);
808
- this.doorIndex = results[i];
809
- }
810
- if (i === 'subsystemName' && results[i]) {
811
- document.title = results[i];
812
- }
813
- if (i === 'loginPage' && results[i]) {
814
- util.setStorage('loginPage', results[i]);
815
- }
816
- if (i === 'sysLogoIco' && results[i]) {
817
- localStorage.setItem('sysLogoIco', results[i]);
818
- util.setFavicon(results[i]);
819
- }
820
- if (i === 'userStyle' && results[i]) {
821
- if (results[i].color) {
822
- let color = unescape(results[i].color).toLowerCase();
823
- if (util.startWith(color, '#')) {
824
- this.themeColor = color;
825
- }
826
- }
827
- this.userStyle = results[i];
828
- this.notify = results[i].notify || '';
829
- }
830
- if (i === 'subsystemExtend' && results[i]) {
831
- if (results[i].themeColor) {
832
- let color = unescape(results[i].themeColor).toLowerCase();
833
- if (util.startWith(color, '#')) {
834
- this.themeColor = color;
835
- }
836
- }
837
- if (results[i].userInfoContents) {
838
- this.userInfoContents = results[i].userInfoContents;
839
- }
840
- if (results[i].webPageWatermark) {
841
- try {
842
- util.win.top.webPageWatermark = results[i].webPageWatermark;
843
- util.watermark(results[i].webPageWatermark);
844
- } catch (error) {
845
- util.win.postMessage(
846
- { type: 2, content: results[i].webPageWatermark },
847
- '*'
848
- );
849
- }
850
- }
851
- if (results[i].loginPage) {
852
- util.setStorage('loginPage', results[i].loginPage);
853
- }
854
- if (results[i].aiConfig) {
855
- if (typeof results[i].aiConfig == 'string') {
856
- try {
857
- this.aiConfig = JSON.parse(results[i].aiConfig);
858
- } catch (error) {
859
- this.aiConfig = { url: results[i].aiConfig };
860
- }
861
- } else {
862
- this.aiConfig = results[i].aiConfig;
863
- }
864
- }
865
- if (results[i].portalPage || results[i].portalpage) {
866
- this.doorIndex = results[i].portalPage || results[i].portalpage;
867
- }
868
- if (results[i].multipleVersion || results[i].oldVersion) {
869
- this.showOld = results[i].oldVersion ? results[i].oldVersion : true;
870
- }
871
- if (results[i].topRightToolHide) {
872
- this.topRightToolHide = results[i].topRightToolHide;
873
- }
874
- }
875
- if (i === 'userModel' && results[i]) {
876
- if (results[i].userHeadUrl) {
877
- results[i].userHeadUrl = util.jointUrl({
878
- url: results[i].userHeadUrl,
879
- reg: '/main2'
880
- });
881
- } else {
882
- results[i].userHeadUrl = this.userHead;
883
- }
884
- this.userModel = results[i];
885
- }
886
- if (i === 'notifyList' && results[i]) {
887
- this.notifyList = results[i];
888
- }
889
- store.set(i, results[i]);
890
- }
891
- },
892
- /**
893
- * @desc:获取所有应用
894
- * @author huangbo
895
- * @date 2024年9月7日
896
- **/
897
- getApplications() {
898
- let loading = util.loading('', '加载中...');
899
- util
900
- .ajax({
901
- url: this.appsUrl,
902
- defaults: true
903
- })
904
- .then((res) => {
905
- if (this.socket) {
906
- this.initWebSocket();
907
- }
908
- if (res.rCode === 0) {
909
- if (res.results && Object.keys(res.results).length) {
910
- let { all, app_special_business_system, app_system, app_user } =
911
- res.results;
912
- this.userApps = app_user.filter((item) => {
913
- return item.permission !== false;
914
- });
915
- this.applications = all;
916
- this.business = app_special_business_system;
917
- this.systems = app_system;
918
- this.setTips(this.userApps);
919
- this.setTips(this.applications);
920
- this.setTips(this.business);
921
- this.setTips(this.systems);
922
- } else {
923
- this.$message.error('未分配应用菜单权限,请联系管理员!');
924
- }
925
- this.getMenus(loading);
926
- } else {
927
- loading.close();
928
- let msg = res.msg || '系统错误,请联系管理员!';
929
- this.$message.error(msg);
930
- }
931
- })
932
- .catch((err) => {
933
- loading.close();
934
- if (err.message && err.message !== 'canceled') {
935
- this.$message.error(err.message);
936
- }
937
- });
938
- },
939
- /**
940
- * @desc:获取菜单列表
941
- * @author huangbo
942
- * @date 2024年9月7日
943
- **/
944
- getMenus(loading) {
945
- const menuData = store.get('nav');
946
- if (menuData && menuData.length) {
947
- loading.close();
948
- this.renderMenus(menuData);
949
- return;
950
- }
951
- util
952
- .ajax({ url: this._menuUrl })
953
- .then((res) => {
954
- loading.close();
955
- if (res.rCode === 0) {
956
- if (res.results && res.results.length) {
957
- //this.$emit('update:menuData', res.results);
958
- store.set('nav', JSON.parse(JSON.stringify(res.results)));
959
- this.renderMenus(JSON.parse(JSON.stringify(res.results)));
960
- } else {
961
- this.$message.error('未分配菜单权限,请联系管理员!');
962
- }
963
- } else {
964
- let msg = res.msg || '系统错误,请联系管理员!';
965
- this.$message.error(msg);
966
- }
967
- })
968
- .catch((err) => {
969
- loading.close();
970
- if (err.message && err.message !== 'canceled') {
971
- this.$message.error(err.message);
972
- }
973
- });
974
- },
975
- /**
976
- * @desc:处理菜单列表
977
- * @author huangbo
978
- * @date 2024年9月7日
979
- **/
980
- renderMenus(res) {
981
- this.menus = res;
982
- this.setTips(this.menus);
983
- store.set('nav', this.menus);
984
- if (this.indexUrl) {
985
- let obj = this.getMenu(this.menus, this.indexUrl);
986
- obj = obj
987
- ? obj
988
- : {
989
- url: this.indexUrl,
990
- text: '工作台',
991
- id: '0',
992
- appCode: 'indexUrl'
993
- };
994
- this.homePage = this.setIframeType(obj);
995
- if (!this.appCode) {
996
- this.tabs = [this.homePage];
997
- this.activeName = this.homePage.id;
998
- }
999
- }
1000
- if (this.appCode) {
1001
- let code = this.sysCode || this.appCode;
1002
- let app = this.userApps.filter((item) => {
1003
- return item.code === code;
1004
- })[0];
1005
- if (app) {
1006
- this.active = app.id;
1007
- if (app.url) {
1008
- let obj = this.getMenu(this.menus, app.url);
1009
- if (obj) {
1010
- let tab = this.setIframeType(obj);
1011
- this.tabs = [tab];
1012
- this.activeName = tab.id;
1013
- } else {
1014
- this.tabs = [app];
1015
- }
1016
- }
1017
- }
1018
- if (this.sysCode) {
1019
- let subMenus = this.getMenu(this.menus, this.sysCode, 'appCode');
1020
- if (subMenus) {
1021
- let obj = this.getMenu(this.menus, this.appCode, 'appCode');
1022
- if (obj) {
1023
- if (!obj.url) {
1024
- obj = this.getFirst(obj);
1025
- }
1026
- this.subActive = obj.id;
1027
- let tab = this.setIframeType(obj);
1028
- this.tabs = [tab];
1029
- this.activeName = tab.id;
1030
- } else {
1031
- this.subActive = '';
1032
- }
1033
- this.subMenus = subMenus;
1034
- this.showMenu = true;
1035
- } else {
1036
- this.subMenus = null;
1037
- this.showMenu = false;
1038
- }
1039
- } else {
1040
- let subMenus = this.getMenu(this.menus, this.appCode, 'appCode');
1041
- if (subMenus) {
1042
- if (this.tabs.length == 0) {
1043
- let obj = this.getFirst(subMenus);
1044
- if (obj) {
1045
- this.subActive = obj.id;
1046
- let tab = this.setIframeType(obj);
1047
- this.tabs = [tab];
1048
- this.activeName = tab.id;
1049
- } else {
1050
- this.subActive = '';
1051
- }
1052
- }
1053
- this.subMenus = subMenus;
1054
- this.showMenu = true;
1055
- } else {
1056
- this.subMenus = null;
1057
- this.showMenu = false;
1058
- }
1059
- }
1060
- } else if (this.initApps && this.initApps.length && !this.indexUrl) {
1061
- let obj = this.getMenu(
1062
- this.menus,
1063
- this.initApps[this.initApps.length - 1]
1064
- );
1065
- if (obj) {
1066
- let tab = this.setIframeType(obj);
1067
- this.tabs.push(tab);
1068
- this.activeName = tab.id;
1069
- }
1070
- }
1071
- },
1072
- /**
1073
- * @desc:设置页面加载类型
1074
- * @author huangbo
1075
- * @date 2024年9月7日
1076
- **/
1077
- setIframeType(res) {
1078
- let { url } = res;
1079
- let urls = url.split('?');
1080
- if (urls[0].indexOf('.js') > 1 && !isIE) {
1081
- res.method = 'wujie';
1082
- if (!res.appCode) {
1083
- res.appCode = 'application_' + Date.now();
1084
- }
1085
- } else if (
1086
- urls[0].indexOf('.dhtml') > 0 ||
1087
- (urls[0].indexOf('.html') > 0 && urls[0].indexOf('.html#') === -1)
1088
- ) {
1089
- res.method = 'iframe';
1090
- } else {
1091
- if (urls[0].indexOf('.html') === -1 && urls[0].indexOf('#/') === -1) {
1092
- res.method = 'iframe';
1093
- } else {
1094
- const routes = this.$router.options.routes;
1095
- if (routes) {
1096
- let path = this.hasRouter(routes, urls[0], res.appCode);
1097
- if (path && this.routeType !== 'wujie') {
1098
- res.method = 'router';
1099
- if (typeof path === 'string') {
1100
- res.path = path;
1101
- } else {
1102
- res.path = path.path;
1103
- res.appCode = path.appCode;
1104
- }
1105
- res.keys = util.uuid();
1106
- } else {
1107
- let urlopenmode = util.getParams({
1108
- url: url,
1109
- name: 'urlopenmode'
1110
- });
1111
- if (
1112
- this.loadWujie === false ||
1113
- isIE ||
1114
- res.urlopenmode == 3 ||
1115
- urlopenmode == 3
1116
- ) {
1117
- res.method = 'iframe';
1118
- } else {
1119
- res.method = 'wujie';
1120
- if (!res.appCode) {
1121
- res.appCode = 'application_' + Date.now();
1122
- }
1123
- }
1124
- }
1125
- } else if (
1126
- (urls[0].indexOf('.html') > -1 && urls[0].indexOf('#/') > -1) ||
1127
- urls[0].indexOf('/#/') > -1
1128
- ) {
1129
- res.method = 'wujie';
1130
- if (!res.appCode) {
1131
- res.appCode = 'application_' + Date.now();
1132
- }
1133
- } else {
1134
- res.method = 'iframe';
1135
- }
1136
- }
1137
- }
1138
- return res;
1139
- },
1140
- /**
1141
- * @desc:获取菜单
1142
- * @author huangbo
1143
- * @date 2024年9月7日
1144
- **/
1145
- getMenu(menus, res, key) {
1146
- if (Array.isArray(menus)) {
1147
- for (let i = 0; i < menus.length; i++) {
1148
- let item = menus[i];
1149
- if (key) {
1150
- if (item[key] === res) {
1151
- return item;
1152
- }
1153
- } else if (item.url === res || item.id === res) {
1154
- return item;
1155
- }
1156
- if (
1157
- Object.prototype.hasOwnProperty.call(item, 'children') &&
1158
- item.children.length
1159
- ) {
1160
- let obj = this.getMenu(item.children, res, key);
1161
- if (obj) {
1162
- return obj;
1163
- }
1164
- } else if (
1165
- Object.prototype.hasOwnProperty.call(item, 'fourthTabs') &&
1166
- item.fourthTabs.length
1167
- ) {
1168
- let obj = this.getMenu(item.fourthTabs, res, key);
1169
- if (obj) {
1170
- return obj;
1171
- }
1172
- }
1173
- }
1174
- }
1175
- return false;
1176
- },
1177
- /**
1178
- * @desc:获取菜单第一条数据
1179
- * @author huangbo
1180
- * @date 2024年9月7日
1181
- **/
1182
- getFirst(obj) {
1183
- if (!obj) {
1184
- return '';
1185
- }
1186
- let openIdex = 0;
1187
- if (
1188
- obj.extendData &&
1189
- (obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen)
1190
- ) {
1191
- openIdex = parseInt(
1192
- obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen,
1193
- 10
1194
- );
1195
- }
1196
- if (obj.children && obj.children.length && obj.children[openIdex]) {
1197
- return this.getFirst(obj.children[openIdex]);
1198
- } else if (
1199
- obj.fourthTabs &&
1200
- obj.fourthTabs.length &&
1201
- obj.fourthTabs[openIdex]
1202
- ) {
1203
- return this.getFirst(obj.fourthTabs[openIdex]);
1204
- } else if (obj.url && obj.urlopenmode !== 1 && obj.urlopenmode !== 2) {
1205
- return obj;
1206
- }
1207
- },
1208
- /**
1209
- * @desc:遍历设置菜单气泡提醒
1210
- * @author huangbo
1211
- * @date 2024年9月7日
1212
- **/
1213
- setTips(obj) {
1214
- if (Array.isArray(obj)) {
1215
- obj.forEach((item) => {
1216
- this.setTips(item);
1217
- });
1218
- } else {
1219
- if (
1220
- obj &&
1221
- Object.prototype.hasOwnProperty.call(obj, 'tips') &&
1222
- obj.tips
1223
- ) {
1224
- this.$set(obj, 'tips', false);
1225
- delete obj.tips;
1226
- }
1227
- let flag = 0;
1228
- if (obj.children && obj.children.length) {
1229
- obj.children.forEach((item) => {
1230
- let n = this.setTips(item);
1231
- flag += n ? parseInt(n) : 0;
1232
- });
1233
- if (flag) {
1234
- this.$set(obj, 'tips', flag);
1235
- return flag;
1236
- }
1237
- } else if (obj.fourthTabs && obj.fourthTabs.length) {
1238
- obj.fourthTabs.forEach((item) => {
1239
- let n = this.setTips(item);
1240
- flag += n ? parseInt(n) : 0;
1241
- });
1242
- if (flag) {
1243
- this.$set(obj, 'tips', flag);
1244
- return flag;
1245
- }
1246
- } else {
1247
- let num =
1248
- this.menuTips[obj.id] ||
1249
- this.menuTips[obj.code] ||
1250
- this.menuTips[obj.appCode];
1251
- if (num && Number(num)) {
1252
- this.$set(obj, 'tips', Number(num));
1253
- return this.menuTips[obj.id];
1254
- }
1255
- }
1256
- }
1257
- return false;
1258
- },
1259
- /**
1260
- * @desc:获取气泡提醒
1261
- * @author huangbo
1262
- * @date 2024年9月7日
1263
- **/
1264
- getBadge(res) {
1265
- let num = res.tips || 0;
1266
- return num === true
1267
- ? {
1268
- isDot: true
1269
- //hidden: item.tips
1270
- }
1271
- : {
1272
- value: num,
1273
- max: 99,
1274
- hidden: !num
1275
- };
1276
- },
1277
- /**
1278
- * @desc:开启weosocket
1279
- * @author huangbo
1280
- * @date 2024年9月7日
1281
- **/
1282
- initWebSocket() {
1283
- this.webSocket = util.socket({
1284
- url: wss,
1285
- take: topic,
1286
- success: (res) => {
1287
- let data = res.data || {};
1288
- for (let i in data) {
1289
- if (data[i] !== null && data[i] !== undefined) {
1290
- if (i === 'onlineUserNums' && data[i] > 0) {
1291
- this.userNums = data[i];
1292
- }
1293
- if (i === 'sysMsgNums') {
1294
- this.notice = data[i];
1295
- if (this.showMsg) {
1296
- this.$refs.message.getMsg(true);
1297
- }
1298
- }
1299
- if (i === 'menuTipsMap') {
1300
- this.menuTips = data[i];
1301
- }
1302
- if (i === 'sysMsgList') {
1303
- this.sysMsg = data[i];
1304
- data[i] && data[i].length && this.$emit('bus-emit', 'waitdone');
1305
- }
1306
- if (i === 'extraData') {
1307
- this.extraData = data[i];
1308
- }
1309
- }
1310
- }
1311
- if (this.$store) {
1312
- try {
1313
- this.$store.commit('websocket', data);
1314
- } catch (error) {}
1315
- }
1316
- if (this.$eventBus) {
1317
- this.$eventBus.$emit('websocket', data);
1318
- }
1319
- if (util.win.eventBus) {
1320
- util.win.eventBus.$emit('websocket', data);
1321
- }
1322
- }
1323
- });
1324
- },
1325
- /**
1326
- * @desc:显示用户信息
1327
- * @author huangbo
1328
- * @date 2024年9月7日
1329
- **/
1330
- showUserInfo() {
1331
- if (this.showUser === false) {
1332
- this.showUser = true;
1333
- }
1334
- },
1335
- /**
1336
- * @desc:删除更多应用菜单点击
1337
- * @author huangbo
1338
- * @date 2024年9月7日
1339
- **/
1340
- handleDelete(index) {
1341
- this.newApps.splice(index, 1);
1342
- },
1343
- /**
1344
- * @desc:储存更多应用菜单点击
1345
- * @author huangbo
1346
- * @date 2024年9月7日
1347
- **/
1348
- handlerClickApps(res) {
1349
- if (res.permission === false) {
1350
- return false;
1351
- }
1352
- let i = util.indexOfObj(this.newApps, res, 'id');
1353
- if (i == -1) {
1354
- this.newApps.push(res);
1355
- }
1356
- this.handlerClickApp(res);
1357
- },
1358
- /**
1359
- * @desc:侧边应用菜单点击
1360
- * @author huangbo
1361
- * @date 2024年9月7日
1362
- **/
1363
- handlerClickApp(res) {
1364
- this.showMsg = false;
1365
- this.showSet = false;
1366
- this.fold = false;
1367
- if (res) {
1368
- if (res.permission === false) {
1369
- return false;
1370
- }
1371
- if (
1372
- (res.children && res.children.length) ||
1373
- (res.fourthTabs && res.fourthTabs.length)
1374
- ) {
1375
- this.subMenus = res;
1376
- this.showMenu = true;
1377
- this.showApps = false;
1378
- }
1379
- let set = true;
1380
- if (res.url) {
1381
- if (res.urlopenmode == 1 || res.openModel == 1) {
1382
- set = false;
1383
- util.win.open(res.url);
1384
- } else if (res.urlopenmode == 2 || res.openModel == 2) {
1385
- set = false;
1386
- util.win.open(res.url, '_self');
1387
- } else {
1388
- let i = util.indexOfObj(this.tabs, res, 'id');
1389
- this.activeName = res.id;
1390
- if (i == -1) {
1391
- let obj = this.getMenu(this.menus, res.url);
1392
- if (obj) {
1393
- let n = util.indexOfObj(this.tabs, obj, 'id');
1394
- if (n == -1) {
1395
- let tab = this.setIframeType(obj);
1396
- this.tabs.push(tab);
1397
- this.activeName = tab.id;
1398
- } else {
1399
- if (obj.method == 'iframe') {
1400
- obj.url = util.handlerUrl(obj.url);
1401
- }
1402
- }
1403
- } else {
1404
- let tab = this.setIframeType(res);
1405
- this.tabs.push(tab);
1406
- this.activeName = tab.id;
1407
- }
1408
- } else {
1409
- if (res.method == 'iframe') {
1410
- res.url = util.handlerUrl(res.url);
1411
- }
1412
- }
1413
- }
1414
- }
1415
- if (set && res.code) {
1416
- let subMenus = this.getMenu(this.menus, res.code, 'appCode');
1417
- if (!subMenus && !res.url) {
1418
- this.$alert('没有关联菜单,请联系管理员!', '提示', {
1419
- confirmButtonText: '确定',
1420
- type: 'warning'
1421
- }).catch(() => {});
1422
- } else {
1423
- this.title = res.text || res.name;
1424
- this.subMenus = subMenus ? subMenus : null;
1425
- this.showMenu = subMenus !== false;
1426
- this.showApps = false;
1427
- if (subMenus && subMenus.url) {
1428
- let i = util.indexOfObj(this.tabs, subMenus, 'id');
1429
- this.activeName = subMenus.id;
1430
- if (i == -1) {
1431
- let tab = this.setIframeType(subMenus);
1432
- this.tabs.push(tab);
1433
- } else {
1434
- if (subMenus.method == 'iframe') {
1435
- subMenus.url = util.handlerUrl(subMenus.url);
1436
- }
1437
- }
1438
- }
1439
- }
1440
- }
1441
- this.active = res.id;
1442
- } else {
1443
- this.showApps = !this.showApps;
1444
- }
1445
- },
1446
- /**
1447
- * @desc:显示Drawer界面
1448
- * @author huangbo
1449
- * @date 2024年9月7日
1450
- **/
1451
- handlerSetDrawer(res) {
1452
- this.drawer.visible = !this.drawer.visible;
1453
- this.drawer.mounted = res.mounted;
1454
- this.drawer.url = res.url;
1455
- if (res.mounted === 'wujie') {
1456
- this.drawer.name = res.name || util.uuid();
1457
- }
1458
- },
1459
- /**
1460
- * @desc:关闭Drawer界面
1461
- * @author huangbo
1462
- * @date 2024年9月7日
1463
- **/
1464
- handleCloseDrawer() {
1465
- this.drawer = { visible: false };
1466
- },
1467
- /**
1468
- * @desc:菜单点击
1469
- * @author huangbo
1470
- * @date 2024年9月7日
1471
- **/
1472
- handlerClickMenu(res) {
1473
- util
1474
- .ajax({
1475
- url: recordUserApp,
1476
- params: {
1477
- userId: this.user.userId,
1478
- appId: res.id
1479
- }
1480
- })
1481
- .then(() => {})
1482
- .catch(() => {});
1483
- this.showMsg = false;
1484
- this.showSet = false;
1485
- let i = util.indexOfObj(this.tabs, res, 'id');
1486
- if (i == -1) {
1487
- let tab = this.setIframeType(res);
1488
- this.tabs.push(tab);
1489
- this.activeName = res.id;
1490
- } else {
1491
- let tab = this.tabs[i];
1492
- if (tab.method === 'iframe') {
1493
- this.activeName = res.id;
1494
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1495
- } else {
1496
- if (tab.method === 'wujie' && tab.appCode) {
1497
- window.document
1498
- .querySelector(`iframe[name=${tab.appCode}]`)
1499
- .contentWindow.location.reload(true);
1500
- }
1501
- if (tab.method === 'router') {
1502
- this.$set(this.tabs[i], 'keys', util.uuid());
1503
- }
1504
- this.activeName = res.id;
1505
- }
1506
- }
1507
- },
1508
-
1509
- /**
1510
- * @desc:用户详情请求成功
1511
- * @author huangbo
1512
- * @date 2024年9月7日
1513
- **/
1514
- handleSuccess(res) {
1515
- this.simpleUserInfo = res.simpleUserInfo;
1516
- },
1517
- /**
1518
- * @desc:修改用户配置
1519
- * @author huangbo
1520
- * @date 2024年9月7日
1521
- **/
1522
- handleChangeConfig(name, res) {
1523
- if (name == 'userHeadUrl') {
1524
- this.$set(this.userModel, 'userHeadUrl', res);
1525
- store.set('userModel', this.userModel);
1526
- let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1527
- sessionStorage.setItem(
1528
- 'mainConfig',
1529
- JSON.stringify({ ...mainConfig, userModel: this.userModel })
1530
- );
1531
- } else {
1532
- this.$set(this.userStyle, 'notify', res);
1533
- store.set('userStyle', this.userStyle);
1534
- let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1535
- localStorage.setItem(
1536
- 'mainConfig',
1537
- JSON.stringify({ ...mainConfig, userStyle: this.userStyle })
1538
- );
1539
- }
1540
- },
1541
- /**
1542
- * @desc:关闭webSocket
1543
- * @author huangbo
1544
- * @date 2024年9月7日
1545
- **/
1546
- handlerClose() {
1547
- if (this.webSocket) {
1548
- this.webSocket.destroy();
1549
- }
1550
- },
1551
- /**
1552
- * @desc:刷新选中iframe页签
1553
- * @author huangbo
1554
- * @date 2024年9月7日
1555
- **/
1556
- handleRefresh() {
1557
- let i = util.indexOfObj(this.tabs, this.activeName, 'id');
1558
- let tab = this.tabs[i];
1559
- if (tab.method === 'iframe') {
1560
- tab.url = util.handlerUrl(tab.url);
1561
- } else {
1562
- let tab = this.tabs[i];
1563
- if (tab.method === 'iframe') {
1564
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1565
- }
1566
- if (tab.method === 'wujie' && tab.appCode) {
1567
- window.document
1568
- .querySelector(`iframe[name=${tab.appCode}]`)
1569
- .contentWindow.location.reload(true);
1570
- }
1571
- if (tab.method === 'router') {
1572
- this.$set(this.tabs[i], 'keys', util.uuid());
1573
- }
1574
- }
1575
- },
1576
- /**
1577
- * @desc:删除iframe
1578
- * @author huangbo
1579
- * @date 2024年9月7日
1580
- **/
1581
- handleRemove(name) {
1582
- let len = this.tabs.length - 1;
1583
- let i = util.indexOfObj(this.tabs, name, 'id,code,appCode');
1584
- if (i > -1) {
1585
- this.tabs.splice(i, 1);
1586
- if (this.tabs.length == 0) {
1587
- this.activeName = '';
1588
- } else if (i == len) {
1589
- this.activeName = this.tabs[len - 1].id;
1590
- } else {
1591
- this.activeName = this.tabs[i].id;
1592
- }
1593
- }
1594
- },
1595
- /**
1596
- * @desc:tabs鼠标右键事件
1597
- * @author huangbo
1598
- * @date 2024年9月7日
1599
- **/
1600
- handleContextmenu(tabs, e) {
1601
- let disabled = {};
1602
- let index = parseInt(tabs.index, 10);
1603
- if (index == 0) {
1604
- disabled.left = true;
1605
- }
1606
- if (index == this.tabs.length - 1) {
1607
- disabled.right = true;
1608
- }
1609
- if (this.tabs.length == 1) {
1610
- disabled.other = true;
1611
- }
1612
- if (this.tabs[index].id != this.activeName) {
1613
- disabled.refresh = true;
1614
- }
1615
- this.isDisabled = disabled;
1616
- this.$refs.tabsHandler.$el.style.setProperty('left', `${e.x}px`);
1617
- this.$refs.tabsHandler.$el.style.setProperty('top', `${e.y}px`);
1618
- this.showTabsHandler = true;
1619
- this.pane = index;
1620
- window.addEventListener('click', this.closeTabsEvents);
1621
- },
1622
- /**
1623
- * @desc:tabs页签事件
1624
- * @author huangbo
1625
- * @date 2024年9月7日
1626
- **/
1627
- handleTabsEvents(num) {
1628
- if (this.pane !== null) {
1629
- this.tabs = events[num](this.tabs, this.pane, this);
1630
- }
1631
- this.showTabsHandler = false;
1632
- window.removeEventListener('click', this.closeTabsEvents);
1633
- },
1634
- //关闭页签事件面板
1635
- closeTabsEvents(e) {
1636
- if (
1637
- e.target.parentNode != this.$refs.tabsHandler.$el &&
1638
- e.target.parentNode.parentNode != this.$refs.tabsHandler.$el
1639
- ) {
1640
- this.showTabsHandler = false;
1641
- }
1642
- window.removeEventListener('click', this.closeTabsEvents);
1643
- },
1644
- /**
1645
- * @desc:handler工具栏点击事件
1646
- * @author huangbo
1647
- * @date 2024年9月7日
1648
- **/
1649
- handleClick(res) {
1650
- const { type, event, open, link } = res;
1651
- if (event) {
1652
- event();
1653
- } else if (open) {
1654
- util.win.open(open);
1655
- } else if (link) {
1656
- util.win.open(link, '_self');
1657
- } else {
1658
- switch (type) {
1659
- case 'quit':
1660
- this.handleQuit();
1661
- break;
1662
- case 'online':
1663
- this.showMsg = false;
1664
- this.showSet = false;
1665
- this.dialog = {
1666
- title: '查看在线人员',
1667
- show: true,
1668
- src: this.onlineUrl
1669
- };
1670
- break;
1671
- case 'notice':
1672
- this.showMsg = !this.showMsg;
1673
- this.showSet = false;
1674
- break;
1675
- case 'index':
1676
- util.win.open(this.doorIndex, '_self');
1677
- break;
1678
- case 'set':
1679
- this.showSet = !this.showSet;
1680
- this.showMsg = false;
1681
- break;
1682
- case 'home':
1683
- let i = util.indexOfObj(this.tabs, this.homePage.id, 'id');
1684
- if (i == -1) {
1685
- this.tabs.unshift(this.homePage);
1686
- } else {
1687
- let tab = this.tabs[i];
1688
- if (tab.method === 'iframe') {
1689
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1690
- }
1691
- if (tab.method === 'wujie' && tab.appCode) {
1692
- window.document
1693
- .querySelector(`iframe[name=${tab.appCode}]`)
1694
- .contentWindow.location.reload(true);
1695
- }
1696
- if (tab.method === 'router') {
1697
- this.$set(this.tabs[i], 'keys', util.uuid());
1698
- }
1699
- }
1700
- this.activeName = this.homePage.id;
1701
- this.showMsg = false;
1702
- this.showSet = false;
1703
- break;
1704
- case 'search':
1705
- if (res.url) {
1706
- this.handlerSetDrawer(res);
1707
- } else {
1708
- this.showSearch = true;
1709
- }
1710
- this.showMsg = false;
1711
- this.showSet = false;
1712
- break;
1713
- case 'goView':
1714
- util.win.open(res.path, '_blank');
1715
- break;
1716
- }
1717
- }
1718
- this.$emit('handler-click', res);
1719
- },
1720
- /**
1721
- * @desc:退出登录
1722
- * @author huangbo
1723
- * @date 2024年9月7日
1724
- **/
1725
- handleQuit() {
1726
- this.$confirm('确定退出吗?', '退出系统', {
1727
- confirmButtonText: '确定',
1728
- cancelButtonText: '取消',
1729
- type: 'warning'
1730
- })
1731
- .then(() => {
1732
- util
1733
- .ajax({ method: 'post', url: logout })
1734
- .then((res) => {
1735
- if (res.rCode == 0) {
1736
- util.removeStorage([
1737
- 'Authorization',
1738
- 'token',
1739
- 'ssId',
1740
- 'userId',
1741
- 'userName',
1742
- 'auth',
1743
- 'deviceUnique',
1744
- 'menus',
1745
- 'useCaseCodes',
1746
- 'mainConfig',
1747
- 'jump'
1748
- ]);
1749
- if (this.onQuit && typeof this.onQuit === 'function') {
1750
- this.onQuit();
1751
- } else {
1752
- try {
1753
- const loginPage =
1754
- util.getStorage('login') || util.getStorage('loginPage');
1755
- if (loginPage) {
1756
- let src;
1757
- if (!util.startWith(loginPage, ['http', '/'], true)) {
1758
- let pathname = util.win.top.location.pathname;
1759
- if (pathname !== '/') {
1760
- pathname = pathname.split('/');
1761
- pathname.splice(pathname.length - 1);
1762
- pathname = pathname.join('/');
1763
- src = pathname + '/' + loginPage.replace('./', '');
1764
- } else {
1765
- src = pathname + loginPage.replace('./', '');
1766
- }
1767
- } else {
1768
- src = loginPage;
1769
- }
1770
- util.win.top.location.href = src;
1771
- } else if (
1772
- util.win.top.location.href.indexOf('main.html') > -1
1773
- ) {
1774
- util.win.top.location.href = './login.html';
1775
- } else {
1776
- const hash = util.win.top.location.hash;
1777
- if (hash) {
1778
- const len = util.win.top.location.href.indexOf(hash);
1779
- util.win.top.location.href =
1780
- util.win.location.href.slice(0, len) + '#/login';
1781
- } else {
1782
- util.win.top.location.href = '/login.html';
1783
- }
1784
- }
1785
- } catch (error) {
1786
- util.win.postMessage({ type: 1 }, '*');
1787
- }
1788
- }
1789
- }
1790
- })
1791
- .catch((err) => {
1792
- if (err.message && err.message !== 'canceled') {
1793
- this.$message.error(err.message);
1794
- }
1795
- });
1796
- })
1797
- .catch((e) => {});
1798
- },
1799
- /**
1800
- * @desc:主题、消息回调
1801
- * @author huangbo
1802
- * @date 2024年9月7日
1803
- **/
1804
- handleChange(res) {
1805
- const { type, value } = res;
1806
- switch (type) {
1807
- case 'theme':
1808
- this.setTheme(value);
1809
- break;
1810
- case 'ignore':
1811
- this.notice = 0;
1812
- break;
1813
- }
1814
- },
1815
- /**
1816
- * @desc:菜单布局样式切换
1817
- * @author huangbo
1818
- * @date 2024年9月7日
1819
- **/
1820
- handleLayout(res, active) {
1821
- if (active) {
1822
- localStorage.setItem('layout', active);
1823
- }
1824
- this.$emit('chang-layout', res, active);
1825
- },
1826
- /**
1827
- * @desc:消息修改总数
1828
- * @author huangbo
1829
- * @date 2024年9月7日
1830
- **/
1831
- handleMenuTips(id, num) {
1832
- if (num) {
1833
- this.$set(this.menuTips, id, num);
1834
- } else {
1835
- let n = parseInt(this.menuTips[id], 10) - 1;
1836
- this.$set(this.menuTips, id, n);
1837
- }
1838
- },
1839
- /**
1840
- * @desc:处理即时消息
1841
- * @author huangbo
1842
- * @date 2024年9月7日
1843
- **/
1844
- handleOpened(res) {
1845
- if (res === undefined) {
1846
- this.sysMsg = [];
1847
- } else if (res == false && this.sysMsg.length) {
1848
- this.sysMsgOut = setTimeout(() => {
1849
- this.sysMsg = [];
1850
- }, 3000);
1851
- } else if (this.sysMsgOut) {
1852
- clearTimeout(this.sysMsgOut);
1853
- }
1854
- },
1855
- jumpMenu(res, close) {
1856
- let apps = res;
1857
- if (typeof res === 'string') {
1858
- apps = res.split(',');
1859
- }
1860
- let obj = this.getMenu(this.menus, apps[apps.length - 1]);
1861
- if (obj) {
1862
- let i = util.indexOfObj(this.tabs, obj, 'id,code,appCode');
1863
- let n = util.indexOfObj(this.tabs, this.activeName, 'id');
1864
- let old = this.activeName;
1865
- this.activeName = obj.id;
1866
- if (i == -1) {
1867
- let tab = this.setIframeType(obj);
1868
- this.tabs.splice(n + 1, 0, tab);
1869
- } else {
1870
- let tab = this.tabs[i];
1871
- if (tab.method === 'iframe') {
1872
- this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1873
- }
1874
- if (tab.method === 'wujie' && tab.appCode) {
1875
- window.document
1876
- .querySelector(`iframe[name=${tab.appCode}]`)
1877
- .contentWindow.location.reload(true);
1878
- }
1879
- if (tab.method === 'router') {
1880
- this.$set(this.tabs[i], 'keys', util.uuid());
1881
- }
1882
- }
1883
- if (close) {
1884
- if (close === old) {
1885
- this.tabs.splice(n, 0);
1886
- } else {
1887
- let d = util.indexOfObj(this.tabs, close, 'id,code,appCode');
1888
- if (d > -1) {
1889
- this.tabs.splice(d, 0);
1890
- }
1891
- }
1892
- }
1893
- } else {
1894
- this.$message.error('没有此菜单!');
1895
- }
1896
- },
1897
- //监听改变菜单
1898
- handleListener() {
1899
- util.win.addEventListener(
1900
- 'message',
1901
- (e) => {
1902
- var msg = e.data;
1903
- if (msg.key == 'jump_Menu') {
1904
- let res = msg.data1;
1905
- this.jumpMenu(res);
1906
- }
1907
- },
1908
- false
1909
- );
1910
- },
1911
- handleSelect(res, parent) {
1912
- this.showSearch = false;
1913
- if (parent.name === '应用') {
1914
- this.handlerClickApps(res);
1915
- }
1916
- if (parent.name === '菜单') {
1917
- this.handlerClickApp(res);
1918
- }
1919
- }
1920
- },
1921
- beforeDestroy() {
1922
- clearTimeout(this.timer);
1923
- this.timer = null;
1924
- if (this.webSocket) {
1925
- this.webSocket.destroy();
1926
- }
1927
- }
1928
- };
1929
- </script>
1930
-
1931
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <div class="es-main">
3
+ <div class="es-simplicity-side">
4
+ <img class="es-simplicity-logo" v-if="mainLogo" :src="mainLogo" />
5
+ <div
6
+ class="es-simplicity-org-name es-text-ellipsis-row2"
7
+ :title="simpleUserInfo.orgShortName || simpleUserInfo.orgName"
8
+ >
9
+ {{ simpleUserInfo.orgShortName || simpleUserInfo.orgName }}
10
+ </div>
11
+ <el-popover
12
+ class="es-simplicity-user-popover"
13
+ placement="right-start"
14
+ width="360"
15
+ trigger="click"
16
+ >
17
+ <!-- 用户信息 -->
18
+ <user
19
+ :user="user"
20
+ :notifyList="notifyList"
21
+ :notify="notify"
22
+ :contents="userInfoContents"
23
+ @success="handleSuccess"
24
+ @change="handleChangeConfig"
25
+ @close="handlerClose"
26
+ ></user>
27
+ <avatar slot="reference" :user="user" :size="56"> </avatar>
28
+ <!-- 用户信息 end -->
29
+ </el-popover>
30
+ <div class="es-simplicity-side-Application">
31
+ <!-- 常用应用 -->
32
+ <el-scrollbar>
33
+ <div
34
+ class="es-simplicity-side-app"
35
+ v-for="item in userApps"
36
+ :class="{ 'is-active': active == item.id }"
37
+ :key="item.id"
38
+ :title="item.text || item.name"
39
+ @click="handlerClickApp(item)"
40
+ >
41
+ <el-badge v-bind="getBadge(item)">
42
+ <es-icon
43
+ class="es-simplicity-side-app-icon"
44
+ :contents="item.icons || item.icon || menuIcon"
45
+ ></es-icon>
46
+ <div class="es-simplicity-side-app-text">
47
+ {{ item.text || item.name }}
48
+ </div>
49
+ </el-badge>
50
+ </div>
51
+ <div
52
+ class="es-simplicity-side-app"
53
+ @click="handlerClickApp()"
54
+ v-show="menus.length"
55
+ >
56
+ <es-icon
57
+ class="es-simplicity-side-app-icon"
58
+ contents="es-icon-omit"
59
+ ></es-icon>
60
+ <div class="es-simplicity-side-app-text">更多</div>
61
+ </div>
62
+ <div
63
+ class="es-simplicity-side-app"
64
+ v-for="(item, index) in newApps"
65
+ :class="{ 'is-active': active == item.id }"
66
+ :key="item.id"
67
+ :title="item.text || item.name"
68
+ @click.stop="handlerClickApp(item)"
69
+ >
70
+ <i
71
+ class="el-icon-circle-close"
72
+ @click.stop="handleDelete(index)"
73
+ ></i>
74
+ <el-badge v-bind="getBadge(item)">
75
+ <es-icon
76
+ class="es-simplicity-side-app-icon"
77
+ :contents="item.icons || item.icon || menuIcon"
78
+ ></es-icon>
79
+ <div class="es-simplicity-side-app-text">
80
+ {{ item.text || item.name }}
81
+ </div>
82
+ </el-badge>
83
+ </div>
84
+ </el-scrollbar>
85
+ <!-- 常用应用 end -->
86
+ </div>
87
+ <div
88
+ class="es-simplicity-side-app"
89
+ v-if="_aiConfig"
90
+ :style="_aibackground"
91
+ @click="handlerSetDrawer(_aiConfig)"
92
+ >
93
+ <es-icon
94
+ v-show="_aiConfig.icon"
95
+ class="es-simplicity-side-app-icon"
96
+ :contents="_aiConfig.icon"
97
+ ></es-icon>
98
+ <div class="es-simplicity-side-app-text" v-show="_aiConfig.text">
99
+ {{ _aiConfig.text }}
100
+ </div>
101
+ </div>
102
+ </div>
103
+ <div class="es-simplicity-main">
104
+ <!-- 应用 -->
105
+ <apps
106
+ :visible.sync="showApps"
107
+ :menu-icon="menuIcon"
108
+ :color="appColor"
109
+ :backgroundColor="appBackgroundColor"
110
+ :applications="applications"
111
+ :business="business"
112
+ :systems="systems"
113
+ :user="user"
114
+ @click="handlerClickApps"
115
+ ></apps>
116
+ <!-- 应用 end -->
117
+
118
+ <!-- AI -->
119
+ <el-drawer
120
+ class="es-simplicity-public-drawer"
121
+ direction="ltr"
122
+ modal-class="es-simplicity-apps-modal"
123
+ size="100%"
124
+ show-close
125
+ :modal-append-to-body="false"
126
+ :visible.sync="drawer.visible"
127
+ >
128
+ <!-- <i
129
+ class="es-icon-close es-simplicity-drawer-close"
130
+ @click="handleCloseDrawer"
131
+ ></i> -->
132
+ <template v-if="drawer.url">
133
+ <template v-if="isIE || drawer.method !== 'wujie'">
134
+ <iframe
135
+ frameborder="0"
136
+ width="100%"
137
+ height="100%"
138
+ :src="drawer.url"
139
+ ></iframe>
140
+ </template>
141
+ <template v-else>
142
+ <es-wujie
143
+ :host="host"
144
+ :show="true"
145
+ :props="wjProps"
146
+ :attrs="wjAttrs"
147
+ :name="drawer.name"
148
+ :url="drawer.url"
149
+ ></es-wujie>
150
+ </template>
151
+ </template>
152
+ </el-drawer>
153
+ <!-- AI end -->
154
+
155
+ <!-- 路由、iframe -->
156
+ <div class="es-simplicity-tabs-handler-mask" v-show="showTabsHandler">
157
+ <el-card class="es-simplicity-tabs-handler" ref="tabsHandler">
158
+ <div
159
+ class="es-simplicity-tabs-handler-item"
160
+ :class="{ 'is-disabled': isDisabled.refresh }"
161
+ @click="isDisabled.refresh ? '' : handleTabsEvents(0)"
162
+ >
163
+ 刷新
164
+ </div>
165
+ <div
166
+ class="es-simplicity-tabs-handler-item"
167
+ @click="handleTabsEvents(1)"
168
+ >
169
+ 关闭标签
170
+ </div>
171
+ <div
172
+ class="es-simplicity-tabs-handler-item"
173
+ :class="{ 'is-disabled': isDisabled.other }"
174
+ @click="isDisabled.other ? '' : handleTabsEvents(2)"
175
+ >
176
+ 关闭其他
177
+ </div>
178
+ <div
179
+ class="es-simplicity-tabs-handler-item"
180
+ :class="{ 'is-disabled': isDisabled.left }"
181
+ @click="isDisabled.left ? '' : handleTabsEvents(3)"
182
+ >
183
+ 关闭左侧
184
+ </div>
185
+ <div
186
+ class="es-simplicity-tabs-handler-item"
187
+ :class="{ 'is-disabled': isDisabled.right }"
188
+ @click="isDisabled.right ? '' : handleTabsEvents(4)"
189
+ >
190
+ 关闭右侧
191
+ </div>
192
+ </el-card>
193
+ </div>
194
+ <el-tabs
195
+ class="es-simplicity-iframe"
196
+ :class="{ 'is-open': showMenu, 'is-fold': fold }"
197
+ v-model="activeName"
198
+ closable
199
+ hide-bar
200
+ opacity
201
+ @tab-remove="handleRemove"
202
+ @tab-contextmenu="handleContextmenu"
203
+ >
204
+ <!-- 操作栏 -->
205
+ <handler
206
+ slot="append"
207
+ v-bind="handleConfig"
208
+ :data="handleData"
209
+ :hide="hide"
210
+ :online="userNums"
211
+ :notice-num="notice"
212
+ @click="handleClick"
213
+ ></handler>
214
+ <!-- 操作栏 end-->
215
+
216
+ <!-- 菜单 -->
217
+ <sub-menu
218
+ :mode="mode"
219
+ :visible.sync="showMenu"
220
+ :closed.sync="fold"
221
+ :size="menuWidth"
222
+ :title="title"
223
+ :color="menuColor"
224
+ :backgroundColor="menuBackgroundColor"
225
+ :menu-icon="menuIcon"
226
+ :active="subActive"
227
+ v-bind="subMenus"
228
+ @command="handlerClickMenu"
229
+ ></sub-menu>
230
+ <!-- 菜单 end -->
231
+ <el-tab-pane
232
+ v-for="item in tabs"
233
+ :key="item.id"
234
+ :label="item.text || item.name"
235
+ :name="item.id"
236
+ >
237
+ <router-page
238
+ v-if="item.method === 'router'"
239
+ v-bind="item"
240
+ :query="$parent.params"
241
+ ></router-page>
242
+ <iframe
243
+ v-else-if="isIE || item.method == 'iframe'"
244
+ :id="activeName == item.id ? iframeId : ''"
245
+ :name="activeName == item.id ? iframeId : ''"
246
+ frameborder="0"
247
+ width="100%"
248
+ height="100%"
249
+ :src="item.url"
250
+ ></iframe>
251
+ <es-wujie
252
+ v-else-if="item.method === 'wujie'"
253
+ :host="host"
254
+ :show="true"
255
+ :props="wjProps"
256
+ :attrs="wjAttrs"
257
+ :name="item.appCode"
258
+ :url="item.url"
259
+ ></es-wujie>
260
+ </el-tab-pane>
261
+ </el-tabs>
262
+ <!-- 路由、iframe end -->
263
+
264
+ <!-- 消息列表 -->
265
+ <message
266
+ v-if="showMsg"
267
+ ref="message"
268
+ :total.sync="notice"
269
+ :visible.sync="showMsg"
270
+ :winopen="winopen"
271
+ @ignore="handleChange"
272
+ @handle="handleMenuTips"
273
+ ></message>
274
+ <!-- 消息列表 end-->
275
+
276
+ <!-- 设置 -->
277
+ <settings
278
+ v-bind="$attrs"
279
+ layout-type="simplicity"
280
+ active="simplicity"
281
+ :theme="themeColor"
282
+ :predefine="themes"
283
+ :visible.sync="showSet"
284
+ @change="handleChange"
285
+ @layout="handleLayout"
286
+ ></settings>
287
+ <!-- 设置 end-->
288
+
289
+ <!-- 消息提醒 -->
290
+ <notice :data="sysMsg" :winopen="winopen" @opened="handleOpened"></notice>
291
+ <!-- 消息提醒 end -->
292
+
293
+ <es-dialog
294
+ class="es-public-search-dialog"
295
+ :visible.sync="showSearch"
296
+ size="lg"
297
+ >
298
+ <search
299
+ :apps="applications"
300
+ :menus="menus"
301
+ :menuIcon="menuIcon"
302
+ @select="handleSelect"
303
+ ></search>
304
+ </es-dialog>
305
+ <!-- 公用弹窗 -->
306
+ <es-dialog :title="dialog.title" :visible.sync="dialog.show" size="md">
307
+ <template v-if="dialog.title == '查看在线人员' && !dialog.src">
308
+ <online></online>
309
+ </template>
310
+ <iframe
311
+ v-else-if="dialog.show"
312
+ width="100%"
313
+ height="100%"
314
+ frameborder="0"
315
+ :src="dialog.src"
316
+ ></iframe>
317
+ </es-dialog>
318
+ <!-- 公用弹窗 end -->
319
+ </div>
320
+ </div>
321
+ </template>
322
+
323
+ <script>
324
+ import avatar from './avatar.vue';
325
+ import handler from './handler.vue';
326
+ import subMenu from './sub-menu.vue';
327
+ import apps from './apps.vue';
328
+ import user from './user.vue';
329
+ import message from './message.vue';
330
+ import notice from './notice.vue';
331
+ import settings from '../public/settings.vue';
332
+ import routerPage from './router-page.vue';
333
+ import online from '../public/online.vue';
334
+ import search from '../public/search.vue';
335
+ import {
336
+ wss,
337
+ logout,
338
+ topic,
339
+ getUserAppWithTag,
340
+ recordUserApp,
341
+ getComplexApplications,
342
+ getComplexApplicationsNew
343
+ } from 'eoss-ui/src/config/api.js';
344
+ import store from 'eoss-ui/src/utils/store';
345
+ import util from 'eoss-ui/src/utils/util';
346
+ const isIE = navigator.userAgent.indexOf('MSIE') != -1;
347
+ const systemMode = util.win.systemMode || 'default';
348
+ let events = [
349
+ (tabs, index, that) => {
350
+ let tab = tabs[index];
351
+
352
+ if (tab.method == 'iframe') {
353
+ tabs[index].url = util.handlerUrl(tab.url);
354
+ }
355
+ if (tab.method === 'wujie' && tab.appCode) {
356
+ window.document
357
+ .querySelector(`iframe[name=${tab.appCode}]`)
358
+ .contentWindow.location.reload(true);
359
+ }
360
+ if (tab.method === 'router') {
361
+ that.$set(tabs[index], 'keys', util.uuid());
362
+ }
363
+ return tabs;
364
+ },
365
+ (tabs, index, that) => {
366
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
367
+ if (tabs.length == 1) {
368
+ that.activeName = '';
369
+ } else if (i == index) {
370
+ if (index < tabs.length - 1) {
371
+ that.activeName = tabs[index + 1].id;
372
+ } else {
373
+ that.activeName = tabs[index - 1].id;
374
+ }
375
+ }
376
+ tabs.splice(index, 1);
377
+ return tabs;
378
+ },
379
+ (tabs, index, that) => {
380
+ let tab = tabs.slice(index, index + 1);
381
+ that.activeName = tab[0].id;
382
+ return tab;
383
+ },
384
+ (tabs, index, that) => {
385
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
386
+ if (i < index) {
387
+ that.activeName = tabs[index].id;
388
+ }
389
+ tabs.splice(0, index);
390
+ return tabs;
391
+ },
392
+ (tabs, index, that) => {
393
+ let i = util.indexOfObj(tabs, that.activeName, 'id');
394
+ if (i > index) {
395
+ that.activeName = tabs[index].id;
396
+ }
397
+ tabs.splice(index + 1, tabs.length - index);
398
+ return tabs;
399
+ }
400
+ ];
401
+ export default {
402
+ name: 'Simplicity',
403
+ provide() {
404
+ return {
405
+ esMain: this,
406
+ refresh: this.handleRefresh,
407
+ jumpMenu: this.jumpMenu
408
+ };
409
+ },
410
+ components: {
411
+ avatar,
412
+ handler,
413
+ subMenu,
414
+ apps,
415
+ user,
416
+ message,
417
+ notice,
418
+ settings,
419
+ routerPage,
420
+ online,
421
+ search
422
+ },
423
+ props: {
424
+ //模式
425
+ mode: {
426
+ type: String,
427
+ default: systemMode
428
+ },
429
+ sysCode: String,
430
+ appCode: String,
431
+ //logo
432
+ logo: String,
433
+ //菜单、应用默认图标
434
+ menuIcon: {
435
+ type: String,
436
+ default: 'es-icon-application'
437
+ },
438
+ //默认主题颜色
439
+ theme: {
440
+ type: String,
441
+ default: '#409eff'
442
+ },
443
+ //主题颜色选择颜色集合
444
+ themes: Array,
445
+ //操作栏配置
446
+ handleData: Array,
447
+ //操作栏单项配置
448
+ handleConfig: Object,
449
+ //需要隐藏的头部功能
450
+ hides: Object,
451
+ //菜单颜色
452
+ menuColor: [String, Array],
453
+ //菜单背景颜色
454
+ menuBackgroundColor: [String, Array],
455
+ //应用颜色
456
+ appColor: [String, Array],
457
+ //应用背景颜色
458
+ appBackgroundColor: [String, Array],
459
+ //默认头像
460
+ userHead: String,
461
+ //应用列表接口
462
+ appsUrl: {
463
+ type: String,
464
+ default: getUserAppWithTag
465
+ },
466
+ //是否启用子应用菜单接口
467
+ application: {
468
+ type: Boolean,
469
+ default: false
470
+ },
471
+ //菜单接口
472
+ menuUrl: String,
473
+ //远程请求菜单
474
+ remote: {
475
+ type: Boolean,
476
+ default: true
477
+ },
478
+ //websocket
479
+ socket: {
480
+ type: Boolean,
481
+ default: true
482
+ },
483
+ //人工智能配置
484
+ ai: Object,
485
+ //iframeId
486
+ iframeId: {
487
+ type: String,
488
+ default: 'stage'
489
+ },
490
+ //查看在线人数
491
+ onlineView: {
492
+ type: [String, Boolean],
493
+ default: true
494
+ },
495
+ //消息办理是否采用window.open的方式打开
496
+ winopen: {
497
+ type: Boolean,
498
+ default: true
499
+ },
500
+ //是否采用wujie微前端加载页面
501
+ loadWujie: {
502
+ type: Boolean,
503
+ default: true
504
+ },
505
+ //无界微前端Props属性
506
+ wjProps: Object,
507
+ //无界微前端Attrs属性
508
+ wjAttrs: Object,
509
+ //菜单宽度
510
+ menuWidth: {
511
+ type: Number,
512
+ default: 220
513
+ },
514
+ //路由方式
515
+ routeType: String,
516
+ host: {
517
+ type: String,
518
+ default() {
519
+ return sessionStorage.getItem('host') || '';
520
+ }
521
+ },
522
+ //切换旧版样式
523
+ oldVersion: Boolean
524
+ },
525
+ data() {
526
+ return {
527
+ //显示用户信息
528
+ showUser: false,
529
+ //主题色
530
+ themeColor: this.theme,
531
+ //是否ie浏览器
532
+ isIE: isIE,
533
+ //logo
534
+ mainLogo: this.logo,
535
+ //侧边用户应用
536
+ userApps: [],
537
+ //点击应用存侧边
538
+ newApps: [],
539
+ //所有菜单
540
+ menus: [],
541
+ //菜单名称
542
+ title: '',
543
+ //子菜单
544
+ subMenus: null,
545
+ //展示菜单导航
546
+ showMenu: false,
547
+ //子菜单选中
548
+ subActive: '',
549
+ //折叠菜单
550
+ fold: false,
551
+ //人工智能配置
552
+ aiConfig: null,
553
+ //公用窗口面板配置
554
+ drawer: {
555
+ visible: false
556
+ },
557
+ //所有应用
558
+ applications: [],
559
+ //业务系统
560
+ business: [],
561
+ //系统管理
562
+ systems: [],
563
+ //气泡数
564
+ menuTips: {},
565
+ //展示所有应用
566
+ showApps: false,
567
+ //用户信息
568
+ userModel: {},
569
+ //通知类型列表
570
+ notifyList: [],
571
+ //用户样式
572
+ userStyle: {},
573
+ //通知类型
574
+ notify: '',
575
+ //用户信息表单结构
576
+ userInfoContents: undefined,
577
+ //窗口页签
578
+ tabs: [],
579
+ //页签选中name
580
+ activeName: '',
581
+ //初始应用菜单页
582
+ initApps: null,
583
+ //首页地址
584
+ indexUrl: '',
585
+ //首页配置
586
+ homePage: {},
587
+ //门户跳转页地址
588
+ doorIndex: '',
589
+ //弹窗
590
+ dialog: {},
591
+ //在线人数
592
+ userNums: 1,
593
+ //消息列表展示状态
594
+ showMsg: false,
595
+ //搜索
596
+ showSearch: false,
597
+ //消息数
598
+ notice: 0,
599
+ //即时消息
600
+ sysMsg: [],
601
+ //定时关闭及时消息对象
602
+ sysMsgOut: null,
603
+ //额外信息数据
604
+ extraData: '',
605
+ //显示设置面板
606
+ showSet: false,
607
+ //窗口是否可选
608
+ isDisabled: {},
609
+ //显示页签操作
610
+ showTabsHandler: false,
611
+ //页签对象
612
+ pane: null,
613
+ //选中菜单
614
+ active: '',
615
+ //单位名称
616
+ simpleUserInfo: {},
617
+ topRightToolHide: '',
618
+ showOld: this.oldVersion
619
+ };
620
+ },
621
+ computed: {
622
+ //菜单接口
623
+ _menuUrl() {
624
+ if (this.menuUrl) {
625
+ return this.menuUrl;
626
+ }
627
+ if (this.application) {
628
+ return getComplexApplicationsNew;
629
+ }
630
+ return getComplexApplications;
631
+ },
632
+ //人工智能配置
633
+ _aiConfig() {
634
+ return this.aiConfig || this.ai
635
+ ? {
636
+ icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVAAAADwCAYAAABWgzyDAAAACXBIWXMAACxLAAAsSwGlPZapAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAH+ISURBVHgB7b15tG7ZVRf6W9+5VamQpHILgVAEqFs8EgQJqRJpQmOqFBCwIVHB5/NJKup7CgxNRQSef2hV6XC8MQRMouM9xYZU1DfoxARBQWxSUUlo1EqA0EPddIS01aVS3T3ffGvvb6+1f/O35trn3Oacc29lz3G+s/dezVxzzTXnb8219v72l7DSSidMZnb6yX28JJ/eZIYb8uemfH56azidz5H/kM/PJuBsvnibJdy7D7zpuqens1hppROkhJVWOgEaQHMLvGK7j1syQN5SgBLTsVxbLpSt1DKApibP8NbtFq958ircc/0KpiudAK0AutKxUgXOLW7HEGFiAsQCoHJdzms6fHoBXWxw95NP4q7rr1uBdKXjoxVAVzo22je7I0eUtxsB53jI0SWD53a62G6ntLlszVNwHcoOpynhzuc8O92FlVY6BloBdKUjp4yQZzLQvX6729ssILgDTvMAWQBUl/NUzwNnFL3mvdL0GG69/vo1Gl3paGmDlVY6Qsoo+bIMcvcO4FnB0caIMdVl+HyjqAIjOI/queV9wVkB1hzlntm/Gve+84P2Eqy00hHSCqArHRll8Lxjf4u7je6mV4BMu9O6FN/KvifkY+3e6HBjaQTWJCC7q3M6H17/rg/ZHVhppSOidQm/0pHQAJ4Z0O5sbghhAku0y3QL9jebJbzy0uhzAtScOd65H/dFgTtv+MR1X3SlS08rgK50yencubx0Tni9A74dqDkQ1D3NBlARAymV3T3e1OHFgJyXWrfd8EnpdVhppUtIK4CudElpuGGUl+33Dsv28RotqBXws8n+6t12ozvwQTRa0+cos41KzS/7MUelD2y2uPnG9cbSSpeQ1j3QlS4p7RveWB5T2u5uFu2Owf7ldDOpAt4WcDeT3I0jSh9g17Ztua01gDvvs25x+pzh9VhppUtIK4CudMlofz/ve+Y74Lx8Btp9yppeAE7SR5rWRgqKDnSpDi/hiXmqj0Ttkm769feuN5VWunS0LuFXuiT06KN25tTV+K0CWuMK2/xSnJfq0T4lL9Nd+rZZ/rubUG7/czodHpPiNKr7wNVP4MYbb0wPYKWVLpLWCHSlS0JXXY3hW0apLp1lP9N9qwguKnQfFzHykh1tJEptmKQ78IQ5sD392NV4BVZa6RLQGoGudNH0aL5xtDmH+1x0yBFmkOaizyAibe6q74DUSoTLeQ0PxNsGVO+Bp59bo9CVLp7WCHSli6cncct4pKjQrF2eG9fpgGdz86jUS7tvL9W77pS3NYlqgzIOUIHTH9ngdqy00kXSKay00kVSSnhFATbe8+TIc9wX5W8MwQPsdEhNFBpHreMjUMaVAyAuJFFsOb4YK610kbQu4Ve6KBpuHmEP9w3nsi850jaKRA3dh+ZLnSmv+8IRiSg9X/QfrGdZ9re47uZ1Gb/SRdC6hF/pomi/vAx5BqcKn1taV09AaiZRqclHluiJywF0swhobyxp2tZHnQEAry8bWemiaF3Cr3RRtNnDC+GjvBIx1iU5RYOJQQyQCDWKNKmt+lZ6Sqfz+l7RWj8RiALRXuxNWGmli6AVQFe6KMo3dkYQCpbl7dIbspROnaW459OmIcxLjreWIzmI9xmstNJF0AqgK10cTSDURIURAMIvtRFEmu4mkQWAaB4Ia7UCoNoO857+EQi/ECutdBG0AuhKF0UZhM50wbMUml784SLJKPKkaHIrUeRUdgesaOrXnwSBteCpe5/E7zRWWukiaAXQlS6aeDne/dmNMZGDxhg8+Xz8AtLuunyzKLmosgOWDjgnRtGzoiuArnSxtALoShdF5cUeNaq0/r7j9F5QG7/yCSk7AZ3jLTedesvy7nYBqC5aUF9ppYul9TGmlS6KMg6Nz1HKsp2xdBeZggCOgI5fc7fdBmXM8w4jzeBaX59XXkgCyMP+K610EbRGoCtdFA0AavSbRyh7ktMRlD4t8/0yHOjvV8KfL96YsmU+DcgOiL7BWay00kXQGoGudLH01maZTSDGL1Xm/F55Th+X/aDoFQFYmi/fAG1Qt4L5dgXQlS6O1gh0pYui/XN4R33dXCcy3F2g+ZmOgbpvVgLCvUvDcoRZ9lFDfmiu34aVVroIWgF0pYujlCNQeOBEZzkNKcfvCIWCpC0A6Hxtxs+Loo1ytxEoWxEd92KllS6C1iX8ShdFe/t4QxghogW0rSztS+Q6ULNMh+cJBMCaOWy3QLTPCbRgqr89nxt9E1Za6SJoBdCVLoquuy49kBHpHgVL3d9sluoMrOXX5JRHmsvqD8zBgrfcz1Gpe+5zS4BdXyyS925f9NnrL3SudHG0AuhKF00Z6O4ZjwtL6TGfLrc+kvQ/HleO9IueU32UduoveMKD63b+WZEImK2Abq7zGqy00kXSCqArXTR9dIvXZEB6oLnbDvjnO7f0WBNmUAMIRDXSpLIRf41cm3O4KHj3O/Q2vobvHqy00kXSCqArXTTdmJfxGZNejeCN89FSXtKTe4AebRTbRKfwS3v+XXjaKrAK3sC8/zlcbHD3revyfaVLQCuArnRJ6AnsotASFWoU2QPU5oaR9b+dBAiIFvblJLk9z1Qea+I6A+1vcRdWWukS0AqgK10SGqJQDFEoWmDs7ncCzd12BdxCGn1OxxTuuVK0y8v+Yf2er+9ao8+VLhWtv4m00iWld3zI7s3L5ReazfudekNpvI8jEeiYtBWQLOVLGa3Tj2LNvYhkFu/s7//sdCNWWukS0RqBrnRJafsEXpoPD07gZjUCBEWYAfCNd9yBdpk/g2K41NebSlN7/qdDdp8H8o2jW7HSSpeQVgBd6ZLSjdens3YOr6xL7Cm9d4OIl9wNsEKW9QZ/UwktCFfctHlfdFpnvXxduq90qWkF0JUuOWUQvXu4UbOVaPGgm0jRcdupg4gHarnEm1M56a7f/znpDVhppUtM6x7oSkdGv/5euzMD4B3lcaMUvbV+PFkEwyYCbfY9JY1pAM8Xf3a6EyutdAS0AuhKR0q/+k57iW3w2ry6Pt1dqnOkekC+AiqD8VR19xNMwyNVCbdn8HwdVlrpiGgF0JWOnH75vXbG9vFGG37BMwDJ6bLdH50yavkgOuW6A02/X/e2fMPoJeue50pHTSuArnRs9AvvsjsxLOmBxX1QffwJaMF1/KE4fh1epr3N7jnPL1+X7CsdE60AutKx0vsfNHvoUeCRx2LQjN7fWa+jNOyA83c9M3+eBXzitWm16ZWOjdYXKq90rDSA3XXPAJ71dODxJ4CHMpA+/iTabx1FUakA6Mc9bff5hAycmxU2VzoBWgF0pROhUxlIT10DPCN/zuUNy8cymD5+bgemT+TrJ/dnoBzAcZPLPy1b61X587SrgGufvoLmSidPK4CudOJ0ag94ZgbEZ2Klla4sWh+kX2mllVa6QFoBdKWVVlrpAmkF0JVWWmmlC6QVQFdaaaWVLpBWAF1ppZVWukBaAXSllVZa6QJpBdCVVlpppQukFUBXWmmllS6QVgBdaaWVVrpAWgF0pZVWWukCaQXQlVZaaaULpBVAV1pppZUukFYAXWmllVa6QFoBdKWVVlrpAmkF0JVWWmmlC6QVQFdaaaWVLpBWAF1ppZVWukBaAXSllVZa6QJpBdCVVlpppQukFUBXWmmllS6QVgBdaaWVVrpAWgF0pZVWWukCaQXQlVZaaaULpISVjo3M7PQjT+LMdoMzm3M4Y8MReLYBZ/JInE5bnN7HOKud0bopDdWn8Rr+W8nQRiifj9NZ5tEOeqK6nGZBGTie47nNMqokw38vc5rrhMaXBj1NeT0ZDE1DqdQ7gH+33Y4srlKkc+sPRVQWJGtQxgZ9VRm1TcMD+f8D2UDGY7aXB9IGZ7f7eMc24ewmf555dXorVjo2WgH0iGgAy4efwC17wAvz5U22+5wZ8hQXCjW4R45WzwkBIj5N3YXyqeQy6Ihz9zAkknfu/C6x9f+pzaFFo65xP9Hgc5ReTy2QEVjQC0uZ5gmlh5HBfGRpJ/+cT6C/oJ8GF7keCv4ruC6Qk3e+MEt428ZwNp+/NU/Wb3rmKbw1M34AK11yWgH0EtEImI/hJZs9vHC7xUuyQd8AF/uVchSpEWjFTHE+IzSDirU82cE3qQWYqM75tRqkHkb+oAxHkiOdr1z9diO5JEafCy9NUIeWo1SSa9b3gu5n0O0D67KWS27KIDoAquFHrtrirU9/ejqLlS6aVgC9CHr4UbslL6denI30lqzJW4a0yRm6sDIBpk1x2CKpY3GUhhSU03AntfKUsj0HjtqcrsctBC4HBEvmSN65/XkbAnN9XXprHxs+FvRf2ibZa5tUxsnBMrjoO+gL91nlY169a+WtedHYNPVKKG9NnTGnazfMO+GevAXwBgwR6rrsv2BaAfQ86dFH7cy5DV6WZ/LbsvLOHLjkKmB54bQYYfTaP0zwd748d5lwIRiVvSA5Oa8XiSnApQAED9NetAWAaUnuJgTEgHoQ/4umjq30AF7zF+sNCX15z+a91Dec2sdr1sj0/GgF0EPQsDx/6NEMmBt8Xb685TBV0NOt3/c6OF0Y8hGS1so9O0/q8OFyvWYb/gPPrURJKZbFAR6alXnMv61LISwWtxoOO3GE2xxAd6+11ClXaYEHIDqg8yXZDjkmc1mymQKQhxnvXpsDgOf6b7J9vO7ap6e7sdKBtALoAt2fo81TOdrMRnp7/pxmkGDLrBEAowPQIp3UG5MTVQkctKkLX48duXFwFSOSGXEdJ0Ovn6kjN2h129uqmNuei8tSk/m7JWnALvH8YxJ1BaBnKkuC7zdiaoaRJw/S56LugjbDmVFlZN7wfJvIucezwycoN0Sl9+xvcdd1a1TapRVAA8rAeUtWzB35c0vP5nt2ruV6dBhf6hp/0AQ7qIZ6NpexKaERrzhdEyaC2kcA7Nbp1xIKYZaTLhfrdHWaFgp6sPdAHYFVMPn1Jsdw/FLMm1YWbTd02R7NYkGD495u6VVbb8m8wkKLYwncnRccK5AGtAIo0XBTaJ+AkynyCZfGjkLgEPnU6AAb+OUXtQN0g4ZDA3fg85gwcrdknjI7ONm0ycfi9FEbCPhZ59pFUhu0N0wQ64ZBKdQ/0ItSSx9mPRCrKSjzkSIQ3+AisriNRb1ExDe8GhIdlW2RMg7afiTLUh6ER9D8kL4CqdAKoNgt1bMiXgve35wtrZ3BNdKbDPngOT/IX0LEw/DSclpeZGWQDyOwdAC/w7TJRbi9pfo9OZhP0K/oupSt0XLqyyN8RxA19OVYlKlTZpPQrg46vMJ+As1+c9QUYmxPEf8ewPeAVYZpBdKJPqYB9P58c2jzKO7IhnE7ZiMfwbDzrGbrtgU4zUdDVKLWd3uVQPyspliwwyhJi8CLI1/EffCgCjSOHT0GE0V7kGvmxVQiq6bv0hfX7lLIBCmDVn5tQ+SwqVyq5dDycbxmUZwUAdaFpPorfAL+vp70idvaSN8jXhrV9uyQbY9tLRrPUmcF0o9hAL3/MXtFvtt452aD06HhTf+21iopddKBrk+H1AOibtkC2B1aalCxp/LFouM7dWBB7u10vaG8Mfra9Pt0SBHPi1g2N/kAF/UYUBXSYjX3sL0AHfMPOuoepeL8yNbOx24WyjRicEIk95jedv7scKPpE575sXnX/mMOQN//Ebvpqj28KlvILbswBI3l840DCQhH6u0fFhqzOSIC4lUytQFOQwXMmV/bRiO58zPKdX2Qfil/BYFOfr2BoXd8E+I+Qspgrpa0T07fhvAOcwRgkazuXCp2Jw87nP5tnmeBwCZ0zFWHiP1vBNOtoZUzsBfA60XbdbKqTci18lMhI12SbGcf3+DW6z/GotGPqbcx5b3OO05tcK9tM3iqd5QPvBMUw63H4bOdipvUpcgLu6VTLcPn28KPDHBb8qVdcDsla1c21WbN4UylFPVhXr7WzNoWtcdp3M/pkJycRFvSoakQaS5jO6BMzGDskwcOp+KpfpWfP01f4PXGZaJ+geoxf1eXOs3L4pHF1o91wwPCGzR+/jOAp0F0rkfHt+iFbMT1vRMxAyIrpvFL3l5L+cRy8FS9yzxz9Rb3DT6GjyFK+Big9+abRHlwX5+t6Kbhutmjg/PvSgaEe3/NA8yYo9LCkLcFQl4L51pfl3GuzZLmgUfCTuofXYPFTbT9aIj3W33emGULfQTpTGkMmKaXikyVHCC5iIi7Qw24dGFeC8hpsA9b5PD1Tcaklad9GUkwqBb0uwG01JGVKyC2UZLHy1D2e+HPtZtQfdLYKv9GeOuIknI0mj42otGnPIDe/1F7xXaLO3NPT2uec+7JStTIAGfDMw2FNoiMCE25LhpQGny5xf1QHAxSukRrZCkTAQJ50clDh1dwHekRInMDMD2EuPS0NF/OZxf/NdyZM9DONEvnsWS74xaNrhE8AlXHIODL48OgeKDdFT+RSV7byYcHbA93/q5r0mvwFKanLIDel++wn34Ed2xTvsM+kdvbMZqB4aOuKR5JHQP0szPXAyKYDXU81Yt5xWXdNdCWrdhMk0FYIEiN9MFtUNWDZK7fPmKRYfT8KRDflSfuKg+3V8qH0VAfgOYoLHmnd9Gbs4AOL+IxV5BIUSYIsq2aHt39740tl5lDYN+P4abPluxqyW6afc6FCVH9ZsdkV2fqR/OimTQD/qs3j+c79dc9NV+n95QE0GHJfmofb0i7d3EeSHzTyId2zkiaTXe3bE7oztxBe923EsUVJkzhx1Hg5XIRo/lCXd5zfvgAd1OPQQCTbqI2VI/Cs8qYCMQ6jzpFk0GTj7Y8OmW4K1HUVnSNCYDqquSANvWIg1XhgI51W+ePBR1qG+WEJ56iW/g+L9qC8ncTjvn+qL4bG5gPZ594it5gSniK0QcetlvyQL4+n55eKscTbi/YuFhytiSeNO5r0gs5joIax0annyUqGsp1tiXEx3fVDjlpOFw1NFGt+FwrFzpjxYCx0OZh5EuI+yhFwutevTLBsT7P19YOKh+1iYPG+zzbuSD/kH5nOpvN/aWf9Myn1qvznlJ34T/4qL0sH96ICTzrXVrMxzEdrePWcvCgYPB2wHwAzxPCpy73SJZy3dzt7PC0qA0cUE/66tfSQTkbI7EKiBa0XeomSt9q2Y5uULpKju3KBPrWdOIzl9v6OmhFnhOt5W9UwOiYOs1afG1LAA7REdsaJp244iJnCmRu9Ex1OPp0uurw5z409lXKm9SV8Spp7rMVPsCZ3Ma97/+I3Y6nED1lItAPPWJ3ZIe+syYUZ2DwmBy4GHG7iSVM6VtJ5S648nQoLGmNMzaoffi8SLywvA+F+Cum9YYIL9lVhMWluOe92Pdyuknxlw7Y2UlOlty3O1dqvv2VVAaVTce3I2/TL62PhXws8Gmv2xeIHKADntx0G6Tas8pDuuKlfdhn4ieyHoZ8zd7LUYo8G9z5ic9Id+EpQIdTz2VOedl+Rz7cGWHiSAQKkR916wkV4232n5i/OJxGiSRTs+fnypGgjb0HvFPH+Xnfio7uERyudhDeALGfRZQW8nu4FN2db2Tkjli93p0ujXXncR7Aqaq2Mb7zdBOAT1MYHsylP7o32sXiuawDoWZsUizToZQtk7seqTzvtjhdq92Inus0YJHMJeEpAqJXPIBm8HyVAYvLgiXbknJujKO8sOIcCfgyJWI6oF7v2hl4MV70hdfoL2StAJA6FWa2/X6fJ7kVAEhs8eIDsMDJ473clfM8JmCq49tRUKKrJRBHIP+h7IzBdEnfJX+JadDu0nhFugY6+J9mWUvmQaQrvGqvvb4+BUD0kjjGSdEHH7LXbhNui9CCoxWzfmRTZ8epnosCDtJPBEYW2IsY7FiVBDnwRlIgSXNjKAIEoNsDBp5G/rTbHN8yOFkc/UQ3qmCt3zePL5VyJAPE+brdmGQMu0Z6aCYJNHqvU1zpW6gfEJoeMD02qxN4Wwzk2rEPbLTBTgG1WjmJzMKglmHbTIgj9WBS4b65SR2tfYxjOLfZWK5OeHmL5+5PeGZ6Oa5QOsh1L1t637RsDxExvoyJClVs6Myi3cdm+Bq+0TQvG5sl5mFk4qQyWg8+CfziI8C7Hgfe/pF8fS6fPwa887FdkeF6KFMN2TwI1PaNwBe+Tb55kCQ90fGgsqDyEBlqNzVPZEoEKiE/AgY3HsRD5Y1049qwdjJwIanRh9Oob6rXT7sWePbVwLXD52nA535ivs7H3/NJu/Mh7RCPnIX26CYizGku4mQ+OIRvKJ/oupkpZ9kaeRC3mSPRV+e786/EFUhXJIAO4JmGPc9DWgDNetUPoghRZ8eGj9TrGXvDH+3M3SsXMXrzgxkwP7o7vv2RHVjCxKnl6EANHjT1WJzdovSS1wGm0lYFjAAEFbgZKFNQhwFawchErnKsdTvtV383NBNINClE4NjIq6Cs5UQ2iEygugN92rMykGYw/ZJP2wHql9yA7nr8QNsJykPqqDMoz54/hG1rVIygnvX9K0eid37is6685fwVB6ADeNruq5luiSSTrN/rwpzh8ubkHR8p6/IoOaxHBSVKmH2ABK13wlNrtA/vA9/3AeDff3gXaT50DrMjFr7ikHrO0R/XTdug3lRenT4CvtoFbl9kiIDPgRzQBVjl7cCT2kuRXNL/Bng7+ukBnAKh4ys8eroI+6797OjgdI5IX5TB9Guel4+fDnz6s/s2yjho87eCKDn0Eycm8yp2DLl245+kH0n4RHVEYMcrg+hzrjAQvaIA9P0fGb/X/mrnPEkcIKIABXngQLx67/ls+Kk1LrUneSx/YTOA5Pd/CPiJ/HnLQ3P96sRTQQaCBqQAF3nWfgHNctpFS6XsAQBUeGqkxUctg146twGEYNNrL6zbq4cW7Lke7wNGfcIBOhiO20APJdKN+ueO3C7i8S3tfmkG0294QY5MM5h+2mm0yKd8d+nzHf3ou/38WBgangZ1hyoo+Z6ko/cOAa7H5Slvs4fb8nL+dbhC6IoB0Pffbzftb3BvuebxdhEcljvV2pfkm8yaCGfl2b/mNMcjEkLxdqg3LMt/4IMZOO/f7V02UQrEGTvOHDk8BDiqrZoAM9AAUOqVD2RQAI6iT6cboBvF9oCX+9oFeumD1oW0nRbADIYm4k4I2iB9sTy6XRHqIKjT659G0H/qBROY3iA2T79XBYhvTAUbm0dsm9H2gfoF5BzKB953prJuNd+U3+LW669L9+AKoCsCQN97v53JG81vzIo+M1wHE5cjl6ajy2nFQTpaSAvPDYIsoBgFvI03fDjtzTnK/O7fztHmgxMPBcyFYwMGgAcZdVpxVI54YC04RpFTb1mNSDagHyl22uT0bhtoQUb1AWmvaUd1gnkiGaPJMq5b0Svx7m0dKBCa9i+QD4YuIOsYubyJz+95DvB/fEEGU3rrA5l2uaTOAiHi9ZBgyqv96fnSdEVBZlNeAdOtEJLz2wey/m/OIHoWlzld9gB63/12+unDS5B34Dn/zvhulHiI3LcuCi0+vkQXBUh5aqzO2ptqQemYebjrqX6R6S0PA7ffB7z78Z0jbKl+BJQONKhsOa9L9hSD4FLkpCAVHZtoqdTtgNoSoER8GVDc8hUeKLitCGwc7/KP8wkUo4lJ+6rjALR6jAC9l68A6MDsEGOQgmsei0/NS/pv/f0ZSD8PcUDA7bX2ze8OdQjX+AD1sbLjOlwv8KPF0NP37a2PG2698TJ/i9NlD6C//aC9Kg0Pyk8jxuA4kD7K0eQDgrJwezCpgPJhSA0lkCOhBePhOADnGHE+7EFAHaNxVuY55VcRLC5X8wQgHMAJ2CiImfIHwqiyB54sZ7MfWBq2Fliidnog1ejuEH2xhSPXt0juqI80Xr3JqjeBuTyRo7dt4sDLWt0NN5pe9XX5ptMNaKjBuQN8R+sCXfNf9I2wbeleRPnO/Ks/+dmX9+NNlzWA/s6D+aaR4dWa7mY3xJ1wM52kT8DZUGMDPeYHGAvXHp7VfOXZHXCqs/ech50CUTqddwHE4vZ6+29NWXLgEIBUviCd+VskF3w/av7gXdsDdAGqN/FkwK5t92QxzyOSxaRMI0/QJnp6LeW2Xh6tG+o6GKOeDZT0b7gJ+Ksvnm42BdREiBodhpXg/IEvNbJ0r8A7BMoUXrX/c0Dyyk+5Lr0alyldtgA67HtmWxtuGp3uPU4BGRzNp+hz59eUGAGwm40ps0apApzNXUh4ef7J+4C/99vTY0iIAdI5DOW5MkVeBpHIySbgcbysHx1FUSS3HYEkuK7FMqv8IHncEn04IUApfXWszLcH6XOthxgsWbYm6kSfd9RWCtpmPYLkh7QdTpDo20QU5Trbo3J8ZD7XXgP8hS/KS/tb4d670DxmR98Oc6BXeAfgSvUhPU4A2omO7DfJV2p1tcbAnumBDS7f/dDLFkDfc7/dlw9nugUEzNwAS15NQ5DuaX4RghoH82ReQVtj1PkO4Gcenvc4o2U0O4o6M19HUSNJ3Dpqp011dgU+BSR0ZNK2dEsgLfBFxAtwS9KILyzmXfhH+mRATgfolHXigAQI9aSTzxKwurY6vHrRZlOO5Az5S52Bhij0X92Wj9f5cd1VkmvuV4AOvP1l5X22Pd9KB6QF+dFjifn0rZ96XboZlyFdlu8DzeB5Bwg8OSrhKNIBCUWU9T2RVm1td25kl8UIiDdKlIrxp2Xn9uDaswh8Cs9/+n7gD/3yvNeZzANfMY5qJCUiZsexFiwT9aPaLJ1rfQSOyCDVAzF2wmj/DdSWGZpNrAJUZiKvuaZqvWS+z4naNtWB6NFFxZA+kd5UB41TB7xq36zlXfpuLKfF7TgbCNpl0DW6Vtur0RnridqK9p6Lzt51P/BV/29eEb15lpPbsK1XRRFMxR2ut1sRHnB9N2ZCY1h5sHzT74hy/7eRngw3ZUy4E5chJVxmNCzd9w33jRc0QPSm9NHOqqMA4QspajaVEcCNHir25Qub+UHk2eCTK46H8zL9u98L/LP3t44WRSbhEhNxncUbCds4ErGFtlgPUZTm2h7+beemuUwFCJJJ5TWuo/0o55Jf9bvt6CZoq9d3bkNlWpRFrrWtMGoEBEHiY8Q/uoEGLOhOZNF+WFB24PEXXgTc8TXw1IsUle9SREn+NF5K2cmfxq3RKpu2sXA9vVbw5hyJXlZvtL/sAPTdHx6X7jdAbNLtl6AVvJahNAcs6eDOEt9qs25fxlrjGA7veSIb5m8Cb38Us5Vslx0FklflBJplfQVC0Lm1Ds08YC2AcH11sgj0+DosA7QAaq1D16W5yfiwTqzDT3QAAaAqK+ksad9EXwo+vDzmCQVyHU2EEUACvg6CceJxxwG6702gAMJtnUivPD7Dkv6H/jzw3NMxZlX9BuTykvRJ8tVXONmEb1poptoacM+nfXy6FZcRXVZL+Hd/0G7LhzOjrZcBTzNo8rKi2l9yCnY0lqGhsPkTrbpAy/bknHfiU8vaXPeXMmh+/a8Dv/hoa9RLy7YmwrHA2Wwu6wS22KmYR9LOAuFWQqkbXZdySeta2x6DZKho6vt4vYUD1RS0n7SvgAPu0r5TMdVNgQzadxP9gXSVqI2qV9WvUNGbTo6u/W1/DBj8qw5ITjeW5vWg9mFBn4dy785L+j/5T3dHFjEBXf8KuuJA26K6wPzTHrMcu8AEaPRG57H/A7e840OX10+CHBSUHRvd9147s3f1+HtGZ4IHc1nn88sSipF1elENWadZtPVqlImmbZfH5z/5APBX3wE8uA/nzOpcFgAFG7RaT7S852NveRct58KlbYcv89BthKhsky5lEtDdqgC3w7qRNAe+FutA5XbpWIjo0AIQt3mQXhfHsjOmvb6X9op8TVSMViepIw+3Wfmmlu/w+ry/9yfynv3nTOq3xvSrn7hIk8NUHjgE15rG/WWf4qLL/n//uYTPuFwesL9sItAMnnfkw5nhvESNxV/GiLBe+NC+lp8VbkbGU/J5RnP1JkbFSIK2HZ9i+D/4obxs/y3gof1dnnMIm+uDjKNGBSyvppkHAj2qozZ7fiY6Yb7ixGyjZt4JnQ/YHIVyut4AqmncL3gZChA0IIGWlwMK0lkpH22HMKg1upa8GuXTmCVrgUh1UfgyQLEs7sh6pbII0gwiK/rgybpgebhMOFalT/nzcF41/YV/mZfz/3OO+FJC9IifVYaJfMQacVt5xB6a8twPTuv7/3V72xErLgu6LCLQKfq8L8o76BsSB9XRyQzT9abzW+i1jKEb2f5QBs9vfSeaiLMYXLOskqMzcjJGV1acHlqnxwsBD3U6Kl+dZIFnuXb97fBTHi7q6rQBLhvw6smlMkQRbA94GPDcWHF7qQUeJrMFvofsz6HSE5qoPOqrA04Zm9BG6Kut3/X1eSvq92KRlnyC6UJ89nx5XfUEbrz++pN/NvSyiEA3V+1+TdMCAzVr4KRLRvU4rcyEJXky7MTR3WEH/Ic+vAPPwpyjl/Gf3BUv6erEbtVjnchE65AmXJvkRLWv4jjR7D8LQMcii1xzfmmH6zJQNryDEQzbMB+N9ZxfAaMZxwBQWKfJ/LkbQ8CBmIn+qlxb0Zd5+Xj7IokdcLQL6YdF11u0UbhclzaT5CXRLdc1ku2v/WC27f9B+WjPeZXmPjIG06NOxjyIjePda4vyDUH1J5+G1+IyoBOPQIfoMwPofeV6afYKHkUqqh0fgK9bKgd8t92w3HHXDoWwP/kQ8H/+FmYHhTdKjRrc0AdOU+UQQ+LoCYGBacTL5yqH4eBozAG6OKkCY9K+iBxRuxBA0fa5TKSzRl7hqddJ+FadUV23fRD0B0E+RH6VLelYUdvh+Ej9g46q5xp9qq0Bi5F3l3f+94+/Efiqz4Gn5Hl3iTcyJd2NFfFTnz4f/98OLxv5xJN97d2JR6DpKtrP2C2rK6keeSYzf12/PWT0cthSxjdI45die90a2eOU8e4n8iz9jjld99oavDQ0EUXbIbi9R46GsEWzf6ROAkpLUx0G9AoKaKMjcJskL4ODW37DRzccnSmQcbsKxtB+GFx0FUW27trQRMS1T9S+me+rRX00kUdkN5FXwau2TXW5rw2esJ1QX1V3LC/nJykDeD30zp2M1rHJKX2IRH/pvSIWt8Ud06bEfriQqbxzHSPe5+X/GVDvwAlTwgnSEH2mEn2yx7LlTWn0KENLJUPrE49mEpVynF++U17qvSuD5//6G8B7HieRxKmK43F+FJXVOgGPKleHT5XPfGdqJMJ965Sr6XJtQBO5ah7L30Sn1I4rS87C+uE6DWiqzMKbdQkEkSfx4yiS+5aCY08War72yY1lMLbcN+6v1uM2U2es1Bb0CJEZgf50HHq6GOhTrwO+7y/uvvpZebAf1kEkOSL/pHKH8uEL8H874Sj0ZCPQIfoUrTiHJOBTI260meZjMZpgNjN3IQ5YiL+uNkSjf/o3du/v5LZT4DzVCC2O6tx+2xZQcDUnJMIIJSnwGJolaIksq7hGAGO+Hw1QkE50qZkCuTT6Uz51KKk9k3NuywHQFi56UnkhfEs1F1kHZSIdFD1FslS9bn37LsIUPfDYc7SZgjEubRrV5bFyAMxH6YvpmLP+AD/REm+T9t+V9/n/4uuAB8uzzWliS+CZ2uaZjJkXubYit06OtWI1moP9/6Sj0BMD0CH6zEq4rQ420C4VbPpuLOAVnryxVR5iRMFyKdHsaW5TvNP+337PDJ4889f2AbeBX6hZQopDlHTe4E9ULpmAB2Y9lA8DfwQWJu1VR6H6zlFJdwrSFslL+TA0S/Qk/SqqV2Bmfbpr6nrlQ/pXkDHWocgLkVWjdtUz62k2GT/+VSfSF+6b0z/JnURntT9AGPVyWdUzF2a7a6LjhAZETSaFcvylbPev/smJ5a5fyUT/ZNPu0cFadqc4Y78oMhalNfzAij6U/98yYskJ0YkBqO3t7ryHefBOBHhjrorWaVD5WHw98U4MtrUMvYjkn30A+N4PTE0ZC4d46TcNMhulcadIDhctUL6L6CidAZiNt9lOEF4MIhxZue6YT2giPv7AyxMtJZPXcwMqFsjMe3QcNcE7puuLdeQHfB2gHYdGx4ZmJaJ61LQ6MZgA97atq9FtxK/0xYA26gQafTcrhI7eapFtZ6KhthjMX/tfs/3/Vyj+7YobVHUunWRIjQ0E14CIYji8/5/Cy3BCdGIAmjZ48XC0wCnnBK7g6zMI1aVF00hbp+E7XFnb9nDT6O//DpVXY275uDwGNusYtYsoiF/pm3N6a6M/dkwH4PBtllfqGfNCC2IaWTO5LQl4ENaoz6hfHA0l8yDIfUNQX2V1R/iIyclkrT4ZXHRVkIIxgflJoerWZNLkMkAc1VoMwj2dAZ32qf+qPzPfZmQXgNef1q8y0Pmr//3wfgq0vkm8pV+OddjfISU1aRfu/8Ov5NxnnVdHHy2dCID+5vvttqycGwLFzg5MBqOzDxuHiXE0IBSU4TYgd+1LmT/967sXISc1TnjgY6diwIAYdO8I6d9hgIWTXURmceSiQKMyV8c0X9alGXy0SGXUUaIlOssDbhdoovmk5cyxnyMoeD02e6ZUyU0slJ+EL/enmYy4W8LHZGwTjakThcZR7YS3ddiWua+LoIp2n7HU1zbceIImOHjew7eVvu374d94VmwjUeVZlgR4W7SpEZqod+9uIt0BoiPq2yH8/zSecTJR6IkAaO78y8zEz2zONKCNytI8iNEduSR7KgfRtDEzFt3KAP799+3esAQxqLEdMqAoTaO0cjQ+IQOPlnXNXpiJgavzgnTGzmFol3Ri2IaWD/OvRsv8qJ88cbDhj9db6r/0kYHGLAb5ctS+KNAoa+6MLmujqJLbc+MLwoeh7nbOc6Ckeo74oa9XtVcXJXJ7gbxgvW99/41llzaTysPpmGUf0n8630T93v/S6tkFKJgrm9pT21e71P6fK7wEJ0AJx0zDhm/e/7yPjSZJBOhmQsqH1+38k8Op1bvy4yiTC9WZdKJh6f5Hf236GY7GYrzx8czPxg1jIalPRgaNfnkGuBTIwMeDeDA4Mrg2TgSEfYXIytGQLchVJ4NyST814kDSfHqk315ExTKW18UyWHR1csC16xcQLtl1jCyQT9vQ8rrcV32rXtz46ZhJPaguENTt6FNlHmj4eZAf/VbguR8/1YEn9iObmCRikYilyn+p/D/t4zNuPOavdx57BLpNuF0jNIiBGGXK18f4xs9unMvywdpJ1fED3PKjXsMP1mvyvudDT6J1JPP11VCLQA2CGzyYBIbO/N3yjdtEIBOIL8sh7bpzqmOiH0jb0ZJxrLtw3ZQ377AcCSXWBfWfAQELvAu4cLS2tF2hOuCoyIHnpB+OLI3GNwJajkQLTwhP9n4+sh+E4Ai4bRTVZwrSWdelL1xH9cn9Zv8ofXkoL+W//fvQbPtA5C3gWf0EcDbgJmOIjtgeL8D/txvchmOm41/CJ3xdOS02Pa6MTOxbB4fQxtgZrJuemjrw19NA1ZtIP/0R4Ic/TGzLgBqL72XUiAeB4+jyyzkC1UnWdovBgTN6YGkQBurg0q6BQFv6R4brQZPSIsBioCmyV2BBC0zuiJk/t52YjwV91PqlPF9TnxDIXXw/Wcvb6Zl1SnUj3Tv9ku6g1/DAVrZADppQ1KZSp+0mGpW6CNrRcfqZvJT/6d9sn5OuLHRcEpzunQ9Qk5fK/zO9DMdMxwqg973bbsr9PTOcj/1O3ig4kmKjnAbHWJliy47czAdxHjQDVZ9v+/Z3eGNPgWEzcGikUHlTfRdxAeHySZeDCkoaqamDatSouuNyUdQAQBSF1kCDPjdjYB40nUNC+FH5XnSkS31nJ4E+HQiD6gJN1FX4V53Dg03lCc+zRu3WOrLKznYSRYmsN5Dsge3POoVMKEA8ocBHeIDXU5Jx5CCgiSjp85qfmNONx5u6wHKPp9w3Lnvp/f/MfR+wW3CMdKwAuj2FW2CBEc57IBbMOHNKCgx8+mxJ6Zzn2incAmMZIs9h/9NMohapx3wT8eDIRaO1Copi8BqFsQFpW8q3AdlEIMttoyWXRt+5b4DKEC7zDooK2TkbnfG4wLflG/EyVIcyfw7Kc3qydnIy1g98OxrJReNex0/LkX7c2E0sFMh47FT3KfoAzZZEgyCkA0Obr0BedRv0TVckPAY/8+v585ux3qa2vXnRXfkqJ9nEpfb/c+cyxhwjHS+AAl/n9G3wM1Wxk+mlAtMnOWOm/RVS/Hxko0LrBzNKoc5kw/EfvNcDmHMOMRYXVYoxJDFgx6Jj8AzEsDY6Ih3NPMU5lDdHP4VP7VP5OQ26S65AxaDAy352QAZHXSrz771HwAzr9w0ig+uX1HegA2BxS4HSLBhXHqwmDWjGCKzb8kligmQbBjSRX+0XpYso3lbMmzDbmeqNbbLoxODlIXhyjYY2NfH4jv9vrlP5lWvSkUlfOcDh60vp/1n/L8Yx0rEB6PR1q1uccREZvXXa5HV0OuBG6QAaA9fB0rLVNqbyP/yhHH0+idl4ABepGF0nMSg3U2O2AgZbXpazDOrQzZIrKif5bOQO0KlYUscgntESMFo6u0jUvHMkKasRYXU+LodZnmhbAtbqgnWQgvGsjkVycD/MZDxEHxqdmujVRI5IXqPfeoLYhk6uPElH8ieRu8pD9eoYWDyxzJ2Z9AZfx6jvzE/7z318z4d2+6GhDczNdc+lmdLGpfL/W47zofrji0ATXlgMVGd/U+OAKI3U6Z7ZLHzKTJSobJmpRAy1wSFiuPsDQASeLnqz1pBq1wInaACH5NWode4c3AyufKMIix1XjdhFlujIT7IUvhplqQJdJIvZwd3WgaEBywrwqhNQH4O2efLS7ZUk9UD1tP9A4ORGH3iZlKeLykROYzkBB0xO5yayqJ7ZjoBmwtbx4jK1TciwmdimteCpKx4EfWW5/v6PA9JEROZA2I7H/5+85vieCT2FY6InE17CDu6MCnAvS60GzMuhUjbRaUIzc9bTSamjQSTPd9xNmc5/Jt95/+WPekdgB3DtAWEEBC5PfajOLeWANoJqlp7wgGnCs/aN2rg2j+afOQN8/nXApzx99xkyHs7R9a8+BLzxd4B78uc9H/WyV4Cha6js5vXi6mgfiBeivlkLGqwLBDZi8Po06bvqpE6EgUzcvhvLws+C/nO9wlC2QJ55Tdb/5wO/79Oy7q/NnykOeugx4Nfel/X/a1n/+fPuB2ZZIX1yfejYWhQNp055HUuzWK/cN53E3CQxlf/Z4Y583g/9os/ETPTb8JOBJED8ORjbJo/L4wL833ATjokSjol+7Xfs3qFj40BNHdffeK+DCRrUJHlFuRs67zU6M2f/c+399XcC//rD3rlrJgKgFGcrDHXPqHEASY/aQuDsEGcCOct2Oj43A+XfekF23I9H0HWfNtCPvgv4R7+agfQRyuv0F4GsKUjv1YOJAygIAC7SboBN25G2o4i0tqdjQ3VU7lrf0IAQyxWNy3MzWN71tcAXfHprs1VnNBj/5ueBf/hfgN9+YObJuuC+uPE3D4jo6ALwMqKnJ9Kpq9/Rr/rpS78Q+L//t9j/XHnWiR2L/599/vXpRhwDHQuADnsST1yD+51xT8CWQLMUR40IlCfHcTbaemWCBqjyg/CZToava/6BX+obTmhAJs42RSJsLK4P5tMhvA+KxjSSYmfa2C7i/EvP20WfrJwmWhLlPZz7/g9/BfiXv9m2W8kEjOCNGJGeitFb7JRhHwO9V9GtrwsGHogejc5DHiwLjykQbsEgkHPIHyLOb/qy3Td1Kr8k5UT/w+lHclT6D9+U9f8zolfSSVemYvciI0dkzlbR2mGjQxn/cIWFmYbra/PE/Z//JvCsa+a+ke9pFRyn/1/1GK678caj/+njY9kDPXdqF1LrPgdswoLZYZqxdHshVGBIKw/0bvkHvsrPApARl0+pVxj97MPkXGJItRgZVGN8Y+NUbnJut69ks2wlH9QmO3cU/fIShXlu8r9vysun7/gc4NlX7fpbjGo4bhLqT9SOESsdB3rW1cC3f152/s9C3VhyOmD5MNWVPmg/aVxDJ4b0pfJA4BzW6txEV8YycVs0Dswf8PKzbUUrDR4T3hoY28o6++YvBf6vr8j6v2ZOr3rmMRD9D59nZfD5jq/O+n/xrpGttfaVgGZyHU+3CCddBk8zr0sFVgRHtmtjvoALQkqx4dtJ//pnKXOKKKeBTFrhOP3/iauP53GmYwHQ7SbffReDLLOU0Z6J0Ve1eFBKeZc3GaJTNiYeoDaIDN4AXv9h73AbKl/2+UIQANyysLfM50hndCji46JDak+BnI8VWLK3/ZkzCd/0fO+ww/kGJDdap67OPX2+5fcAf3bYx5oe2Es0Thw9qlwajZS6Ck4MWEUngSONj1TxhBIBh+6lur1CAgwZdg+aks78EcjME95mkn/Q1Z/9fQnf/GWTHKSMBjAxg2b5FN0Ped9ya9b/F2M0/DL+NVI1kQ2IwSjNMlYbgdchj6WOj+rAOYln72xroP/0C2iCFJANVVXb8fp/Nqdj2Qc9FgC1Xmdok9kpG25QrCRWgNm6OvyzVLMdKD9penhofriBJHWdgTnwMvgoKHBmblf31sYZE94hMY00gxODGDtE5ZkLP/dp2fGe30Y15bwY1xgBTSOs6aA63/I5Cc8dlmH7Nju9yK/gWj78hiJ1kupImIkdm/tmkOtAv0Y8Kz9qq+iToy4GIQeiNKYMlkl4FrnGIkNfM3g+99nAN3856RK7Yzkv41HPgXZCK2OQD998axp5jpPYZN+ufQv6CrJR+v0u0zzSjQV6hfbf4FdYLHdwPdxMGl55B99U99rREfp/1u9TB0Az3TD+l0HlZYup1ufjbjyTOOdMaemanZ3rDst3dVYEx7Femq9TJDNdO2ch44yIl4VgZ1dHr/3IFnfO8C2ftVu2s8NukjgpyzBdb9CWGT7Dcv7vfBF2A1J+kpT668jaNsA8I2fnfkGuyXm57EZsJfRKk7ZLNnXBgWISXaMFFFcXkEh0V/Fbvmy3bC+0IUVsSMY6PtGHgPXZeTn/d/74jr9rE0E/A/2ayKm+xJF6kjrFxphXkdmCj9KQ9vqfI91JIeuN49H7/wtxDHQ8EWja3X2vA2GtPwA0AIl8i5ytABTZcuW1NTRgWY2BgKbk/acH0ThvdaZJqGJc/GNiReAoImWDt8A4XTvsCGJYSdLL0naQY4g+X3pDqn3aJKqT5kgo8XEDv4RMfo90OP+i5yQ8O6PWLsqCiwZZ/+WaI+dmohCHbZbakl7KcwS7ZZvArCsFAY4yGdz5RRy1zJZ0BTTOazImCvhD+qc+y/CSFyavR4i+gzHQ8zJ25fyLPiPr/2r+wvfcJstU5SFKalPSB9cNQ7uqARajTkaoSIT/+As+SQMWSzS2wHH5/5njeKD+yAH07e+2m3TArXOOoi///Jg1daenON3eE1rqOchAP/cwOdL0KY7ngJUbLukg8EBrAOp4oPYLkNR8EKD4ZGfc4+ZQjj6/4npyQKBdwhOf1PlA6pTrb/zdGRjObcc9Vo2uWSe1z2LcJuVM6hvJxWCV+AgCV6OJCl6vWsdIJtsGuhQUYN6JeOpENh93G3R/8PmpG8lrGqht1fsGaPZJv/HLMu/hjsi0CnCAw7YlY1H0yHboJhNDsxLSlZT5rrujEqcP/H/lPbOaojIn5f8fvQpncMR05AC6v8WZagSAA7E6u8z58+Ni83epkxQf/iV22sbAQOAmeUP6sHx/cHphMjsSAkeFGG1NhzdOXnbVCABzebcUxNwWO6qZL8sONO6PPbnFH/yU3Vv6eB/T7b1N3h3dhefy7Lil/hd+cnbgfW5Y+gefBrTAZ+KktQ7QRHbqwKB+cz0j3Zq3lwZUGEScPrexjXCfODrjsSlePRjzV352qnrkvczFiBNUBvNYjccNXBQ6o8duG6OZYEj20C5J/6o3dw4/QUTgn4idThLc3LAHOrxkhMeFJzUdL5WP8i+t/2fswRHTkQPoqU3uhKGZRswlTHoxb8c1lLfpJjE7Z6IBkZHlgSnp7Cy/8mgrJwQQSv1oaVOcK+hH49Awx95FBw0gG5WZrndONDgvxujwsz8ebVTJztpxiAZoKb8cP/WZGKPcASjKd7pN+mwiX00fPrz0V6cuDmwekCPQUjBjPuz01fl57AxhVFgBUeqaeZBgWSe724HaUD5Hh5/1yTPPEok2Tz4wiAZldG90M6UNb3tPZR+aux2MQ1L5zedrP5zOZBypenOd0FIKyv7KbzdpxkKbZlrD4pL7PzZPAQDNdEPpIy8V2MfgHz3i359OHMaTMut55au82XiIhuth+V7OQXeRIyuqslP5aNnnlk0GBziwFtiW5HPAgUnGDGybJy3vk6XKiPfQ1HkhR3ZeB6jk7M+9NkegwxJ+fx6EBLgfa+vtd1ZAon5wRKBOZKI/BUu2l0RjUIGCylagANoJyloAMemD28uWdlDGfLvTy+mnp/mOe0LziFIScNQyoEmMJ7ShnU/9+Ly6yLPQ8JmN3NuM6jicZIrebJaFFV/ymBdIx2KSyt71r3x+7jegEeFOtC35kOF4/b/cvD5Cqt+Ff+29dvraJ/CK3PAt+fKWUeCEt2YFvOYbXpTuxgVS5nEGu73xVEeIwoKxnzySlFejR/5+bcmeHt2gQXDPhblnxIzK5uMvPwqEMzFZjjNCcjQnd2lXjga0e4Dwzs3dbNKp7pA3PDQ/OC/ObV3dcl7UxzeUDIGDJLjlWwUnFmZo49Qe0l6+3JCOpF3noIFBs3w6sSQpZ9J3V6fwtRZEYUE50l+dVHTcAjkaIGJZpgojiKI1VaYNsSgrgipLGR8ah82UXve1cxu2t+f6oHplWRn4Q/sr/RRd17GHtxU91t+aoj5G5X5VItAq4qTAE/H/hAu+iXRYPBwB9PveYmeuehxvzI2fYSZZ6TdlQV77r37a7sjBz61/+kXn/4NNeR/itCXUl6GOaVNeMbI5Zp/SyeFqBYObgZNarwKmpk8KHn4s7j2Pe8NmMGAnc86FwHF6ZQwNmSG8eQS06ZxWo9793SNMm9QaMKlo54xoQbaeJ5In+fzxe3X7002kYZrfpBk8yVGdrNbmR2AGC/oF7+ScXtJM2uBoTMfKgSAQvqEKHbmKvEl4lol20Mn4EbtT+1VgGk4aUAWNA4RsO+neUJ6fG+pvzdud0w/7h7U2rX6n9sxyRzalrmZB+vDb8cM3k4avtNa8mcGJ+H8SPDssnQ8ejmN7VcIbsdzYmaHMgMo4T8o2fDpaplrgSAavZCt7IFvnrzu+8iZ1/mA3+zh+U1371UcFPG1mygOnzqjLVxdFFWc2X7dGr7yfGBh1kdPkvOSP31LZTlEoZofcUJnxOs13dwFA78zrIzQbcu66j7rPa6i5T1VN1C+TcwBNZGlAs1/n9Ez84fqMBjQLsZ55sjATGQEPCJpOY8fy1X7UMjudlG8Llc8Gc10ne9Ex/DOipQ7vQZcyNS+3sclM+VtxDBzOjooetqJH6qebMAxhMKD6VTK5dhMEXQ9RKJed9Gkn6P8XFIGeDx5ufvAtdhsOh9RnnvkYbsf5ku06wT9EFZSpo+gUVTaOgxHmSIpnn5Jm26CNzO9X+FVu9FxgtIwrDsQDzvyMnW9uoxnt0oUk2ewEtV9GADLll2/AoERABQjLke7kgqNKKseeE/IoND0HWsvCg02CP4KaLQ7AZTW6jpb9oP4mSQN8fQhQWKRzQwvu5vvIkyi3WevDt1ONIKHZZw73QEnn5ekIV2czgat8U6w80GhmPkpnvVJ/zFr9sMg8QUDUwGlJ8lhlSdK5Pl+/+0MEZHMAM1Y/If8/bwA9Xzw8lQfxFTgkpQt4Xf4QgZZ9HqORqqF7qsbK34vdmaoJMxrROqsm1K+yueVfquwdYA1LeJ6JU+Csupxr9jMFBFhOQ+v4EUB3l6wlH2gi2bSdgRHSbmRkkx5mvZdydJ34moBiiIQqIALhBKP9rZMNfBk3KZHul0CAndeBZGrHRGVw/VeeC/rXsSp83bixQXV07pxexqj2J5EcyZcp/lG+e699aKJzHROxTx36qEnOj7qiXRa1jTREoCkqMFU8Af8/bzpfPBz2QM/nO6O34DwpBUv4gVwILy8VGAOtGhpIPaBZ8tUMuAFP7IglfVzCTwnquCW9vPSjAQegOpk6Ijsf90+NnnlFy9PIIYowo5Iiy+frwLmTnDe6CzyofN+4ArC1wJiCvrL8Ojk0E4sFjkljUSN8kp9lifaxdWvE6ZP4WtAmn9dJFAzgk5FuECjRdc1PdAFogPOpDNux0wfZn1GB3gSXrG3CDnHNR/TFC4F0eB7UmHFgB5B+Han/X9hzoOeFh0f+RnrtaIoUUsaejMCkjvV4Wx3MeqePDYzHYDg+RA/QAz7TDY5pQ+cfCfR4K38zz2tRF/UfvDWrZcM7a1gkSFxyQhMdQMqqY9dmCPS619zniU8972wpMMhEy32nvwBwirM1eu7IMZZNJKdD6fl8k+b+pzTdACIQ7SIXo5TNL58x7VdP15IfNQUvqms6oa3X2J4Qd/2370cD6KblLZTjyPz/qOl4ftKDRtHkeqBt8NU7rd5cy8haML5uAKeTh/fhHRGtU0EG0i2FDI0zMv9wSwBoI1jA9cG4PVC60Ys1igNyB6PzksQ6T/B3NTv1mmgSBDaGcMkbTSyqVy6v0R3XUWDWo+4LwmLQb/oiRqRyufFl2UGAbzOIVibKtJxSlLrR8r16ScDaxEZtNr9aroxJIlmBGLzQYjVjNmZ1hHUikVmW93zY13e+d0L+f9R0LADqjJOmuvEyjZ/d2NNIkr4TA5UaAISvLhdKG4XBGIECzVKbZeQ2+LqxNLSAi85RbGbmay1YA63zYO5i7WcUXTI1Rpl8+4jSSabxTucGTYQYRXG6Vwf4stxslVfH1VpgQ1DegRoQ6hKBXFomoeXRRDsy/oltd2oktEUg1Gs0BnVbhe3FPAuedHu2Fu15SlOOuJzhYPPgsWNXburMvl2H6qT8/6jp6Jfw5o8NAO2ud7aYmvKJIq4mKEiJwvZAcQpAA/329AxoHVBrZe3dOYa15dg4tL6hBcQeX+dAXM6czfm7vETqqwfmqfdIm1C5xXF5MNweaaAb3Z9jfgXgIlCF8CvtRunVwei6cTyRo6pCeVKfSr4DpdTqNDUnAVHe9KC3axNybWiBlfvYTAZAE1kuYTnQNwOgBVHlaZI3/EyJqxe93PyY/f+o6dh+lXMgHbSabrPyOLIaDWhbK/EkXIw8lfpsNBAe3A7E2aOZPTJaBOVqXwzhno/ua0aAaVzW0IAsxFmqozlFeHA9kMgLxuopLsL9iGRhuVl3Gh0oaNWlqIk4Jn1ikKXyuocajZFzXNG/BXUaoOWxIlnCqD9CLJEHU10FpVKviUIBZ8eRPdT+HUAsFvugVk1BeeURTRyFz3ATaVyOl/FLLQ/geP3/qOl4biJJh5yhJPDdyXE+KeeJZ5qi9+kOnamSxHNNrqvhqzOJQXb34oDGaPUmUuTobsqEB0xAynPYIe3WyzQ7splPOwxFgBnVZZBy4xXozU0o5gzcU6eO22Mt+dR+DzyqnCXNBIwjuaV9N/EZ2uhXxoLz63nZ7xQbr4BLY9Udp+T7j60HFYh8bHfaZjlXsk7ZXhnXDyy3w0DapJ2k/x8xHX0Eqg4HGTwCB/6mXJld3DnvlaB1UNOR4zbpu7NpwbGdzIWd+TZctGUCkAIkkLIMLL2tAAWCyj9/9hLJtZE+kMGwQTuLRseurD1v+m9xuXqqfRcdaJQaiNYAb9L6CPTN/bJ43ADEWyxiKxFYObCNIkbtBJVz/UhxH6Po1UjmOjlL3yyu2mWr14XX+FXRoBzQB84ef2Zs4jchn2Py/6Oi44tAh+O0Z6FLGdaoc7i2XNJZzels4kPGNXNmgwfc/lgCutEjTPqgYAg0+4Rq5OXcdcXmtl2agFCS8kBbL06gZO4oeYozZAFXUwO0tg73gUHJ6WRKTAj6xvqyFuCiySnB63skeo0ejwnXqX0jOXUsZ9Sa+qGghRYIu8ileVKuWWKmmX/58N5yY2uIAc+ND1owjMRVILaAJ3+fH8LTEFMz/ifj/0dKxxOBpvoyhFTOB6rPyxXlGdwjIkb1bVZYHYTCx9Xx/JJazPD76Q89SQoHmtke6qB0jPKdQauzCwsYwr1Qnb1HfpMD6XOQPcfVZU2yoBxFrTxxsKAOrM07roveMOvbpG+9OgyinNZEh6J7C0BU00v9xAJSnWa7Rtrm8S2OWkDU1Sknql91Vx18LSvXpT2bnn4weHvjX3VdolJPRaxiJLiJhfMKWGpEug14WsCfn3mteSfp/0dMRw+gc6dqxwttxaDHU7GQNH+hK/EdO3Xy5qu25p28GM0zs3U8pHlUvgE1ldHadlj2hE7+5IjlO8JNFAWEUWmhargLJhFFNQdRxI8joLoPV2QEnZT+br1DsbxAix/RvjNPRtUfBDSXxsiAcBvFASE8KHF73C8+r7Kps2I3lk59kb4VzXplldeEZKnYtsWAFeE4Ommsi1IGJF5Js4BHkq4gkONTrvPtl0In6f9HTcf2GBMs6LiWhf8WR0mD+WBKjaMAS3F0BrLefglHGogcmq4dP6C75CN5G4fnulrOCACc/MyfAesgZzyEl/F+XhRWdPdpzfdDwUsjNwUsdPix7M12iujE6VF1Bd9HbquxPaOuy7hUSt6WOAJt9iF7M9/SdZRd2t/O4BkBZTR8EUVACPTNJjKfpfbK9bOmXyq1SJcn5P9HTcf2Vc7I57njpcPb2Wl2upM3spjw5YYEA0LD+pSrgfdOP+mhy8ZqvAJ47MARuDLx3eOk11Q3AgiVh9txjluOZDTdSCgFaQCab9No/tD04L30IH1aAD/nUObU2A6aiZFzflQWoi/zbZqMkSsT6NSonWg7xaVTaDOOp+i2jgUbXIcqyAZlTXkDbuwj0ECQ1ivT2EjAI3XKh4AlPAZ61tNrXi2iMkDbOGL/P2o6nm8i6UgNnS0K8W+WZsXPiiPlcVKAM46L25+b6PqrPDDCWkefBZjTe/t4HMEYEEaPoHb0JkADzCrL1HYpF/0Gi0tL1FbHWSNPYmOuAJfQj+AJcJwzGaVZnK4TRMMruK5iG9yYKXhWHTP46JhQugHNpMhjFfUnLSEM6bZG+aB6iMs6GTqeb500fopKqwdNueuo2chkxBVDMWsEKlkn6v9HTMcBoGez4ZwZz6IOsSbSZEfFedE6R6EtV080NqQ8fV5s3AM9hXYZyrKZGJPKTMBWLwNH7AGuAd0lZbRP1xixWI9+M8lYd4nqJ18G3E6KMXbLgCP6qf0EvBfCn5uAVs2yto983d1GsQV5IOBpLV/lxxG88mT7Y30XnRVb6+1Ll+/Dl/wt22RTmM5L5E/AsYTZFqRFYBiJyWkKTnrktiJ63qfAgRfbYbfy0fr/AzhiOrY90PDRhaBsHUBxQB7Ixk9tukuYgnbgHeezni7tB+DmZDEaX2ncegBDjuuWjtQHsBMR35JXDd7mdlNxRvPgx8zdc4rqqOLwrn3M+qt9C7zHRCcMVgxURmkMVqC+q46b5baUF3G9U2nZaJwMTaSnAMk2CBrHQjXaS+guuZ2hEgptaGyqPCnowyTXtpzzeKMPmCYicDpT6pRTniZ1tC6XHehZ10AnqepSJ+T/Vz6AYurEVpxgoGaJU9JbHrt7ElReB68kmlRSELn+ae3g1HoWO34S3hXYgGbDvJan+pEzc3qzt2fShvJL6EYwZUYez8nqyx6dLs25bu2IBf2zFlQiYKwew2UZANQhuO/mwZedsfIJeOpNh6b9Iqu55PEF1dDoJehrnRQn3am6qpo3aJerhzhPfG3BedCeHnvltEnrlC3lojo90vaff31YZKQT8v+nQARKs4AFU2G0P9LcHOHvwRan8F/v2vECOUtyMtST530ctQPvWCWdwbCJbCSNjxVoBRCd3AUklK/5clyPf3snRaECfFoop0Q/SbyqzNwajdV6QBzJmBi+eeBToAsnDhJRQbUCooAhj6mWDY9o23T6MZkoKc+tNAQ1kmNe7XW2QUMf8UjvTgEdFLOFYw8sU5CvprMAXA2loG7h97zrpS9yfgL+/5QA0HekaAQ7hYf/Zv6mJkcO5TEHM48TpUx95tzoPYyz0vGsvelO/OO+Wb1DXnhwfXdeAI3yjByxcXA+Z+eUIwME38QolJoTZ2ieDrqm9MahjOSaZHEKZwMXnWhE6HTA10bdM3Ew0ZHaAgMelzdxXtWvG19Ki+Qay5rXxygH6SuKOoudclqIcIkOyWeXbvAD7Jyu1HMpLVMnKbTAGYFrxANBmeuv292FX2yYG+kzv2T+n/39QRwxHcc3kcZZYAmMXFRC9jQpwfuNOFStj9Yo6JGInf1P10MU+t7p1Vu6rCuUOg4KBUziocDbXZrDA1M5anRUwYic3O2ByqwNVQK0MfSVRjwYEKKbYY51B9CSjJN19BlNJgzC4Q035SVdKl4U3iQUuXVs3OQl9SoASURZLjcceUqlFIvRyMQTgA5lVFeHU+st1eE8xXfNq33vtDsu362166qmE/D/fIf/LI6YNjhiyrZ8NhpkpuIgRgk2VbDpV3ZJwfPR5rKcbgH/2n6++H3XCjDp4MrRuL2SZZgfMSoyTwWbJSd8vbHMdq5TPmFZ6sRw/e4Pb0cHLT+FO3z2NvN5ovR6nXaRUr3eUDk6PvSoeeCg9is/kw+lcf9N0kp/WI/sVDpGDozpw3lsA1X/8G25ceNyNE4M7pymE+FA7/7Q1ults5l/Iho9/cPrsf6MsZR9+FELAa+IvjQvQtrQa5OjllPT53yuC8Sy/N4bl30SOAH/T7gPR0xHDqDZucdOVCXtemfOqaYRic6LIktZPo7lSkMmDsmWwMrPdT6T9kG5fhIAMEp3kZChWeaNYtNgJnFKXt5HQF3TTfpOOhnoXROAMvCV+g1oJgG+NJ/D0PB5+7v3ocSGymlG8nNUoN3TJbc+6uUiQeq3qU6kvUjvVTCLARHUlgNheHtJ5vXGnXr3B7cNMBrrHa1edVyK7gE/Vm8/uz+PaYd64Agv5iwTQnNb5Ks8DlPmeRSB8ouiq8/i+P0/f96BI6YjB9Dcj3dodFX2OKqTJA8SJiNsYuiT8Vt52armu3OTwcufz88R6LV75HzspCDjK3UROLDkc/1E7VenxawDYx6SHkZ4te2EN//Gk3MEQU66iUATaKPOhCaCLXV+/Oef8M7IeiE9MXjZtgV/lr30iRWpYAbRLwTguDykvN6t720puH4A7QRJfWx4Y+bxU7/0ZAOOmwAwdXxSoO9G///9CWcb8F1uzhMde2W0HJ8jtSAb8U0dfoWeeQ1FoJMA3I+T8v9zT4Ul/FV5CT/0aEtOQAqy4oTGzlUyAT9rTafb3Sc1j+vA1+2dD5/PfAbqQPM+ZLgnR0Cme6MMHtGHgZvBR0GHhWyWM8W48uef3PPoDgDhHRPoAOcSqMrnJ+59HOX2ZuEaghBaYHFORw7E2xnlNJxMzOtXgbCJVqm+0znJybpnQHbjTTrXzm1lnIarf/zvHg2jSgUnnaDA5RGA6aD/n30cFdWQQn1pd8V0ajvo5IF4OTuTulpW+XEfBvAEWjuudEL+/6XPT2/FEdORA+jNN6YHckfPjspJ1Q6LNhL5ahuiC9lkVYkSbBoc0/pGrAjIyueWj9+VdXuYxLfkNUDHZafRZHCtbVWBvfNC8qIlbMMnTVyGr1Z81PCWX32idUr+bDqgicDhJzm+/789hnd+uNx9SRXoGXxYTpdHOlZvc0Ao+lQ+PD5l8PSRlghYGbgcX8x8HBCjlZO3A0o7c3upjsGDeZ/yzb/0RBxV6oRF55syLlK2qPsH7sn6/+DOmMzmyYsdVEGar5kMMUXpSY5laBg4EzyQK68Xfw7cJM++WMses/9nxkcOngMdOYAOlDs8dsYBkBqwWALNWOPrBKxsJgPtTGfzABo1agvvA/zaT4BfWiIAjAIC03UUBbn2ASdXElkVfNw5BGi1jeFxmUFJewl/+XsfxMMZSDcg52RnNoQRZuT0w02QhzKv7/qRh2HT3RArUZAYtO4HNtsfAkJNNMl65fKaDl8mkY6dTrkM50NAEwSa5uVix9P+Ftl2oJ5G/Q+6+Sv/z07/DjyLPhdAtawaQHlD+YceMXznDz68M3TQIKF9TVvVl6ipkIIsgvpcTlUJqW8L9QvddGbKIzuYrs0B6TH6f45q34FjoGFM7zlsYcOFofq5fbytdozAggevziLwBjzau7zOquQVRkaJJs5MgOTGbPhO/M3XzrIkaZ95MpC5JSm1keTIA+ycFM7vK+DslIAmYtzJn3LWZgS47d4e3nl/drjXP+SjmOlfb0npPsk7/XdlXu/8cLb2jKbbtJlBVPpU+sGgyHfcFTBZN/XGnLXpdaBJQVqHy3I5BnCWBVpfxpQnAQZnyFjv7C5VcDNk/X9gALyHGoAcaGkvusxLexyJ5uN3/kDW//u3GKbEeVpMDiNYNDGvWd7gvPiZk0P4RTyM6llQvpzffOPuPaDq3+TmTt7j8n/bXHAEes9hCw54uMkNvunQFQyvwQVQ2ps74yKEXnkeRSrbLPGA3dtc/KDN5+YGLqkxvPh3zeVcRfN1Xdsi/0F3j+u+Kjk7LxcZmEr7ZaOHX+Yxglr2vO2p3ed7/sNH8V0//KBzxE0Kop6EeFk5fb7rhx7C9/zEIxmYs/Oe2tu1Mw2A66v0hYHSUdnY33pwtA5osf7LeRJQTDIOtQwELOHbqPxcZ3yfeLx4TDW63oFn1lHafb7nxz6age9BDhbb77rDA2UZI5S0XPa7Mnj+43+b9Z+dxIZPbmML9wY3RwqMtY1J9aTmqtMeaCrAW1DHpE0Ir6+9Wdowz0dt5Lj8H+cBhEzni4ebU4/h1cCh7lad/YYXpbtxAfT4Xu6MgIy1wtTjtigpifJK4USKTK1DMHOZzVy5r/3E3TeTeMRTx4k0CuX84uigtAIwPODVUE0c3FpAKnnjcVg6TgA6gJxdtYftVRv83X/9MP7G6+7PS/BtHPHoOTn7w7nO37j7fvzdH35o5Dfw3Q4R6Ka8Big54CnysO4dyAgAqc4T2rxyzecMcEl4uzRIHvM2AV8aX7Y7BedSt5SdQWE32+zAc28EuyFS/84fyPr/Z/ePutwkNJPZhpApyU+pPPRI1v/3Zv1nAN1ib+K7mSavedQUKPWo8i9FmIYYBJf4Kx/NG28gmfg128Xu2o7b/685dWER6Pni4ealt6YHnjTcekCls1OZC6JbhxtJmx1/c4bpHc9kpPg6UZIDGgUdtIPklEv0jKuAL//4nX+U6bsawHR0+57woFmcTGdvUF0GjvLYRSlfgZMqFpBo7xQPAJrG6HP/qlMZQHefIXr8g9/6XvzAGz+yGH3y+Vve/hhuzXW+58c/MoLn/qnMa/zsjcv4EoFGN5HcY0tAEwk6sI10QDznJTKBHmLHbaIM84CgvGf0Fma2+22humUj8rAsfjLeLeH3M9Dtp6yrzakRSL/nxx7BH7j9vfj+//wRH+GDwHQDt0J48y8+hj/wyqz/H/vIBJynxk8FUaRGB419HUBRuQg8Vd8W1ImAeqAh+vzk06Qr4sPHoTv1/Z92LP7/1uHmNS6AzhcPnV5+8C12Wx7kV+TTm6ake4aQ9iPX4NUvvzld1Bfz3/zr9qrcs9unS2MrcaCTCJxUiVS+GHoKfmulsjO45RRfFx7/M/fqL/8CDWwABJo+M4R3bHHg6uART5tBtGQ7ECrAVOoPv/m6nz9P7OdZ8hz2HnsCm48+mY9PYpPTNnmj+dM/YQ9f+4Ufh6/5oo/D5954NZ79jF3Y8673ncM73n8Ob377o/ieH30o30nOLIetgKtPYf/qq7D/tKtw7pqrMiAPn73dzZKUusvg8oPdbmy2Xi9G/XaABt83x8O8g9WIE+349PSYqKyL9OF5QeXj9qiNGVR3dzE2233sbc/l4xP5+OTuY/s5L+v/k7L+s+6/On9e8Ble/+/M+v+pX8z6/zdZ/x/FFG1m/aerdp+93XGMRrGb8Wo/0JlUAmI3sODa9Zeuz6eNUucf/Lnp+c8yNsRg/lF3RMIcqf/n07tf9Pz0clwkHQYPE46JfurX7Lbc2GvHC1KmqaKm0SyKqQzKKJdLUS5Tk9erO6X/5Z8H7n0QzRK0AgboOjjq3WnrpCuQpuCaAcuB6LinmBOezC72ZAbMxwbwzED6aD4+8SRSTks5L223EwiYN0jswqGyj2qnBvA8NYLn/gSk4/bA3u4mhvbZ9Un7u9AX3ZusYNzpt9MTWtBzfE1AleohyFNQ5YkOUld57Nq0Ub8b24HoDjx3IJpj011eNZpJ66z/ISdtxhuCJeocQXMvH3HVGN1a2uk/BSItgaOK3gNJLOQzXz0qfeb1GaW+CSFp0DKZXij8kfh/DiS/5LPSG3AMdCyPMQ30xFV4Q93fmDq/7Rj+QFt52wrka8I95YV51smfHOPP3YDqLM3d4iktUb5+Cl5xRMOgYPAgzIBT8hLVLRnc3m6vp9xI2ttFj087hXNPz9Hj067GNgPhNl/b1ad2N5rG/dLpONTJe6Y7oMz5Vw91dp/xOm8FjGU28w2M2p/po3u+9WPUR4OP4gj0+Fg7DikHD8Q8Fm7vcyv14dtKKoOhiW4T6570nhb4wtIEgHu7pfxmB3zn0tXjcQeIOxDcTjebttOd9eF6fwLN7SbrffpsRx6ndk8/CHiayBiRipuwDKyaxsDJ1wnhENXjn/riPn+jcSuZ5fo4/D+vho7lGdCBjuU3kQYa9kH/26/ZPdkQbxmu1SjKtRtUA4ftqZ6k2CCAhdmTZiydjW9+9u5Fy8MbmhjolFxEyHKTc7OjamSlwO0AmMq5CInbTTvj2w6baadOod7YGPYtn9hgc2oflpfyaX93C788OGfTxtwIknt7OwAe9lCv3tvtfY4gu1cjBad/yERCcvaOFZS4H6QL5hfpENROEr01daR9BhLYgl57fQHc9oRrp/LcPc40fHN90P0mb/Cfyh+blvKG+RGEnfzlGVK+CbXbQx1AddgkNdtD+f20YqsKYo1/dPL4WPskZbFQtseznA/7nl99E7qg3DCBb1PliNob0y7A/7Nr3POiz05ncUx0bAA6ULape2wA0GKcfv9iF7IT0PH5qFgK+0NrSuSkUVkZUOb9158P/JWfR3VS5+wEiKU8p1XABPxSEXBLTogDz4LAOTmk7ZK+ezfk4LT5fC+Nfdxgd3NpWH5vxmV8Xt7vD0t5q99FLHtqBSjtqiHanIB0uMOxt0GZ8B1YUV/RAyvz3egBk3NSg4+0SUfMh/m5/UBJY72qvNFes/JWcK+TiPRxdzrpKU17lSgPv292S/i0j33bojw1uhNiuhoj0716HCLZ3U2j3ZMPqkM1ERK/DRDkHJIe1dc8rW9Be8Pnz90aC6K6YoZRlHkU/p+H4EdwjHSsAJo796byQ1uTUac0KyK5wZgcq6Q1jmJVobtBAJobL64sZl5WzmmAbs6z6k3X5tt3D4gNlAHsAEiCOK6WDYAEaMGx1HOODalbBUvTN5N2S+403HDYbMclexqiyn2rTyaX30EYIqARLIdoZ4/ON1NYy1GPgJWRfFEUZ5IHqlu7QLxZfwp0mtcs+0WfDb9ybh6kJ61VFi7ipb5w/SJXK+/0voCi/3HDLkeie9sMnnvYTODJ9rgdLXT3hMMImjatHGa4bgBLsMH1AZ18LYNOeo9nY9PwWFWiz1rWfOFah3wrBcIdlf9v9i/s+c8LpYRjpv/yK3ZfbvSMJKsNRCk7RaYYYwZa2lhWnmpkQ9177883lO5tHS9yJseTjYfKRM6XOvV0uV/BhoynyJK4/oReQ8Q5REDY353v0lAbLHfW67IfuwgW0912hy7A4k2bKJpw/ZY+jwGaoZ2EhG/UR3aYqHykO0gaTwa9vjWOG8jBvMqPy9WbRWMhjjxLeuny/FXQstc5VqEvLWhQJV2q/M4nrQeESkvtJzr/By+fv7rZZPYQvcNvMTkqeID/Z62e/dLfnW7EMdKx3UQqlBVwd5TMTllvVKijpurjbXlr6+mx8gE9rDulDec35dn15us8rzJSYSQiPLgs31wqTpq0f7Xzvq3Ctxf9cnSVptB6/Brm3rSnOd4Yumq8yTQ8M7o/PJ6U08eH5femO+2bXeRUrZDfiEP94Q9HLKkOhPSb5Kzy2czblTHpM2iYSA6jdiqIsZwkF+vTASHLAISTYfn2lJGOG93TZZo6aHUveq/ua27z3XUbbhDVR5VO1W8bocSoAp6lD6z2RB9uX8tH5RhhAixq2um1X9r82hx53nQD+RgFLIa4YeengF9RkHiXwv/z8B3r8n2gYwfQc1u8joGtfMr1SDIAZoQd8lIBVSRkYB0lMsBdMLYbkDTz+uufBTzzqsDJqC2OptRIjcqqQ8+jDwccpYyrJw7PANMsq0u/pifmx6Xh3m6fsz6atLdxD8lzv6BybhFGeCZ1UqAPUNkaLUo7CmK2VM6kHcDtL3O5cjTNK/0D2Qjp1rhdajMcS6CJ+GbgmqLL6Q68Td8wqml1ce8ra8QHtGnaHoJrk3TrlLdGbnTBtByfcQ1w2y2eQRSoGFrbxM5vZ9uQcb9U/n/Oxm8RHSsdO4DeurtDdk8EcEW5OqvVY/B2JQbEJtHXLXxNB45nt0++ZvdYU1MG3sE5iuL3Gapj6g0pFzmRgxaeDAQJaCLS+sA6ydJEAXw+tVcjbvOAIQbaRmYCLND+cJs281AAgsjTVCYeKfhStwPZjnxGckY65qiy9oF05/ZhiXdjdFPa1jcByPmWjoYYFNUPNIIMVAQEfCD1gDaaLHkMnEC/f8zz6794/tZRr20nl7ev1Mgcjf1cvl6747L/33PrMd59L3TsADpQ7uzuIdcE77xAONPqDNvMdBhvULlrAhCPbe3zZY75cPiTn7a7qRSVM2nfAY+2L06vzl/qJ3LwxoGNnIIdn/iXsgxaUD7w4FySq0MZ4gkDHng4neu5G0ZRWWsnk5G2Xh/R3mWNOBOlc1+slZfBz0Q/Ve4qLJwduAkNXldMDEZsw0Bsx7ZQ14SHLs0RtBWV1TZ7daXLYV9KmQE4X37LLqnafdF/KavjL2mQtopQl8r/c/T5OpwAJZwAvfFeO733NNyXO366kSRQemOhB5136rpvIE1t1Uup/zuPAX/+Z4FHnoQDrAhIovxq1IYmAlMe7ODgevAy6VI5SdlGHsBFjQ4Qqb8NcLFeVA4TpzEPUgxcjV6oTM2fQjnui7bJUbjK0C2r+rDY2Vnv2qfCVqMxJnWgXvkIZLVOxFvrR3L1yiAoG7XXA66Bhp/r+Kd/aQeiMDTf4gsr9Rlb+R9+WxA40Ic7Sjn74s9ON+IE6EQi0FtvTg/km8WvqbqaFFFnFilfZ6lZeXUmBNrZjnlw+pacrRk883WHpfzLb5zT2ck0cij5DIwaBem+Z0kzrksdMGqnOjnVrweSj69B/bRAXhdF2JzplrEkH/exApLN5aKoFCq71HF6o3oWtNXYBOUx4HFarWs+r+pwCx95b9FE0tGxkYOoB4R8tIX6yjsdkM92YtIG5ztbRR+MmfdAL3sx8JxnY7dNBf/tIYNnWLdsMJdhXmDVd+obcCH+fw9OiE4EQKeW7x4ORRFOaV6RVgxku539nIq6vU22BDZ8ZzDmIyJdEpQ6fyIv5f/Ep3unrsy2BAg9TyMnBnxZ3tMzqlMdgtuKeAPtklXarfuoZNwKZrx14JXa9tmEd9UfWuepcrFoIieDOIMbjw1PIAr03Fikgyo/Avnn5J0uSW4GvIQWADXf5BOBqElbXBZ0HvFOUg8LvK3T9lJ/tUyhP/nFu49WMKln5n1J+ULzrVOfEtlMDvR/4C6cEJ0YgJabSTrarMzhvHwjcRzgNKfrYFn5FsPWDxJHhNtynWgmBfxMWBnuDrfdCDzvWXB3gNVhjNph0NL2uUHnsAwMW7SAHhie8xhIuqGN9OAdULchGEwT8XH9MrT7vsSby6RADnUS3hdVQG8i6uA4DWXY5wiIXXRmUq83rvI5TIRJXWwAEUF9CN/eOaR+QgvyPbKgfVsoMyzZc/RZixiNTSms54aZgeNdIky+5kb50s7T/xPuPombR4VOLgLFOLXcVYzZDQ7IkQE3e7noEXAD4JQPP8ByNE1noOPI6RmngL/9wryMuWZ28t6HZ+KBGEwTBBidoOJsFoNBvTY0WwEgnkb9V+Dm+gyOpf0G2IEmQuC+8LiwznUJr3ubFvTfXdPR7d0GuisyIciLItdkHvRL8ab/ch7lGWTsgrql3FJ+STOpY0E7UeQb8dKINioHtHg2LNlf9Y3Z9p82qdXQvGHJ/OXchqEJYNg2TO1F0pnpYfzfTjD6HOhEATTPHPdkDdzTyx8NJu3gTg0rOl/iU2h6ZjKcsBU8S8UBPP/2TbvfUSrJ5k4mWQ1NxOX4wZdnIEnmr8MojE7ZUBV8Kj8q68ALvp3axhYNaDG/arwGF3HqRJEi40cf6BOXAdqobSrowMf8hMNtaURZWXDfpUwPYBQoRS3oLeMNbR8juzW0wKy8Fbw5Hwsy67WCbzQpDDeNXvWy6aYRxB4BUyWNX74Sucp5E8Cg05EOHeT/mdWJRp8DnSiAjmTjDOJ+vY/y6tJ8Ou8uIQ7d3AIY6UzLfD8zL+O//XPROCjUGencRU70uE5vf1OMteFbQdWkjoCSLp+jCGxMRwtGpU/G6eZ11ew/FvnkOm19W1VfgNOj0yHJqZFKqC+W1Ty7Ij9HMxp9cx8YWJgiIGPQPKhcakUPQdGkfZM8SNsRH0hZOyDNhOd3fF0LnlRv9/t6hyEeo9RJn48X5v+bk40+BzpxAL31BWMU+qboe+wMHGoA7NDTABkv+1yERoMVnTcvgJV2Stkv/UTg2z4X0KVvESGJZZpYPgOvu8EDzzMF17xf2HhF4B0MIuokClDaXiR/AuJluM38oj7XslsP6A646aj1nO4AH0WiHeMIlEfe8iN3vSgMlM4iWFCmV571DWkndeoDLdhC+Ch/5aMRZk/2FMg30Hf8sWzjz5/SDPVRI1laJ/avMhbqV9bh0fG5dL7+j3Ty0edAJx+BDrSHl/NMFCmcqZRF8bNd+eqD/Op/Q8tnu/W8ttuGv5mAQan/1c/NkegLEEZ39Rrw1ivWrGDgbuRQW1VkMiC3TeBldvt9EZCwHIY2Mq3yoI1IaxvUJu+dsqwOlMz3h/vOeaUeg3AE2jyZ8ORSeDb6pLYDNTSTyxLAcZpGmIDXnUl5HNAeFtpQPlFUG51HQBnJNOR/+x/zb1kaj7OfNSDmZGb9m0/Xa04P8g7v/0+cfPQ50GUBoMNMkgfx1aNPiMHvNl58Ghld96UiTHVGhDcOBivAOduuCWq7nA+fAUS/7QXeYSOg4UjLKF0tvoAf80jCDwQsLGTZGtDyDQgF7TuDhpenQY3ysLsJ2Jpvv/LfzmUB4VXaD/rJfBq56GhBiMh91bZ42yGKBtmuGKDcZCBs3cQhZVJQLlJFRFEk2osutS8JsTy96wKef+iFM4hJhXmI2GYKL/PRJLehr11w+ebz6jCZT4v8H8Pe580nH30OdHlEoAM9mWcUwwNFYexYzqltupze2oZ4mVGdsSzxHXCJdZeXcfAywri8GNVw+tWfmm///d686b63S4tA1LAACibgA4moDPFeJsgYt5QuIJREFw48SR7dIqhbCFTGWTC3Yb4N3p9lXTD/ZoIjHgjkc/1jfWwX6qLVeZUDTdMIsLgLdgpkUXkty23oeS1Hdh/xso4sS7Jq//Q4vCDkb30D8FWf54ZsVveUuC1jKvp2YLeUP5czB4zW+BkO9H/g7Gbv8og+B7psAHT4dlJ2irsQOdlEVZ/Tct0puRBFiuxY1jIyo7zaZoKPwNLcHss2ZH/pc4Dv+fJ8l/7pcDN0EhAwEwcybzPMU8FAnaBW3Pp8zxDeE0BAYgGABW03d8yJZxg1Tkk8kTiZSz7pgNttthxE3kS8NZJOJLORbqhp7W6VJYlcXD4CPeuU07KqYuWj0S/rsRd9al/QaUPrAS3vT3428N1/FviSec8zbQPbowjTogad3UAaobzpmNz4IugE+ViUvZ8x4nLY+yyUcJnRf/xFeyOm300aKDLskr5kUKnFrZqOyV+TFHRgdB6aed+jwLe+Bfidj3pgqLymowPTDtAY1UlqbFI3BeUtOCIo6+qYAAmXsTndpC9apoIYtQnpM4SPk4XyorqRfMrb5WHmy1m1LcRgBfRNwBbqR2C8BNARpaDeYfnbIfl8Zp747/r6PPGfxoHEqzhK8741gWzUPljQHv8DrguL/O/sV3xeuhGXEV0+S/iJtk/ilfXCdsuHLQFJnaGAcClYL8tNJSnTRJPbuR23/Cw8zfGs9eoRu+dE/9GXw/74jWgcnZfpbjY2sSkCPY62ON8BDBCCquqhubFEcmkbuhXgAIjqgvrg+iO6Mx03eHBN8BGtgqfWTcI3AmatqgCkpHlqUvwp5dTJuf5BkWhCHBVqmYi3AmGvTeXH9Me/CPiuHHl+0rPRkrXXka+xDxWhthawMgJfc/xt4jPztkAE8f8n93ErLjNKuAzpP7zN7syS3TGc936m46Cf7zjw5z2CspFjlPyBlB+nFx6v/y3gX/wa8PATnlkUTY7p8MBhVJbBBlSnARZDA57Mw/EFpXF5CLAHgJnQ8qvpQR+cbEA7CQhv14716xiCNJF3CThN8jeDk6Y2woNnuQjAvTY1/3zqHBS9jv0+QO6SNzwg/415u+mlX0j1xUcin+n5RESH8bnokcHqfyn2sQmE7/zKF6S7cJnRZQmgA/2HX7B788iND1ZU4zjcaI7FFwcz4EN7PTFTn18vJ9nYVtP78lL+r705L+kfmZozaU8AsKYJCJTz1AFTo3qjMFtpw0R+BICHGLRcngBwD1whAM1yaD9d1AyqL2m1fZLJ9c8CgMZMDC58ZF4NMFF6LzpUngjScR55PYrqqBxLNJT7vBuAb/uj01uVIO1egC8cRubC+tB1FtrMWWe/6jJbuhe67Jbwhc6dw0uzUh8oIGH8mcqM/kPONeXtbtLanO/KFn6Ijc8CYxqTPCAnWT7Vy6HIJ+WbSv/8K/KM/1m7r39GSxUGqSK042kEQvB1uB+13rYtN3fcgxGsjfiqPFQmktfkCAsiVvkYy6H14cGby/JvFIHkVTsocrMY3P1yZP32QFJXm3rs8dYCKeClWGXBdZc/vPyu79wmje0Qdf6lrwS+889km7xW+JVvFFnQThJ/YZlI96bX5sfVtSNtNJRi38sVHti/DJfuhS5injl6+om32e0Z4V8VzZIjRVNzOYevMzpKFIYEvPQnWSMHQfKO3wt9hmj0X/xKjqjfQSIRWFVxCOQY4IqBa0QHCAhROV3uar1y7doVHo5/4Tf828IhgwnP6HiYpXo6AFm0b2FfCp80F3EGPiWwCWiECPTNCgfUA5YdqgceS6Z72HZUpiHq/NY/srvbPtlq/d31VjEBG+sIBoR+gtSpG81UEe+OknMg9MqvfmE69t86Oixd1gA60E++zQblvWI41zEADh6T6NhU1DLJOzukjXraAfaJx/DsaGXxtg8C3/3fd3fquV0GCxdFUX5SOQ0ucrSgrgNgQ7v8Jl4OoBDL4vZZGaAH59y2/LgRW+gHt6GgDnQmlKgc+uOltlFoGUsOBsqDQG6JEoF5kye8DpKBjwNw/u95r/OFn96x+w6fqL3I37SOltO0bv+WHBf1+jVf9cJ0Oy5juuwBdPj5jyc2eGM+3X3RbGm0DkORVWJ2yE6e2/M8oOUZOAOZhkj0X/5SjkwfIQYCbgooANxyOooQm2hT+Dpn4Pamjhn9WF1Urjq8lpM2VD6OLHv7rg5Yg4nDgXsExOg7/2FAbikYOt8yahGRgQBtfgQ4Cn5Lpj88kvStf3gE0AO9obYTzRCp3z9Xt9h56ub32+H8/kCd/egWN790eD78MqbLHkAH+vF77cxewr02/IZSx6oKwo0+Pr2cwAHHUggCHD4M4ZQl72Qnshl9S+WffAfwht8Afut+KmMCqBCAsQ6IEDBxmUYmAi0Ai8+R1o6ar4+gDV2iVxmpv9FNrEgWjTRdH0xkQ2sKS8RR31LUBUmLyi2VXSpf5U99sI8owLnx+MIbcsT5ZbvIU+2dbszskkV3jjkJ3Nyw87x2POha7+RzR5z/uQTfISd3Bs88Ud/6NZfJ1zWX6IoA0IEyiN6SB+eNw7kbo2hAJtK9zLG4HYyl50PNfqktSdTW+fkPAP/xbI5Mz8KBZFke169rTrJDAQhYBEggBjsIPwVFdEA2AluXX9LYCXtydOpWDW7Jr1k3JEoEXIcBox6fg0AxAl7rtIFD5B3UF603pA03h170fOCrXgC84NN9XlS+aT9V+3E7Vfo40dLjRdRGMYNDUe+RQM7PW0I3f9XN6a24AuiKAdCBMojettngteVu38KjFuHywuUftu+BFQ5tZznGtzh1H72QGTp1ItIixbCk//n374D0F94fg2UTgULKlTwBSY7qGKC9wPAAZUD41ICUqTLAywttw+AnPQV5bYdkD/Mwn1OWy4+O0DSxBEMf/JSf5mFBlp6syhdB+ZI2RJkvet4OOJ9xzXnYMPNZ9ptLRodpJyyTcHu+afQaXCF0RQHoQBlE78yHOzAvgXZ3FwciS6wOmFpDi8DNqJQDp4l4KcR7pUnKlbLaaLTkCaLXkd6fbzS97X3AW969A9NHnkB3b3Csq6BIIKc3kBqALL0i3rWu/NxwAWgIMIagaXQI8kz64uoIWLsIFZ4OAh7AA2UzLliOYnuguQTKkQwI2lDSOsPLPj7jOTvQ/MoX7CLPRX5iS275jr49Vx6Tv1jZAvPprm+BzXvfoHZUj/BmyDzvysv2O3EF0RUHoANVEB2IQWxa9g1PtzaDHHjEVGZ3NaXXGypJ6gLqJZHxMX93F57JAXZpay45G9cU4Q6R6bBX+vMZVO/Lx/c93AKQA1C0gFvzFZSK05U6JpYtvGo+Wl4K2G7/NqHZ57Wo3cLXAvBGDJY98OoBnIIhAl7o8IjaTAtle7yjdoYH3QfA/Ly8LP9fnjMvz7Fkx4BfYjPj2abLI0zzyozrYoHnYdpBzZ/bKblLg8L5uPLAc6CEK5T+3b32qqz826OoLrpmcmMoFt9Ep8PJBo1HjHlBOvH3pjKAQOo7n+PbMbZi0B/NEelvfngHqo9M58NxSH/48QywH5m6JmDVRItAswWw9BypPuZklO5kjNou/ZE6Klf41U+QvHTeUKBj4HDgy+naFtfFQrqI4vgO0eMznrZLfM61O7B8Zr6+8Tm78wEwP+5p0u7EpAvQBn0W04Ed4PpaV2o80bsx0rYkndusdVMrL9iG0cgR0RUJngNdsQA60L/7n3Z3PrxsvFCLZ5rnwqSG4ABBeFSDDWb9hv9SepL2grL6NVGQjCWRouYmncvrUs1axPD/KVJ2DoGZL/clabuQtEBXJWlMTgLYJCfrqLmJ4QFiBoQdz7lP0l0A3e2SRndAo4BGJ7PMzqaqDkQA13cISWIPkBZnBbYHtPm1W9GKSGyTx7HpD9CO/1I7B/vF8P+ff+3N6TZcoZRwhdO//R92Z76h8zeHQROf7trd0rnjsQzKI/BEdyjVN5VclDnU33oHaOQgeSwAiKU+DOcbApugH66CWzonEJr3ySJWk34UTw7iE7a9NA4dHl1iIA14d/rSTApL7SyO4WHTowmoMymFR9J/2JdOOyWNxz0a0wZocUi/4f4mvOYP33x5Pyh/EF3xADrQAKKYbiwR1Uft1CnKeS1Io+/GXiy9a3s9lOCopkNSvM0XIHHOjw5oLkVXER3k8dIeeAJAR6fAIQIQNBG0ygxpt4mAuEiZ0Ki+OnmPXP/g9e76wrYyJYZ8o9kcWNRvT1fKIirfUeEiOX+QvnR07G0sHWy/Xco3jP7w51+Zy3amhKcI/ejPjZHoHeMFWZCz2wgkpusaFQqYNHuSwLLWqEwTvQWb+BB5FeW1/TCSiNryvG1qPQ5ZLoSMoiJI+z19IjgXnk5uO6D8AfLVvpeoqTf+KjOkfx2bac6B+ckPfozuIJtDU9/1PZr8mj1+5illWYdsP9rfxe0bvTZoxNvoEgj1N+jmbz0VwHOgC3Wfy5J+7H/YcFPpVbxvpgNczmWf0G+ww9cd0xFEJ0tLY6kT5RVSUGRgwvSUQOSzYcTS9q1WiaJXarbIsHuMZcpwDt2p1+sXVBa0+m8whvYyD2xH+ANt/6P6/KiOBUpU3pHtRBgc8bG2TWdrrN/F/oo8Oi698oeRU+VNsv2SAsAs5dlGorFuZEq47Y/cnF6Hpwg9pQB0oH/7s3aT7eH1+fRMNMMrRcDIdBgehc+2LVvuSyXluUl9IGSwvBTUAAicPxyqzqHyKvRJf6neXOzwgh6aFiK7MS96mmJXBT0wPS86aOAOOdgHdLvV8sKAhrykYNj3hb5coH0+kPf6X/pHvyDdg6cQPeUAdKDhu/PbLd5oAqLqWC4P5ODWzvhM0YwLzDNyKVMSC1Y2bYAQluVCJ4KwWJaxDfO8NFqpMqYw8twdNNKwKv+uzoI+iqDNnbzC06bIhnKZ/xLx3fkEFbrj0AIzDQ/IoJBSHIYL867MDWN3VqP6MrZahWXUDO33AnGXnBTGfDt94HGPgoZgZdPoNYqS8+Ftp57AS77mRZf/d9vPly7bFypfDA0vIXhig5vz6fgeQbN5YA3eEOq5uUNTxiZgafIT6nN1Jm0NgDEZ1W75bL5uBaVE/Kdy5beauO1iqK4dAj3l70Awtf0qQrB8LKfjQc5rIld1SvOy2dQP0lniMo4/5t+lcuPFzswgR+1BdEI6SsoLFshfyjN4GuojVk6mhGZcdEws1fOCe6l2dh5r4/EiHc1lpk/RkUm69sNo2V3HlNSG3dLc2QLLnTrt83hB9I3giN02RQHR15zb4JanIngOdNDkf8XTj/2c3W7DzSXD6Xl8Z0DiiMtlBmTw0ViSKAhogpWUgm8kNXIstHWYdAcyBDZj2VKhlaPXhM+kSMKHZujqqeFRnBLSoEa8iKMi15xJdBRU6vFZ0vdB9TkPUX7/m2ca0KlaoOcHtrUg70H9i/RwGJ0oiwPrJDyQtrjrj3zB5fsy5EtBT3kAHej1b7Eze1eNb3I64/xerYAAgZe6QAuSDXYQr4I5IVIGiNsRIWw7ak+jCupDCSy8fAnh9oMp3x710MhEb4GMkQ4VWxU4DqOTSP5Gb1Pe2P2lu+TMk/rKS+8leer4B23zdWRjgIwZ0G6ZeJ7xi3OY/9zvZvJH237bDrXW06lUeNtV556aS3aljwkALfQjP2d3JvoO/aGm4cCbUxIHLFk2R209wHRWKA5V80Sege+GQK+Usyga27XfvtTZ4q6lTp8bbwmiPu5vBZuoj9KXXuTv9CdtdWczdPTRosP8dAGEl/TdpYuNNDqzjulEM67n6eXhEJXGu1bz9tcCYe/8gH7pJEFyjM9RH4aHK2K46+u+4KnxiNJh6GMKQAcaotHNHt6YNtMNJlSniA3aBAfE0cu+2vC9eLevV9gQ8ClFTudkmkWYy3P7aHFlOvFfc0TcNsvIAL9UxoK8pevmGPQx6t9hKWh3nNrquCQHQuNpL/qWm2/NI2oNxqR2QujIdN59dBglOgOW9Yi5jP82GE8w0YRC/SE9NPbO+iL/uGff8MqXfuGV8R7PS0UfcwBa6PU/O75bdNgbvQGXQA9NNHhAehy2zNQF3hAxF4KgICcR8PdkULmrgx4g9wF8mtpuf9XznVPOs00XifdrxnmUms4TzJe49+wgAr4LbWOxDE0mF9yOHnf0QL6+8+u+8Mp5h+elpKfkXfjDUJ4p794+iVuzYb9uuDaKIKxc23wOSiuF+E4lpJwuMV3dgdKc50+my61cUwgz3tr3zpBYpsJuOxm6yq+ymDtMDMUxTY/Wysd5U77J3RN+GsG4nXIHnPgkbpv5a7vSvhX9wNpok7tYhaCGgj407UVj3pQj0cfGUms7A21J9mprgW4D3nVswzEpcibH31z/pI712hXQLPW2Ca/ZnsKNH6vgOdDHbATKNCzr0974XfrbFtelJXkpMmln6ubu7OKynpeFoKhP+DfLxKUlXZp8Td+6REilz6NawwQSeJwnkR5qe5jbtLkB/5KWznr4oPym+WBZ2tThMSv/uf5wDIA8dbYGnMI6coHe6DRW6fUJOFQ/0faJ/3uZbKEeFuw04R47h5e/9GPgJtFBtAIo0QCk2MOdWSkvUzvTcwETXaFVh6rAtvAtGAXMqN2oXq9xKQplo4nFaZPkHQowFYhLndLvgEmvjQP1PCUs6QUdXR6GwvIBUDl9HaK95uYWPx3h61QWi7LTZLTYfiQ7FnQH+BuHLd2TJ767XvoU+zbRxdAKoAFNQHpHPr0tcuhFEudiFKh3V7X8REkQecgaym+tzW/qc5vTdS0xPTFQvNZFt0QRoHG6nmukMvHdNSMKG6K0Lf1URKTLwmOpvebZ2xBpEaFx/e+i10iWSDFo2+DkcWwB967Tcqm2M5xvDRSOe1mKLpzNyCTn7AvxuLgJR3RT0yZ9bG3ez+NfDJ1Ohojzrhxx3oOVHK0AukAVSA23ZE2dGdKc48L7r4KdCTi6GyaFmTBxxh6BMSofDwsMkmmubQK+vMxHIEYjLxaiEyrjrgPA6S6fAR+xanuBzNSeez8luFnSpxLf1LIZ1P1vASnTkgafzqsMtPI1MiSeWvgtUejoTmzCRZwT42J3qkexF013L41p2t/dHHp13qR93bpU79MKoIekH35Lvmu/l5f2A5gKpQPe7nMsFDn8RM2+6nnIqFHvQXu3jViG3vZCl08EfAwsFrR3vu0stR/0o6vd4xzzYFLu7msfVLeXl8/vyaD5I3ga7n7pzekBrLRIK4CeJ41R6QavyKcvyTZ3hvMUpJobHSkOalJQ36/V4vJKDUi27YVAP9YZ0qYfuNsoOMVtDnfYU418OrJwNKgyni9F+l0qR6Dg+s3bABfTdsSrnKc5KuS4dQ7YZ9lCnouyTP+WHg8jnk3fS15t33A2X78uL+HvXqPN86MVQC+CXv9TdlNe4r/YdmB6S0lX5xrT4ME0XMqmFlAjcnUFaJN+SyoAcON0Jkqr3q594XaVjy/vfm669t91BF1dcD/1JolZGI05aSyYfLjNtjE4ULIA4JrtlCXdCm+dJAkEx73hjbSrMnHfm/2MqI+RHKh9GrYP3rSfP/nynq9f9zYvmFYAvUQ0RKb7G9y02eIlOUJ9YXaKm9jHGjrICYQWI5MDQMHxQYx9h6WmzpKzHqZfgItQe3yDR4/mPUtZ1p+XvhUIpX3lF22DVJ0c0F/VPTXTlKEIdk6XSH6zaSeR5ubUTGdz2hv2t3jbVdfgDevy/NLQCqBHRK+9104/87EMqBu8OBvyTbZb7t/U9TGJYpZ8sYM39Re5LeAb8QeBT49/LU9f/Tss7h/Qh+aeSVQ3CqSBxnDnyDOoy/10+hWdaENuBUEAHuqAOwM0y2dm7yYF4uM6gk5fO3JI+2fz5625wFtz8tv2rsY9K2AeDa0Aesz0g3nZvzmVwXT3FdIb8wDckI38dD4/nc9PZ+c4nUfl9Fg48CDnXD1UMV+Hr/lObPNUQC/9gDZc+TTl8pcHOrLUa+UL+P3jKZ2jsygALGdNtD7zrFinfXNbFEv9tab95RlI0sIIM/DCoYngsa+zU/YAhg/ktLM57cG0zcc9nN2ew9lHPg5nX76C5bHR/w8lQ4OLxn8TYwAAAABJRU5ErkJggg==',
637
+ ...(this.aiConfig || this.ai)
638
+ }
639
+ : false;
640
+ },
641
+ //人工智能图片背景
642
+ _aibackground() {
643
+ return this._aiConfig && (this._aiConfig.image || this._aiConfig.icon)
644
+ ? {
645
+ 'background-image': `url(${
646
+ this._aiConfig.image || this._aiConfig.icon
647
+ })`
648
+ }
649
+ : {};
650
+ },
651
+ //用户信息
652
+ user() {
653
+ return this.userModel ? this.userModel : store.get('userModel');
654
+ },
655
+ //在线人数列表地址
656
+ onlineUrl() {
657
+ if (this.onlineView) {
658
+ return typeof this.onlineView == 'string' ? this.onlineView : '';
659
+ }
660
+ return false;
661
+ },
662
+ //隐藏操作按键
663
+ hide() {
664
+ let topRightToolHide = {};
665
+ if (this.topRightToolHide) {
666
+ topRightToolHide = JSON.parse(
667
+ this.topRightToolHide.replace(
668
+ /(['"])?([a-zA-Z0-9_]+)(['"])?:/g,
669
+ '"$2":'
670
+ )
671
+ );
672
+ }
673
+ let hides = {
674
+ home: this.indexUrl ? false : true,
675
+ index: this.doorIndex ? false : true,
676
+ old: this.showOld ? false : true
677
+ };
678
+
679
+ if (this.layout === 'subsystem' || this.application) {
680
+ hides.system = false;
681
+ }
682
+ if (this.layout === 'topside' || this.layout === 'side') {
683
+ hides.user = true;
684
+ }
685
+ return { ...hides, ...this.hides, ...topRightToolHide };
686
+ }
687
+ },
688
+ watch: {
689
+ menuTips: {
690
+ deep: true,
691
+ handler() {
692
+ this.setTips(this.userApps);
693
+ this.setTips(this.applications);
694
+ this.setTips(this.business);
695
+ this.setTips(this.systems);
696
+ this.setTips(this.menus);
697
+ }
698
+ }
699
+ },
700
+ created() {
701
+ this.doorIndex = sessionStorage.getItem('doorIndex');
702
+ },
703
+ mounted() {
704
+ this.handleListener();
705
+ },
706
+ methods: {
707
+ /**
708
+ * @desc:匹配路由
709
+ * @author huangbo
710
+ * @date 2024年9月7日
711
+ **/
712
+ hasRouter(res, url, code) {
713
+ if (!url) {
714
+ return false;
715
+ }
716
+ if (Array.isArray(res)) {
717
+ for (let i in res) {
718
+ let path = this.hasRouter(res[i], url, code);
719
+ if (path) {
720
+ return path;
721
+ }
722
+ }
723
+ } else {
724
+ let path = res.path;
725
+ if (path !== '/' && path !== '/404') {
726
+ path = path.replace(path[1], path[1].toLowerCase());
727
+ }
728
+ let pathname = url.substring(url.indexOf('#/') + 1);
729
+ pathname = pathname.split('?')[0];
730
+ let appCode;
731
+ if (res.path !== '/' && pathname == path) {
732
+ if (res.components) {
733
+ if (!res.components[code]) {
734
+ console.error(
735
+ '路由“命名视图”规范属性名称与菜单appCode不一致',
736
+ res,
737
+ code
738
+ );
739
+ appCode = Object.keys(res.components).filter((item) => {
740
+ return item !== 'default';
741
+ })[0];
742
+ }
743
+ } else {
744
+ console.error(
745
+ '请根据路由“命名视图”规范,正确添加components属性名称',
746
+ res
747
+ );
748
+ }
749
+ return appCode ? { path: pathname, appCode } : pathname;
750
+ }
751
+ if (res && Object.prototype.hasOwnProperty.call(res, 'children')) {
752
+ let path = this.hasRouter(res.children, url, code);
753
+ if (path) {
754
+ return path;
755
+ }
756
+ }
757
+ }
758
+ return false;
759
+ },
760
+ /**
761
+ * @desc:获取初始数据
762
+ * @author huangbo
763
+ * @date 2024年9月7日
764
+ **/
765
+ init(results, first) {
766
+ this.setConfig(results);
767
+ if (this.remote && first) {
768
+ this.getApplications();
769
+ }
770
+ },
771
+ /**
772
+ * @desc:设置用户配置及信息
773
+ * @author huangbo
774
+ * @date 2024年9月7日
775
+ **/
776
+ setConfig(results) {
777
+ localStorage.setItem('mainConfig', JSON.stringify(results));
778
+ util.setStorage({
779
+ type: this.storage,
780
+ key: {
781
+ depId: results.userModel.depId,
782
+ orgId: results.userModel.orgId,
783
+ userId: results.userModel.userId,
784
+ userName: results.userModel.username || results.userModel.userName,
785
+ useCaseCodes: results.resourceCodes || results.userModel.resourceCodes
786
+ }
787
+ });
788
+ for (let i in results) {
789
+ if (i === 'mainLogoUrl' && results[i]) {
790
+ this.mainLogo = results[i];
791
+ }
792
+ if (
793
+ i === 'mainBannerUrl' &&
794
+ results[i] &&
795
+ this.headerImage === undefined
796
+ ) {
797
+ this.headerImg = results[i];
798
+ }
799
+ if (i === 'initApplication' && results[i]) {
800
+ this.initApps = results[i].split(',');
801
+ }
802
+ if (i === 'indexUrl' && results[i]) {
803
+ this.indexUrl = results[i];
804
+ }
805
+ if (i === 'doorIndex' && results[i]) {
806
+ util.win.open(results[i]);
807
+ this.doorIndex = results[i];
808
+ }
809
+ if (i === 'subsystemName' && results[i]) {
810
+ document.title = results[i];
811
+ }
812
+ if (i === 'loginPage' && results[i]) {
813
+ util.setStorage('loginPage', results[i]);
814
+ }
815
+ if (i === 'sysLogoIco' && results[i]) {
816
+ localStorage.setItem('sysLogoIco', results[i]);
817
+ util.setFavicon(results[i]);
818
+ }
819
+ if (i === 'userStyle' && results[i]) {
820
+ if (results[i].color) {
821
+ let color = unescape(results[i].color).toLowerCase();
822
+ if (util.startWith(color, '#')) {
823
+ this.themeColor = color;
824
+ }
825
+ }
826
+ this.userStyle = results[i];
827
+ this.notify = results[i].notify || '';
828
+ }
829
+ if (i === 'subsystemExtend' && results[i]) {
830
+ if (results[i].themeColor) {
831
+ let color = unescape(results[i].themeColor).toLowerCase();
832
+ if (util.startWith(color, '#')) {
833
+ this.themeColor = color;
834
+ }
835
+ }
836
+ if (results[i].userInfoContents) {
837
+ this.userInfoContents = results[i].userInfoContents;
838
+ }
839
+ if (results[i].webPageWatermark) {
840
+ try {
841
+ util.win.top.webPageWatermark = results[i].webPageWatermark;
842
+ util.watermark(results[i].webPageWatermark);
843
+ } catch (error) {
844
+ util.win.postMessage(
845
+ { type: 2, content: results[i].webPageWatermark },
846
+ '*'
847
+ );
848
+ }
849
+ }
850
+ if (results[i].loginPage) {
851
+ util.setStorage('loginPage', results[i].loginPage);
852
+ }
853
+ if (results[i].aiConfig) {
854
+ if (typeof results[i].aiConfig == 'string') {
855
+ try {
856
+ this.aiConfig = JSON.parse(results[i].aiConfig);
857
+ } catch (error) {
858
+ this.aiConfig = { url: results[i].aiConfig };
859
+ }
860
+ } else {
861
+ this.aiConfig = results[i].aiConfig;
862
+ }
863
+ }
864
+ if (results[i].portalPage || results[i].portalpage) {
865
+ this.doorIndex = results[i].portalPage || results[i].portalpage;
866
+ }
867
+ if (results[i].multipleVersion || results[i].oldVersion) {
868
+ this.showOld = results[i].oldVersion ? results[i].oldVersion : true;
869
+ }
870
+ if (results[i].topRightToolHide) {
871
+ this.topRightToolHide = results[i].topRightToolHide;
872
+ }
873
+ }
874
+ if (i === 'userModel' && results[i]) {
875
+ if (results[i].userHeadUrl) {
876
+ results[i].userHeadUrl = util.jointUrl({
877
+ url: results[i].userHeadUrl,
878
+ reg: '/main2'
879
+ });
880
+ } else {
881
+ results[i].userHeadUrl = this.userHead;
882
+ }
883
+ this.userModel = results[i];
884
+ }
885
+ if (i === 'notifyList' && results[i]) {
886
+ this.notifyList = results[i];
887
+ }
888
+ store.set(i, results[i]);
889
+ }
890
+ },
891
+ /**
892
+ * @desc:获取所有应用
893
+ * @author huangbo
894
+ * @date 2024年9月7日
895
+ **/
896
+ getApplications() {
897
+ let loading = util.loading('', '加载中...');
898
+ util
899
+ .ajax({
900
+ url: this.appsUrl,
901
+ defaults: true
902
+ })
903
+ .then((res) => {
904
+ if (this.socket) {
905
+ this.initWebSocket();
906
+ }
907
+ if (res.rCode === 0) {
908
+ if (res.results && Object.keys(res.results).length) {
909
+ let { all, app_special_business_system, app_system, app_user } =
910
+ res.results;
911
+ this.userApps = app_user.filter((item) => {
912
+ return item.permission !== false;
913
+ });
914
+ this.applications = all;
915
+ this.business = app_special_business_system;
916
+ this.systems = app_system;
917
+ this.setTips(this.userApps);
918
+ this.setTips(this.applications);
919
+ this.setTips(this.business);
920
+ this.setTips(this.systems);
921
+ } else {
922
+ this.$message.error('未分配应用菜单权限,请联系管理员!');
923
+ }
924
+ this.getMenus(loading);
925
+ } else {
926
+ loading.close();
927
+ let msg = res.msg || '系统错误,请联系管理员!';
928
+ this.$message.error(msg);
929
+ }
930
+ })
931
+ .catch((err) => {
932
+ loading.close();
933
+ if (err.message && err.message !== 'canceled') {
934
+ this.$message.error(err.message);
935
+ }
936
+ });
937
+ },
938
+ /**
939
+ * @desc:获取菜单列表
940
+ * @author huangbo
941
+ * @date 2024年9月7日
942
+ **/
943
+ getMenus(loading) {
944
+ const menuData = store.get('nav');
945
+ if (menuData && menuData.length) {
946
+ loading.close();
947
+ this.renderMenus(menuData);
948
+ return;
949
+ }
950
+ util
951
+ .ajax({ url: this._menuUrl })
952
+ .then((res) => {
953
+ loading.close();
954
+ if (res.rCode === 0) {
955
+ if (res.results && res.results.length) {
956
+ //this.$emit('update:menuData', res.results);
957
+ store.set('nav', JSON.parse(JSON.stringify(res.results)));
958
+ this.renderMenus(JSON.parse(JSON.stringify(res.results)));
959
+ } else {
960
+ this.$message.error('未分配菜单权限,请联系管理员!');
961
+ }
962
+ } else {
963
+ let msg = res.msg || '系统错误,请联系管理员!';
964
+ this.$message.error(msg);
965
+ }
966
+ })
967
+ .catch((err) => {
968
+ loading.close();
969
+ if (err.message && err.message !== 'canceled') {
970
+ this.$message.error(err.message);
971
+ }
972
+ });
973
+ },
974
+ /**
975
+ * @desc:处理菜单列表
976
+ * @author huangbo
977
+ * @date 2024年9月7日
978
+ **/
979
+ renderMenus(res) {
980
+ this.menus = res;
981
+ this.setTips(this.menus);
982
+ store.set('nav', this.menus);
983
+ if (this.indexUrl) {
984
+ let obj = this.getMenu(this.menus, this.indexUrl);
985
+ obj = obj
986
+ ? obj
987
+ : {
988
+ url: this.indexUrl,
989
+ text: '工作台',
990
+ id: '0',
991
+ appCode: 'indexUrl'
992
+ };
993
+ this.homePage = this.setIframeType(obj);
994
+ if (!this.appCode) {
995
+ this.tabs = [this.homePage];
996
+ this.activeName = this.homePage.id;
997
+ }
998
+ }
999
+ if (this.appCode) {
1000
+ let code = this.sysCode || this.appCode;
1001
+ let app = this.userApps.filter((item) => {
1002
+ return item.code === code;
1003
+ })[0];
1004
+ if (app) {
1005
+ this.active = app.id;
1006
+ if (app.url) {
1007
+ let obj = this.getMenu(this.menus, app.url);
1008
+ if (obj) {
1009
+ let tab = this.setIframeType(obj);
1010
+ this.tabs = [tab];
1011
+ this.activeName = tab.id;
1012
+ } else {
1013
+ this.tabs = [app];
1014
+ }
1015
+ }
1016
+ }
1017
+ if (this.sysCode) {
1018
+ let subMenus = this.getMenu(this.menus, this.sysCode, 'appCode');
1019
+ if (subMenus) {
1020
+ let obj = this.getMenu(this.menus, this.appCode, 'appCode');
1021
+ if (obj) {
1022
+ if (!obj.url) {
1023
+ obj = this.getFirst(obj);
1024
+ }
1025
+ this.subActive = obj.id;
1026
+ let tab = this.setIframeType(obj);
1027
+ this.tabs = [tab];
1028
+ this.activeName = tab.id;
1029
+ } else {
1030
+ this.subActive = '';
1031
+ }
1032
+ this.subMenus = subMenus;
1033
+ this.showMenu = true;
1034
+ } else {
1035
+ this.subMenus = null;
1036
+ this.showMenu = false;
1037
+ }
1038
+ } else {
1039
+ let subMenus = this.getMenu(this.menus, this.appCode, 'appCode');
1040
+ if (subMenus) {
1041
+ if (this.tabs.length == 0) {
1042
+ let obj = this.getFirst(subMenus);
1043
+ if (obj) {
1044
+ this.subActive = obj.id;
1045
+ let tab = this.setIframeType(obj);
1046
+ this.tabs = [tab];
1047
+ this.activeName = tab.id;
1048
+ } else {
1049
+ this.subActive = '';
1050
+ }
1051
+ }
1052
+ this.subMenus = subMenus;
1053
+ this.showMenu = true;
1054
+ } else {
1055
+ this.subMenus = null;
1056
+ this.showMenu = false;
1057
+ }
1058
+ }
1059
+ } else if (this.initApps && this.initApps.length && !this.indexUrl) {
1060
+ let obj = this.getMenu(
1061
+ this.menus,
1062
+ this.initApps[this.initApps.length - 1]
1063
+ );
1064
+ if (obj) {
1065
+ let tab = this.setIframeType(obj);
1066
+ this.tabs.push(tab);
1067
+ this.activeName = tab.id;
1068
+ }
1069
+ }
1070
+ },
1071
+ /**
1072
+ * @desc:设置页面加载类型
1073
+ * @author huangbo
1074
+ * @date 2024年9月7日
1075
+ **/
1076
+ setIframeType(res) {
1077
+ let { url } = res;
1078
+ let urls = url.split('?');
1079
+ if (urls[0].indexOf('.js') > 1 && !isIE) {
1080
+ res.method = 'wujie';
1081
+ if (!res.appCode) {
1082
+ res.appCode = 'application_' + Date.now();
1083
+ }
1084
+ } else if (
1085
+ urls[0].indexOf('.dhtml') > 0 ||
1086
+ (urls[0].indexOf('.html') > 0 && urls[0].indexOf('.html#') === -1)
1087
+ ) {
1088
+ res.method = 'iframe';
1089
+ } else {
1090
+ if (urls[0].indexOf('.html') === -1 && urls[0].indexOf('#/') === -1) {
1091
+ res.method = 'iframe';
1092
+ } else {
1093
+ const routes = this.$router.options.routes;
1094
+ if (routes) {
1095
+ let path = this.hasRouter(routes, urls[0], res.appCode);
1096
+ if (path && this.routeType !== 'wujie') {
1097
+ res.method = 'router';
1098
+ if (typeof path === 'string') {
1099
+ res.path = path;
1100
+ } else {
1101
+ res.path = path.path;
1102
+ res.appCode = path.appCode;
1103
+ }
1104
+ res.keys = util.uuid();
1105
+ } else {
1106
+ let urlopenmode = util.getParams({
1107
+ url: url,
1108
+ name: 'urlopenmode'
1109
+ });
1110
+ if (
1111
+ this.loadWujie === false ||
1112
+ isIE ||
1113
+ res.urlopenmode == 3 ||
1114
+ urlopenmode == 3
1115
+ ) {
1116
+ res.method = 'iframe';
1117
+ } else {
1118
+ res.method = 'wujie';
1119
+ if (!res.appCode) {
1120
+ res.appCode = 'application_' + Date.now();
1121
+ }
1122
+ }
1123
+ }
1124
+ } else if (
1125
+ (urls[0].indexOf('.html') > -1 && urls[0].indexOf('#/') > -1) ||
1126
+ urls[0].indexOf('/#/') > -1
1127
+ ) {
1128
+ res.method = 'wujie';
1129
+ if (!res.appCode) {
1130
+ res.appCode = 'application_' + Date.now();
1131
+ }
1132
+ } else {
1133
+ res.method = 'iframe';
1134
+ }
1135
+ }
1136
+ }
1137
+ return res;
1138
+ },
1139
+ /**
1140
+ * @desc:获取菜单
1141
+ * @author huangbo
1142
+ * @date 2024年9月7日
1143
+ **/
1144
+ getMenu(menus, res, key) {
1145
+ if (Array.isArray(menus)) {
1146
+ for (let i = 0; i < menus.length; i++) {
1147
+ let item = menus[i];
1148
+ if (key) {
1149
+ if (item[key] === res) {
1150
+ return item;
1151
+ }
1152
+ } else if (item.url === res || item.id === res) {
1153
+ return item;
1154
+ }
1155
+ if (
1156
+ Object.prototype.hasOwnProperty.call(item, 'children') &&
1157
+ item.children.length
1158
+ ) {
1159
+ let obj = this.getMenu(item.children, res, key);
1160
+ if (obj) {
1161
+ return obj;
1162
+ }
1163
+ } else if (
1164
+ Object.prototype.hasOwnProperty.call(item, 'fourthTabs') &&
1165
+ item.fourthTabs.length
1166
+ ) {
1167
+ let obj = this.getMenu(item.fourthTabs, res, key);
1168
+ if (obj) {
1169
+ return obj;
1170
+ }
1171
+ }
1172
+ }
1173
+ }
1174
+ return false;
1175
+ },
1176
+ /**
1177
+ * @desc:获取菜单第一条数据
1178
+ * @author huangbo
1179
+ * @date 2024年9月7日
1180
+ **/
1181
+ getFirst(obj) {
1182
+ if (!obj) {
1183
+ return '';
1184
+ }
1185
+ let openIdex = 0;
1186
+ if (
1187
+ obj.extendData &&
1188
+ (obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen)
1189
+ ) {
1190
+ openIdex = parseInt(
1191
+ obj.extendData.subDefOpenIndex || obj.extendData.subDefOpen,
1192
+ 10
1193
+ );
1194
+ }
1195
+ if (obj.children && obj.children.length && obj.children[openIdex]) {
1196
+ return this.getFirst(obj.children[openIdex]);
1197
+ } else if (
1198
+ obj.fourthTabs &&
1199
+ obj.fourthTabs.length &&
1200
+ obj.fourthTabs[openIdex]
1201
+ ) {
1202
+ return this.getFirst(obj.fourthTabs[openIdex]);
1203
+ } else if (obj.url && obj.urlopenmode !== 1 && obj.urlopenmode !== 2) {
1204
+ return obj;
1205
+ }
1206
+ },
1207
+ /**
1208
+ * @desc:遍历设置菜单气泡提醒
1209
+ * @author huangbo
1210
+ * @date 2024年9月7日
1211
+ **/
1212
+ setTips(obj) {
1213
+ if (Array.isArray(obj)) {
1214
+ obj.forEach((item) => {
1215
+ this.setTips(item);
1216
+ });
1217
+ } else {
1218
+ if (
1219
+ obj &&
1220
+ Object.prototype.hasOwnProperty.call(obj, 'tips') &&
1221
+ obj.tips
1222
+ ) {
1223
+ this.$set(obj, 'tips', false);
1224
+ delete obj.tips;
1225
+ }
1226
+ let flag = 0;
1227
+ if (obj.children && obj.children.length) {
1228
+ obj.children.forEach((item) => {
1229
+ let n = this.setTips(item);
1230
+ flag += n ? parseInt(n) : 0;
1231
+ });
1232
+ if (flag) {
1233
+ this.$set(obj, 'tips', flag);
1234
+ return flag;
1235
+ }
1236
+ } else if (obj.fourthTabs && obj.fourthTabs.length) {
1237
+ obj.fourthTabs.forEach((item) => {
1238
+ let n = this.setTips(item);
1239
+ flag += n ? parseInt(n) : 0;
1240
+ });
1241
+ if (flag) {
1242
+ this.$set(obj, 'tips', flag);
1243
+ return flag;
1244
+ }
1245
+ } else {
1246
+ let num =
1247
+ this.menuTips[obj.id] ||
1248
+ this.menuTips[obj.code] ||
1249
+ this.menuTips[obj.appCode];
1250
+ if (num && Number(num)) {
1251
+ this.$set(obj, 'tips', Number(num));
1252
+ return this.menuTips[obj.id];
1253
+ }
1254
+ }
1255
+ }
1256
+ return false;
1257
+ },
1258
+ /**
1259
+ * @desc:获取气泡提醒
1260
+ * @author huangbo
1261
+ * @date 2024年9月7日
1262
+ **/
1263
+ getBadge(res) {
1264
+ let num = res.tips || 0;
1265
+ return num === true
1266
+ ? {
1267
+ isDot: true
1268
+ //hidden: item.tips
1269
+ }
1270
+ : {
1271
+ value: num,
1272
+ max: 99,
1273
+ hidden: !num
1274
+ };
1275
+ },
1276
+ /**
1277
+ * @desc:开启weosocket
1278
+ * @author huangbo
1279
+ * @date 2024年9月7日
1280
+ **/
1281
+ initWebSocket() {
1282
+ this.webSocket = util.socket({
1283
+ url: wss,
1284
+ take: topic,
1285
+ success: (res) => {
1286
+ let data = res.data || {};
1287
+ for (let i in data) {
1288
+ if (data[i] !== null && data[i] !== undefined) {
1289
+ if (i === 'onlineUserNums' && data[i] > 0) {
1290
+ this.userNums = data[i];
1291
+ }
1292
+ if (i === 'sysMsgNums') {
1293
+ this.notice = data[i];
1294
+ if (this.showMsg) {
1295
+ this.$refs.message.getMsg(true);
1296
+ }
1297
+ }
1298
+ if (i === 'menuTipsMap') {
1299
+ this.menuTips = data[i];
1300
+ }
1301
+ if (i === 'sysMsgList') {
1302
+ this.sysMsg = data[i];
1303
+ data[i] && data[i].length && this.$emit('bus-emit', 'waitdone');
1304
+ }
1305
+ if (i === 'extraData') {
1306
+ this.extraData = data[i];
1307
+ }
1308
+ }
1309
+ }
1310
+ if (this.$store) {
1311
+ try {
1312
+ this.$store.commit('websocket', data);
1313
+ } catch (error) {}
1314
+ }
1315
+ if (this.$eventBus) {
1316
+ this.$eventBus.$emit('websocket', data);
1317
+ }
1318
+ if (util.win.eventBus) {
1319
+ util.win.eventBus.$emit('websocket', data);
1320
+ }
1321
+ }
1322
+ });
1323
+ },
1324
+ /**
1325
+ * @desc:显示用户信息
1326
+ * @author huangbo
1327
+ * @date 2024年9月7日
1328
+ **/
1329
+ showUserInfo() {
1330
+ if (this.showUser === false) {
1331
+ this.showUser = true;
1332
+ }
1333
+ },
1334
+ /**
1335
+ * @desc:删除更多应用菜单点击
1336
+ * @author huangbo
1337
+ * @date 2024年9月7日
1338
+ **/
1339
+ handleDelete(index) {
1340
+ this.newApps.splice(index, 1);
1341
+ },
1342
+ /**
1343
+ * @desc:储存更多应用菜单点击
1344
+ * @author huangbo
1345
+ * @date 2024年9月7日
1346
+ **/
1347
+ handlerClickApps(res) {
1348
+ if (res.permission === false) {
1349
+ return false;
1350
+ }
1351
+ let i = util.indexOfObj(this.newApps, res, 'id');
1352
+ if (i == -1) {
1353
+ this.newApps.push(res);
1354
+ }
1355
+ this.handlerClickApp(res);
1356
+ },
1357
+ /**
1358
+ * @desc:侧边应用菜单点击
1359
+ * @author huangbo
1360
+ * @date 2024年9月7日
1361
+ **/
1362
+ handlerClickApp(res) {
1363
+ this.showMsg = false;
1364
+ this.showSet = false;
1365
+ this.fold = false;
1366
+ if (res) {
1367
+ if (res.permission === false) {
1368
+ return false;
1369
+ }
1370
+ if (
1371
+ (res.children && res.children.length) ||
1372
+ (res.fourthTabs && res.fourthTabs.length)
1373
+ ) {
1374
+ this.subMenus = res;
1375
+ this.showMenu = true;
1376
+ this.showApps = false;
1377
+ }
1378
+ let set = true;
1379
+ if (res.url) {
1380
+ if (res.urlopenmode == 1 || res.openModel == 1) {
1381
+ set = false;
1382
+ util.win.open(res.url);
1383
+ } else if (res.urlopenmode == 2 || res.openModel == 2) {
1384
+ set = false;
1385
+ util.win.open(res.url, '_self');
1386
+ } else {
1387
+ let i = util.indexOfObj(this.tabs, res, 'id');
1388
+ this.activeName = res.id;
1389
+ if (i == -1) {
1390
+ let obj = this.getMenu(this.menus, res.url);
1391
+ if (obj) {
1392
+ let n = util.indexOfObj(this.tabs, obj, 'id');
1393
+ if (n == -1) {
1394
+ let tab = this.setIframeType(obj);
1395
+ this.tabs.push(tab);
1396
+ this.activeName = tab.id;
1397
+ } else {
1398
+ if (obj.method == 'iframe') {
1399
+ obj.url = util.handlerUrl(obj.url);
1400
+ }
1401
+ }
1402
+ } else {
1403
+ let tab = this.setIframeType(res);
1404
+ this.tabs.push(tab);
1405
+ this.activeName = tab.id;
1406
+ }
1407
+ } else {
1408
+ if (res.method == 'iframe') {
1409
+ res.url = util.handlerUrl(res.url);
1410
+ }
1411
+ }
1412
+ }
1413
+ }
1414
+ if (set && res.code) {
1415
+ let subMenus = this.getMenu(this.menus, res.code, 'appCode');
1416
+ if (!subMenus && !res.url) {
1417
+ this.$alert('没有关联菜单,请联系管理员!', '提示', {
1418
+ confirmButtonText: '确定',
1419
+ type: 'warning'
1420
+ }).catch(() => {});
1421
+ } else {
1422
+ this.title = res.text || res.name;
1423
+ this.subMenus = subMenus ? subMenus : null;
1424
+ this.showMenu = subMenus !== false;
1425
+ this.showApps = false;
1426
+ if (subMenus && subMenus.url) {
1427
+ let i = util.indexOfObj(this.tabs, subMenus, 'id');
1428
+ this.activeName = subMenus.id;
1429
+ if (i == -1) {
1430
+ let tab = this.setIframeType(subMenus);
1431
+ this.tabs.push(tab);
1432
+ } else {
1433
+ if (subMenus.method == 'iframe') {
1434
+ subMenus.url = util.handlerUrl(subMenus.url);
1435
+ }
1436
+ }
1437
+ }
1438
+ }
1439
+ }
1440
+ this.active = res.id;
1441
+ } else {
1442
+ this.showApps = !this.showApps;
1443
+ }
1444
+ },
1445
+ /**
1446
+ * @desc:显示Drawer界面
1447
+ * @author huangbo
1448
+ * @date 2024年9月7日
1449
+ **/
1450
+ handlerSetDrawer(res) {
1451
+ this.drawer.visible = !this.drawer.visible;
1452
+ this.drawer.mounted = res.mounted;
1453
+ this.drawer.url = res.url;
1454
+ if (res.mounted === 'wujie') {
1455
+ this.drawer.name = res.name || util.uuid();
1456
+ }
1457
+ },
1458
+ /**
1459
+ * @desc:关闭Drawer界面
1460
+ * @author huangbo
1461
+ * @date 2024年9月7日
1462
+ **/
1463
+ handleCloseDrawer() {
1464
+ this.drawer = { visible: false };
1465
+ },
1466
+ /**
1467
+ * @desc:菜单点击
1468
+ * @author huangbo
1469
+ * @date 2024年9月7日
1470
+ **/
1471
+ handlerClickMenu(res) {
1472
+ util
1473
+ .ajax({
1474
+ url: recordUserApp,
1475
+ params: {
1476
+ userId: this.user.userId,
1477
+ appId: res.id
1478
+ }
1479
+ })
1480
+ .then(() => {})
1481
+ .catch(() => {});
1482
+ this.showMsg = false;
1483
+ this.showSet = false;
1484
+ let i = util.indexOfObj(this.tabs, res, 'id');
1485
+ if (i == -1) {
1486
+ let tab = this.setIframeType(res);
1487
+ this.tabs.push(tab);
1488
+ this.activeName = res.id;
1489
+ } else {
1490
+ let tab = this.tabs[i];
1491
+ if (tab.method === 'iframe') {
1492
+ this.activeName = res.id;
1493
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1494
+ } else {
1495
+ if (tab.method === 'wujie' && tab.appCode) {
1496
+ window.document
1497
+ .querySelector(`iframe[name=${tab.appCode}]`)
1498
+ .contentWindow.location.reload(true);
1499
+ }
1500
+ if (tab.method === 'router') {
1501
+ this.$set(this.tabs[i], 'keys', util.uuid());
1502
+ }
1503
+ this.activeName = res.id;
1504
+ }
1505
+ }
1506
+ },
1507
+
1508
+ /**
1509
+ * @desc:用户详情请求成功
1510
+ * @author huangbo
1511
+ * @date 2024年9月7日
1512
+ **/
1513
+ handleSuccess(res) {
1514
+ this.simpleUserInfo = res.simpleUserInfo;
1515
+ },
1516
+ /**
1517
+ * @desc:修改用户配置
1518
+ * @author huangbo
1519
+ * @date 2024年9月7日
1520
+ **/
1521
+ handleChangeConfig(name, res) {
1522
+ if (name == 'userHeadUrl') {
1523
+ this.$set(this.userModel, 'userHeadUrl', res);
1524
+ store.set('userModel', this.userModel);
1525
+ let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1526
+ sessionStorage.setItem(
1527
+ 'mainConfig',
1528
+ JSON.stringify({ ...mainConfig, userModel: this.userModel })
1529
+ );
1530
+ } else {
1531
+ this.$set(this.userStyle, 'notify', res);
1532
+ store.set('userStyle', this.userStyle);
1533
+ let mainConfig = JSON.parse(localStorage.getItem('mainConfig'));
1534
+ localStorage.setItem(
1535
+ 'mainConfig',
1536
+ JSON.stringify({ ...mainConfig, userStyle: this.userStyle })
1537
+ );
1538
+ }
1539
+ },
1540
+ /**
1541
+ * @desc:关闭webSocket
1542
+ * @author huangbo
1543
+ * @date 2024年9月7日
1544
+ **/
1545
+ handlerClose() {
1546
+ if (this.webSocket) {
1547
+ this.webSocket.destroy();
1548
+ }
1549
+ },
1550
+ /**
1551
+ * @desc:刷新选中iframe页签
1552
+ * @author huangbo
1553
+ * @date 2024年9月7日
1554
+ **/
1555
+ handleRefresh() {
1556
+ let i = util.indexOfObj(this.tabs, this.activeName, 'id');
1557
+ let tab = this.tabs[i];
1558
+ if (tab.method === 'iframe') {
1559
+ tab.url = util.handlerUrl(tab.url);
1560
+ } else {
1561
+ let tab = this.tabs[i];
1562
+ if (tab.method === 'iframe') {
1563
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1564
+ }
1565
+ if (tab.method === 'wujie' && tab.appCode) {
1566
+ window.document
1567
+ .querySelector(`iframe[name=${tab.appCode}]`)
1568
+ .contentWindow.location.reload(true);
1569
+ }
1570
+ if (tab.method === 'router') {
1571
+ this.$set(this.tabs[i], 'keys', util.uuid());
1572
+ }
1573
+ }
1574
+ },
1575
+ /**
1576
+ * @desc:删除iframe
1577
+ * @author huangbo
1578
+ * @date 2024年9月7日
1579
+ **/
1580
+ handleRemove(name) {
1581
+ let len = this.tabs.length - 1;
1582
+ let i = util.indexOfObj(this.tabs, name, 'id,code,appCode');
1583
+ if (i > -1) {
1584
+ this.tabs.splice(i, 1);
1585
+ if (this.tabs.length == 0) {
1586
+ this.activeName = '';
1587
+ } else if (i == len) {
1588
+ this.activeName = this.tabs[len - 1].id;
1589
+ } else {
1590
+ this.activeName = this.tabs[i].id;
1591
+ }
1592
+ }
1593
+ },
1594
+ /**
1595
+ * @desc:tabs鼠标右键事件
1596
+ * @author huangbo
1597
+ * @date 2024年9月7日
1598
+ **/
1599
+ handleContextmenu(tabs, e) {
1600
+ let disabled = {};
1601
+ let index = parseInt(tabs.index, 10);
1602
+ if (index == 0) {
1603
+ disabled.left = true;
1604
+ }
1605
+ if (index == this.tabs.length - 1) {
1606
+ disabled.right = true;
1607
+ }
1608
+ if (this.tabs.length == 1) {
1609
+ disabled.other = true;
1610
+ }
1611
+ if (this.tabs[index].id != this.activeName) {
1612
+ disabled.refresh = true;
1613
+ }
1614
+ this.isDisabled = disabled;
1615
+ this.$refs.tabsHandler.$el.style.setProperty('left', `${e.x}px`);
1616
+ this.$refs.tabsHandler.$el.style.setProperty('top', `${e.y}px`);
1617
+ this.showTabsHandler = true;
1618
+ this.pane = index;
1619
+ window.addEventListener('click', this.closeTabsEvents);
1620
+ },
1621
+ /**
1622
+ * @desc:tabs页签事件
1623
+ * @author huangbo
1624
+ * @date 2024年9月7日
1625
+ **/
1626
+ handleTabsEvents(num) {
1627
+ if (this.pane !== null) {
1628
+ this.tabs = events[num](this.tabs, this.pane, this);
1629
+ }
1630
+ this.showTabsHandler = false;
1631
+ window.removeEventListener('click', this.closeTabsEvents);
1632
+ },
1633
+ //关闭页签事件面板
1634
+ closeTabsEvents(e) {
1635
+ if (
1636
+ e.target.parentNode != this.$refs.tabsHandler.$el &&
1637
+ e.target.parentNode.parentNode != this.$refs.tabsHandler.$el
1638
+ ) {
1639
+ this.showTabsHandler = false;
1640
+ }
1641
+ window.removeEventListener('click', this.closeTabsEvents);
1642
+ },
1643
+ /**
1644
+ * @desc:handler工具栏点击事件
1645
+ * @author huangbo
1646
+ * @date 2024年9月7日
1647
+ **/
1648
+ handleClick(res) {
1649
+ const { type, event, open, link } = res;
1650
+ if (event) {
1651
+ event();
1652
+ } else if (open) {
1653
+ util.win.open(open);
1654
+ } else if (link) {
1655
+ util.win.open(link, '_self');
1656
+ } else {
1657
+ switch (type) {
1658
+ case 'quit':
1659
+ this.handleQuit();
1660
+ break;
1661
+ case 'online':
1662
+ this.showMsg = false;
1663
+ this.showSet = false;
1664
+ this.dialog = {
1665
+ title: '查看在线人员',
1666
+ show: true,
1667
+ src: this.onlineUrl
1668
+ };
1669
+ break;
1670
+ case 'notice':
1671
+ this.showMsg = !this.showMsg;
1672
+ this.showSet = false;
1673
+ break;
1674
+ case 'index':
1675
+ util.win.open(this.doorIndex, '_self');
1676
+ break;
1677
+ case 'set':
1678
+ this.showSet = !this.showSet;
1679
+ this.showMsg = false;
1680
+ break;
1681
+ case 'home':
1682
+ let i = util.indexOfObj(this.tabs, this.homePage.id, 'id');
1683
+ if (i == -1) {
1684
+ this.tabs.unshift(this.homePage);
1685
+ } else {
1686
+ let tab = this.tabs[i];
1687
+ if (tab.method === 'iframe') {
1688
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1689
+ }
1690
+ if (tab.method === 'wujie' && tab.appCode) {
1691
+ window.document
1692
+ .querySelector(`iframe[name=${tab.appCode}]`)
1693
+ .contentWindow.location.reload(true);
1694
+ }
1695
+ if (tab.method === 'router') {
1696
+ this.$set(this.tabs[i], 'keys', util.uuid());
1697
+ }
1698
+ }
1699
+ this.activeName = this.homePage.id;
1700
+ this.showMsg = false;
1701
+ this.showSet = false;
1702
+ break;
1703
+ case 'search':
1704
+ if (res.url) {
1705
+ this.handlerSetDrawer(res);
1706
+ } else {
1707
+ this.showSearch = true;
1708
+ }
1709
+ this.showMsg = false;
1710
+ this.showSet = false;
1711
+ break;
1712
+ case 'goView':
1713
+ util.win.open(res.path, '_blank');
1714
+ break;
1715
+ }
1716
+ }
1717
+ this.$emit('handler-click', res);
1718
+ },
1719
+ /**
1720
+ * @desc:退出登录
1721
+ * @author huangbo
1722
+ * @date 2024年9月7日
1723
+ **/
1724
+ handleQuit() {
1725
+ this.$confirm('确定退出吗?', '退出系统', {
1726
+ confirmButtonText: '确定',
1727
+ cancelButtonText: '取消',
1728
+ type: 'warning'
1729
+ })
1730
+ .then(() => {
1731
+ util
1732
+ .ajax({ method: 'post', url: logout })
1733
+ .then((res) => {
1734
+ if (res.rCode == 0) {
1735
+ util.removeStorage([
1736
+ 'Authorization',
1737
+ 'token',
1738
+ 'ssId',
1739
+ 'userId',
1740
+ 'userName',
1741
+ 'auth',
1742
+ 'deviceUnique',
1743
+ 'menus',
1744
+ 'useCaseCodes',
1745
+ 'mainConfig',
1746
+ 'jump'
1747
+ ]);
1748
+ if (this.onQuit && typeof this.onQuit === 'function') {
1749
+ this.onQuit();
1750
+ } else {
1751
+ try {
1752
+ const loginPage =
1753
+ util.getStorage('login') || util.getStorage('loginPage');
1754
+ if (loginPage) {
1755
+ let src;
1756
+ if (!util.startWith(loginPage, ['http', '/'], true)) {
1757
+ let pathname = util.win.top.location.pathname;
1758
+ if (pathname !== '/') {
1759
+ pathname = pathname.split('/');
1760
+ pathname.splice(pathname.length - 1);
1761
+ pathname = pathname.join('/');
1762
+ src = pathname + '/' + loginPage.replace('./', '');
1763
+ } else {
1764
+ src = pathname + loginPage.replace('./', '');
1765
+ }
1766
+ } else {
1767
+ src = loginPage;
1768
+ }
1769
+ util.win.top.location.href = src;
1770
+ } else if (
1771
+ util.win.top.location.href.indexOf('main.html') > -1
1772
+ ) {
1773
+ util.win.top.location.href = './login.html';
1774
+ } else {
1775
+ const hash = util.win.top.location.hash;
1776
+ if (hash) {
1777
+ const len = util.win.top.location.href.indexOf(hash);
1778
+ util.win.top.location.href =
1779
+ util.win.location.href.slice(0, len) + '#/login';
1780
+ } else {
1781
+ util.win.top.location.href = '/login.html';
1782
+ }
1783
+ }
1784
+ } catch (error) {
1785
+ util.win.postMessage({ type: 1 }, '*');
1786
+ }
1787
+ }
1788
+ }
1789
+ })
1790
+ .catch((err) => {
1791
+ if (err.message && err.message !== 'canceled') {
1792
+ this.$message.error(err.message);
1793
+ }
1794
+ });
1795
+ })
1796
+ .catch((e) => {});
1797
+ },
1798
+ /**
1799
+ * @desc:主题、消息回调
1800
+ * @author huangbo
1801
+ * @date 2024年9月7日
1802
+ **/
1803
+ handleChange(res) {
1804
+ const { type, value } = res;
1805
+ switch (type) {
1806
+ case 'theme':
1807
+ this.setTheme(value);
1808
+ break;
1809
+ case 'ignore':
1810
+ this.notice = 0;
1811
+ break;
1812
+ }
1813
+ },
1814
+ /**
1815
+ * @desc:菜单布局样式切换
1816
+ * @author huangbo
1817
+ * @date 2024年9月7日
1818
+ **/
1819
+ handleLayout(res, active) {
1820
+ if (active) {
1821
+ localStorage.setItem('layout', active);
1822
+ }
1823
+ this.$emit('chang-layout', res, active);
1824
+ },
1825
+ /**
1826
+ * @desc:消息修改总数
1827
+ * @author huangbo
1828
+ * @date 2024年9月7日
1829
+ **/
1830
+ handleMenuTips(id, num) {
1831
+ if (num) {
1832
+ this.$set(this.menuTips, id, num);
1833
+ } else {
1834
+ let n = parseInt(this.menuTips[id], 10) - 1;
1835
+ this.$set(this.menuTips, id, n);
1836
+ }
1837
+ },
1838
+ /**
1839
+ * @desc:处理即时消息
1840
+ * @author huangbo
1841
+ * @date 2024年9月7日
1842
+ **/
1843
+ handleOpened(res) {
1844
+ if (res === undefined) {
1845
+ this.sysMsg = [];
1846
+ } else if (res == false && this.sysMsg.length) {
1847
+ this.sysMsgOut = setTimeout(() => {
1848
+ this.sysMsg = [];
1849
+ }, 3000);
1850
+ } else if (this.sysMsgOut) {
1851
+ clearTimeout(this.sysMsgOut);
1852
+ }
1853
+ },
1854
+ jumpMenu(res, close) {
1855
+ let apps = res;
1856
+ if (typeof res === 'string') {
1857
+ apps = res.split(',');
1858
+ }
1859
+ let obj = this.getMenu(this.menus, apps[apps.length - 1]);
1860
+ if (obj) {
1861
+ let i = util.indexOfObj(this.tabs, obj, 'id,code,appCode');
1862
+ let n = util.indexOfObj(this.tabs, this.activeName, 'id');
1863
+ let old = this.activeName;
1864
+ this.activeName = obj.id;
1865
+ if (i == -1) {
1866
+ let tab = this.setIframeType(obj);
1867
+ this.tabs.splice(n + 1, 0, tab);
1868
+ } else {
1869
+ let tab = this.tabs[i];
1870
+ if (tab.method === 'iframe') {
1871
+ this.$set(this.tabs[i], 'url', util.handlerUrl(tab.url));
1872
+ }
1873
+ if (tab.method === 'wujie' && tab.appCode) {
1874
+ window.document
1875
+ .querySelector(`iframe[name=${tab.appCode}]`)
1876
+ .contentWindow.location.reload(true);
1877
+ }
1878
+ if (tab.method === 'router') {
1879
+ this.$set(this.tabs[i], 'keys', util.uuid());
1880
+ }
1881
+ }
1882
+ if (close) {
1883
+ if (close === old) {
1884
+ this.tabs.splice(n, 0);
1885
+ } else {
1886
+ let d = util.indexOfObj(this.tabs, close, 'id,code,appCode');
1887
+ if (d > -1) {
1888
+ this.tabs.splice(d, 0);
1889
+ }
1890
+ }
1891
+ }
1892
+ } else {
1893
+ this.$message.error('没有此菜单!');
1894
+ }
1895
+ },
1896
+ //监听改变菜单
1897
+ handleListener() {
1898
+ util.win.addEventListener(
1899
+ 'message',
1900
+ (e) => {
1901
+ var msg = e.data;
1902
+ if (msg.key == 'jump_Menu') {
1903
+ let res = msg.data1;
1904
+ this.jumpMenu(res);
1905
+ }
1906
+ },
1907
+ false
1908
+ );
1909
+ },
1910
+ handleSelect(res, parent) {
1911
+ this.showSearch = false;
1912
+ if (parent.name === '应用') {
1913
+ this.handlerClickApps(res);
1914
+ }
1915
+ if (parent.name === '菜单') {
1916
+ this.handlerClickApp(res);
1917
+ }
1918
+ }
1919
+ },
1920
+ beforeDestroy() {
1921
+ clearTimeout(this.timer);
1922
+ this.timer = null;
1923
+ if (this.webSocket) {
1924
+ this.webSocket.destroy();
1925
+ }
1926
+ }
1927
+ };
1928
+ </script>
1929
+
1930
+ <style lang="scss" scoped></style>