|
@@ -12,9 +12,16 @@ import { getDeleteUserApi } from "@/api/userSetting";
|
|
|
import {
|
|
|
getMenuList,
|
|
|
getMenuListCodeForRole,
|
|
|
- postAddMenuList
|
|
|
+ postAddMenuList,
|
|
|
+ updateMenu
|
|
|
} from "@/api/menu";
|
|
|
-import { postPageRole, postDelRole, postPageUserByRole } from "@/api/roles";
|
|
|
+import {
|
|
|
+ postPageRole,
|
|
|
+ postDelRole,
|
|
|
+ postPageUserByRole,
|
|
|
+ postUpdateRole,
|
|
|
+ getUserPermissionsByRoleCode
|
|
|
+} from "@/api/roles";
|
|
|
import pngcaret from "@/assets/icon-png/caret-right-small.svg";
|
|
|
import UserPageTable from "@/components/UserPageTable/index.vue";
|
|
|
const UserTable = ref();
|
|
@@ -85,14 +92,22 @@ postPageRoleApi();
|
|
|
// 查看角色组
|
|
|
const bgColor = ref(null);
|
|
|
const lookRoles = item => {
|
|
|
- console.log(item);
|
|
|
paramsPageUser.roleName = item.roleName;
|
|
|
paramsPageUser.roleCode = item.roleCode;
|
|
|
bgColor.value = item.id;
|
|
|
rolesList.rolesName = item.roleName;
|
|
|
Object.assign(rolesList.addPerson, item);
|
|
|
+ getMenuListApi();
|
|
|
postPageUserByRoleApi();
|
|
|
getMenuListCodeForRoleApi(item);
|
|
|
+ getUserPermissionsByRoleCodeApi(item.roleCode);
|
|
|
+ Object.assign(roleParams, {
|
|
|
+ roleName: "",
|
|
|
+ roleSort: 0,
|
|
|
+ menuCodes: [],
|
|
|
+ roleCode: "",
|
|
|
+ remark: ""
|
|
|
+ });
|
|
|
};
|
|
|
// 添加角色
|
|
|
const addRoles = () => {
|
|
@@ -189,25 +204,22 @@ const postPageUserByRoleApi = async () => {
|
|
|
const handleClick = (tab, event) => {
|
|
|
console.log(tab, event);
|
|
|
};
|
|
|
-const getMenuListApi = async () => {
|
|
|
- const { code, data } = await getMenuList();
|
|
|
- console.log("菜单", data);
|
|
|
+
|
|
|
+const postAddMenuListApi = async () => {
|
|
|
+ const { code } = await updateMenu({
|
|
|
+ menuName: "指标库",
|
|
|
+ menuType: "menu",
|
|
|
+ parentCode: "",
|
|
|
+ orderNum: 1,
|
|
|
+ url: "",
|
|
|
+ moduleUrl: "/indexDefine",
|
|
|
+ icon: "",
|
|
|
+ // remark: "",
|
|
|
+ remark: "系统管理",
|
|
|
+ menuCode: "menu340900015906103296"
|
|
|
+ });
|
|
|
};
|
|
|
-getMenuListApi();
|
|
|
-// const postAddMenuListApi = async () => {
|
|
|
-// const { code } = await postAddMenuList({
|
|
|
-// menuName: "指标库",
|
|
|
-// menuType: "menu",
|
|
|
-// parentCode: "",
|
|
|
-// orderNum: 0,
|
|
|
-// url: "",
|
|
|
-// moduleUrl: "/IndexDefine",
|
|
|
-// icon: "",
|
|
|
-// remark: "",
|
|
|
-// menuCode: ""
|
|
|
-// });
|
|
|
-// };
|
|
|
-// postAddMenuListApi();
|
|
|
+postAddMenuListApi();
|
|
|
// {
|
|
|
// menuName: "新建模板",
|
|
|
// menuType: "menu",
|
|
@@ -234,6 +246,123 @@ const handleCurrentChange = val => {
|
|
|
paramsPageUser.pageNumber = val;
|
|
|
postPageUserByRoleApi();
|
|
|
};
|
|
|
+// 查看角色菜单权限表
|
|
|
+const menuListRole = ref<any>([]);
|
|
|
+const menuListRoleList = ref<any>([]);
|
|
|
+function addShowProperty(menuArray) {
|
|
|
+ menuArray.forEach(menu => {
|
|
|
+ menu.show = false; // 添加 show 属性
|
|
|
+ if (menu.childrenRes) {
|
|
|
+ addShowProperty(menu.childrenRes); // 递归处理子菜单
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return menuArray; // 返回修改后的菜单数组
|
|
|
+}
|
|
|
+
|
|
|
+const getMenuListApi = async () => {
|
|
|
+ const { code, data } = await getMenuList();
|
|
|
+ if (code === 200) {
|
|
|
+ let menuData = data;
|
|
|
+ let modifiedMenuData = addShowProperty(menuData);
|
|
|
+ modifiedMenuData.forEach(item => {
|
|
|
+ item.allShow = false;
|
|
|
+ });
|
|
|
+ function checkMenuCodes(menuItems) {
|
|
|
+ menuListRole.value.forEach(item => {
|
|
|
+ const hasRole = menuListRole.value.includes(item.menuCode);
|
|
|
+ item.show = hasRole;
|
|
|
+
|
|
|
+ // Recursively check children
|
|
|
+ if (item.childrenRes && item.childrenRes.length > 0) {
|
|
|
+ checkMenuCodes(item.childrenRes);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Check if all required roles are present
|
|
|
+ if (item.childrenRes) {
|
|
|
+ const allShow = item.childrenRes.every(child => child.show);
|
|
|
+ if (allShow && item.menuCode === item.parentCode) {
|
|
|
+ item.allShow = true; // Only set allShow for the top-level menus
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ checkMenuCodes(modifiedMenuData);
|
|
|
+ menuListRoleList.value = modifiedMenuData;
|
|
|
+ console.log("菜单列表", menuListRoleList.value);
|
|
|
+ }
|
|
|
+};
|
|
|
+// getMenuListApi();
|
|
|
+const getUserPermissionsByRoleCodeApi = async roleCode => {
|
|
|
+ const { code, msg, data } = await getUserPermissionsByRoleCode({
|
|
|
+ roleCode
|
|
|
+ });
|
|
|
+ if (code == 200) {
|
|
|
+ // getMenuListApi();
|
|
|
+ menuListRole.value = data;
|
|
|
+ }
|
|
|
+};
|
|
|
+const roleParams = reactive({
|
|
|
+ roleName: "",
|
|
|
+ roleSort: 0,
|
|
|
+ menuCodes: [],
|
|
|
+ roleCode: "",
|
|
|
+ remark: ""
|
|
|
+});
|
|
|
+const postUpdateRoleApi = async () => {
|
|
|
+ const { code, msg, data } = await postUpdateRole(roleParams);
|
|
|
+ if (code == 200) {
|
|
|
+ getUserPermissionsByRoleCodeApi(roleParams.roleCode);
|
|
|
+ ElMessage.success("修改成功");
|
|
|
+ } else {
|
|
|
+ ElMessage.error(msg);
|
|
|
+ }
|
|
|
+};
|
|
|
+// 添加菜单code
|
|
|
+function collectMenuCodes(menu) {
|
|
|
+ // 添加当前菜单的 menuCode 到 roleParams.menuCodes
|
|
|
+ roleParams.menuCodes.push(menu.menuCode);
|
|
|
+ menu.show = true;
|
|
|
+ // 如果有子菜单,递归处理
|
|
|
+ if (menu.childrenRes && menu.childrenRes.length > 0) {
|
|
|
+ menu.childrenRes.forEach(child => {
|
|
|
+ collectMenuCodes(child);
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+function collectMenuShow(menu) {
|
|
|
+ // 添加当前菜单的 menuCode 到 roleParams.menuCodes
|
|
|
+ menu.show = false;
|
|
|
+ // 如果有子菜单,递归处理
|
|
|
+ if (menu.childrenRes && menu.childrenRes.length > 0) {
|
|
|
+ menu.childrenRes.forEach(child => {
|
|
|
+ collectMenuCodes(child);
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+const roleShowClick = (item, type: any) => {
|
|
|
+ roleParams.roleName = rolesList.addPerson.roleName;
|
|
|
+ roleParams.roleCode = rolesList.addPerson.roleCode;
|
|
|
+ console.log("角色", item);
|
|
|
+ if (type) {
|
|
|
+ // 不是全选
|
|
|
+ if (item.show) {
|
|
|
+ roleParams.menuCodes.push(item.menuCode);
|
|
|
+ postUpdateRoleApi();
|
|
|
+ } else {
|
|
|
+ roleParams.menuCodes.filter(value => value !== item.menuCode);
|
|
|
+ postUpdateRoleApi();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!item.allShow) {
|
|
|
+ collectMenuCodes(item);
|
|
|
+ postUpdateRoleApi();
|
|
|
+ } else {
|
|
|
+ roleParams.menuCodes = [];
|
|
|
+ postUpdateRoleApi();
|
|
|
+ collectMenuShow(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
@@ -415,41 +544,63 @@ const handleCurrentChange = val => {
|
|
|
</el-tab-pane>
|
|
|
<Auth :value="['权限管理']">
|
|
|
<el-tab-pane label="权限管理" name="second">
|
|
|
- <el-table :data="tableData" border style="width: 100%">
|
|
|
+ <el-table :data="menuListRoleList" border style="width: 100%">
|
|
|
<el-table-column prop="date" label="模块">
|
|
|
<template #default="{ row }">
|
|
|
<div>
|
|
|
- <input v-model="row.show" type="checkbox" />{{ row.date }}
|
|
|
- <br />
|
|
|
- <input v-model="row.show1" type="checkbox" />{{ row.name }}
|
|
|
- <br />
|
|
|
- <input v-model="row.show2" type="checkbox" />{{
|
|
|
- row.address
|
|
|
- }}
|
|
|
+ <input
|
|
|
+ v-model="row.show"
|
|
|
+ type="checkbox"
|
|
|
+ @click="roleShowClick(row, (type = 1))"
|
|
|
+ />{{ row.menuName }}
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="name" label="菜单">
|
|
|
<template #default="{ row }">
|
|
|
- <div>
|
|
|
- <input v-model="row.show" type="checkbox" />{{ row.date }}
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <input v-model="row.show" type="checkbox" />{{ row.date }}
|
|
|
+ <div v-for="item in row.childrenRes" :key="item.childrenRes">
|
|
|
+ <div
|
|
|
+ v-for="item1 in item.childrenRes"
|
|
|
+ :key="item1.menuCode"
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-model="item1.show"
|
|
|
+ type="checkbox"
|
|
|
+ @click="roleShowClick(row, (type = 1))"
|
|
|
+ />{{ item1.menuName }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="address" label="全选">
|
|
|
<template #default="{ row }">
|
|
|
<div>
|
|
|
- <input v-model="row.show" type="checkbox" />{{ row.date }}
|
|
|
+ <input
|
|
|
+ v-model="row.allShow"
|
|
|
+ type="checkbox"
|
|
|
+ @click="roleShowClick(row, (type = 0))"
|
|
|
+ />{{ row.date }}全选
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="address" label="权限点">
|
|
|
<template #default="{ row }">
|
|
|
- <div>
|
|
|
- <input v-model="row.show" type="checkbox" />{{ row.date }}
|
|
|
+ <div v-for="item in row.childrenRes" :key="item.childrenRes">
|
|
|
+ <div
|
|
|
+ v-for="item1 in item.childrenRes"
|
|
|
+ :key="item1.menuCode"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ v-for="item2 in item1.childrenRes"
|
|
|
+ :key="item2.menuCode"
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-model="item2.show"
|
|
|
+ type="checkbox"
|
|
|
+ @click="roleShowClick(row, (type = 1))"
|
|
|
+ />{{ item2.menuName }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|