@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.
- package/build/plugins.ts +37 -37
- package/dist/{403-A9aD_bZN.js → 403-DdjDWbkf.js} +1 -1
- package/dist/{404-DREd70aQ.js → 404-D9vF2gFz.js} +1 -1
- package/dist/{500-C5qVXkGt.js → 500-mVaDmUjL.js} +1 -1
- package/dist/{AuthorityInfo-CYO2IVau.js → AuthorityInfo-DOUJ_Zrj.js} +1 -1
- 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
- package/dist/{Company-CaottHQO.js → Company-DY__kM9F.js} +3 -3
- package/dist/{CompanyPanel-B3hOiXqj.js → CompanyPanel-C5N8QcMA.js} +1 -1
- package/dist/{Department-CHkuRvJN.js → Department-DsuDZdy5.js} +3 -3
- package/dist/{DepartmentPanel-DieWfIxW.js → DepartmentPanel-CdwI7Rzu.js} +2 -2
- package/dist/{DesignPanel-REWXp3x4.js → DesignPanel-B50-g0TL.js} +1 -1
- package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-Df0xc5XP.js → DesignPanel.vue_vue_type_style_index_0_lang-KV8JOZ6v.js} +2 -2
- package/dist/{DictView-DnpDHskG.js → DictView-Be2Z5Obk.js} +1 -1
- package/dist/{InvOrganization-DoIsDrAx.js → InvOrganization-Lui1q3Ou.js} +1 -1
- package/dist/{Org-C4P5Cwia.js → Org-qO5ExsPN.js} +1 -1
- package/dist/{Preview-d90pQdFJ.js → Preview-Dq4dfV2D.js} +1 -1
- package/dist/{ReportDefine-DNrp4lFP.js → ReportDefine-DH3FvbS1.js} +1 -1
- package/dist/{ReportDesign-Ch8x6_mW.js → ReportDesign-Bou01Jbr.js} +2 -2
- package/dist/{ReportQuery-C1yR0ULS.js → ReportQuery-BBkmPPSw.js} +1 -1
- package/dist/{ReportQueryFrom-BKwf61CL.js → ReportQueryFrom-BCY8lTJ7.js} +1 -1
- package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-D2ddteNz.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-CpktcM8J.js} +1 -1
- package/dist/{ReportTemplate-HLHli4Cc.js → ReportTemplate-C_yJXxQ-.js} +1 -1
- package/dist/{Role-4GbuIhk6.js → Role-CTatYsrC.js} +3 -3
- package/dist/{RoleAssign-FGrSCg5R.js → RoleAssign-Cqt3CelK.js} +3 -3
- package/dist/{RolePanel-Ce1eKsM8.js → RolePanel-C3JMpNu8.js} +1 -1
- package/dist/{RolePanel-BcCozGfv.js → RolePanel-brKRJIhD.js} +1 -1
- package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BiOcU5GE.js → RolePanel.vue_vue_type_script_setup_true_lang-DD8u9pq8.js} +1 -1
- package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-CqER1M9Y.js → RolePanel.vue_vue_type_script_setup_true_lang-i6Gq4r5B.js} +3 -3
- package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-BbgS5f79.js → ScrollPanel.vue_vue_type_style_index_0_lang-CiWKyjm3.js} +1 -1
- package/dist/{Staff-CBt_0rqg.js → Staff-Cd3twQ6Y.js} +3 -3
- package/dist/{StaffInfo-RCdWZr1r.js → StaffInfo-DJp0a0qd.js} +1 -1
- package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-Dm8Yin3r.js → StaffInfo.vue_vue_type_script_setup_true_lang-Dp2AhJ4I.js} +1 -1
- package/dist/{StaffPanel-2ka-H3IV.js → StaffPanel-B93hClzs.js} +1 -1
- 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
- package/dist/{SysUser-Cs7uN3HU.js → SysUser-BvI6vaqI.js} +2 -2
- package/dist/{SysUserPanel-Df3qGMep.js → SysUserPanel-C9V8X-Ek.js} +1 -1
- package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-ClwozbZE.js → SysUserPanel.vue_vue_type_script_setup_true_lang-bMqTui07.js} +1 -1
- package/dist/{SystemMenu-BMYVQd-E.js → SystemMenu-D4WME5d0.js} +2 -2
- package/dist/{UserInfo-DDk2iOqY.js → UserInfo-D-AfdfJs.js} +1 -1
- 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
- package/dist/{childView-C7u4Budn.js → childView--WMSo-wH.js} +1 -1
- package/dist/{childView-DFPGu0W-.js → childView-1MTl6Kaj.js} +1 -1
- package/dist/childView.vue_vue_type_style_index_0_lang-B8Losc4Y.js +170 -0
- package/dist/{childView.vue_vue_type_style_index_0_lang-B3fNaibG.js → childView.vue_vue_type_style_index_0_lang-BAVKNIXs.js} +1 -1
- package/dist/{code-rule-BcaRQ1zV.js → code-rule-D-RqrQB6.js} +40 -37
- package/dist/core.es.js +1 -1
- package/dist/{cron-task-DJQLZCsO.js → cron-task-D-X-KFZm.js} +1 -1
- package/dist/{frameView-uPEaJRC7.js → frameView-MAW_-GHJ.js} +1 -1
- package/dist/{index-D7BXpJPu.js → index-Bc9vCX7z.js} +45 -45
- package/dist/{layoutView-zw1-fplL.js → layoutView-De2QIEr2.js} +3 -3
- package/dist/{login-M-rLGYIn.js → login-rdZ0GPYc.js} +1 -1
- package/dist/{lov-view-BVfIna0M.js → lov-view-Ao7LMspL.js} +2 -2
- package/dist/{menuInfo-BTqoNOuZ.js → menuInfo-DmOcK6An.js} +1 -1
- 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
- package/dist/{pda-app-BzzynCVk.js → pda-app-DY63mQ2T.js} +1 -1
- package/dist/{resource-CJQV7_75.js → resource-B21uV58T.js} +1 -1
- package/dist/{su-welcome-BxQYF4Ou.js → su-welcome-DgjzJeDF.js} +22 -19
- package/dist/{sys-config-DNFqTmvL.js → sys-config-DOtK2I32.js} +1 -1
- package/dist/udp-core.css +1 -1
- package/index.ts +49 -49
- package/package.json +3 -3
- package/src/components/SuScrollTree/ScrollPanel.vue +170 -170
- package/src/components/udp/content/index.vue +89 -0
- package/src/components/udp/form/form.vue +109 -109
- package/src/components/udp/grid/index.vue +524 -524
- package/src/components/udp/index.ts +2 -1
- package/src/components/udp/ut-stamp-badge/index.vue +272 -0
- package/src/components/udp/utils.ts +408 -408
- package/src/layout/components/lay-sidebar/sidebar-logo.vue +94 -94
- package/src/layout/components/lay-tag/index.vue +596 -596
- package/src/layout/hooks/useTag.ts +227 -227
- package/src/main.ts +1 -1
- package/src/plugins/i18n/module/u-workflow.ts +71 -71
- package/src/plugins/vxe-table/index.ts +116 -116
- package/src/plugins/vxe-table/render.tsx +945 -945
- package/src/router/index.ts +187 -187
- package/src/router/modules/flow.ts +35 -35
- package/src/router/utils.ts +420 -420
- package/src/store/modules/multiTags.ts +110 -110
- package/src/store/modules/permission.ts +113 -113
- package/src/style/button.scss +85 -85
- package/src/style/vxetable.scss +348 -348
- package/src/views/organization/department/DepartmentPanel.vue +269 -269
- package/src/views/system/menu/SystemMenu.vue +185 -185
- package/src/views/system/menu/menuInfo.vue +384 -384
- package/src/views/system/sysUser/SysUserPanel.vue +348 -348
- package/src/views/udev/coderule/code-rule.vue +17 -5
- package/src/views/udev/dict/DictView.vue +118 -118
- package/src/views/udev/dict/childView.vue +69 -109
- package/src/views/udev/lov/childView.vue +174 -174
- package/src/views/uhome/components/menu-favorite.vue +1 -1
- package/src/views/upms/interface/log-in.vue +100 -100
- package/src/views/upms/user/login-log.vue +54 -54
- package/src/views/utask/flow-task.vue +18 -18
- 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
|
+
}
|
package/src/style/button.scss
CHANGED
|
@@ -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
|
+
}
|