@utogether/udp-core 1.0.1-beta.16 → 1.0.1-beta.18

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 (123) hide show
  1. package/build/plugins.ts +39 -39
  2. package/dist/{403-RBzulrcG.js → 403-B8xAGW0x.js} +1 -1
  3. package/dist/{404-DX-dU_6C.js → 404-BtgajMpP.js} +1 -1
  4. package/dist/{500-BCTk0__d.js → 500-DFWWZylZ.js} +1 -1
  5. package/dist/{AuthorityInfo-BADTOenq.js → AuthorityInfo-BxWSZs7n.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-Cv46yAx_.js → AuthorityInfo.vue_vue_type_style_index_0_lang-XIiFdjxN.js} +1 -1
  7. package/dist/{Company-B-61KrWd.js → Company-BbUJtuvr.js} +3 -3
  8. package/dist/{CompanyPanel-CawSrEff.js → CompanyPanel-KOOFrGjk.js} +8 -8
  9. package/dist/{Department-CrzJPtvP.js → Department-BimSgBm2.js} +3 -3
  10. package/dist/{DepartmentPanel-DYuL8H-j.js → DepartmentPanel-DYXPUCDs.js} +3 -3
  11. package/dist/{DesignPanel-DEAv6V68.js → DesignPanel-CHZ36J4q.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BsnXZ2td.js → DesignPanel.vue_vue_type_style_index_0_lang-ZbNixuuY.js} +2 -2
  13. package/dist/{DictView-BuO-2b-c.js → DictView-7RQYVj4H.js} +1 -1
  14. package/dist/{InvOrganization-CBgKBJAn.js → InvOrganization-esq9FI1K.js} +1 -1
  15. package/dist/{Org-BaQw2r-o.js → Org-BGswGV9g.js} +1 -1
  16. package/dist/{Preview-DvCrmKNk.js → Preview-DP0pD6Kf.js} +1 -1
  17. package/dist/{ReportDefine-DyhWz0as.js → ReportDefine-1rjKlbK-.js} +1 -1
  18. package/dist/{ReportDesign-DgZ2f2zv.js → ReportDesign-BIUj35Kh.js} +2 -2
  19. package/dist/{ReportQuery-DTZYbCDi.js → ReportQuery-CWevStRg.js} +1 -1
  20. package/dist/{ReportQueryFrom-B-vtJegP.js → ReportQueryFrom-vlOF5_gc.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-D6izgxph.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-BGyeoYxo.js} +1 -1
  22. package/dist/{ReportTemplate-DA1ZqKGf.js → ReportTemplate-BPURQOFZ.js} +1 -1
  23. package/dist/{Role-mbqoav5t.js → Role-D8xJ3rai.js} +3 -3
  24. package/dist/{RoleAssign-ltEJIEcr.js → RoleAssign-CE5FeHLd.js} +8 -8
  25. package/dist/{RolePanel-u90v9eS0.js → RolePanel-B6wskQVB.js} +1 -1
  26. package/dist/{RolePanel-1g1a-G8D.js → RolePanel-CqHsGjrK.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-LC4Egk-Q.js → RolePanel.vue_vue_type_script_setup_true_lang-Bjoq-nCm.js} +3 -3
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-D9YxpGnt.js → RolePanel.vue_vue_type_script_setup_true_lang-Dv5IVELj.js} +1 -1
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DZ3W1epK.js → ScrollPanel.vue_vue_type_style_index_0_lang-Bp8Y_5A2.js} +1 -1
  30. package/dist/{Staff-CJ2GgCL3.js → Staff-DuYrik71.js} +3 -3
  31. package/dist/{StaffInfo-3KkodDCK.js → StaffInfo-CZiak-1b.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-CW-isIxJ.js → StaffInfo.vue_vue_type_script_setup_true_lang-LCuqxUh8.js} +1 -1
  33. package/dist/{StaffPanel-DoXPSoY5.js → StaffPanel-DI6MBAJH.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DvhGnOMZ.js → StaffPanel.vue_vue_type_script_setup_true_lang-DxJhnVpd.js} +2 -2
  35. package/dist/{SysUser-BuIZhMPh.js → SysUser-DoNj2tIV.js} +2 -2
  36. package/dist/{SysUserPanel-t1GJcJGM.js → SysUserPanel-CvfyRxel.js} +1 -1
  37. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-CDDkFLlN.js → SysUserPanel.vue_vue_type_script_setup_true_lang-BoghL7F3.js} +43 -39
  38. package/dist/{SystemMenu-DuLEL6_l.js → SystemMenu-Cr3vUEQU.js} +2 -2
  39. package/dist/{UserInfo-WWby4lts.js → UserInfo-6c8UDIVO.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-B06ZSrJV.js → UserInfo.vue_vue_type_style_index_0_lang-DstUSeNQ.js} +1 -1
  41. package/dist/{childView-B0-EAoAi.js → childView-BlmHw5jv.js} +1 -1
  42. package/dist/{childView-IYY4L8VK.js → childView-C050pf1v.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-B56v6yK7.js → childView.vue_vue_type_style_index_0_lang-BxLT1Dz0.js} +1 -1
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-CjF8nZuj.js → childView.vue_vue_type_style_index_0_lang-D0nlTIP-.js} +2 -2
  45. package/dist/{code-rule-DDLdi3pP.js → code-rule-Br1Mh3_M.js} +1 -1
  46. package/dist/core.es.js +1 -1
  47. package/dist/{cron-task-p3-AFN1w.js → cron-task-DhuIk5pP.js} +1 -1
  48. package/dist/{frameView-B_WAZErD.js → frameView-hJoSI0Ai.js} +1 -1
  49. package/dist/index-1dgWFXT2.js +5436 -0
  50. package/dist/{layoutView-CoEp2afn.js → layoutView-DU-TVfOp.js} +1340 -1337
  51. package/dist/{login-DP0oP70W.js → login-CzJBV0x8.js} +2 -2
  52. package/dist/{lov-view-BDoZRK-v.js → lov-view-BxaHaVKE.js} +2 -2
  53. package/dist/{menuInfo-5Xls76qB.js → menuInfo-Dp7nAbgM.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BfZczW9a.js → menuInfo.vue_vue_type_style_index_0_lang-Ch4NbiCL.js} +1 -1
  55. package/dist/{pda-app-DxGYn4G7.js → pda-app-BmxY3H7y.js} +2 -2
  56. package/dist/{resource-BnYWe_-Q.js → resource-D2dCI_x9.js} +1 -1
  57. package/dist/{su-welcome-B2rNhhDH.js → su-welcome-BKGU5HUf.js} +1 -1
  58. package/dist/{sys-config-Bb4WkxZK.js → sys-config-s8DnZMOd.js} +1 -1
  59. package/dist/udp-core.css +1 -9
  60. package/index.ts +48 -48
  61. package/package.json +1 -1
  62. package/src/App.vue +65 -65
  63. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  64. package/src/components/SuScrollTree/ScrollPanel.vue +170 -175
  65. package/src/components/udp/{grid.vue → grid/index.vue} +39 -25
  66. package/src/components/udp/index.ts +2 -9
  67. package/src/components/udp/utils.ts +63 -108
  68. package/src/layout/components/lay-navbar/index.vue +239 -239
  69. package/src/layout/components/lay-panel/index.vue +150 -150
  70. package/src/layout/components/lay-search/index.vue +25 -25
  71. package/src/layout/components/lay-select-org/index.vue +64 -64
  72. package/src/layout/components/lay-sidebar/horizontal.vue +190 -190
  73. package/src/layout/components/lay-sidebar/mixNav.vue +260 -260
  74. package/src/layout/components/lay-sidebar/sidebar-logo.vue +1 -0
  75. package/src/layout/components/lay-tag/index.vue +20 -48
  76. package/src/layout/hooks/useNav.ts +173 -173
  77. package/src/layout/hooks/useTag.ts +5 -3
  78. package/src/layout/types.ts +3 -2
  79. package/src/main.ts +24 -21
  80. package/src/plugins/i18n/en.ts +302 -302
  81. package/src/plugins/i18n/zh.ts +356 -354
  82. package/src/plugins/vxe-table/index.ts +67 -4
  83. package/src/plugins/vxe-table/render.tsx +18 -29
  84. package/src/router/index.ts +186 -177
  85. package/src/router/modules/remaining.ts +58 -58
  86. package/src/router/utils.ts +393 -377
  87. package/src/store/modules/app.ts +1 -3
  88. package/src/store/modules/multiTags.ts +110 -109
  89. package/src/store/modules/permission.ts +113 -100
  90. package/src/style/button.scss +85 -85
  91. package/src/style/login.css +336 -336
  92. package/src/style/vxetable.scss +338 -321
  93. package/src/views/organization/company/CompanyPanel.vue +259 -259
  94. package/src/views/organization/department/DepartmentPanel.vue +269 -283
  95. package/src/views/system/menu/SystemMenu.vue +183 -183
  96. package/src/views/system/menu/menuInfo.vue +363 -363
  97. package/src/views/system/role/UserInfo.vue +195 -195
  98. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  99. package/src/views/system/role-assign/RolePanel.vue +139 -139
  100. package/src/views/system/sys/sys-config.vue +336 -336
  101. package/src/views/system/sysUser/SysUserPanel.vue +279 -278
  102. package/src/views/uapp/pda/pda-app.vue +208 -208
  103. package/src/views/udev/dict/DictView.vue +118 -118
  104. package/src/views/udev/dict/childView.vue +1 -1
  105. package/src/views/udev/lov/lov-view.vue +91 -91
  106. package/src/views/ulogin/login.vue +323 -323
  107. package/src/views/upms/interface/log-out.vue +101 -101
  108. package/src/views/urpt/design/DesignPanel.vue +507 -507
  109. package/types/global.d.ts +230 -230
  110. package/dist/index-24fnvUBy.js +0 -2822
  111. package/src/components/udp/count-down.vue +0 -536
  112. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  113. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  114. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  115. package/src/components/udp/form-upload.vue +0 -482
  116. package/src/components/udp/form.vue +0 -112
  117. package/src/components/udp/lov.vue +0 -388
  118. package/src/components/udp/modal-form.vue +0 -190
  119. package/src/components/udp/modal-grid.vue +0 -298
  120. package/src/components/udp/upload.vue +0 -423
  121. package/src/utils/udp/http/index.ts +0 -294
  122. package/src/utils/udp/http/types.d.ts +0 -49
  123. package/src/utils/udp/useRender.ts +0 -431
