@utogether/udp-core 1.0.1-beta.6 → 1.0.1-beta.8

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 (90) hide show
  1. package/dist/{403-Co4hnzlW.js → 403-Cjzd1bv9.js} +1 -1
  2. package/dist/{404-BsseeBQQ.js → 404-CJ-3SXgP.js} +1 -1
  3. package/dist/{500-DtKz7MA4.js → 500-CQ65MvIK.js} +1 -1
  4. package/dist/{AuthorityInfo-iWYEWOmC.js → AuthorityInfo-BdISFrap.js} +1 -1
  5. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-DsLG5slc.js +100 -0
  6. package/dist/{Company-CK8Zkcv3.js → Company-Mj-z1hNb.js} +3 -3
  7. package/dist/{CompanyPanel-DL4UrYYG.js → CompanyPanel-BNXZ7ER3.js} +1 -1
  8. package/dist/{Department-BPHn8to4.js → Department-C4ygVbSP.js} +3 -3
  9. package/dist/{DepartmentPanel-Bqraa_NB.js → DepartmentPanel-Bk96mDlD.js} +1 -1
  10. package/dist/{DesignPanel-CFOIOZme.js → DesignPanel-Bwx2QwMM.js} +1 -1
  11. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-H0FNG35Z.js → DesignPanel.vue_vue_type_style_index_0_lang-B3OjJTHG.js} +24 -26
  12. package/dist/{DictView-CaD1yHQS.js → DictView-DE3jnxnq.js} +19 -18
  13. package/dist/{InvOrganization-CoO0_wsY.js → InvOrganization-Drce3xUC.js} +1 -1
  14. package/dist/Org-C42D9lDj.js +39 -0
  15. package/dist/{Preview-B-K_bxDG.js → Preview-CCXoRvWF.js} +1 -1
  16. package/dist/{ReportDefine-DElbukSL.js → ReportDefine-BWsExcQU.js} +1 -1
  17. package/dist/{ReportDesign-DvUHOKDK.js → ReportDesign-BTzpUpGj.js} +26 -26
  18. package/dist/{ReportQuery-BcSYRNT3.js → ReportQuery-eoSmPXzc.js} +1 -1
  19. package/dist/{ReportQueryFrom-BGEA4Pqk.js → ReportQueryFrom-D4YlI5jl.js} +1 -1
  20. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-B-KEPnfY.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-DPDGKW9a.js} +1 -1
  21. package/dist/{ReportTemplate-DnPtEoxn.js → ReportTemplate-BTa2YWq0.js} +1 -1
  22. package/dist/{Role-CMKkWZil.js → Role-BTGB91P1.js} +6 -6
  23. package/dist/{RoleAssign-BToNzG9a.js → RoleAssign-BBSY6bYM.js} +3 -3
  24. package/dist/{RolePanel-BikZ-D2u.js → RolePanel-BaTuyeVC.js} +1 -1
  25. package/dist/{RolePanel-BNqd7-M6.js → RolePanel-DNDI7e0g.js} +1 -1
  26. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-BCwAp_1a.js +132 -0
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Nngq860f.js → RolePanel.vue_vue_type_script_setup_true_lang-QUeAQHrg.js} +44 -38
  28. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-BDRDD2FX.js → ScrollPanel.vue_vue_type_style_index_0_lang-nqrbOaQP.js} +1 -1
  29. package/dist/{Staff-DBFATgM_.js → Staff-4dbkOqzl.js} +3 -3
  30. package/dist/{StaffInfo-CrfwZcEL.js → StaffInfo-xFAMTWgD.js} +1 -1
  31. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-CE3_NJF_.js → StaffInfo.vue_vue_type_script_setup_true_lang-CocRlLsO.js} +1 -1
  32. package/dist/{StaffPanel-D54Rl_Bg.js → StaffPanel-Cx-8MHBz.js} +1 -1
  33. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-B8wtuSZD.js → StaffPanel.vue_vue_type_script_setup_true_lang-B3wfpxel.js} +2 -2
  34. package/dist/{SysUser-CsuovBei.js → SysUser-BHpgPXsI.js} +2 -2
  35. package/dist/{SysUserPanel-DNUwWEVp.js → SysUserPanel-DH79Lsnm.js} +1 -1
  36. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-CY6mhBV0.js → SysUserPanel.vue_vue_type_script_setup_true_lang-BONl2R1a.js} +104 -100
  37. package/dist/{SystemMenu-oLmwvaqT.js → SystemMenu-C2JbVgyr.js} +2 -2
  38. package/dist/{UserInfo-LyrDwBG1.js → UserInfo-Efo-_yRo.js} +1 -1
  39. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-vinrRyOG.js → UserInfo.vue_vue_type_style_index_0_lang-DnjjBjMU.js} +39 -37
  40. package/dist/{childView-DGKp87fT.js → childView-D7U7qh_A.js} +1 -1
  41. package/dist/{childView-SmYl4G6c.js → childView-wFMGHGiX.js} +1 -1
  42. package/dist/{childView.vue_vue_type_style_index_0_lang-wVoPvyRY.js → childView.vue_vue_type_style_index_0_lang-Bshn4N8Y.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-DU-Uun5d.js → childView.vue_vue_type_style_index_0_lang-w2CkZij-.js} +1 -1
  44. package/dist/{code-rule-CfbGjmOs.js → code-rule-B5dIxV6g.js} +1 -1
  45. package/dist/core.es.js +1 -1
  46. package/dist/{cron-task-DMfwGfms.js → cron-task-DWGtihrw.js} +1 -1
  47. package/dist/{frameView-D-hu_pqQ.js → frameView-DF2mXAwO.js} +1 -1
  48. package/dist/{index-ADANSV-q.js → index-VU6c04nN.js} +1562 -1309
  49. package/dist/{layoutView-D3SikBPr.js → layoutView-DUUKW0KX.js} +2 -2
  50. package/dist/{login-CQ1yBBdY.js → login-ByEoQ2HH.js} +11 -11
  51. package/dist/{lov-view-CSobDBH7.js → lov-view-DqD__3-w.js} +2 -2
  52. package/dist/{menuInfo-mFuM30f1.js → menuInfo-a7jPwS1r.js} +1 -1
  53. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BsIPzYg0.js → menuInfo.vue_vue_type_style_index_0_lang-ZzGrkylA.js} +2 -2
  54. package/dist/{pda-app-CIGFsvrX.js → pda-app-EP9d0Ypd.js} +201 -189
  55. package/dist/{resource-mbd4LPi-.js → resource-eughqxkP.js} +1 -1
  56. package/dist/{su-welcome-DruLsVvu.js → su-welcome-98GLKyZM.js} +1 -1
  57. package/dist/{sys-config-TXb5cJM4.js → sys-config-gs16tgwA.js} +1 -1
  58. package/dist/udp-core.css +2 -2
  59. package/dist/{utogether-Cv0UXnEX.js → utogether-C4Dd2epc.js} +1 -1
  60. package/package.json +1 -1
  61. package/src/App.vue +1 -6
  62. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  63. package/src/components/udp/grid.vue +2 -18
  64. package/src/components/udp/index.ts +2 -2
  65. package/src/components/udp/modal-grid.vue +288 -297
  66. package/src/components/udp/utils.ts +11 -18
  67. package/src/main.ts +10 -2
  68. package/src/plugins/i18n/en.ts +24 -13
  69. package/src/plugins/i18n/zh.ts +348 -342
  70. package/src/plugins/vxe-table/index.ts +1 -1
  71. package/src/plugins/vxe-table/render.tsx +92 -17
  72. package/src/style/vxetable.scss +293 -287
  73. package/src/views/organization/org/Org.vue +9 -5
  74. package/src/views/system/menu/SystemMenu.vue +4 -18
  75. package/src/views/system/menu/menuInfo.vue +4 -17
  76. package/src/views/system/role/AuthorityInfo.vue +19 -15
  77. package/src/views/system/role/Role.vue +1 -5
  78. package/src/views/system/role/RolePanel.vue +11 -2
  79. package/src/views/system/role/UserInfo.vue +195 -193
  80. package/src/views/system/role-assign/RolePanel.vue +139 -136
  81. package/src/views/system/sysUser/SysUserPanel.vue +278 -282
  82. package/src/views/uapp/pda/pda-app.vue +36 -11
  83. package/src/views/udev/dict/DictView.vue +6 -1
  84. package/src/views/udev/dict/childView.vue +1 -6
  85. package/src/views/ulogin/login.vue +1 -5
  86. package/src/views/urpt/design/DesignPanel.vue +507 -526
  87. package/src/views/urpt/design/ReportDesign.vue +7 -11
  88. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BWp7PKyH.js +0 -102
  89. package/dist/Org-BU3oaFx3.js +0 -35
  90. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DYP3u1Nv.js +0 -126
