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

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 (83) hide show
  1. package/dist/{403-Ctxjn4q8.js → 403-Dsgsr2M-.js} +1 -1
  2. package/dist/{404-W5yzyiZ9.js → 404-DmPHEfqM.js} +1 -1
  3. package/dist/{500-DXuGEOm4.js → 500-OYEgHR2a.js} +1 -1
  4. package/dist/{AuthorityInfo-C2tflCt8.js → AuthorityInfo-B1H1txG-.js} +1 -1
  5. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-SVgy3HX7.js → AuthorityInfo.vue_vue_type_style_index_0_lang-BUlmQtjQ.js} +1 -1
  6. package/dist/{Company-PLez5GoH.js → Company-C8ojgx93.js} +3 -3
  7. package/dist/{CompanyPanel-CIGaQooL.js → CompanyPanel-Dageer1t.js} +1 -1
  8. package/dist/{Department-B9wLsXFm.js → Department-Dr94_85I.js} +3 -3
  9. package/dist/{DepartmentPanel-DSM4lTaz.js → DepartmentPanel-Bc5r1HpT.js} +1 -1
  10. package/dist/{DesignPanel-B6a9wW_A.js → DesignPanel-CcWt1Myp.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DtHfoDQk.js → DesignPanel.vue_vue_type_style_index_0_lang-CKA6nx1l.js} +2 -2
  12. package/dist/{DictView-DhFbQxdJ.js → DictView-BHj6wexC.js} +1 -1
  13. package/dist/InvOrganization-DP3Le9g-.js +72 -0
  14. package/dist/{Org-DxBkYabD.js → Org-BRGHTwsw.js} +1 -1
  15. package/dist/{Preview-BFtRpBxw.js → Preview-CqMaUD_3.js} +1 -1
  16. package/dist/{ReportDefine-BIa2QryC.js → ReportDefine-PEQdTCOY.js} +1 -1
  17. package/dist/{ReportDesign-CnyjI-WD.js → ReportDesign-CB4bv8ba.js} +2 -2
  18. package/dist/{ReportQuery-BiK7yEhV.js → ReportQuery-B7t4lMK0.js} +1 -1
  19. package/dist/{ReportQueryFrom-C2rqdFTm.js → ReportQueryFrom-VBxUIMRJ.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-Ba9HLnXQ.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-HeLA4Qs5.js} +1 -1
  21. package/dist/{ReportTemplate-DdkLscP3.js → ReportTemplate-DNkv7F5p.js} +1 -1
  22. package/dist/{Role-BrsxgK8D.js → Role-BGfTpZK4.js} +3 -3
  23. package/dist/{RoleAssign-DiqwJqDa.js → RoleAssign-DrKFWZzA.js} +3 -3
  24. package/dist/{RolePanel-Dqx5dI3f.js → RolePanel-3lvRh7aS.js} +1 -1
  25. package/dist/{RolePanel-BDusGyo7.js → RolePanel-BRI5QYe4.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-BXKZb7yt.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-B5lUnaMI.js → RolePanel.vue_vue_type_script_setup_true_lang-Cci_Ysty.js} +3 -3
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-vSP23fEq.js → ScrollPanel.vue_vue_type_style_index_0_lang-BmId6zzA.js} +1 -1
  29. package/dist/{Staff-Cwi9LQiZ.js → Staff-Dr0dq3fW.js} +3 -3
  30. package/dist/{StaffInfo-XjVtyaMv.js → StaffInfo-_N9g2hPa.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-wSrAuyet.js → StaffInfo.vue_vue_type_script_setup_true_lang-DiTJY2ug.js} +1 -1
  32. package/dist/{StaffPanel-C-wYcFdv.js → StaffPanel-mxJQiW3G.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DZNArmnC.js → StaffPanel.vue_vue_type_script_setup_true_lang-GRGn-5t6.js} +2 -2
  34. package/dist/{SysUser-O4tvr-Ur.js → SysUser-DgA19hZE.js} +2 -2
  35. package/dist/{SysUserPanel-B853docZ.js → SysUserPanel-Bc85z5_K.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-DhiYYC97.js → SysUserPanel.vue_vue_type_script_setup_true_lang-BHDrP1Pk.js} +1 -1
  37. package/dist/{SystemMenu-CXR6mrXr.js → SystemMenu-Be-gFIie.js} +2 -2
  38. package/dist/{UserInfo-BkP8pE2a.js → UserInfo-BCYuwFmr.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-B1lgokO6.js} +1 -1
  40. package/dist/{childView-D0HwbgDT.js → childView-DhcBr1UA.js} +1 -1
  41. package/dist/{childView-TRqUkSDC.js → childView-Dk4zZoXd.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-BzISq0Jf.js → childView.vue_vue_type_style_index_0_lang-CVnLnl03.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-DQRgNsJY.js → childView.vue_vue_type_style_index_0_lang-D4GYVhOc.js} +1 -1
  44. package/dist/{code-rule-BV7PQWhK.js → code-rule-BSwPwuAL.js} +1 -1
  45. package/dist/core.es.js +1 -1
  46. package/dist/{cron-task-9ZS9bi7K.js → cron-task-T1ztyra7.js} +1 -1
  47. package/dist/{frameView-DE83AN50.js → frameView-BDgngiBq.js} +1 -1
  48. package/dist/index-BSj2AtVL.js +4468 -0
  49. package/dist/{layoutView-D1U-c4By.js → layoutView-i7dLLBzJ.js} +1187 -1183
  50. package/dist/{login-sPCEiTGT.js → login-K5Ludp8x.js} +4 -5
  51. package/dist/{lov-view-76NcYTYl.js → lov-view-lAexiucu.js} +2 -2
  52. package/dist/{menuInfo-CxjfjFpm.js → menuInfo-BaN5YZPp.js} +1 -1
  53. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-C2qahH3r.js → menuInfo.vue_vue_type_style_index_0_lang-yI4QOYxG.js} +1 -1
  54. package/dist/{pda-app-BUH16bLj.js → pda-app-DEtDXFvM.js} +1 -1
  55. package/dist/{resource-CCuHzoA6.js → resource-Bztmz7pn.js} +1 -1
  56. package/dist/{su-welcome-mRArONsd.js → su-welcome-Bx8nBPi9.js} +1 -1
  57. package/dist/sys-config-nvrtYGgi.js +290 -0
  58. package/dist/udp-core.css +2 -2
  59. package/dist/{utogether-Dm_VBQHR.js → utogether-yPnwDAIH.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/udp/http/index.ts +283 -281
  77. package/src/views/login/login-view.vue +300 -314
  78. package/src/views/organization/inv-org/InvOrganization.vue +68 -53
  79. package/src/views/system/sys/sys-config.vue +287 -291
  80. package/src/views/ulogin/login.vue +1 -2
  81. package/dist/InvOrganization-D90AbR3b.js +0 -66
  82. package/dist/index-DVARtten.js +0 -2623
  83. package/dist/sys-config-Cvt05yF6.js +0 -277
@@ -1,6 +1,6 @@
1
1
  import { computed as W, ref as L } from "vue";
2
2
  import { useGlobal as g, storageLocal as u, deviceDetection as H, cookies as C, storageSession as M } from "@utogether/utils";
3
- import { y as P, j as E, s as j, g as h, v as d, z as J, l as K, m as R, n as V, u as S, r as G, o as O, A as x, B as Z } from "./index-DVARtten.js";
3
+ import { y as P, j as E, s as j, g as h, v as d, z as J, l as K, m as R, n as V, u as S, r as G, o as O, A as x, B as Z } from "./index-BSj2AtVL.js";
4
4
  import { useI18n as f } from "vue-i18n";
5
5
  import { defineStore as v } from "pinia";
6
6
  function I() {
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
- {
2
- "name": "@utogether/udp-core",
3
- "private": false,
4
- "version": "1.0.1-beta.10",
5
- "description": "",
6
- "type": "module",
7
- "main1": "index.ts",
8
- "main": "dist/core.es.js",
9
- "scripts": {
10
- "dev": "vite",
11
- "build": "vite build",
12
- "preview:build": "pnpm build && vite preview",
13
- "report": "rimraf dist && vite build"
14
- },
15
- "keywords": [],
16
- "author": "",
17
- "license": "ISC"
18
- }
1
+ {
2
+ "name": "@utogether/udp-core",
3
+ "private": false,
4
+ "version": "1.0.1-beta.11",
5
+ "description": "",
6
+ "type": "module",
7
+ "main1": "index.ts",
8
+ "main": "dist/core.es.js",
9
+ "scripts": {
10
+ "dev": "vite",
11
+ "build": "vite build",
12
+ "preview:build": "pnpm build && vite preview",
13
+ "report": "rimraf dist && vite build"
14
+ },
15
+ "keywords": [],
16
+ "author": "",
17
+ "license": "ISC"
18
+ }
package/src/api/index.ts CHANGED
@@ -1,31 +1,31 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2021-11-17 16:24:43
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2024-11-23 10:13:07
6
- * @Description: API封装
7
- */
8
- import { http } from '@utogether/utils';
9
- // import { http } from '../utils/udp/http';
10
- import { getEnv } from '../config';
11
-
12
- // 路由相关服务
13
- export const getServiceApi = () => {
14
- return {
15
- post: (url: string, data: object, config?) => http.post(`${getBaseURL()}${url}`, data, config),
16
- get: (url: string, params: object, config?) => http.get(`${getBaseURL()}${url}`, params, config),
17
- put: (url: string, params: object) => http.put(`${getBaseURL()}${url}`, params),
18
- delete: (url: string, params: object) => http.delete(`${getBaseURL()}${url}`, params)
19
- };
20
- };
21
-
22
- export const setRouter = router => {
23
- http.setRouter(router);
24
- // http.setBaseUrl(getBaseURL());
25
- };
26
-
27
- const origin = window.location.origin + '/gateway';
28
-
29
- export const getBaseURL = () => {
30
- return getEnv().VITE_BASE_URL === 'origin' ? origin : getEnv().VITE_BASE_URL;
31
- };
1
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-17 16:24:43
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2024-11-23 10:13:07
6
+ * @Description: API封装
7
+ */
8
+ // import { http } from '@utogether/utils';
9
+ import { http } from '../utils/udp/http';
10
+ import { getEnv } from '../config';
11
+
12
+ // 路由相关服务
13
+ export const getServiceApi = () => {
14
+ return {
15
+ post: (url: string, data: object, config?) => http.post(`${getBaseURL()}${url}`, data, config),
16
+ get: (url: string, params: object, config?) => http.get(`${getBaseURL()}${url}`, params, config),
17
+ put: (url: string, params: object) => http.put(`${getBaseURL()}${url}`, params),
18
+ delete: (url: string, params: object) => http.delete(`${getBaseURL()}${url}`, params)
19
+ };
20
+ };
21
+
22
+ export const setRouter = router => {
23
+ http.setRouter(router);
24
+ // http.setBaseUrl(getBaseURL());
25
+ };
26
+
27
+ const origin = window.location.origin + '/gateway';
28
+
29
+ export const getBaseURL = () => {
30
+ return getEnv().VITE_BASE_URL === 'origin' ? origin : getEnv().VITE_BASE_URL;
31
+ };
@@ -21,7 +21,6 @@
21
21
  title-bold
22
22
  v-bind="$attrs"
23
23
  >
24
- <template #dividerPrefix />
25
24
  <template #collapseNode>
26
25
  <div class="flex justify-start">
27
26
  <vxe-checkbox
@@ -48,6 +47,7 @@ import { useI18n } from 'vue-i18n';
48
47
  import { ref, computed } from 'vue';
49
48
  // import { formatRules } from '@utogether/utils';
50
49
  import { formatItems, formatRules } from './utils';
50
+ import { clone } from 'xe-utils';
51
51
  // import type { IRecord, IFormItemProps } from '../../types';
52
52
 
53
53
  export interface IProps {
@@ -84,7 +84,7 @@ const rules = computed(() => {
84
84
 
85
85
  const formItems = computed(() => {
86
86
  if (!props.items.length) return props.items;
87
- return formatItems(props.items, 'edit', 6);
87
+ return formatItems(clone(props.items, true), 'edit', 6);
88
88
  });
89
89
 
90
90
  const onChange = () => {
@@ -60,6 +60,7 @@ import { useI18n } from 'vue-i18n';
60
60
  import { getAttrs } from './utils';
61
61
  import to from 'await-to-js';
62
62
  import { formatRules, successMessage, formatItems } from '@utogether/utils';
63
+ import { clone } from 'xe-utils';
63
64
 
64
65
  // import type { IRecord, IFormItemProps } from '../../types';
65
66
 
@@ -110,7 +111,7 @@ const rules = computed(() => {
110
111
 
111
112
  const formItems = computed(() => {
112
113
  if (!props.items.length) return props.items;
113
- return formatItems(props.items, props.dataStatus);
114
+ return formatItems(clone(props.items, true), props.dataStatus);
114
115
  });
115
116
 
116
117
  const { t } = useI18n();
@@ -154,7 +154,13 @@ const data = reactive<VxeGridProps>({
154
154
  queryAll: ({ form }) => queryAll(props, serviceApi, form),
155
155
  query: ({ page, form }) => query(props, form, page, serviceApi, $mode),
156
156
  delete: ({ body: { removeRecords } }) => del(serviceApi, removeRecords, props),
157
- save: ({ body }) => Promise.all(save(serviceApi, body, props))
157
+ save: ({ body }) => Promise.all(save(serviceApi, body, props)),
158
+ querySuccess: response => callback('querySuccess', response),
159
+ queryError: response => callback('queryError', response),
160
+ deleteSuccess: response => callback('deleteSuccess', response),
161
+ deleteError: response => callback('deleteError', response),
162
+ saveSuccess: response => callback('saveSuccess', response),
163
+ saveError: response => callback('saveError', response)
158
164
  }
159
165
  },
160
166
  checkboxConfig: {
@@ -164,6 +170,10 @@ const data = reactive<VxeGridProps>({
164
170
  columns: getColumns()
165
171
  });
166
172
 
173
+ const callback = (cb, response) => {
174
+ attrs?.callback && attrs?.callback[cb] && attrs?.callback[cb](response);
175
+ };
176
+
167
177
  // 确认数据
168
178
  const onConfirm = async () => {
169
179
  let records = null;
@@ -1,237 +1,239 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2021-11-17 16:02:30
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-04-16 16:20:09
6
- * @Description: file content
7
- -->
8
- <template>
9
- <div class="system-navbar bg-white shadow-sm shadow-[rgba(0, 21, 41, 0.08)] dark:shadow-[#0d0d0d]">
10
- <Hamburger
11
- v-if="layout !== 'mix'"
12
- :is-active="appHook.sidebar.opened"
13
- class="hamburger-container"
14
- @toggleClick="toggleSideBar"
15
- />
16
-
17
- <Breadcrumb v-if="layout !== 'mix'" class="breadcrumb-container" />
18
-
19
- <mixNav v-if="layout === 'mix'" />
20
-
21
- <div v-if="layout === 'vertical'" class="vertical-header-right">
22
- <!-- 业务单元选择 -->
23
- <OrgSelect />
24
- <!-- 菜单搜索 -->
25
- <Search />
26
- <!-- 通知 -->
27
- <!-- <Notice id="header-notice" /> -->
28
- <!-- 国际化 -->
29
- <el-dropdown id="header-translation" trigge·r="click">
30
- <globalization
31
- class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden"
32
- />
33
- <template #dropdown>
34
- <el-dropdown-menu class="translation">
35
- <el-dropdown-item
36
- :style="getDropdownItemStyle(locale, 'zh')"
37
- :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
38
- @click="translationCh"
39
- >
40
- <IconifyIconOffline v-show="locale === 'zh'" class="check-zh" icon="ri:check-line" />
41
- 简体中文
42
- </el-dropdown-item>
43
- <el-dropdown-item
44
- :style="getDropdownItemStyle(locale, 'en')"
45
- :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
46
- @click="translationEn"
47
- >
48
- <span v-show="locale === 'en'" class="check-en">
49
- <IconifyIconOffline icon="ri:check-line" />
50
- </span>
51
- English
52
- </el-dropdown-item>
53
- </el-dropdown-menu>
54
- </template>
55
- </el-dropdown>
56
- <!-- 退出登陆 -->
57
- <el-dropdown trigger="click">
58
- <span class="select-none el-dropdown-link navbar-bg-hover">
59
- <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
60
- <p class="dark:text-white user-name">
61
- {{ userInfo?.name }}
62
- </p>
63
- </span>
64
- <template #dropdown>
65
- <el-dropdown-menu class="user-dropdown">
66
- <el-dropdown-item @click="handleResetPwd">
67
- <IconifyIconOffline icon="ri:edit-2-fill" />
68
- {{ $t('message.udp.passwordReset') }}</el-dropdown-item
69
- >
70
- <el-divider style="margin: 3px 0 !important" />
71
- <el-dropdown-item @click="logout">
72
- <IconifyIconOffline icon="switch-button" />
73
- {{ $t('message.udp.logout') }}
74
- </el-dropdown-item>
75
- </el-dropdown-menu>
76
- </template>
77
- </el-dropdown>
78
- <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
79
- <IconifyIconOffline icon="ri:settings-5-fill" />
80
- </span>
81
- </div>
82
- <ut-modal-form
83
- v-if="showModal"
84
- :record="record"
85
- :items="passwordItems()"
86
- :width="360"
87
- :height="240"
88
- data-status="update"
89
- :title="$t('message.udp.passwordReset')"
90
- url="/uums/user/updatePwd"
91
- method="put"
92
- @close="showModal = false"
93
- />
94
- </div>
95
- </template>
96
- <script lang="ts">
97
- export default { name: 'NavBar' };
98
- </script>
99
- <script setup lang="ts">
100
- import { ref } from 'vue';
101
- // import { useRouter } from 'vue-router';
102
- import Hamburger from '../lay-sidebar/hamBurger.vue';
103
- import Breadcrumb from '../lay-sidebar/breadCrumb.vue';
104
- // import Notice from './lay-notice/index.vue';
105
- import { useNav } from '../../hooks/useNav';
106
- import Search from '../lay-search/index.vue';
107
- import mixNav from '../lay-sidebar/mixNav.vue';
108
- import OrgSelect from '../lay-select-org/index.vue';
109
- import { useTranslationLang } from '../../hooks/useTranslationLang';
110
- import globalization from '../../../assets/svg/globalization.svg?component';
111
- import avatars from '../../../assets/images/avatars.jpg';
112
-
113
- // const router = useRouter();
114
- // const route = useRoute();
115
- const showModal = ref(false);
116
-
117
- const {
118
- layout,
119
- logout,
120
- onPanel,
121
- toggleSideBar,
122
- appHook,
123
- userInfo,
124
- avatarsStyle,
125
- setDocumentTitle,
126
- getDropdownItemStyle,
127
- getDropdownItemClass,
128
- passwordItems
129
- } = useNav();
130
-
131
- const { locale, translationCh, translationEn } = useTranslationLang();
132
-
133
- const record: IRecord = {};
134
- /**
135
- * @description: 重置密码
136
- */
137
- const handleResetPwd = (): void => {
138
- record.id = userInfo.value.id;
139
- showModal.value = true;
140
- };
141
-
142
- setDocumentTitle();
143
- </script>
144
-
145
- <style lang="scss" scoped>
146
- .system-navbar {
147
- width: 100%;
148
- height: 48px;
149
- overflow: hidden;
150
-
151
- .hamburger-container {
152
- float: left;
153
- height: 100%;
154
- line-height: 48px;
155
- cursor: pointer;
156
- }
157
-
158
- .vertical-header-right {
159
- display: flex;
160
- align-items: center;
161
- justify-content: flex-end;
162
- min-width: 280px;
163
- height: 48px;
164
- color: #000000d9;
165
-
166
- .el-dropdown-link {
167
- display: flex;
168
- align-items: center;
169
- justify-content: space-around;
170
- width: 100px;
171
- height: 48px;
172
- padding: 10px 6px;
173
- color: #000000d9;
174
- cursor: pointer;
175
-
176
- p {
177
- font-size: 14px;
178
- font-weight: 600;
179
- }
180
-
181
- img {
182
- width: 22px;
183
- height: 22px;
184
- border-radius: 50%;
185
- }
186
- }
187
-
188
- .el-icon-setting {
189
- display: flex;
190
- align-items: center;
191
- width: 38px;
192
- height: 48px;
193
- padding: 12px;
194
- cursor: pointer;
195
- }
196
- }
197
-
198
- .breadcrumb-container {
199
- float: left;
200
- }
201
-
202
- /* stylelint-disable */
203
- .user-name {
204
- -webkit-box-orient: vertical;
205
- display: -webkit-box;
206
- overflow: hidden;
207
- -webkit-line-clamp: 2;
208
- }
209
- /* stylelint-enable */
210
- }
211
-
212
- .translation {
213
- ::v-deep(.el-dropdown-menu__item) {
214
- padding: 5px 40px;
215
- }
216
-
217
- .check-zh {
218
- position: absolute;
219
- left: 20px;
220
- }
221
-
222
- .check-en {
223
- position: absolute;
224
- left: 20px;
225
- }
226
- }
227
-
228
- .logout {
229
- max-width: 120px;
230
-
231
- ::v-deep(.el-dropdown-menu__item) {
232
- display: inline-flex;
233
- flex-wrap: wrap;
234
- min-width: 100%;
235
- }
236
- }
237
- </style>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-17 16:02:30
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-08-29 08:57:37
6
+ * @Description: file content
7
+ -->
8
+ <template>
9
+ <div class="system-navbar bg-white shadow-sm shadow-[rgba(0, 21, 41, 0.08)] dark:shadow-[#0d0d0d]">
10
+ <Hamburger
11
+ v-if="layout !== 'mix'"
12
+ :is-active="appHook.sidebar.opened"
13
+ class="hamburger-container"
14
+ @toggleClick="toggleSideBar"
15
+ />
16
+
17
+ <Breadcrumb v-if="layout !== 'mix'" class="breadcrumb-container" />
18
+
19
+ <mixNav v-if="layout === 'mix'" />
20
+
21
+ <div v-if="layout === 'vertical'" class="vertical-header-right">
22
+ <!-- 业务单元选择 -->
23
+ <OrgSelect v-if="sysConfig['orgTaggle'] === 'Y'" />
24
+ <!-- 菜单搜索 -->
25
+ <Search />
26
+ <!-- 通知 -->
27
+ <!-- <Notice id="header-notice" /> -->
28
+ <!-- 国际化 -->
29
+ <el-dropdown id="header-translation" trigge·r="click">
30
+ <globalization class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-hidden" />
31
+ <template #dropdown>
32
+ <el-dropdown-menu class="translation">
33
+ <el-dropdown-item
34
+ :style="getDropdownItemStyle(locale, 'zh')"
35
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'zh')]"
36
+ @click="translationCh"
37
+ >
38
+ <IconifyIconOffline v-show="locale === 'zh'" class="check-zh" icon="ri:check-line" />
39
+ 简体中文
40
+ </el-dropdown-item>
41
+ <el-dropdown-item
42
+ :style="getDropdownItemStyle(locale, 'en')"
43
+ :class="['dark:text-white!', getDropdownItemClass(locale, 'en')]"
44
+ @click="translationEn"
45
+ >
46
+ <span v-show="locale === 'en'" class="check-en">
47
+ <IconifyIconOffline icon="ri:check-line" />
48
+ </span>
49
+ English
50
+ </el-dropdown-item>
51
+ </el-dropdown-menu>
52
+ </template>
53
+ </el-dropdown>
54
+ <!-- 退出登陆 -->
55
+ <el-dropdown trigger="click">
56
+ <span class="select-none el-dropdown-link navbar-bg-hover">
57
+ <img v-if="avatars" :src="avatars" :style="avatarsStyle" />
58
+ <p class="dark:text-white user-name">
59
+ {{ userInfo?.name }}
60
+ </p>
61
+ </span>
62
+ <template #dropdown>
63
+ <el-dropdown-menu class="user-dropdown">
64
+ <el-dropdown-item @click="handleResetPwd">
65
+ <IconifyIconOffline icon="ri:edit-2-fill" />
66
+ {{ $t('message.udp.passwordReset') }}</el-dropdown-item
67
+ >
68
+ <el-divider style="margin: 3px 0 !important" />
69
+ <el-dropdown-item @click="logout">
70
+ <IconifyIconOffline icon="switch-button" />
71
+ {{ $t('message.udp.logout') }}
72
+ </el-dropdown-item>
73
+ </el-dropdown-menu>
74
+ </template>
75
+ </el-dropdown>
76
+ <span class="el-icon-setting navbar-bg-hover" @click="onPanel">
77
+ <IconifyIconOffline icon="ri:settings-5-fill" />
78
+ </span>
79
+ </div>
80
+ <ut-modal-form
81
+ v-if="showModal"
82
+ :record="record"
83
+ :items="passwordItems()"
84
+ :width="360"
85
+ :height="240"
86
+ data-status="update"
87
+ :title="$t('message.udp.passwordReset')"
88
+ url="/uums/user/updatePwd"
89
+ method="put"
90
+ @close="showModal = false"
91
+ />
92
+ </div>
93
+ </template>
94
+ <script lang="ts">
95
+ export default { name: 'NavBar' };
96
+ </script>
97
+ <script setup lang="ts">
98
+ import { ref } from 'vue';
99
+ import { storageLocal } from '@utogether/utils';
100
+ import Hamburger from '../lay-sidebar/hamBurger.vue';
101
+ import Breadcrumb from '../lay-sidebar/breadCrumb.vue';
102
+ // import Notice from './lay-notice/index.vue';
103
+ import { useNav } from '../../hooks/useNav';
104
+ import Search from '../lay-search/index.vue';
105
+ import mixNav from '../lay-sidebar/mixNav.vue';
106
+ import OrgSelect from '../lay-select-org/index.vue';
107
+ import { useTranslationLang } from '../../hooks/useTranslationLang';
108
+ import globalization from '../../../assets/svg/globalization.svg?component';
109
+ import avatars from '../../../assets/images/avatars.jpg';
110
+ import { kSYSCONFIG } from '../../../contant';
111
+
112
+ // const router = useRouter();
113
+ // const route = useRoute();
114
+ const showModal = ref(false);
115
+
116
+ const {
117
+ layout,
118
+ logout,
119
+ onPanel,
120
+ toggleSideBar,
121
+ appHook,
122
+ userInfo,
123
+ avatarsStyle,
124
+ setDocumentTitle,
125
+ getDropdownItemStyle,
126
+ getDropdownItemClass,
127
+ passwordItems
128
+ } = useNav();
129
+
130
+ const { locale, translationCh, translationEn } = useTranslationLang();
131
+
132
+ const record: IRecord = {};
133
+
134
+ const sysConfig = storageLocal.getItem(kSYSCONFIG) || {};
135
+
136
+ /**
137
+ * @description: 重置密码
138
+ */
139
+ const handleResetPwd = (): void => {
140
+ record.id = userInfo.value.id;
141
+ showModal.value = true;
142
+ };
143
+
144
+ setDocumentTitle();
145
+ </script>
146
+
147
+ <style lang="scss" scoped>
148
+ .system-navbar {
149
+ width: 100%;
150
+ height: 48px;
151
+ overflow: hidden;
152
+
153
+ .hamburger-container {
154
+ float: left;
155
+ height: 100%;
156
+ line-height: 48px;
157
+ cursor: pointer;
158
+ }
159
+
160
+ .vertical-header-right {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: flex-end;
164
+ min-width: 280px;
165
+ height: 48px;
166
+ color: #000000d9;
167
+
168
+ .el-dropdown-link {
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: space-around;
172
+ width: 100px;
173
+ height: 48px;
174
+ padding: 10px 6px;
175
+ color: #000000d9;
176
+ cursor: pointer;
177
+
178
+ p {
179
+ font-size: 14px;
180
+ font-weight: 600;
181
+ }
182
+
183
+ img {
184
+ width: 22px;
185
+ height: 22px;
186
+ border-radius: 50%;
187
+ }
188
+ }
189
+
190
+ .el-icon-setting {
191
+ display: flex;
192
+ align-items: center;
193
+ width: 38px;
194
+ height: 48px;
195
+ padding: 12px;
196
+ cursor: pointer;
197
+ }
198
+ }
199
+
200
+ .breadcrumb-container {
201
+ float: left;
202
+ }
203
+
204
+ /* stylelint-disable */
205
+ .user-name {
206
+ -webkit-box-orient: vertical;
207
+ display: -webkit-box;
208
+ overflow: hidden;
209
+ -webkit-line-clamp: 2;
210
+ }
211
+ /* stylelint-enable */
212
+ }
213
+
214
+ .translation {
215
+ ::v-deep(.el-dropdown-menu__item) {
216
+ padding: 5px 40px;
217
+ }
218
+
219
+ .check-zh {
220
+ position: absolute;
221
+ left: 20px;
222
+ }
223
+
224
+ .check-en {
225
+ position: absolute;
226
+ left: 20px;
227
+ }
228
+ }
229
+
230
+ .logout {
231
+ max-width: 120px;
232
+
233
+ ::v-deep(.el-dropdown-menu__item) {
234
+ display: inline-flex;
235
+ flex-wrap: wrap;
236
+ min-width: 100%;
237
+ }
238
+ }
239
+ </style>