@utogether/udp-core 1.0.2 → 1.0.4

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 (71) hide show
  1. package/dist/{403-B1rIjAAu.js → 403-DASI6Pwz.js} +1 -1
  2. package/dist/{404-mBqc2y4t.js → 404-YhBA92cb.js} +1 -1
  3. package/dist/{500-BoI45Zdh.js → 500-ywbFF5MX.js} +1 -1
  4. package/dist/{AuthorityInfo-B08NBIIn.js → AuthorityInfo-tCSX2Fh7.js} +1 -1
  5. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js → AuthorityInfo.vue_vue_type_style_index_0_lang-Cwd6UT2i.js} +1 -1
  6. package/dist/{Company-JGGyWEWH.js → Company-l23MEzdM.js} +3 -3
  7. package/dist/{CompanyPanel-BQ_cCmDx.js → CompanyPanel-D_s0rh6h.js} +1 -1
  8. package/dist/{Department-z2iO6hwM.js → Department-DSEvORLg.js} +3 -3
  9. package/dist/{DepartmentPanel-BtQe7zwU.js → DepartmentPanel-WN8nOgCV.js} +1 -1
  10. package/dist/{DesignPanel-7mhtVWas.js → DesignPanel-DirEGh9M.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js → DesignPanel.vue_vue_type_style_index_0_lang-D02hXSrN.js} +2 -2
  12. package/dist/{DictView-CjchV2Yk.js → DictView-DiIQdiek.js} +10 -9
  13. package/dist/{InvOrganization-Pn1O_XP0.js → InvOrganization-b7v3g9EJ.js} +1 -1
  14. package/dist/{Org-BqytV_vi.js → Org-BORfx1PL.js} +1 -1
  15. package/dist/{Preview-CLpUUMay.js → Preview-DkRn_TSc.js} +1 -1
  16. package/dist/{ReportDefine-Cz1KtEUF.js → ReportDefine-Cd0QeaWA.js} +1 -1
  17. package/dist/{ReportDesign-BaORYud4.js → ReportDesign-4qNqyeEW.js} +2 -2
  18. package/dist/{ReportQuery-CPCPXiXz.js → ReportQuery-BJfTFpec.js} +1 -1
  19. package/dist/{ReportQueryFrom-C_AcrfkJ.js → ReportQueryFrom-CB7sExZx.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-CqO_2Ier.js} +1 -1
  21. package/dist/{ReportTemplate-CFiNMz79.js → ReportTemplate-B69muSgT.js} +1 -1
  22. package/dist/{Role-B-XDoJd5.js → Role-Bo4YrNDC.js} +3 -3
  23. package/dist/{RoleAssign-BolW8YVs.js → RoleAssign-kOMYJ4s3.js} +3 -3
  24. package/dist/{RolePanel-HilSuYns.js → RolePanel-B1d4e6uk.js} +1 -1
  25. package/dist/{RolePanel-2kfs5tw9.js → RolePanel-BSJmjyqc.js} +1 -1
  26. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js → RolePanel.vue_vue_type_script_setup_true_lang-DCzX-ZP_.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js → RolePanel.vue_vue_type_script_setup_true_lang-DgQpfjaU.js} +3 -3
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js → ScrollPanel.vue_vue_type_style_index_0_lang-WNOYFxJ1.js} +1 -1
  29. package/dist/{Staff-BTk3whFC.js → Staff-BFp3zNNR.js} +3 -3
  30. package/dist/{StaffInfo-d3AuSzlA.js → StaffInfo-DcU9_40C.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js → StaffInfo.vue_vue_type_script_setup_true_lang-CtfN2CAr.js} +1 -1
  32. package/dist/{StaffPanel-DV-D4jjz.js → StaffPanel-7exWkZd9.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js → StaffPanel.vue_vue_type_script_setup_true_lang-v5xOXKRS.js} +47 -39
  34. package/dist/{SysUser-BnjYytws.js → SysUser-B3uB_cp2.js} +2 -2
  35. package/dist/{SysUserPanel-CBoyD-Qi.js → SysUserPanel-B0CLp5AO.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js → SysUserPanel.vue_vue_type_script_setup_true_lang-Cwea_4dY.js} +1 -1
  37. package/dist/{SystemMenu-kYB_ZaUt.js → SystemMenu-a59l4hTk.js} +28 -28
  38. package/dist/{UserInfo-4dx97VBL.js → UserInfo-D1IA2oLt.js} +1 -1
  39. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js → UserInfo.vue_vue_type_style_index_0_lang-DDVgYRD5.js} +1 -1
  40. package/dist/{childView-CHPNfTEb.js → childView-6rCeLcsx.js} +1 -1
  41. package/dist/{childView-CKA_JgVZ.js → childView-JdrkroL5.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js → childView.vue_vue_type_style_index_0_lang-B8x99f1B.js} +19 -20
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js → childView.vue_vue_type_style_index_0_lang-BfcnWnx9.js} +31 -31
  44. package/dist/{code-rule-CbxuZg0-.js → code-rule-2lkPF547.js} +1 -1
  45. package/dist/core.es.js +1 -1
  46. package/dist/{cron-task-nTOpqQYf.js → cron-task-DV1pGO1m.js} +1 -1
  47. package/dist/{frameView-Z1tPUyCh.js → frameView-C0bzSB8c.js} +1 -1
  48. package/dist/{index-C3q8HoJM.js → index-BbtbEMCH.js} +64 -65
  49. package/dist/{layoutView--MGA9zUB.js → layoutView-CTV-E4Cj.js} +1 -1
  50. package/dist/{log-in-CSYJDA6m.js → log-in-CoBP2x6u.js} +1 -1
  51. package/dist/{log-out-DiwGCg7p.js → log-out-KX8FiRVf.js} +1 -1
  52. package/dist/{login-C6Y0ajDp.js → login-CtCoGWzD.js} +1 -1
  53. package/dist/{login-log-C0V-_l3F.js → login-log-DJBGJVV0.js} +4 -4
  54. package/dist/{lov-view-Cmv7wZZ9.js → lov-view-Bm0JEzzg.js} +2 -2
  55. package/dist/{menuInfo-UeutJpOa.js → menuInfo-D2qPoRwz.js} +1 -1
  56. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js → menuInfo.vue_vue_type_style_index_0_lang-DoQjX9Ly.js} +1 -1
  57. package/dist/{pda-app-B6w99SJo.js → pda-app-SbcIclbH.js} +1 -1
  58. package/dist/{resource-BybJvUv0.js → resource-Cdq1UKGI.js} +1 -1
  59. package/dist/{su-welcome-C1bmxHoY.js → su-welcome-BHDsjqqV.js} +20 -20
  60. package/dist/{sys-config-BnmIDnCj.js → sys-config-CCOf4xbj.js} +1 -1
  61. package/package.json +1 -1
  62. package/src/plugins/vxe-table/index.ts +116 -116
  63. package/src/plugins/vxe-table/render.tsx +950 -945
  64. package/src/utils/dataFormat/index.ts +17 -18
  65. package/src/views/organization/staff/StaffPanel.vue +12 -3
  66. package/src/views/system/menu/SystemMenu.vue +185 -185
  67. package/src/views/udev/dict/DictView.vue +2 -2
  68. package/src/views/udev/dict/childView.vue +6 -6
  69. package/src/views/udev/lov/childView.vue +174 -174
  70. package/src/views/uhome/components/menu-favorite.vue +3 -2
  71. package/src/views/upms/user/login-log.vue +5 -5
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2022-06-23 17:29:11
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2024-07-04 21:06:05
5
+ * @LastEditTime: 2025-12-04 13:34:40
6
6
  * @Description: file content