@@ -26,18 +26,9 @@
26
26
  title-width="110"
27
27
  transfer
28
28
  >
29
- <vxe-form-item
30
- v-if="record.menuType === '0'"
31
- :title="$t('message.menuType')"
32
- field="menuCategory"
33
- span="24"
34
- >
29
+ <vxe-form-item v-if="record.menuType === '0'" :title="$t('message.menuType')" field="menuCategory" span="24">
35
30
  <template #default="{ data }">
36
- <vxe-select
37
- v-model="data.menuCategory"
38
- :disabled="data.menuCategory === '0'"
39
- :transfer="false"
40
- >
31
+ <vxe-select v-model="data.menuCategory" :disabled="data.menuCategory === '0'" :transfer="false">
41
32
  <vxe-option
42
33
  v-for="dict in getLovList('SU.MENU.TYPE')"
43
34
  :key="dict.dictCode"
@@ -69,12 +60,7 @@
69
60
  field="menuCode"
70
61
  span="24"
71
62
  />
72
- <vxe-form-item
73
- :title="$t('message.menuName')"
74
- :item-render="{ name: '$input' }"
75
- field="menuName"
76
- span="24"
77
- />
63
+ <vxe-form-item :title="$t('message.menuName')" :item-render="{ name: '$input' }" field="menuName" span="24" />
78
64
  <vxe-form-item
