@utogether/udp-core 1.0.1-beta.10 → 1.0.1-beta.12

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 (84) hide show
  1. package/dist/{403-Ctxjn4q8.js → 403-D7L5zm05.js} +1 -1
  2. package/dist/{404-W5yzyiZ9.js → 404-BQKzkK5W.js} +1 -1
  3. package/dist/{500-DXuGEOm4.js → 500-BM6k8XR5.js} +1 -1
  4. package/dist/{AuthorityInfo-C2tflCt8.js → AuthorityInfo-Dc-7W4L_.js} +1 -1
  5. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-SVgy3HX7.js → AuthorityInfo.vue_vue_type_style_index_0_lang-CKvlh3lm.js} +1 -1
  6. package/dist/{Company-PLez5GoH.js → Company-BgwMUr-I.js} +3 -3
  7. package/dist/{CompanyPanel-CIGaQooL.js → CompanyPanel-CDfVCPKC.js} +1 -1
  8. package/dist/{Department-B9wLsXFm.js → Department-CFvEB4Ys.js} +3 -3
  9. package/dist/{DepartmentPanel-DSM4lTaz.js → DepartmentPanel-11Ytcj2u.js} +1 -1
  10. package/dist/{DesignPanel-B6a9wW_A.js → DesignPanel-CP8z6teZ.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DtHfoDQk.js → DesignPanel.vue_vue_type_style_index_0_lang-Cp-WR8yE.js} +2 -2
  12. package/dist/{DictView-DhFbQxdJ.js → DictView-13NoDgPW.js} +1 -1
  13. package/dist/InvOrganization-DOD4QdEX.js +72 -0
  14. package/dist/{Org-DxBkYabD.js → Org-cezJs-6P.js} +1 -1
  15. package/dist/{Preview-BFtRpBxw.js → Preview-DzOKwnp8.js} +1 -1
  16. package/dist/{ReportDefine-BIa2QryC.js → ReportDefine-DWJq2q0f.js} +1 -1
  17. package/dist/{ReportDesign-CnyjI-WD.js → ReportDesign-f_ed8u_q.js} +2 -2
  18. package/dist/{ReportQuery-BiK7yEhV.js → ReportQuery-D58gv_yZ.js} +1 -1
  19. package/dist/{ReportQueryFrom-C2rqdFTm.js → ReportQueryFrom-R0R6EbYv.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-Ba9HLnXQ.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-CIFpgUAH.js} +1 -1
  21. package/dist/{ReportTemplate-DdkLscP3.js → ReportTemplate-BTknctTT.js} +1 -1
  22. package/dist/{Role-BrsxgK8D.js → Role-QTDJ16h8.js} +3 -3
  23. package/dist/{RoleAssign-DiqwJqDa.js → RoleAssign-7aZ3ufp5.js} +3 -3
  24. package/dist/{RolePanel-Dqx5dI3f.js → RolePanel-CSe-UoR5.js} +1 -1
  25. package/dist/{RolePanel-BDusGyo7.js → RolePanel-XXwmaAgy.js} +1 -1
  26. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-2Z1q_5uW.js → RolePanel.vue_vue_type_script_setup_true_lang-BsNhkvFo.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-B5lUnaMI.js → RolePanel.vue_vue_type_script_setup_true_lang-kConrKpo.js} +3 -3
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-vSP23fEq.js → ScrollPanel.vue_vue_type_style_index_0_lang-DtaqM_iA.js} +1 -1
  29. package/dist/{Staff-Cwi9LQiZ.js → Staff-BsREgfrQ.js} +3 -3
  30. package/dist/{StaffInfo-XjVtyaMv.js → StaffInfo-CQtVXfvS.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-wSrAuyet.js → StaffInfo.vue_vue_type_script_setup_true_lang-BRRtcGIH.js} +1 -1
  32. package/dist/{StaffPanel-C-wYcFdv.js → StaffPanel-cQTAulcP.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DZNArmnC.js → StaffPanel.vue_vue_type_script_setup_true_lang-BLeXlrI1.js} +2 -2
  34. package/dist/{SysUser-O4tvr-Ur.js → SysUser-DN5_46io.js} +2 -2
  35. package/dist/{SysUserPanel-B853docZ.js → SysUserPanel-DTBNR42y.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-DhiYYC97.js → SysUserPanel.vue_vue_type_script_setup_true_lang-CF2pHcPP.js} +1 -1
  37. package/dist/{SystemMenu-CXR6mrXr.js → SystemMenu-D9TKZwgb.js} +2 -2
  38. package/dist/{UserInfo-BkP8pE2a.js → UserInfo-DJ5LRTMe.js} +1 -1
  39. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-D4r_umjV.js → UserInfo.vue_vue_type_style_index_0_lang-CIpPef_S.js} +1 -1
  40. package/dist/{childView-D0HwbgDT.js → childView-CGZSd19y.js} +1 -1
  41. package/dist/{childView-TRqUkSDC.js → childView-DrL_Qi-q.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-BzISq0Jf.js → childView.vue_vue_type_style_index_0_lang-B8wEeuFX.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-DQRgNsJY.js → childView.vue_vue_type_style_index_0_lang-D2AzjPNV.js} +1 -1
  44. package/dist/{code-rule-BV7PQWhK.js → code-rule-DVEoh1Z4.js} +1 -1
  45. package/dist/core.es.js +1 -1
  46. package/dist/{cron-task-9ZS9bi7K.js → cron-task-BBpccUV_.js} +1 -1
  47. package/dist/{frameView-DE83AN50.js → frameView-Cw6_EqfJ.js} +1 -1
  48. package/dist/index-BAkwQh8m.js +4467 -0
  49. package/dist/{layoutView-D1U-c4By.js → layoutView-CL2Ef3bw.js} +1187 -1183
  50. package/dist/{login-sPCEiTGT.js → login-BDocwo7t.js} +115 -108
  51. package/dist/{lov-view-76NcYTYl.js → lov-view-R8nnUEbA.js} +2 -2
  52. package/dist/{menuInfo-CxjfjFpm.js → menuInfo-B-nGOcSv.js} +1 -1
  53. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-C2qahH3r.js → menuInfo.vue_vue_type_style_index_0_lang-1VuzxMb0.js} +1 -1
  54. package/dist/{pda-app-BUH16bLj.js → pda-app-D5wBClj0.js} +1 -1
  55. package/dist/{resource-CCuHzoA6.js → resource-BXGSsXzw.js} +1 -1
  56. package/dist/{su-welcome-mRArONsd.js → su-welcome-DISZAkBB.js} +1 -1
  57. package/dist/sys-config-DuyYdzXL.js +290 -0
  58. package/dist/udp-core.css +2 -2
  59. package/dist/{utogether-Dm_VBQHR.js → utogether-C2KGHvut.js} +1 -1
  60. package/package.json +18 -18
  61. package/src/api/index.ts +31 -31
  62. package/src/components/udp/form.vue +2 -2
  63. package/src/components/udp/modal-form.vue +2 -1
  64. package/src/components/udp/modal-grid.vue +11 -1
  65. package/src/layout/components/lay-navbar/index.vue +239 -237
  66. package/src/layout/components/lay-search/index.vue +1 -1
  67. package/src/layout/components/lay-select-org/index.vue +64 -69
  68. package/src/layout/components/lay-sidebar/horizontal.vue +190 -191
  69. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  70. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -98
  71. package/src/layout/hooks/useNav.ts +173 -173
  72. package/src/main.ts +119 -119
  73. package/src/plugins/i18n/zh.ts +1 -0
  74. package/src/router/index.ts +3 -13
  75. package/src/store/modules/permission.ts +1 -4
  76. package/src/utils/propTypes.ts +42 -47
  77. package/src/utils/udp/http/index.ts +283 -281
  78. package/src/views/login/login-view.vue +300 -314
  79. package/src/views/organization/inv-org/InvOrganization.vue +68 -53
  80. package/src/views/system/sys/sys-config.vue +287 -291
  81. package/src/views/ulogin/login.vue +3 -4
  82. package/dist/InvOrganization-D90AbR3b.js +0 -66
  83. package/dist/index-DVARtten.js +0 -2623
  84. package/dist/sys-config-Cvt05yF6.js +0 -277
