@utogether/udp-core 1.0.1-beta.3 → 1.0.1-beta.31

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 (165) hide show
  1. package/build/plugins.ts +3 -3
  2. package/dist/{403-BuP9jvH9.js → 403-DdjDWbkf.js} +1 -1
  3. package/dist/{404-DfQk8kKl.js → 404-D9vF2gFz.js} +1 -1
  4. package/dist/{500-OgROWdiZ.js → 500-mVaDmUjL.js} +1 -1
  5. package/dist/{AuthorityInfo-q2ksfkWH.js → AuthorityInfo-DOUJ_Zrj.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-B12sAzqt.js +100 -0
  7. package/dist/{Company-DgqowAxc.js → Company-DY__kM9F.js} +3 -3
  8. package/dist/{CompanyPanel-BNb1rUhD.js → CompanyPanel-C5N8QcMA.js} +17 -17
  9. package/dist/{Department-Cl8CROSU.js → Department-DsuDZdy5.js} +3 -3
  10. package/dist/{DepartmentPanel-D5VkqKeP.js → DepartmentPanel-CdwI7Rzu.js} +25 -25
  11. package/dist/{DesignPanel-BGvEusHC.js → DesignPanel-B50-g0TL.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BQF1uQ7w.js → DesignPanel.vue_vue_type_style_index_0_lang-KV8JOZ6v.js} +28 -30
  13. package/dist/DictView-Be2Z5Obk.js +110 -0
  14. package/dist/InvOrganization-Lui1q3Ou.js +74 -0
  15. package/dist/Org-qO5ExsPN.js +39 -0
  16. package/dist/{Preview-BaGmXH7r.js → Preview-Dq4dfV2D.js} +2 -2
  17. package/dist/{ReportDefine-DkQdBErt.js → ReportDefine-DH3FvbS1.js} +1 -1
  18. package/dist/{ReportDesign-DzB_A_G6.js → ReportDesign-Bou01Jbr.js} +43 -43
  19. package/dist/{ReportQuery-DRcMb6ya.js → ReportQuery-BBkmPPSw.js} +1 -1
  20. package/dist/{ReportQueryFrom-CeA9xhR4.js → ReportQueryFrom-BCY8lTJ7.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CgGtcs5V.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-CpktcM8J.js} +1 -1
  22. package/dist/{ReportTemplate-qaiTMQuT.js → ReportTemplate-C_yJXxQ-.js} +28 -28
  23. package/dist/{Role-DsFulAjq.js → Role-CTatYsrC.js} +6 -6
  24. package/dist/{RoleAssign-DMRdocpa.js → RoleAssign-Cqt3CelK.js} +9 -9
  25. package/dist/{RolePanel-wXVysDHM.js → RolePanel-C3JMpNu8.js} +1 -1
  26. package/dist/{RolePanel-B9POS_pg.js → RolePanel-brKRJIhD.js} +1 -1
  27. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DD8u9pq8.js +132 -0
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-CleVvkcY.js → RolePanel.vue_vue_type_script_setup_true_lang-i6Gq4r5B.js} +44 -38
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DlXUs0j9.js → ScrollPanel.vue_vue_type_style_index_0_lang-CiWKyjm3.js} +23 -23
  30. package/dist/{Staff-Cq4V7ruC.js → Staff-Cd3twQ6Y.js} +3 -3
  31. package/dist/{StaffInfo-CJDKMbud.js → StaffInfo-DJp0a0qd.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DQ4DL1KY.js → StaffInfo.vue_vue_type_script_setup_true_lang-Dp2AhJ4I.js} +16 -16
  33. package/dist/{StaffPanel-CG-uggdr.js → StaffPanel-B93hClzs.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DAgN7zN2.js → StaffPanel.vue_vue_type_script_setup_true_lang-CXjUzq7n.js} +2 -2
  35. package/dist/{SysUser-kwnzRNdD.js → SysUser-BvI6vaqI.js} +2 -2
  36. package/dist/{SysUserPanel-DTlZf3vk.js → SysUserPanel-C9V8X-Ek.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-bMqTui07.js +343 -0
  38. package/dist/{SystemMenu-BVT0n-L2.js → SystemMenu-D4WME5d0.js} +27 -27
  39. package/dist/{UserInfo-BbTQ9Zat.js → UserInfo-D-AfdfJs.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-D_bpYDmI.js → UserInfo.vue_vue_type_style_index_0_lang-C-JQYIxe.js} +41 -39
  41. package/dist/{childView-BJbIhjmf.js → childView--WMSo-wH.js} +1 -1
  42. package/dist/{childView-DCsGFrG-.js → childView-1MTl6Kaj.js} +1 -1
  43. package/dist/childView.vue_vue_type_style_index_0_lang-B8Losc4Y.js +170 -0
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-BCDxpVoD.js → childView.vue_vue_type_style_index_0_lang-BAVKNIXs.js} +1 -1
  45. package/dist/{code-rule-DePU6cdp.js → code-rule-D-RqrQB6.js} +42 -41
  46. package/dist/core.es.js +19 -10
  47. package/dist/{cron-task-DUM1SIGL.js → cron-task-D-X-KFZm.js} +11 -11
  48. package/dist/flow-task-B07st2aD.js +10 -0
  49. package/dist/{frameView-CEUTDtSm.js → frameView-MAW_-GHJ.js} +1 -1
  50. package/dist/index-Bc9vCX7z.js +2904 -0
  51. package/dist/{layoutView-PCjwVwkX.js → layoutView-De2QIEr2.js} +1639 -1629
  52. package/dist/{log-in-e7D5Ss1P.js → log-in-CpGqc33f.js} +5 -4
  53. package/dist/{log-out--RRncZhN.js → log-out-D1b4VRMZ.js} +30 -24
  54. package/dist/{login-log-CvVnyGi3.js → login-log-BNRXLeMi.js} +4 -3
  55. package/dist/login-rdZ0GPYc.js +249 -0
  56. package/dist/{lov-view-D8wwkxFJ.js → lov-view-Ao7LMspL.js} +5 -5
  57. package/dist/{menuInfo-B5JKVwrB.js → menuInfo-DmOcK6An.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-CcM9WX4n.js → menuInfo.vue_vue_type_style_index_0_lang-Ln-zFWV7.js} +121 -99
  59. package/dist/{pda-app-DIa1p1Ww.js → pda-app-DY63mQ2T.js} +202 -188
  60. package/dist/{resource-CCQ7Dd-5.js → resource-B21uV58T.js} +18 -18
  61. package/dist/{su-welcome-CLp9YaJa.js → su-welcome-DgjzJeDF.js} +122 -121
  62. package/dist/sys-config-DOtK2I32.js +370 -0
  63. package/dist/udp-core.css +1 -9
  64. package/dist/utogether-MlnyYtNS.js +4 -0
  65. package/index.ts +19 -6
  66. package/package.json +1 -1
  67. package/src/App.vue +65 -70
  68. package/src/api/http.ts +1 -4
  69. package/src/api/index.ts +5 -3
  70. package/src/api/user.ts +2 -2
  71. package/src/components/SuCharts/src/UserInfo.vue +3 -3
  72. package/src/components/SuScrollTree/ScrollPanel.vue +4 -9
  73. package/src/components/udp/content/index.vue +88 -0
  74. package/src/components/udp/form/form.vue +109 -0
  75. package/src/components/udp/{grid.vue → grid/index.vue} +524 -500
  76. package/src/components/udp/index.ts +4 -6
  77. package/src/components/udp/ut-stamp-badge/index.vue +272 -0
  78. package/src/components/udp/utils.ts +408 -379
  79. package/src/directives/permission/index.ts +1 -1
  80. package/src/layout/components/lay-navbar/index.vue +8 -6
  81. package/src/layout/components/lay-panel/index.vue +150 -150
  82. package/src/layout/components/lay-search/index.vue +1 -1
  83. package/src/layout/components/lay-select-org/index.vue +4 -9
  84. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  85. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  86. package/src/layout/components/lay-sidebar/sidebar-logo.vue +8 -12
  87. package/src/layout/components/lay-tag/index.vue +596 -625
  88. package/src/layout/hooks/useTag.ts +12 -18
  89. package/src/layout/types.ts +3 -2
  90. package/src/main.ts +115 -110
  91. package/src/plugins/i18n/en.ts +302 -291
  92. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  93. package/src/plugins/i18n/zh.ts +362 -338
  94. package/src/plugins/vxe-table/index.ts +116 -53
  95. package/src/plugins/vxe-table/render.tsx +183 -57
  96. package/src/router/index.ts +101 -97
  97. package/src/router/modules/flow.ts +35 -0
  98. package/src/router/modules/remaining.ts +1 -26
  99. package/src/router/utils.ts +50 -7
  100. package/src/store/modules/app.ts +1 -3
  101. package/src/store/modules/multiTags.ts +15 -14
  102. package/src/store/modules/permission.ts +25 -15
  103. package/src/store/modules/system.ts +1 -3
  104. package/src/style/button.scss +85 -85
  105. package/src/style/login.css +1 -1
  106. package/src/style/vxetable.scss +348 -258
  107. package/src/utils/authority/index.ts +1 -1
  108. package/src/utils/index.ts +3 -1
  109. package/src/utils/propTypes.ts +1 -6
  110. package/src/utils/{http → udp/http}/index.ts +27 -30
  111. package/src/utils/{http → udp/http}/types.d.ts +2 -6
  112. package/src/views/login/login-view.vue +6 -20
  113. package/src/views/organization/company/CompanyPanel.vue +259 -259
  114. package/src/views/organization/department/DepartmentPanel.vue +6 -20
  115. package/src/views/organization/inv-org/InvOrganization.vue +22 -7
  116. package/src/views/organization/org/Org.vue +9 -5
  117. package/src/views/system/cron/cron-task.vue +2 -12
  118. package/src/views/system/menu/SystemMenu.vue +185 -197
  119. package/src/views/system/menu/menuInfo.vue +384 -372
  120. package/src/views/system/role/AuthorityInfo.vue +19 -15
  121. package/src/views/system/role/Role.vue +1 -5
  122. package/src/views/system/role/RolePanel.vue +11 -2
  123. package/src/views/system/role/UserInfo.vue +11 -9
  124. package/src/views/system/role-assign/RoleAssign.vue +2 -2
  125. package/src/views/system/role-assign/RolePanel.vue +12 -9
  126. package/src/views/system/sys/sys-config.vue +70 -21
  127. package/src/views/system/sysUser/SysUserPanel.vue +132 -62
  128. package/src/views/uapp/pda/pda-app.vue +48 -16
  129. package/src/views/udev/coderule/code-rule.vue +132 -121
  130. package/src/views/udev/dict/DictView.vue +118 -106
  131. package/src/views/udev/dict/childView.vue +71 -111
  132. package/src/views/udev/lov/childView.vue +1 -7
  133. package/src/views/udev/lov/lov-view.vue +91 -91
  134. package/src/views/ufile/aggregation/File.vue +5 -5
  135. package/src/views/ufile/file/water-mark.vue +14 -14
  136. package/src/views/uhome/components/menu-favorite.vue +314 -331
  137. package/src/views/uhome/su-welcome.vue +3 -3
  138. package/src/views/ulogin/login.vue +19 -12
  139. package/src/views/upms/interface/log-in.vue +2 -8
  140. package/src/views/upms/interface/log-out.vue +2 -8
  141. package/src/views/upms/user/login-log.vue +2 -8
  142. package/src/views/urpt/design/DesignPanel.vue +16 -35
  143. package/src/views/urpt/design/Preview.vue +1 -0
  144. package/src/views/urpt/design/ReportDesign.vue +17 -23
  145. package/src/views/urpt/static-resource/resource.vue +3 -3
  146. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  147. package/src/views/utask/flow-task.vue +18 -0
  148. package/types/global.d.ts +4 -9
  149. package/vite.config.ts +2 -1
  150. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-Bwsf6lMH.js +0 -102
  151. package/dist/DictView-BnxfaOBv.js +0 -96
  152. package/dist/InvOrganization-5y79ZLdY.js +0 -66
  153. package/dist/Org-2oBAXN2r.js +0 -35
  154. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-t6S_0zmJ.js +0 -126
  155. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-BW6PlGjM.js +0 -288
  156. package/dist/childView.vue_vue_type_style_index_0_lang-CDtsalCm.js +0 -187
  157. package/dist/index-ZdgOD7cF.js +0 -3399
  158. package/dist/login-B1CjWVKu.js +0 -252
  159. package/dist/sys-config-BBmf_SqF.js +0 -277
  160. package/dist/utogether-Bkptx2lB.js +0 -182
  161. package/src/components/udp/form-upload.vue +0 -183
  162. package/src/components/udp/lov.vue +0 -410
  163. package/src/components/udp/modal-form.vue +0 -180
  164. package/src/components/udp/modal-grid.vue +0 -297
  165. package/src/utils/udp/useRender.ts +0 -420
