131 lines
3.2 KiB
TypeScript
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 { 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);
}
/** 格式化tokenjwt格式 */
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);
}
};