refactor: ♻️ 我的页面重构
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user