mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-27 06:41:12 +00:00
- 全面更新README,添加项目特性、架构设计与技术栈介绍 - 详细补充项目结构说明及模块设计规范 - 增加快速开始步骤,包括环境配置、数据库初始化和服务启动 - 补充主要API模块路径和认证授权使用示例 - 添加开发指南、数据库迁移与测试方法 - 集成监控、日志级别说明及性能监控内容 - 完善Docker、传统部署及Nginx配置示例 - 添加贡献指南和代码规范说明 - 新增MCP模块概述及智能对话API接口文档 - 清理和移除module_ai中旧的mcp_server相关实现代码 - 在api/v1初始化文件中注册AI模块路由 - 修改resource模块,增强资源路径安全检查和文件类型检测逻辑 - 增强资源搜索和上传服务的健壮性及安全性
85 lines
2.3 KiB
TypeScript
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,
|
|
};
|
|
});
|