100 lines
2.7 KiB
TypeScript
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)
|
|
})
|
|
}
|
|
}
|
|
})
|