// import { login, logout, getInfo } from '@/api/user' import {loginUserAPI} from "@/api/login"; import {getToken, setToken, removeToken} from "@/utils/auth"; import {Message} from "element-ui"; import router, {resetRouter} from "@/router"; import store from "@/store"; import {myBalanceAPI} from "@/api/finance/customerRechargeManagement"; import {testData} from "@/views/homePage/components/topBox/testData"; // 安全转换为字符串的辅助函数 const safeToString = (value, defaultValue = '') => { if (value == null) return defaultValue; return value.toString(); }; const normalizeLoginRoles = (roles) => { if (!roles || roles === 'None') return []; if (Array.isArray(roles)) return roles; if (typeof roles === 'string') return roles.split(',').filter(Boolean); return []; }; // 从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') || '', roles: JSON.parse(sessionStorage.getItem('roles')) || [] }; }; const storedState = getStoredState(); const state = { token: getToken(), name: "", avatar: "", introduction: "", //用户名称 user: storedState.user, //权限列表 auths: storedState.auths, // 当前状态码 requestCode: 200, //客户余额 mybalance: storedState.mybalance, // 新增:用户类型(admin/user) userType: storedState.userType, // 新增:组织类型 orgType: storedState.orgType, // 新增:用户角色 roles: storedState.roles }; const mutations = { SET_TOKEN: (state, token) => { state.token = token; }, SET_INTRODUCTION: (state, introduction) => { state.introduction = introduction; }, SET_NAME: (state, name) => { state.name = name; }, SET_AVATAR: (state, avatar) => { state.avatar = avatar; }, SET_AUTHS: (state, auths) => { state.auths = auths; sessionStorage.setItem("auths", JSON.stringify(auths)); }, SET_USER: (state, user) => { state.user = user; sessionStorage.setItem("user", user); }, SET_REQUESTSTATE: (state, code) => { state.requestCode = code; }, SETMYBANLANCE(state, mybalance) { state.mybalance = mybalance; sessionStorage.setItem('mybalance', mybalance); }, // 新增:设置用户类型 SET_USER_TYPE: (state, userType) => { state.userType = userType; sessionStorage.setItem("userType", userType); }, // 修复:设置组织类型 - 添加防御性检查 SET_ORG_TYPE: (state, orgType) => { state.orgType = orgType; // 防御性检查,确保 orgType 不为 null 或 undefined if (orgType == null) { console.warn('SET_ORG_TYPE: orgType is null or undefined, setting to empty string'); sessionStorage.setItem("orgType", ''); return; } // 安全地调用 toString() sessionStorage.setItem("orgType", orgType.toString()); }, // 新增:设置用户角色 SET_ROLES: (state, roles) => { state.roles = roles; sessionStorage.setItem("roles", JSON.stringify(roles)); } }; const actions = { //客户获取余额 async getCustmoersMoney({commit}) { let result = await myBalanceAPI() if (result.status) { commit('SETMYBANLANCE', result.data) } }, // user login async login({commit}, userInfo) { const {username, password, codeid, vcode} = userInfo; return new Promise(async (resolve, reject) => { loginUserAPI(userInfo) .then(async (response) => { console.log("response:", response) if (response.status) { if (response.roles == "None") { Message({ message: "请联系管理员给您配置角色哦~", type: 'error', }) } else { const {data, org_type} = response; commit("SET_USER", username); // 修复:org_type 为 2 或 3 都表示客户 const userType = (org_type == 2 || org_type == 3) ? 'user' : 'admin'; // 使用接口返回的真实角色生成菜单;客户组织兜底补上“客户”角色。 const userRoles = normalizeLoginRoles(response.roles); if ((org_type == 2 || org_type == 3) && !userRoles.includes('客户')) { userRoles.push('客户'); } commit("SET_USER_TYPE", userType); // 确保 org_type 不为 undefined commit("SET_ORG_TYPE", org_type || ''); commit("SET_ROLES", userRoles); // 新增:设置用户角色 console.log("登录用户类型:", userType, "org_type:", org_type, "用户角色:", userRoles); data ? commit("SET_AUTHS", data) : commit("SET_AUTHS", []); resetRouter(); commit("permission/RESET_ROUTES", null, { root: true }); const accessRoutes = await store.dispatch( "permission/generateRoutes", { user: username, auths: data, userType: userType, orgType: org_type, roles: userRoles // 新增:传递角色信息 } ) router.addRoutes(accessRoutes); resolve(response); } } else { reject(response); } }) .catch((error) => { console.log(error) reject(error); }); }); }, // get user info getInfo({commit, state}) { return new Promise((resolve, reject) => { // 从sessionStorage恢复用户信息 const user = sessionStorage.getItem('user'); const auths = sessionStorage.getItem('auths'); const userType = sessionStorage.getItem('userType'); const orgType = sessionStorage.getItem('orgType'); const roles = sessionStorage.getItem('roles'); if (user) { commit("SET_USER", user); } if (auths) { commit("SET_AUTHS", JSON.parse(auths)); } if (userType) { commit("SET_USER_TYPE", userType); } if (orgType) { // 确保 orgType 不为 null 或 undefined const safeOrgType = orgType ? parseInt(orgType) : ''; commit("SET_ORG_TYPE", safeOrgType); } if (roles) { commit("SET_ROLES", JSON.parse(roles)); } resolve({ user: state.user, auths: state.auths, userType: state.userType, orgType: state.orgType, roles: state.roles }); }); }, // user logout logout({commit, state, dispatch}) { return new Promise((resolve, reject) => { commit("SET_TOKEN", ""); commit("SET_ROLES", []); commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 commit("SET_USER", ""); commit("SET_AUTHS", []); removeToken(); resetRouter(); commit("permission/RESET_ROUTES", null, { root: true }); // 清除sessionStorage sessionStorage.removeItem('user'); sessionStorage.removeItem('auths'); sessionStorage.removeItem('userType'); sessionStorage.removeItem('orgType'); sessionStorage.removeItem('mybalance'); sessionStorage.removeItem('roles'); // 新增:清除角色信息 sessionStorage.removeItem('juese'); sessionStorage.removeItem('jueseNew'); // reset visited views and cached views // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485 dispatch("tagsView/delAllViews", null, {root: true}); resolve(); }); }, // remove token resetToken({commit}) { return new Promise((resolve) => { commit("SET_TOKEN", ""); commit("SET_ROLES", []); commit("SET_USER_TYPE", ""); // 新增:清除用户类型 commit("SET_ORG_TYPE", ""); // 新增:清除组织类型 commit("SET_USER", ""); commit("SET_AUTHS", []); removeToken(); resetRouter(); commit("permission/RESET_ROUTES", null, { root: true }); // 清除sessionStorage sessionStorage.removeItem('user'); sessionStorage.removeItem('auths'); sessionStorage.removeItem('userType'); sessionStorage.removeItem('orgType'); sessionStorage.removeItem('roles'); // 新增:清除角色信息 sessionStorage.removeItem('juese'); sessionStorage.removeItem('jueseNew'); resolve(); }); }, // dynamically modify permissions async changeRoles({commit, dispatch}, role) { const token = role + "-token"; commit("SET_TOKEN", token); setToken(token); const {roles} = await dispatch("getInfo"); resetRouter(); // generate accessible routes map based on roles const accessRoutes = await dispatch("permission/generateRoutes", roles, { root: true, }); // dynamically add accessible routes router.addRoutes(accessRoutes); // reset visited views and cached views dispatch("tagsView/delAllViews", null, {root: true}); }, }; export default { namespaced: true, state, mutations, actions, };