You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
373 lines
11 KiB
373 lines
11 KiB
import { |
|
setToken, |
|
setRefreshToken, |
|
removeToken, |
|
removeRefreshToken, |
|
} from "@/util/auth"; |
|
import { Message } from "element-ui"; |
|
import { setStore, getStore } from "@/util/store"; |
|
import { isURL, validatenull } from "@/util/validate"; |
|
import { deepClone } from "@/util/util"; |
|
import website from "@/config/website"; |
|
import { |
|
loginByUsername, |
|
loginBySocial, |
|
loginBySso, |
|
getUserInfo, |
|
logout, |
|
refreshToken, |
|
getButtons, |
|
} from "@/api/user"; |
|
import { getTopMenu, getRoutes } from "@/api/system/menu"; |
|
import md5 from "js-md5"; |
|
|
|
function addPath(ele, first) { |
|
const menu = website.menu; |
|
const propsConfig = menu.props; |
|
const propsDefault = { |
|
label: propsConfig.label || "name", |
|
path: propsConfig.path || "path", |
|
icon: propsConfig.icon || "icon", |
|
children: propsConfig.children || "children", |
|
}; |
|
const icon = ele[propsDefault.icon]; |
|
ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon; |
|
const isChild = |
|
ele[propsDefault.children] && ele[propsDefault.children].length !== 0; |
|
if (!isChild) ele[propsDefault.children] = []; |
|
if (!isChild && first && !isURL(ele[propsDefault.path])) { |
|
ele[propsDefault.path] = ele[propsDefault.path] + "/index"; |
|
} else { |
|
ele[propsDefault.children].forEach((child) => { |
|
addPath(child); |
|
}); |
|
} |
|
} |
|
|
|
const user = { |
|
state: { |
|
tenantId: getStore({ name: "tenantId" }) || "", |
|
userInfo: getStore({ name: "userInfo" }) || [], |
|
permission: getStore({ name: "permission" }) || {}, |
|
roles: [], |
|
menuId: {}, |
|
menu: getStore({ name: "menu" }) || [], |
|
menuAll: getStore({ name: "menuAll" }) || [], |
|
token: getStore({ name: "token" }) || "", |
|
refreshToken: getStore({ name: "refreshToken" }) || "", |
|
}, |
|
actions: { |
|
//根据用户名登录 |
|
LoginByUsername({ commit }, userInfo, isToken) { |
|
return new Promise((resolve, reject) => { |
|
if (userInfo.isToken) { |
|
loginByUsername( |
|
userInfo.tenantId, |
|
userInfo.deptId, |
|
userInfo.roleId, |
|
userInfo.username, |
|
userInfo.password, |
|
userInfo.type, |
|
userInfo.key, |
|
userInfo.code |
|
) |
|
.then((res) => { |
|
const data = res.data; |
|
if (data.error_description) { |
|
Message({ |
|
message: data.error_description, |
|
type: "error", |
|
}); |
|
} else { |
|
commit("SET_TOKEN", data.access_token); |
|
commit("SET_REFRESH_TOKEN", data.refresh_token); |
|
commit("SET_TENANT_ID", data.tenant_id); |
|
commit("SET_USER_INFO", data); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
} |
|
resolve(); |
|
}) |
|
.catch((error) => { |
|
reject(error); |
|
}); |
|
} else { |
|
loginByUsername( |
|
userInfo.tenantId, |
|
userInfo.deptId, |
|
userInfo.roleId, |
|
userInfo.username, |
|
md5(userInfo.password), |
|
userInfo.type, |
|
userInfo.key, |
|
userInfo.code |
|
) |
|
.then((res) => { |
|
const data = res.data; |
|
if (data.error_description) { |
|
Message({ |
|
message: data.error_description, |
|
type: "error", |
|
}); |
|
} else { |
|
commit("SET_TOKEN", data.access_token); |
|
commit("SET_REFRESH_TOKEN", data.refresh_token); |
|
commit("SET_TENANT_ID", data.tenant_id); |
|
commit("SET_USER_INFO", data); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
} |
|
resolve(); |
|
}) |
|
.catch((error) => { |
|
reject(error); |
|
}); |
|
} |
|
}); |
|
}, |
|
//根据手机号登录 |
|
LoginByPhone({ commit }, userInfo) { |
|
return new Promise((resolve) => { |
|
loginByUsername(userInfo.phone, userInfo.code).then((res) => { |
|
const data = res.data.data; |
|
commit("SET_TOKEN", data); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
resolve(); |
|
}); |
|
}); |
|
}, |
|
//根据第三方信息登录 |
|
LoginBySocial({ commit }, userInfo) { |
|
return new Promise((resolve) => { |
|
loginBySocial( |
|
userInfo.tenantId, |
|
userInfo.source, |
|
userInfo.code, |
|
userInfo.state |
|
).then((res) => { |
|
const data = res.data; |
|
if (data.error_description) { |
|
Message({ |
|
message: data.error_description, |
|
type: "error", |
|
}); |
|
} else { |
|
commit("SET_TOKEN", data.access_token); |
|
commit("SET_REFRESH_TOKEN", data.refresh_token); |
|
commit("SET_USER_INFO", data); |
|
commit("SET_TENANT_ID", data.tenant_id); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
} |
|
resolve(); |
|
}); |
|
}); |
|
}, |
|
//根据单点信息登录 |
|
LoginBySso({ commit }, userInfo) { |
|
return new Promise((resolve) => { |
|
loginBySso(userInfo.state, userInfo.code).then((res) => { |
|
const data = res.data; |
|
if (data.error_description) { |
|
Message({ |
|
message: data.error_description, |
|
type: "error", |
|
}); |
|
} else { |
|
commit("SET_TOKEN", data.access_token); |
|
commit("SET_REFRESH_TOKEN", data.refresh_token); |
|
commit("SET_USER_INFO", data); |
|
commit("SET_TENANT_ID", data.tenant_id); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
} |
|
resolve(); |
|
}); |
|
}); |
|
}, |
|
//获取用户信息 |
|
GetUserInfo({ commit }) { |
|
return new Promise((resolve, reject) => { |
|
getUserInfo() |
|
.then((res) => { |
|
const data = res.data.data; |
|
commit("SET_ROLES", data.roles); |
|
resolve(data); |
|
}) |
|
.catch((err) => { |
|
reject(err); |
|
}); |
|
}); |
|
}, |
|
//刷新token |
|
refreshToken({ state, commit }, userInfo) { |
|
window.console.log("handle refresh token"); |
|
return new Promise((resolve, reject) => { |
|
refreshToken( |
|
state.refreshToken, |
|
state.tenantId, |
|
!validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id, |
|
!validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id |
|
) |
|
.then((res) => { |
|
const data = res.data; |
|
commit("SET_TOKEN", data.access_token); |
|
commit("SET_REFRESH_TOKEN", data.refresh_token); |
|
commit("SET_USER_INFO", data); |
|
resolve(); |
|
}) |
|
.catch((error) => { |
|
reject(error); |
|
}); |
|
}); |
|
}, |
|
// 登出 |
|
LogOut({ commit }) { |
|
return new Promise((resolve, reject) => { |
|
logout() |
|
.then(() => { |
|
commit("SET_TOKEN", ""); |
|
commit("SET_MENU", []); |
|
commit("SET_MENU_ALL_NULL", []); |
|
commit("SET_ROLES", []); |
|
commit("SET_TAG_LIST", []); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
removeToken(); |
|
removeRefreshToken(); |
|
resolve(); |
|
}) |
|
.catch((error) => { |
|
reject(error); |
|
}); |
|
}); |
|
}, |
|
//注销session |
|
FedLogOut({ commit }) { |
|
return new Promise((resolve) => { |
|
commit("SET_TOKEN", ""); |
|
commit("SET_MENU_ALL_NULL", []); |
|
commit("SET_MENU", []); |
|
commit("SET_ROLES", []); |
|
commit("SET_TAG_LIST", []); |
|
commit("DEL_ALL_TAG"); |
|
commit("CLEAR_LOCK"); |
|
removeToken(); |
|
removeRefreshToken(); |
|
resolve(); |
|
}); |
|
}, |
|
//获取顶部菜单 |
|
GetTopMenu() { |
|
return new Promise((resolve) => { |
|
getTopMenu().then((res) => { |
|
const data = res.data.data || []; |
|
resolve(data); |
|
}); |
|
}); |
|
}, |
|
//获取系统菜单 |
|
GetMenu({ commit, dispatch }, topMenuId) { |
|
return new Promise((resolve) => { |
|
getRoutes(topMenuId).then((res) => { |
|
const data = res.data.data; |
|
let menu = deepClone(data); |
|
menu.forEach((ele) => { |
|
addPath(ele, true); |
|
}); |
|
commit("SET_MENU_ALL", menu); |
|
commit("SET_MENU", menu); |
|
dispatch("GetButtons"); |
|
resolve(menu); |
|
}); |
|
}); |
|
}, |
|
//获取系统按钮 |
|
GetButtons({ commit }) { |
|
return new Promise((resolve) => { |
|
getButtons().then((res) => { |
|
const data = res.data.data; |
|
commit("SET_PERMISSION", data); |
|
resolve(); |
|
}); |
|
}); |
|
}, |
|
}, |
|
mutations: { |
|
SET_TOKEN: (state, token) => { |
|
setToken(token); |
|
state.token = token; |
|
setStore({ name: "token", content: state.token }); |
|
}, |
|
SET_MENU_ID(state, menuId) { |
|
state.menuId = menuId; |
|
}, |
|
SET_MENU_ALL: (state, menuAll) => { |
|
let menu = state.menuAll; |
|
menuAll.forEach((ele) => { |
|
if ( |
|
!menu.find( |
|
(item) => item.label === ele.label && item.path === ele.path |
|
) |
|
) { |
|
menu.push(ele); |
|
} |
|
}); |
|
state.menuAll = menu; |
|
setStore({ name: "menuAll", content: state.menuAll }); |
|
}, |
|
SET_MENU_ALL_NULL: (state) => { |
|
state.menuAll = []; |
|
setStore({ name: "menuAll", content: state.menuAll }); |
|
}, |
|
SET_MENU: (state, menu) => { |
|
state.menu = menu; |
|
setStore({ name: "menu", content: state.menu }); |
|
}, |
|
SET_REFRESH_TOKEN: (state, refreshToken) => { |
|
setRefreshToken(refreshToken); |
|
state.refreshToken = refreshToken; |
|
setStore({ name: "refreshToken", content: state.refreshToken }); |
|
}, |
|
SET_TENANT_ID: (state, tenantId) => { |
|
state.tenantId = tenantId; |
|
setStore({ name: "tenantId", content: state.tenantId }); |
|
}, |
|
SET_USER_INFO: (state, userInfo) => { |
|
if (validatenull(userInfo.avatar)) { |
|
userInfo.avatar = "/img/bg/img-logo.png"; |
|
} |
|
state.userInfo = userInfo; |
|
setStore({ name: "userInfo", content: state.userInfo }); |
|
}, |
|
SET_ROLES: (state, roles) => { |
|
state.roles = roles; |
|
}, |
|
SET_PERMISSION: (state, permission) => { |
|
let result = []; |
|
|
|
function getCode(list) { |
|
list.forEach((ele) => { |
|
if (typeof ele === "object") { |
|
const chiildren = ele.children; |
|
const code = ele.code; |
|
if (chiildren) { |
|
getCode(chiildren); |
|
} else { |
|
result.push(code); |
|
} |
|
} |
|
}); |
|
} |
|
|
|
getCode(permission); |
|
state.permission = {}; |
|
result.forEach((ele) => { |
|
state.permission[ele] = true; |
|
}); |
|
setStore({ name: "permission", content: state.permission }); |
|
}, |
|
}, |
|
}; |
|
export default user;
|
|
|