Files
Yi.Framework/Yi.BBS.Vue3/src/hooks/useAuths.js
2023-12-12 15:23:18 +08:00

139 lines
3.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 { ElMessage, ElMessageBox } from "element-plus";
import useUserStore from "@/stores/user";
import router from "@/router";
import { Session, Local } from "@/utils/storage";
import { userLogin, getUserDetailInfo, userLogout } from "@/apis/auth";
const TokenKey = "AccessToken";
export const AUTH_MENUS = "AUTH_MENUS";
export const AUTH_USER = "AUTH_USER";
export default function useAuths(opt) {
const defaultOpt = {
loginUrl: "/login", // 登录页跳转url 默认: /login
loginReUrl: "", // 登录页登陆成功后带重定向redirect=的跳转url 默认为空
homeUrl: "/index", // 主页跳转url 默认: /index
otherQuery: {}, // 成功登录后携带的除redirect外其他参数
};
let option = {
...defaultOpt,
...opt,
};
// 获取token
const getToken = () => {
return Session.get(TokenKey);
};
// 存储token到cookies
const setToken = (token) => {
if (token == null) {
return false;
}
Session.set(TokenKey, token);
return true;
};
// 删除token
const removeToken = () => {
Session.remove(TokenKey);
return true;
};
// 退出登录
const logoutFun = async () => {
let flag = true;
try {
await userLogout().then((res) => {
ElMessage({
message: "退出成功",
type: "info",
duration: 2000,
});
});
} catch (error) {
flag = await ElMessageBox.confirm(
`退出登录失败,是否强制退出?`,
"提示",
{
confirmButtonText: "确 定",
cancelButtonText: "取 消",
type: "warning",
}
)
.then(() => {
return true;
})
.catch(() => {
//取消
return false;
});
}
if (flag) {
clearStorage();
}
};
// 清空本地存储的信息
const clearStorage = () => {
Session.clear();
Local.clear();
removeToken();
window.location.reload();
Session.set("vuex", null);
};
// 用户名密码登录
const loginFun = async (params) => {
const res = await userLogin(params);
ElMessage({
message: `您好${params.userName},登录成功!`,
type: "success",
});
loginSuccess(res);
return res;
};
// 获取用户基本信息、角色、菜单权限
const getUserInfo = async () => {
try {
let { data } = await getUserDetailInfo();
// useUserStore
// store.dispatch("updateUserInfo", result);
return data;
} catch (error) {
return {};
}
};
// 登录成功之后的操作
const loginSuccess = async (res) => {
const { token } = res.data;
setToken(token);
try {
// 存储用户信息
await getUserInfo(); // 用户信息
// 登录成功后 路由跳转
router.replace({
path: option.loginReUrl ? option.loginReUrl : option.homeUrl,
query: option.otherQuery,
});
} catch (error) {
removeToken();
return false;
}
};
return {
getToken,
setToken,
removeToken,
loginFun,
getUserInfo,
logoutFun,
clearStorage,
};
}