@utogether/udp-core 1.0.1-beta.27 → 1.0.1-beta.30

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 (95) hide show
  1. package/build/plugins.ts +37 -37
  2. package/dist/{403-A9aD_bZN.js → 403-DdjDWbkf.js} +1 -1
  3. package/dist/{404-DREd70aQ.js → 404-D9vF2gFz.js} +1 -1
  4. package/dist/{500-C5qVXkGt.js → 500-mVaDmUjL.js} +1 -1
  5. package/dist/{AuthorityInfo-CYO2IVau.js → AuthorityInfo-DOUJ_Zrj.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-V7e_KwWp.js → AuthorityInfo.vue_vue_type_style_index_0_lang-B12sAzqt.js} +1 -1
  7. package/dist/{Company-CaottHQO.js → Company-DY__kM9F.js} +3 -3
  8. package/dist/{CompanyPanel-B3hOiXqj.js → CompanyPanel-C5N8QcMA.js} +1 -1
  9. package/dist/{Department-CHkuRvJN.js → Department-DsuDZdy5.js} +3 -3
  10. package/dist/{DepartmentPanel-DieWfIxW.js → DepartmentPanel-CdwI7Rzu.js} +2 -2
  11. package/dist/{DesignPanel-REWXp3x4.js → DesignPanel-B50-g0TL.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-Df0xc5XP.js → DesignPanel.vue_vue_type_style_index_0_lang-KV8JOZ6v.js} +2 -2
  13. package/dist/{DictView-DnpDHskG.js → DictView-Be2Z5Obk.js} +1 -1
  14. package/dist/{InvOrganization-DoIsDrAx.js → InvOrganization-Lui1q3Ou.js} +1 -1
  15. package/dist/{Org-C4P5Cwia.js → Org-qO5ExsPN.js} +1 -1
  16. package/dist/{Preview-d90pQdFJ.js → Preview-Dq4dfV2D.js} +1 -1
  17. package/dist/{ReportDefine-DNrp4lFP.js → ReportDefine-DH3FvbS1.js} +1 -1
  18. package/dist/{ReportDesign-Ch8x6_mW.js → ReportDesign-Bou01Jbr.js} +2 -2
  19. package/dist/{ReportQuery-C1yR0ULS.js → ReportQuery-BBkmPPSw.js} +1 -1
  20. package/dist/{ReportQueryFrom-BKwf61CL.js → ReportQueryFrom-BCY8lTJ7.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-D2ddteNz.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-CpktcM8J.js} +1 -1
  22. package/dist/{ReportTemplate-HLHli4Cc.js → ReportTemplate-C_yJXxQ-.js} +1 -1
  23. package/dist/{Role-4GbuIhk6.js → Role-CTatYsrC.js} +3 -3
  24. package/dist/{RoleAssign-FGrSCg5R.js → RoleAssign-Cqt3CelK.js} +3 -3
  25. package/dist/{RolePanel-Ce1eKsM8.js → RolePanel-C3JMpNu8.js} +1 -1
  26. package/dist/{RolePanel-BcCozGfv.js → RolePanel-brKRJIhD.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BiOcU5GE.js → RolePanel.vue_vue_type_script_setup_true_lang-DD8u9pq8.js} +1 -1
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-CqER1M9Y.js → RolePanel.vue_vue_type_script_setup_true_lang-i6Gq4r5B.js} +3 -3
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-BbgS5f79.js → ScrollPanel.vue_vue_type_style_index_0_lang-CiWKyjm3.js} +1 -1
  30. package/dist/{Staff-CBt_0rqg.js → Staff-Cd3twQ6Y.js} +3 -3
  31. package/dist/{StaffInfo-RCdWZr1r.js → StaffInfo-DJp0a0qd.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-Dm8Yin3r.js → StaffInfo.vue_vue_type_script_setup_true_lang-Dp2AhJ4I.js} +1 -1
  33. package/dist/{StaffPanel-2ka-H3IV.js → StaffPanel-B93hClzs.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-B0u-PqTe.js → StaffPanel.vue_vue_type_script_setup_true_lang-CXjUzq7n.js} +2 -2
  35. package/dist/{SysUser-Cs7uN3HU.js → SysUser-BvI6vaqI.js} +2 -2
  36. package/dist/{SysUserPanel-Df3qGMep.js → SysUserPanel-C9V8X-Ek.js} +1 -1
  37. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-ClwozbZE.js → SysUserPanel.vue_vue_type_script_setup_true_lang-bMqTui07.js} +1 -1
  38. package/dist/{SystemMenu-BMYVQd-E.js → SystemMenu-D4WME5d0.js} +2 -2
  39. package/dist/{UserInfo-DDk2iOqY.js → UserInfo-D-AfdfJs.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CEccCnDi.js → UserInfo.vue_vue_type_style_index_0_lang-C-JQYIxe.js} +1 -1
  41. package/dist/{childView-C7u4Budn.js → childView--WMSo-wH.js} +1 -1
  42. package/dist/{childView-DFPGu0W-.js → childView-1MTl6Kaj.js} +1 -1
  43. package/dist/childView.vue_vue_type_style_index_0_lang-B8Losc4Y.js +170 -0
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-B3fNaibG.js → childView.vue_vue_type_style_index_0_lang-BAVKNIXs.js} +1 -1
  45. package/dist/{code-rule-BcaRQ1zV.js → code-rule-D-RqrQB6.js} +40 -37
  46. package/dist/core.es.js +1 -1
  47. package/dist/{cron-task-DJQLZCsO.js → cron-task-D-X-KFZm.js} +1 -1
  48. package/dist/{frameView-uPEaJRC7.js → frameView-MAW_-GHJ.js} +1 -1
  49. package/dist/{index-D7BXpJPu.js → index-Bc9vCX7z.js} +45 -45
  50. package/dist/{layoutView-zw1-fplL.js → layoutView-De2QIEr2.js} +3 -3
  51. package/dist/{login-M-rLGYIn.js → login-rdZ0GPYc.js} +1 -1
  52. package/dist/{lov-view-BVfIna0M.js → lov-view-Ao7LMspL.js} +2 -2
  53. package/dist/{menuInfo-BTqoNOuZ.js → menuInfo-DmOcK6An.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-CHco0XcS.js → menuInfo.vue_vue_type_style_index_0_lang-Ln-zFWV7.js} +1 -1
  55. package/dist/{pda-app-BzzynCVk.js → pda-app-DY63mQ2T.js} +1 -1
  56. package/dist/{resource-CJQV7_75.js → resource-B21uV58T.js} +1 -1
  57. package/dist/{su-welcome-BxQYF4Ou.js → su-welcome-DgjzJeDF.js} +22 -19
  58. package/dist/{sys-config-DNFqTmvL.js → sys-config-DOtK2I32.js} +1 -1
  59. package/dist/udp-core.css +1 -1
  60. package/index.ts +49 -49
  61. package/package.json +3 -3
  62. package/src/components/SuScrollTree/ScrollPanel.vue +170 -170
  63. package/src/components/udp/content/index.vue +89 -0
  64. package/src/components/udp/form/form.vue +109 -109
  65. package/src/components/udp/grid/index.vue +524 -524
  66. package/src/components/udp/index.ts +2 -1
  67. package/src/components/udp/ut-stamp-badge/index.vue +272 -0
  68. package/src/components/udp/utils.ts +408 -408
  69. package/src/layout/components/lay-sidebar/sidebar-logo.vue +94 -94
  70. package/src/layout/components/lay-tag/index.vue +596 -596
  71. package/src/layout/hooks/useTag.ts +227 -227
  72. package/src/main.ts +1 -1
  73. package/src/plugins/i18n/module/u-workflow.ts +71 -71
  74. package/src/plugins/vxe-table/index.ts +116 -116
  75. package/src/plugins/vxe-table/render.tsx +945 -945
  76. package/src/router/index.ts +187 -187
  77. package/src/router/modules/flow.ts +35 -35
  78. package/src/router/utils.ts +420 -420
  79. package/src/store/modules/multiTags.ts +110 -110
  80. package/src/store/modules/permission.ts +113 -113
  81. package/src/style/button.scss +85 -85
  82. package/src/style/vxetable.scss +348 -348
  83. package/src/views/organization/department/DepartmentPanel.vue +269 -269
  84. package/src/views/system/menu/SystemMenu.vue +185 -185
  85. package/src/views/system/menu/menuInfo.vue +384 -384
  86. package/src/views/system/sysUser/SysUserPanel.vue +348 -348
  87. package/src/views/udev/coderule/code-rule.vue +17 -5
  88. package/src/views/udev/dict/DictView.vue +118 -118
  89. package/src/views/udev/dict/childView.vue +69 -109
  90. package/src/views/udev/lov/childView.vue +174 -174
  91. package/src/views/uhome/components/menu-favorite.vue +1 -1
  92. package/src/views/upms/interface/log-in.vue +100 -100
  93. package/src/views/upms/user/login-log.vue +54 -54
  94. package/src/views/utask/flow-task.vue +18 -18
  95. package/dist/childView.vue_vue_type_style_index_0_lang-BUMcbqzM.js +0 -187
@@ -1,110 +1,110 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2021-12-23 17:33:20
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-11-06 17:48:20
6
- * @Description: file content
7
- */
8
- import { defineStore } from 'pinia';
9
- import { isEqual } 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 不添加到标签页 -- 因审批流注释2025/11/6
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
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2021-12-23 17:33:20
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-11-06 17:48:20
6
+ * @Description: file content
7
+ */
8
+ import { defineStore } from 'pinia';
9
+ import { isEqual } 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 不添加到标签页 -- 因审批流注释2025/11/6
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,113 +1,113 @@
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
+ /*
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 !important;
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
- }
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 !important;
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
+ }