@utogether/udp-core 2.0.0-beta.26 → 2.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/403-CyoOD-Ik.js +65 -0
  2. package/dist/404-Ch_OHTw0.js +65 -0
  3. package/dist/500-Cf9am7HK.js +67 -0
  4. package/dist/AuthorityInfo-BJ427cqG.js +4 -0
  5. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-D9y7AwbB.js +99 -0
  6. package/dist/AuthorityPanel-lVnZ5bce.js +4 -0
  7. package/dist/AuthorityPanel.vue_vue_type_style_index_0_lang-nsfhDlvV.js +113 -0
  8. package/dist/Company-qo-lKPkv.js +25 -0
  9. package/dist/CompanyPanel-DkKWAKvY.js +204 -0
  10. package/dist/DataSet-iBHzs75s.js +147 -0
  11. package/dist/Department-CHUQByKX.js +25 -0
  12. package/dist/DepartmentPanel-C742dfOO.js +248 -0
  13. package/dist/DesignPanel-D9oE5R7m.js +4 -0
  14. package/dist/DesignPanel.vue_vue_type_style_index_0_lang-hYldVEbo.js +1097 -0
  15. package/dist/DictView-CrFXprP9.js +110 -0
  16. package/dist/InvOrganization-Cz8SzIgs.js +73 -0
  17. package/dist/Org-Bzt6yKox.js +38 -0
  18. package/dist/Preview-jonigfMQ.js +48 -0
  19. package/dist/ReportDefine-BpiM5Ovq.js +10 -0
  20. package/dist/ReportDesign-fp09cXJ7.js +164 -0
  21. package/dist/ReportQuery-52ZP1PYP.js +74 -0
  22. package/dist/ReportQueryFrom-DSYavJb1.js +4 -0
  23. package/dist/ReportQueryFrom.vue_vue_type_style_index_0_lang-DBGYEp0u.js +177 -0
  24. package/dist/ReportTemplate-CA_UW0eD.js +161 -0
  25. package/dist/Role-DqOt8Bk0.js +25 -0
  26. package/dist/RoleAssign-BdxhefhQ.js +26 -0
  27. package/dist/RolePanel-2gZ3H0ET.js +4 -0
  28. package/dist/RolePanel-BsNd0svJ.js +4 -0
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DLOwgF99.js +152 -0
  30. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DmzD9kab.js +131 -0
  31. package/dist/ScrollPanel.vue_vue_type_style_index_0_lang-B9ptUMeI.js +99 -0
  32. package/dist/Staff-D3L8fEoY.js +26 -0
  33. package/dist/StaffInfo-DYRw6ZYJ.js +4 -0
  34. package/dist/StaffInfo.vue_vue_type_script_setup_true_lang-xqEOQnMs.js +107 -0
  35. package/dist/StaffPanel-DkrNH6Px.js +4 -0
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-BPBMnliy.js +152 -0
  37. package/dist/SysUser-Bl1-cIpJ.js +15 -0
  38. package/dist/SysUserPanel-yxNLaBwt.js +4 -0
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-BDcsgSl5.js +352 -0
  40. package/dist/SystemMenu-C4_Arn12.js +155 -0
  41. package/dist/UserInfo-QcNwJCUR.js +4 -0
  42. package/dist/UserInfo.vue_vue_type_style_index_0_lang-DLIeUphX.js +159 -0
  43. package/dist/childView-B23DEO2u.js +4 -0
  44. package/dist/childView-saDZQv9x.js +4 -0
  45. package/dist/childView.vue_vue_type_style_index_0_lang-RsKR6CAC.js +182 -0
  46. package/dist/childView.vue_vue_type_style_index_0_lang-ZFEfavUY.js +142 -0
  47. package/dist/code-rule-2_Ihx_by.js +147 -0
  48. package/dist/core.es.js +26 -6
  49. package/dist/cron-task-BFOPJQIk.js +134 -0
  50. package/dist/flow-task-PoDnE_kE.js +10 -0
  51. package/dist/frameView-f7Ya0Knj.js +43 -0
  52. package/dist/index-BpdTDaTk.js +3213 -0
  53. package/dist/layout-home-v3DPJ7rB.js +231 -0
  54. package/dist/layoutView-DZHoQDH1.js +3190 -0
  55. package/dist/log-in-BPAMJTwH.js +115 -0
  56. package/dist/log-out-DZACF0jg.js +129 -0
  57. package/dist/login-B8cwozax.js +216 -0
  58. package/dist/login-log-CVvRgZSu.js +70 -0
  59. package/dist/lov-view-Ba7Y7xy0.js +98 -0
  60. package/dist/menuInfo-BpRKFYK8.js +4 -0
  61. package/dist/menuInfo.vue_vue_type_style_index_0_lang-DJ5sUC6m.js +359 -0
  62. package/dist/pda-app-C0jJecrL.js +706 -0
  63. package/dist/redirect-DTz8GSnv.js +15 -0
  64. package/dist/resource-BG22Cw4P.js +97 -0
  65. package/dist/su-welcome-DaxhbrC6.js +879 -0
  66. package/dist/sys-config-CG2fMtak.js +384 -0
  67. package/dist/udp-core.css +1 -2
  68. package/dist/useNav-_u2UAQWk.js +84 -0
  69. package/dist/utogether-MlnyYtNS.js +4 -0
  70. package/dist/wecom-push-B75FLee5.js +70 -0
  71. package/index.ts +54 -50
  72. package/package.json +21 -21
  73. package/src/App.vue +79 -78
  74. package/src/api/http.ts +10 -4
  75. package/src/api/index.ts +51 -51
  76. package/src/api/user.ts +64 -64
  77. package/src/components/SuQrcode/src/index.tsx +231 -236
  78. package/src/components/udp/content/index.vue +93 -93
  79. package/src/components/udp/form-upload/form-upload.vue +496 -496
  80. package/src/components/udp/grid/index.vue +643 -544
  81. package/src/components/udp/index.ts +2 -1
  82. package/src/components/udp/modal-form/index.vue +326 -0
  83. package/src/components/udp/utils.ts +420 -420
  84. package/src/layout/components/lay-navbar/index.vue +240 -240
  85. package/src/layout/components/lay-panel/index.vue +2 -6
  86. package/src/layout/components/lay-search/components/SearchModal.vue +185 -181
  87. package/src/layout/components/lay-sidebar/mixNav.vue +261 -261
  88. package/src/layout/components/lay-sidebar/sidebarItem.vue +199 -195
  89. package/src/layout/components/lay-sidebar/vertical.vue +92 -92
  90. package/src/layout/layoutView.vue +1 -0
  91. package/src/main.ts +111 -109
  92. package/src/plugins/i18n/zh.ts +5 -1
  93. package/src/plugins/vxe-table/index.ts +116 -116
  94. package/src/router/index.ts +5 -34
  95. package/src/router/utils.ts +434 -430
  96. package/src/store/modules/permission.ts +1 -1
  97. package/src/store/modules/system.ts +193 -186
  98. package/src/style/print-lock.css +380 -375
  99. package/src/style/suprint.css +990 -985
  100. package/src/style/vxetable.scss +372 -364
  101. package/src/utils/authority/index.ts +19 -2
  102. package/src/utils/dataFormat/index.ts +309 -222
  103. package/src/utils/udp/http/index.ts +126 -67
  104. package/src/utils/udp/http/types.d.ts +15 -14
  105. package/src/views/login/login-view.vue +4 -21
  106. package/src/views/organization/department/DepartmentPanel.vue +3 -4
  107. package/src/views/system/sys/sys-config.vue +344 -344
  108. package/src/views/uhome/components/home-todo.vue +191 -178
  109. package/src/views/uhome/dynamic-card.vue +31 -31
  110. package/src/views/uhome/su-welcome.vue +310 -310
  111. package/src/views/ulogin/login.vue +292 -296
  112. package/src/views/urpt/design/DesignPanel.vue +538 -507
  113. package/src/views/urpt/design/print-data.ts +39 -59
  114. package/tsconfig.json +2 -3
  115. package/types/global.d.ts +234 -234
  116. package/vite.config.ts +2 -1
  117. package/dist/403-D6Wb3JJh.js +0 -72
  118. package/dist/404-B_HNbPNV.js +0 -72
  119. package/dist/500-BMemTTy1.js +0 -77
  120. package/dist/AuthorityInfo-6wHxwiFM.js +0 -91
  121. package/dist/AuthorityPanel-OqF_DvXA.js +0 -98
  122. package/dist/Company-BLXSfow0.js +0 -21
  123. package/dist/CompanyPanel-B4kRZ5Cg.js +0 -199
  124. package/dist/DataSet-CuGZcKC-.js +0 -141
  125. package/dist/Department-oFhsa7cd.js +0 -21
  126. package/dist/DepartmentPanel-B1UGpu-r.js +0 -242
  127. package/dist/DepartmentPanel-BL58AdoT.js +0 -2
  128. package/dist/DesignPanel-DmkFVw1N.js +0 -1196
  129. package/dist/DictView-CC5yMzOq.js +0 -100
  130. package/dist/File-WJXjGYxr.js +0 -89
  131. package/dist/InvOrganization-BwMmD8Ua.js +0 -76
  132. package/dist/Org-HgnOWubi.js +0 -76
  133. package/dist/Preview-CAzWxLmP.js +0 -45
  134. package/dist/ReIcon-DecitXmg.js +0 -413
  135. package/dist/ReportDefine-BgLM-Rjk.js +0 -10
  136. package/dist/ReportDesign-DwchGG2P.js +0 -158
  137. package/dist/ReportQuery-D5jaRJEn.js +0 -101
  138. package/dist/ReportQueryFrom-CNlmtYey.js +0 -198
  139. package/dist/ReportTemplate-CNcTmccs.js +0 -162
  140. package/dist/Role-Be8WfdCA.js +0 -21
  141. package/dist/RoleAssign-CtehGAUf.js +0 -22
  142. package/dist/RolePanel-CAwITg_q.js +0 -131
  143. package/dist/RolePanel-SN0FGFZ7.js +0 -176
  144. package/dist/ScrollPanel-DW30pGz1.js +0 -88
  145. package/dist/Staff-V2YsNKcj.js +0 -22
  146. package/dist/StaffInfo-CKRPW0r4.js +0 -149
  147. package/dist/StaffPanel-BxcgMg7u.js +0 -143
  148. package/dist/SysUser-Dxyj5w5m.js +0 -12
  149. package/dist/SysUserPanel-DI6CWcZo.js +0 -365
  150. package/dist/SystemMenu-BBHREM8T.js +0 -154
  151. package/dist/UserInfo-BMVQ0xwE.js +0 -194
  152. package/dist/_plugin-vue_export-helper-C6QCLu9I.js +0 -8
  153. package/dist/api-BFNxcxSN.js +0 -30
  154. package/dist/authority-BJFEUdrh.js +0 -20
  155. package/dist/await-to-js.es5-DkWYmPXW.js +0 -10
  156. package/dist/childView-BBjPEraB.js +0 -184
  157. package/dist/childView-DNqG2UVm.js +0 -181
  158. package/dist/code-rule-QFrhqFrW.js +0 -151
  159. package/dist/contant-Q77dU_V3.js +0 -4
  160. package/dist/cron-task-BpUDKEAU.js +0 -131
  161. package/dist/flow-task-DAc2NrDU.js +0 -11
  162. package/dist/frameView-Di0zJZUR.js +0 -39
  163. package/dist/layout-home-BVp7vYLR.js +0 -239
  164. package/dist/layoutView-B6Mx2ERA.js +0 -2662
  165. package/dist/log-in-BrNB0mLz.js +0 -117
  166. package/dist/log-out-dYfqvzy6.js +0 -111
  167. package/dist/login-D_Hjy3Jd.js +0 -231
  168. package/dist/login-log-CJak-ANA.js +0 -79
  169. package/dist/lov-view-DM5Nm5tW.js +0 -95
  170. package/dist/menuInfo-BlOY1KZW.js +0 -346
  171. package/dist/mitt-CQgI7DYU.js +0 -27
  172. package/dist/pda-app-CA7YI37u.js +0 -589
  173. package/dist/redirect-N0k4tImU.js +0 -16
  174. package/dist/resource-CfQTHFcs.js +0 -94
  175. package/dist/su-welcome-DVD3S_du.js +0 -799
  176. package/dist/sys-config-Ddb3vBpK.js +0 -316
  177. package/dist/system-Cm3lyBas.js +0 -1528
  178. package/dist/udp-core-DaQd5CF1.js +0 -2028
  179. package/dist/useDataThemeChange-DJ4K3VGp.js +0 -226
  180. package/dist/useNav-BhOJIdrJ.js +0 -106
  181. package/dist/utogether-l7JXs4Lv.js +0 -4
  182. package/dist/water-mark-WDQZ9YqB.js +0 -119
  183. package/dist/wecom-push-kWkAVRCj.js +0 -77
