# API 对接说明 > 更新时间: 2026-01-09 --- ## ✅ 已完成的修改 ### 1. 创建了认证 API 服务 **文件**: `src/api/authApi.ts` ```typescript import { AuthService } from '@/api/authApi' // 登录 AuthService.login({ username, password, remember }) // 获取用户信息 AuthService.getUserInfo() // 登出 AuthService.logout() // 刷新Token AuthService.refreshToken(refreshToken) ``` ### 2. 修改了登录逻辑 **文件**: `src/composables/useLogin.ts` **关键修改**: - ✅ 添加了 `USE_MOCK` 开关(第 29 行) - ✅ 创建了 `handleRealLogin()` 真实API登录函数 - ✅ 保留了 `handleMockLogin()` Mock登录函数(方便开发测试) **切换方式**: ```typescript // 文件: src/composables/useLogin.ts 第 29 行 // 使用 Mock 数据(开发测试) const USE_MOCK = true // 使用真实 API(生产环境) const USE_MOCK = false // ← 当前设置 ``` --- ## 🔌 API 接口规范 ### 登录接口 **请求地址**: `POST /api/auth/login` **请求参数**: ```typescript { username: string // 用户名 password: string // 密码 remember?: boolean // 是否记住密码 captcha?: string // 验证码(可选) } ``` **响应格式**: ```typescript { code: number // 状态码:200 成功 message: string // 消息 data: { token: string // 访问令牌 (必需) refreshToken?: string // 刷新令牌 (可选) expiresIn?: number // 过期时间(秒) (可选) userInfo: { // 用户信息 (推荐返回,避免二次请求) id: string | number username: string realName: string roles: string[] // 角色列表 ['R_SUPER', 'R_ADMIN', ...] permissions: string[] // 权限列表 ['*:*:*', 'user:edit', ...] avatar?: string email?: string phone?: string // ... 其他用户信息 } } } ``` ### 获取用户信息接口 **请求地址**: `GET /api/auth/userInfo` **请求头**: ``` Authorization: Bearer {token} ``` **响应格式**: ```typescript { code: 200, message: 'success', data: { id: string | number username: string realName: string roles: string[] permissions: string[] avatar?: string email?: string phone?: string } } ``` --- ## 🔐 权限控制说明 ### 角色定义 系统预定义了以下角色(可根据需求调整): ```typescript enum UserRole { SUPER_ADMIN = 'R_SUPER', // 超级管理员 ADMIN = 'R_ADMIN', // 管理员 AGENT = 'R_AGENT', // 代理商 ENTERPRISE = 'R_ENTERPRISE' // 企业客户 } ``` ### 权限格式 权限使用通配符格式:`模块:操作:范围` **示例**: - `*:*:*` - 所有权限 - `user:*:*` - 用户模块所有权限 - `user:edit:*` - 用户编辑权限 - `card:view:own` - 查看自己的卡 ### 前端权限验证 **路由级权限**(在 `asyncRoutes.ts` 中配置): ```typescript { path: '/system/user', meta: { roles: ['R_SUPER', 'R_ADMIN'] // 只有超管和管理员可访问 } } ``` **按钮级权限**(使用 `v-auth` 指令): ```vue 编辑 ``` --- ## 📦 状态码规范 **推荐使用的状态码** (已在 `src/utils/http/status.ts` 定义): ```typescript export enum ApiStatus { success = 200, // 成功 unauthorized = 401, // 未授权 forbidden = 403, // 禁止访问 notFound = 404, // 未找到 serverError = 500 // 服务器错误 } ``` --- ## 🚀 快速上手 ### 1. 配置API地址 **文件**: `.env.development` ```env # API 地址前缀 VITE_API_URL = http://your-backend-api.com # 或者使用代理(推荐) VITE_API_URL = /api ``` **文件**: `vite.config.ts` (如果使用代理) ```typescript server: { proxy: { '/api': { target: 'http://your-backend-api.com', // 后端地址 changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } ``` ### 2. 切换到真实API **文件**: `src/composables/useLogin.ts` 第 29 行 ```typescript const USE_MOCK = false // 改为 false ``` ### 3. 测试登录 1. 启动开发服务器:`npm run dev` 2. 访问登录页面:`http://localhost:3006/#/auth/login` 3. 输入后端提供的测试账号密码 4. 点击登录 --- ## 🔧 调试技巧 ### 1. 查看请求/响应 打开浏览器开发者工具(F12)→ Network 标签,查看: - 请求URL - 请求参数 - 响应数据 - 状态码 ### 2. Mock 和真实API切换 ```typescript // src/composables/useLogin.ts const USE_MOCK = true // 开发时使用 Mock const USE_MOCK = false // 对接时使用真实 API ``` ### 3. Token 检查 打开浏览器控制台(F12)→ Application → Local Storage → 查看 `user` 键: ```json { "isLogin": true, "accessToken": "your-token-here", "info": { ... } } ``` ### 4. 请求拦截器日志 **文件**: `src/utils/http/interceptors.ts` 已自动添加请求/响应日志,在控制台可以看到: - 🚀 发送请求 - ✅ 请求成功 - ❌ 请求失败 --- ## ⚠️ 常见问题 ### Q1: 登录后提示"获取用户角色失败" **原因**: 后端返回的用户信息中没有 `roles` 字段 **解决**: 1. 确保后端返回的 `userInfo.roles` 是数组 2. 至少包含一个角色,如:`["R_ADMIN"]` ### Q2: 登录成功但页面一直转圈 **原因**: 路由守卫中没有通过权限验证 **解决**: 1. 检查用户信息中是否有 `roles` 字段 2. 临时开启开发模式跳过权限验证(见下文) ### Q3: 如何临时跳过权限验证? **文件**: `src/router/guards/beforeEach.ts` 第 28 行 ```typescript const DEV_MODE_SKIP_AUTH = true // 改为 true,跳过所有权限验证 ``` ### Q4: Token 过期如何处理? 系统已自动处理 Token 过期: 1. 检测到 401 状态码自动跳转登录页 2. 可实现自动刷新 Token(需要后端支持) --- ## 📝 后端接口开发建议 ### 1. 登录接口返回完整用户信息 避免前端登录后再次调用获取用户信息接口,减少请求次数。 ### 2. 用户信息必须包含 roles ```json { "roles": ["R_ADMIN", "R_USER"] // 必须 } ``` ### 3. 支持 Token 刷新机制 ```typescript // 刷新Token接口 POST /api/auth/refresh { "refreshToken": "refresh-token-here" } ``` ### 4. 统一响应格式 ```typescript { code: 200, message: "success", data: { ... } } ``` --- ## ✨ 下一步 1. ✅ 后端提供测试环境API地址 2. ✅ 配置 `VITE_API_URL` 或代理 3. ✅ 切换 `USE_MOCK = false` 4. ✅ 测试登录功能 5. ✅ 根据实际API调整请求/响应格式 6. ✅ 完善其他业务接口 --- **联系支持**: - 前端问题:查看本文档或项目 README - 后端对接:与后端开发人员沟通接口格式 祝对接顺利!🚀