304 lines
9.1 KiB
JavaScript
304 lines
9.1 KiB
JavaScript
// 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,
|
||
};
|