Files
FastapiAdmin/fastapp/src/store/modules/user.store.ts
T
zhangtao 01fd6c8ea4 docs(backend): 重构后端README文档,完善项目文档与开发指南
- 全面更新README,添加项目特性、架构设计与技术栈介绍
- 详细补充项目结构说明及模块设计规范
- 增加快速开始步骤,包括环境配置、数据库初始化和服务启动
- 补充主要API模块路径和认证授权使用示例
- 添加开发指南、数据库迁移与测试方法
- 集成监控、日志级别说明及性能监控内容
- 完善Docker、传统部署及Nginx配置示例
- 添加贡献指南和代码规范说明
- 新增MCP模块概述及智能对话API接口文档
- 清理和移除module_ai中旧的mcp_server相关实现代码
- 在api/v1初始化文件中注册AI模块路由
- 修改resource模块,增强资源路径安全检查和文件类型检测逻辑
- 增强资源搜索和上传服务的健壮性及安全性
2025-09-08 00:45:34 +08:00

85 lines
2.3 KiB
TypeScript

import { defineStore } from "pinia";
import UserAPI, { type UserInfo } from "@/api/user";
import AuthAPI, { type LoginFormData, type LoginResult, type LogoutBody } from "@/api/auth";
import { getAccessToken, setAccessToken, setRefreshToken, clearAll, getUserInfo, setUserInfo } from "@/utils/auth";
export const useUserStore = defineStore("appUserInfo", () => {
const userInfo = ref<UserInfo | undefined>(getUserInfo());
const isLoggingIn = ref(false);
// 统一的登录处理方法
const handleLogin = async (loginFn: () => Promise<LoginResult>, loginType: string) => {
if (isLoggingIn.value) return;
isLoggingIn.value = true;
try {
const result = await loginFn();
setAccessToken(result.access_token);
setRefreshToken(result.refresh_token);
// 登录成功后获取用户信息
await getInfo();
return result;
} catch (error: any) {
console.error(`${loginType}登录失败`, error);
throw error;
} finally {
isLoggingIn.value = false;
}
};
// 账号密码登录
const login = async (data: LoginFormData) => {
return handleLogin(() => AuthAPI.login(data), "账号密码");
};
// 获取用户信息
const getInfo = async () => {
try {
const userInfoData = await UserAPI.getCurrentUserInfo();
setUserInfo(userInfoData);
// 确保响应式数据更新
userInfo.value = userInfoData;
return userInfoData;
} catch (error) {
console.error("获取用户信息失败", error);
return null;
}
};
// 登出
const logout = async () => {
try {
const logoutBody: LogoutBody = {
token: getAccessToken() || "",
};
await AuthAPI.logout(logoutBody); // 调用后台注销接口
} catch (error) {
console.error("登出失败", error);
} finally {
clearAll(); // 清除本地的 token
userInfo.value = undefined; // 清空用户信息
// 跳转到登录页面
uni.reLaunch({
url: "/pages/login/index",
});
}
};
// 判断用户信息是否完整
const isUserInfoComplete = (): boolean => {
if (!userInfo.value) return false;
return !!(userInfo.value.username && userInfo.value.avatar);
};
return {
userInfo,
isLoggingIn,
login,
logout,
getInfo,
isUserInfoComplete,
};
});