@utogether/udp-core 1.0.1-beta.1 → 1.0.1-beta.11

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 (147) hide show
  1. package/build/plugins.ts +39 -32
  2. package/dist/{403-Dp617CWX.js → 403-Dsgsr2M-.js} +1 -1
  3. package/dist/{404-Cz_Axb6Y.js → 404-DmPHEfqM.js} +1 -1
  4. package/dist/{500-BGCtRNse.js → 500-OYEgHR2a.js} +1 -1
  5. package/dist/{AuthorityInfo-DGGfm7IS.js → AuthorityInfo-B1H1txG-.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BUlmQtjQ.js +100 -0
  7. package/dist/{Company-IV3GTnzY.js → Company-C8ojgx93.js} +3 -3
  8. package/dist/{CompanyPanel-qV-_VtoL.js → CompanyPanel-Dageer1t.js} +16 -16
  9. package/dist/{Department-B3W-OxW8.js → Department-Dr94_85I.js} +3 -3
  10. package/dist/{DepartmentPanel-Cw3OWxE7.js → DepartmentPanel-Bc5r1HpT.js} +1 -1
  11. package/dist/{DesignPanel-BFxR2fHJ.js → DesignPanel-CcWt1Myp.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DljbeFba.js → DesignPanel.vue_vue_type_style_index_0_lang-CKA6nx1l.js} +24 -26
  13. package/dist/DictView-BHj6wexC.js +110 -0
  14. package/dist/InvOrganization-DP3Le9g-.js +72 -0
  15. package/dist/Org-BRGHTwsw.js +39 -0
  16. package/dist/{Preview-BlDMmpdR.js → Preview-CqMaUD_3.js} +1 -1
  17. package/dist/{ReportDefine-Cub_85LA.js → ReportDefine-PEQdTCOY.js} +1 -1
  18. package/dist/{ReportDesign-hFhq5UVE.js → ReportDesign-CB4bv8ba.js} +43 -43
  19. package/dist/{ReportQuery-ChkWEyxT.js → ReportQuery-B7t4lMK0.js} +1 -1
  20. package/dist/{ReportQueryFrom-KVyD_8Dj.js → ReportQueryFrom-VBxUIMRJ.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CLNODquq.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-HeLA4Qs5.js} +1 -1
  22. package/dist/{ReportTemplate-ag9NDvh2.js → ReportTemplate-DNkv7F5p.js} +28 -28
  23. package/dist/{Role-_q3lQ8CZ.js → Role-BGfTpZK4.js} +6 -6
  24. package/dist/{RoleAssign-DZb9IRsm.js → RoleAssign-DrKFWZzA.js} +8 -8
  25. package/dist/{RolePanel-CsLsz-Ds.js → RolePanel-3lvRh7aS.js} +1 -1
  26. package/dist/{RolePanel-BQb1LlhD.js → RolePanel-BRI5QYe4.js} +1 -1
  27. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-BXKZb7yt.js +132 -0
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BrnRgHEk.js → RolePanel.vue_vue_type_script_setup_true_lang-Cci_Ysty.js} +44 -38
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CaFKRwXu.js → ScrollPanel.vue_vue_type_style_index_0_lang-BmId6zzA.js} +21 -21
  30. package/dist/{Staff-BSf9Ypbk.js → Staff-Dr0dq3fW.js} +3 -3
  31. package/dist/{StaffInfo-BNKasyMF.js → StaffInfo-_N9g2hPa.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DDZ7ukd0.js → StaffInfo.vue_vue_type_script_setup_true_lang-DiTJY2ug.js} +11 -11
  33. package/dist/{StaffPanel-Bpq0WVlH.js → StaffPanel-mxJQiW3G.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-BhiJ0Q-Q.js → StaffPanel.vue_vue_type_script_setup_true_lang-GRGn-5t6.js} +2 -2
  35. package/dist/{SysUser-FAABuNti.js → SysUser-DgA19hZE.js} +2 -2
  36. package/dist/{SysUserPanel-PxJeOgHm.js → SysUserPanel-Bc85z5_K.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-BHDrP1Pk.js +294 -0
  38. package/dist/{SystemMenu-C-7NAGon.js → SystemMenu-Be-gFIie.js} +26 -26
  39. package/dist/{UserInfo-ClXKtyGo.js → UserInfo-BCYuwFmr.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-8N7P4Hl7.js → UserInfo.vue_vue_type_style_index_0_lang-B1lgokO6.js} +39 -37
  41. package/dist/{childView-C_HmDQNd.js → childView-DhcBr1UA.js} +1 -1
  42. package/dist/{childView-uUlBcTza.js → childView-Dk4zZoXd.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-Ckjmw6wJ.js → childView.vue_vue_type_style_index_0_lang-CVnLnl03.js} +40 -40
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-y0sDvYx5.js → childView.vue_vue_type_style_index_0_lang-D4GYVhOc.js} +1 -1
  45. package/dist/{code-rule-AgCVDKFy.js → code-rule-BSwPwuAL.js} +9 -10
  46. package/dist/core.es.js +14 -11
  47. package/dist/{cron-task-C6FgQxTi.js → cron-task-T1ztyra7.js} +1 -1
  48. package/dist/{frameView-BDgISK7N.js → frameView-BDgngiBq.js} +1 -1
  49. package/dist/img/l_img.svg +1 -1
  50. package/dist/img/minicolors.png +0 -0
  51. package/dist/img/v_img.svg +1 -1
  52. package/dist/index-BSj2AtVL.js +4468 -0
  53. package/dist/{layoutView-yb3DV2DQ.js → layoutView-i7dLLBzJ.js} +1181 -1176
  54. package/dist/{login-RRpljbkm.js → login-K5Ludp8x.js} +105 -113
  55. package/dist/{login-log-CvVnyGi3.js → login-log-kqKzKTto.js} +1 -1
  56. package/dist/{lov-view-C9-rjzZR.js → lov-view-lAexiucu.js} +2 -2
  57. package/dist/{menuInfo-CzPQyFhp.js → menuInfo-BaN5YZPp.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BumXunCg.js → menuInfo.vue_vue_type_style_index_0_lang-yI4QOYxG.js} +100 -97
  59. package/dist/{pda-app-Dvy3U-b6.js → pda-app-DEtDXFvM.js} +211 -197
  60. package/dist/{resource-Fy0lFkSV.js → resource-Bztmz7pn.js} +15 -15
  61. package/dist/{su-welcome-DYvSCUST.js → su-welcome-Bx8nBPi9.js} +109 -110
  62. package/dist/sys-config-nvrtYGgi.js +290 -0
  63. package/dist/udp-core.css +2 -2
  64. package/dist/{utogether-CjmJiHoE.js → utogether-yPnwDAIH.js} +1 -1
  65. package/index.ts +40 -36
  66. package/package.json +18 -18
  67. package/src/App.vue +65 -70
  68. package/src/api/index.ts +31 -31
  69. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  70. package/src/components/SuScrollTree/ScrollPanel.vue +3 -3
  71. package/src/components/udp/count-down.vue +536 -0
  72. package/src/components/udp/flip-down/FlipCard/flip-card.vue +251 -0
  73. package/src/components/udp/flip-down/FlipCard/interfaces.ts +4 -0
  74. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +113 -0
  75. package/src/components/udp/form-upload.vue +414 -64
  76. package/src/components/udp/form.vue +112 -0
  77. package/src/components/udp/grid.vue +495 -0
  78. package/src/components/udp/index.ts +10 -4
  79. package/src/components/udp/lov.vue +388 -0
  80. package/src/components/udp/modal-form.vue +13 -3
  81. package/src/components/udp/modal-grid.vue +298 -0
  82. package/src/components/udp/upload.vue +423 -0
  83. package/src/components/udp/utils.ts +447 -40
  84. package/src/directives/permission/index.ts +1 -1
  85. package/src/layout/components/lay-navbar/index.vue +239 -237
  86. package/src/layout/components/lay-panel/index.vue +150 -150
  87. package/src/layout/components/lay-search/index.vue +25 -25
  88. package/src/layout/components/lay-select-org/index.vue +64 -69
  89. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  90. package/src/layout/components/lay-sidebar/horizontal.vue +190 -191
  91. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  92. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -98
  93. package/src/layout/components/lay-tag/index.vue +625 -625
  94. package/src/layout/hooks/useNav.ts +173 -173
  95. package/src/layout/layoutView.vue +215 -215
  96. package/src/main.ts +119 -109
  97. package/src/plugins/i18n/en.ts +302 -289
  98. package/src/plugins/i18n/zh.ts +349 -337
  99. package/src/plugins/vxe-table/index.ts +53 -46
  100. package/src/plugins/vxe-table/render.tsx +956 -817
  101. package/src/router/index.ts +177 -183
  102. package/src/router/modules/remaining.ts +58 -83
  103. package/src/store/modules/permission.ts +1 -4
  104. package/src/style/button.scss +85 -78
  105. package/src/style/tailwind.css +1 -68
  106. package/src/style/vxetable.scss +44 -11
  107. package/src/utils/authority/index.ts +1 -1
  108. package/src/utils/{http → udp/http}/index.ts +283 -297
  109. package/src/utils/{http → udp/http}/types.d.ts +8 -5
  110. package/src/utils/udp/useRender.ts +17 -6
  111. package/src/views/login/login-view.vue +300 -314
  112. package/src/views/organization/company/CompanyPanel.vue +259 -259
  113. package/src/views/organization/inv-org/InvOrganization.vue +68 -54
  114. package/src/views/organization/org/Org.vue +9 -5
  115. package/src/views/system/menu/SystemMenu.vue +183 -197
  116. package/src/views/system/menu/menuInfo.vue +363 -371
  117. package/src/views/system/role/AuthorityInfo.vue +19 -15
  118. package/src/views/system/role/Role.vue +1 -5
  119. package/src/views/system/role/RolePanel.vue +11 -2
  120. package/src/views/system/role/UserInfo.vue +195 -193
  121. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  122. package/src/views/system/role-assign/RolePanel.vue +139 -136
  123. package/src/views/system/sys/sys-config.vue +287 -291
  124. package/src/views/system/sysUser/SysUserPanel.vue +278 -278
  125. package/src/views/uapp/pda/pda-app.vue +208 -176
  126. package/src/views/udev/dict/DictView.vue +118 -106
  127. package/src/views/udev/dict/childView.vue +7 -7
  128. package/src/views/udev/lov/lov-view.vue +91 -91
  129. package/src/views/ufile/aggregation/File.vue +5 -5
  130. package/src/views/ufile/file/water-mark.vue +14 -14
  131. package/src/views/uhome/su-welcome.vue +3 -3
  132. package/src/views/ulogin/login.vue +12 -8
  133. package/src/views/upms/user/login-log.vue +1 -1
  134. package/src/views/urpt/design/DesignPanel.vue +507 -526
  135. package/src/views/urpt/design/ReportDesign.vue +15 -19
  136. package/src/views/urpt/static-resource/resource.vue +3 -3
  137. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  138. package/types/global.d.ts +2 -1
  139. package/vite.config.ts +6 -2
  140. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BqccGW7v.js +0 -102
  141. package/dist/DictView-C-i7e4hZ.js +0 -95
  142. package/dist/InvOrganization-cfT6riGU.js +0 -260
  143. package/dist/Org-CA7vTDIF.js +0 -35
  144. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-cmW7zBLu.js +0 -126
  145. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-njefUln5.js +0 -288
  146. package/dist/index-DzOzUkf6.js +0 -3388
  147. package/dist/sys-config-DJ1vNQTy.js +0 -277