7
7
  */
8
8
 
@@ -39,25 +39,24 @@ const searchBtn: IFormItemProps = {
39
39
  align: 'right',
40
40
  collapseNode: false,
41
41
  itemRender: {
42
- name: '$buttons',
43
- children: [
42
+ name: 'VxeButtonGroup',
43
+ options: [
44
44
  {
45
- props: {
46
- type: 'submit',
47
- content: 'message.btn.search',
48
- status: 'primary',
49
- icon: 'vxe-icon-search'
50
- }
45
+ type: 'submit',
46
+ submit: 'submit',
47
+ content: 'message.btn.search',
48
+ status: 'primary',
49
+ icon: 'ri-search-line'
51
50
  },
52
51
  {
53
- props: {
54
- type: 'reset',
55
- content: 'message.btn.reset',
56
- status: 'info',
57
- icon: 'ri-refresh-line ri-1x'
58
- }
52
+ type: 'reset',
53
+ name: 'reset',
54
+ content: 'message.btn.reset',
55
+ status: 'info',
56
+ icon: 'ri-refresh-line'
59
57
  }
60
- ]
58
+ ],
59
+ events: null
61
60
  }
62
61
  };
63
62
 
@@ -68,7 +67,7 @@ export const formatGridItems = (records, favorite) => {
68
67
  const isDateRange = len > 2 && formItems.some((f, idx) => idx < 3 && (f.span > 6 || getDateRange(f)));
69
68
  // 需要展示折叠按钮
70
69
  const isCollapse = isDateRange || len > 3;
71
- const defaultCollapse = { collapseTags: true, collapseTagsTooltip: true };
70
+ const defaultCollapse = { collapseTags: true, collapseTagsTooltip: true, multiple: true };
72
71
  const items = formItems.map((item, idx) => {
73
72
  item.folding = isDateRange ? isCollapse && idx > 1 : isCollapse && idx > 2;
74
73
  item.span = getDateRange(item) ? 12 : item.span || 6;
@@ -84,7 +83,7 @@ export const formatGridItems = (records, favorite) => {
84
83
  });
85
84
  const btn = clone(searchBtn, true);
86
85
  btn.collapseNode = isCollapse;
87
- favorite && btn.itemRender.children.length < 3 && btn.itemRender.children.push(favorite);
86
+ favorite && btn.itemRender.options.length < 3 && btn.itemRender.options.push(favorite);
88
87
 
89
88
  if (isCollapse) {
90
89
  // 按钮设置为 折叠节点
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-11-17 16:42:14
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-11-27 18:59:49
5
+ * @LastEditTime: 2025-12-08 08:27:39
6
6
  * @Description: 员工管理
7
7
  -->
8
8
 
@@ -17,6 +17,7 @@
17
17
  :auto-load="false"
18
18
  :buttons="buttons"
19
19
  :url="url"
20
+ :callback="callback"
20
21
  mode="form"
21
22
  @buttonClick="onButtonClick"
22
23
  />
@@ -32,6 +33,7 @@ import { warnMessage } from '@utogether/utils';
32
33
  import StaffInfo from './StaffInfo.vue';
33
34
  import { getServiceApi } from '../../../api';
34
35
  import { VxeUI } from 'vxe-pc-ui';
36
+ import to from 'await-to-js';
35
37
 
36
38
  const xgrid = ref(null);
37
39
  const { t } = useI18n();
@@ -126,13 +128,14 @@ const handleUpdate = async (record: IRecord) => {
126
128
  xgrid.value.hiddenLoading();
127
129
  xgrid.value.refreshData();
128
130
  };
129
- // 启用/禁用
131
+ // 同步
130
132
  const handleSync = async () => {
131
133
  const type = await VxeUI.modal.confirm(t('message.tip.confirmSync'));
132
134
  if (type !== 'confirm') return;
133
135
  xgrid.value.showLoading();
134
- await getServiceApi().post('/uums/employee/syncEwEmp', {});
136
+ const [err] = await to(getServiceApi().post('/uums/employee/syncEwEmp', {}));
135
137
  xgrid.value.hiddenLoading();
138
+ if (err) return;
136
139
  xgrid.value.refreshData();
137
140
  };
138
141
 
@@ -140,6 +143,12 @@ const onButtonClick = code => {
140
143
  code === 'sync' && handleSync();
141
144
  };
142
145
 
146
+ const callback = {
147
+ querySuccess: data => {
148
+ console.log('querySuccess', data);
149
+ }
150
+ };
151
+
143
152
  // 删除
144
153
  // const handleDel = async () => {
145
154
  // const type = await VXETable.modal.confirm(t('message.delRecord'));
@@ -1,185 +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.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>
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', minWidth: 220, treeNode: true },
68
+ { field: 'menuNameEn', minWidth: 180 },
69
+ { field: 'sort', width: 70 },
70
+ { field: 'menuCode', minWidth: 220 },
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>
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-12-23 17:33:21
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-11-25 10:16:48
5
+ * @LastEditTime: 2025-12-05 16:58:27
6
6
  * @Description: 数据字典
7
7
  -->
8
8
  <template>
@@ -79,7 +79,7 @@ const columns = [
79
79
  slots: {
80
80
  default: ({ row }) => {
81
81
  if (!row.id) return null;
82
- return [<ut-button content="lov" onClick={() => hanldeDipose(row)} />];
82
+ return [<ut-button content="lov" icon="ri-dice-6-line" onClick={() => hanldeDipose(row)} />];
83
83
  }
84
84
  }
85
85
  }
@@ -2,18 +2,18 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2022-07-15 17:02:56
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-11-24 13:44:45
5
+ * @LastEditTime: 2025-12-05 16:49:52
6
6
  * @Description: file contentu
7
7
  -->
8
8
  <template>
9
9
  <div class="u-dict-config_wrapper">
10
- <el-drawer
10
+ <vxe-drawer
11
11
  :model-value="show"
12
- :before-close="handleClose"
13
12
  :title="$t('message.title.dictList', { name: record.dictName })"
14
- direction="rtl"
13
+ position="right"
15
14
  destroy-on-close
16
- size="76%"
15
+ width="67%"
16
+ @close="handleClose"
17
17
  >
18
18
  <ut-grid
19
19
  ref="xgrid"
@@ -38,7 +38,7 @@
38
38
  @close="showModal = false"
39
39
  @confirm="onConfirm"
40
40
  />
41
- </el-drawer>
41
+ </vxe-drawer>
42
42
  </div>
43
43
  </template>
44
44