Commit e839d712f7c4cc16b9c983da8607e09043a20e66
1 parent
d887fa75
fix:修复角色权限分配菜单回显一级菜单问题,修改批量删除为封装统一格式
Showing
3 changed files
with
67 additions
and
78 deletions
... | ... | @@ -93,9 +93,13 @@ |
93 | 93 | roleMenus.value = await getMenusIdsByRoleId(data.record.id); |
94 | 94 | originMenus.value = [...roleMenus.value]; |
95 | 95 | for (let item of treeData.value) { |
96 | - pidArr.value.push(item.key); | |
96 | + if (item?.children != 0) { | |
97 | + pidArr.value.push(item.key); | |
98 | + } | |
97 | 99 | for (let item1 of item?.children) { |
98 | - pidArr.value.push(item1.key); | |
100 | + if (item1?.children != 0) { | |
101 | + pidArr.value.push(item1.key); | |
102 | + } | |
99 | 103 | } |
100 | 104 | } |
101 | 105 | for (let item of roleMenus.value) { | ... | ... |
... | ... | @@ -2,7 +2,6 @@ |
2 | 2 | <div> |
3 | 3 | <BasicTable |
4 | 4 | @register="registerTable" |
5 | - @selection-change="useSelectionChange" | |
6 | 5 | :rowSelection="{ type: 'checkbox' }" |
7 | 6 | :clickToRowSelect="false" |
8 | 7 | > |
... | ... | @@ -11,11 +10,25 @@ |
11 | 10 | <a-button type="primary" @click="handleCreate"> 新增角色 </a-button> |
12 | 11 | </Authority> |
13 | 12 | <Authority value="api:yt:admin:deleteTenantRole"> |
14 | - <a-button type="default" :disabled="disabled" @click="handleBatchDelete"> | |
13 | + <a-button | |
14 | + type="primary" | |
15 | + color="error" | |
16 | + @click="handleDeleteOrBatchDelete(null)" | |
17 | + :disabled="hasBatchDelete" | |
18 | + > | |
15 | 19 | 批量删除 |
16 | 20 | </a-button> |
17 | 21 | </Authority> |
18 | 22 | </template> |
23 | + <template #status="{ record }"> | |
24 | + <Switch | |
25 | + :checked="record.status === 1" | |
26 | + :loading="record.pendingStatus" | |
27 | + checkedChildren="启用" | |
28 | + unCheckedChildren="禁用" | |
29 | + @change="(checked:boolean)=>statusChange(checked,record)" | |
30 | + /> | |
31 | + </template> | |
19 | 32 | <template #action="{ record }"> |
20 | 33 | <TableAction |
21 | 34 | :actions="[ |
... | ... | @@ -32,7 +45,7 @@ |
32 | 45 | color: 'error', |
33 | 46 | popConfirm: { |
34 | 47 | title: '是否确认删除', |
35 | - confirm: handleDelete.bind(null, record), | |
48 | + confirm: handleDeleteOrBatchDelete.bind(null, record), | |
36 | 49 | }, |
37 | 50 | }, |
38 | 51 | ]" |
... | ... | @@ -43,29 +56,30 @@ |
43 | 56 | </div> |
44 | 57 | </template> |
45 | 58 | <script lang="ts"> |
46 | - import { defineComponent, ref } from 'vue'; | |
59 | + import { defineComponent, nextTick } from 'vue'; | |
47 | 60 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
48 | - import { delRole, getRoleListByPage } from '/@/api/system/system'; | |
61 | + import { delRole, getRoleListByPage, setRoleStatus } from '/@/api/system/system'; | |
49 | 62 | import { useMessage } from '/@/hooks/web/useMessage'; |
50 | 63 | import { useDrawer } from '/@/components/Drawer'; |
51 | 64 | import RoleDrawer from './RoleDrawer.vue'; |
52 | 65 | import { columns, searchFormSchema } from './role.data'; |
53 | 66 | import { RoleEnum } from '/@/enums/roleEnum'; |
54 | 67 | import { Authority } from '/@/components/Authority'; |
68 | + import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; | |
69 | + import { Switch } from 'ant-design-vue'; | |
55 | 70 | |
56 | 71 | export default defineComponent({ |
57 | 72 | name: 'TenantRoleManagement', |
58 | - components: { BasicTable, RoleDrawer, TableAction, Authority }, | |
73 | + components: { BasicTable, RoleDrawer, TableAction, Authority, Switch }, | |
59 | 74 | setup() { |
60 | 75 | const [registerDrawer, { openDrawer }] = useDrawer(); |
61 | - let selectedRowKeys: Array<string> = []; | |
62 | - const disabled = ref(true); | |
63 | - const { createMessage } = useMessage(); | |
64 | - const [registerTable, { reload, getSelectRows }] = useTable({ | |
76 | + function handleSuccess() { | |
77 | + reload(); | |
78 | + } | |
79 | + const [registerTable, { reload, setProps, setSelectedRowKeys }] = useTable({ | |
65 | 80 | title: '租户角色列表', |
66 | 81 | api: getRoleListByPage, |
67 | 82 | columns, |
68 | - | |
69 | 83 | formConfig: { |
70 | 84 | labelWidth: 120, |
71 | 85 | schemas: searchFormSchema, |
... | ... | @@ -82,6 +96,19 @@ |
82 | 96 | fixed: 'right', |
83 | 97 | }, |
84 | 98 | }); |
99 | + const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } = | |
100 | + useBatchDelete(delRole, handleSuccess, setProps); | |
101 | + selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => { | |
102 | + // Demo:status为1的选择框禁用 | |
103 | + if (record.status === 1) { | |
104 | + return { disabled: true }; | |
105 | + } else { | |
106 | + return { disabled: false }; | |
107 | + } | |
108 | + }; | |
109 | + nextTick(() => { | |
110 | + setProps(selectionOptions); | |
111 | + }); | |
85 | 112 | |
86 | 113 | function handleCreate() { |
87 | 114 | openDrawer(true, { |
... | ... | @@ -95,50 +122,39 @@ |
95 | 122 | isUpdate: true, |
96 | 123 | }); |
97 | 124 | } |
98 | - | |
99 | - async function handleDelete(record: Recordable) { | |
100 | - const roleIds = [record.id]; | |
101 | - delRole(roleIds).then(() => { | |
102 | - createMessage.success('删除成功'); | |
103 | - reload(); | |
125 | + const statusChange = async (checked, record) => { | |
126 | + setProps({ | |
127 | + loading: true, | |
104 | 128 | }); |
105 | - } | |
106 | - | |
107 | - const useSelectionChange = () => { | |
108 | - selectedRowKeys = getSelectRows(); | |
109 | - if (selectedRowKeys.length !== 0) { | |
110 | - disabled.value = false; | |
111 | - } else { | |
112 | - disabled.value = true; | |
129 | + setSelectedRowKeys([]); | |
130 | + resetSelectedRowKeys(); | |
131 | + const newStatus = checked ? 1 : 0; | |
132 | + const { createMessage } = useMessage(); | |
133 | + try { | |
134 | + await setRoleStatus(record.id, newStatus); | |
135 | + if (newStatus) { | |
136 | + createMessage.success(`启用成功`); | |
137 | + } else { | |
138 | + createMessage.success('禁用成功'); | |
139 | + } | |
140 | + } finally { | |
141 | + setProps({ | |
142 | + loading: false, | |
143 | + }); | |
144 | + reload(); | |
113 | 145 | } |
114 | 146 | }; |
115 | - const handleBatchDelete = async () => { | |
116 | - disabled.value = true; | |
117 | - let roleIds = selectedRowKeys.map((m: any) => { | |
118 | - return m.id; | |
119 | - }); | |
120 | - await delRole(roleIds); | |
121 | - createMessage.success('批量删除成功'); | |
122 | - reload(); | |
123 | - setTimeout(() => { | |
124 | - disabled.value = false; | |
125 | - }, 3000); | |
126 | - }; | |
127 | - function handleSuccess() { | |
128 | - reload(); | |
129 | - } | |
130 | 147 | |
131 | 148 | return { |
132 | - disabled, | |
133 | - useSelectionChange, | |
134 | - handleBatchDelete, | |
149 | + statusChange, | |
135 | 150 | registerTable, |
136 | 151 | registerDrawer, |
137 | 152 | handleCreate, |
138 | 153 | handleEdit, |
139 | - handleDelete, | |
140 | 154 | handleSuccess, |
141 | 155 | RoleEnum, |
156 | + hasBatchDelete, | |
157 | + handleDeleteOrBatchDelete, | |
142 | 158 | }; |
143 | 159 | }, |
144 | 160 | }); | ... | ... |
1 | 1 | import { BasicColumn } from '/@/components/Table'; |
2 | 2 | import { FormSchema } from '/@/components/Table'; |
3 | -import { h } from 'vue'; | |
4 | -import { Switch } from 'ant-design-vue'; | |
5 | -import { setRoleStatus } from '/@/api/system/system'; | |
6 | -import { useMessage } from '/@/hooks/web/useMessage'; | |
7 | 3 | import { RoleEnum } from '/@/enums/roleEnum'; |
8 | 4 | export const columns: BasicColumn[] = [ |
9 | 5 | { |
... | ... | @@ -20,35 +16,8 @@ export const columns: BasicColumn[] = [ |
20 | 16 | title: '状态', |
21 | 17 | dataIndex: 'status', |
22 | 18 | width: 120, |
23 | - customRender: ({ record }) => { | |
24 | - if (!Reflect.has(record, 'pendingStatus')) { | |
25 | - record.pendingStatus = false; | |
26 | - } | |
27 | - return h(Switch, { | |
28 | - checked: record.status === 1, | |
29 | - checkedChildren: '已启用', | |
30 | - unCheckedChildren: '已禁用', | |
31 | - loading: record.pendingStatus, | |
32 | - onChange(checked: boolean) { | |
33 | - record.pendingStatus = true; | |
34 | - const newStatus = checked ? 1 : 0; | |
35 | - const { createMessage } = useMessage(); | |
36 | - setRoleStatus(record.id, newStatus) | |
37 | - .then(() => { | |
38 | - record.status = newStatus; | |
39 | - createMessage.success(`已成功修改角色状态`); | |
40 | - }) | |
41 | - .catch(() => { | |
42 | - createMessage.error('修改角色状态失败'); | |
43 | - }) | |
44 | - .finally(() => { | |
45 | - record.pendingStatus = false; | |
46 | - }); | |
47 | - }, | |
48 | - }); | |
49 | - }, | |
19 | + slots: { customRender: 'status' }, | |
50 | 20 | }, |
51 | - | |
52 | 21 | { |
53 | 22 | title: '备注', |
54 | 23 | dataIndex: 'remark', | ... | ... |