From 558eec60135be6ce4e6033bd917861cea7650f56 Mon Sep 17 00:00:00 2001 From: hrx <18603305412@163.com> Date: Sat, 11 Oct 2025 14:01:51 +0800 Subject: [PATCH] uptada --- .../src/layout/components/Sidebar/index.vue | 6 + f/web-kboss/src/main.js | 59 +++++++++- f/web-kboss/src/store/getters.js | 8 +- f/web-kboss/src/store/modules/permission.js | 18 +-- f/web-kboss/src/store/modules/user.js | 108 ++++++++++++------ 5 files changed, 149 insertions(+), 50 deletions(-) diff --git a/f/web-kboss/src/layout/components/Sidebar/index.vue b/f/web-kboss/src/layout/components/Sidebar/index.vue index 7effadb..3e413eb 100644 --- a/f/web-kboss/src/layout/components/Sidebar/index.vue +++ b/f/web-kboss/src/layout/components/Sidebar/index.vue @@ -67,6 +67,10 @@ export default { const hasResourceManagement = routes.some(route => route.path === '/resourceManagement'); console.log("是否包含订单管理:", hasOrderManagement); console.log("是否包含资源管理:", hasResourceManagement); + + // 检查用户类型和组织类型是否正确 + console.log("当前用户类型:", this.userType); + console.log("当前组织类型:", this.orgType); console.log("=== Sidebar 调试结束 ==="); return routes; @@ -90,6 +94,8 @@ export default { console.log("Sidebar mounted - 权限路由:", this.permissionRoutes); console.log("Sidebar mounted - 用户类型:", this.userType); console.log("Sidebar mounted - 组织类型:", this.orgType); + console.log("sessionStorage userType:", sessionStorage.getItem('userType')); + console.log("sessionStorage orgType:", sessionStorage.getItem('orgType')); }, watch: { diff --git a/f/web-kboss/src/main.js b/f/web-kboss/src/main.js index 8e955d1..92bf068 100644 --- a/f/web-kboss/src/main.js +++ b/f/web-kboss/src/main.js @@ -22,7 +22,7 @@ let ploady={ start_date:'', end_date:'' } -reqSaleMoneyList(ploady) +// reqSaleMoneyList(ploady) // import {saveApprovalInfo} from "@/api/finance/approvalList"; // saveApprovalInfo(JSON.stringify({ // "flag":"update", @@ -98,20 +98,73 @@ Vue.use(Element, { //设置跳转页面时给页面的body属性设置滚动条 var onOverflow = ["/shoppingManagement", "/supplierManagement"]; -router.afterEach((to, from, next) => { +// 修复:在路由守卫中恢复用户状态和重新生成路由 +router.beforeEach(async (to, from, next) => { + // 清空面包屑状态的代码 + // store.commit('tagsView/resetBreadcrumbState'); + + // 新增:如果已登录且有token,但Vuex状态丢失,从sessionStorage恢复 + if (store.getters.token && (!store.getters.user || !store.getters.userType)) { + console.log("检测到状态丢失,从sessionStorage恢复用户状态"); + + const user = sessionStorage.getItem('user'); + const auths = sessionStorage.getItem('auths'); + const userType = sessionStorage.getItem('userType'); + const orgType = sessionStorage.getItem('orgType'); + + if (user) { + store.commit('user/SET_USER', user); + } + if (auths) { + store.commit('user/SET_AUTHS', JSON.parse(auths)); + } + if (userType) { + store.commit('user/SET_USER_TYPE', userType); + } + if (orgType) { + store.commit('user/SET_ORG_TYPE', parseInt(orgType)); + } + + // 重新生成路由 + try { + const accessRoutes = await store.dispatch('permission/generateRoutes', { + user: store.getters.user, + auths: store.getters.auths, + userType: store.getters.userType, + orgType: store.getters.orgType + }); + + // 重新添加路由 + router.addRoutes(accessRoutes); + + // 重定向到当前路由以确保路由更新 + next({ ...to, replace: true }); + return; + } catch (error) { + console.error('重新生成路由失败:', error); + } + } + onOverflow.forEach(element => { if (to.path == element) { document.querySelector("body").setAttribute("style", "overflow: auto !important;") } }); + + next(); }); + +window.addEventListener('beforeunload', function () { + // 清空面包屑状态的代码 + store.commit('tagsView/resetBreadcrumbState'); +}); + Object.keys(filters).forEach(key => { Vue.filter(key, filters[key]) }) Vue.config.productionTip = false - new Vue({ el: '#app', router, diff --git a/f/web-kboss/src/store/getters.js b/f/web-kboss/src/store/getters.js index f0a9cc1..0d6cfd8 100644 --- a/f/web-kboss/src/store/getters.js +++ b/f/web-kboss/src/store/getters.js @@ -8,11 +8,11 @@ const getters = { avatar: state => state.user.avatar, name: state => state.user.name, introduction: state => state.user.introduction, - user: state => state.user.user, - auths: state => state.user.auths, + user: state => state.user.user || sessionStorage.getItem('user') || '', + auths: state => state.user.auths || JSON.parse(sessionStorage.getItem('auths') || '[]'), requestCode: state => state.user.requestCode, permission_routes: state => state.permission.routes, - userType: state => state.user.userType, - orgType: state => state.user.orgType, // 新增:组织类型getter + userType: state => state.user.userType || sessionStorage.getItem('userType') || '', + orgType: state => state.user.orgType || parseInt(sessionStorage.getItem('orgType')) || 0, } export default getters diff --git a/f/web-kboss/src/store/modules/permission.js b/f/web-kboss/src/store/modules/permission.js index a575af1..969a0a2 100644 --- a/f/web-kboss/src/store/modules/permission.js +++ b/f/web-kboss/src/store/modules/permission.js @@ -46,12 +46,12 @@ function addUserRoutes(routes, userType) { if (orderManagementRoute) { console.log("添加订单管理路由"); - userRoutes.push(orderManagementRoute); + userRoutes.push(JSON.parse(JSON.stringify(orderManagementRoute))); // 深拷贝 } if (resourceManagementRoute) { console.log("添加资源管理路由"); - userRoutes.push(resourceManagementRoute); + userRoutes.push(JSON.parse(JSON.stringify(resourceManagementRoute))); // 深拷贝 } return userRoutes; @@ -113,15 +113,17 @@ const actions = { return new Promise((resolve) => { let accessedRoutes; - // 判断用户类型:org_type为2是客户,否则是管理员 - const userType = params.orgType == 2 ? 'user' : 'admin'; - console.log("用户类型:", userType, "orgType:", params.orgType); + // 从参数或sessionStorage中获取用户类型和组织类型 + const userType = params.userType || sessionStorage.getItem('userType') || ''; + const orgType = params.orgType || parseInt(sessionStorage.getItem('orgType')) || 0; - if (params.user.includes("admin") && params.orgType != 2) { + console.log("用户类型:", userType, "orgType:", orgType); + + if (params.user && params.user.includes("admin") && orgType != 2) { // 管理员:只显示超级管理员菜单 accessedRoutes = asyncRoutes.filter(item => item.path === '/superAdministrator'); } else { - const auths = JSON.parse(JSON.stringify(params.auths)); + const auths = params.auths ? JSON.parse(JSON.stringify(params.auths)) : []; console.log("ACTION generateRoutes - auths:", auths); if (auths.length) { @@ -144,7 +146,7 @@ const actions = { } // 新增:为普通用户添加订单管理和资源管理路由 - if (userType === 'user') { + if (userType === 'user' || orgType == 2) { console.log("为普通用户添加订单管理和资源管理路由"); const userSpecificRoutes = addUserRoutes(asyncRoutes, userType); diff --git a/f/web-kboss/src/store/modules/user.js b/f/web-kboss/src/store/modules/user.js index 7b58f2b..4f364e9 100644 --- a/f/web-kboss/src/store/modules/user.js +++ b/f/web-kboss/src/store/modules/user.js @@ -7,23 +7,36 @@ import store from "@/store"; import {myBalanceAPI} from "@/api/finance/customerRechargeManagement"; import {testData} from "@/views/homePage/components/topBox/testData"; +// 从sessionStorage恢复状态 +const getStoredState = () => { + return { + user: sessionStorage.getItem('user') || "", + auths: JSON.parse(sessionStorage.getItem('auths')) || [], + userType: sessionStorage.getItem('userType') || '', + orgType: parseInt(sessionStorage.getItem('orgType')) || '', + mybalance: sessionStorage.getItem('mybalance') || '' + }; +}; + +const storedState = getStoredState(); + const state = { token: getToken(), name: "", avatar: "", introduction: "", //用户名称 - user: "", + user: storedState.user, //权限列表 - auths: [], + auths: storedState.auths, // 当前状态码 requestCode: 200, //客户余额 - mybalance: '', + mybalance: storedState.mybalance, // 新增:用户类型(admin/user) - userType: '', + userType: storedState.userType, // 新增:组织类型 - orgType: '' + orgType: storedState.orgType }; const mutations = { @@ -41,17 +54,18 @@ const mutations = { }, SET_AUTHS: (state, auths) => { state.auths = auths; - sessionStorage.setItem("auths", JSON.stringify(state.auths)); + sessionStorage.setItem("auths", JSON.stringify(auths)); }, SET_USER: (state, user) => { state.user = user; - sessionStorage.setItem("user", state.user); + sessionStorage.setItem("user", user); }, SET_REQUESTSTATE: (state, code) => { state.requestCode = code; }, SETMYBANLANCE(state, mybalance) { - state.mybalance = mybalance + state.mybalance = mybalance; + sessionStorage.setItem('mybalance', mybalance); }, // 新增:设置用户类型 SET_USER_TYPE: (state, userType) => { @@ -61,7 +75,7 @@ const mutations = { // 新增:设置组织类型 SET_ORG_TYPE: (state, orgType) => { state.orgType = orgType; - sessionStorage.setItem("orgType", orgType); + sessionStorage.setItem("orgType", orgType.toString()); } }; @@ -71,12 +85,10 @@ const actions = { let result = await myBalanceAPI() if (result.status) { commit('SETMYBANLANCE', result.data) - sessionStorage.setItem('mybalance', result.data) } }, // user login async login({commit}, userInfo) { - const {username, password, codeid, vcode} = userInfo; return new Promise(async (resolve, reject) => { loginUserAPI(userInfo) @@ -105,7 +117,8 @@ const actions = { { user: username, auths: data, - orgType: org_type // 传递 orgType 而不是 admin + userType: userType, + orgType: org_type } ) resetRouter(); @@ -126,47 +139,64 @@ const actions = { // get user info getInfo({commit, state}) { return new Promise((resolve, reject) => { - // getInfo(state.token).then(response => { - // const { data } = response - // if (!data) { - // reject('Verification failed, please Login again.') - // } - // const { roles, name, avatar, introduction } = data - // // roles must be a non-empty array - // if (!roles || roles.length <= 0) { - // reject('getInfo: roles must be a non-null array!') - // } - // commit('SET_ROLES', roles) - // commit('SET_NAME', name) - // commit('SET_AVATAR', avatar) - // commit('SET_INTRODUCTION', introduction) - // }).catch(error => { - // reject(error) - // }) + // 从sessionStorage恢复用户信息 + const user = sessionStorage.getItem('user'); + const auths = sessionStorage.getItem('auths'); + const userType = sessionStorage.getItem('userType'); + const orgType = sessionStorage.getItem('orgType'); + + if (user) { + commit("SET_USER", user); + } + if (auths) { + commit("SET_AUTHS", JSON.parse(auths)); + } + if (userType) { + commit("SET_USER_TYPE", userType); + } + if (orgType) { + commit("SET_ORG_TYPE", parseInt(orgType)); + } + + resolve({ + user: state.user, + auths: state.auths, + userType: state.userType, + orgType: state.orgType + }); }); }, // user logout logout({commit, state, dispatch}) { return new Promise((resolve, reject) => { - logout(state.token) - .then(() => { + // logout(state.token) + // .then(() => { commit("SET_TOKEN", ""); commit("SET_ROLES", []); commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 + commit("SET_USER", ""); + commit("SET_AUTHS", []); removeToken(); resetRouter(); + // 清除sessionStorage + sessionStorage.removeItem('user'); + sessionStorage.removeItem('auths'); + sessionStorage.removeItem('userType'); + sessionStorage.removeItem('orgType'); + sessionStorage.removeItem('mybalance'); + // reset visited views and cached views // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485 dispatch("tagsView/delAllViews", null, {root: true}); resolve(); - }) - .catch((error) => { - reject(error); - }); + // }) + // .catch((error) => { + // reject(error); + // }); }); }, @@ -178,7 +208,15 @@ const actions = { commit("SET_ROLES", []); commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 + commit("SET_USER", ""); + commit("SET_AUTHS", []); removeToken(); + + // 清除sessionStorage + sessionStorage.removeItem('user'); + sessionStorage.removeItem('auths'); + sessionStorage.removeItem('userType'); + sessionStorage.removeItem('orgType'); resolve(); }); },