Ver Fonte

Merge branch 'master' of http://git.mydig.net/Sagoo-Cloud/sagoo-admin-ui

yukai há 3 anos atrás
pai
commit
d01b735fc4

+ 3 - 0
src/api/system/index.ts

@@ -46,6 +46,9 @@ export default {
     editRole: (data: object) => put('/system/role/edit', data),
     auth: {
       getList: (itemsType: 'menu' | 'button' | 'column' | 'api' | string, menuIds?: number[]) => get('/system/authorize/query', { itemsType, menuIds }),
+      set: (data: object) => post('/system/authorize/Add', data),
+      // 判断是否允许给角色授权
+      isAllow: (roleId: number) => get('/system/authorize/isAllow', { roleId }),
     }
   },
   org: {

+ 7 - 7
src/views/system/role/component/editRole.vue

@@ -3,7 +3,7 @@
     <el-dialog :title="(formData.id===0?'添加':'修改')+'角色'" v-model="isShowDialog" width="769px">
       <el-form ref="formRef" :model="formData" :rules="rules" size="default" label-width="90px">
         <el-row :gutter="35">
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
             <el-form-item label="上级角色">
               <el-cascader :options="list" :props="{ label: 'name',value: 'id',checkStrictly: true,emitPath: false }" placeholder="请选择上级菜单" clearable class="w100" v-model="formData.parentId">
                 <template #default="{ node, data }">
@@ -13,27 +13,27 @@
               </el-cascader>
             </el-form-item>
           </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="角色名称" prop="name">
               <el-input v-model="formData.name" placeholder="请输入角色名称" clearable></el-input>
             </el-form-item>
           </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="排序">
               <el-input-number v-model="formData.listOrder" :min="0" controls-position="right" placeholder="请输入排序" class="w100" />
             </el-form-item>
           </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
             <el-form-item label="角色状态">
               <el-switch v-model="formData.status" :active-value="1" :inactive-value="0" inline-prompt active-text="启" inactive-text="禁"></el-switch>
             </el-form-item>
           </el-col>
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
             <el-form-item label="角色描述">
               <el-input v-model="formData.remark" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
             </el-form-item>
           </el-col>
-          <!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+          <!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
             <el-form-item label="菜单权限">
               <el-row :gutter="35">
                 <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -41,7 +41,7 @@
                   <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox>
                   <el-checkbox v-model="menuCheckStrictly" @change="handleCheckedTreeConnect($event)">父子联动</el-checkbox>
                 </el-col>
-                <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                   <el-tree :data="menuData" ref="menuRef" :props="menuProps" :default-checked-keys="formData.menuIds" node-key="id" show-checkbox class="menu-data-tree tree-border" :check-strictly="!menuCheckStrictly" />
                 </el-col>
               </el-row>

+ 45 - 6
src/views/system/role/component/permission.vue

@@ -9,10 +9,10 @@
         </el-button>
         <template #dropdown>
           <el-dropdown-menu>
-            <el-dropdown-item>全部勾选</el-dropdown-item>
-            <el-dropdown-item>取消全选</el-dropdown-item>
-            <el-dropdown-item>展开所有</el-dropdown-item>
-            <el-dropdown-item>折叠所有</el-dropdown-item>
+            <el-dropdown-item @click.native="checkAll(true)">全部勾选</el-dropdown-item>
+            <el-dropdown-item @click.native="checkAll(false)">取消全选</el-dropdown-item>
+            <el-dropdown-item @click.native="expand(true)">展开所有</el-dropdown-item>
+            <el-dropdown-item @click.native="expand(false)">折叠所有</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -36,6 +36,7 @@
 <script lang="ts" setup>
 import { ref } from 'vue';
 import api from '/@/api/system';
+import { ElMessage } from 'element-plus';
 const isShowDialog = ref(false);
 const btnLoading = ref(false);
 const step = ref(0);
@@ -73,6 +74,13 @@ const cancel = () => {
 	isShowDialog.value = false;
 };
 
+const expand = (expand: boolean) => {
+	const nodes = treeRef.value.store.nodesMap;
+	for (let i in nodes) {
+		nodes[i].expanded = expand;
+	}
+};
+
 const prev = async () => {
 	const currentStep = step.value;
 	const prevStep = step.value - 1;
@@ -95,9 +103,21 @@ const next = async () => {
 	step.value = nextStep;
 };
 
+// 选中状态变化
 const checkChange = () => {
 	idsList[step.value].value = treeRef.value.getCheckedKeys(step.value === 0 ? false : true);
 };
+
+// 全选取消全选
+const checkAll = (all: boolean) => {
+	if (!all) {
+		treeRef.value.setCheckedKeys([]);
+	} else {
+		const ids = deepTree(treeDataList[step.value].value, []);
+		treeRef.value.setCheckedKeys(ids);
+	}
+};
+
 const submit = async () => {
 	const data = {
 		menuIds: menuIds.value,
@@ -106,10 +126,29 @@ const submit = async () => {
 		apiIds: apiIds.value,
 		roleId: roleId.value,
 	};
-	console.log(data);
+	// console.log(data);
+
+	btnLoading.value = true;
+	api.role.auth
+		.set(data)
+		.then(() => {
+			ElMessage.success('权限设置成功');
+		})
+		.finally(() => {
+			btnLoading.value = false;
+			isShowDialog.value = false;
+		});
 };
 
-openDialog({ name: '超级管理员', id: 3 });
+function deepTree(tree: any[], arr: number[]) {
+	for (let item of tree) {
+		arr.push(item.id);
+		if (item.children?.length) deepTree(item.children, arr);
+	}
+	return arr;
+}
+
+// openDialog({ name: '超级管理员', id: 3 });
 
 defineExpose({ openDialog });
 </script>

+ 20 - 13
src/views/system/role/index.vue

@@ -45,7 +45,8 @@
           <template #default="scope">
             <el-button size="small" type="text" @click="onOpenEditRole(scope.row)">修改</el-button>
             <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-            <el-dropdown size="small">
+            <el-button size="small" text type="success" @click="permission(scope.row)">角色权限</el-button>
+            <!-- <el-dropdown size="small">
               <el-button type="text" size="small" style="margin-top:1px;margin-left:10px">更多
                 <el-icon>
                   <ele-ArrowDown />
@@ -57,7 +58,7 @@
                   <el-dropdown-item @click.native="permission(scope.row)">角色权限</el-dropdown-item>
                 </el-dropdown-menu>
               </template>
-            </el-dropdown>
+            </el-dropdown> -->
           </template>
         </el-table-column>
       </el-table>
@@ -138,24 +139,30 @@ export default defineComponent({
 				confirmButtonText: '确认',
 				cancelButtonText: '取消',
 				type: 'warning',
-			})
-				.then(() => {
-					api.role.deleteRole(row.id).then(() => {
-						ElMessage.success('删除成功');
-						proxy.$refs['editRoleRef'].resetMenuSession();
-						roleList();
-					});
-				})
-				.catch(() => {});
+			}).then(() => {
+				api.role.deleteRole(row.id).then(() => {
+					ElMessage.success('删除成功');
+					proxy.$refs['editRoleRef'].resetMenuSession();
+					roleList();
+				});
+			});
 		};
+
 		// 设置权限
-		const permission = (row: any) => {
-			permissionRef.value.openDialog(row);
+		const permission = async (row: any) => {
+			const { isAllow } = await api.role.auth.isAllow(row.id);
+			if (isAllow) {
+				permissionRef.value.openDialog(row);
+			} else {
+				ElMessage.error('该角色禁止被授权');
+			}
 		};
+
 		// 页面加载时
 		onMounted(() => {
 			initTableData();
 		});
+
 		return {
 			addRoleRef,
 			editRoleRef,