79
65
  :title="$t('message.menuNameEn')"
80
66
  field="menuNameEn"
@@ -291,6 +277,7 @@ const onSubmit = () => {
291
277
  record.permissionCode = record.dispalyCode;
292
278
  await to(serviceApi.put(url, [record]));
293
279
  loading.value = false;
280
+ resData = record;
294
281
  }
295
282
  handleClose('submit', resData);
296
283
  }
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-11-22 19:50:48
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-07-14 14:58:13
5
+ * @LastEditTime: 2025-08-12 09:02:46
6
6
  * @Description: file content
7
7
  -->
8
8
 
@@ -14,32 +14,29 @@
14
14
  :before-close="handleClose"
15
15
  direction="rtl"
16
16
  destroy-on-close
17
+ body-class="ut-draw-body"
17
18
  size="40%"
18
19
  >
19
- <div
20
- v-spinning="loading"
21
- element-loading-text="Loading..."
22
- style="position: relative; height: 80vh"
23
- >
24
- <div style="height: 85%; overflow: auto">
20
+ <div v-spinning="loading" style="position: relative; height: 100%">
21
+ <div>
25
22
  <el-tree-v2
26
23
  ref="xTree"
27
24
  :data="data.dataList"
28
25
  :props="{ children: 'children', label: 'menuName' }"
29
26
  :default-checked-keys="data.defaultCheckedKeys"
30
- :height="420"
27
+ :height="height"
31
28
  show-checkbox
32
29
  node-key="id"
33
30
  />
34
31
  </div>
35
- <div style="position: absolute; width: 100%; height: 15%">
36
- <el-divider style="margin: 16px 0" />
37
- <el-row type="flex" justify="end" style="padding-right: 20px">
38
- <ut-button content="cancel" icon="ri-close-fill" status="warning" @tap="handleClose" />
39
- <ut-button content="confirm" icon="ri-save-3-fill" status="u-cyan" @tap="onSubmit" />
40
- </el-row>
41
- </div>
42
32
  </div>
33
+ <template #footer>
34
+ <el-divider style="margin: 16px 0" />
35
+ <el-row type="flex" justify="end" style="padding-right: 20px">
36
+ <ut-button content="cancel" icon="ri-close-fill" status="warning" @tap="handleClose" />
37
+ <ut-button content="confirm" icon="ri-save-3-fill" status="u-cyan" @tap="onSubmit" />
38
+ </el-row>
39
+ </template>
43
40
  </el-drawer>
