diff --git a/src/home.vue b/src/home.vue
index 11a79faf66c86346e52a9eb24986f19ae15542aa..5bf83f67441050d12c6534956e99be8a8f08d1de 100644
--- a/src/home.vue
+++ b/src/home.vue
@@ -61,7 +61,7 @@ const router = useRouter();
const { proxy } = getCurrentInstance();
const menuInfoStore = menuStore();
const userStore = useUserInfoStore();
-const { activeTabArray, editableTabsValue } = storeToRefs(menuInfoStore); // 响应式
+const { activeTabArray, editableTabsValue, allArray } = storeToRefs(menuInfoStore); // 响应式
const { userInfo } = storeToRefs(userStore);
const userData = ref(null);
const breadList = ref([]);
@@ -235,8 +235,10 @@ onMounted(async () => {
document.addEventListener('click', handleClickOutside);
getMatched();
try {
- const res = await proxy.$api.menus();
- userData.value = res.data;
+ userData.value = allArray.value;
+ return;
+ // const res = await proxy.$api.menus();
+ // userData.value = res.data;
getscoket();
} catch (error) {
console.error('失败信息:', error);
diff --git a/src/main.js b/src/main.js
index a2d99aae9c34ae40bb1275becc98c2a74e58e497..e9656745ef733853c10c72e14f2a48d07cf3a445 100644
--- a/src/main.js
+++ b/src/main.js
@@ -13,7 +13,7 @@ const app = createApp(App);
app.config.globalProperties.$api = axios;
app.config.globalProperties.$icon = ElementPlusIconsVue;
// size: 'small',
-app.use(pinia).use(router).use(ElementPlus, { locale: zhCn, zIndex: 3000 });
+app.use(router).use(pinia).use(ElementPlus, { locale: zhCn, zIndex: 3000 });
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component);
}
diff --git a/src/pages/404.vue b/src/pages/404.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f59f58070a5116d35d3f53bd5bee16c7777d66c7
--- /dev/null
+++ b/src/pages/404.vue
@@ -0,0 +1,9 @@
+
+
+
+
+

+
页面不存在
+
+
+
diff --git a/src/pages/systemSetting/roleManagement.vue b/src/pages/systemSetting/roleManagement.vue
index 052e3281680d7e9593c67c257433c0ccea8ebc39..663b9b936ead044d2b759fe82c445f632515adf1 100644
--- a/src/pages/systemSetting/roleManagement.vue
+++ b/src/pages/systemSetting/roleManagement.vue
@@ -7,13 +7,13 @@
-
+
-
+
+
+
+
+
@@ -56,14 +56,37 @@
保存
-
-
+
+
+
+ 父子联动
+
+
+
+
+
+
+ 取消
+ 保存
+
+
@@ -134,16 +185,13 @@ onMounted(() => {
cursor: pointer;
}
.iconS {
- .el-icon-check {
- color: #00ff00;
- font-weight: 800;
- font-size: 20px;
- }
+ font-size: 22px;
+}
+.el-icon-check {
+ color: #00ff00;
+}
- .el-icon-close {
- color: #ff0000;
- font-weight: 800;
- font-size: 20px;
- }
+.el-icon-close {
+ color: #ff0000;
}
diff --git a/src/router/index.js b/src/router/index.js
index 87c405bd48022573cd120c8504a2c55e8dbda2b4..fb4acb113439b07d9628001b0a74e890006225d1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -37,6 +37,12 @@ const router = createRouter({
],
},
{
+ name: '404',
+ path: '/404',
+ component: () => import('@/pages/404.vue'),
+ },
+ {
+ name: 'login',
path: '/login',
component: () => import('@/pages/login.vue'),
},
@@ -61,10 +67,10 @@ function transformRoute(route, parentPath = '') {
transformed.component = components[componentPath];
} else {
console.error(`组件不存在: ${componentPath}`);
+ // router.addRoute({ path: '/:catchAll(.*)', redirect: '/404' });
return null; // 跳过无效路由
}
}
-
return transformed;
}
@@ -73,15 +79,19 @@ const setupDynamicRoutes = async () => {
try {
const res = await api.menus();
const backendRoutes = res.data;
- // const useMenuStores = useMenuStore();
- // useMenuStores.changeRemoveAll();
-
+ const useMenuStores = useMenuStore();
+ useMenuStores.getAllMenu(backendRoutes);
// 转换路由
const transformedRoutes = backendRoutes.map(route => transformRoute(route)).filter(Boolean); // 过滤掉无效路由
// 添加动态路由到 `/home`
transformedRoutes.forEach(route => {
router.addRoute('home', route);
});
+ // 添加一个catch-all路由,确保无效路由会重定向到 404
+ router.addRoute({
+ path: '/:catchAll(.*)', // 使用 catchAll 匹配所有路径
+ redirect: '/404', // 重定向到 404 页面
+ });
return res;
} catch (error) {
console.error('Failed to setup dynamic routes:', error);
@@ -93,18 +103,20 @@ let dynamicRoutesLoaded = false; // 防止重复加载动态路由
router.beforeEach(async (to, from, next) => {
NProgress.start(); // 开启进度条
const useMenuStores = useMenuStore();
- if (to.path === '/login') {
+ const funcAll = () => {
localStorage.clear(); // 清除所有 localStorage 数据
-
useMenuStores.changeRemoveAll();
+ };
+ if (to.path === '/login') {
+ // localStorage.clear(); // 清除所有 localStorage 数据
+ // useMenuStores.changeRemoveAll();
+ funcAll();
next(); // 登录页直接放行
return;
}
// 如果没有 refToken 则跳转回登录页
if (!localStorage.getItem('refreshToken')) {
- console.log('没有refToken');
- localStorage.clear(); // 清除所有 localStorage 数据
- useMenuStores.changeRemoveAll();
+ funcAll();
return next('/login');
}
@@ -115,8 +127,7 @@ router.beforeEach(async (to, from, next) => {
next({ ...to, replace: true }); // 重新导航到当前路径,确保新添加的路由生效
return;
} catch (err) {
- localStorage.clear(); // 清除所有 localStorage 数据
- useMenuStores.changeRemoveAll();
+ funcAll();
next('/login'); // 跳转到登录页
}
} else {
diff --git a/src/stortes/menu.js b/src/stortes/menu.js
index ea3e89b6b2bf85443bebb97a1106171bde4054b0..e94efd751a202b400df42590d1cc3568e66062f7 100644
--- a/src/stortes/menu.js
+++ b/src/stortes/menu.js
@@ -10,9 +10,15 @@ const menuStore = defineStore('menu', {
},
],
editableTabsValue: '/index',
+ allArray: [],
}),
// 修改
actions: {
+ // 获取所有菜单
+ getAllMenu(val) {
+ this.allArray = val;
+ return val;
+ },
/**
* 添加一个新的菜单项到活跃菜单数组中。
* 如果新菜单项的URL已经存在于活跃菜单数组中,则不执行任何操作。
@@ -88,4 +94,4 @@ const menuStore = defineStore('menu', {
},
});
-export default menuStore;
\ No newline at end of file
+export default menuStore;
diff --git a/src/utils/request.js b/src/utils/request.js
index d184865927922e669af382ba80e36dc9af2ad7e4..ed00fd2d9a0b1fd9c2bbd9537fe3a9fd06a75074 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -210,11 +210,13 @@ export default {
detailRoles(params) {
return oGet(baseUrl + '/role/detail', params);
},
+
+ // 给角色分配菜单
assignMenusToRole(params) {
- return oGet(baseUrl + '/role/assignMenusToRole', params);
+ return oPost(baseUrl + '/role/assignMenusToRole', params);
},
getRoleMenus(params) {
- return oPost(baseUrl + '/role/getRoleMenus', params);
+ return oGet(baseUrl + '/role/getRoleMenus', params);
},
};