@@ -1,258 +1,260 @@
1
- <script setup lang="ts">
2
- import { ref, watch, toRaw, onMounted, nextTick } from 'vue';
3
- import OrgSelect from '../lay-select-org/index.vue';
4
- import Search from '../lay-search/index.vue';
5
- // import Notice from '../lay-notice/index.vue';
6
- import extraIcon from './extraIcon.vue';
7
- import avatars from '../../../assets/images/avatars.jpg';
8
- import { transformI18n } from '../../../plugins/i18n';
9
- import { useRenderIcon } from '../../../components/ReIcon/src/hooks';
10
- import { useEpThemeStoreHook } from '../../../store/modules/epTheme';
11
- import { getParentPaths, findRouteByPath } from '../../../router/utils';
12
- import { useNav } from '../../hooks/useNav';
13
- import { useTranslationLang } from '../../hooks/useTranslationLang';
14
- import { usePermissionStoreHook } from '../../../store/modules/permission';
15
- import globalization from '../../../assets/svg/globalization.svg?component';
16
-
17
- const menuRef = ref();
18
- const { route, locale, translationCh, translationEn } = useTranslationLang(menuRef);
19
-
20
- const {
21
- device,
22
- logout,
23
- onPanel,
24
- toggleSideBar,
25
- resolvePath,
26
- appHook,
27
- userInfo,
28
- getDivStyle,
29
- avatarsStyle,
30
- getDropdownItemStyle,
31
- getDropdownItemClass,
32
- passwordItems
33
- } = useNav();
34
-
35
- const refScrollbar = ref(null);
36
- const defaultActive = ref(null);
37
- const record: IRecord = {};
38
-
39
- const showModal = ref(false);
40
-
41
- function getDefaultActive(routePath) {
42
- const wholeMenus = usePermissionStoreHook().wholeMenus;
43
- // 当前路由的父级路径
44
- const parentRoutes = getParentPaths(routePath, wholeMenus)[0];
45
- defaultActive.value = findRouteByPath(parentRoutes, wholeMenus)?.children[0]?.path;
46
- }
47
-
48
- onMounted(() => {
49
- getDefaultActive(route.path);
50
- });
51
-
52
- nextTick(() => {
53
- menuRef.value?.handleResize();
54
- });
55
-
56
- watch(
57
- () => route.path,
58
- () => {
59
- getDefaultActive(route.path);
60
- }
61
- );
62
-
63
- const handleResetPwd = (): void => {
64
- record.id = userInfo['id'];
65
- showModal.value = true;
66
- };
67
-
68
- const handleScroll = e => {
69
- const wheelDelta = e.wheelDelta || -e.deltaY * 40;
70
- const scrollbar = refScrollbar.value;
71
- // scrollbar.wrap$获取到包裹容器的element对象
72
- scrollbar.setScrollLeft(scrollbar.wrapRef.scrollLeft + wheelDelta);
73
- };
74
- </script>
75
-
76
- <template>
77
- <div v-if="device !== 'mobile'" class="horizontal-header">
78
- <div
79
- :class="classes.container"
80
- :title="appHook.sidebar.opened ? $t('message.udp.collapse') : $t('message.udp.expand')"
81
- @click="toggleSideBar"
82
- >
83
- <svg
84
- :fill="useEpThemeStoreHook().fill"
85
- :class="['hamburger', appHook.sidebar.opened ? 'is-active-hamburger' : '']"
86
- viewBox="0 0 1024 1024"
87
- xmlns="http://www.w3.org/2000/svg"
88
- width="64"
89
- height="64"
90
- >
91
- <path
92
- 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"
93
- />
94
- </svg>
95
- </div>
96
-
97
- <el-scrollbar ref="refScrollbar" style="max-width: 66%" @wheel.prevent="handleScroll">
98
- <template #default>
99
- <el-menu
100
- ref="menu"
101
- :default-active="defaultActive"
102
- :ellipsis="false"
103
- class="horizontal-header-menu"
104
- mode="horizontal"
105
- router
106
- >
107
- <el-menu-item
108
- v-for="route in usePermissionStoreHook().wholeMenus"
109
- :key="route.path"
110
- :index="resolvePath(route) || route.redirect"
111
- >
112
- <template #title>
113
- <div v-if="toRaw(route.meta.icon)" :class="['sub-menu-icon', route.meta.icon]">
114
- <component :is="useRenderIcon(route.meta && toRaw(route.meta.icon))" />
115
- </div>
116
- <!-- <span class="select-none">{{ transformI18n(route.meta.title) }}</span>
117
- <FontIcon
118
- v-if="route.meta.extraIcon"
119
- width="30px"
120
- height="30px"
121
- style="position: absolute; right: 10px"
122
- :icon="route.meta.extraIcon"
123
- :svg="route.meta.extraIcon ? true : false"
124
- /> -->
125
- <div :style="getDivStyle">
126
- <span class="select-none">
127
- {{ transformI18n(route.meta.title) }}
128
- </span>
129
- <extraIcon :extra-icon="route.meta.extraIcon" />
130
- </div>
131
- </template>
132
- </el-menu-item>
133
- </el-menu>
134
- </template>
135
- </el-scrollbar>
136
- <div class="horizontal-header-right">
137
- <!-- 业务单元选择 -->
138
- <OrgSelect />
139
- <!-- 菜单搜索 -->
140
- <Search />
141
- <!-- 通知 -->
142
- <!-- <Notice id="header-notice" /> -->
143
- <!-- 国际化 -->
144
- <el-dropdown id="header-translation" trigger="click">
145
- <globalization
146
- class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden"
147
- />
148
- <template #dropdown>
149
- <el-dropdown-menu class="translation">
150
- <el-dropdown-item
151
- :style="getDropdownItemStyle(locale, 'zh')"
152
- :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
153
- @click="translationCh"
154
- >
155
- <span v-show="locale === 'zh'" class="check-zh">
156
- <IconifyIconOffline icon="ri:check-line" />
157
- </span>
158
- 简体中文
159
- </el-dropdown-item>
160
- <el-dropdown-item
161
- :style="getDropdownItemStyle(locale, 'en')"
162
- :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
163
- @click="translationEn"
164
- >
165
- <span v-show="locale === 'en'" class="check-en">
166
- <IconifyIconOffline icon="ri:check-line" />
167
- </span>
168
- English
169
- </el-dropdown-item>
170
- </el-dropdown-menu>
171
- </template>
172
- </el-dropdown>
173
- <!-- 退出登陆 -->
174
- <el-dropdown trigger="click">
175
- <span class="select-none el-dropdown-link navbar-bg-hover">
176
- <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
177
- <p class="dark:text-white">{{ userInfo.name }}</p>
178
- </span>
179
- <template #dropdown>
180
- <el-dropdown-menu class="logout">
181
- <el-dropdown-item @click="handleResetPwd">
182
- <IconifyIconOffline icon="ri:edit-2-fill" />
183
- {{ $t('message.udp.passwordReset') }}
184
- </el-dropdown-item>
185
- <el-divider style="margin: 3px 0 !important" />
186
- <el-dropdown-item @click="logout">
187
- <IconifyIconOffline icon="switch-button" />
188
- {{ $t('message.udp.logout') }}
189
- </el-dropdown-item>
190
- </el-dropdown-menu>
191
- </template>
192
- </el-dropdown>
193
- <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
194
- <IconifyIconOffline icon="ri:settings-5-fill" />
195
- </span>
196
- </div>
197
-
198
- <ut-modal-form
199
- v-if="showModal"
200
- :record="record"
201
- :items="passwordItems()"
202
- :width="360"
203
- :height="240"
204
- :title="$t('message.udp.passwordReset')"
205
- data-status="update"
206
- url="/uums/user/updatePwd"
207
- method="put"
208
- @close="showModal = false"
209
- />
210
- </div>
211
- </template>
212
-
213
- <style module="classes" scoped>
214
- .container {
215
- padding: 0 15px;
216
- }
217
- </style>
218
-
219
- <style lang="scss" scoped>
220
- .hamburger {
221
- width: 20px;
222
- height: 20px;
223
-
224
- &:hover {
225
- cursor: pointer;
226
- }
227
- }
228
-
229
- .is-active-hamburger {
230
- transform: rotate(180deg);
231
- }
232
-
233
- .translation {
234
- ::v-deep(.el-dropdown-menu__item) {
235
- padding: 5px 40px;
236
- }
237
-
238
- .check-zh {
239
- position: absolute;
240
- left: 20px;
241
- }
242
-
243
- .check-en {
244
- position: absolute;
245
- left: 20px;
246
- }
247
- }
248
-
249
- .logout {
250
- max-width: 120px;
251
-
252
- ::v-deep(.el-dropdown-menu__item) {
253
- display: inline-flex;
254
- flex-wrap: wrap;
255
- min-width: 100%;
256
- }
257
- }
258
- </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
+ />
212
+ </div>
213
+ </template>
214
+
215
+ <style module="classes" scoped>
216
+ .container {
217
+ padding: 0 15px;
218
+ }
219
+ </style>
220
+
221
+ <style lang="scss" scoped>
222
+ .hamburger {
223
+ width: 20px;
224
+ height: 20px;
225
+
226
+ &:hover {
227
+ cursor: pointer;
228
+ }
229
+ }
230
+
231
+ .is-active-hamburger {
232
+ transform: rotate(180deg);
233
+ }
234
+
235
+ .translation {
236
+ ::v-deep(.el-dropdown-menu__item) {
237
+ padding: 5px 40px;
238
+ }
239
+
240
+ .check-zh {
241
+ position: absolute;
242
+ left: 20px;
243
+ }
244
+
245
+ .check-en {
246
+ position: absolute;
247
+ left: 20px;
248
+ }
249
+ }
250
+
251
+ .logout {
252
+ max-width: 120px;
253
+
254
+ ::v-deep(.el-dropdown-menu__item) {
255
+ display: inline-flex;
256
+ flex-wrap: wrap;
257
+ min-width: 100%;
258
+ }
259
+ }
260
+ </style>
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-11-17 16:02:30
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-17 17:15:15
5
+ * @LastEditTime: 2025-11-18 11:52:49
6
6
  * @Description: file content
