refactor: ♻️ 我的页面重构

This commit is contained in:
ray
2024-10-15 08:31:03 +08:00
parent 3dec53af38
commit c21b15d793
22 changed files with 6888 additions and 5319 deletions

View File

@@ -1,48 +1,48 @@
import { defineStore } from "pinia";
import AuthAPI from "@/api/auth";
import UserAPI, { UserInfo } from "@/api/user";
import { setToken, clearToken } from "@/utils/auth";
import AuthAPI, { type LoginFormData } from "@/api/auth";
import UserAPI, { type UserInfo } from "@/api/user";
import { setToken, getUserInfo, setUserInfo, clearAll } from "@/utils/cache";
export const useUserStore = defineStore("user", () => {
// 确保 token 是响应式的
const token = ref<string>(uni.getStorageSync("token") || "");
const userInfo = ref<UserInfo | null>(null);
const userInfo = ref<UserInfo | null>(getUserInfo());
// 登录
const login = (username: string, password: string) => {
AuthAPI.login(username, password)
.then((res) => {
token.value = ` ${res.accessToken}`; // Bearer token
setToken(token.value);
})
.catch((error) => {
if (error.action === "TOKEN_INVALID") {
// 处理 Token 失效,比如弹出登录提示框,而不是直接跳转
console.log("Token 已失效,请重新登录");
// 例如uni.navigateTo({ url: '/pages/login/index' });
} else {
// 处理其他错误
console.error("请求失败", error.message);
}
});
const login = (data: LoginFormData) => {
return new Promise((resolve, reject) => {
AuthAPI.login(data)
.then((data) => {
setToken(data.accessToken);
getInfo();
resolve(data);
})
.catch((error) => {
console.error("登录失败", error);
reject(error); // 将错误抛出
});
});
};
// 获取用户信息
const getUserInfo = async () => {
const info = await UserAPI.getUserInfo();
userInfo.value = info;
const getInfo = () => {
UserAPI.getUserInfo().then((data) => {
setUserInfo(data);
userInfo.value = data;
});
};
// 登出
const logout = async () => {
await AuthAPI.logout();
userInfo.value = null;
token.value = ""; // 清空 token
clearToken(); // 从本地缓存移除 token
try {
await AuthAPI.logout(); // 调用后台注销接口
} catch (error) {
console.error("登出失败", error);
} finally {
clearAll(); // 清除本地的 token 和用户信息缓存
userInfo.value = null; // 清空用户信息
}
};
return {
token,
userInfo,
login,
logout,