@@ -14,9 +14,7 @@ import { responsiveStorageNameSpace, getConfig } from '../../config';
14
14
  export const useAppStore = defineStore('udp-app', {
15
15
  state: (): appType => ({
16
16
  sidebar: {
17
- opened:
18
- storageLocal.getItem(`${responsiveStorageNameSpace()}layout`)?.sidebarStatus ??
19
- getConfig().SidebarStatus,
17
+ opened: storageLocal.getItem(`${responsiveStorageNameSpace()}layout`)?.sidebarStatus ?? getConfig().SidebarStatus,
20
18
  withoutAnimation: false,
21
19
  isClickCollapse: false
22
20
  },
@@ -1,109 +1,110 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2021-12-23 17:33:20
4
- * @LastEditors: wei.li
5
- * @LastEditTime: 2024-07-03 10:27:36
6
- * @Description: file content
7
- */
8
- import { defineStore } from 'pinia';
9
- import { isEqual, isBoolean } from 'xe-utils';
10
- import { storageLocal, isUrl } from '@utogether/utils';
11
- import { store } from '../index';
12
- import { routerArrays } from '../../layout/types';
13
- import { usePermissionStoreHook } from './permission';
14
- import { responsiveStorageNameSpace } from '../../config';
15
- import type { multiType, positionType } from './types';
16
-
17
- export const useMultiTagsStore = defineStore('udp-multiTags', {
18
- state: () => ({
19
- // 存储标签页信息(路由信息)
20
- multiTags: storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.multiTagsCache
21
- ? storageLocal.getItem(`${responsiveStorageNameSpace()}tags`)
22
- : [...routerArrays, ...usePermissionStoreHook().flatteningRoutes.filter(v => v?.meta?.fixedTag)],
23
- multiTagsCache: storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.multiTagsCache
24
- }),
25
- getters: {
26
- getMultiTagsCache(state) {
27
- return state.multiTagsCache;
28
- }
29
- },
30
- actions: {
31
- multiTagsCacheChange(multiTagsCache: boolean) {
32
- this.multiTagsCache = multiTagsCache;
33
- if (multiTagsCache) {
34
- storageLocal.setItem(`${responsiveStorageNameSpace()}tags`, this.multiTags);
35
- } else {
36
- storageLocal.removeItem(`${responsiveStorageNameSpace()}tags`);
37
- }
38
- },
39
- tagsCache(multiTags) {
40
- this.getMultiTagsCache && storageLocal.setItem(`${responsiveStorageNameSpace()}tags`, multiTags);
41
- },
42
- handleTags<T>(mode: string, value?: T | multiType, position?: positionType): T {
43
- switch (mode) {
44
- case 'equal':
45
- this.multiTags = value;
46
- this.tagsCache(this.multiTags);
47
- break;
48
- case 'push':
49
- {
50
- const tagVal = value as multiType;
51
- // 不添加到标签页
52
- if (tagVal?.meta?.hiddenTag) return;
53
- // 如果是外链无需添加信息到标签页
54
- if (isUrl(tagVal?.name)) return;
55
- // 如果title为空拒绝添加空信息到标签页
56
- if (tagVal?.meta?.title?.length === 0) return;
57
- // showLink:false 不添加到标签页
58
- if (isBoolean(tagVal?.meta?.showLink) && !tagVal?.meta?.showLink) return;
59
- const tagPath = tagVal.path;
60
- // 判断tag是否已存在
61
- const tagHasExits = this.multiTags.some(tag => {
62
- return tag.path === tagPath;
63
- });
64
-
65
- // 判断tag中的query键值是否相等
66
- const tagQueryHasExits = this.multiTags.some(tag => {
67
- return isEqual(tag?.query, tagVal?.query);
68
- });
69
-
70
- // 判断tag中的params键值是否相等
71
- const tagParamsHasExits = this.multiTags.some(tag => {
72
- return isEqual(tag?.params, tagVal?.params);
73
- });
74
-
75
- if (tagHasExits && tagQueryHasExits && tagParamsHasExits) return;
76
-
77
- // 动态路由可打开的最大数量
78
- const dynamicLevel = tagVal?.meta?.dynamicLevel ?? -1;
79
- if (dynamicLevel > 0) {
80
- if (this.multiTags.filter(e => e?.path === tagPath).length >= dynamicLevel) {
81
- // 如果当前已打开的动态路由数大于dynamicLevel,替换第一个动态路由标签
82
- const index = this.multiTags.findIndex(item => item?.path === tagPath);
83
- index !== -1 && this.multiTags.splice(index, 1);
84
- }
85
- }
86
- this.multiTags.push(value);
87
- this.tagsCache(this.multiTags);
88
- }
89
- break;
90
- case 'splice':
91
- if (!position) {
92
- const index = this.multiTags.findIndex(v => v.path === value);
93
- if (index === -1) return;
94
- this.multiTags.splice(index, 1);
95
- } else {
96
- this.multiTags.splice(position?.startIndex, position?.length);
97
- }
98
- this.tagsCache(this.multiTags);
99
- return this.multiTags;
100
- case 'slice':
101
- return this.multiTags.slice(-1);
102
- }
103
- }
104
- }
105
- });
106
-
107
- export function useMultiTagsStoreHook() {
108
- return useMultiTagsStore(store);
109
- }
1
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2021-12-23 17:33:20
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-10-19 12:01:05
6
+ * @Description: file content
7
+ */
8
+ import { defineStore } from 'pinia';
9
+ import { isEqual, isBoolean } from 'xe-utils';
10
+ import { storageLocal, isUrl } from '@utogether/utils';
11
+ import { store } from '../index';
12
+ import { routerArrays } from '../../layout/types';
13
+ import { usePermissionStoreHook } from './permission';
14
+ import { responsiveStorageNameSpace } from '../../config';
15
+ import type { multiType, positionType } from './types';
16
+
17
+ export const useMultiTagsStore = defineStore('udp-multiTags', {
18
+ state: () => ({
19
+ // 存储标签页信息(路由信息)
20
+ multiTags: storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.multiTagsCache
21
+ ? storageLocal.getItem(`${responsiveStorageNameSpace()}tags`)
22
+ : [...routerArrays, ...usePermissionStoreHook().flatteningRoutes.filter(v => v?.meta?.fixedTag)],
23
+ multiTagsCache: storageLocal.getItem(`${responsiveStorageNameSpace()}configure`)?.multiTagsCache
24
+ }),
25
+ getters: {
26
+ getMultiTagsCache(state) {
27
+ return state.multiTagsCache;
28
+ }
29
+ },
30
+ actions: {
31
+ multiTagsCacheChange(multiTagsCache: boolean) {
32
+ this.multiTagsCache = multiTagsCache;
33
+ if (multiTagsCache) {
34
+ storageLocal.setItem(`${responsiveStorageNameSpace()}tags`, this.multiTags);
35
+ } else {
36
+ storageLocal.removeItem(`${responsiveStorageNameSpace()}tags`);
37
+ }
38
+ },
39
+ tagsCache(multiTags) {
40
+ this.getMultiTagsCache && storageLocal.setItem(`${responsiveStorageNameSpace()}tags`, multiTags);
41
+ },
42
+ handleTags<T>(mode: string, value?: T | multiType, position?: positionType): T {
43
+ switch (mode) {
44
+ case 'equal':
45
+ this.multiTags = value;
46
+ this.tagsCache(this.multiTags);
47
+ break;
48
+ case 'push':
49
+ {
50
+ const tagVal = value as multiType;
51
+ // 不添加到标签页
52
+ if (tagVal?.meta?.hiddenTag) return;
53
+ // 如果是外链无需添加信息到标签页
54
+ if (isUrl(tagVal?.name)) return;
55
+ // 如果title为空拒绝添加空信息到标签页
56
+ if (tagVal?.meta?.title?.length === 0) return;
57
+ // showLink:false 不添加到标签页
58
+ if (isBoolean(tagVal?.meta?.showLink) && !tagVal?.meta?.showLink) return;
59
+ const tagPath = tagVal.path;
60
+ // 判断tag是否已存在
61
+ const tagHasExits = this.multiTags.some(tag => {
62
+ return tag.path === tagPath && isEqual(tag?.query, tagVal?.query) && isEqual(tag?.params, tagVal?.params);
63
+ });
64
+
65
+ // 判断tag中的query键值是否相等
66
+ // const tagQueryHasExits = this.multiTags.some(tag => {
67
+ // return isEqual(tag?.query, tagVal?.query);
68
+ // });
69
+
70
+ // // 判断tag中的params键值是否相等
71
+ // const tagParamsHasExits = this.multiTags.some(tag => {
72
+ // return isEqual(tag?.params, tagVal?.params);
73
+ // });
74
+
75
+ // if (tagHasExits && tagQueryHasExits && tagParamsHasExits) return;
76
+ if (tagHasExits) return;
77
+
78
+ // 动态路由可打开的最大数量
79
+ const dynamicLevel = tagVal?.meta?.dynamicLevel ?? -1;
80
+ if (dynamicLevel > 0) {
81
+ if (this.multiTags.filter(e => e?.path === tagPath).length >= dynamicLevel) {
82
+ // 如果当前已打开的动态路由数大于dynamicLevel,替换第一个动态路由标签
83
+ const index = this.multiTags.findIndex(item => item?.path === tagPath);
84
+ index !== -1 && this.multiTags.splice(index, 1);
85
+ }
86
+ }
87
+ this.multiTags.push(value);
88
+ this.tagsCache(this.multiTags);
89
+ }
90
+ break;
91
+ case 'splice':
92
+ if (!position) {
93
+ const index = this.multiTags.findIndex(v => v.path === value);
94
+ if (index === -1) return;
95
+ this.multiTags.splice(index, 1);
96
+ } else {
97
+ this.multiTags.splice(position?.startIndex, position?.length);
98
+ }
99
+ this.tagsCache(this.multiTags);
100
+ return this.multiTags;
101
+ case 'slice':
102
+ return this.multiTags.slice(-1);
103
+ }
104
+ }
105
+ }
106
+ });
107
+
108
+ export function useMultiTagsStoreHook() {
109
+ return useMultiTagsStore(store);
110
+ }
@@ -1,100 +1,113 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2021-11-17 16:02:30
4
- * @LastEditors: wei.li
5
- * @LastEditTime: 2024-07-03 10:20:58
6
- * @Description: file content
7
- */
8
- import { defineStore } from 'pinia';
9
- import { store } from '../index';
10
- import type { cacheType } from './types';
11
- import { constantMenus } from '../../router';
12
- import { clone, debounce, findLastIndexOf } from 'xe-utils';
13
- import { getKeyList } from '../../utils';
14
- import { ascending, filterTree, formatFlatteningRoutes } from '../../router/utils';
15
- import { useMultiTagsStoreHook } from './multiTags';
16
-
17
- export const usePermissionStore = defineStore('udp-permission', {
18
- state: () => ({
19
- // 静态路由生成的菜单
20
- constantMenus,
21
- // 整体路由生成的菜单(静态、动态)
22
- wholeMenus: [],
23
- // 深拷贝一个菜单树,与导航菜单不冲突
24
- menusTree: [],
25
- // 整体路由(一维数组格式)
26
- flatteningRoutes: [],
27
- buttonAuth: [],
28
- // 缓存页面keepAlive
29
- cachePageList: []
30
- }),
31
- getters: {
32
- getButtonAuth() {
33
- return this.buttonAuth;
34
- }
35
- },
36
- actions: {
37
- asyncActionRoutes(routes = []) {
38
- if (this.wholeMenus.length > 0) return;
39
- const idx = findLastIndexOf(routes, item => item.menuCode === 'SysHome');
40
- const constantMenus = clone(this.constantMenus, true);
41
- if (idx !== -1) {
42
- const homeRouter = this.constantMenus.find(f => f.name === 'home');
43
- // 过滤非路由分类非菜单的数据
44
- routes[idx].children && homeRouter.children.push(...routes[idx].children);
45
- routes.splice(idx, 1);
46
- }
47
- this.wholeMenus = filterTree(ascending(this.constantMenus.concat(routes)));
48
- this.flatteningRoutes = formatFlatteningRoutes(this.constantMenus.concat(routes));
49
- this.menusTree = clone(this.wholeMenus, true);
50
- this.constantMenus = constantMenus;
51
- },
52
- async changeSetting(routes) {
53
- await this.asyncActionRoutes(routes);
54
- },
55
- setAuthButton(buttonAuth) {
56
- this.buttonAuth = buttonAuth;
57
- },
58
- setWholeMenus(wholeMenus) {
59
- this.wholeMenus = wholeMenus;
60
- },
61
- cacheOperate({ mode, name }: cacheType) {
62
- const delIndex = this.cachePageList.findIndex(v => v === name);
63
- switch (mode) {
64
- case 'refresh':
65
- this.cachePageList = this.cachePageList.filter(v => v !== name);
66
- break;
67
- case 'add':
68
- this.cachePageList.push(name);
69
- break;
70
- case 'delete':
71
- delIndex !== -1 && this.cachePageList.splice(delIndex, 1);
72
- break;
73
- case 'reset':
74
- this.cachePageList = [];
75
- break;
76
- }
77
- /** 监听缓存页面是否存在于标签页,不存在则删除 */
78
- debounce(() => {
79
- let cacheLength = this.cachePageList.length;
80
- const nameList = getKeyList(useMultiTagsStoreHook().multiTags, 'name');
81
- while (cacheLength > 0) {
82
- nameList.findIndex(v => v === this.cachePageList[cacheLength - 1]) === -1 &&
83
- this.cachePageList.splice(this.cachePageList.indexOf(this.cachePageList[cacheLength - 1]), 1);
84
- cacheLength--;
85
- }
86
- }, 500)();
87
- },
88
- /** 清空缓存页面 */
89
- clearAllCachePage() {
90
- this.wholeMenus = [];
91
- this.menusTree = [];
92
- this.buttonAuth = [];
93
- this.cachePageList = [];
94
- }
95
- }
96
- });
97
-
98
- export function usePermissionStoreHook() {
99
- return usePermissionStore(store);
100
- }
1
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-17 16:02:30
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-10-19 11:58:29
6
+ * @Description: file content
7
+ */
8
+ import { defineStore } from 'pinia';
9
+ import { store } from '../index';
10
+ import type { cacheType } from './types';
11
+ import { constantMenus } from '../../router';
12
+ import { clone, findLastIndexOf } from 'xe-utils';
13
+ import { getKeyList } from '../../utils';
14
+ import { ascending, filterTree, formatFlatteningRoutes } from '../../router/utils';
15
+ import { useMultiTagsStoreHook } from './multiTags';
16
+
17
+ export const usePermissionStore = defineStore('udp-permission', {
18
+ state: () => ({
19
+ // 静态路由生成的菜单
20
+ constantMenus,
21
+ // 整体路由生成的菜单(静态、动态)
22
+ wholeMenus: [],
23
+ // 深拷贝一个菜单树,与导航菜单不冲突
24
+ menusTree: [],
25
+ // 整体路由(一维数组格式)
26
+ flatteningRoutes: [],
27
+ buttonAuth: [],
28
+ // 缓存页面keepAlive
29
+ cachePageList: []
30
+ }),
31
+ getters: {
32
+ getButtonAuth() {
33
+ return this.buttonAuth;
34
+ }
35
+ },
36
+ actions: {
37
+ asyncActionRoutes(routes = []) {
38
+ if (this.wholeMenus.length > 0) return;
39
+ const idx = findLastIndexOf(routes, item => item.menuCode === 'SysHome');
40
+ const constantMenus = clone(this.constantMenus, true);
41
+ if (idx !== -1) {
42
+ const homeRouter = this.constantMenus.find(f => f.name === 'home');
43
+ // 过滤非路由分类非菜单的数据
44
+ routes[idx].children && homeRouter.children.push(...routes[idx].children);
45
+ routes.splice(idx, 1);
46
+ }
47
+ this.wholeMenus = filterTree(ascending(this.constantMenus.concat(routes)));
48
+ this.flatteningRoutes = formatFlatteningRoutes(this.constantMenus.concat(routes));
49
+ this.menusTree = clone(this.wholeMenus, true);
50
+ this.constantMenus = constantMenus;
51
+ },
52
+ async changeSetting(routes) {
53
+ await this.asyncActionRoutes(routes);
54
+ },
55
+ setAuthButton(buttonAuth) {
56
+ this.buttonAuth = buttonAuth;
57
+ },
58
+ setWholeMenus(wholeMenus) {
59
+ this.wholeMenus = wholeMenus;
60
+ },
61
+
62
+ /** 监听缓存页面是否存在于标签页,不存在则删除 */
63
+ clearCache() {
64
+ let cacheLength = this.cachePageList.length;
65
+ const nameList = getKeyList(useMultiTagsStoreHook().multiTags, 'name');
66
+ while (cacheLength > 0) {
67
+ nameList.findIndex(v => v === this.cachePageList[cacheLength - 1]) === -1 &&
68
+ this.cachePageList.splice(this.cachePageList.indexOf(this.cachePageList[cacheLength - 1]), 1);
69
+ cacheLength--;
70
+ }
71
+ },
72
+ cacheOperate({ mode, name }: cacheType) {
73
+ const delIndex = this.cachePageList.findIndex(v => v === name);
74
+ switch (mode) {
75
+ case 'refresh':
76
+ this.cachePageList = this.cachePageList.filter(v => v !== name);
77
+ this.clearCache();
78
+ break;
79
+ case 'add':
80
+ this.cachePageList.push(name);
81
+ break;
82
+ case 'delete':
83
+ delIndex !== -1 && this.cachePageList.splice(delIndex, 1);
84
+ this.clearCache();
85
+ break;
86
+ case 'reset':
87
+ this.cachePageList = [];
88
+ break;
89
+ }
90
+ /** 监听缓存页面是否存在于标签页,不存在则删除 */
91
+ // debounce(() => {
92
+ // let cacheLength = this.cachePageList.length;
93
+ // const nameList = getKeyList(useMultiTagsStoreHook().multiTags, 'name');
94
+ // while (cacheLength > 0) {
95
+ // nameList.findIndex(v => v === this.cachePageList[cacheLength - 1]) === -1 &&
96
+ // this.cachePageList.splice(this.cachePageList.indexOf(this.cachePageList[cacheLength - 1]), 1);
97
+ // cacheLength--;
98
+ // }
99
+ // }, 500)();
100
+ },
101
+ /** 清空缓存页面 */
102
+ clearAllCachePage() {
103
+ this.wholeMenus = [];
104
+ this.menusTree = [];
105
+ this.buttonAuth = [];
106
+ this.cachePageList = [];
107
+ }
108
+ }
109
+ });
110
+
111
+ export function usePermissionStoreHook() {
112
+ return usePermissionStore(store);
113
+ }
@@ -1,85 +1,85 @@
1
- .vxe-button.size--mini.type--button {
2
- height: 25px;
3
- }
4
-
5
- .vxe-button.size--small.type--button {
6
- height: 25px;
7
- }
8
-
9
- .vxe-button.type--button.theme--u-cyan,
10
- .vxe-button.type--button.theme--u-cyan:hover {
11
- color: #fff;
12
- }
13
-
14
- .vxe-button.type--button.theme--u-cyan {
15
- background-color: #1cbbb4;
16
- }
17
-
18
- .vxe-button.type--button.theme--u-cyan:active {
19
- background-color: #39b54a;
20
- }
21
-
22
- // 禁用状态
23
- .vxe-button.type--button.theme--u-cyan.is--disabled {
24
- background-color: #69e4de;
25
- border-color: #69e4de;
26
- }
27
-
28
- .vxe-button.type--button.theme--u-color-shallow,
29
- .vxe-button.type--button.theme--u-color-shallow:hover {
30
- color: #fff;
31
- }
32
-
33
- .vxe-button.type--button.theme--u-color-shallow {
34
- background-color: #fbbd08;
35
- }
36
-
37
- .vxe-button.type--button.theme--u-color-shallow:active {
38
- background-color: #fff;
39
- }
40
-
41
- .layout-theme-default .vxe-button.type--button.theme--u-cyan:not(.is--disabled):hover {
42
- background-color: #40e0d0;
43
- border-color: #40e0d0;
44
- }
45
-
46
- .vxe-button.type--button:not(.is--disabled):hover {
47
- color: #fff;
48
-
49
- .vxe-button--icon,
50
- .vxe-button--item {
51
- color: inherit;
52
- }
53
- }
54
-
55
- .vxe-button[name='favorite'].type--button:not(.is--disabled):hover {
56
- .vxe-button--item {
57
- color: var(--udp-theme-vxeColor);
58
- }
59
- }
60
-
61
- .u-color-royalBlue {
62
- color: #4169e1;
63
- }
64
-
65
- .u-color-turquoise {
66
- color: #40e0d0;
67
- }
68
-
69
- .el-dropdown {
70
- .el-dropdown__caret-button {
71
- margin-left: 0;
72
- border-top-left-radius: 0;
73
- border-bottom-left-radius: 0;
74
- }
75
-
76
- .el-button-group + .el-button {
77
- border-top-right-radius: 0 !important;
78
- border-bottom-right-radius: 0 !important;
79
- }
80
-
81
- .el-button:first-child {
82
- border-top-right-radius: 0 !important;
83
- border-bottom-right-radius: 0 !important;
84
- }
85
- }
1
+ .vxe-button.size--mini.type--button {
2
+ height: 25px;
3
+ }
4
+
5
+ .vxe-button.size--small.type--button {
6
+ height: 25px;
7
+ }
8
+
9
+ .vxe-button.type--button.theme--u-cyan,
10
+ .vxe-button.type--button.theme--u-cyan:hover {
11
+ color: #fff;
12
+ }
13
+
14
+ .vxe-button.type--button.theme--u-cyan {
15
+ background-color: #1cbbb4;
16
+ }
17
+
18
+ .vxe-button.type--button.theme--u-cyan:active {
19
+ background-color: #39b54a;
20
+ }
21
+
22
+ // 禁用状态
23
+ .vxe-button.type--button.theme--u-cyan.is--disabled {
24
+ background-color: #69e4de;
25
+ border-color: #69e4de;
26
+ }
27
+
28
+ .vxe-button.type--button.theme--u-color-shallow,
29
+ .vxe-button.type--button.theme--u-color-shallow:hover {
30
+ color: #fff;
31
+ }
32
+
33
+ .vxe-button.type--button.theme--u-color-shallow {
34
+ background-color: #fbbd08;
35
+ }
36
+
37
+ .vxe-button.type--button.theme--u-color-shallow:active {
38
+ background-color: #fff;
39
+ }
40
+
41
+ .layout-theme-default .vxe-button.type--button.theme--u-cyan:not(.is--disabled):hover {
42
+ background-color: #40e0d0;
43
+ border-color: #40e0d0;
44
+ }
45
+
46
+ .vxe-button.type--button:not(.is--disabled):hover {
47
+ color: inherit;
48
+
49
+ .vxe-button--icon,
50
+ .vxe-button--item {
51
+ color: inherit;
52
+ }
53
+ }
54
+
55
+ .vxe-button[name='favorite'].type--button:not(.is--disabled):hover {
56
+ .vxe-button--item {
57
+ color: var(--udp-theme-vxeColor);
58
+ }
59
+ }
60
+
61
+ .u-color-royalBlue {
62
+ color: #4169e1;
63
+ }
64
+
65
+ .u-color-turquoise {
66
+ color: #40e0d0;
67
+ }
68
+
69
+ .el-dropdown {
70
+ .el-dropdown__caret-button {
71
+ margin-left: 0;
72
+ border-top-left-radius: 0;
73
+ border-bottom-left-radius: 0;
74
+ }
75
+
76
+ .el-button-group + .el-button {
77
+ border-top-right-radius: 0 !important;
78
+ border-bottom-right-radius: 0 !important;
79
+ }
80
+
81
+ .el-button:first-child {
82
+ border-top-right-radius: 0 !important;
83
+ border-bottom-right-radius: 0 !important;
84
+ }
85
+ }