web-report/front/store/userinfoStore.ts

100 lines
2.7 KiB
TypeScript

import {create} from "zustand";
import Storage from "../service/storage.ts";
import {getInfo, login} from './../service/user.ts'
import {APP_CONFIG} from "../config.ts";
import {UserModel} from "../../model";
type LoginDataType = { account: string; code?: string; password: string }
const LOGIN_TOKEN_KEY = APP_CONFIG.LOGIN_TOKEN_KEY, CACHE = {
init: false
};
export const useUserinfoStore = create<{
/**
* 用户信息
*/
userinfo: UserModel;
/**
* 用户登录凭证
*/
token?: string;
/**
* 登录
* @param data
* @param type
*/
login: (data: LoginDataType) => Promise<void>;
/**
* 注销用户登录信息
*/
logout: () => Promise<void>;
/**
* 初始化用户数据
*/
init: () => void;
}>((set, _, _state) => {
return {
userinfo: {
id: 0
},
loginModalVisible: false,
init: () => {
const state = _state.getState()
if (state.token) {
return;
}
const token = Storage.get<string>(LOGIN_TOKEN_KEY);
if (token) {
getInfo().then((info) => {
set({
userinfo: info,
token
})
})
}
// return new Promise<void>((resolve) => {
// if (token) {
// getInfo().then((info) => {
// set({
// userinfo: info,
// token
// })
// })
// }
// resolve();
// });
},
logout: () => {
return new Promise<void>((resolve) => {
setTimeout(() => {
set({
userinfo: {
id: 0
},
token: undefined
})
Storage.remove(LOGIN_TOKEN_KEY)
resolve();
}, 500);
});
},
login: (data) => {
return new Promise<void>((resolve, reject) => {
login(data.account, data.password).then((ret) => {
const token = ret.token;
Storage.put(LOGIN_TOKEN_KEY, token)
getInfo().then(userinfo => {
set({
userinfo,
token: userinfo.token
})
resolve()
}).catch(reject)
}).catch(reject)
})
}
}
})