@utogether/udp-core 1.0.1-beta.23 → 1.0.1-beta.24

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 (64) hide show
  1. package/dist/{403-CVk0Zv7-.js → 403-Dzcgpvp0.js} +1 -1
  2. package/dist/{404-ndDOUJxF.js → 404-BMtUBfzS.js} +1 -1
  3. package/dist/{500-CBFigQjv.js → 500-BM0zxG1M.js} +1 -1
  4. package/dist/{AuthorityInfo-BDf4I8In.js → AuthorityInfo-BmsB4SqO.js} +1 -1
  5. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-cEIXuHBK.js → AuthorityInfo.vue_vue_type_style_index_0_lang-CKcQbO7T.js} +1 -1
  6. package/dist/{Company-DYDDIDa5.js → Company-CwUC57TC.js} +3 -3
  7. package/dist/{CompanyPanel-DggYD4kC.js → CompanyPanel-BAmnU8nv.js} +1 -1
  8. package/dist/{Department-DqrAvwmT.js → Department-BsXoz3BD.js} +3 -3
  9. package/dist/{DepartmentPanel-BjhhDlhw.js → DepartmentPanel-78TnO9Tu.js} +1 -1
  10. package/dist/{DesignPanel-DAR2pcpF.js → DesignPanel-CSL9uUNR.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-B8GPGq0h.js → DesignPanel.vue_vue_type_style_index_0_lang-CZrUHBBj.js} +2 -2
  12. package/dist/{DictView-BcLgE6q2.js → DictView-BKqfJuJq.js} +1 -1
  13. package/dist/{InvOrganization-B61NWug9.js → InvOrganization-2gn2zpSK.js} +1 -1
  14. package/dist/{Org-9tL7q4mS.js → Org-C_08akFc.js} +1 -1
  15. package/dist/{Preview-Bn4QDJ6s.js → Preview-CffizoOK.js} +1 -1
  16. package/dist/{ReportDefine-BMGU8p3z.js → ReportDefine-BmBcBFey.js} +1 -1
  17. package/dist/{ReportDesign-DkwxPGCT.js → ReportDesign-Dw5AZl_M.js} +2 -2
  18. package/dist/{ReportQuery-DOFFL8Nn.js → ReportQuery-B4LyGqtT.js} +1 -1
  19. package/dist/{ReportQueryFrom-BDDlluNb.js → ReportQueryFrom-oBS0ClDQ.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-Yqw26YrX.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-DvayIk8Y.js} +1 -1
  21. package/dist/{ReportTemplate-DmFqn7ji.js → ReportTemplate-CNcUhJRf.js} +1 -1
  22. package/dist/{Role-DGw_eao_.js → Role-RUCpeqPj.js} +3 -3
  23. package/dist/{RoleAssign-BJ32jpGq.js → RoleAssign-DYidK2md.js} +3 -3
  24. package/dist/{RolePanel-DHS9C-hf.js → RolePanel-BQuKAefI.js} +1 -1
  25. package/dist/{RolePanel-B2O0mFtr.js → RolePanel-BrtpMF69.js} +1 -1
  26. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-CEYM_zn7.js → RolePanel.vue_vue_type_script_setup_true_lang-CrzUrpzJ.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-T5FN19eF.js → RolePanel.vue_vue_type_script_setup_true_lang-FAOBa5ds.js} +3 -3
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CeYU2NrW.js → ScrollPanel.vue_vue_type_style_index_0_lang-CmhAWJD4.js} +1 -1
  29. package/dist/{Staff-3Rejxejf.js → Staff-MnxrATUB.js} +3 -3
  30. package/dist/{StaffInfo-C94C3Gj7.js → StaffInfo-CXNLmE3w.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-Bm76KXps.js → StaffInfo.vue_vue_type_script_setup_true_lang-AsAikm4v.js} +1 -1
  32. package/dist/{StaffPanel-ClhiNL5a.js → StaffPanel-BdhcAqQL.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DjUOMmMr.js → StaffPanel.vue_vue_type_script_setup_true_lang-B51ElICg.js} +2 -2
  34. package/dist/{SysUser-DUXK1KbY.js → SysUser-Dh70yuNE.js} +2 -2
  35. package/dist/{SysUserPanel-3HThXZFZ.js → SysUserPanel-DimcWXi5.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-DjbpSAOd.js → SysUserPanel.vue_vue_type_script_setup_true_lang-5U-oqRaF.js} +1 -1
  37. package/dist/{SystemMenu-C1CrBLIy.js → SystemMenu-CH04ZC4Q.js} +39 -39
  38. package/dist/{UserInfo-C1tgO95t.js → UserInfo--5jFxyNg.js} +1 -1
  39. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CNLWkLRN.js → UserInfo.vue_vue_type_style_index_0_lang-BpS2JUoM.js} +1 -1
  40. package/dist/{childView-CCr-NwqZ.js → childView-1QhOOcjT.js} +1 -1
  41. package/dist/{childView-CeYGykew.js → childView-q4jq8JUU.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-D9PsELsS.js → childView.vue_vue_type_style_index_0_lang-C1_CKaiz.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-IhbVX2Xa.js → childView.vue_vue_type_style_index_0_lang-_9frXYVo.js} +1 -1
  44. package/dist/{code-rule-BVjue1Qj.js → code-rule-Cmc-zh3P.js} +1 -1
  45. package/dist/core.es.js +1 -1
  46. package/dist/{cron-task-BfVSQIgT.js → cron-task-BJC8dKFZ.js} +1 -1
  47. package/dist/{frameView-D_YJavxB.js → frameView-rRbSPmqe.js} +1 -1
  48. package/dist/{index-ZaDSQxcf.js → index-CU7HTsRe.js} +164 -162
  49. package/dist/{layoutView-DpxwrEJd.js → layoutView-C5aVJcOn.js} +1 -1
  50. package/dist/{login-8muEJPMg.js → login-DGj6zzD2.js} +1 -1
  51. package/dist/{lov-view-DEp2h_qy.js → lov-view-CDYHJIbU.js} +2 -2
  52. package/dist/{menuInfo-rPb4Ed8Q.js → menuInfo-N2mUoR6P.js} +1 -1
  53. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-mtPuZDRn.js → menuInfo.vue_vue_type_style_index_0_lang-Y7Jg-MZO.js} +119 -99
  54. package/dist/{pda-app-CSrTwUo7.js → pda-app-D0g-Ygcq.js} +1 -1
  55. package/dist/{resource-B4Fsud2G.js → resource-DPW5r_7h.js} +1 -1
  56. package/dist/{su-welcome-DkwJ8pW8.js → su-welcome-GWIgWj_m.js} +1 -1
  57. package/dist/{sys-config-CnMkBejC.js → sys-config-DwaGsVVu.js} +1 -1
  58. package/dist/udp-core.css +1 -1
  59. package/package.json +3 -3
  60. package/src/plugins/i18n/zh.ts +3 -1
  61. package/src/router/utils.ts +2 -2
  62. package/src/style/button.scss +85 -85
  63. package/src/views/system/menu/SystemMenu.vue +185 -183
  64. package/src/views/system/menu/menuInfo.vue +384 -363
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@utogether/udp-core",
3
3
  "private": false,
