| 
1
 | 
1
 | 
 <template>
 | 
| 
2
 | 
2
 | 
   <div>
 | 
| 
3
 | 
 
 | 
-    <BasicTable @register="registerTable">
 | 
| 
 
 | 
3
 | 
+    <BasicTable
 | 
| 
 
 | 
4
 | 
+      :rowSelection="{ type: 'checkbox' }"
 | 
| 
 
 | 
5
 | 
+      @selection-change="useSelectionChange"
 | 
| 
 
 | 
6
 | 
+      @register="registerTable"
 | 
| 
 
 | 
7
 | 
+    >
 | 
| 
4
 | 
8
 | 
       <template #toolbar>
 | 
| 
5
 | 
9
 | 
         <a-button type="primary" @click="handleCreate">新增角色</a-button>
 | 
| 
6
 | 
 
 | 
-        <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">
 | 
| 
 
 | 
10
 | 
+        <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="isStatus">
 | 
| 
7
 | 
11
 | 
           批量删除
 | 
| 
8
 | 
12
 | 
         </a-button>
 | 
| 
9
 | 
13
 | 
       </template>
 | 
| 
...
 | 
...
 | 
@@ -33,24 +37,25 @@ | 
| 
33
 | 
37
 | 
   </div>
 | 
| 
34
 | 
38
 | 
 </template>
 | 
| 
35
 | 
39
 | 
 <script lang="ts">
 | 
| 
36
 | 
 
 | 
-  import { defineComponent } from 'vue';
 | 
| 
 
 | 
40
 | 
+  import { defineComponent, ref } from 'vue';
 | 
| 
37
 | 
41
 | 
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
 | 
| 
38
 | 
42
 | 
   import { delRole, getRoleListByPage } from '/@/api/system/system';
 | 
| 
39
 | 
43
 | 
   import { useDrawer } from '/@/components/Drawer';
 | 
| 
40
 | 
44
 | 
   import RoleDrawer from './RoleDrawer.vue';
 | 
| 
41
 | 
45
 | 
   import { columns, searchFormSchema } from './role.data';
 | 
| 
42
 | 
46
 | 
   import { RoleEnum } from '/@/enums/roleEnum';
 | 
| 
43
 | 
 
 | 
-  import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
 | 
| 
 
 | 
47
 | 
+  import { useMessage } from '/@/hooks/web/useMessage';
 | 
| 
 
 | 
48
 | 
+
 | 
| 
44
 | 
