131 lines
3.2 KiB
TypeScript
131 lines
3.2 KiB
TypeScript
import { storageLocal } from "@pureadmin/utils";
|
||
import { useUserStoreHook } from "@/store/modules/user";
|
||
import { getUserInfoAPI } from "@/api/login";
|
||
|
||
export interface UserInfo {
|
||
/** 用户名 */
|
||
username: string;
|
||
/** 用户性别 */
|
||
gender: number;
|
||
/** 用户昵称 */
|
||
nickname?: string;
|
||
/**用户邮箱 */
|
||
email?: string;
|
||
/**用户手机号 */
|
||
phone?: string;
|
||
/**用户角色 */
|
||
roles?: Array<string>;
|
||
/**用户权限 */
|
||
permissions?: Array<string>;
|
||
/**用户部门ID */
|
||
department_id?: string;
|
||
/**用户头像 */
|
||
avatar?: string;
|
||
/**用户数据库ID */
|
||
id?: string;
|
||
}
|
||
|
||
export const userTokenKey = "user-token";
|
||
|
||
export const userInfoKey = "user-info";
|
||
|
||
export interface UserToken {
|
||
/**
|
||
* 用户Token
|
||
*/
|
||
accessToken: string;
|
||
/**
|
||
* 过期时间(时间戳)
|
||
*/
|
||
expiresTime: number;
|
||
/**
|
||
* 用于调用刷新accessToken的接口时所需的token
|
||
*/
|
||
refreshToken: string;
|
||
}
|
||
|
||
/**存储用户Token信息 */
|
||
export function setToken(data: UserToken) {
|
||
useUserStoreHook().SET_ACCESSTOKEN(data.accessToken);
|
||
useUserStoreHook().SET_REFRESHTOKEN(data.refreshToken);
|
||
useUserStoreHook().SET_EXPIRES(data.expiresTime);
|
||
storageLocal().setItem(userTokenKey, data);
|
||
}
|
||
|
||
/**存储用户信息 */
|
||
export function setUserInfo(data: UserInfo) {
|
||
useUserStoreHook().SET_AVATAR(data.avatar);
|
||
useUserStoreHook().SET_USERNAME(data.username);
|
||
useUserStoreHook().SET_NICKNAME(data.nickname);
|
||
useUserStoreHook().SET_EMAIL(data.email);
|
||
useUserStoreHook().SET_PHONE(data.phone);
|
||
useUserStoreHook().SET_DEPARTMENT_ID(data.department_id);
|
||
useUserStoreHook().SET_ROLES(data.roles);
|
||
useUserStoreHook().SET_PERMISSIONS(data.permissions);
|
||
useUserStoreHook().SET_ID(data.id);
|
||
useUserStoreHook().SET_GENDER(data.gender);
|
||
storageLocal().setItem(userInfoKey, data);
|
||
}
|
||
|
||
/** 删除`token`以及key值为`user-info`的localStorage信息 */
|
||
export function removeToken() {
|
||
storageLocal().removeItem(userTokenKey);
|
||
}
|
||
|
||
/** 格式化token(jwt格式) */
|
||
export const formatToken = (token: string): string => {
|
||
return "Bearer " + token;
|
||
};
|
||
|
||
/**
|
||
* 获取Token信息
|
||
* @returns
|
||
*/
|
||
export function getTokenInfo(): {
|
||
isRefresh: boolean;
|
||
isExpire: boolean;
|
||
accesstoken: string;
|
||
refreshToken: string;
|
||
} {
|
||
const userStore = useUserStoreHook();
|
||
const expires = userStore?.expires ?? 0;
|
||
const now = Date.now();
|
||
const diff = expires - now / 1000;
|
||
const accessToken = userStore?.accessToken ?? "";
|
||
const refreshToken = userStore?.refreshToken ?? "";
|
||
|
||
if (diff > 0) {
|
||
return {
|
||
isRefresh: diff <= 1800000,
|
||
isExpire: false,
|
||
accesstoken: accessToken,
|
||
refreshToken: refreshToken
|
||
};
|
||
} else {
|
||
return {
|
||
isRefresh: true,
|
||
isExpire: true,
|
||
accesstoken: accessToken,
|
||
refreshToken: refreshToken
|
||
};
|
||
}
|
||
}
|
||
|
||
/**判断是否有权限 */
|
||
export const hasAuth = (auth: string) => {
|
||
return useUserStoreHook().permissions.includes(auth);
|
||
};
|
||
|
||
/**获取用户信息 */
|
||
export const getUserInfo = async () => {
|
||
const res = await getUserInfoAPI();
|
||
if (res.success) {
|
||
const user = storageLocal().getItem<object>(userInfoKey);
|
||
storageLocal().setItem(userInfoKey, {
|
||
...user,
|
||
...res.data
|
||
});
|
||
setUserInfo(res.data);
|
||
}
|
||
};
|