Commit 4ccbc17627ee4a744417fb4f1147dc83596a3b88

Authored by xp.Huang
2 parents 389dfc62 67be7039

Merge branch 'dev-ft' into 'main'

fix:解决告警和字典管理冲突合并main分支,fix:修改所有子页面按钮权限

See merge request huang/yun-teng-iot-front!207
@@ -14,14 +14,19 @@ enum Api { @@ -14,14 +14,19 @@ enum Api {
14 * @description: Get user menu based on id 14 * @description: Get user menu based on id
15 */ 15 */
16 16
17 -export const getMenuList = () => { 17 +export const getMenuList = (args) => {
18 const userStore = useUserStore(); 18 const userStore = useUserStore();
19 let url = Api.GetMenuList; 19 let url = Api.GetMenuList;
20 try { 20 try {
21 if (userStore.getRoleList.find((v) => v == RoleEnum.SYS_ADMIN)) { 21 if (userStore.getRoleList.find((v) => v == RoleEnum.SYS_ADMIN)) {
22 url = Api.SysAdminMenuList; 22 url = Api.SysAdminMenuList;
23 } 23 }
24 - return defHttp.get<getMenuListResultModel>({ url }); 24 + return defHttp.get<getMenuListResultModel>({
  25 + url,
  26 + params: {
  27 + needButton: args == 1 ? false : null,
  28 + },
  29 + });
25 } catch (e) {} 30 } catch (e) {}
26 }; 31 };
27 32
@@ -230,7 +230,7 @@ export const usePermissionStore = defineStore({ @@ -230,7 +230,7 @@ export const usePermissionStore = defineStore({
230 ] as AppRouteRecordRaw[]; 230 ] as AppRouteRecordRaw[];
231 } else { 231 } else {
232 this.changePermissionCode(); 232 this.changePermissionCode();
233 - routeList = (await getMenuList()) as AppRouteRecordRaw[]; 233 + routeList = (await getMenuList(1)) as AppRouteRecordRaw[];
234 createStorage('MENU_LIST', JSON.stringify(routeList)); 234 createStorage('MENU_LIST', JSON.stringify(routeList));
235 setAuthCache('MENU_LIST', routeList); 235 setAuthCache('MENU_LIST', routeList);
236 } 236 }
@@ -13,15 +13,19 @@ @@ -13,15 +13,19 @@
13 :clickToRowSelect="false" 13 :clickToRowSelect="false"
14 > 14 >
15 <template #toolbar> 15 <template #toolbar>
16 - <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增告警配置 </a-button>  
17 - <a-button  
18 - type="primary"  
19 - color="error"  
20 - @click="handleDeleteOrBatchDelete(null)"  
21 - :disabled="hasBatchDelete"  
22 - >  
23 - 批量删除  
24 - </a-button> 16 + <Authority value="api:yt:admin:addAlarmConfig">
  17 + <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增告警配置 </a-button>
  18 + </Authority>
  19 + <Authority value="api:yt:admin:deleteAlarmConfig">
  20 + <a-button
  21 + type="primary"
  22 + color="error"
  23 + @click="handleDeleteOrBatchDelete(null)"
  24 + :disabled="hasBatchDelete"
  25 + >
  26 + 批量删除
  27 + </a-button>
  28 + </Authority>
25 </template> 29 </template>
26 <template #alarmContact="{ record }"> 30 <template #alarmContact="{ record }">
27 <a-button type="link" class="ml-2" @click="showAlarmContact(record)"> 31 <a-button type="link" class="ml-2" @click="showAlarmContact(record)">
@@ -47,6 +51,7 @@ @@ -47,6 +51,7 @@
47 :actions="[ 51 :actions="[
48 { 52 {
49 label: '编辑', 53 label: '编辑',
  54 + auth: 'api:yt:admin:editAlarmConfig',
50 icon: 'clarity:note-edit-line', 55 icon: 'clarity:note-edit-line',
51 onClick: handleCreateOrEdit.bind(null, record), 56 onClick: handleCreateOrEdit.bind(null, record),
52 ifShow: () => { 57 ifShow: () => {
@@ -55,6 +60,7 @@ @@ -55,6 +60,7 @@
55 }, 60 },
56 { 61 {
57 label: '删除', 62 label: '删除',
  63 + auth: 'api:yt:admin:deleteAlarmConfig',
58 icon: 'ant-design:delete-outlined', 64 icon: 'ant-design:delete-outlined',
59 color: 'error', 65 color: 'error',
60 ifShow: () => { 66 ifShow: () => {
@@ -91,6 +97,7 @@ @@ -91,6 +97,7 @@
91 import { Switch } from 'ant-design-vue'; 97 import { Switch } from 'ant-design-vue';
92 import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig'; 98 import { putAlarmConfigStatus } from '/@/api/alarm/config/alarmConfig';
93 import { useMessage } from '/@/hooks/web/useMessage'; 99 import { useMessage } from '/@/hooks/web/useMessage';
  100 + import { Authority } from '/@/components/Authority';
94 101
95 export default defineComponent({ 102 export default defineComponent({
96 components: { 103 components: {
@@ -100,6 +107,7 @@ @@ -100,6 +107,7 @@
100 TableAction, 107 TableAction,
101 ContactDrawer, 108 ContactDrawer,
102 Switch, 109 Switch,
  110 + Authority,
103 }, 111 },
104 setup() { 112 setup() {
105 const searchInfo = reactive<Recordable>({}); 113 const searchInfo = reactive<Recordable>({});
@@ -8,26 +8,32 @@ @@ -8,26 +8,32 @@
8 /> 8 />
9 <BasicTable @register="registerTable" :searchInfo="searchInfo" class="w-3/4 xl:w-4/5"> 9 <BasicTable @register="registerTable" :searchInfo="searchInfo" class="w-3/4 xl:w-4/5">
10 <template #toolbar> 10 <template #toolbar>
11 - <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增告警联系人 </a-button>  
12 - <a-button  
13 - type="primary"  
14 - color="error"  
15 - @click="handleDeleteOrBatchDelete(null)"  
16 - :disabled="hasBatchDelete"  
17 - >  
18 - 批量删除  
19 - </a-button> 11 + <Authority value="api:yt:admin:addAlarmContact">
  12 + <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增告警联系人 </a-button>
  13 + </Authority>
  14 + <Authority value="api:yt:admin:deleteAlarmContact">
  15 + <a-button
  16 + type="primary"
  17 + color="error"
  18 + @click="handleDeleteOrBatchDelete(null)"
  19 + :disabled="hasBatchDelete"
  20 + >
  21 + 批量删除
  22 + </a-button>
  23 + </Authority>
20 </template> 24 </template>
21 <template #action="{ record }"> 25 <template #action="{ record }">
22 <TableAction 26 <TableAction
23 :actions="[ 27 :actions="[
24 { 28 {
25 label: '编辑', 29 label: '编辑',
  30 + auth: 'api:yt:admin:editAlarmContact',
26 icon: 'clarity:note-edit-line', 31 icon: 'clarity:note-edit-line',
27 onClick: handleCreateOrEdit.bind(null, record), 32 onClick: handleCreateOrEdit.bind(null, record),
28 }, 33 },
29 { 34 {
30 label: '删除', 35 label: '删除',
  36 + auth: 'api:yt:admin:deleteAlarmContact',
31 icon: 'ant-design:delete-outlined', 37 icon: 'ant-design:delete-outlined',
32 color: 'error', 38 color: 'error',
33 popConfirm: { 39 popConfirm: {
@@ -55,6 +61,8 @@ @@ -55,6 +61,8 @@
55 61
56 import { getAlarmContact, deleteAlarmContact } from '/@/api/alarm/contact/alarmContact'; 62 import { getAlarmContact, deleteAlarmContact } from '/@/api/alarm/contact/alarmContact';
57 import { searchFormSchema, columns } from './config.data'; 63 import { searchFormSchema, columns } from './config.data';
  64 + import { Authority } from '/@/components/Authority';
  65 +
58 export default defineComponent({ 66 export default defineComponent({
59 components: { 67 components: {
60 PageWrapper, 68 PageWrapper,
@@ -62,6 +70,7 @@ @@ -62,6 +70,7 @@
62 BasicTable, 70 BasicTable,
63 TableAction, 71 TableAction,
64 ContactDrawer, 72 ContactDrawer,
  73 + Authority,
65 }, 74 },
66 setup() { 75 setup() {
67 const searchInfo = reactive<Recordable>({}); 76 const searchInfo = reactive<Recordable>({});
@@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
50 ...data, 50 ...data,
51 severity: alarmLevel(data.severity), 51 severity: alarmLevel(data.severity),
52 status: statusType(data.status), 52 status: statusType(data.status),
  53 + details: JSON.stringify(data.details),
53 }); 54 });
54 alarmStatus.value = data.status; 55 alarmStatus.value = data.status;
55 alarmId.value = data.id; 56 alarmId.value = data.id;
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 :actions="[ 6 :actions="[
7 { 7 {
8 label: '详情', 8 label: '详情',
  9 + auth: 'api:yt:admin:viewAlarmLog',
9 icon: 'ant-design:eye-outlined', 10 icon: 'ant-design:eye-outlined',
10 onClick: handleDetail.bind(null, record), 11 onClick: handleDetail.bind(null, record),
11 }, 12 },
src/views/camera/manage/CameraDrawer.vue renamed from src/views/camera/manage/ContactDrawer.vue
@@ -13,15 +13,19 @@ @@ -13,15 +13,19 @@
13 class="w-3/4 xl:w-4/5" 13 class="w-3/4 xl:w-4/5"
14 > 14 >
15 <template #toolbar> 15 <template #toolbar>
16 - <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增视频 </a-button>  
17 - <a-button  
18 - type="primary"  
19 - color="error"  
20 - @click="handleDeleteOrBatchDelete(null)"  
21 - :disabled="hasBatchDelete"  
22 - >  
23 - 批量删除  
24 - </a-button> 16 + <Authority value="api:yt:admin:addCamera">
  17 + <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增视频 </a-button>
  18 + </Authority>
  19 + <Authority value="api:yt:admin:deleteCamera">
  20 + <a-button
  21 + type="primary"
  22 + color="error"
  23 + @click="handleDeleteOrBatchDelete(null)"
  24 + :disabled="hasBatchDelete"
  25 + >
  26 + 批量删除
  27 + </a-button>
  28 + </Authority>
25 </template> 29 </template>
26 <template #img="{ record }"> 30 <template #img="{ record }">
27 <TableImg 31 <TableImg
@@ -41,15 +45,18 @@ @@ -41,15 +45,18 @@
41 { 45 {
42 label: '预览', 46 label: '预览',
43 icon: 'clarity:note-edit-line', 47 icon: 'clarity:note-edit-line',
  48 + auth: 'api:yt:admin:viewCamera',
44 onClick: handleViewVideo.bind(null, record), 49 onClick: handleViewVideo.bind(null, record),
45 }, 50 },
46 { 51 {
47 label: '编辑', 52 label: '编辑',
  53 + auth: 'api:yt:admin:editCamera',
48 icon: 'clarity:note-edit-line', 54 icon: 'clarity:note-edit-line',
49 onClick: handleCreateOrEdit.bind(null, record), 55 onClick: handleCreateOrEdit.bind(null, record),
50 }, 56 },
51 { 57 {
52 label: '删除', 58 label: '删除',
  59 + auth: 'api:yt:admin:deleteCamera',
53 icon: 'ant-design:delete-outlined', 60 icon: 'ant-design:delete-outlined',
54 color: 'error', 61 color: 'error',
55 popConfirm: { 62 popConfirm: {
@@ -62,7 +69,7 @@ @@ -62,7 +69,7 @@
62 </template> 69 </template>
63 </BasicTable> 70 </BasicTable>
64 </PageWrapper> 71 </PageWrapper>
65 - <ContactDrawer @register="registerDrawer" @success="handleSuccess" /> 72 + <CameraDrawer @register="registerDrawer" @success="handleSuccess" />
66 <VideoPreviewModal @register="registerModal" /> 73 <VideoPreviewModal @register="registerModal" />
67 </div> 74 </div>
68 </template> 75 </template>
@@ -73,12 +80,13 @@ @@ -73,12 +80,13 @@
73 import { PageWrapper } from '/@/components/Page'; 80 import { PageWrapper } from '/@/components/Page';
74 import { useMessage } from '/@/hooks/web/useMessage'; 81 import { useMessage } from '/@/hooks/web/useMessage';
75 import { useDrawer } from '/@/components/Drawer'; 82 import { useDrawer } from '/@/components/Drawer';
76 - import ContactDrawer from './ContactDrawer.vue'; 83 + import CameraDrawer from './CameraDrawer.vue';
77 import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree'; 84 import { useResetOrganizationTree, OrganizationIdTree } from '/@/views/common/organizationIdTree';
78 import { cameraPage, deleteCameraManage } from '/@/api/camera/cameraManager'; 85 import { cameraPage, deleteCameraManage } from '/@/api/camera/cameraManager';
79 import { searchFormSchema, columns } from './config.data'; 86 import { searchFormSchema, columns } from './config.data';
80 import VideoPreviewModal from './DialogPreviewVideo.vue'; 87 import VideoPreviewModal from './DialogPreviewVideo.vue';
81 import { useModal } from '/@/components/Modal'; 88 import { useModal } from '/@/components/Modal';
  89 + import { Authority } from '/@/components/Authority';
82 90
83 export default defineComponent({ 91 export default defineComponent({
84 components: { 92 components: {
@@ -86,16 +94,22 @@ @@ -86,16 +94,22 @@
86 OrganizationIdTree, 94 OrganizationIdTree,
87 BasicTable, 95 BasicTable,
88 TableAction, 96 TableAction,
89 - ContactDrawer, 97 + CameraDrawer,
90 VideoPreviewModal, 98 VideoPreviewModal,
91 TableImg, 99 TableImg,
  100 + Authority,
92 }, 101 },
93 setup() { 102 setup() {
94 let selectedRowIds = ref<string[]>([]); 103 let selectedRowIds = ref<string[]>([]);
95 - const hasBatchDelete = computed(() => selectedRowIds.value.length <= 0); 104 + const hasBatchDelete = ref(true);
96 // 复选框事件 105 // 复选框事件
97 const onSelectRowChange = (selectedRowKeys: string[]) => { 106 const onSelectRowChange = (selectedRowKeys: string[]) => {
98 selectedRowIds.value = selectedRowKeys; 107 selectedRowIds.value = selectedRowKeys;
  108 + if (selectedRowIds.value.length > 0) {
  109 + hasBatchDelete.value = false;
  110 + } else {
  111 + hasBatchDelete.value = true;
  112 + }
99 }; 113 };
100 const searchInfo = reactive<Recordable>({}); 114 const searchInfo = reactive<Recordable>({});
101 const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); 115 const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo);
@@ -158,11 +172,15 @@ @@ -158,11 +172,15 @@
158 handleSuccess(); 172 handleSuccess();
159 } catch (e) {} 173 } catch (e) {}
160 } else { 174 } else {
  175 + hasBatchDelete.value = true;
161 try { 176 try {
162 await deleteCameraManage(selectedRowIds.value); 177 await deleteCameraManage(selectedRowIds.value);
163 createMessage.success('批量删除视频成功'); 178 createMessage.success('批量删除视频成功');
164 selectedRowIds.value = []; 179 selectedRowIds.value = [];
165 handleSuccess(); 180 handleSuccess();
  181 + setTimeout(() => {
  182 + hasBatchDelete.value = false;
  183 + }, 3000);
166 } catch (e) {} 184 } catch (e) {}
167 } 185 }
168 }; 186 };
@@ -13,36 +13,44 @@ @@ -13,36 +13,44 @@
13 class="w-3/4 xl:w-4/5" 13 class="w-3/4 xl:w-4/5"
14 > 14 >
15 <template #toolbar> 15 <template #toolbar>
16 - <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增组态中心 </a-button>  
17 - <a-button  
18 - type="primary"  
19 - color="error"  
20 - @click="handleDeleteOrBatchDelete(null)"  
21 - :disabled="hasBatchDelete"  
22 - >  
23 - 批量删除  
24 - </a-button> 16 + <Authority value="api:yt:admin:addConfiguration">
  17 + <a-button type="primary" @click="handleCreateOrEdit(null)"> 新增组态中心 </a-button>
  18 + </Authority>
  19 + <Authority value="api:yt:admin:deleteConfiguration">
  20 + <a-button
  21 + type="primary"
  22 + color="error"
  23 + @click="handleDeleteOrBatchDelete(null)"
  24 + :disabled="hasBatchDelete"
  25 + >
  26 + 批量删除
  27 + </a-button>
  28 + </Authority>
25 </template> 29 </template>
26 <template #action="{ record }"> 30 <template #action="{ record }">
27 <TableAction 31 <TableAction
28 :actions="[ 32 :actions="[
29 { 33 {
30 label: '设计', 34 label: '设计',
  35 + auth: 'api:yt:admin:designConfiguration',
31 icon: 'clarity:note-edit-line', 36 icon: 'clarity:note-edit-line',
32 onClick: handleDesign.bind(null, record), 37 onClick: handleDesign.bind(null, record),
33 }, 38 },
34 { 39 {
35 label: '预览', 40 label: '预览',
  41 + auth: 'api:yt:admin:viewConfiguration',
36 icon: 'ant-design:eye-outlined', 42 icon: 'ant-design:eye-outlined',
37 onClick: handlePreview.bind(null, record), 43 onClick: handlePreview.bind(null, record),
38 }, 44 },
39 { 45 {
40 label: '编辑', 46 label: '编辑',
  47 + auth: 'api:yt:admin:editConfiguration',
41 icon: 'clarity:note-edit-line', 48 icon: 'clarity:note-edit-line',
42 onClick: handleCreateOrEdit.bind(null, record), 49 onClick: handleCreateOrEdit.bind(null, record),
43 }, 50 },
44 { 51 {
45 label: '删除', 52 label: '删除',
  53 + auth: 'api:yt:admin:deleteConfiguration',
46 icon: 'ant-design:delete-outlined', 54 icon: 'ant-design:delete-outlined',
47 color: 'error', 55 color: 'error',
48 popConfirm: { 56 popConfirm: {
@@ -74,6 +82,8 @@ @@ -74,6 +82,8 @@
74 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 82 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
75 83
76 import { getAppEnvConfig } from '/@/utils/env'; 84 import { getAppEnvConfig } from '/@/utils/env';
  85 + import { Authority } from '/@/components/Authority';
  86 +
77 export default defineComponent({ 87 export default defineComponent({
78 components: { 88 components: {
79 PageWrapper, 89 PageWrapper,
@@ -81,6 +91,7 @@ @@ -81,6 +91,7 @@
81 BasicTable, 91 BasicTable,
82 TableAction, 92 TableAction,
83 ContactDrawer, 93 ContactDrawer,
  94 + Authority,
84 }, 95 },
85 setup() { 96 setup() {
86 const { VITE_GLOB_CONFIGURATION } = getAppEnvConfig(); 97 const { VITE_GLOB_CONFIGURATION } = getAppEnvConfig();
@@ -8,15 +8,21 @@ @@ -8,15 +8,21 @@
8 /> 8 />
9 <BasicTable @register="registerTable" class="w-5/6 xl:w-4/5"> 9 <BasicTable @register="registerTable" class="w-5/6 xl:w-4/5">
10 <template #toolbar> 10 <template #toolbar>
11 - <a-button type="primary" @click="handleCreate" v-if="authBtn(role)"> 新增设备 </a-button>  
12 - <a-button  
13 - color="error"  
14 - v-if="authBtn(role)"  
15 - @click="handleDeleteOrBatchDelete(null)"  
16 - :disabled="hasBatchDelete"  
17 - >  
18 - 批量删除  
19 - </a-button> 11 + <Authority value="api:yt:admin:addDeviceList">
  12 + <a-button type="primary" @click="handleCreate" v-if="authBtn(role)">
  13 + 新增设备
  14 + </a-button>
  15 + </Authority>
  16 + <Authority value="api:yt:admin:deleteDeviceList">
  17 + <a-button
  18 + color="error"
  19 + v-if="authBtn(role)"
  20 + @click="handleDeleteOrBatchDelete(null)"
  21 + :disabled="hasBatchDelete"
  22 + >
  23 + 批量删除
  24 + </a-button>
  25 + </Authority>
20 </template> 26 </template>
21 <template #img="{ record }"> 27 <template #img="{ record }">
22 <TableImg 28 <TableImg
@@ -117,16 +123,19 @@ @@ -117,16 +123,19 @@
117 { 123 {
118 label: '详情', 124 label: '详情',
119 icon: 'ant-design:eye-outlined', 125 icon: 'ant-design:eye-outlined',
  126 + auth: 'api:yt:admin:viewDeviceList',
120 onClick: handleDetail.bind(null, record), 127 onClick: handleDetail.bind(null, record),
121 }, 128 },
122 { 129 {
123 label: '编辑', 130 label: '编辑',
  131 + auth: 'api:yt:admin:editDeviceList',
124 icon: 'clarity:note-edit-line', 132 icon: 'clarity:note-edit-line',
125 ifShow: authBtn(role) && record.customerId === undefined, 133 ifShow: authBtn(role) && record.customerId === undefined,
126 onClick: handleEdit.bind(null, record), 134 onClick: handleEdit.bind(null, record),
127 }, 135 },
128 { 136 {
129 label: '删除', 137 label: '删除',
  138 + auth: 'api:yt:admin:deleteDeviceList',
130 icon: 'ant-design:delete-outlined', 139 icon: 'ant-design:delete-outlined',
131 ifShow: authBtn(role) && record.customerId === undefined, 140 ifShow: authBtn(role) && record.customerId === undefined,
132 color: 'error', 141 color: 'error',
@@ -173,6 +182,8 @@ @@ -173,6 +182,8 @@
173 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 182 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
174 import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; 183 import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
175 import { QuestionCircleOutlined } from '@ant-design/icons-vue'; 184 import { QuestionCircleOutlined } from '@ant-design/icons-vue';
  185 + import { Authority } from '/@/components/Authority';
  186 +
176 export default defineComponent({ 187 export default defineComponent({
177 name: 'DeviceManagement', 188 name: 'DeviceManagement',
178 components: { 189 components: {
@@ -188,6 +199,7 @@ @@ -188,6 +199,7 @@
188 Tooltip, 199 Tooltip,
189 QuestionCircleOutlined, 200 QuestionCircleOutlined,
190 Popover, 201 Popover,
  202 + Authority,
191 }, 203 },
192 setup(_) { 204 setup(_) {
193 const { createMessage } = useMessage(); 205 const { createMessage } = useMessage();
@@ -8,13 +8,17 @@ @@ -8,13 +8,17 @@
8 :clickToRowSelect="false" 8 :clickToRowSelect="false"
9 > 9 >
10 <template #toolbar> 10 <template #toolbar>
11 - <a-button type="primary" @click="handleCreate"> 新增设备配置 </a-button> 11 + <Authority value="api:yt:admin:addDeviceConfig">
  12 + <a-button type="primary" @click="handleCreate"> 新增设备配置 </a-button>
  13 + </Authority>
12 <ImpExcel @success="loadDataSuccess" dateFormat="YYYY-MM-DD"> 14 <ImpExcel @success="loadDataSuccess" dateFormat="YYYY-MM-DD">
13 <a-button disabled @click="handleImport"> 导入设备配置 </a-button> 15 <a-button disabled @click="handleImport"> 导入设备配置 </a-button>
14 </ImpExcel> 16 </ImpExcel>
15 - <a-button danger color="error" @click="handleTableDel" :disabled="disabled">  
16 - 批量删除  
17 - </a-button> 17 + <Authority value="api:yt:admin:deleteDeviceConfig">
  18 + <a-button danger color="error" @click="handleTableDel" :disabled="disabled">
  19 + 批量删除
  20 + </a-button>
  21 + </Authority>
18 </template> 22 </template>
19 <template #img="{ record }"> 23 <template #img="{ record }">
20 <TableImg 24 <TableImg
@@ -41,11 +45,13 @@ @@ -41,11 +45,13 @@
41 }, 45 },
42 { 46 {
43 label: '详情', 47 label: '详情',
  48 + auth: 'api:yt:admin:viewDeviceConfig',
44 icon: 'ant-design:eye-outlined', 49 icon: 'ant-design:eye-outlined',
45 onClick: handleDetailView.bind(null, record), 50 onClick: handleDetailView.bind(null, record),
46 }, 51 },
47 { 52 {
48 label: '编辑', 53 label: '编辑',
  54 + auth: 'api:yt:admin:editDeviceConfig',
49 icon: 'clarity:note-edit-line', 55 icon: 'clarity:note-edit-line',
50 onClick: handleEdit.bind(null, record), 56 onClick: handleEdit.bind(null, record),
51 }, 57 },
@@ -56,6 +62,7 @@ @@ -56,6 +62,7 @@
56 }, 62 },
57 { 63 {
58 label: '删除', 64 label: '删除',
  65 + auth: 'api:yt:admin:deleteDeviceConfig',
59 icon: 'ant-design:delete-outlined', 66 icon: 'ant-design:delete-outlined',
60 color: 'error', 67 color: 'error',
61 popConfirm: { 68 popConfirm: {
@@ -88,10 +95,11 @@ @@ -88,10 +95,11 @@
88 import DeviceProfileModal from '/@/views/device/profiles/DeviceProfileModal.vue'; 95 import DeviceProfileModal from '/@/views/device/profiles/DeviceProfileModal.vue';
89 import { ImpExcel, ExcelData } from '/@/components/Excel'; 96 import { ImpExcel, ExcelData } from '/@/components/Excel';
90 // import { jsonToSheetXlsx, ExportModalResult } from '/@/components/Excel'; 97 // import { jsonToSheetXlsx, ExportModalResult } from '/@/components/Excel';
  98 + import { Authority } from '/@/components/Authority';
91 99
92 export default defineComponent({ 100 export default defineComponent({
93 name: 'DeviceProfileManagement', 101 name: 'DeviceProfileManagement',
94 - components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel, TableImg }, 102 + components: { BasicTable, DeviceProfileModal, TableAction, ImpExcel, TableImg, Authority },
95 setup() { 103 setup() {
96 let selectedRowKeys: any = []; 104 let selectedRowKeys: any = [];
97 const deviceDetailRef = ref(null); 105 const deviceDetailRef = ref(null);
@@ -244,14 +252,21 @@ @@ -244,14 +252,21 @@
244 } 252 }
245 }; 253 };
246 const handleTableDel = () => { 254 const handleTableDel = () => {
  255 + disabled.value = true;
247 deviceConfigDelete(selectedRowKeys) 256 deviceConfigDelete(selectedRowKeys)
248 .then(() => { 257 .then(() => {
249 createMessage.success('删除设备配置成功'); 258 createMessage.success('删除设备配置成功');
250 handleSuccess(); 259 handleSuccess();
  260 + setTimeout(() => {
  261 + disabled.value = false;
  262 + }, 3000);
251 selectedRowKeys.length = 0; 263 selectedRowKeys.length = 0;
252 }) 264 })
253 .catch((e) => { 265 .catch((e) => {
254 selectedRowKeys.length = 0; 266 selectedRowKeys.length = 0;
  267 + setTimeout(() => {
  268 + disabled.value = false;
  269 + }, 3000);
255 createMessage.error(e); 270 createMessage.error(e);
256 }); 271 });
257 selectedRowKeys.length = 0; 272 selectedRowKeys.length = 0;
@@ -2,10 +2,18 @@ @@ -2,10 +2,18 @@
2 <div> 2 <div>
3 <BasicTable @register="registerTable" :clickToRowSelect="false"> 3 <BasicTable @register="registerTable" :clickToRowSelect="false">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate"> 新增消息配置 </a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addMessageConfig">
  6 + <a-button type="primary" @click="handleCreate"> 新增消息配置 </a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteMessageConfig">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #config="{ record }"> 18 <template #config="{ record }">
11 <a-button type="link" class="ml-2" @click="showData(record)"> 查看配置 </a-button> 19 <a-button type="link" class="ml-2" @click="showData(record)"> 查看配置 </a-button>
@@ -24,11 +32,13 @@ @@ -24,11 +32,13 @@
24 :actions="[ 32 :actions="[
25 { 33 {
26 label: '编辑', 34 label: '编辑',
  35 + auth: 'api:yt:admin:editMessageConfig',
27 icon: 'clarity:note-edit-line', 36 icon: 'clarity:note-edit-line',
28 onClick: handleEdit.bind(null, record), 37 onClick: handleEdit.bind(null, record),
29 }, 38 },
30 { 39 {
31 label: '删除', 40 label: '删除',
  41 + auth: 'api:yt:admin:deleteMessageConfig',
32 icon: 'ant-design:delete-outlined', 42 icon: 'ant-design:delete-outlined',
33 color: 'error', 43 color: 'error',
34 popConfirm: { 44 popConfirm: {
@@ -57,10 +67,11 @@ @@ -57,10 +67,11 @@
57 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 67 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
58 import { Switch } from 'ant-design-vue'; 68 import { Switch } from 'ant-design-vue';
59 import { setMessageConfigStatus } from '/@/api/message/config'; 69 import { setMessageConfigStatus } from '/@/api/message/config';
  70 + import { Authority } from '/@/components/Authority';
60 71
61 export default defineComponent({ 72 export default defineComponent({
62 name: 'MessageConfigManagement', 73 name: 'MessageConfigManagement',
63 - components: { BasicTable, ConfigDrawer, TableAction, Switch }, 74 + components: { BasicTable, ConfigDrawer, TableAction, Switch, Authority },
64 setup() { 75 setup() {
65 const [registerDrawer, { openDrawer }] = useDrawer(); 76 const [registerDrawer, { openDrawer }] = useDrawer();
66 function handleSuccess() { 77 function handleSuccess() {
@@ -3,25 +3,29 @@ @@ -3,25 +3,29 @@
3 <BasicTable @register="registerTable"> 3 <BasicTable @register="registerTable">
4 <template #toolbar> 4 <template #toolbar>
5 <a-button type="primary" @click="handleCreate"> 导出 </a-button> 5 <a-button type="primary" @click="handleCreate"> 导出 </a-button>
6 - <a-button  
7 - type="primary"  
8 - color="error"  
9 - @click="handleDeleteOrBatchDelete(null)"  
10 - :disabled="hasBatchDelete"  
11 - >  
12 - 批量删除  
13 - </a-button> 6 + <Authority value="api:yt:admin:deleteMessageLog">
  7 + <a-button
  8 + type="primary"
  9 + color="error"
  10 + @click="handleDeleteOrBatchDelete(null)"
  11 + :disabled="hasBatchDelete"
  12 + >
  13 + 批量删除
  14 + </a-button>
  15 + </Authority>
14 </template> 16 </template>
15 <template #action="{ record }"> 17 <template #action="{ record }">
16 <TableAction 18 <TableAction
17 :actions="[ 19 :actions="[
18 { 20 {
19 label: '查看', 21 label: '查看',
  22 + auth: 'api:yt:admin:viewMessageLog',
20 icon: 'ant-design:fund-view-outlined', 23 icon: 'ant-design:fund-view-outlined',
21 onClick: handleModal.bind(null, record), 24 onClick: handleModal.bind(null, record),
22 }, 25 },
23 { 26 {
24 label: '删除', 27 label: '删除',
  28 + auth: 'api:yt:admin:deleteMessageLog',
25 icon: 'ant-design:delete-outlined', 29 icon: 'ant-design:delete-outlined',
26 color: 'error', 30 color: 'error',
27 popConfirm: { 31 popConfirm: {
@@ -44,9 +48,11 @@ @@ -44,9 +48,11 @@
44 import { useModal } from '/@/components/Modal'; 48 import { useModal } from '/@/components/Modal';
45 import EmailDetail from './EmailDetail.vue'; 49 import EmailDetail from './EmailDetail.vue';
46 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 50 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  51 + import { Authority } from '/@/components/Authority';
  52 +
47 export default defineComponent({ 53 export default defineComponent({
48 name: 'EmailLog', 54 name: 'EmailLog',
49 - components: { EmailDetail, BasicTable, TableAction }, 55 + components: { EmailDetail, BasicTable, TableAction, Authority },
50 setup() { 56 setup() {
51 const [registerModal, { openModal }] = useModal(); 57 const [registerModal, { openModal }] = useModal();
52 const [registerTable, { reload, setProps }] = useTable({ 58 const [registerTable, { reload, setProps }] = useTable({
@@ -3,25 +3,29 @@ @@ -3,25 +3,29 @@
3 <BasicTable @register="registerTable"> 3 <BasicTable @register="registerTable">
4 <template #toolbar> 4 <template #toolbar>
5 <a-button type="primary" @click="handleExport"> 导出 </a-button> 5 <a-button type="primary" @click="handleExport"> 导出 </a-button>
6 - <a-button  
7 - type="primary"  
8 - color="error"  
9 - @click="handleDeleteOrBatchDelete(null)"  
10 - :disabled="hasBatchDelete"  
11 - >  
12 - 批量删除  
13 - </a-button> 6 + <Authority value="api:yt:admin:deleteMessageLog">
  7 + <a-button
  8 + type="primary"
  9 + color="error"
  10 + @click="handleDeleteOrBatchDelete(null)"
  11 + :disabled="hasBatchDelete"
  12 + >
  13 + 批量删除
  14 + </a-button>
  15 + </Authority>
14 </template> 16 </template>
15 <template #action="{ record }"> 17 <template #action="{ record }">
16 <TableAction 18 <TableAction
17 :actions="[ 19 :actions="[
18 { 20 {
19 label: '查看', 21 label: '查看',
  22 + auth: 'api:yt:admin:viewMessageLog',
20 icon: 'ant-design:fund-view-outlined', 23 icon: 'ant-design:fund-view-outlined',
21 onClick: handleQuery.bind(null, record), 24 onClick: handleQuery.bind(null, record),
22 }, 25 },
23 { 26 {
24 label: '删除', 27 label: '删除',
  28 + auth: 'api:yt:admin:deleteMessageLog',
25 icon: 'ant-design:delete-outlined', 29 icon: 'ant-design:delete-outlined',
26 color: 'error', 30 color: 'error',
27 popConfirm: { 31 popConfirm: {
@@ -43,10 +47,11 @@ @@ -43,10 +47,11 @@
43 import { smsLogPage, deleteSmsLog } from '/@/api/message/records'; 47 import { smsLogPage, deleteSmsLog } from '/@/api/message/records';
44 import { JsonPreview } from '/@/components/CodeEditor'; 48 import { JsonPreview } from '/@/components/CodeEditor';
45 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 49 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  50 + import { Authority } from '/@/components/Authority';
46 51
47 export default defineComponent({ 52 export default defineComponent({
48 name: 'SmsLog', 53 name: 'SmsLog',
49 - components: { BasicTable, TableAction }, 54 + components: { BasicTable, TableAction, Authority },
50 setup() { 55 setup() {
51 const [registerTable, { reload, setProps }] = useTable({ 56 const [registerTable, { reload, setProps }] = useTable({
52 title: '短信发送列表', 57 title: '短信发送列表',
@@ -2,10 +2,18 @@ @@ -2,10 +2,18 @@
2 <div> 2 <div>
3 <BasicTable @register="registerTable" :clickToRowSelect="false"> 3 <BasicTable @register="registerTable" :clickToRowSelect="false">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate"> 新增消息模板 </a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addMessageTemplate">
  6 + <a-button type="primary" @click="handleCreate"> 新增消息模板 </a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteMessageTemplate">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #config="{ record }"> 18 <template #config="{ record }">
11 <a-button type="link" class="ml-2" @click="goConfig"> 19 <a-button type="link" class="ml-2" @click="goConfig">
@@ -31,11 +39,13 @@ @@ -31,11 +39,13 @@
31 }, 39 },
32 { 40 {
33 label: '编辑', 41 label: '编辑',
  42 + auth: 'api:yt:admin:editMessageTemplate',
34 icon: 'clarity:note-edit-line', 43 icon: 'clarity:note-edit-line',
35 onClick: handleEdit.bind(null, record), 44 onClick: handleEdit.bind(null, record),
36 }, 45 },
37 { 46 {
38 label: '删除', 47 label: '删除',
  48 + auth: 'api:yt:admin:deleteMessageTemplate',
39 icon: 'ant-design:delete-outlined', 49 icon: 'ant-design:delete-outlined',
40 color: 'error', 50 color: 'error',
41 popConfirm: { 51 popConfirm: {
@@ -70,10 +80,11 @@ @@ -70,10 +80,11 @@
70 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 80 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
71 import { Switch } from 'ant-design-vue'; 81 import { Switch } from 'ant-design-vue';
72 import { setMessageTemplateStatus } from '/@/api/message/template'; 82 import { setMessageTemplateStatus } from '/@/api/message/template';
  83 + import { Authority } from '/@/components/Authority';
73 84
74 export default defineComponent({ 85 export default defineComponent({
75 name: 'MessageTemplateManagement', 86 name: 'MessageTemplateManagement',
76 - components: { SendSms, SendEmail, BasicTable, TemplateDrawer, TableAction, Switch }, 87 + components: { SendSms, SendEmail, BasicTable, TemplateDrawer, TableAction, Switch, Authority },
77 setup() { 88 setup() {
78 const [registerModal, { openModal: openModal }] = useModal(); 89 const [registerModal, { openModal: openModal }] = useModal();
79 const [registerMailModal, { openModal: openMailModal }] = useModal(); 90 const [registerMailModal, { openModal: openMailModal }] = useModal();
@@ -2,16 +2,25 @@ @@ -2,16 +2,25 @@
2 <div> 2 <div>
3 <BasicTable :clickToRowSelect="false" @register="registerTable"> 3 <BasicTable :clickToRowSelect="false" @register="registerTable">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleAdd">新增通知</a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addNotify">
  6 + <a-button type="primary" @click="handleAdd">新增通知</a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteNotify">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #action="{ record }"> 18 <template #action="{ record }">
11 <TableAction 19 <TableAction
12 :actions="[ 20 :actions="[
13 { 21 {
14 label: '查看', 22 label: '查看',
  23 + auth: 'api:yt:admin:viewNotify',
15 icon: 'ant-design:eye-outlined', 24 icon: 'ant-design:eye-outlined',
16 onClick: handleView.bind(null, record), 25 onClick: handleView.bind(null, record),
17 ifShow: (_action) => { 26 ifShow: (_action) => {
@@ -21,6 +30,7 @@ @@ -21,6 +30,7 @@
21 }, 30 },
22 { 31 {
23 label: '编辑', 32 label: '编辑',
  33 + auth: 'api:yt:admin:editNotify',
24 icon: 'clarity:note-edit-line', 34 icon: 'clarity:note-edit-line',
25 onClick: handleEdit.bind(null, record), 35 onClick: handleEdit.bind(null, record),
26 ifShow: (_action) => { 36 ifShow: (_action) => {
@@ -30,6 +40,7 @@ @@ -30,6 +40,7 @@
30 }, 40 },
31 { 41 {
32 label: '删除', 42 label: '删除',
  43 + auth: 'api:yt:admin:deleteNotify',
33 icon: 'ant-design:delete-outlined', 44 icon: 'ant-design:delete-outlined',
34 color: 'error', 45 color: 'error',
35 ifShow: record.creator === userId, 46 ifShow: record.creator === userId,
@@ -61,10 +72,11 @@ @@ -61,10 +72,11 @@
61 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 72 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
62 import { USER_INFO_KEY } from '/@/enums/cacheEnum'; 73 import { USER_INFO_KEY } from '/@/enums/cacheEnum';
63 import { getAuthCache } from '/@/utils/auth'; 74 import { getAuthCache } from '/@/utils/auth';
  75 + import { Authority } from '/@/components/Authority';
64 76
65 export default defineComponent({ 77 export default defineComponent({
66 name: 'Notificationmannager', 78 name: 'Notificationmannager',
67 - components: { BasicTable, NotifyManagerDrawer, TableAction, tableViewChild }, 79 + components: { BasicTable, NotifyManagerDrawer, TableAction, tableViewChild, Authority },
68 setup() { 80 setup() {
69 const userInfo: any = getAuthCache(USER_INFO_KEY); 81 const userInfo: any = getAuthCache(USER_INFO_KEY);
70 const userId = userInfo.userId; 82 const userId = userInfo.userId;
@@ -40,7 +40,8 @@ @@ -40,7 +40,8 @@
40 schemas: formSchema, 40 schemas: formSchema,
41 showActionButtonGroup: false, 41 showActionButtonGroup: false,
42 }); 42 });
43 - const [registerDrawer, { closeDrawer }] = useDrawerInner(async (data) => { 43 + const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
  44 + setDrawerProps({ confirmLoading: false });
44 await resetFields(); 45 await resetFields();
45 isUpdate.value = data.isUpdate; 46 isUpdate.value = data.isUpdate;
46 //编辑 47 //编辑
@@ -63,6 +64,7 @@ @@ -63,6 +64,7 @@
63 const pointId = field.receiverType === 1 ? field.organizationId + '' : null; 64 const pointId = field.receiverType === 1 ? field.organizationId + '' : null;
64 // 新增情况 65 // 新增情况
65 try { 66 try {
  67 + setDrawerProps({ confirmLoading: true });
66 const editNotice = { 68 const editNotice = {
67 ...field, 69 ...field,
68 pointId, 70 pointId,
@@ -72,30 +74,39 @@ @@ -72,30 +74,39 @@
72 emit('success'); 74 emit('success');
73 closeDrawer(); 75 closeDrawer();
74 createMessage.success('发布成功'); 76 createMessage.success('发布成功');
75 - } catch {} 77 + } catch {
  78 + } finally {
  79 + setDrawerProps({ confirmLoading: false });
  80 + }
76 }; 81 };
77 // 保存草稿 82 // 保存草稿
78 const handleSaveDraft = async () => { 83 const handleSaveDraft = async () => {
79 - await validate();  
80 - const field = getFieldsValue();  
81 - const pointId = field.receiverType === 1 ? field.organizationId + '' : null;  
82 - if (!unref(isUpdate)) {  
83 - const saveDraft = {  
84 - ...field,  
85 - pointId,  
86 - };  
87 - await notifyAddDraftApi(saveDraft);  
88 - } else {  
89 - const editDraft = {  
90 - ...field,  
91 - pointId,  
92 - id: unref(noticeId),  
93 - };  
94 - await notifyAddDraftApi(editDraft); 84 + try {
  85 + setDrawerProps({ confirmLoading: true });
  86 + await validate();
  87 + const field = getFieldsValue();
  88 + const pointId = field.receiverType === 1 ? field.organizationId + '' : null;
  89 + if (!unref(isUpdate)) {
  90 + const saveDraft = {
  91 + ...field,
  92 + pointId,
  93 + };
  94 + await notifyAddDraftApi(saveDraft);
  95 + } else {
  96 + const editDraft = {
  97 + ...field,
  98 + pointId,
  99 + id: unref(noticeId),
  100 + };
  101 + await notifyAddDraftApi(editDraft);
  102 + }
  103 + emit('success');
  104 + closeDrawer();
  105 + createMessage.success('保存草稿成功');
  106 + } catch {
  107 + } finally {
  108 + setDrawerProps({ confirmLoading: false });
95 } 109 }
96 - emit('success');  
97 - closeDrawer();  
98 - createMessage.success('保存草稿成功');  
99 }; 110 };
100 const handleCancel = () => { 111 const handleCancel = () => {
101 // resetFields(); 112 // resetFields();
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 :actions="[ 6 :actions="[
7 { 7 {
8 label: '查看', 8 label: '查看',
  9 + auth: 'api:yt:admin:viewMyNotify',
9 tooltip: '查看', 10 tooltip: '查看',
10 icon: 'ant-design:eye-outlined', 11 icon: 'ant-design:eye-outlined',
11 onClick: handleView.bind(null, record), 12 onClick: handleView.bind(null, record),
@@ -26,9 +26,7 @@ @@ -26,9 +26,7 @@
26 /></div> 26 /></div>
27 </div> 27 </div>
28 <div style="float: right"> 28 <div style="float: right">
29 - <Button :disabled="disStatus" type="primary" @click="handleSubmit" class="mr-2"  
30 - >确认</Button  
31 - > 29 + <Button type="primary" @click="handleSubmit" class="mr-2">确认</Button>
32 <Button type="default" @click="handleCancel" class="mr-2">取消</Button> 30 <Button type="default" @click="handleCancel" class="mr-2">取消</Button>
33 </div> 31 </div>
34 </BasicModal> 32 </BasicModal>
@@ -65,7 +63,6 @@ @@ -65,7 +63,6 @@
65 emits: ['success', 'register'], 63 emits: ['success', 'register'],
66 setup(_, { emit }) { 64 setup(_, { emit }) {
67 const { createMessage } = useMessage(); 65 const { createMessage } = useMessage();
68 - const disStatus = ref(false);  
69 const { proxy } = getCurrentInstance() as any; 66 const { proxy } = getCurrentInstance() as any;
70 let allPostForm: any = reactive({}); 67 let allPostForm: any = reactive({});
71 const getNameObj = reactive({ 68 const getNameObj = reactive({
@@ -106,9 +103,11 @@ @@ -106,9 +103,11 @@
106 editType.name = d.name; 103 editType.name = d.name;
107 }; 104 };
108 105
109 - const [registerDrawer, { closeModal }] = useModalInner(async (data) => { 106 + const [registerDrawer, { setModalProps, closeModal }] = useModalInner(async (data) => {
110 isUpdate.value = !!data?.isUpdate; 107 isUpdate.value = !!data?.isUpdate;
111 current.value = 0; 108 current.value = 0;
  109 + setModalProps({ confirmLoading: false });
  110 +
112 if (unref(isUpdate)) { 111 if (unref(isUpdate)) {
113 editPostId.value = data.record.id; 112 editPostId.value = data.record.id;
114 editNextType.type = data.record.type; 113 editNextType.type = data.record.type;
@@ -216,24 +215,26 @@ @@ -216,24 +215,26 @@
216 } 215 }
217 }; 216 };
218 const handleSubmit = async () => { 217 const handleSubmit = async () => {
219 - if (!unref(isUpdate)) {  
220 - disStatus.value = true;  
221 - await addOrEditFunc();  
222 - await postAddConvertApi(allPostForm);  
223 - createMessage.success('数据流转新增成功');  
224 - emit('success');  
225 - defineClearFunc();  
226 - closeModal();  
227 - setTimeout(() => {  
228 - disStatus.value = false;  
229 - }, 2000);  
230 - } else {  
231 - await addOrEditFunc();  
232 - await postAddConvertApi(allPostForm);  
233 - createMessage.success('数据流转编辑成功');  
234 - emit('success');  
235 - defineClearFunc();  
236 - closeModal(); 218 + try {
  219 + setModalProps({ confirmLoading: true });
  220 + if (!unref(isUpdate)) {
  221 + await addOrEditFunc();
  222 + await postAddConvertApi(allPostForm);
  223 + createMessage.success('数据流转新增成功');
  224 + emit('success');
  225 + defineClearFunc();
  226 + closeModal();
  227 + } else {
  228 + await addOrEditFunc();
  229 + await postAddConvertApi(allPostForm);
  230 + createMessage.success('数据流转编辑成功');
  231 + emit('success');
  232 + defineClearFunc();
  233 + closeModal();
  234 + }
  235 + } catch {
  236 + } finally {
  237 + setModalProps({ confirmLoading: false });
237 } 238 }
238 }; 239 };
239 return { 240 return {
@@ -247,7 +248,6 @@ @@ -247,7 +248,6 @@
247 getModeSelectVal, 248 getModeSelectVal,
248 refTransferConfigParams, 249 refTransferConfigParams,
249 refTransferConfigMode, 250 refTransferConfigMode,
250 - disStatus,  
251 }; 251 };
252 }, 252 },
253 }); 253 });
@@ -8,14 +8,18 @@ @@ -8,14 +8,18 @@
8 :clickToRowSelect="false" 8 :clickToRowSelect="false"
9 > 9 >
10 <template #toolbar> 10 <template #toolbar>
11 - <a-button type="primary" @click="handleAdd"> 添加流转 </a-button>  
12 - <a-button  
13 - :disabled="disabledStatus1"  
14 - @click="handleDelete"  
15 - :type="disabledStatus1 ? 'default' : 'primary'"  
16 - >  
17 - <span :style="{ color: disabledStatus1 ? 'grey' : 'white' }">批量删除</span>  
18 - </a-button> 11 + <Authority value="api:yt:admin:addDataFlow">
  12 + <a-button type="primary" @click="handleAdd"> 添加流转 </a-button>
  13 + </Authority>
  14 + <Authority value="api:yt:admin:deleteDataFlow">
  15 + <a-button
  16 + :disabled="disabledStatus1"
  17 + @click="handleDelete"
  18 + :type="disabledStatus1 ? 'default' : 'primary'"
  19 + >
  20 + <span :style="{ color: disabledStatus1 ? 'grey' : 'white' }">批量删除</span>
  21 + </a-button>
  22 + </Authority>
19 <a-button 23 <a-button
20 :disabled="disabledStatus2" 24 :disabled="disabledStatus2"
21 @click="handleMutiuteDisable" 25 @click="handleMutiuteDisable"
@@ -36,6 +40,7 @@ @@ -36,6 +40,7 @@
36 :actions="[ 40 :actions="[
37 { 41 {
38 label: '编辑', 42 label: '编辑',
  43 + auth: 'api:yt:admin:editDataFlow',
39 icon: 'clarity:note-edit-line', 44 icon: 'clarity:note-edit-line',
40 onClick: handleEdit.bind(null, record), 45 onClick: handleEdit.bind(null, record),
41 ifShow: (_action) => { 46 ifShow: (_action) => {
@@ -45,6 +50,7 @@ @@ -45,6 +50,7 @@
45 50
46 { 51 {
47 label: '删除', 52 label: '删除',
  53 + auth: 'api:yt:admin:deleteDataFlow',
48 icon: 'ant-design:delete-outlined', 54 icon: 'ant-design:delete-outlined',
49 color: 'error', 55 color: 'error',
50 popConfirm: { 56 popConfirm: {
@@ -99,10 +105,11 @@ @@ -99,10 +105,11 @@
99 deleteConvertApi, 105 deleteConvertApi,
100 } from '/@/api/datamanager/dataManagerApi'; 106 } from '/@/api/datamanager/dataManagerApi';
101 import { useMessage } from '/@/hooks/web/useMessage'; 107 import { useMessage } from '/@/hooks/web/useMessage';
  108 + import { Authority } from '/@/components/Authority';
102 109
103 export default defineComponent({ 110 export default defineComponent({
104 name: 'Index', 111 name: 'Index',
105 - components: { BasicTable, TableAction, DataTransferDrawer }, 112 + components: { BasicTable, TableAction, DataTransferDrawer, Authority },
106 setup() { 113 setup() {
107 const enableObj = reactive({ 114 const enableObj = reactive({
108 convertIds: [], 115 convertIds: [],
@@ -258,20 +265,30 @@ @@ -258,20 +265,30 @@
258 265
259 const handleDelete = async () => { 266 const handleDelete = async () => {
260 try { 267 try {
  268 + disabledStatus1.value = true;
261 setLoading(true); 269 setLoading(true);
262 const data = await deleteConvertApi(selectedRowKeys.value); 270 const data = await deleteConvertApi(selectedRowKeys.value);
263 if (data == true) { 271 if (data == true) {
264 createMessage.success('删除成功'); 272 createMessage.success('删除成功');
265 setLoading(false); 273 setLoading(false);
  274 + setTimeout(() => {
  275 + disabledStatus1.value = false;
  276 + }, 3000);
266 reload(); 277 reload();
267 } else { 278 } else {
268 createMessage.error('删除失败'); 279 createMessage.error('删除失败');
269 } 280 }
270 } catch (e: any) { 281 } catch (e: any) {
271 createMessage.error(e); 282 createMessage.error(e);
  283 + setTimeout(() => {
  284 + disabledStatus1.value = false;
  285 + }, 3000);
272 } finally { 286 } finally {
273 setLoading(false); 287 setLoading(false);
274 clearSelectedRowKeys(); 288 clearSelectedRowKeys();
  289 + setTimeout(() => {
  290 + disabledStatus1.value = false;
  291 + }, 3000);
275 } 292 }
276 }; 293 };
277 const handleMutiuteDisable = async () => { 294 const handleMutiuteDisable = async () => {
@@ -2,27 +2,38 @@ @@ -2,27 +2,38 @@
2 <div> 2 <div>
3 <BasicTable @register="registerTable"> 3 <BasicTable @register="registerTable">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleAdd"> 新增场景联动 </a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addLinkEdge">
  6 + <a-button type="primary" @click="handleAdd"> 新增场景联动 </a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteLinkEdge">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #action="{ record }"> 18 <template #action="{ record }">
11 <TableAction 19 <TableAction
12 :actions="[ 20 :actions="[
13 { 21 {
14 label: '查看', 22 label: '查看',
  23 + auth: 'api:yt:admin:viewLinkEdge',
15 icon: 'ant-design:eye-outlined', 24 icon: 'ant-design:eye-outlined',
16 onClick: handleView.bind(null, record), 25 onClick: handleView.bind(null, record),
17 }, 26 },
18 { 27 {
19 label: '编辑', 28 label: '编辑',
  29 + auth: 'api:yt:admin:editLinkEdge',
20 icon: 'clarity:note-edit-line', 30 icon: 'clarity:note-edit-line',
21 onClick: handleEdit.bind(null, record), 31 onClick: handleEdit.bind(null, record),
22 ifShow: record.creator === userId && record.status !== 1, 32 ifShow: record.creator === userId && record.status !== 1,
23 }, 33 },
24 { 34 {
25 label: '删除', 35 label: '删除',
  36 + auth: 'api:yt:admin:deleteLinkEdge',
26 icon: 'ant-design:delete-outlined', 37 icon: 'ant-design:delete-outlined',
27 color: 'error', 38 color: 'error',
28 ifShow: record.creator === userId && record.status !== 1, 39 ifShow: record.creator === userId && record.status !== 1,
@@ -64,6 +75,7 @@ @@ -64,6 +75,7 @@
64 import { getAuthCache } from '/@/utils/auth'; 75 import { getAuthCache } from '/@/utils/auth';
65 import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue'; 76 import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue';
66 import { useMessage } from '/@/hooks/web/useMessage'; 77 import { useMessage } from '/@/hooks/web/useMessage';
  78 + import { Authority } from '/@/components/Authority';
67 79
68 const userInfo: any = getAuthCache(USER_INFO_KEY); 80 const userInfo: any = getAuthCache(USER_INFO_KEY);
69 const userId = userInfo.userId; 81 const userId = userInfo.userId;
@@ -44,8 +44,9 @@ @@ -44,8 +44,9 @@
44 const aceEditor = ref(); 44 const aceEditor = ref();
45 const aceRef = ref(); 45 const aceRef = ref();
46 const getTitle = computed(() => (isUpdate.value ? '编辑转换脚本' : '新增转换脚本')); 46 const getTitle = computed(() => (isUpdate.value ? '编辑转换脚本' : '新增转换脚本'));
47 - const [register, { closeDrawer }] = useDrawerInner((data) => { 47 + const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
48 resetFields(); 48 resetFields();
  49 + setDrawerProps({ confirmLoading: false });
49 isUpdate.value = data.isUpdate; 50 isUpdate.value = data.isUpdate;
50 initEditor(data.record?.configuration.jsScript); 51 initEditor(data.record?.configuration.jsScript);
51 if (isUpdate.value) { 52 if (isUpdate.value) {
@@ -85,6 +86,8 @@ @@ -85,6 +86,8 @@
85 const handleSubmit = async () => { 86 const handleSubmit = async () => {
86 const fieldsValue = getFieldsValue(); 87 const fieldsValue = getFieldsValue();
87 try { 88 try {
  89 + setDrawerProps({ confirmLoading: true });
  90 +
88 await createOrEditTransformScriptApi({ 91 await createOrEditTransformScriptApi({
89 configuration: { 92 configuration: {
90 jsScript: aceEditor.value.getValue(), 93 jsScript: aceEditor.value.getValue(),
@@ -99,6 +102,8 @@ @@ -99,6 +102,8 @@
99 } catch (e) { 102 } catch (e) {
100 const { createMessage } = useMessage(); 103 const { createMessage } = useMessage();
101 createMessage.success('保存失败'); 104 createMessage.success('保存失败');
  105 + } finally {
  106 + setDrawerProps({ confirmLoading: false });
102 } 107 }
103 }; 108 };
104 const handleFormat = () => { 109 const handleFormat = () => {
@@ -2,10 +2,18 @@ @@ -2,10 +2,18 @@
2 <div> 2 <div>
3 <BasicTable @register="registerTable" v-show="isStatus === 0"> 3 <BasicTable @register="registerTable" v-show="isStatus === 0">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate"> 新增转换脚本 </a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addScript">
  6 + <a-button type="primary" @click="handleCreate"> 新增转换脚本 </a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteScript">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #status="{ record }"> 18 <template #status="{ record }">
11 <Switch 19 <Switch
@@ -21,12 +29,13 @@ @@ -21,12 +29,13 @@
21 :actions="[ 29 :actions="[
22 { 30 {
23 label: '编辑', 31 label: '编辑',
  32 + auth: 'api:yt:admin:editScript',
24 icon: 'clarity:note-edit-line', 33 icon: 'clarity:note-edit-line',
25 -  
26 onClick: handleEdit.bind(null, record), 34 onClick: handleEdit.bind(null, record),
27 }, 35 },
28 { 36 {
29 label: '删除', 37 label: '删除',
  38 + auth: 'api:yt:admin:deleteScript',
30 icon: 'ant-design:delete-outlined', 39 icon: 'ant-design:delete-outlined',
31 ifShow: record.status == 0, 40 ifShow: record.status == 0,
32 color: 'error', 41 color: 'error',
@@ -61,6 +70,7 @@ @@ -61,6 +70,7 @@
61 import { useMessage } from '/@/hooks/web/useMessage'; 70 import { useMessage } from '/@/hooks/web/useMessage';
62 import { updateTransformScriptStatusApi } from '/@/api/device/TransformScriptApi'; 71 import { updateTransformScriptStatusApi } from '/@/api/device/TransformScriptApi';
63 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 72 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  73 + import { Authority } from '/@/components/Authority';
64 74
65 const handleSuccess = () => { 75 const handleSuccess = () => {
66 reload(); 76 reload();
@@ -8,14 +8,18 @@ @@ -8,14 +8,18 @@
8 /> 8 />
9 <BasicTable :clickToRowSelect="false" @register="registerTable" class="w-3/4 xl:w-4/5"> 9 <BasicTable :clickToRowSelect="false" @register="registerTable" class="w-3/4 xl:w-4/5">
10 <template #toolbar> 10 <template #toolbar>
11 - <a-button type="primary" @click="handleCreate">新增账号</a-button>  
12 - <a-button  
13 - color="error"  
14 - @click="handleDeleteOrBatchDelete(null)"  
15 - :disabled="hasBatchDelete"  
16 - >  
17 - 批量删除  
18 - </a-button> 11 + <Authority value="api:yt:admin:addAccount">
  12 + <a-button type="primary" @click="handleCreate">新增账号</a-button>
  13 + </Authority>
  14 + <Authority value="api:yt:admin:deleteAccount">
  15 + <a-button
  16 + color="error"
  17 + @click="handleDeleteOrBatchDelete(null)"
  18 + :disabled="hasBatchDelete"
  19 + >
  20 + 批量删除
  21 + </a-button>
  22 + </Authority>
19 </template> 23 </template>
20 <template #status="{ record }"> 24 <template #status="{ record }">
21 <Tag 25 <Tag
@@ -41,6 +45,7 @@ @@ -41,6 +45,7 @@
41 :actions="[ 45 :actions="[
42 { 46 {
43 label: '用户详情', 47 label: '用户详情',
  48 + auth: 'api:yt:admin:viewAccount',
44 icon: 'clarity:info-standard-line', 49 icon: 'clarity:info-standard-line',
45 tooltip: '用户详情', 50 tooltip: '用户详情',
46 onClick: handleView.bind(null, record), 51 onClick: handleView.bind(null, record),
@@ -48,6 +53,7 @@ @@ -48,6 +53,7 @@
48 }, 53 },
49 { 54 {
50 label: '编辑', 55 label: '编辑',
  56 + auth: 'api:yt:admin:editAccount',
51 icon: 'clarity:note-edit-line', 57 icon: 'clarity:note-edit-line',
52 tooltip: '编辑', 58 tooltip: '编辑',
53 onClick: handleEdit.bind(null, record), 59 onClick: handleEdit.bind(null, record),
@@ -55,6 +61,7 @@ @@ -55,6 +61,7 @@
55 }, 61 },
56 { 62 {
57 label: '删除', 63 label: '删除',
  64 + auth: 'api:yt:admin:deleteAccount',
58 icon: 'ant-design:delete-outlined', 65 icon: 'ant-design:delete-outlined',
59 color: 'error', 66 color: 'error',
60 tooltip: '删除', 67 tooltip: '删除',
@@ -84,9 +91,19 @@ @@ -84,9 +91,19 @@
84 import { columns, searchFormSchema } from './account.data'; 91 import { columns, searchFormSchema } from './account.data';
85 import { useGo } from '/@/hooks/web/usePage'; 92 import { useGo } from '/@/hooks/web/usePage';
86 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 93 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  94 + import { Authority } from '/@/components/Authority';
  95 +
87 export default defineComponent({ 96 export default defineComponent({
88 name: 'AccountManagement', 97 name: 'AccountManagement',
89 - components: { BasicTable, PageWrapper, OrganizationIdTree, AccountModal, TableAction, Tag }, 98 + components: {
  99 + BasicTable,
  100 + PageWrapper,
  101 + OrganizationIdTree,
  102 + AccountModal,
  103 + TableAction,
  104 + Tag,
  105 + Authority,
  106 + },
90 setup() { 107 setup() {
91 const go = useGo(); 108 const go = useGo();
92 const [registerModal, { openModal }] = useModal(); 109 const [registerModal, { openModal }] = useModal();
@@ -2,10 +2,18 @@ @@ -2,10 +2,18 @@
2 <div> 2 <div>
3 <BasicTable :clickToRowSelect="false" @register="registerTable"> 3 <BasicTable :clickToRowSelect="false" @register="registerTable">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate"> 新增字典 </a-button>  
6 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
7 - 批量删除  
8 - </a-button> 5 + <Authority value="api:yt:admin:addDict">
  6 + <a-button type="primary" @click="handleCreate"> 新增字典 </a-button>
  7 + </Authority>
  8 + <Authority value="api:yt:admin:deleteDict">
  9 + <a-button
  10 + color="error"
  11 + @click="handleDeleteOrBatchDelete(null)"
  12 + :disabled="hasBatchDelete"
  13 + >
  14 + 批量删除
  15 + </a-button>
  16 + </Authority>
9 </template> 17 </template>
10 <template #action="{ record }"> 18 <template #action="{ record }">
11 <TableAction 19 <TableAction
@@ -17,11 +25,13 @@ @@ -17,11 +25,13 @@
17 }, 25 },
18 { 26 {
19 label: '编辑', 27 label: '编辑',
  28 + auth: 'api:yt:admin:editDict',
20 icon: 'clarity:note-edit-line', 29 icon: 'clarity:note-edit-line',
21 onClick: handleEdit.bind(null, record), 30 onClick: handleEdit.bind(null, record),
22 }, 31 },
23 { 32 {
24 label: '删除', 33 label: '删除',
  34 + auth: 'api:yt:admin:deleteDict',
25 icon: 'ant-design:delete-outlined', 35 icon: 'ant-design:delete-outlined',
26 color: 'error', 36 color: 'error',
27 popConfirm: { 37 popConfirm: {
@@ -47,19 +57,17 @@ @@ -47,19 +57,17 @@
47 57
48 import { BasicTable, useTable, TableAction } from '/@/components/Table'; 58 import { BasicTable, useTable, TableAction } from '/@/components/Table';
49 import { sysDictPage, deleteDict } from '/@/api/system/dict'; 59 import { sysDictPage, deleteDict } from '/@/api/system/dict';
50 -  
51 import { useDrawer } from '/@/components/Drawer'; 60 import { useDrawer } from '/@/components/Drawer';
52 import DictDrawer from './DictDrawer.vue'; 61 import DictDrawer from './DictDrawer.vue';
53 import ItemIndex from './item/ItemIndex.vue'; 62 import ItemIndex from './item/ItemIndex.vue';
54 -  
55 import { columns, searchFormSchema } from './dict.data'; 63 import { columns, searchFormSchema } from './dict.data';
56 import { Tag } from 'ant-design-vue'; 64 import { Tag } from 'ant-design-vue';
57 -  
58 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 65 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  66 + import { Authority } from '/@/components/Authority';
59 67
60 export default defineComponent({ 68 export default defineComponent({
61 name: 'DictManagement', 69 name: 'DictManagement',
62 - components: { BasicTable, DictDrawer, ItemIndex, TableAction, Tag }, 70 + components: { BasicTable, DictDrawer, ItemIndex, TableAction, Tag, Authority },
63 setup() { 71 setup() {
64 const [registerDrawer, { openDrawer: openDrawer }] = useDrawer(); 72 const [registerDrawer, { openDrawer: openDrawer }] = useDrawer();
65 const [registerItemDrawer, { openDrawer: openItemDrawer }] = useDrawer(); 73 const [registerItemDrawer, { openDrawer: openItemDrawer }] = useDrawer();
@@ -2,14 +2,16 @@ @@ -2,14 +2,16 @@
2 <div> 2 <div>
3 <BasicTable :clickToRowSelect="false" @register="registerTable" :searchInfo="searchInfo"> 3 <BasicTable :clickToRowSelect="false" @register="registerTable" :searchInfo="searchInfo">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button  
6 - type="primary"  
7 - color="error"  
8 - @click="handleDeleteOrBatchDelete(null)"  
9 - :disabled="hasBatchDelete"  
10 - >  
11 - 批量删除  
12 - </a-button> 5 + <Authority value="api:yt:admin:deleteFeedBack">
  6 + <a-button
  7 + type="primary"
  8 + color="error"
  9 + @click="handleDeleteOrBatchDelete(null)"
  10 + :disabled="hasBatchDelete"
  11 + >
  12 + 批量删除
  13 + </a-button>
  14 + </Authority>
13 </template> 15 </template>
14 <template #config="{ record }"> 16 <template #config="{ record }">
15 <a-button type="link" class="ml-2" @click="showData(record)"> 查看反馈方式 </a-button> 17 <a-button type="link" class="ml-2" @click="showData(record)"> 查看反馈方式 </a-button>
@@ -19,11 +21,13 @@ @@ -19,11 +21,13 @@
19 :actions="[ 21 :actions="[
20 { 22 {
21 label: '预览', 23 label: '预览',
  24 + auth: 'api:yt:admin:viewFeedBack',
22 icon: 'clarity:note-edit-line', 25 icon: 'clarity:note-edit-line',
23 onClick: handleViewVideo.bind(null, record), 26 onClick: handleViewVideo.bind(null, record),
24 }, 27 },
25 { 28 {
26 label: '删除', 29 label: '删除',
  30 + auth: 'api:yt:admin:deleteFeedBack',
27 icon: 'ant-design:delete-outlined', 31 icon: 'ant-design:delete-outlined',
28 color: 'error', 32 color: 'error',
29 popConfirm: { 33 popConfirm: {
@@ -50,19 +54,26 @@ @@ -50,19 +54,26 @@
50 import { useModal } from '/@/components/Modal'; 54 import { useModal } from '/@/components/Modal';
51 import { Modal } from 'ant-design-vue'; 55 import { Modal } from 'ant-design-vue';
52 import { JsonPreview } from '/@/components/CodeEditor'; 56 import { JsonPreview } from '/@/components/CodeEditor';
  57 + import { Authority } from '/@/components/Authority';
53 58
54 export default defineComponent({ 59 export default defineComponent({
55 components: { 60 components: {
56 BasicTable, 61 BasicTable,
57 TableAction, 62 TableAction,
58 FeedbackDrawer, 63 FeedbackDrawer,
  64 + Authority,
59 }, 65 },
60 setup() { 66 setup() {
61 let selectedRowIds = ref<string[]>([]); 67 let selectedRowIds = ref<string[]>([]);
62 - const hasBatchDelete = computed(() => selectedRowIds.value.length <= 0); 68 + const hasBatchDelete = ref(true);
63 // 复选框事件 69 // 复选框事件
64 const onSelectRowChange = (selectedRowKeys: string[]) => { 70 const onSelectRowChange = (selectedRowKeys: string[]) => {
65 selectedRowIds.value = selectedRowKeys; 71 selectedRowIds.value = selectedRowKeys;
  72 + if (selectedRowIds.value.length > 0) {
  73 + hasBatchDelete.value = false;
  74 + } else {
  75 + hasBatchDelete.value = true;
  76 + }
66 }; 77 };
67 const searchInfo = reactive<Recordable>({}); 78 const searchInfo = reactive<Recordable>({});
68 const [registerModal] = useModal(); 79 const [registerModal] = useModal();
@@ -123,11 +134,15 @@ @@ -123,11 +134,15 @@
123 handleSuccess(); 134 handleSuccess();
124 } catch (e) {} 135 } catch (e) {}
125 } else { 136 } else {
  137 + hasBatchDelete.value = true;
126 try { 138 try {
127 await deleteFeedbackManage(selectedRowIds.value); 139 await deleteFeedbackManage(selectedRowIds.value);
128 createMessage.success('批量删除成功'); 140 createMessage.success('批量删除成功');
129 selectedRowIds.value = []; 141 selectedRowIds.value = [];
130 handleSuccess(); 142 handleSuccess();
  143 + setTimeout(() => {
  144 + hasBatchDelete.value = false;
  145 + }, 3000);
131 } catch (e) {} 146 } catch (e) {}
132 } 147 }
133 }; 148 };
@@ -126,8 +126,7 @@ @@ -126,8 +126,7 @@
126 }; 126 };
127 Reflect.set(values, 'meta', metaTemp); 127 Reflect.set(values, 'meta', metaTemp);
128 // saveMenu 128 // saveMenu
129 - const data = await saveMenuApi(values, isUpdate.value);  
130 - console.log('_______保存返回结果____data:' + data); 129 + await saveMenuApi(values, isUpdate.value);
131 130
132 closeDrawer(); //关闭侧框 131 closeDrawer(); //关闭侧框
133 emit('success'); 132 emit('success');
@@ -80,6 +80,7 @@ @@ -80,6 +80,7 @@
80 ); 80 );
81 closeDrawer(); //关闭侧框 81 closeDrawer(); //关闭侧框
82 emit('success'); 82 emit('success');
  83 + } catch {
83 } finally { 84 } finally {
84 setDrawerProps({ confirmLoading: false }); 85 setDrawerProps({ confirmLoading: false });
85 } 86 }
@@ -2,23 +2,33 @@ @@ -2,23 +2,33 @@
2 <div class="p-4"> 2 <div class="p-4">
3 <BasicTable :clickToRowSelect="false" @register="registerTable" @fetch-success="onFetchSuccess"> 3 <BasicTable :clickToRowSelect="false" @register="registerTable" @fetch-success="onFetchSuccess">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate">  
6 - {{ getI18n }}  
7 - </a-button>  
8 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="hasBatchDelete">  
9 - 批量删除  
10 - </a-button> 5 + <Authority value="api:yt:admin:addOrg">
  6 + <a-button type="primary" @click="handleCreate">
  7 + {{ getI18n }}
  8 + </a-button>
  9 + </Authority>
  10 + <Authority value="api:yt:admin:deleteOrg">
  11 + <a-button
  12 + color="error"
  13 + @click="handleDeleteOrBatchDelete(null)"
  14 + :disabled="hasBatchDelete"
  15 + >
  16 + 批量删除
  17 + </a-button>
  18 + </Authority>
11 </template> 19 </template>
12 <template #action="{ record }"> 20 <template #action="{ record }">
13 <TableAction 21 <TableAction
14 :actions="[ 22 :actions="[
15 { 23 {
16 label: '编辑', 24 label: '编辑',
  25 + auth: 'api:yt:admin:editOrg',
17 icon: 'clarity:note-edit-line', 26 icon: 'clarity:note-edit-line',
18 onClick: handleEdit.bind(null, record), 27 onClick: handleEdit.bind(null, record),
19 }, 28 },
20 { 29 {
21 label: '删除', 30 label: '删除',
  31 + auth: 'api:yt:admin:deleteOrg',
22 icon: 'ant-design:delete-outlined', 32 icon: 'ant-design:delete-outlined',
23 color: 'error', 33 color: 'error',
24 popConfirm: { 34 popConfirm: {
@@ -43,9 +53,11 @@ @@ -43,9 +53,11 @@
43 import { useI18n } from '/@/hooks/web/useI18n'; 53 import { useI18n } from '/@/hooks/web/useI18n';
44 import { delOrganization, getOrganizationList } from '/@/api/system/system'; 54 import { delOrganization, getOrganizationList } from '/@/api/system/system';
45 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 55 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  56 + import { Authority } from '/@/components/Authority';
  57 +
46 export default defineComponent({ 58 export default defineComponent({
47 name: 'DeptManagement', 59 name: 'DeptManagement',
48 - components: { BasicTable, DeptDrawer, TableAction }, 60 + components: { BasicTable, DeptDrawer, TableAction, Authority },
49 setup() { 61 setup() {
50 const [registerModal, { openDrawer }] = useDrawer(); 62 const [registerModal, { openDrawer }] = useDrawer();
51 const { t } = useI18n(); //加载国际化 63 const { t } = useI18n(); //加载国际化
@@ -95,7 +95,9 @@ @@ -95,7 +95,9 @@
95 //通过角色id去获取角色对应的菜单的ids 95 //通过角色id去获取角色对应的菜单的ids
96 roleMenus.value = await getMenusIdsByRoleId(data.record.id); 96 roleMenus.value = await getMenusIdsByRoleId(data.record.id);
97 originMenus.value = [...roleMenus.value]; 97 originMenus.value = [...roleMenus.value];
  98 +
98 for (let m of treeData.value) { 99 for (let m of treeData.value) {
  100 + console.log(m);
99 for (let m1 of roleMenus.value) { 101 for (let m1 of roleMenus.value) {
100 // 利用continue特性优化一下性能 102 // 利用continue特性优化一下性能
101 if (!(m.key === m1 && m.children.length)) continue; 103 if (!(m.key === m1 && m.children.length)) continue;
@@ -7,21 +7,27 @@ @@ -7,21 +7,27 @@
7 :clickToRowSelect="false" 7 :clickToRowSelect="false"
8 > 8 >
9 <template #toolbar> 9 <template #toolbar>
10 - <a-button type="primary" @click="handleCreate">新增角色</a-button>  
11 - <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="isStatus">  
12 - 批量删除  
13 - </a-button> 10 + <Authority value="api:yt:admin:addSysRole">
  11 + <a-button type="primary" @click="handleCreate">新增角色</a-button>
  12 + </Authority>
  13 + <Authority value="api:yt:admin:deleteSysRole">
  14 + <a-button color="error" @click="handleDeleteOrBatchDelete(null)" :disabled="isStatus">
  15 + 批量删除
  16 + </a-button>
  17 + </Authority>
14 </template> 18 </template>
15 <template #action="{ record }"> 19 <template #action="{ record }">
16 <TableAction 20 <TableAction
17 :actions="[ 21 :actions="[
18 { 22 {
19 label: '编辑', 23 label: '编辑',
  24 + auth: 'api:yt:admin:editSysRole',
20 icon: 'clarity:note-edit-line', 25 icon: 'clarity:note-edit-line',
21 onClick: handleEdit.bind(null, record), 26 onClick: handleEdit.bind(null, record),
22 }, 27 },
23 { 28 {
24 label: '删除', 29 label: '删除',
  30 + auth: 'api:yt:admin:deleteSysRole',
25 icon: 'ant-design:delete-outlined', 31 icon: 'ant-design:delete-outlined',
26 color: 'error', 32 color: 'error',
27 ifShow: record.roleType != RoleEnum.SYS_ADMIN, 33 ifShow: record.roleType != RoleEnum.SYS_ADMIN,
@@ -46,10 +52,11 @@ @@ -46,10 +52,11 @@
46 import { columns, searchFormSchema } from './role.data'; 52 import { columns, searchFormSchema } from './role.data';
47 import { RoleEnum } from '/@/enums/roleEnum'; 53 import { RoleEnum } from '/@/enums/roleEnum';
48 import { useMessage } from '/@/hooks/web/useMessage'; 54 import { useMessage } from '/@/hooks/web/useMessage';
  55 + import { Authority } from '/@/components/Authority';
49 56
50 export default defineComponent({ 57 export default defineComponent({
51 name: 'RoleManagement', 58 name: 'RoleManagement',
52 - components: { BasicTable, RoleDrawer, TableAction }, 59 + components: { BasicTable, RoleDrawer, TableAction, Authority },
53 setup() { 60 setup() {
54 const { createMessage } = useMessage(); 61 const { createMessage } = useMessage();
55 const [registerDrawer, { openDrawer }] = useDrawer(); 62 const [registerDrawer, { openDrawer }] = useDrawer();
@@ -115,15 +122,25 @@ @@ -115,15 +122,25 @@
115 handleSuccess(); 122 handleSuccess();
116 } catch (e: any) {} 123 } catch (e: any) {}
117 } else { 124 } else {
  125 + isStatus.value = true;
118 try { 126 try {
119 await delRole(selectArray); 127 await delRole(selectArray);
120 createMessage.success('批量删除成功'); 128 createMessage.success('批量删除成功');
121 handleSuccess(); 129 handleSuccess();
122 selectArray.length = 0; 130 selectArray.length = 0;
  131 + setTimeout(() => {
  132 + isStatus.value = false;
  133 + }, 3000);
123 } catch (e: any) { 134 } catch (e: any) {
124 selectArray.length = 0; 135 selectArray.length = 0;
  136 + setTimeout(() => {
  137 + isStatus.value = false;
  138 + }, 3000);
125 } finally { 139 } finally {
126 selectArray.length = 0; 140 selectArray.length = 0;
  141 + setTimeout(() => {
  142 + isStatus.value = false;
  143 + }, 3000);
127 } 144 }
128 } 145 }
129 }; 146 };
@@ -7,10 +7,14 @@ @@ -7,10 +7,14 @@
7 :clickToRowSelect="false" 7 :clickToRowSelect="false"
8 > 8 >
9 <template #toolbar> 9 <template #toolbar>
10 - <a-button type="primary" @click="handleAdd"> 新增租户配置 </a-button>  
11 - <a-button color="error" :disabled="disabled" @click="handleMutilteDelete">  
12 - 批量删除  
13 - </a-button> 10 + <Authority value="api:yt:admin:addTenantConfig">
  11 + <a-button type="primary" @click="handleAdd"> 新增租户配置 </a-button>
  12 + </Authority>
  13 + <Authority value="api:yt:admin:deleteTenantConfig">
  14 + <a-button color="error" :disabled="disabled" @click="handleMutilteDelete">
  15 + 批量删除
  16 + </a-button>
  17 + </Authority>
14 </template> 18 </template>
15 <template #action="{ record }"> 19 <template #action="{ record }">
16 <TableAction 20 <TableAction
@@ -23,11 +27,13 @@ @@ -23,11 +27,13 @@
23 }, 27 },
24 { 28 {
25 label: '编辑', 29 label: '编辑',
  30 + auth: 'api:yt:admin:editTenantConfig',
26 icon: 'clarity:note-edit-line', 31 icon: 'clarity:note-edit-line',
27 onClick: handleEdit.bind(null, record), 32 onClick: handleEdit.bind(null, record),
28 }, 33 },
29 { 34 {
30 label: '删除', 35 label: '删除',
  36 + auth: 'api:yt:admin:deleteTenantConfig',
31 icon: 'ant-design:delete-outlined', 37 icon: 'ant-design:delete-outlined',
32 color: 'error', 38 color: 'error',
33 popConfirm: { 39 popConfirm: {
@@ -59,10 +65,11 @@ @@ -59,10 +65,11 @@
59 deleteTenantProfileApi, 65 deleteTenantProfileApi,
60 setTenantProfileIsDefaultApi, 66 setTenantProfileIsDefaultApi,
61 } from '/@/api/tenant/tenantApi'; 67 } from '/@/api/tenant/tenantApi';
  68 + import { Authority } from '/@/components/Authority';
62 69
63 export default defineComponent({ 70 export default defineComponent({
64 name: 'Index', 71 name: 'Index',
65 - components: { BasicTable, TenantSettingDrawer, TableAction }, 72 + components: { BasicTable, TenantSettingDrawer, TableAction, Authority },
66 setup() { 73 setup() {
67 const disabled = ref(true); 74 const disabled = ref(true);
68 let echoEditData = reactive({}); 75 let echoEditData = reactive({});
@@ -123,11 +130,15 @@ @@ -123,11 +130,15 @@
123 } 130 }
124 }; 131 };
125 const handleMutilteDelete = () => { 132 const handleMutilteDelete = () => {
  133 + disabled.value = true;
126 selectedRowKeys.forEach(async (f: any) => { 134 selectedRowKeys.forEach(async (f: any) => {
127 await deleteTenantProfileApi(f.id.id); 135 await deleteTenantProfileApi(f.id.id);
128 createMessage.success('删除成功'); 136 createMessage.success('删除成功');
129 reload(); 137 reload();
130 selectedRowKeys.length = 0; 138 selectedRowKeys.length = 0;
  139 + setTimeout(() => {
  140 + disabled.value = false;
  141 + }, 3000);
131 }); 142 });
132 }; 143 };
133 144
@@ -90,19 +90,25 @@ @@ -90,19 +90,25 @@
90 }; 90 };
91 91
92 async function handleSubmit() { 92 async function handleSubmit() {
93 - if (!unref(isUpdate)) {  
94 - getAllFieldsFunc();  
95 - await saveTenantProfileApi(postAllData);  
96 - createMessage.success('租户配置新增成功');  
97 - closeDrawer();  
98 - emit('success');  
99 - resetFields();  
100 - } else {  
101 - getAllFieldsFunc();  
102 - await saveTenantProfileApi(postAllData);  
103 - createMessage.success('租户配置编辑成功');  
104 - closeDrawer();  
105 - emit('success'); 93 + try {
  94 + setDrawerProps({ confirmLoading: true });
  95 + if (!unref(isUpdate)) {
  96 + getAllFieldsFunc();
  97 + await saveTenantProfileApi(postAllData);
  98 + createMessage.success('租户配置新增成功');
  99 + closeDrawer();
  100 + emit('success');
  101 + resetFields();
  102 + } else {
  103 + getAllFieldsFunc();
  104 + await saveTenantProfileApi(postAllData);
  105 + createMessage.success('租户配置编辑成功');
  106 + closeDrawer();
  107 + emit('success');
  108 + }
  109 + } catch (e) {
  110 + } finally {
  111 + setDrawerProps({ confirmLoading: false });
106 } 112 }
107 } 113 }
108 return { 114 return {
@@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
2 <BasicDrawer 2 <BasicDrawer
3 v-bind="$attrs" 3 v-bind="$attrs"
4 @register="tenantAdminDrawer" 4 @register="tenantAdminDrawer"
5 - showFooter  
6 title="租户管理员" 5 title="租户管理员"
7 width="60%" 6 width="60%"
8 @ok="handleSubmit" 7 @ok="handleSubmit"
@@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
2 <div> 2 <div>
3 <BasicTable @register="tenantTable"> 3 <BasicTable @register="tenantTable">
4 <template #toolbar> 4 <template #toolbar>
5 - <a-button type="primary" @click="handleCreate"> 新增租户</a-button> 5 + <Authority value="api:yt:admin:saveTenant">
  6 + <a-button type="primary" @click="handleCreate"> 新增租户</a-button>
  7 + </Authority>
6 </template> 8 </template>
7 <template #img="{ record }"> 9 <template #img="{ record }">
8 <TableImg 10 <TableImg
@@ -46,11 +48,13 @@ @@ -46,11 +48,13 @@
46 { 48 {
47 icon: 'clarity:note-edit-line', 49 icon: 'clarity:note-edit-line',
48 label: '编辑', 50 label: '编辑',
  51 + auth: 'api:yt:admin:editTenant',
49 onClick: handleEdit.bind(null, record), 52 onClick: handleEdit.bind(null, record),
50 }, 53 },
51 { 54 {
52 icon: 'ant-design:delete-outlined', 55 icon: 'ant-design:delete-outlined',
53 label: '删除', 56 label: '删除',
  57 + auth: 'api:yt:admin:deleteTenant',
54 color: 'error', 58 color: 'error',
55 popConfirm: { 59 popConfirm: {
56 title: '是否确认删除', 60 title: '是否确认删除',
@@ -75,8 +79,18 @@ @@ -75,8 +79,18 @@
75 import TenantDrawer from './TenantDrawer.vue'; 79 import TenantDrawer from './TenantDrawer.vue';
76 import TenantAdminDrawer from './TenantAdminDrawer.vue'; 80 import TenantAdminDrawer from './TenantAdminDrawer.vue';
77 import { useMessage } from '/@/hooks/web/useMessage'; 81 import { useMessage } from '/@/hooks/web/useMessage';
  82 + import { Authority } from '/@/components/Authority';
  83 +
78 export default defineComponent({ 84 export default defineComponent({
79 - components: { BasicTable, TableImg, Tag, TableAction, TenantDrawer, TenantAdminDrawer }, 85 + components: {
  86 + BasicTable,
  87 + TableImg,
  88 + Tag,
  89 + TableAction,
  90 + TenantDrawer,
  91 + TenantAdminDrawer,
  92 + Authority,
  93 + },
80 setup() { 94 setup() {
81 const [tenantDrawer, { openDrawer }] = useDrawer(); 95 const [tenantDrawer, { openDrawer }] = useDrawer();
82 const [tenantAdminDrawer, { openDrawer: openTenantAdminDrawer }] = useDrawer(); 96 const [tenantAdminDrawer, { openDrawer: openTenantAdminDrawer }] = useDrawer();
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 checkable 18 checkable
19 toolbar 19 toolbar
20 ref="treeRef" 20 ref="treeRef"
21 - title="菜单分配" 21 + title="权限分配"
22 :defaultExpandAll="true" 22 :defaultExpandAll="true"
23 /> 23 />
24 </template> 24 </template>
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 </BasicDrawer> 26 </BasicDrawer>
27 </template> 27 </template>
28 <script lang="ts"> 28 <script lang="ts">
29 - import { defineComponent, ref, computed, unref } from 'vue'; 29 + import { defineComponent, ref, computed, unref, nextTick } from 'vue';
30 import { BasicForm, useForm } from '/@/components/Form/index'; 30 import { BasicForm, useForm } from '/@/components/Form/index';
31 import { formSchema } from './role.data'; 31 import { formSchema } from './role.data';
32 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; 32 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
@@ -79,6 +79,7 @@ @@ -79,6 +79,7 @@
79 } 79 }
80 const originMenus = ref(); 80 const originMenus = ref();
81 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { 81 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
  82 + setDrawerProps({ confirmLoading: false });
82 resetFields(); 83 resetFields();
83 roleId.value = ''; 84 roleId.value = '';
84 // 在打开弹窗时清除所有选择的菜单 85 // 在打开弹窗时清除所有选择的菜单
@@ -96,14 +97,27 @@ @@ -96,14 +97,27 @@
96 //通过角色id去获取角色对应的菜单的ids 97 //通过角色id去获取角色对应的菜单的ids
97 roleMenus.value = await getMenusIdsByRoleId(data.record.id); 98 roleMenus.value = await getMenusIdsByRoleId(data.record.id);
98 originMenus.value = [...roleMenus.value]; 99 originMenus.value = [...roleMenus.value];
  100 + console.log('Query role ids', roleMenus.value);
  101 + console.log('TreeData ids', treeData.value);
99 for (let m of treeData.value) { 102 for (let m of treeData.value) {
  103 + console.log('m', m);
100 for (let m1 of roleMenus.value) { 104 for (let m1 of roleMenus.value) {
101 - // 利用continue特性优化一下性能  
102 - if (!(m.key === m1 && m.children.length)) continue;  
103 - useChildrenIdsRemoveParentId(m1, roleMenus.value); 105 + if (m?.key != m1 && m?.children.length == 0) {
  106 + useChildrenIdsRemoveParentId(m1, roleMenus.value);
  107 + }
104 } 108 }
105 } 109 }
106 - treeRef.value.setCheckedKeys(roleMenus.value); 110 + // for (let m of treeData.value) {
  111 + // for (let m1 of roleMenus.value) {
  112 + // if (m.key != m1 && m?.children.length == 0) {
  113 + // useChildrenIdsRemoveParentId(m1, roleMenus.value);
  114 + // }
  115 + // }
  116 + // }
  117 + nextTick(() => {
  118 + console.log('Finally data', roleMenus.value);
  119 + treeRef.value.setCheckedKeys(roleMenus.value);
  120 + });
107 roleId.value = data.record.id; 121 roleId.value = data.record.id;
108 setFieldsValue(data.record); 122 setFieldsValue(data.record);
109 } 123 }
@@ -124,10 +138,12 @@ @@ -124,10 +138,12 @@
124 roleType: RoleEnum.TENANT_ADMIN, 138 roleType: RoleEnum.TENANT_ADMIN,
125 menu: allCheckedKeys.value.length ? allCheckedKeys.value : originMenus.value, 139 menu: allCheckedKeys.value.length ? allCheckedKeys.value : originMenus.value,
126 }; 140 };
127 - await saveOrUpdateRoleInfoWithMenu(req);  
128 - closeDrawer();  
129 - emit('success');  
130 - createMessage.success(`${unref(isUpdate) ? '编辑' : '新增'}成功`); 141 + saveOrUpdateRoleInfoWithMenu(req).then(() => {
  142 + closeDrawer();
  143 + emit('success');
  144 + createMessage.success(`${unref(isUpdate) ? '编辑' : '新增'}成功`);
  145 + });
  146 + } catch {
131 } finally { 147 } finally {
132 setDrawerProps({ confirmLoading: false }); 148 setDrawerProps({ confirmLoading: false });
133 } 149 }
@@ -7,21 +7,27 @@ @@ -7,21 +7,27 @@
7 :clickToRowSelect="false" 7 :clickToRowSelect="false"
8 > 8 >
9 <template #toolbar> 9 <template #toolbar>
10 - <a-button type="primary" @click="handleCreate"> 新增角色 </a-button>  
11 - <a-button type="default" :disabled="disabled" @click="handleBatchDelete">  
12 - 批量删除  
13 - </a-button> 10 + <Authority value="api:yt:admin:addTenantRole">
  11 + <a-button type="primary" @click="handleCreate"> 新增角色 </a-button>
  12 + </Authority>
  13 + <Authority value="api:yt:admin:deleteTenantRole">
  14 + <a-button type="default" :disabled="disabled" @click="handleBatchDelete">
  15 + 批量删除
  16 + </a-button>
  17 + </Authority>
14 </template> 18 </template>
15 <template #action="{ record }"> 19 <template #action="{ record }">
16 <TableAction 20 <TableAction
17 :actions="[ 21 :actions="[
18 { 22 {
19 label: '编辑', 23 label: '编辑',
  24 + auth: 'api:yt:admin:editTenantRole',
20 icon: 'clarity:note-edit-line', 25 icon: 'clarity:note-edit-line',
21 onClick: handleEdit.bind(null, record), 26 onClick: handleEdit.bind(null, record),
22 }, 27 },
23 { 28 {
24 label: '删除', 29 label: '删除',
  30 + auth: 'api:yt:admin:deleteTenantRole',
25 icon: 'ant-design:delete-outlined', 31 icon: 'ant-design:delete-outlined',
26 color: 'error', 32 color: 'error',
27 popConfirm: { 33 popConfirm: {
@@ -45,10 +51,11 @@ @@ -45,10 +51,11 @@
45 import RoleDrawer from './RoleDrawer.vue'; 51 import RoleDrawer from './RoleDrawer.vue';
46 import { columns, searchFormSchema } from './role.data'; 52 import { columns, searchFormSchema } from './role.data';
47 import { RoleEnum } from '/@/enums/roleEnum'; 53 import { RoleEnum } from '/@/enums/roleEnum';
  54 + import { Authority } from '/@/components/Authority';
48 55
49 export default defineComponent({ 56 export default defineComponent({
50 name: 'TenantRoleManagement', 57 name: 'TenantRoleManagement',
51 - components: { BasicTable, RoleDrawer, TableAction }, 58 + components: { BasicTable, RoleDrawer, TableAction, Authority },
52 setup() { 59 setup() {
53 const [registerDrawer, { openDrawer }] = useDrawer(); 60 const [registerDrawer, { openDrawer }] = useDrawer();
54 let selectedRowKeys: Array<string> = []; 61 let selectedRowKeys: Array<string> = [];
@@ -106,12 +113,16 @@ @@ -106,12 +113,16 @@
106 } 113 }
107 }; 114 };
108 const handleBatchDelete = async () => { 115 const handleBatchDelete = async () => {
  116 + disabled.value = true;
109 let roleIds = selectedRowKeys.map((m: any) => { 117 let roleIds = selectedRowKeys.map((m: any) => {
110 return m.id; 118 return m.id;
111 }); 119 });
112 await delRole(roleIds); 120 await delRole(roleIds);
113 createMessage.success('批量删除成功'); 121 createMessage.success('批量删除成功');
114 reload(); 122 reload();
  123 + setTimeout(() => {
  124 + disabled.value = false;
  125 + }, 3000);
115 }; 126 };
116 function handleSuccess() { 127 function handleSuccess() {
117 reload(); 128 reload();