49
 | 
   export default defineComponent({
 | 
| 
45
 | 
50
 | 
     name: 'RoleManagement',
 | 
| 
46
 | 
51
 | 
     components: { BasicTable, RoleDrawer, TableAction },
 | 
| 
47
 | 
52
 | 
     setup() {
 | 
| 
 
 | 
53
 | 
+      const { createMessage } = useMessage();
 | 
| 
48
 | 
54
 | 
       const [registerDrawer, { openDrawer }] = useDrawer();
 | 
| 
49
 | 
 
 | 
-      const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions } = useBatchDelete(
 | 
| 
50
 | 
 
 | 
-        delRole,
 | 
| 
51
 | 
 
 | 
-        handleSuccess
 | 
| 
52
 | 
 
 | 
-      );
 | 
| 
53
 | 
 
 | 
-      const [registerTable, { reload }] = useTable({
 | 
| 
 
 | 
55
 | 
+      const isStatus = ref(true);
 | 
| 
 
 | 
56
 | 
+      let selectArray: any = [];
 | 
| 
 
 | 
57
 | 
+
 | 
| 
 
 | 
58
 | 
+      const [registerTable, { reload, getSelectRows }] = useTable({
 | 
| 
54
 | 
59
 | 
         title: '角色列表',
 | 
| 
55
 | 
60
 | 
         api: getRoleListByPage,
 | 
| 
56
 | 
61
 | 
         columns,
 | 
| 
...
 | 
...
 | 
@@ -69,7 +74,6 @@ | 
| 
69
 | 
74
 | 
           slots: { customRender: 'action' },
 | 
| 
70
 | 
75
 | 
           fixed: 'right',
 | 
| 
71
 | 
76
 | 
         },
 | 
| 
72
 | 
 
 | 
-        ...selectionOptions,
 | 
| 
73
 | 
77
 | 
       });
 | 
| 
74
 | 
78
 | 
 
 | 
| 
75
 | 
79
 | 
       function handleCreate() {
 | 
| 
...
 | 
...
 | 
@@ -88,6 +92,41 @@ | 
| 
88
 | 
92
 | 
         reload();
 | 
| 
89
 | 
93
 | 
       }
 | 
| 
90
 | 
94
 | 
 
 | 
| 
 
 | 
95
 | 
+      const useSelectionChange = () => {
 | 
| 
 
 | 
96
 | 
+        let getRows = getSelectRows();
 | 
| 
 
 | 
97
 | 
+        const isJudge = getRows.map((m) => m.roleType);
 | 
| 
 
 | 
98
 | 
+        if (isJudge.includes('SYS_ADMIN')) {
 | 
| 
 
 | 
99
 | 
+          isStatus.value = true;
 | 
| 
 
 | 
100
 | 
+        } else {
 | 
| 
 
 | 
101
 | 
+          isStatus.value = false;
 | 
| 
 
 | 
102
 | 
+        }
 | 
| 
 
 | 
103
 | 
+        if (isJudge.length === 0) {
 | 
| 
 
 | 
104
 | 
+          isStatus.value = true;
 | 
| 
 
 | 
105
 | 
+        }
 | 
| 
 
 | 
106
 | 
+        selectArray = getRows.filter((f) => f.status !== 'SYS_ADMIN').map((m) => m.id);
 | 
| 
 
 | 
107
 | 
+      };
 | 
| 
 
 | 
108
 | 
+
 | 
| 
 
 | 
109
 | 
+      const handleDeleteOrBatchDelete = async (record: Recordable | null) => {
 | 
| 
 
 | 
110
 | 
+        if (record) {
 | 
| 
 
 | 
111
 | 
+          try {
 | 
| 
 
 | 
112
 | 
+            await delRole([record.id]);
 | 
| 
 
 | 
113
 | 
+            createMessage.success('删除成功');
 | 
| 
 
 | 
114
 | 
+            handleSuccess();
 | 
| 
 
 | 
115
 | 
+          } catch (e: any) {}
 | 
| 
 
 | 
116
 | 
+        } else {
 | 
| 
 
 | 
117
 | 
+          try {
 | 
| 
 
 | 
118
 | 
+            await delRole(selectArray);
 | 
| 
 
 | 
119
 | 
+            createMessage.success('批量删除成功');
 | 
| 
 
 | 
120
 | 
+            handleSuccess();
 | 
| 
 
 | 
121
 | 
+            selectArray.length = 0;
 | 
| 
 
 | 
122
 | 
+          } catch (e: any) {
 | 
| 
 
 | 
123
 | 
+            selectArray.length = 0;
 | 
| 
 
 | 
124
 | 
+          } finally {
 | 
| 
 
 | 
125
 | 
+            selectArray.length = 0;
 | 
| 
 
 | 
126
 | 
+          }
 | 
| 
 
 | 
127
 | 
+        }
 | 
| 
 
 | 
128
 | 
+      };
 | 
| 
 
 | 
129
 | 
+
 | 
| 
91
 | 
130
 | 
       return {
 | 
| 
92
 | 
131
 | 
         registerTable,
 | 
| 
93
 | 
132
 | 
         registerDrawer,
 | 
| 
...
 | 
...
 | 
@@ -95,8 +134,9 @@ | 
| 
95
 | 
134
 | 
         handleEdit,
 | 
| 
96
 | 
135
 | 
         handleSuccess,
 | 
| 
97
 | 
136
 | 
         RoleEnum,
 | 
| 
98
 | 
 
 | 
-        hasBatchDelete,
 | 
| 
99
 | 
137
 | 
         handleDeleteOrBatchDelete,
 | 
| 
 
 | 
138
 | 
+        isStatus,
 | 
| 
 
 | 
139
 | 
+        useSelectionChange,
 | 
| 
100
 | 
140
 | 
       };
 | 
| 
101
 | 
141
 | 
     },
 | 
| 
102
 | 
142
 | 
   });
 | 
...
 | 
...
 | 
 |