7
7
  -->
8
8
  <script setup lang="ts">
@@ -18,25 +18,19 @@ const props = defineProps({
18
18
  const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
19
19
 
20
20
  const title = sysConfig['title'];
21
+ const showTitle = sysConfig['showTitle'];
21
22
  const logo = ref(sysConfig['logo'] || utogether);
22
- // console.log(logo);
23
23
  </script>
24
24
 
25
25
  <template>
26
26
  <div class="sidebar-logo-container" :class="{ collapses: props.collapse }">
27
27
  <transition name="sidebarLogoFade">
28
- <router-link
29
- v-if="props.collapse"
30
- key="props.collapse"
31
- :title="title"
32
- class="sidebar-logo-link"
33
- to="/"
34
- >
28
+ <router-link v-if="props.collapse" key="props.collapse" :title="title" class="sidebar-logo-link" to="/">
35
29
  <img :src="logo" class="ut-collapse-img ut-sidebar-logo" />
36
30
  </router-link>
37
31
  <router-link v-else key="expand" :title="title" class="sidebar-logo-link" to="/">
38
32
  <img :src="logo" class="ut-sidebar-logo h-10" />
39
- <span class="sidebar-title">{{ title }}</span>
33
+ <span v-if="showTitle === 'Y'" class="sidebar-title">{{ title }}</span>
40
34
  </router-link>
41
35
  </transition>
42
36
  </div>
@@ -69,9 +63,11 @@ const logo = ref(sysConfig['logo'] || utogether);
69
63
  }
70
64
 
71
65
  .sidebar-title {
72
- display: block;
73
- // width: 140px;
66
+ display: flex;
67
+ align-items: end;
68
+ // he: 140px;
74
69
  // margin-top: 10px;
70
+ height: 100%;
75
71
  margin-left: 10px;
76
72
  overflow: hidden;
77
73
  text-overflow: ellipsis;