@@ -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>
@@ -1,57 +1,57 @@
1
- <!--
2
- * @Author: wei.li
3
- * @Date: 2021-11-26 14:37:07
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2024-06-24 20:20:57
6
- * @Description: 角色分配业务单元
7
- -->
8
- <template>
9
- <div class="u-content-panel">
10
- <div class="u-left-panel">
11
- <ScrollPane
12
- :title="$t('SuOrg')"
13
- :tree-otions="{ children: 'children', label: 'orgName' }"
14
- extParam="{ pageSize: 500 }"
15
- url="/uums/org"
16
- />
17
- </div>
18
- <div class="content">
19
- <role-panel />
20
- </div>
21
- </div>
22
- </template>
23
-
24
- <script lang="ts" setup>
25
- import { ref, provide } from 'vue';
26
- import ScrollPane from '../../../components/SuScrollTree/ScrollPanel.vue';
27
- import RolePanel from './RolePanel.vue';
28
- const active: any = ref({});
29
- const scrollPanelChange: any = ref(false);
30
- const treeList: any = ref([]);
31
- provide('active', active);
32
-
33
- provide('scrollPanelChange', scrollPanelChange);
34
-
35
- provide('treeList', treeList);
36
- </script>
37
-
38
- <style lang="scss" scoped>
39
- .u-content-panel {
40
- box-sizing: border-box;
41
- display: flex;
42
- width: 100%;
43
- height: 84vh;
44
- padding: 5px;
45
-
46
- .u-left-panel {
47
- width: 250px;
48
- }
49
-
50
- .content {
51
- flex: 1;
52
- width: calc(100% - 250px);
53
- height: 82vh;
54
- margin: 0 10px;
55
- }
56
- }
57
- </style>
1
+ <!--
2
+ * @Author: wei.li
3
+ * @Date: 2021-11-26 14:37:07
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2025-08-06 17:55:03
6
+ * @Description: 角色分配业务单元
7
+ -->
8
+ <template>
9
+ <div class="u-content-panel">
10
+ <div class="u-left-panel">
11
+ <ScrollPane
12
+ :title="$t('SuOrg')"
13
+ :tree-otions="{ children: 'children', label: 'orgName' }"
14
+ :default-params="{ pageSize: 500 }"
15
+ url="/uums/org"
16
+ />
17
+ </div>
18
+ <div class="content">
19
+ <role-panel />
20
+ </div>
21
+ </div>
22
+ </template>
23
+
24
+ <script lang="ts" setup>
25
+ import { ref, provide } from 'vue';
26
+ import ScrollPane from '../../../components/SuScrollTree/ScrollPanel.vue';
27
+ import RolePanel from './RolePanel.vue';
28
+ const active: any = ref({});
29
+ const scrollPanelChange: any = ref(false);
30
+ const treeList: any = ref([]);
31
+ provide('active', active);
32
+
33
+ provide('scrollPanelChange', scrollPanelChange);
34
+
35
+ provide('treeList', treeList);
36
+ </script>
37
+
38
+ <style lang="scss" scoped>
39
+ .u-content-panel {
40
+ box-sizing: border-box;
41
+ display: flex;
42
+ width: 100%;
43
+ height: 84vh;
44
+ padding: 5px;
45
+
46
+ .u-left-panel {
47
+ width: 250px;
48
+ }
49
+
50
+ .content {
51
+ flex: 1;
52
+ width: calc(100% - 250px);
53
+ height: 82vh;
54
+ margin: 0 10px;
55
+ }
56
+ }
57
+ </style>