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