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');
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: {

View File

@ -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,

View File

@ -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

View File

@ -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);

View File

@ -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();
});
},