修改角色后更新菜单

This commit is contained in:
1147680382@qq.com
2025-05-26 11:59:09 +08:00
parent 21eeb3c8ad
commit ea912c878c
5 changed files with 34 additions and 28 deletions
+1
View File
@@ -34,6 +34,7 @@ onMounted(() => {
}) })
const gotoLogin = () => { const gotoLogin = () => {
sessionStorage.removeItem("token"); sessionStorage.removeItem("token");
sessionStorage.removeItem("userInfo");
router.push("/login"); router.push("/login");
}; };
</script> </script>
+15 -20
View File
@@ -1,13 +1,9 @@
<template> <template>
<div <div id="guide" class="menu" :style="{
id="guide" width: store.getters.isCollapse == true ? '' : '200px',
class="menu" height: '100%',
:style="{ color: themeConfig.textColor,
width: store.getters.isCollapse == true ? '' : '200px', }">
height: '100%',
color: themeConfig.textColor,
}"
>
<div class="logo" v-if="!store.getters.isCollapse"> <div class="logo" v-if="!store.getters.isCollapse">
<img src="../../assets/logo.png" alt="" style="margin-right: 5px" /> BIG CUTE <img src="../../assets/logo.png" alt="" style="margin-right: 5px" /> BIG CUTE
</div> </div>
@@ -15,16 +11,9 @@
<img src="../../assets/logo.png" alt="" /> <img src="../../assets/logo.png" alt="" />
</div> </div>
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<el-menu <el-menu :default-active="activeMenu" :router="true" :collapse="store.getters.isCollapse"
:default-active="activeMenu" :collapse-transition="false" :unique-opened="true" :background-color="themeConfig.backgroundColor"
:router="true" :text-color="themeConfig.textColor" :active-text-color="themeConfig.primary">
:collapse="store.getters.isCollapse"
:collapse-transition="false"
:unique-opened="true"
:background-color="themeConfig.backgroundColor"
:text-color="themeConfig.textColor"
:active-text-color="themeConfig.primary"
>
<menuItems :menuList="menuList"></menuItems> <menuItems :menuList="menuList"></menuItems>
</el-menu> </el-menu>
</el-scrollbar> </el-scrollbar>
@@ -38,7 +27,8 @@ import menuItems from "./components/menuItems.vue";
// 引入本地路由表渲染导航栏 // 引入本地路由表渲染导航栏
// import menuTable from "./menuTable.js"; // import menuTable from "./menuTable.js";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import {menuTable} from "../../router/generateMenu.js" import { generateMenu } from "../../router/generateMenu.js"
import routerList from "../../router/originalRoutingTable.js";
const route = useRoute(); const route = useRoute();
const activeMenu = computed(() => { const activeMenu = computed(() => {
return route.path; return route.path;
@@ -54,6 +44,9 @@ const themeConfig = store.getters.themeConfig;
// 菜单表存在后端的操作方式 // 菜单表存在后端的操作方式
onMounted(() => { onMounted(() => {
// 权限检查
const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
const menuTable = generateMenu(routerList, userInfo.role)
// 获取本地菜单表渲染 // 获取本地菜单表渲染
menuList.value = menuTable; menuList.value = menuTable;
}); });
@@ -61,6 +54,7 @@ onMounted(() => {
<style scoped lang="scss"> <style scoped lang="scss">
.menu { .menu {
// width: 200px; // width: 200px;
.logo { .logo {
height: 48px; height: 48px;
@@ -69,6 +63,7 @@ onMounted(() => {
list-style: none; list-style: none;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
img { img {
width: 25px; width: 25px;
vertical-align: middle; vertical-align: middle;
-5
View File
@@ -1,4 +1,3 @@
import routerList from "./originalRoutingTable";
// 递归处理路由列表生成菜单数据 // 递归处理路由列表生成菜单数据
export const generateMenu = (routes, userRole) => { export const generateMenu = (routes, userRole) => {
const menuList = []; const menuList = [];
@@ -59,10 +58,6 @@ export const generateMenu = (routes, userRole) => {
return menuList; return menuList;
}; };
// 权限检查
const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
console.log(generateMenu(routerList, userInfo.role), "menuTable")
export const menuTable = generateMenu(routerList, userInfo.role)
// 使用示例 // 使用示例
/* /*
+14
View File
@@ -206,6 +206,7 @@ import {
syncUsers, syncUsers,
} from "../../api/modules/index"; } from "../../api/modules/index";
import { Refresh, Search, Plus } from '@element-plus/icons-vue'; import { Refresh, Search, Plus } from '@element-plus/icons-vue';
import { useRouter } from 'vue-router';
// 组别列表数据 // 组别列表数据
const groupList = ref([]); const groupList = ref([]);
@@ -278,6 +279,8 @@ const groupRules = {
] ]
}; };
const router = useRouter();
// 获取组别列表 // 获取组别列表
const fetchGroupList = async () => { const fetchGroupList = async () => {
try { try {
@@ -345,11 +348,22 @@ const handleRoleChange = async (user, role) => {
); );
if (res.errcode === 0) { if (res.errcode === 0) {
ElMessage.success("修改成功"); ElMessage.success("修改成功");
const userInfo = JSON.parse(sessionStorage.getItem("userInfo")) || {}
// 检查是否是当前登录用户
if (user.userid === userInfo?.userid) {
ElMessage.warning("您已修改了自己的角色,需要重新登录");
gotoLogin()
}
} }
} catch (error) { } catch (error) {
ElMessage.error("修改失败"); ElMessage.error("修改失败");
} }
}; };
const gotoLogin = () => {
sessionStorage.removeItem("token");
sessionStorage.removeItem("userInfo");
router.push("/login");
};
// 移除成员 // 移除成员
const handleRemoveUser = async (user) => { const handleRemoveUser = async (user) => {
+4 -3
View File
@@ -38,8 +38,8 @@ const loginIn = async (code) => {
type: "success", type: "success",
}); });
// 拿用户信息 // 拿用户信息
obInformation(); await obInformation();
router.push("/"); // router.push("/");
}; };
// 登录判断 // 登录判断
const token = sessionStorage.getItem("token"); const token = sessionStorage.getItem("token");
@@ -79,7 +79,8 @@ const obInformation = async () => {
}); });
sessionStorage.setItem("userInfo", JSON.stringify(userInfo)); sessionStorage.setItem("userInfo", JSON.stringify(userInfo));
router.push("/"); // router.push("/");
router.replace("/")
}; };
</script> </script>