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