2023-12-14 10:15:23 +08:00
|
|
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
|
|
|
import useUserStore from "@/stores/user";
|
|
|
|
|
|
import router from "@/router";
|
|
|
|
|
|
import { Session, Local } from "@/utils/storage";
|
2023-12-19 23:00:43 +08:00
|
|
|
|
import {
|
|
|
|
|
|
userLogin,
|
|
|
|
|
|
getUserDetailInfo,
|
|
|
|
|
|
userLogout,
|
|
|
|
|
|
userRegister,
|
|
|
|
|
|
} from "@/apis/auth";
|
2023-12-14 10:15:23 +08:00
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 用户名密码登录
|
|
|
|
|
|
const loginFun = async (params) => {
|
2023-12-22 22:25:37 +08:00
|
|
|
|
try {
|
|
|
|
|
|
const res = await userLogin(params);
|
|
|
|
|
|
ElMessage({
|
|
|
|
|
|
message: `您好${params.userName},登录成功!`,
|
|
|
|
|
|
type: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
loginSuccess(res);
|
|
|
|
|
|
return res;
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
const { data } = error;
|
|
|
|
|
|
if (error.status === 403 && data.error?.message === "验证码错误") {
|
|
|
|
|
|
useUserStore().updateCodeImage();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-12-14 10:15:23 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 获取用户基本信息、角色、菜单权限
|
|
|
|
|
|
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 {
|
|
|
|
|
|
// 存储用户信息
|
2023-12-20 23:29:55 +08:00
|
|
|
|
await useUserStore().getInfo(); // 用户信息
|
2023-12-14 10:15:23 +08:00
|
|
|
|
// 登录成功后 路由跳转
|
2023-12-16 22:46:10 +08:00
|
|
|
|
// 如果有记录当前跳转页面
|
|
|
|
|
|
const currentPath = Session.get("currentPath");
|
|
|
|
|
|
if (currentPath) {
|
2023-12-22 23:12:47 +08:00
|
|
|
|
router.replace(currentPath);
|
2023-12-16 22:46:10 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
router.replace({
|
|
|
|
|
|
path: option.loginReUrl ? option.loginReUrl : option.homeUrl,
|
|
|
|
|
|
query: option.otherQuery,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2023-12-14 10:15:23 +08:00
|
|
|
|
} catch (error) {
|
|
|
|
|
|
removeToken();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2023-12-19 23:00:43 +08:00
|
|
|
|
// 注册
|
|
|
|
|
|
const registerFun = async (params) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
await userRegister(params);
|
|
|
|
|
|
ElMessage({
|
|
|
|
|
|
message: `恭喜!${params.userName},注册成功!请登录!`,
|
|
|
|
|
|
type: "success",
|
|
|
|
|
|
});
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.log(error);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2023-12-14 10:15:23 +08:00
|
|
|
|
return {
|
|
|
|
|
|
getToken,
|
|
|
|
|
|
setToken,
|
|
|
|
|
|
removeToken,
|
|
|
|
|
|
loginFun,
|
|
|
|
|
|
getUserInfo,
|
|
|
|
|
|
logoutFun,
|
|
|
|
|
|
clearStorage,
|
2023-12-19 23:00:43 +08:00
|
|
|
|
registerFun,
|
2023-12-14 10:15:23 +08:00
|
|
|
|
};
|
|
|
|
|
|
}
|