Initial project

This commit is contained in:
Timi
2025-07-08 16:33:11 +08:00
parent 1a5a16be74
commit f862530142
80 changed files with 8301 additions and 129 deletions

77
src/store/user.ts Normal file
View File

@@ -0,0 +1,77 @@
import { LoginResponse, LoginToken, LoginUser, Storage, UserAPI, UserToken } from "timi-web";
const loginUser = reactive<LoginUser>({
token: undefined,
user: undefined
});
function isLogged(): boolean {
return !!loginUser.user;
}
async function login4Token(token: LoginToken): Promise<LoginResponse | null> {
loginUser.token = token;
// 未过期
try {
const resp = await UserAPI.login4Token();
await updateToken(resp);
return resp;
} catch (e) {
await logout();
}
return null;
}
async function login4Storage(): Promise<LoginResponse | null> {
if (!loginUser.user && (loginUser.token || Storage.has("token"))) {
// 未登录,储存有令牌
const token = Storage.getJSON("token") as UserToken;
if (new Date().getTime() < token.expireAt) {
return await login4Token(token);
}
}
return null;
}
async function updateToken(loginResponse: LoginResponse): Promise<void> {
loginUser.token = {
id: loginResponse.id,
value: loginResponse.token,
expireAt: loginResponse.expireAt
};
loginUser.user = await UserAPI.view(loginResponse.id);
Storage.setJSON("token", {
value: loginUser.token.value,
expireAt: loginUser.token.expireAt
} as UserToken);
}
async function logout(): Promise<void> {
await UserAPI.logout();
loginUser.token = undefined;
loginUser.user = undefined;
Storage.remove("token");
}
async function reloadProfile() {
if (loginUser.token && loginUser.token.id) {
loginUser.user = await UserAPI.view(loginUser.token.id);
}
}
const userStore = {
loginUser,
isLogged,
login4Token,
login4Storage,
updateToken,
logout,
reloadProfile
};
export {
userStore
};