2026-05-22 11:07:13 +08:00

304 lines
9.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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,
};