feat: 添加账户设置功能页面且兼容移动端 (#1022)

This commit is contained in:
EchoByte
2024-04-12 16:20:33 +08:00
committed by GitHub
parent 296db3789b
commit 332678ba88
25 changed files with 860 additions and 22 deletions

View File

@@ -9,8 +9,12 @@ export interface DataInfo<T> {
expires: T;
/** 用于调用刷新accessToken的接口时所需的token */
refreshToken: string;
/** 头像 */
avatar?: string;
/** 用户名 */
username?: string;
/** 昵称 */
nickname?: string;
/** 当前登陆用户的角色 */
roles?: Array<string>;
}
@@ -37,7 +41,7 @@ export function getToken(): DataInfo<number> {
* @description 设置`token`以及一些必要信息并采用无感刷新`token`方案
* 无感刷新:后端返回`accessToken`(访问接口使用的`token`)、`refreshToken`(用于调用刷新`accessToken`的接口时所需的`token``refreshToken`的过期时间比如30天应大于`accessToken`的过期时间比如2小时、`expires``accessToken`的过期时间)
* 将`accessToken`、`expires`这两条信息放在key值为authorized-token的cookie里过期自动销毁
* 将`username`、`roles`、`refreshToken`、`expires`这条信息放在key值为`user-info`的localStorage里利用`multipleTabsKey`当浏览器完全关闭后自动销毁)
* 将`avatar`、`username`、`nickname`、`roles`、`refreshToken`、`expires`这条信息放在key值为`user-info`的localStorage里利用`multipleTabsKey`当浏览器完全关闭后自动销毁)
*/
export function setToken(data: DataInfo<Date>) {
let expires = 0;
@@ -62,26 +66,44 @@ export function setToken(data: DataInfo<Date>) {
: {}
);
function setUserKey(username: string, roles: Array<string>) {
function setUserKey({ avatar, username, nickname, roles }) {
useUserStoreHook().SET_AVATAR(avatar);
useUserStoreHook().SET_USERNAME(username);
useUserStoreHook().SET_NICKNAME(nickname);
useUserStoreHook().SET_ROLES(roles);
storageLocal().setItem(userKey, {
refreshToken,
expires,
avatar,
username,
nickname,
roles
});
}
if (data.username && data.roles) {
const { username, roles } = data;
setUserKey(username, roles);
setUserKey({
avatar: data?.avatar ?? "",
username,
nickname: data?.nickname ?? "",
roles
});
} else {
const avatar =
storageLocal().getItem<DataInfo<number>>(userKey)?.avatar ?? "";
const username =
storageLocal().getItem<DataInfo<number>>(userKey)?.username ?? "";
const nickname =
storageLocal().getItem<DataInfo<number>>(userKey)?.nickname ?? "";
const roles =
storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [];
setUserKey(username, roles);
setUserKey({
avatar,
username,
nickname,
roles
});
}
}