@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,195 +1,199 @@
1
- <script setup lang="ts">
2
- import { ref, toRaw, PropType, nextTick, computed, CSSProperties } from 'vue';
3
- import path from 'path';
4
- import extraIcon from './extraIcon.vue';
5
- import { useNav } from '../../hooks/useNav';
6
- import { childrenType } from '../../types';
7
- import { transformI18n } from '../../../plugins/i18n';
8
- import { useRenderIcon } from '../../../components/ReIcon/src/hooks';
9
- // import Icon from '@/components/ReIcon/src/Icon.vue';
10
-
11
- const { appHook, isCollapse, getDivStyle } = useNav();
12
- const menuMode = ['vertical', 'mix'].includes(appHook.layout);
13
-
14
- const props = defineProps({
15
- item: {
16
- type: Object as PropType<childrenType>
17
- },
18
- isNest: {
19
- type: Boolean,
20
- default: false
21
- },
22
- basePath: {
23
- type: String,
24
- default: ''
25
- }
26
- });
27
-
28
- const getNoDropdownStyle = computed((): CSSProperties => {
29
- return { display: 'flex', alignItems: 'center' };
30
- });
31
- // const getDivStyle = computed((): CSSProperties => {
32
- // return {
33
- // width: !isCollapse.value ? '' : '100%',
34
- // display: 'flex',
35
- // alignItems: 'center',
36
- // justifyContent: 'space-between',
37
- // overflow: 'hidden'
38
- // };
39
- // });
40
-
41
- const getMenuTextStyle = computed(() => {
42
- return {
43
- width: !isCollapse.value ? '125px' : '',
44
- overflow: 'hidden',
45
- textOverflow: 'ellipsis',
46
- outline: 'none'
47
- };
48
- });
49
- const getSubTextStyle = computed((): CSSProperties => {
50
- return {
51
- width: !isCollapse.value ? '210px' : '',
52
- display: 'inline-block',
53
- overflow: 'hidden',
54
- textOverflow: 'ellipsis'
55
- };
56
- });
57
-
58
- const getSpanStyle = computed((): CSSProperties => {
59
- return { overflow: 'hidden', textOverflow: 'ellipsis' };
60
- });
61
-
62
- const onlyOneChild: childrenType = ref(null);
63
- // 存放菜单是否存在showTooltip属性标识
64
- const hoverMenuMap = new WeakMap();
65
- // 存储菜单文本dom元素
66
- const menuTextRef = ref(null);
67
-
68
- function hoverMenu(key) {
69
- // 如果当前菜单showTooltip属性已存在,退出计算
70
- if (hoverMenuMap.get(key)) return;
71
-
72
- nextTick(() => {
73
- // 如果文本内容的整体宽度大于其可视宽度,则文本溢出
74
- menuTextRef.value?.scrollWidth > menuTextRef.value?.clientWidth
75
- ? Object.assign(key, {
76
- showTooltip: true
77
- })
78
- : Object.assign(key, {
79
- showTooltip: false
80
- });
81
-
82
- hoverMenuMap.set(key, true);
83
- });
84
- }
85
-
86
- // 左侧菜单折叠后,当菜单没有图标时只显示第一个文字并加上省略号
87
- function overflowSlice(text, item?: any) {
88
- const newText = (text?.length > 1 ? text.toString().slice(0, 1) : text) + '...';
89
- if (item && !(isCollapse.value && item?.parentId === null)) {
90
- return appHook.layout === 'mix' && item?.pathList?.length === 2 && isCollapse.value ? newText : text;
91
- }
92
- return newText;
93
- }
94
- function hasOneShowingChild(children: childrenType[] = [], parent: childrenType) {
95
- const showingChildren = children.filter((item: any) => {
96
- onlyOneChild.value = item;
97
- return true;
98
- });
99
- if (showingChildren[0]?.meta?.showParent) {
100
- return false;
101
- }
102
- if (showingChildren.length === 1) {
103
- return true;
104
- }
105
-
106
- if (showingChildren.length === 0) {
107
- onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };
108
- return true;
109
- }
110
- return false;
111
- }
112
-
113
- function resolvePath(routePath) {
114
- const httpReg = /^http(s?):\/\//;
115
- if (httpReg.test(routePath) || httpReg.test(props.basePath)) {
116
- return routePath || props.basePath;
117
- } else {
118
- return path.resolve(props.basePath, routePath);
119
- }
120
- }
121
- </script>
122
-
123
- <template>
124
- <template
125
- v-if="
126
- hasOneShowingChild(props.item.children, props.item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren)
127
- "
128
- >
129
- <el-menu-item
130
- :index="resolvePath(onlyOneChild.path)"
131
- :class="{
132
- 'submenu-title-noDropdown': !isNest,
133
- 'submenu-mix-fold': !appHook.sidebar.opened && appHook.layout === 'mix'
134
- }"
135
- :style="getNoDropdownStyle"
136
- >
137
- <div
138
- v-if="toRaw(props.item.meta.icon)"
139
- class="sub-menu-icon"
140
- :class="onlyOneChild.meta.icon || props.item?.meta?.icon"
141
- >
142
- <component
143
- :is="useRenderIcon(toRaw(onlyOneChild.meta.icon) || (props.item.meta && toRaw(props.item.meta.icon)))"
144
- />
145
- </div>
146
- <div v-if="!appHook.sidebar.opened && appHook.layout === 'mix'" class="ut-mix-title">
147
- <span>
148
- {{ transformI18n(onlyOneChild.meta.title) }}
149
- </span>
150
- </div>
151
- <template #title>
152
- <div :style="getDivStyle">
153
- <span v-if="!menuMode">{{ transformI18n(onlyOneChild.meta.title) }}</span>
154
- <el-tooltip v-else placement="top" :offset="-10" :disabled="!onlyOneChild.showTooltip">
155
- <template #content>
156
- {{ transformI18n(onlyOneChild.meta.title) }}
157
- </template>
158
- <span ref="menuTextRef" :style="getMenuTextStyle" @mouseover="hoverMenu(onlyOneChild)">
159
- {{ transformI18n(onlyOneChild.meta.title) }}
160
- </span>
161
- </el-tooltip>
162
- <extraIcon :extra-icon="onlyOneChild.meta.extraIcon" />
163
- </div>
164
- </template>
165
- </el-menu-item>
166
- </template>
167
-
168
- <el-sub-menu v-else ref="subMenu" :index="resolvePath(props.item.path)" teleported>
169
- <template #title>
170
- <div v-if="toRaw(props.item.meta.icon)" class="sub-menu-icon" :class="props.item.meta.icon">
171
- <component :is="useRenderIcon(props.item.meta && props.item.meta.icon)" />
172
- </div>
173
- <span v-if="!menuMode">{{ transformI18n(props.item.meta.title) }}</span>
174
- <el-tooltip v-else placement="top" :offset="-10" :disabled="!appHook.sidebar.opened || !props.item.showTooltip">
175
- <template #content>
176
- {{ transformI18n(props.item.meta.title) }}
177
- </template>
178
- <div ref="menuTextRef" :style="getSubTextStyle" @mouseover="hoverMenu(props.item)">
179
- <span :style="getSpanStyle">
180
- {{ overflowSlice(transformI18n(props.item.meta.title), props.item) }}
181
- </span>
182
- </div>
183
- </el-tooltip>
184
- <extraIcon v-if="!isCollapse" :extra-icon="props.item.meta.extraIcon" />
185
- </template>
186
- <sidebar-item
187
- v-for="child in props.item.children"
188
- :key="child.path"
189
- :is-nest="true"
190
- :item="child"
191
- :base-path="resolvePath(child.path)"
192
- class="nest-menu"
193
- />
194
- </el-sub-menu>
195
- </template>
1
+ <script setup lang="ts">
2
+ import { ref, toRaw, PropType, nextTick, computed, CSSProperties } from 'vue';
3
+ import path from 'path';
4
+ import extraIcon from './extraIcon.vue';
5
+ import { useNav } from '../../hooks/useNav';
6
+ import { childrenType } from '../../types';
7
+ import { transformI18n } from '../../../plugins/i18n';
8
+ import { useRenderIcon } from '../../../components/ReIcon/src/hooks';
9
+ // import Icon from '@/components/ReIcon/src/Icon.vue';
10
+
11
+ const { appHook, isCollapse, getDivStyle } = useNav();
12
+ const menuMode = ['vertical', 'mix'].includes(appHook.layout);
13
+
14
+ const props = defineProps({
15
+ item: {
16
+ type: Object as PropType<childrenType>
17
+ },
18
+ isNest: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ basePath: {
23
+ type: String,
24
+ default: ''
25
+ }
26
+ });
27
+
28
+ const getNoDropdownStyle = computed((): CSSProperties => {
29
+ return { display: 'flex', alignItems: 'center' };
30
+ });
31
+ // const getDivStyle = computed((): CSSProperties => {
32
+ // return {
33
+ // width: !isCollapse.value ? '' : '100%',
34
+ // display: 'flex',
35
+ // alignItems: 'center',
36
+ // justifyContent: 'space-between',
37
+ // overflow: 'hidden'
38
+ // };
39
+ // });
40
+
41
+ const getMenuTextStyle = computed(() => {
42
+ return {
43
+ width: !isCollapse.value ? '125px' : '',
44
+ overflow: 'hidden',
45
+ textOverflow: 'ellipsis',
46
+ outline: 'none'
47
+ };
48
+ });
49
+ const getSubTextStyle = computed((): CSSProperties => {
50
+ return {
51
+ width: !isCollapse.value ? '210px' : '',
52
+ display: 'inline-block',
53
+ overflow: 'hidden',
54
+ textOverflow: 'ellipsis'
55
+ };
56
+ });
57
+
58
+ const getSpanStyle = computed((): CSSProperties => {
59
+ return { overflow: 'hidden', textOverflow: 'ellipsis' };
60
+ });
61
+
62
+ const onlyOneChild: childrenType = ref(null);
63
+ // 存放菜单是否存在showTooltip属性标识
64
+ const hoverMenuMap = new WeakMap();
65
+ // 存储菜单文本dom元素
66
+ const menuTextRef = ref(null);
67
+
68
+ function hoverMenu(key) {
69
+ // 如果当前菜单showTooltip属性已存在,退出计算
70
+ if (hoverMenuMap.get(key)) return;
71
+
72
+ nextTick(() => {
73
+ // 如果文本内容的整体宽度大于其可视宽度,则文本溢出
74
+ menuTextRef.value?.scrollWidth > menuTextRef.value?.clientWidth
75
+ ? Object.assign(key, {
76
+ showTooltip: true
77
+ })
78
+ : Object.assign(key, {
79
+ showTooltip: false
80
+ });
81
+
82
+ hoverMenuMap.set(key, true);
83
+ });
84
+ }
85
+
86
+ // 左侧菜单折叠后,当菜单没有图标时只显示第一个文字并加上省略号
87
+ function overflowSlice(text, item?: any) {
88
+ const newText = (text?.length > 1 ? text.toString().slice(0, 1) : text) + '...';
89
+ if (item && !(isCollapse.value && item?.parentId === null)) {
90
+ return appHook.layout === 'mix' && item?.pathList?.length === 2 && isCollapse.value ? newText : text;
91
+ }
92
+ return newText;
93
+ }
94
+ function hasOneShowingChild(children: childrenType[] = [], parent: childrenType) {
95
+ const showingChildren = children.filter((item: any) => {
96
+ onlyOneChild.value = item;
97
+ return true;
98
+ });
99
+ if (showingChildren[0]?.meta?.showParent) {
100
+ return false;
101
+ }
102
+ if (showingChildren.length === 1) {
103
+ return true;
104
+ }
105
+
106
+ if (showingChildren.length === 0) {
107
+ onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };
108
+ return true;
109
+ }
110
+ return false;
111
+ }
112
+
113
+ function resolvePath(routePath) {
114
+ const httpReg = /^http(s?):\/\//;
115
+ if (httpReg.test(routePath) || httpReg.test(props.basePath)) {
116
+ return routePath || props.basePath;
117
+ } else {
118
+ // console.log('routePath ===', routePath);
119
+ if ('/ubase/elevator/elevator-model-class' === routePath) {
120
+ console.log('path.resolve(props.basePath, routePath)', path.resolve(props.basePath, routePath));
121
+ }
122
+ return path.resolve(props.basePath, routePath);
123
+ }
124
+ }
125
+ </script>
126
+
127
+ <template>
128
+ <template
129
+ v-if="
130
+ hasOneShowingChild(props.item.children, props.item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren)
131
+ "
132
+ >
133
+ <el-menu-item
134
+ :index="resolvePath(onlyOneChild.path)"
135
+ :class="{
136
+ 'submenu-title-noDropdown': !isNest,
137
+ 'submenu-mix-fold': !appHook.sidebar.opened && appHook.layout === 'mix'
138
+ }"
139
+ :style="getNoDropdownStyle"
140
+ >
141
+ <div
142
+ v-if="toRaw(props.item.meta.icon)"
143
+ class="sub-menu-icon"
144
+ :class="onlyOneChild.meta.icon || props.item?.meta?.icon"
145
+ >
146
+ <component
147
+ :is="useRenderIcon(toRaw(onlyOneChild.meta.icon) || (props.item.meta && toRaw(props.item.meta.icon)))"
148
+ />
149
+ </div>
150
+ <div v-if="!appHook.sidebar.opened && appHook.layout === 'mix'" class="ut-mix-title">
151
+ <span>
152
+ {{ transformI18n(onlyOneChild.meta.title) }}
153
+ </span>
154
+ </div>
155
+ <template #title>
156
+ <div :style="getDivStyle">
157
+ <span v-if="!menuMode">{{ transformI18n(onlyOneChild.meta.title) }}</span>
158
+ <el-tooltip v-else placement="top" :offset="-10" :disabled="!onlyOneChild.showTooltip">
159
+ <template #content>
160
+ {{ transformI18n(onlyOneChild.meta.title) }}
161
+ </template>
162
+ <span ref="menuTextRef" :style="getMenuTextStyle" @mouseover="hoverMenu(onlyOneChild)">
163
+ {{ transformI18n(onlyOneChild.meta.title) }}
164
+ </span>
165
+ </el-tooltip>
166
+ <extraIcon :extra-icon="onlyOneChild.meta.extraIcon" />
167
+ </div>
168
+ </template>
169
+ </el-menu-item>
170
+ </template>
171
+
172
+ <el-sub-menu v-else ref="subMenu" :index="resolvePath(props.item.path)" teleported>
173
+ <template #title>
174
+ <div v-if="toRaw(props.item.meta.icon)" class="sub-menu-icon" :class="props.item.meta.icon">
175
+ <component :is="useRenderIcon(props.item.meta && props.item.meta.icon)" />
176
+ </div>
177
+ <span v-if="!menuMode">{{ transformI18n(props.item.meta.title) }}</span>
178
+ <el-tooltip v-else placement="top" :offset="-10" :disabled="!appHook.sidebar.opened || !props.item.showTooltip">
179
+ <template #content>
180
+ {{ transformI18n(props.item.meta.title) }}
181
+ </template>
182
+ <div ref="menuTextRef" :style="getSubTextStyle" @mouseover="hoverMenu(props.item)">
183
+ <span :style="getSpanStyle">
184
+ {{ overflowSlice(transformI18n(props.item.meta.title), props.item) }}
185
+ </span>
186
+ </div>
187
+ </el-tooltip>
188
+ <extraIcon v-if="!isCollapse" :extra-icon="props.item.meta.extraIcon" />
189
+ </template>
190
+ <sidebar-item
191
+ v-for="child in props.item.children"
192
+ :key="child.path"
193
+ :is-nest="true"
194
+ :item="child"
195
+ :base-path="resolvePath(child.path)"
196
+ class="nest-menu"
197
+ />
198
+ </el-sub-menu>
199
+ </template>
@@ -1,92 +1,92 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2021-11-17 16:02:30
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2023-10-09 12:00:16
6
- * @Description: 左侧边栏
7
- -->
8
-
9
- <script setup lang="ts">
10
- import Logo from './sidebar-logo.vue';
11
- import { emitter } from '../../../utils/mitt';
12
- import { useNav } from '../..//hooks/useNav';
13
- import SidebarItem from './sidebarItem.vue';
14
- import { storageLocal } from '@utogether/utils';
15
- import { useRoute } from 'vue-router';
16
- import { ref, computed, watch, onMounted, onBeforeUnmount } from 'vue';
17
- import { findRouteByPath, getParentPaths } from '../../../router/utils';
18
- import { responsiveStorageNameSpace } from '../../../config';
19
- import { usePermissionStoreHook } from '../../../store/modules/permission';
20
-
21
- defineOptions({ name: 'LayoutVertical' });
22
-
23
- const route = useRoute();
24
- const showLogo = ref(storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.showLogo ?? true);
25
- const { device, appHook, isCollapse, menuSelect } = useNav();
26
- const subMenuData = ref([]);
27
-
28
- const menuData = computed(() => {
29
- return appHook.layout === 'mix' && device.value !== 'mobile'
30
- ? subMenuData.value
31
- : usePermissionStoreHook().wholeMenus;
32
- });
33
-
34
- const loading = computed(() => (appHook.layout === 'mix' ? false : menuData.value.length === 0 ? true : false));
35
-
36
- function getSubMenuData(path) {
37
- subMenuData.value = [];
38
- // path的上级路由组成的数组
39
- const parentPathArr = getParentPaths(path, usePermissionStoreHook().wholeMenus);
40
- // 当前路由的父级路由信息
41
- const parenetRoute = findRouteByPath(parentPathArr[0] || path, usePermissionStoreHook().wholeMenus);
42
- if (!parenetRoute?.children) return;
43
- subMenuData.value = parenetRoute?.children;
44
- }
45
-
46
- getSubMenuData(route.path);
47
-
48
- watch(
49
- () => route.path,
50
- () => {
51
- if (route.path.includes('/redirect')) return;
52
- getSubMenuData(route.path);
53
- menuSelect(route.path);
54
- }
55
- );
56
- onMounted(() => {
57
- emitter.on('logoChange', key => {
58
- showLogo.value = key;
59
- });
60
- });
61
- onBeforeUnmount(() => {
62
- // 解绑`logoChange`公共事件,防止多次触发
63
- emitter.off('logoChange');
64
- });
65
- </script>
66
-
67
- <template>
68
- <div v-spinning="loading" :class="['sidebar-container', showLogo ? 'has-logo' : 'no-logo']">
69
- <Logo v-if="showLogo" :collapse="isCollapse" />
70
- <el-scrollbar wrap-class="scrollbar-wrapper" :class="[device === 'mobile' ? 'mobile' : 'pc']">
71
- <template #default>
72
- <el-menu
73
- :default-active="route.path"
74
- :collapse="isCollapse"
75
- :collapse-transition="false"
76
- router
77
- mode="vertical"
78
- popper-class="udp-scrollbar"
79
- class="select-none outer-most"
80
- >
81
- <sidebar-item
82
- v-for="routes in menuData"
83
- :key="routes.path"
84
- :item="routes"
85
- class="select-none outer-most"
86
- :base-path="routes.path"
87
- />
88
- </el-menu>
89
- </template>
90
- </el-scrollbar>
91
- </div>
92
- </template>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-17 16:02:30
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2026-09-09 11:32:54
6
+ * @Description: 左侧边栏
7
+ -->
8
+
9
+ <script setup lang="ts">
10
+ import Logo from './sidebar-logo.vue';
11
+ import { emitter } from '../../../utils/mitt';
12
+ import { useNav } from '../..//hooks/useNav';
13
+ import SidebarItem from './sidebarItem.vue';
14
+ import { storageLocal } from '@utogether/utils';
15
+ import { useRoute } from 'vue-router';
16
+ import { ref, computed, watch, onMounted, onBeforeUnmount } from 'vue';
17
+ import { findRouteByPath, getParentPaths } from '../../../router/utils';
18
+ import { responsiveStorageNameSpace } from '../../../config';
19
+ import { usePermissionStoreHook } from '../../../store/modules/permission';
20
+
21
+ defineOptions({ name: 'LayoutVertical' });
22
+
23
+ const route = useRoute();
24
+ const showLogo = ref(storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.showLogo ?? true);
25
+ const { device, appHook, isCollapse, menuSelect } = useNav();
26
+ const subMenuData = ref([]);
27
+
28
+ const menuData = computed(() => {
29
+ return appHook.layout === 'mix' && device.value !== 'mobile'
30
+ ? subMenuData.value
31
+ : usePermissionStoreHook().wholeMenus;
32
+ });
33
+
34
+ const loading = computed(() => (appHook.layout === 'mix' ? false : menuData.value.length === 0 ? true : false));
35
+
36
+ function getSubMenuData(path) {
37
+ subMenuData.value = [];
38
+ // path的上级路由组成的数组
39
+ const parentPathArr = getParentPaths(path, usePermissionStoreHook().wholeMenus);
40
+ // 当前路由的父级路由信息
41
+ const parenetRoute = findRouteByPath(parentPathArr[0] || path, usePermissionStoreHook().wholeMenus);
42
+ if (!parenetRoute?.children) return;
43
+ subMenuData.value = parenetRoute?.children;
44
+ }
45
+
46
+ getSubMenuData(route.path);
47
+
48
+ watch(
49
+ () => route.path,
50
+ () => {
51
+ if (route.path.includes('/redirect')) return;
52
+ getSubMenuData(route.path);
53
+ menuSelect(route.path);
54
+ }
55
+ );
56
+ onMounted(() => {
57
+ emitter.on('logoChange', key => {
58
+ showLogo.value = key;
59
+ });
60
+ });
61
+ onBeforeUnmount(() => {
62
+ // 解绑`logoChange`公共事件,防止多次触发
63
+ emitter.off('logoChange');
64
+ });
65
+ </script>
66
+
67
+ <template>
68
+ <div v-spinning="loading" :class="['sidebar-container', showLogo ? 'has-logo' : 'no-logo']">
69
+ <Logo v-if="showLogo" :collapse="isCollapse" />
70
+ <el-scrollbar wrap-class="scrollbar-wrapper" :class="[device === 'mobile' ? 'mobile' : 'pc']">
71
+ <template #default>
72
+ <el-menu
73
+ :default-active="route.path"
74
+ :collapse="isCollapse"
75
+ :collapse-transition="false"
76
+ router
77
+ mode="vertical"
78
+ popper-class="udp-scrollbar"
79
+ class="select-none outer-most"
80
+ >
81
+ <sidebar-item
82
+ v-for="routes in menuData"
83
+ :key="routes.path"
84
+ :item="routes"
85
+ class="select-none outer-most"
86
+ :base-path="routes.path"
87
+ />
88
+ </el-menu>
89
+ </template>
90
+ </el-scrollbar>
91
+ </div>
92
+ </template>
@@ -110,6 +110,7 @@ onMounted(() => {
110
110
  if (isMobile) {
111
111
  toggle('mobile', false);
112
112
  }
113
+ console.log('appWrapperRef', 111);
113
114
  });
114
115
 
115
116
  onBeforeMount(() => {