@@ -1,261 +1,261 @@
1
- <script setup lang="ts">
2
- import { ref, watch, toRaw, onMounted, nextTick } from 'vue';
3
- import { storageLocal } from '@utogether/utils';
4
- import OrgSelect from '../lay-select-org/index.vue';
5
- import Search from '../lay-search/index.vue';
6
- // import Notice from '../lay-notice/index.vue';
7
- import extraIcon from './extraIcon.vue';
8
- import avatars from '../../../assets/images/avatars.jpg';
9
- import { transformI18n } from '../../../plugins/i18n';
10
- import { useRenderIcon } from '../../../components/ReIcon/src/hooks';
11
- import { useEpThemeStoreHook } from '../../../store/modules/epTheme';
12
- import { getParentPaths, findRouteByPath } from '../../../router/utils';
13
- import { useNav } from '../../hooks/useNav';
14
- import { useTranslationLang } from '../../hooks/useTranslationLang';
15
- import { usePermissionStoreHook } from '../../../store/modules/permission';
16
- import globalization from '../../../assets/svg/globalization.svg?component';
17
- import { kSYSCONFIG } from '../../../contant';
18
-
19
- const menuRef = ref();
20
- const { route, locale, translationCh, translationEn } = useTranslationLang(menuRef);
21
-
22
- const {
23
- device,
24
- logout,
25
- onPanel,
26
- toggleSideBar,
27
- resolvePath,
28
- appHook,
29
- userInfo,
30
- getDivStyle,
31
- avatarsStyle,
32
- getDropdownItemStyle,
33
- getDropdownItemClass,
34
- passwordItems
35
- } = useNav();
36
-
37
- const refScrollbar = ref(null);
38
- const defaultActive = ref(null);
39
- const record: IRecord = {};
40
-
41
- const showModal = ref(false);
42
-
43
- const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
44
-
45
- function getDefaultActive(routePath) {
46
- const wholeMenus = usePermissionStoreHook().wholeMenus;
47
- // 当前路由的父级路径
48
- const parentRoutes = getParentPaths(routePath, wholeMenus)[0];
49
- defaultActive.value = findRouteByPath(parentRoutes, wholeMenus)?.children[0]?.path;
50
- }
51
-
52
- onMounted(() => {
53
- getDefaultActive(route.path);
54
- });
55
-
56
- nextTick(() => {
57
- menuRef.value?.handleResize();
58
- });
59
-
60
- watch(
61
- () => route.path,
62
- () => {
63
- getDefaultActive(route.path);
64
- }
65
- );
66
-
67
- const handleResetPwd = (): void => {
68
- record.id = userInfo['id'];
69
- showModal.value = true;
70
- };
71
-
72
- const handleScroll = e => {
73
- const wheelDelta = e.wheelDelta || -e.deltaY * 40;
74
- const scrollbar = refScrollbar.value;
75
- // scrollbar.wrap$获取到包裹容器的element对象
76
- scrollbar.setScrollLeft(scrollbar.wrapRef.scrollLeft + wheelDelta);
77
- };
78
- </script>
79
-
80
- <template>
81
- <div v-if="device !== 'mobile'" class="horizontal-header">
82
- <div
83
- :class="classes.container"
84
- :title="appHook.sidebar.opened ? $t('message.udp.collapse') : $t('message.udp.expand')"
85
- @click="toggleSideBar"
86
- >
87
- <svg
88
- :fill="useEpThemeStoreHook().fill"
89
- :class="['hamburger', appHook.sidebar.opened ? 'is-active-hamburger' : '']"
90
- viewBox="0 0 1024 1024"
91
- xmlns="http://www.w3.org/2000/svg"
92
- width="64"
93
- height="64"
94
- >
95
- <path
96
- d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
97
- />
98
- </svg>
99
- </div>
100
-
101
- <el-scrollbar ref="refScrollbar" style="max-width: 66%" @wheel.prevent="handleScroll">
102
- <template #default>
103
- <el-menu
104
- ref="menu"
105
- :default-active="defaultActive"
106
- :ellipsis="false"
107
- class="horizontal-header-menu"
108
- mode="horizontal"
109
- router
110
- >
111
- <el-menu-item
112
- v-for="route in usePermissionStoreHook().wholeMenus"
113
- :key="route.path"
114
- :index="resolvePath(route) || route.redirect"
115
- >
116
- <template #title>
117
- <div v-if="toRaw(route.meta.icon)" :class="['sub-menu-icon', route.meta.icon]">
118
- <component :is="useRenderIcon(route.meta && toRaw(route.meta.icon))" />
119
- </div>
120
- <!-- <span class="select-none">{{ transformI18n(route.meta.title) }}</span>
121
- <FontIcon
122
- v-if="route.meta.extraIcon"
123
- width="30px"
124
- height="30px"
125
- style="position: absolute; right: 10px"
126
- :icon="route.meta.extraIcon"
127
- :svg="route.meta.extraIcon ? true : false"
128
- /> -->
129
- <div :style="getDivStyle">
130
- <span class="select-none">
131
- {{ transformI18n(route.meta.title) }}
132
- </span>
133
- <extraIcon :extra-icon="route.meta.extraIcon" />
134
- </div>
135
- </template>
136
- </el-menu-item>
137
- </el-menu>
138
- </template>
139
- </el-scrollbar>
140
- <div class="horizontal-header-right">
141
- <!-- 业务单元选择 -->
142
- <OrgSelect v-if="sysConfig['orgTaggle'] === 'Y'" />
143
- <!-- 菜单搜索 -->
144
- <Search />
145
- <!-- 通知 -->
146
- <!-- <Notice id="header-notice" /> -->
147
- <!-- 国际化 -->
148
- <el-dropdown id="header-translation" trigger="click">
149
- <globalization class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden" />
150
- <template #dropdown>
151
- <el-dropdown-menu class="translation">
152
- <el-dropdown-item
153
- :style="getDropdownItemStyle(locale, 'zh')"
154
- :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
155
- @click="translationCh"
156
- >
157
- <span v-show="locale === 'zh'" class="check-zh">
158
- <IconifyIconOffline icon="ri:check-line" />
159
- </span>
160
- 简体中文
161
- </el-dropdown-item>
162
- <el-dropdown-item
163
- :style="getDropdownItemStyle(locale, 'en')"
164
- :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
165
- @click="translationEn"
166
- >
167
- <span v-show="locale === 'en'" class="check-en">
168
- <IconifyIconOffline icon="ri:check-line" />
169
- </span>
170
- English
171
- </el-dropdown-item>
172
- </el-dropdown-menu>
173
- </template>
174
- </el-dropdown>
175
- <!-- 退出登陆 -->
176
- <el-dropdown trigger="click">
177
- <span class="select-none el-dropdown-link navbar-bg-hover">
178
- <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
179
- <p class="dark:text-white">{{ userInfo.name }}</p>
180
- </span>
181
- <template #dropdown>
182
- <el-dropdown-menu class="logout">
183
- <el-dropdown-item @click="handleResetPwd">
184
- <IconifyIconOffline icon="ri:edit-2-fill" />
185
- {{ $t('message.udp.passwordReset') }}
186
- </el-dropdown-item>
187
- <el-divider style="margin: 3px 0 !important" />
188
- <el-dropdown-item @click="logout">
189
- <IconifyIconOffline icon="switch-button" />
190
- {{ $t('message.udp.logout') }}
191
- </el-dropdown-item>
192
- </el-dropdown-menu>
193
- </template>
194
- </el-dropdown>
195
- <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
196
- <IconifyIconOffline icon="ri:settings-5-fill" />
197
- </span>
198
- </div>
199
-
200
- <ut-modal-form
201
- v-if="showModal"
202
- :record="record"
203
- :items="passwordItems()"
204
- :width="360"
205
- :height="240"
206
- :title="$t('message.udp.passwordReset')"
207
- data-status="update"
208
- url="/uums/user/updatePwd"
209
- method="put"
210
- @close="showModal = false"
211
- @confirm="logout()"
212
- />
213
- </div>
214
- </template>
215
-
216
- <style module="classes" scoped>
217
- .container {
218
- padding: 0 15px;
219
- }
220
- </style>
221
-
222
- <style lang="scss" scoped>
223
- .hamburger {
224
- width: 20px;
225
- height: 20px;
226
-
227
- &:hover {
228
- cursor: pointer;
229
- }
230
- }
231
-
232
- .is-active-hamburger {
233
- transform: rotate(180deg);
234
- }
235
-
236
- .translation {
237
- ::v-deep(.el-dropdown-menu__item) {
238
- padding: 5px 40px;
239
- }
240
-
241
- .check-zh {
242
- position: absolute;
243
- left: 20px;
244
- }
245
-
246
- .check-en {
247
- position: absolute;
248
- left: 20px;
249
- }
250
- }
251
-
252
- .logout {
253
- max-width: 120px;
254
-
255
- ::v-deep(.el-dropdown-menu__item) {
256
- display: inline-flex;
257
- flex-wrap: wrap;
258
- min-width: 100%;
259
- }
260
- }
261
- </style>
1
+ <script setup lang="ts">
2
+ import { ref, watch, toRaw, onMounted, nextTick } from 'vue';
3
+ import { storageLocal } from '@utogether/utils';
4
+ import OrgSelect from '../lay-select-org/index.vue';
5
+ import Search from '../lay-search/index.vue';
6
+ // import Notice from '../lay-notice/index.vue';
7
+ import extraIcon from './extraIcon.vue';
8
+ import avatars from '../../../assets/images/avatars.jpg';
9
+ import { transformI18n } from '../../../plugins/i18n';
10
+ import { useRenderIcon } from '../../../components/ReIcon/src/hooks';
11
+ import { useEpThemeStoreHook } from '../../../store/modules/epTheme';
12
+ import { getParentPaths, findRouteByPath } from '../../../router/utils';
13
+ import { useNav } from '../../hooks/useNav';
14
+ import { useTranslationLang } from '../../hooks/useTranslationLang';
15
+ import { usePermissionStoreHook } from '../../../store/modules/permission';
16
+ import globalization from '../../../assets/svg/globalization.svg?component';
17
+ import { kSYSCONFIG } from '../../../contant';
18
+
19
+ const menuRef = ref();
20
+ const { route, locale, translationCh, translationEn } = useTranslationLang(menuRef);
21
+
22
+ const {
23
+ device,
24
+ logout,
25
+ onPanel,
26
+ toggleSideBar,
27
+ resolvePath,
28
+ appHook,
29
+ userInfo,
30
+ getDivStyle,
31
+ avatarsStyle,
32
+ getDropdownItemStyle,
33
+ getDropdownItemClass,
34
+ passwordItems
35
+ } = useNav();
36
+
37
+ const refScrollbar = ref(null);
38
+ const defaultActive = ref(null);
39
+ const record: IRecord = {};
40
+
41
+ const showModal = ref(false);
42
+
43
+ const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
44
+
45
+ function getDefaultActive(routePath) {
46
+ const wholeMenus = usePermissionStoreHook().wholeMenus;
47
+ // 当前路由的父级路径
48
+ const parentRoutes = getParentPaths(routePath, wholeMenus)[0];
49
+ defaultActive.value = findRouteByPath(parentRoutes, wholeMenus)?.children[0]?.path;
50
+ }
51
+
52
+ onMounted(() => {
53
+ getDefaultActive(route.path);
54
+ });
55
+
56
+ nextTick(() => {
57
+ menuRef.value?.handleResize();
58
+ });
59
+
60
+ watch(
61
+ () => route.path,
62
+ () => {
63
+ getDefaultActive(route.path);
64
+ }
65
+ );
66
+
67
+ const handleResetPwd = (): void => {
68
+ record.id = userInfo['id'];
69
+ showModal.value = true;
70
+ };
71
+
72
+ const handleScroll = e => {
73
+ const wheelDelta = e.wheelDelta || -e.deltaY * 40;
74
+ const scrollbar = refScrollbar.value;
75
+ // scrollbar.wrap$获取到包裹容器的element对象
76
+ scrollbar.setScrollLeft(scrollbar.wrapRef.scrollLeft + wheelDelta);
77
+ };
78
+ </script>
79
+
80
+ <template>
81
+ <div v-if="device !== 'mobile'" class="horizontal-header">
82
+ <div
83
+ :class="classes.container"
84
+ :title="appHook.sidebar.opened ? $t('message.udp.collapse') : $t('message.udp.expand')"
85
+ @click="toggleSideBar"
86
+ >
87
+ <svg
88
+ :fill="useEpThemeStoreHook().fill"
89
+ :class="['hamburger', appHook.sidebar.opened ? 'is-active-hamburger' : '']"
90
+ viewBox="0 0 1024 1024"
91
+ xmlns="http://www.w3.org/2000/svg"
92
+ width="64"
93
+ height="64"
94
+ >
95
+ <path
96
+ d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
97
+ />
98
+ </svg>
99
+ </div>
100
+
101
+ <el-scrollbar ref="refScrollbar" style="max-width: 66%" @wheel.prevent="handleScroll">
102
+ <template #default>
103
+ <el-menu
104
+ ref="menu"
105
+ :default-active="defaultActive"
106
+ :ellipsis="false"
107
+ class="horizontal-header-menu"
108
+ mode="horizontal"
109
+ router
110
+ >
111
+ <el-menu-item
112
+ v-for="route in usePermissionStoreHook().wholeMenus"
113
+ :key="route.path"
114
+ :index="resolvePath(route) || route.redirect"
115
+ >
116
+ <template #title>
117
+ <div v-if="toRaw(route.meta.icon)" :class="['sub-menu-icon', route.meta.icon]">
118
+ <component :is="useRenderIcon(route.meta && toRaw(route.meta.icon))" />
119
+ </div>
120
+ <!-- <span class="select-none">{{ transformI18n(route.meta.title) }}</span>
121
+ <FontIcon
122
+ v-if="route.meta.extraIcon"
123
+ width="30px"
124
+ height="30px"
125
+ style="position: absolute; right: 10px"
126
+ :icon="route.meta.extraIcon"
127
+ :svg="route.meta.extraIcon ? true : false"
128
+ /> -->
129
+ <div :style="getDivStyle">
130
+ <span class="select-none">
131
+ {{ transformI18n(route.meta.title) }}
132
+ </span>
133
+ <extraIcon :extra-icon="route.meta.extraIcon" />
134
+ </div>
135
+ </template>
136
+ </el-menu-item>
137
+ </el-menu>
138
+ </template>
139
+ </el-scrollbar>
140
+ <div class="horizontal-header-right">
141
+ <!-- 业务单元选择 -->
142
+ <OrgSelect v-if="sysConfig['orgTaggle'] === 'Y'" />
143
+ <!-- 菜单搜索 -->
144
+ <Search />
145
+ <!-- 通知 -->
146
+ <!-- <Notice id="header-notice" /> -->
147
+ <!-- 国际化 -->
148
+ <el-dropdown id="header-translation" trigger="click">
149
+ <globalization class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden" />
150
+ <template #dropdown>
151
+ <el-dropdown-menu class="translation">
152
+ <el-dropdown-item
153
+ :style="getDropdownItemStyle(locale, 'zh')"
154
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
155
+ @click="translationCh"
156
+ >
157
+ <span v-show="locale === 'zh'" class="check-zh">
158
+ <IconifyIconOffline icon="ri:check-line" />
159
+ </span>
160
+ 简体中文
161
+ </el-dropdown-item>
162
+ <el-dropdown-item
163
+ :style="getDropdownItemStyle(locale, 'en')"
164
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
165
+ @click="translationEn"
166
+ >
167
+ <span v-show="locale === 'en'" class="check-en">
168
+ <IconifyIconOffline icon="ri:check-line" />
169
+ </span>
170
+ English
171
+ </el-dropdown-item>
172
+ </el-dropdown-menu>
173
+ </template>
174
+ </el-dropdown>
175
+ <!-- 退出登陆 -->
176
+ <el-dropdown trigger="click">
177
+ <span class="select-none el-dropdown-link navbar-bg-hover">
178
+ <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
179
+ <p class="dark:text-white">{{ userInfo.name }}</p>
180
+ </span>
181
+ <template #dropdown>
182
+ <el-dropdown-menu class="logout">
183
+ <el-dropdown-item @click="handleResetPwd">
184
+ <IconifyIconOffline icon="ri:edit-2-fill" />
185
+ {{ $t('message.udp.passwordReset') }}
186
+ </el-dropdown-item>
187
+ <el-divider style="margin: 3px 0 !important" />
188
+ <el-dropdown-item @click="logout">
189
+ <IconifyIconOffline icon="switch-button" />
190
+ {{ $t('message.udp.logout') }}
191
+ </el-dropdown-item>
192
+ </el-dropdown-menu>
193
+ </template>
194
+ </el-dropdown>
195
+ <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
196
+ <IconifyIconOffline icon="ri:settings-5-fill" />
197
+ </span>
198
+ </div>
199
+
200
+ <ut-modal-form
201
+ v-if="showModal"
202
+ :record="record"
203
+ :items="passwordItems()"
204
+ :width="360"
205
+ :height="240"
206
+ :title="$t('message.udp.passwordReset')"
207
+ data-status="update"
208
+ url="/uums/user/updatePwd"
209
+ method="put"
210
+ @close="showModal = false"
211
+ @confirm="logout()"
212
+ />
213
+ </div>
214
+ </template>
215
+
216
+ <style module="classes" scoped>
217
+ .container {
218
+ padding: 0 15px;
219
+ }
220
+ </style>
221
+
222
+ <style lang="scss" scoped>
223
+ .hamburger {
224
+ width: 20px;
225
+ height: 20px;
226
+
227
+ &:hover {
228
+ cursor: pointer;
229
+ }
230
+ }
231
+
232
+ .is-active-hamburger {
233
+ transform: rotate(180deg);
234
+ }
235
+
236
+ .translation {
237
+ ::v-deep(.el-dropdown-menu__item) {
238
+ padding: 5px 40px;
239
+ }
240
+
241
+ .check-zh {
242
+ position: absolute;
243
+ left: 20px;
244
+ }
245
+
246
+ .check-en {
247
+ position: absolute;
248
+ left: 20px;
249
+ }
250
+ }
251
+
252
+ .logout {
253
+ max-width: 120px;
254
+
255
+ ::v-deep(.el-dropdown-menu__item) {
256
+ display: inline-flex;
257
+ flex-wrap: wrap;
258
+ min-width: 100%;
259
+ }
260
+ }
261
+ </style>