4
- "version": "1.0.1-beta.23",
4
+ "version": "1.0.1-beta.24",
5
5
  "description": "",
6
6
  "type": "module",
7
- "main1": "index.ts",
8
- "main": "dist/core.es.js",
7
+ "main": "index.ts",
8
+ "main1": "dist/core.es.js",
9
9
  "scripts": {
10
10
  "dev": "vite",
11
11
  "build": "vite build",
@@ -109,7 +109,9 @@ export default {
109
109
  organizationName: '组织名称',
110
110
  organizationCode: '组织编码',
111
111
  appupper: '已上架',
112
- applower: '已下架'
112
+ applower: '已下架',
113
+ isApprovalPage: '审批页面',
114
+ showLink: '菜单可见'
113
115
  },
114
116
  btn: {
115
117
  passwordReset: '密码重置',
@@ -2,7 +2,7 @@
2
2
  * @Author: levi7754 levi7754@163.com
3
3
  * @Date: 2024-08-01 21:42:39
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-11-10 09:22:45
5
+ * @LastEditTime: 2025-11-13 18:18:46
6
6
  * @FilePath: \udp-front\packages\udp-core\src\router\utils.ts
7
7
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
8
  */
@@ -298,7 +298,7 @@ const addAsyncRoutes = (arrRoutes: Array<any>) => {
298
298
  }
299
299
  const { icon, permissionCode, extraIcon, frameSrc } = v;
300
300
  // 流程菜单保存
301
- v.isFlowMenu && processMenus.push(v);
301
+ v.isApprovalPage === 'Y' && processMenus.push(v);
302
302
 
303
303
  v.meta = {
304
304
  keepAlive: true,
@@ -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: 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
+ }
@@ -1,183 +1,185 @@
1
- <template>
2
- <div class="page-content">
3
- <ut-grid
4
- ref="xgrid"
5
- :tree-config="{
6
- childrenField: 'children',
7
- lazy: true,
8
- hasChild: 'hasChildren',
9
- loadMethod: loadChildrenMethod,
10
- iconOpen: 'ri-checkbox-indeterminate-line ri-lg',
11
- iconClose: 'ri-add-box-line ri-lg'
12
- }"
13
- :columns="columns"
14
- :url="url"
15
- :stripe="false"
16
- mode="form"
17
- @toolbarButtonClick="handleToolClick"
18
- />
19
- <MenuInfo :show="data.showDrawer" :record="data.record" :data-status="data.dataStatus" @close="onClose" />
20
- <AuthorityPanel :show="data.showAuthority" :record="data.record" @close="onClose" />
21
- </div>
22
- </template>
23
-
24
- <script lang="tsx">
25
- export default { name: 'SystemMenu' };
26
- </script>
27
- <script setup lang="tsx">
28
- import { useI18n } from 'vue-i18n';
29
- import { ref, reactive } from 'vue';
30
- import MenuInfo from './menuInfo.vue';
31
- import AuthorityPanel from './AuthorityPanel.vue';
32
- import { clone } from 'xe-utils';
33
- import to from 'await-to-js';
34
- import { VxeUI } from 'vxe-pc-ui';
35
- import { useRender } from '@utogether/utils';
36
- import { getServiceApi } from '../../../api';
37
-
38
- const data = reactive<IRecord>({
39
- record: {},
40
- dataList: [],
41
- submitLoading: false,
42
- showDrawer: false,
43
- dataStatus: '',
44
- total: 0,
45
- listQuery: {
46
- pageSize: 10,
47
- pageNum: 1
48
- }
49
- });
50
-
51
- const { t } = useI18n();
52
-
53
- const renderHook = useRender();
54
-
55
- const serviceApi = getServiceApi();
56
-
57
- const xgrid = ref(null);
58
-
59
- const url = '/uums/menu';
60
-
61
- let row;
62
-
63
- // const buttons = [{ code: 'add', status: 'u-cyan', icon: 'plus', auth: 'add' }];
64
-
65
- const columns = [
66
- { type: 'checkbox', width: 50, align: 'center' },
67
- { field: 'menuName', width: 180, treeNode: true },
68
- { field: 'menuNameEn', width: 140 },
69
- { field: 'sort', width: 70 },
70
- { field: 'menuCode', width: 140 },
71
- { field: 'permissionCode', minWidth: 180 },
72
- {
73
- field: 'menuCategory',
74
- title: 'message.menuType',
75
- formatter: ['formatDict', 'SU.MENU.TYPE'],
76
- width: 100
77
- },
78
- { field: 'enabled', width: 80, cellRender: renderHook.renderEnabled(handleUpdate) },
79
- {
80
- field: 'operate',
81
- width: 140,
82
- fixed: 'right',
83
- slots: {
84
- default: ({ row }) => {
85
- const type = row.menuType;
86
- const addCmp = <ut-button status="u-cyan" icon="ri-add-fill" content="add" onTap={() => handleAdd(row)} />;
87
- const authCmp = <ut-button icon="ri-lock-fill" content="auth" onTap={() => handleAuthorityPanel(row)} />;
88
- return [
89
- <>
90
- {!type ? (
91
- <>
92
- <ut-button status="success" icon="ri-edit-box-line" content="edit" onTap={() => handleEdit(row)} />
93
- {['0', '5'].includes(row.menuCategory) ? addCmp : authCmp}
94
- </>
95
- ) : null}
96
- </>
97
- ];
98
- }
99
- }
100
- }
101
- ];
102
-
103
- // const resetListQuery = () => {
104
- // data.listQuery.pageSize = 99;
105
- // data.listQuery.pageNum = 1;
106
- // getDataList();
107
- // };
108
-
109
- // const getDataList = async () => {
110
- // const res = (await serviceApi('sys/listMenus', data.listQuery)) as IResponseData;
111
- // data.dataList = res.list;
112
- // data.total = res.total;
113
- // };
114
-
115
- const handleToolClick = ({ code }) => {
116
- code === 'add' && handleAdd();
117
- code === 'del' && handleDel();
118
- };
119
-
120
- // 异步加载子节点
121
- const loadChildrenMethod = async ({ row }: any) => {
122
- const data = (await serviceApi.get(url, { parentId: row.id })) as IResponseData;
123
- return new Promise(resolve => {
124
- resolve(data.list);
125
- });
126
- };
127
-
128
- // 新增子类型
129
- // menuType:保持原有不懂, 0:菜单 1,数据权限
130
- // 新增menuCategory: 0、根目录 1、菜单 2、内部链接3、外部链接
131
- const handleAdd = (record?: IRecord) => {
132
- data.showDrawer = true;
133
- data.dataStatus = 'add';
134
- data.record.dispalyCode = record?.permissionCode; // 前缀
135
- data.record.permissionCode = record?.permissionCode;
136
- // data.record.menuType = !record || !record.parentId ? '0' : '1';
137
- data.record.menuType = '0';
138
- data.record.menuCategory = !record ? '0' : '';
139
- data.record.parentId = record?.id;
140
- data.record.hasChildren = record?.hasChildren;
141
- data.record.children = data.record.children || [];
142
- console.log(data.record);
143
- row = record;
144
- };
145
-
146
- // 编辑
147
- const handleEdit = (record: IRecord) => {
148
- data.showDrawer = true;
149
- data.dataStatus = 'update';
150
- data.record = clone(record, true);
151
- data.record.menuType = data.record.menuType.toString();
152
- data.record.dispalyCode = record.permissionCode;
153
- };
154
-
155
- // 启用/禁用
156
- async function handleUpdate({ row }) {
157
- await serviceApi.put(url, [row]);
158
- xgrid.value.refreshData();
159
- }
160
- // 删除
161
- const handleDel = async () => {
162
- const type = await VxeUI.modal.confirm(t('message.delRecord'));
163
- const records = xgrid.value.getInstance().getCheckboxRecords();
164
- if (type === 'confirm') {
165
- const [err] = await to(serviceApi.delete(url, records));
166
- }
167
- };
168
-
169
- const handleAuthorityPanel = record => {
170
- data.showAuthority = true;
171
- data.dataStatus = 'update';
172
- data.record = clone(record, true);
173
- data.record.menuType = data.record.menuType.toString();
174
- data.record.dispalyCode = record.permissionCode;
175
- };
176
-
177
- const onClose = (type?, record?) => {
178
- type === 'submit' && (row || record) && xgrid.value.getInstance().reloadTreeExpand(row || record);
179
- data.record = {};
180
- data.showDrawer = false;
181
- data.showAuthority = false;
182
- };
183
- </script>
1
+ <template>
2
+ <div class="page-content">
3
+ <ut-grid
4
+ ref="xgrid"
5
+ :tree-config="{
6
+ childrenField: 'children',
7
+ lazy: true,
8
+ hasChild: 'hasChildren',
9
+ loadMethod: loadChildrenMethod,
10
+ iconOpen: 'ri-checkbox-indeterminate-line ri-lg',
11
+ iconClose: 'ri-add-box-line ri-lg'
12
+ }"
13
+ :columns="columns"
14
+ :url="url"
15
+ :stripe="false"
16
+ mode="form"
17
+ @toolbarButtonClick="handleToolClick"
18
+ />
19
+ <MenuInfo :show="data.showDrawer" :record="data.record" :data-status="data.dataStatus" @close="onClose" />
20
+ <AuthorityPanel :show="data.showAuthority" :record="data.record" @close="onClose" />
21
+ </div>
22
+ </template>
23
+
24
+ <script lang="tsx">
25
+ export default { name: 'SystemMenu' };
26
+ </script>
27
+ <script setup lang="tsx">
28
+ import { useI18n } from 'vue-i18n';
29
+ import { ref, reactive } from 'vue';
30
+ import MenuInfo from './menuInfo.vue';
31
+ import AuthorityPanel from './AuthorityPanel.vue';
32
+ import { clone } from 'xe-utils';
33
+ import to from 'await-to-js';
34
+ import { VxeUI } from 'vxe-pc-ui';
35
+ import { useRender } from '@utogether/utils';
36
+ import { getServiceApi } from '../../../api';
37
+
38
+ const data = reactive<IRecord>({
39
+ record: {},
40
+ dataList: [],
41
+ submitLoading: false,
42
+ showDrawer: false,
43
+ dataStatus: '',
44
+ total: 0,
45
+ listQuery: {
46
+ pageSize: 10,
47
+ pageNum: 1
48
+ }
49
+ });
50
+
51
+ const { t } = useI18n();
52
+
53
+ const renderHook = useRender();
54
+
55
+ const serviceApi = getServiceApi();
56
+
57
+ const xgrid = ref(null);
58
+
59
+ const url = '/uums/menu';
60
+
61
+ let row;
62
+
63
+ // const buttons = [{ code: 'add', status: 'u-cyan', icon: 'plus', auth: 'add' }];
64
+
65
+ const columns = [
66
+ { type: 'checkbox', width: 50, align: 'center' },
67
+ { field: 'menuName', width: 180, treeNode: true },
68
+ { field: 'menuNameEn', width: 140 },
69
+ { field: 'sort', width: 70 },
70
+ { field: 'menuCode', width: 140 },
71
+ { field: 'permissionCode', minWidth: 180 },
72
+ {
73
+ field: 'menuCategory',
74
+ title: 'message.menuType',
75
+ formatter: ['formatDict', 'SU.MENU.TYPE'],
76
+ width: 100
77
+ },
78
+ { field: 'enabled', width: 80, cellRender: renderHook.renderEnabled(handleUpdate) },
79
+ {
80
+ field: 'operate',
81
+ width: 140,
82
+ fixed: 'right',
83
+ slots: {
84
+ default: ({ row }) => {
85
+ const type = row.menuType;
86
+ const addCmp = <ut-button status="u-cyan" icon="ri-add-fill" content="add" onTap={() => handleAdd(row)} />;
87
+ const authCmp = <ut-button icon="ri-lock-fill" content="auth" onTap={() => handleAuthorityPanel(row)} />;
88
+ return [
89
+ <>
90
+ {!type ? (
91
+ <>
92
+ <ut-button status="success" icon="ri-edit-box-line" content="edit" onTap={() => handleEdit(row)} />
93
+ {['0', '5'].includes(row.menuCategory) ? addCmp : authCmp}
94
+ </>
95
+ ) : null}
96
+ </>
97
+ ];
98
+ }
99
+ }
100
+ }
101
+ ];
102
+
103
+ // const resetListQuery = () => {
104
+ // data.listQuery.pageSize = 99;
105
+ // data.listQuery.pageNum = 1;
106
+ // getDataList();
107
+ // };
108
+
109
+ // const getDataList = async () => {
110
+ // const res = (await serviceApi('sys/listMenus', data.listQuery)) as IResponseData;
111
+ // data.dataList = res.list;
112
+ // data.total = res.total;
113
+ // };
114
+
115
+ const handleToolClick = ({ code }) => {
116
+ code === 'add' && handleAdd();
117
+ code === 'del' && handleDel();
118
+ };
119
+
120
+ // 异步加载子节点
121
+ const loadChildrenMethod = async ({ row }: any) => {
122
+ const data = (await serviceApi.get(url, { parentId: row.id })) as IResponseData;
123
+ return new Promise(resolve => {
124
+ resolve(data.list);
125
+ });
126
+ };
127
+
128
+ // 新增子类型
129
+ // menuType:保持原有不懂, 0:菜单 1,数据权限
130
+ // 新增menuCategory: 0、根目录 1、菜单 2、内部链接3、外部链接
131
+ const handleAdd = (record?: IRecord) => {
132
+ data.showDrawer = true;
133
+ data.dataStatus = 'add';
134
+ data.record.dispalyCode = record?.permissionCode; // 前缀
135
+ data.record.permissionCode = record?.permissionCode;
136
+ // data.record.menuType = !record || !record.parentId ? '0' : '1';
137
+ data.record.menuType = '0';
138
+ data.record.showLink = 'Y';
139
+ data.record.isApprovalPage = 'N';
140
+ data.record.menuCategory = !record ? '0' : '';
141
+ data.record.parentId = record?.id;
142
+ data.record.hasChildren = record?.hasChildren;
143
+ data.record.children = data.record.children || [];
144
+ console.log(data.record);
145
+ row = record;
146
+ };
147
+
148
+ // 编辑
149
+ const handleEdit = (record: IRecord) => {
150
+ data.showDrawer = true;
151
+ data.dataStatus = 'update';
152
+ data.record = clone(record, true);
153
+ data.record.menuType = data.record.menuType.toString();
154
+ data.record.dispalyCode = record.permissionCode;
155
+ };
156
+
157
+ // 启用/禁用
158
+ async function handleUpdate({ row }) {
159
+ await serviceApi.put(url, [row]);
160
+ xgrid.value.refreshData();
161
+ }
162
+ // 删除
163
+ const handleDel = async () => {
164
+ const type = await VxeUI.modal.confirm(t('message.delRecord'));
165
+ const records = xgrid.value.getInstance().getCheckboxRecords();
166
+ if (type === 'confirm') {
167
+ const [err] = await to(serviceApi.delete(url, records));
168
+ }
169
+ };
170
+
171
+ const handleAuthorityPanel = record => {
172
+ data.showAuthority = true;
173
+ data.dataStatus = 'update';
174
+ data.record = clone(record, true);
175
+ data.record.menuType = data.record.menuType.toString();
176
+ data.record.dispalyCode = record.permissionCode;
177
+ };
178
+
179
+ const onClose = (type?, record?) => {
180
+ type === 'submit' && (row || record) && xgrid.value.getInstance().reloadTreeExpand(row || record);
181
+ data.record = {};
182
+ data.showDrawer = false;
183
+ data.showAuthority = false;
184
+ };
185
+ </script>