mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-21 18:06:52 +08:00
123 lines
3.8 KiB
JavaScript
123 lines
3.8 KiB
JavaScript
import cookie from '@/lib/cookie.js';
|
||
import { loginApi } from '@/api/login';
|
||
import { localSave, localRead } from '@/lib/local';
|
||
import { getType } from '@/lib/util';
|
||
import { PRIVILEGE_TYPE_ENUM } from '@/constants/privilege';
|
||
|
||
const localReadRouterPrivilege = () => {
|
||
let map = new Map();
|
||
let userRouterPrivilegeString = localRead('userRouterPrivilege');
|
||
if (userRouterPrivilegeString) {
|
||
let privilegeList = JSON.parse(userRouterPrivilegeString);
|
||
if (privilegeList) {
|
||
for (const path of privilegeList) {
|
||
let key = path.substr(1, 1);
|
||
let pathArray = map.get(key);
|
||
if (pathArray) {
|
||
pathArray.push(path);
|
||
} else {
|
||
pathArray = [];
|
||
pathArray.push(path);
|
||
map.set(key, pathArray);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return map;
|
||
};
|
||
|
||
export default {
|
||
state: {
|
||
token: cookie.getToken(),
|
||
// session信息
|
||
userLoginInfo: {},
|
||
isUpdatePrivilege: false,
|
||
// key为router name, value为 key的集合,用于v-privilege,页面功能点判断
|
||
privilegeFunctionPointsMap: new Map(),
|
||
// 菜单key权限集合,用于左侧是否有菜单权限判断
|
||
privilegeMenuKeyList: [],
|
||
/**
|
||
* key为 router path的首字母,value为集合
|
||
* 这样做是为了提高查询效率,用于vue-router拦截判断path
|
||
*/
|
||
privilegeRouterPathMap: localReadRouterPrivilege()
|
||
|
||
},
|
||
mutations: {
|
||
// 设置token
|
||
setToken (state, token) {
|
||
state.token = token;
|
||
cookie.setToken(token);
|
||
},
|
||
// 保存用户登录信息
|
||
setUserLoginInfo (state, userLoginInfo) {
|
||
state.userLoginInfo = userLoginInfo;
|
||
localSave('userLoginInfo', JSON.stringify(userLoginInfo));
|
||
},
|
||
setUserPrivilege (state, privilegeList) {
|
||
state.isUpdatePrivilege = true;
|
||
let routerPathArray = [];
|
||
for (const privilege of privilegeList) {
|
||
// 是菜单权限
|
||
if (privilege.type === PRIVILEGE_TYPE_ENUM.MENU.value) {
|
||
state.privilegeMenuKeyList.push(privilege.key);
|
||
if (privilege.url) {
|
||
routerPathArray.push(privilege.url);
|
||
// 去掉/之后第一个字母
|
||
let key = privilege.url.substr(1, 1);
|
||
let pathArray = state.privilegeRouterPathMap.get(key);
|
||
if (pathArray) {
|
||
pathArray.push(privilege.url);
|
||
} else {
|
||
pathArray = [];
|
||
pathArray.push(privilege.url);
|
||
state.privilegeRouterPathMap.set(key, pathArray);
|
||
}
|
||
}
|
||
}
|
||
// 如果是功能点
|
||
if (privilege.type === PRIVILEGE_TYPE_ENUM.POINTS.value) {
|
||
if (privilege.parentKey) {
|
||
let pointArray = state.privilegeFunctionPointsMap.get(privilege.parentKey);
|
||
if (pointArray) {
|
||
pointArray.push(privilege.key);
|
||
} else {
|
||
pointArray = [];
|
||
pointArray.push(privilege.key);
|
||
state.privilegeFunctionPointsMap.set(privilege.parentKey, pointArray);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
localSave('userRouterPrivilege', JSON.stringify(routerPathArray));
|
||
}
|
||
},
|
||
getters: {
|
||
// 用户功能点权限
|
||
userFuncPrivilegeInfo: () => localRead('funcPrivilegeInfo'),
|
||
// 用户菜单权限
|
||
userMenuPrivilege: state => state.userLoginInfo.privilegeList
|
||
},
|
||
actions: {
|
||
// 登录
|
||
handleLogin ({ commit }, params) {
|
||
params.loginName = params.loginName.trim();
|
||
return new Promise((resolve, reject) => {
|
||
loginApi
|
||
.login(params)
|
||
.then(res => {
|
||
localStorage.clear();
|
||
const data = res.data;
|
||
commit('setToken', data.xaccessToken);
|
||
// 保存用户登录
|
||
commit('setUserLoginInfo', data);
|
||
resolve();
|
||
})
|
||
.catch(err => {
|
||
reject(err);
|
||
});
|
||
});
|
||
}
|
||
}
|
||
};
|