This commit is contained in:
hrx 2025-10-11 14:01:51 +08:00
parent e00c77ae0f
commit 558eec6013
5 changed files with 149 additions and 50 deletions

View File

@ -67,6 +67,10 @@ export default {
const hasResourceManagement = routes.some(route => route.path === '/resourceManagement'); const hasResourceManagement = routes.some(route => route.path === '/resourceManagement');
console.log("是否包含订单管理:", hasOrderManagement); console.log("是否包含订单管理:", hasOrderManagement);
console.log("是否包含资源管理:", hasResourceManagement); console.log("是否包含资源管理:", hasResourceManagement);
//
console.log("当前用户类型:", this.userType);
console.log("当前组织类型:", this.orgType);
console.log("=== Sidebar 调试结束 ==="); console.log("=== Sidebar 调试结束 ===");
return routes; return routes;
@ -90,6 +94,8 @@ export default {
console.log("Sidebar mounted - 权限路由:", this.permissionRoutes); console.log("Sidebar mounted - 权限路由:", this.permissionRoutes);
console.log("Sidebar mounted - 用户类型:", this.userType); console.log("Sidebar mounted - 用户类型:", this.userType);
console.log("Sidebar mounted - 组织类型:", this.orgType); console.log("Sidebar mounted - 组织类型:", this.orgType);
console.log("sessionStorage userType:", sessionStorage.getItem('userType'));
console.log("sessionStorage orgType:", sessionStorage.getItem('orgType'));
}, },
watch: { watch: {

View File

@ -22,7 +22,7 @@ let ploady={
start_date:'', start_date:'',
end_date:'' end_date:''
} }
reqSaleMoneyList(ploady) // reqSaleMoneyList(ploady)
// import {saveApprovalInfo} from "@/api/finance/approvalList"; // import {saveApprovalInfo} from "@/api/finance/approvalList";
// saveApprovalInfo(JSON.stringify({ // saveApprovalInfo(JSON.stringify({
// "flag":"update", // "flag":"update",
@ -98,20 +98,73 @@ Vue.use(Element, {
//设置跳转页面时给页面的body属性设置滚动条 //设置跳转页面时给页面的body属性设置滚动条
var onOverflow = ["/shoppingManagement", "/supplierManagement"]; 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 => { onOverflow.forEach(element => {
if (to.path == element) { if (to.path == element) {
document.querySelector("body").setAttribute("style", "overflow: auto !important;") document.querySelector("body").setAttribute("style", "overflow: auto !important;")
} }
}); });
next();
}); });
window.addEventListener('beforeunload', function () {
// 清空面包屑状态的代码
store.commit('tagsView/resetBreadcrumbState');
});
Object.keys(filters).forEach(key => { Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key]) Vue.filter(key, filters[key])
}) })
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({
el: '#app', el: '#app',
router, router,

View File

@ -8,11 +8,11 @@ const getters = {
avatar: state => state.user.avatar, avatar: state => state.user.avatar,
name: state => state.user.name, name: state => state.user.name,
introduction: state => state.user.introduction, introduction: state => state.user.introduction,
user: state => state.user.user, user: state => state.user.user || sessionStorage.getItem('user') || '',
auths: state => state.user.auths, auths: state => state.user.auths || JSON.parse(sessionStorage.getItem('auths') || '[]'),
requestCode: state => state.user.requestCode, requestCode: state => state.user.requestCode,
permission_routes: state => state.permission.routes, permission_routes: state => state.permission.routes,
userType: state => state.user.userType, userType: state => state.user.userType || sessionStorage.getItem('userType') || '',
orgType: state => state.user.orgType, // 新增组织类型getter orgType: state => state.user.orgType || parseInt(sessionStorage.getItem('orgType')) || 0,
} }
export default getters export default getters

View File

@ -46,12 +46,12 @@ function addUserRoutes(routes, userType) {
if (orderManagementRoute) { if (orderManagementRoute) {
console.log("添加订单管理路由"); console.log("添加订单管理路由");
userRoutes.push(orderManagementRoute); userRoutes.push(JSON.parse(JSON.stringify(orderManagementRoute))); // 深拷贝
} }
if (resourceManagementRoute) { if (resourceManagementRoute) {
console.log("添加资源管理路由"); console.log("添加资源管理路由");
userRoutes.push(resourceManagementRoute); userRoutes.push(JSON.parse(JSON.stringify(resourceManagementRoute))); // 深拷贝
} }
return userRoutes; return userRoutes;
@ -113,15 +113,17 @@ const actions = {
return new Promise((resolve) => { return new Promise((resolve) => {
let accessedRoutes; let accessedRoutes;
// 判断用户类型org_type为2是客户否则是管理员 // 从参数或sessionStorage中获取用户类型和组织类型
const userType = params.orgType == 2 ? 'user' : 'admin'; const userType = params.userType || sessionStorage.getItem('userType') || '';
console.log("用户类型:", userType, "orgType:", params.orgType); 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'); accessedRoutes = asyncRoutes.filter(item => item.path === '/superAdministrator');
} else { } 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); console.log("ACTION generateRoutes - auths:", auths);
if (auths.length) { if (auths.length) {
@ -144,7 +146,7 @@ const actions = {
} }
// 新增:为普通用户添加订单管理和资源管理路由 // 新增:为普通用户添加订单管理和资源管理路由
if (userType === 'user') { if (userType === 'user' || orgType == 2) {
console.log("为普通用户添加订单管理和资源管理路由"); console.log("为普通用户添加订单管理和资源管理路由");
const userSpecificRoutes = addUserRoutes(asyncRoutes, userType); const userSpecificRoutes = addUserRoutes(asyncRoutes, userType);

View File

@ -7,23 +7,36 @@ import store from "@/store";
import {myBalanceAPI} from "@/api/finance/customerRechargeManagement"; import {myBalanceAPI} from "@/api/finance/customerRechargeManagement";
import {testData} from "@/views/homePage/components/topBox/testData"; 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 = { const state = {
token: getToken(), token: getToken(),
name: "", name: "",
avatar: "", avatar: "",
introduction: "", introduction: "",
//用户名称 //用户名称
user: "", user: storedState.user,
//权限列表 //权限列表
auths: [], auths: storedState.auths,
// 当前状态码 // 当前状态码
requestCode: 200, requestCode: 200,
//客户余额 //客户余额
mybalance: '', mybalance: storedState.mybalance,
// 新增用户类型admin/user // 新增用户类型admin/user
userType: '', userType: storedState.userType,
// 新增:组织类型 // 新增:组织类型
orgType: '' orgType: storedState.orgType
}; };
const mutations = { const mutations = {
@ -41,17 +54,18 @@ const mutations = {
}, },
SET_AUTHS: (state, auths) => { SET_AUTHS: (state, auths) => {
state.auths = auths; state.auths = auths;
sessionStorage.setItem("auths", JSON.stringify(state.auths)); sessionStorage.setItem("auths", JSON.stringify(auths));
}, },
SET_USER: (state, user) => { SET_USER: (state, user) => {
state.user = user; state.user = user;
sessionStorage.setItem("user", state.user); sessionStorage.setItem("user", user);
}, },
SET_REQUESTSTATE: (state, code) => { SET_REQUESTSTATE: (state, code) => {
state.requestCode = code; state.requestCode = code;
}, },
SETMYBANLANCE(state, mybalance) { SETMYBANLANCE(state, mybalance) {
state.mybalance = mybalance state.mybalance = mybalance;
sessionStorage.setItem('mybalance', mybalance);
}, },
// 新增:设置用户类型 // 新增:设置用户类型
SET_USER_TYPE: (state, userType) => { SET_USER_TYPE: (state, userType) => {
@ -61,7 +75,7 @@ const mutations = {
// 新增:设置组织类型 // 新增:设置组织类型
SET_ORG_TYPE: (state, orgType) => { SET_ORG_TYPE: (state, orgType) => {
state.orgType = orgType; state.orgType = orgType;
sessionStorage.setItem("orgType", orgType); sessionStorage.setItem("orgType", orgType.toString());
} }
}; };
@ -71,12 +85,10 @@ const actions = {
let result = await myBalanceAPI() let result = await myBalanceAPI()
if (result.status) { if (result.status) {
commit('SETMYBANLANCE', result.data) commit('SETMYBANLANCE', result.data)
sessionStorage.setItem('mybalance', result.data)
} }
}, },
// user login // user login
async login({commit}, userInfo) { async login({commit}, userInfo) {
const {username, password, codeid, vcode} = userInfo; const {username, password, codeid, vcode} = userInfo;
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
loginUserAPI(userInfo) loginUserAPI(userInfo)
@ -105,7 +117,8 @@ const actions = {
{ {
user: username, user: username,
auths: data, auths: data,
orgType: org_type // 传递 orgType 而不是 admin userType: userType,
orgType: org_type
} }
) )
resetRouter(); resetRouter();
@ -126,47 +139,64 @@ const actions = {
// get user info // get user info
getInfo({commit, state}) { getInfo({commit, state}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// getInfo(state.token).then(response => { // 从sessionStorage恢复用户信息
// const { data } = response const user = sessionStorage.getItem('user');
// if (!data) { const auths = sessionStorage.getItem('auths');
// reject('Verification failed, please Login again.') const userType = sessionStorage.getItem('userType');
// } const orgType = sessionStorage.getItem('orgType');
// const { roles, name, avatar, introduction } = data
// // roles must be a non-empty array if (user) {
// if (!roles || roles.length <= 0) { commit("SET_USER", user);
// reject('getInfo: roles must be a non-null array!') }
// } if (auths) {
// commit('SET_ROLES', roles) commit("SET_AUTHS", JSON.parse(auths));
// commit('SET_NAME', name) }
// commit('SET_AVATAR', avatar) if (userType) {
// commit('SET_INTRODUCTION', introduction) commit("SET_USER_TYPE", userType);
// }).catch(error => { }
// reject(error) if (orgType) {
// }) commit("SET_ORG_TYPE", parseInt(orgType));
}
resolve({
user: state.user,
auths: state.auths,
userType: state.userType,
orgType: state.orgType
});
}); });
}, },
// user logout // user logout
logout({commit, state, dispatch}) { logout({commit, state, dispatch}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(state.token) // logout(state.token)
.then(() => { // .then(() => {
commit("SET_TOKEN", ""); commit("SET_TOKEN", "");
commit("SET_ROLES", []); commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_USER_TYPE", ""); // 新增:清除用户类型
commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
commit("SET_USER", "");
commit("SET_AUTHS", []);
removeToken(); removeToken();
resetRouter(); resetRouter();
// 清除sessionStorage
sessionStorage.removeItem('user');
sessionStorage.removeItem('auths');
sessionStorage.removeItem('userType');
sessionStorage.removeItem('orgType');
sessionStorage.removeItem('mybalance');
// reset visited views and cached views // reset visited views and cached views
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485 // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
dispatch("tagsView/delAllViews", null, {root: true}); dispatch("tagsView/delAllViews", null, {root: true});
resolve(); resolve();
}) // })
.catch((error) => { // .catch((error) => {
reject(error); // reject(error);
}); // });
}); });
}, },
@ -178,7 +208,15 @@ const actions = {
commit("SET_ROLES", []); commit("SET_ROLES", []);
commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_USER_TYPE", ""); // 新增:清除用户类型
commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型
commit("SET_USER", "");
commit("SET_AUTHS", []);
removeToken(); removeToken();
// 清除sessionStorage
sessionStorage.removeItem('user');
sessionStorage.removeItem('auths');
sessionStorage.removeItem('userType');
sessionStorage.removeItem('orgType');
resolve(); resolve();
}); });
}, },