@@ -16,7 +16,7 @@ function handleSearch() {
16
16
 
17
17
  <template>
18
18
  <div
19
- class="search-container w-[40px] h-[48px] flex justify-center items-center cursor-pointer navbar-bg-hover"
19
+ class="search-container w-[40px] h-[48px] px-2 flex justify-center items-center cursor-pointer navbar-bg-hover"
20
20
  @click="handleSearch"
21
21
  >
22
22
  <IconifyIconOffline icon="ri:search-line" />
@@ -1,69 +1,64 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2021-11-27 16:16:11
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-16 14:27:14
6
- * @Description: file content
7
- -->
8
-
9
- <!-- 业务单元选择 -->
10
- <template>
11
- <div style="width: 240px">
12
- <el-select v-model="orgId" size="small" @change="onChange">
13
- <el-option
14
- v-for="element in orgList"
15
- :key="element.id"
16
- :label="element.orgName"
17
- :value="element.id"
18
- />
19
- </el-select>
20
- </div>
21
- </template>
22
-
23
- <script lang="ts">
24
- export default { name: 'OrgSelect' };
25
- </script>
26
-
27
- <script setup lang="ts">
28
- import { unref, computed } from 'vue';
29
- import to from 'await-to-js';
30
- import { getServiceApi } from '../../../api';
31
- import { useRoute, useRouter } from 'vue-router';
32
- import { cookies } from '@utogether/utils';
33
- import { useSystemStoreHook } from '../../../store/modules/system';
34
- import { usePermissionStoreHook } from '../../../store/modules/permission';
35
-
36
- const route = useRoute();
37
- const router = useRouter();
38
- const orgList = computed(() => useSystemStoreHook().getOrglist);
39
- const orgId = computed(() => useSystemStoreHook().getOrgId);
40
-
41
- const onChange = async orgId => {
42
- const [err] = await to(getServiceApi().post('/uums/org/toggle', { orgId }));
43
- if (!err) {
44
- useSystemStoreHook().setOrgId(orgId);
45
- let organizationId;
46
- const query = { pageSize: 100, pageNum: 1 };
47
- const [err, data]: [Error, any] = await to(getServiceApi().get('/uums/cusOrganization', query));
48
- if (!err && data.list?.length) {
49
- useSystemStoreHook().setInvOrgList(data.list || []);
50
- const invOrg = data.list.find(f => f.orgId === orgId);
51
- organizationId = invOrg.id;
52
- useSystemStoreHook().setOrganizationId(organizationId);
53
- }
54
- const param = { orgId, organizationId };
55
- cookies.set('kCookies_param', JSON.stringify(param));
56
- usePermissionStoreHook().cacheOperate({ mode: 'reset' });
57
- onFresh();
58
- }
59
- };
60
-
61
- /** 刷新路由 */
62
- function onFresh() {
63
- const { fullPath, query } = unref(route);
64
- router.replace({
65
- path: '/redirect' + fullPath,
66
- query: query
67
- });
68
- }
69
- </script>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-27 16:16:11
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-04-16 14:27:14
6
+ * @Description: file content
7
+ -->
8
+
9
+ <!-- 业务单元选择 -->
10
+ <template>
11
+ <div style="width: 240px">
12
+ <el-select v-model="orgId" size="small" @change="onChange">
13
+ <el-option v-for="element in orgList" :key="element.id" :label="element.orgName" :value="element.id" />
14
+ </el-select>
15
+ </div>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ export default { name: 'OrgSelect' };
20
+ </script>
21
+
22
+ <script setup lang="ts">
23
+ import { unref, computed } from 'vue';
24
+ import to from 'await-to-js';
25
+ import { getServiceApi } from '../../../api';
26
+ import { useRoute, useRouter } from 'vue-router';
27
+ import { cookies } from '@utogether/utils';
28
+ import { useSystemStoreHook } from '../../../store/modules/system';
29
+ import { usePermissionStoreHook } from '../../../store/modules/permission';
30
+
31
+ const route = useRoute();
32
+ const router = useRouter();
33
+ const orgList = computed(() => useSystemStoreHook().getOrglist);
34
+ const orgId = computed(() => useSystemStoreHook().getOrgId);
35
+
36
+ const onChange = async orgId => {
37
+ const [err] = await to(getServiceApi().post('/uums/org/toggle', { orgId }));
38
+ if (!err) {
39
+ useSystemStoreHook().setOrgId(orgId);
40
+ let organizationId;
41
+ const query = { pageSize: 100, pageNum: 1 };
42
+ const [err, data]: [Error, any] = await to(getServiceApi().get('/uums/cusOrganization', query));
43
+ if (!err && data.list?.length) {
44
+ useSystemStoreHook().setInvOrgList(data.list || []);
45
+ const invOrg = data.list.find(f => f.orgId === orgId);
46
+ organizationId = invOrg.id;
47
+ useSystemStoreHook().setOrganizationId(organizationId);
48
+ }
49
+ const param = { orgId, organizationId };
50
+ cookies.set('kCookies_param', JSON.stringify(param));
51
+ usePermissionStoreHook().cacheOperate({ mode: 'reset' });
52
+ onFresh();
53
+ }
54
+ };
55
+
56
+ /** 刷新路由 */
57
+ function onFresh() {
58
+ const { fullPath, query } = unref(route);
59
+ router.replace({
60
+ path: '/redirect' + fullPath,
61
+ query: query
62
+ });
63
+ }
64
+ </script>
@@ -1,191 +1,190 @@
1
- <script setup lang="ts">
2
- import { ref, nextTick } from 'vue';
3
- import { storageLocal } from '@utogether/utils';
4
- import { useNav } from '../../hooks/useNav';
5
- import OrgSelect from '../lay-select-org/index.vue';
6
- import Search from '../lay-search/index.vue';
7
- // import Notice from '../lay-notice/index.vue';
8
- import SidebarItem from './sidebarItem.vue';
9
- import avatars from '../../../assets/images/avatars.jpg';
10
- import { kSYSCONFIG } from '../../../contant';
11
- import { useTranslationLang } from '../../hooks/useTranslationLang';
12
- import globalization from '../../../assets/svg/globalization.svg?component';
13
-
14
- import utogether from '../../../assets/images/utogether.png';
15
- import { usePermissionStoreHook } from '../../../store/modules/permission';
16
-
17
- const menuRef = ref();
18
- const { route, locale, translationCh, translationEn } = useTranslationLang(menuRef);
19
- const routeStore = usePermissionStoreHook();
20
-
21
- const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
22
-
23
- const logo = ref(sysConfig['logo'] || utogether);
24
- const {
25
- title,
26
- logout,
27
- backHome,
28
- onPanel,
29
- userInfo,
30
- avatarsStyle,
31
- getDropdownItemStyle,
32
- getDropdownItemClass,
33
- passwordItems
34
- } = useNav();
35
-
36
- const record: IRecord = {};
37
-
38
- const refScrollbar = ref(null);
39
- const showModal = ref(false);
40
-
41
- nextTick(() => {
42
- menuRef.value?.handleResize();
43
- });
44
-
45
- /**
46
- * @description: 重置密码
47
- */
48
- const handleResetPwd = (): void => {
49
- record.id = userInfo['id'];
50
- showModal.value = true;
51
- };
52
-
53
- const handleScroll = e => {
54
- const wheelDelta = e.wheelDelta || -e.deltaY * 40;
55
- const scrollbar = refScrollbar.value;
56
- // scrollbar.wrap$获取到包裹容器的element对象
57
- scrollbar.setScrollLeft(scrollbar.wrapRef.scrollLeft + wheelDelta);
58
- };
59
- </script>
60
- <script lang="ts">
61
- export default { name: 'LayoutHorizontal' };
62
- </script>
63
- <template>
64
- <div v-spinning="usePermissionStoreHook().wholeMenus.length === 0" class="horizontal-header">
65
- <div class="flex flex-1 horizontal-header-left" @click="backHome">
66
- <img :src="logo" class="h-full" />
67
- <span class="text-xl u-project-text">{{ title }}</span>
68
- </div>
69
- <el-scrollbar ref="refScrollbar" class="flex-[3]" @wheel.prevent="handleScroll">
70
- <template #default>
71
- <el-menu
72
- :default-active="route.path"
73
- :ellipsis="false"
74
- unique-opened
75
- router
76
- popper-class="udp-scrollbar"
77
- class="horizontal-header-menu"
78
- mode="horizontal"
79
- >
80
- <sidebar-item
81
- v-for="route in routeStore.wholeMenus"
82
- :key="route.path"
83
- :item="route"
84
- :base-path="route.path"
85
- />
86
- </el-menu>
87
- </template>
88
- </el-scrollbar>
89
- <div class="horizontal-header-right flex-[2]">
90
- <!-- 业务单元选择 -->
91
- <OrgSelect class="udp-horizontal" />
92
- <!-- 菜单搜索 -->
93
- <Search />
94
- <!-- 通知 -->
95
- <!-- <Notice id="header-notice" /> -->
96
- <!-- 国际化 -->
97
- <el-dropdown id="header-translation" trigger="click">
98
- <globalization
99
- class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden"
100
- />
101
- <template #dropdown>
102
- <el-dropdown-menu class="translation">
103
- <el-dropdown-item
104
- :style="getDropdownItemStyle(locale, 'zh')"
105
- :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
106
- @click="translationCh"
107
- >
108
- <span v-show="locale === 'zh'" class="check-zh">
109
- <IconifyIconOffline icon="check" />
110
- </span>
111
- 简体中文
112
- </el-dropdown-item>
113
- <el-dropdown-item
114
- :style="getDropdownItemStyle(locale, 'en')"
115
- :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
116
- @click="translationEn"
117
- >
118
- <span v-show="locale === 'en'" class="check-en">
119
- <IconifyIconOffline icon="check" />
120
- </span>
121
- English
122
- </el-dropdown-item>
123
- </el-dropdown-menu>
124
- </template>
125
- </el-dropdown>
126
- <!-- 退出登录 -->
127
- <el-dropdown trigger="click">
128
- <span class="el-dropdown-link navbar-bg-hover">
129
- <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
130
- <p class="dark:text-white">{{ userInfo.name }}</p>
131
- </span>
132
- <template #dropdown>
133
- <el-dropdown-menu class="user-dropdown">
134
- <el-dropdown-item @click="handleResetPwd">
135
- <IconifyIconOffline icon="edit" />
136
- {{ $t('message.udp.passwordReset') }}</el-dropdown-item
137
- >
138
- <el-divider style="margin: 3px 0 !important" />
139
- <el-dropdown-item @click="logout">
140
- <IconifyIconOffline icon="switch-button" />
141
- {{ $t('message.udp.logout') }}
142
- </el-dropdown-item>
143
- </el-dropdown-menu>
144
- </template>
145
- </el-dropdown>
146
- <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
147
- <IconifyIconOffline icon="ri:settings-5-fill" />
148
- </span>
149
- </div>
150
- <ut-modal-form
151
- v-if="showModal"
152
- :record="record"
153
- :items="passwordItems()"
154
- :width="360"
155
- :height="240"
156
- :title="$t('message.udp.passwordReset')"
157
- data-status="update"
158
- url="/user/updatePwd"
159
- method="put"
160
- @close="showModal = false"
161
- />
162
- </div>
163
- </template>
164
-
165
- <style lang="scss" scoped>
166
- .translation {
167
- ::v-deep(.el-dropdown-menu__item) {
168
- padding: 5px 40px;
169
- }
170
-
171
- .check-zh {
172
- position: absolute;
173
- left: 20px;
174
- }
175
-
176
- .check-en {
177
- position: absolute;
178
- left: 20px;
179
- }
180
- }
181
-
182
- .logout {
183
- max-width: 120px;
184
-
185
- ::v-deep(.el-dropdown-menu__item) {
186
- display: inline-flex;
187
- flex-wrap: wrap;
188
- min-width: 100%;
189
- }
190
- }
191
- </style>
1
+ <script setup lang="ts">
2
+ import { ref, nextTick } from 'vue';
3
+ import { storageLocal } from '@utogether/utils';
4
+ import { useNav } from '../../hooks/useNav';
5
+ import OrgSelect from '../lay-select-org/index.vue';
6
+ import Search from '../lay-search/index.vue';
7
+ // import Notice from '../lay-notice/index.vue';
8
+ import SidebarItem from './sidebarItem.vue';
9
+ import avatars from '../../../assets/images/avatars.jpg';
10
+ import { kSYSCONFIG } from '../../../contant';
11
+ import { useTranslationLang } from '../../hooks/useTranslationLang';
12
+ import globalization from '../../../assets/svg/globalization.svg?component';
13
+
14
+ import utogether from '../../../assets/images/utogether.png';
15
+ import { usePermissionStoreHook } from '../../../store/modules/permission';
16
+
17
+ const menuRef = ref();
18
+ const { route, locale, translationCh, translationEn } = useTranslationLang(menuRef);
19
+ const routeStore = usePermissionStoreHook();
20
+
21
+ const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
22
+
23
+ const logo = ref(sysConfig['logo'] || utogether);
24
+
25
+ const {
26
+ title,
27
+ logout,
28
+ backHome,
29
+ onPanel,
30
+ userInfo,
31
+ avatarsStyle,
32
+ getDropdownItemStyle,
33
+ getDropdownItemClass,
34
+ passwordItems
35
+ } = useNav();
36
+
37
+ const record: IRecord = {};
38
+
39
+ const refScrollbar = ref(null);
40
+ const showModal = ref(false);
41
+
42
+ nextTick(() => {
43
+ menuRef.value?.handleResize();
44
+ });
45
+
46
+ /**
47
+ * @description: 重置密码
48
+ */
49
+ const handleResetPwd = (): void => {
50
+ record.id = userInfo['id'];
51
+ showModal.value = true;
52
+ };
53
+
54
+ const handleScroll = e => {
55
+ const wheelDelta = e.wheelDelta || -e.deltaY * 40;
56
+ const scrollbar = refScrollbar.value;
57
+ // scrollbar.wrap$获取到包裹容器的element对象
58
+ scrollbar.setScrollLeft(scrollbar.wrapRef.scrollLeft + wheelDelta);
59
+ };
60
+ </script>
61
+ <script lang="ts">
62
+ export default { name: 'LayoutHorizontal' };
63
+ </script>
64
+ <template>
65
+ <div v-spinning="usePermissionStoreHook().wholeMenus.length === 0" class="horizontal-header">
66
+ <div class="flex flex-1 horizontal-header-left" @click="backHome">
67
+ <img :src="logo" class="h-full" />
68
+ <span class="text-xl u-project-text">{{ title }}</span>
69
+ </div>
70
+ <el-scrollbar ref="refScrollbar" class="flex-[3]" @wheel.prevent="handleScroll">
71
+ <template #default>
72
+ <el-menu
73
+ :default-active="route.path"
74
+ :ellipsis="false"
75
+ unique-opened
76
+ router
77
+ popper-class="udp-scrollbar"
78
+ class="horizontal-header-menu"
79
+ mode="horizontal"
80
+ >
81
+ <sidebar-item
82
+ v-for="route in routeStore.wholeMenus"
83
+ :key="route.path"
84
+ :item="route"
85
+ :base-path="route.path"
86
+ />
87
+ </el-menu>
88
+ </template>
89
+ </el-scrollbar>
90
+ <div class="horizontal-header-right flex-[2]">
91
+ <!-- 业务单元选择 -->
92
+ <OrgSelect v-if="sysConfig['orgTaggle'] === 'Y'" class="udp-horizontal" />
93
+ <!-- 菜单搜索 -->
94
+ <Search />
95
+ <!-- 通知 -->
96
+ <!-- <Notice id="header-notice" /> -->
97
+ <!-- 国际化 -->
98
+ <el-dropdown id="header-translation" class="px-2" trigger="click">
99
+ <globalization class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden" />
100
+ <template #dropdown>
101
+ <el-dropdown-menu class="translation">
102
+ <el-dropdown-item
103
+ :style="getDropdownItemStyle(locale, 'zh')"
104
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
105
+ @click="translationCh"
106
+ >
107
+ <span v-show="locale === 'zh'" class="check-zh">
108
+ <IconifyIconOffline icon="check" />
109
+ </span>
110
+ 简体中文
111
+ </el-dropdown-item>
112
+ <el-dropdown-item
113
+ :style="getDropdownItemStyle(locale, 'en')"
114
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
115
+ @click="translationEn"
116
+ >
117
+ <span v-show="locale === 'en'" class="check-en">
118
+ <IconifyIconOffline icon="check" />
119
+ </span>
120
+ English
121
+ </el-dropdown-item>
122
+ </el-dropdown-menu>
123
+ </template>
124
+ </el-dropdown>
125
+ <!-- 退出登录 -->
126
+ <el-dropdown trigger="click">
127
+ <span class="el-dropdown-link navbar-bg-hover">
128
+ <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
129
+ <p class="dark:text-white">{{ userInfo.name }}</p>
130
+ </span>
131
+ <template #dropdown>
132
+ <el-dropdown-menu class="user-dropdown">
133
+ <el-dropdown-item @click="handleResetPwd">
134
+ <IconifyIconOffline icon="edit" />
135
+ {{ $t('message.udp.passwordReset') }}</el-dropdown-item
136
+ >
137
+ <el-divider style="margin: 3px 0 !important" />
138
+ <el-dropdown-item @click="logout">
139
+ <IconifyIconOffline icon="switch-button" />
140
+ {{ $t('message.udp.logout') }}
141
+ </el-dropdown-item>
142
+ </el-dropdown-menu>
143
+ </template>
144
+ </el-dropdown>
145
+ <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
146
+ <IconifyIconOffline icon="ri:settings-5-fill" />
147
+ </span>
148
+ </div>
149
+ <ut-modal-form
150
+ v-if="showModal"
151
+ :record="record"
152
+ :items="passwordItems()"
153
+ :width="360"
154
+ :height="240"
155
+ :title="$t('message.udp.passwordReset')"
156
+ data-status="update"
157
+ url="/user/updatePwd"
158
+ method="put"
159
+ @close="showModal = false"
160
+ />
161
+ </div>
162
+ </template>
163
+
164
+ <style lang="scss" scoped>
165
+ .translation {
166
+ ::v-deep(.el-dropdown-menu__item) {
167
+ padding: 5px 40px;
168
+ }
169
+
170
+ .check-zh {
171
+ position: absolute;
172
+ left: 20px;
173
+ }
174
+
175
+ .check-en {
176
+ position: absolute;
177
+ left: 20px;
178
+ }
179
+ }
180
+
181
+ .logout {
182
+ max-width: 120px;
183
+
184
+ ::v-deep(.el-dropdown-menu__item) {
185
+ display: inline-flex;
186
+ flex-wrap: wrap;
187
+ min-width: 100%;
188
+ }
189
+ }
190
+ </style>