44
41
  </div>
45
42
  </template>
@@ -72,9 +69,12 @@ const data = reactive({
72
69
  defaultCheckedKeys: [] // 默认权限
73
70
  });
74
71
 
72
+ const height = window.innerHeight - 180;
73
+
75
74
  const emit = defineEmits<{
76
75
  (e: 'onClose'): void;
77
76
  }>();
77
+
78
78
  // 菜单列表
79
79
  const getDataList = async () => {
80
80
  const res = (await getServiceApi().get('/uums/menu/listMenuTree', {})) as [IRecord];
@@ -126,4 +126,8 @@ onBeforeMount(() => {
126
126
  .el-drawer__header {
127
127
  margin-bottom: 12px;
128
128
  }
129
+
130
+ .ut-draw-body {
131
+ padding: 0 12px;
132
+ }
129
133
  </style>
@@ -8,11 +8,7 @@
8
8
  <template>
9
9
  <div class="u-content-panel">
10
10
  <div class="u-left-panel">
11
- <ScrollPane
12
- :title="$t('company')"
13
- url="/uums/unit"
14
- :tree-otions="{ children: 'children', label: 'unitName' }"
15
- />
11
+ <ScrollPane :title="$t('company')" url="/uums/unit" :tree-otions="{ children: 'children', label: 'unitName' }" />
16
12
  </div>
17
13
  <div class="content">
18
14
  <role-panel />
@@ -11,6 +11,7 @@
11
11
  ref="xgrid"
12
12
  :items="formItems"
13
13
  :columns="columns"
14
+ :check-method="checkMethod"
14
15
  url="/uums/role"
15
16
  mode="form"
16
17
  @buttonClick="onButtonClick"
@@ -39,7 +40,7 @@
39
40
  :url="url"
40
41
  :method="method"
41
42
  width="400"
42
- height="220"
43
+ height="240"
43
44
  data-status="update"
44
45
  :title="$t('message.title.authEdit')"
45
46
  @close="data.showModalView = false"
@@ -105,7 +106,7 @@ const columns = [
105
106
  // <ut-button content="edit" onTap={() => handleShowChild(row, 'update')} />
106
107
  return [
107
108
  <>
108
- <ut-button content="edit" auth="edit" onTap={() => handleEdit(row)} />
109
+ <ut-button content="edit" auth="edit" disabled={row.roleCode === 'admin'} onTap={() => handleEdit(row)} />
109
110
  <ut-button
110
111
  content="dispatchUser"
111
112
  status="warning"
@@ -174,6 +175,10 @@ const handleDispathUser = record => {
174
175
  };
175
176
  // 启用/禁用
176
177
  async function handleClick({ row }) {
178
+ if (row.roleCode === 'admin') {
179
+ row.enabled = '1';
180
+ return;
181
+ }
177
182
  await getServiceApi().put('/uums/role/singleUpdate', row);
178
183
  xgrid.value.refreshData();
179
184
  }
@@ -183,6 +188,10 @@ const onClose = () => {
183
188
  data.showAuthView = false;
184
189
  data.showUserView = false;
185
190
  };
191
+
192
+ const checkMethod = row => {
193
+ return row.roleCode !== 'admin';
194
+ };
186
195
  // 拷贝当前列表项的数据(字典类型)
187
196
  // const { clipboardRef } = useCopyToClipboard();
188
197
  // const cellDBLClickEvent: VxeTableEvents.CellDblclick = ({ row }) => {
@@ -1,193 +1,195 @@
1
- <template>
2
- <div class="u-dict-config_wrapper">
3
- <el-drawer
4
- :model-value="show"
5
- :title="$t('message.title.authUser', { role: record.roleName })"
6
- :before-close="handleClose"
7
- direction="rtl"
8
- destroy-on-close
9
- size="80%"
10
- >
11
- <vxe-grid ref="xgrid" v-bind="gridOptions" v-on="gridEvents" />
12
- <ut-modal-grid
13
- v-if="showModalView"
14
- url="/uums/user/listUserToRole"
15
- :default-params="{ roleId: record.id }"
16
- :items="modalFormItems"
17
- :columns="modalColum"
18
- :show-footer="true"
19
- :editable="false"
20
- width="60%"
21
- @close="showModalView = false"
22
- @confirm="onConfirm"
23
- />
24
- </el-drawer>
25
- </div>
26
- </template>
27
- <script setup lang="ts">
28
- import { onBeforeMount, reactive, ref } from 'vue';
29
- import { VxeGridProps, VxeGridListeners, VxeGridInstance } from 'vxe-table';
30
- import to from 'await-to-js';
31
- import { getServiceApi } from '../../../api';
32
-
33
- interface IProps {
34
- record: IRecord;
35
- show: boolean;
36
- direction?: string;
37
- }
38
-
39
- const props = withDefaults(defineProps<IProps>(), {
40
- record: (): IRecord => {
41
- return {};
42
- },
43
- show: false,
44
- direction: 'rtl'
45
- });
46
- const loading = ref(false);
47
- const showModalView = ref(false);
48
-
49
- const serviceApi = getServiceApi();
50
-
51
- const emit = defineEmits<{
52
- (e: 'onClose'): void;
53
- }>();
54
- const formItems: IFormItemProps[] = [
55
- {
56
- field: 'userName',
57
- title: 'message.userCode',
58
- span: 8,
59
- itemRender: { name: '$input' }
60
- },
61
- {
62
- field: 'name',
63
- title: 'message.userName',
64
- span: 8,
65
- itemRender: { name: '$input' }
66
- },
67
- {
68
- span: 8,
69
- align: 'right',
70
- itemRender: {
71
- name: '$buttons',
72
- children: [
73
- {
74
- props: {
75
- type: 'submit',
76
- content: 'message.btn.search',
77
- icon: 'ri-search-line',
78
- status: 'primary'
79
- }
80
- },
81
- { props: { type: 'reset', icon: 'ri-refresh-line', content: 'message.btn.reset' } }
82
- ]
83
- }
84
- }
85
- ];
86
- // 列字段
87
- const columns: ITableColProps[] = [
88
- { type: 'checkbox', width: 50, align: 'center' },
89
- {
90
- field: 'userName',
91
- title: 'message.userCode'
92
- },
93
- {
94
- field: 'name',
95
- title: 'message.userName'
96
- },
97
- {
98
- field: 'enabled',
99
- title: 'message.enabled',
100
- width: 70,
101
- editRender: {
102
- name: '$select',
103
- options: [
104
- { label: '启用', value: '1' },
105
- { label: '禁用', value: '0' }
106
- ],
107
- defaultValue: '1'
108
- }
109
- }
110
- ];
111
- // 新增/删除/保存
112
- const buttons = [
113
- { code: 'add', name: 'message.btn.add', status: 'u-cyan', icon: 'ri-add-line' },
114
- { code: 'delete', name: 'message.btn.del', status: 'danger', icon: 'ri-delete-bin-5-fill' }
115
- ];
116
- const modalFormItems = [
117
- { field: 'userName', title: 'message.userCode' },
118
- { field: 'name', title: 'message.userName' }
119
- ];
120
- const modalColum = [
121
- { type: 'checkbox', width: 40 },
122
- { field: 'userName', title: 'message.userCode' },
123
- { field: 'name', title: 'message.userName' },
124
- { field: 'enabled', width: 70, formatter: ['formatDict', 'SU.ENABLE'] }
125
- ];
126
- const xgrid = ref({} as VxeGridInstance);
127
- const gridOptions = reactive<VxeGridProps>({
128
- height: 560,
129
- border: true,
130
- pagerConfig: {},
131
- toolbarConfig: { buttons, perfect: true },
132
- loading: false,
133
- formConfig: { titleWidth: 100, titleAlign: 'right', items: formItems },
134
- // data: props.record.children,
135
- proxyConfig: {
136
- form: true, // 查询是需要启用表单代理
137
- ajax: {
138
- // 接收 Promise
139
- query: ({ page, form }) => {
140
- const queryParams = Object.assign({}, form);
141
- queryParams.id = props.record.id;
142
- queryParams.pageNum = page.currentPage;
143
- queryParams.pageSize = page.pageSize;
144
- return serviceApi.get('/uums/user/listRoleUsers', queryParams);
145
- },
146
- // body 对象: { removeRecords }
147
- delete: ({ body: { removeRecords } }) => {
148
- const param = {
149
- roleId: props.record.id,
150
- userIds: removeRecords.map(v => v.id).join()
151
- };
152
- return serviceApi.delete('/uums/role/deleteRoleUsers', param);
153
- }
154
- }
155
- },
156
- columns
157
- });
158
- // grid点击事件监听
159
- const gridEvents: VxeGridListeners = {
160
- toolbarButtonClick({ code }) {
161
- if (code === 'add') {
162
- showModalView.value = true;
163
- }
164
- }
165
- };
166
- // 监听modal table确定
167
- const onConfirm = async records => {
168
- const param = { userIds: '', roleId: props.record.id };
169
- param.userIds = records.map(m => m.id).join(',');
170
- gridOptions.loading = true;
171
- const [err] = await to(serviceApi.post('/uums/role/addUserRole', param));
172
- gridOptions.loading = false;
173
- if (!err) {
174
- xgrid.value.commitProxy('query');
175
- showModalView.value = false;
176
- }
177
- };
178
- // 抽屉关闭
179
- function handleClose() {
180
- emit('onClose');
181
- }
182
- onBeforeMount(() => {
183
- loading.value = true;
184
- });
185
- </script>
186
-
187
- <style lang="scss">
188
- .u-dict-config_wrapper {
189
- .el-drawer__header {
190
- margin-bottom: 0;
191
- }
192
- }
193
- </style>
1
+ <template>
2
+ <div class="u-dict-config_wrapper">
3
+ <el-drawer
4
+ :model-value="show"
5
+ :title="$t('message.title.authUser', { role: record.roleName })"
6
+ :before-close="handleClose"
7
+ direction="rtl"
8
+ destroy-on-close
9
+ size="80%"
10
+ >
11
+ <vxe-grid ref="xgrid" v-bind="gridOptions" v-on="gridEvents" />
12
+ <ut-modal-grid
13
+ v-if="showModalView"
14
+ url="/uums/user/listUserToRole"
15
+ :default-params="{ roleId: record.id }"
16
+ :items="modalFormItems"
17
+ :columns="modalColum"
18
+ :show-footer="true"
19
+ :editable="false"
20
+ :title="$t('message.udp.userList')"
21
+ width="60%"
22
+ height="75%"
23
+ @close="showModalView = false"
24
+ @confirm="onConfirm"
25
+ />
26
+ </el-drawer>
27
+ </div>
28
+ </template>
29
+ <script setup lang="ts">
30
+ import { onBeforeMount, reactive, ref } from 'vue';
31
+ import { VxeGridProps, VxeGridListeners, VxeGridInstance } from 'vxe-table';
32
+ import to from 'await-to-js';
33
+ import { getServiceApi } from '../../../api';
34
+
35
+ interface IProps {
36
+ record: IRecord;
37
+ show: boolean;
38
+ direction?: string;
39
+ }
40
+
41
+ const props = withDefaults(defineProps<IProps>(), {
42
+ record: (): IRecord => {
43
+ return {};
44
+ },
45
+ show: false,
46
+ direction: 'rtl'
47
+ });
48
+ const loading = ref(false);
49
+ const showModalView = ref(false);
50
+
51
+ const serviceApi = getServiceApi();
52
+
53
+ const emit = defineEmits<{
54
+ (e: 'onClose'): void;
55
+ }>();
56
+ const formItems: IFormItemProps[] = [
57
+ {
58
+ field: 'userName',
59
+ title: 'message.udp.userCode',
60
+ span: 8,
61
+ itemRender: { name: '$input' }
62
+ },
63
+ {
64
+ field: 'name',
65
+ title: 'message.udp.userName',
66
+ span: 8,
67
+ itemRender: { name: '$input' }
68
+ },
69
+ {
70
+ span: 8,
71
+ align: 'right',
72
+ itemRender: {
73
+ name: '$buttons',
74
+ children: [
75
+ {
76
+ props: {
77
+ type: 'submit',
78
+ content: 'message.btn.search',
79
+ icon: 'ri-search-line',
80
+ status: 'primary'
81
+ }
82
+ },
83
+ { props: { type: 'reset', icon: 'ri-refresh-line', content: 'message.btn.reset' } }
84
+ ]
85
+ }
86
+ }
87
+ ];
88
+ // 列字段
89
+ const columns: ITableColProps[] = [
90
+ { type: 'checkbox', width: 50, align: 'center' },
91
+ {
92
+ field: 'userName',
93
+ title: 'message.udp.userCode'
94
+ },
95
+ {
96
+ field: 'name',
97
+ title: 'message.udp.userName'
98
+ },
99
+ {
100
+ field: 'enabled',
101
+ title: 'message.enabled',
102
+ width: 70,
103
+ editRender: {
104
+ name: '$select',
105
+ options: [
106
+ { label: '启用', value: '1' },
107
+ { label: '禁用', value: '0' }
108
+ ],
109
+ defaultValue: '1'
110
+ }
111
+ }
112
+ ];
113
+ // 新增/删除/保存
114
+ const buttons = [
115
+ { code: 'add', name: 'message.btn.add', status: 'u-cyan', icon: 'ri-add-line' },
116
+ { code: 'delete', name: 'message.btn.del', status: 'danger', icon: 'ri-delete-bin-5-fill' }
117
+ ];
118
+ const modalFormItems = [
119
+ { field: 'userName', title: 'message.udp.userCode', span: 9 },
120
+ { field: 'name', title: 'message.udp.userName', span: 9 }
121
+ ];
122
+ const modalColum = [
123
+ { type: 'checkbox', width: 40 },
124
+ { field: 'userName', title: 'message.udp.userCode' },
125
+ { field: 'name', title: 'message.udp.userName' },
126
+ { field: 'enabled', width: 70, formatter: ['formatDict', 'SU.ENABLE'] }
127
+ ];
128
+ const xgrid = ref({} as VxeGridInstance);
129
+ const gridOptions = reactive<VxeGridProps>({
130
+ height: 'auto',
131
+ border: true,
132
+ pagerConfig: {},
133
+ toolbarConfig: { buttons, perfect: true },
134
+ loading: false,
135
+ formConfig: { titleWidth: 100, titleAlign: 'right', items: formItems },
136
+ // data: props.record.children,
137
+ proxyConfig: {
138
+ form: true, // 查询是需要启用表单代理
139
+ ajax: {
140
+ // 接收 Promise
141
+ query: ({ page, form }) => {
142
+ const queryParams = Object.assign({}, form);
143
+ queryParams.id = props.record.id;
144
+ queryParams.pageNum = page.currentPage;
145
+ queryParams.pageSize = page.pageSize;
146
+ return serviceApi.get('/uums/user/listRoleUsers', queryParams);
147
+ },
148
+ // body 对象: { removeRecords }
149
+ delete: ({ body: { removeRecords } }) => {
150
+ const param = {
151
+ roleId: props.record.id,
152
+ userIds: removeRecords.map(v => v.id).join()
153
+ };
154
+ return serviceApi.delete('/uums/role/deleteRoleUsers', param);
155
+ }
156
+ }
157
+ },
158
+ columns
159
+ });
160
+ // grid点击事件监听
161
+ const gridEvents: VxeGridListeners = {
162
+ toolbarButtonClick({ code }) {
163
+ if (code === 'add') {
164
+ showModalView.value = true;
165
+ }
166
+ }
167
+ };
168
+ // 监听modal table确定
169
+ const onConfirm = async records => {
170
+ const param = { userIds: '', roleId: props.record.id };
171
+ param.userIds = records.map(m => m.id).join(',');
172
+ gridOptions.loading = true;
173
+ const [err] = await to(serviceApi.post('/uums/role/addUserRole', param));
174
+ gridOptions.loading = false;
175
+ if (!err) {
176
+ xgrid.value.commitProxy('query');
177
+ showModalView.value = false;
178
+ }
179
+ };
180
+ // 抽屉关闭
181
+ function handleClose() {
182
+ emit('onClose');
183
+ }
184
+ onBeforeMount(() => {
185
+ loading.value = true;
186
+ });
187
+ </script>
188
+
189
+ <style lang="scss">
190
+ .u-dict-config_wrapper {
191
+ .el-drawer__header {
192
+ margin-bottom: 0;
193
+ }
194
+ }
195
+ </style>