4755cc75ba
- 管理后台用户/统计/日志/配置四页签全部对接真实后端API - auth注册/登录/游客/微信登录事件写入usage_logs表 - 提取信息结果从原始JSON改为卡片式字段列表(中文标签) - 管理后台搜索按钮增加加载态和结果数提示 - 配置WECHAT_APP_ID/WECHAT_APP_SECRET - 客户/产品/报价单CRUD页面完整(导出导入批量操作)
11 KiB
11 KiB
TradeMate (外贸小助手) - 项目进度文档
更新时间: 2026-05-18 20:00
状态: ✅ 管理后台完整可用 + 微信登录配置就绪 + 提取信息结构化展示
一、服务状态
| 服务 | 地址 | 状态 |
|---|---|---|
| 后端 API | http://localhost:8000 | ✅ 运行中 |
| 前端 H5 | http://localhost:5173 | ✅ 运行中 |
| API 文档 | http://localhost:8000/docs | ✅ 可用 |
| Redis | localhost:6379 | ✅ 运行中 |
| PostgreSQL | localhost:5432 | ✅ 运行中 |
测试用户:
- 手机号:
13800138099(或注册新用户) - 密码:
testpass123
二、已完成的工作
1. Bug 修复 (共 13 个)
| 序号 | 文件 | 问题描述 | 状态 |
|---|---|---|---|
| 1 | app/main.py |
中间件顺序错误 - TierMiddleware 需要最先执行 | ✅ 已修复 |
| 2 | app/core/middleware.py |
缺少 getattr 防御性检查 | ✅ 已修复 |
| 3 | app/models/user.py |
Product.user_id 缺少 ForeignKey | ✅ 已修复 |
| 4 | app/models/customer.py |
Customer/Conversation.user_id 缺少 ForeignKey | ✅ 已修复 |
| 5 | app/models/quotation.py |
Quotation.user_id 缺少 ForeignKey | ✅ 已修复 |
| 6 | app/api/v1/deps.py |
get_current_user_id 读取参数而非 HTTP Header | ✅ 已修复 |
| 7 | app/core/security.py |
passlib 与 bcrypt 版本不兼容 | ✅ 已替换为直接 bcrypt |
| 8 | app/ai/providers/openai.py |
max_tokens=1000 不足,导致 Sensenova content 为 None | ✅ 已增加到 3000 |
| 9 | app/ai/providers/openai.py |
Sensenova 特殊 reasoning 字段未处理 | ✅ 已增强 fallback 逻辑 |
| 10 | src/App.vue + 全局样式 |
H5 底部导航覆盖内容 — uni-page 高度未扣除 tabbar | ✅ 设置 height: calc(100% - 50px) + overflow-y: auto |
| 11 | app/api/v1/auth.py + deps.py |
API 500 根因 — 旧 token sub 为 guest_xxx(非 UUID),DB UUID 列查询抛 500,CORS 头无法返回 → 浏览器误报 CORS 错误 |
✅ 游客 ID 改为合法 UUID;get_current_user_id 校验 UUID 格式,旧 token 返回 401 |
| 12 | backend/.env + app/main.py |
CORS 配置不当 — allow_origins 包含 * + FRONTEND_URL 被忽略 |
✅ 去掉通配符,FRONTEND_URL 指向 http://localhost:5173 |
| 13 | uni-app/src/utils/api.js |
前端直连后端端口 → 跨域请求 | ✅ BASE_URL 改为 /api/v1 走 Vite proxy,同源请求消除 CORS |
2. 游客模式 (Guest Mode) 实现 ✅
后端实现
| 功能 | 接口 | 说明 |
|---|---|---|
| 游客登录 | POST /api/v1/auth/login/guest |
生成 JWT,包含 is_guest: true,无需数据库用户 |
| 公开翻译 | POST /api/v1/translate/public/translate |
无需认证,支持中英互译 |
| 公开信息提取 | POST /api/v1/translate/public/extract |
无需认证,提取客户询盘信息 |
游客登录返回示例:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer",
"user": {
"id": "guest_185039a65035",
"phone": null,
"username": "游客用户",
"tier": "guest",
"is_guest": true
}
}
前端实现
| 文件 | 变更 |
|---|---|
src/utils/api.js |
新增 authApi.guestLogin()、translateApi.publicTranslate()、translateApi.publicExtract() 方法 |
src/pages/login/login.vue |
"快速体验"按钮调用游客登录并存储 token |
src/pages/index/index.vue |
游客模式下使用公开 API 端点 |
游客模式测试结果
| 测试项 | 结果 |
|---|---|
| 游客登录 | ✅ 返回 JWT,包含 is_guest: true |
| 公开翻译 (EN→ZH) | ✅ 正常工作 |
| 公开翻译 (ZH→EN) | ✅ 正常工作 |
| 公开信息提取 | ✅ 正确提取 intent、product、quantity、contact_info |
3. 问题根因分析
Sensenova API 返回 None 的问题:
- 原因: Sensenova 模型有
reasoning字段(思考过程),当max_tokens不足时,模型先用 tokens 思考,还没输出 content 就被截断了 - 解决方案:
- 增加
max_tokens从 1000 到 3000 - 增强 fallback 逻辑:当
content为 None 时,尝试从reasoning中提取最终答案,支持多种模式匹配
- 增加
4. 基础 API 测试通过
| 功能 | 接口 | 状态 |
|---|---|---|
| 健康检查 | GET /health |
✅ 200 |
| 用户注册 | POST /api/v1/auth/register |
✅ 200 |
| 用户登录 | POST /api/v1/auth/login |
✅ 200 |
| 游客登录 | POST /api/v1/auth/login/guest |
✅ 200 |
| 获取用户信息 | GET /api/v1/auth/me |
✅ 200 |
| 产品 CRUD | /api/v1/products/* |
✅ 正常 |
| 客户 CRUD | /api/v1/customers/* |
✅ 正常 |
| 数据分析 | /api/v1/analytics/* |
✅ 正常 |
| 套餐计划 | GET /api/v1/payment/plans |
✅ 正常 |
5. AI 功能测试 (全部通过 ✅)
| 功能 | 接口 | 状态 | 测试结果 |
|---|---|---|---|
| 翻译 | POST /api/v1/translate/ |
✅ 正常 | 中译英、英译中都正常 |
| 智能回复 | POST /api/v1/translate/reply |
✅ 正常 | 生成 2 种风格回复建议 |
| 信息提取 | POST /api/v1/translate/extract |
✅ 正常 | 正确提取客户意图、产品、数量 |
| 公开翻译 | POST /api/v1/translate/public/translate |
✅ 正常 | 无需认证,中英互译 |
| 公开提取 | POST /api/v1/translate/public/extract |
✅ 正常 | 无需认证,提取信息 |
| 营销文案 | POST /api/v1/marketing/generate |
✅ 正常 | 生成 3 种风格文案 |
| 报价单生成 | POST /api/v1/quotations/generate-from-inquiry |
✅ 正常 | 从询盘自动生成报价单 |
| 数据分析 | GET /api/v1/analytics/overview |
✅ 正常 | 客户/翻译/报价单统计 |
6. 前端 H5 服务
前端 uni-app + Vue 3 项目已启动:
- 地址: http://localhost:5173
- 后端 API 代理配置: Vite proxy (
/api→http://localhost:8000)
前端功能:
- 登录页: 支持 "快速体验" 进入游客模式,微信登录按钮 H5 隐藏(条件编译)
- 首页: 游客模式显示快速体验区域,支持翻译和信息提取;登录用户显示统计卡片、待跟进客户、快捷操作
- 游客模式: 使用公开 API 端点,无需登录
7. 底部导航修复 & 自定义 tabbar 升级
| 阶段 | 改动 | 说明 |
|---|---|---|
| 切回原生 tabbar | pages.json custom: true → false |
解决自定义 tabbar 因 position: fixed + 父级 transform 定位异常问题 |
| 清理 CSS 遗留 | App.vue 删除 tabbar 相关 CSS |
删除 height: calc(100% - 50px)、z-index 等,让框架自动管理原生 tabbar 布局 |
| 恢复快捷按钮 | index.vue quick-actions 恢复 |
首页快捷操作按钮重新显示 |
| 升级自定义 tabbar | pages.json custom: false → true |
切回自定义 tabbar 支持 emoji 图标 |
| 修复 emoji 渲染 | custom-tab-bar/index.vue |
line-height: 1 → 1.5,追加 emoji 字体族 Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji |
9. 管理后台完整可用 + 注册登录日志
| 功能 | 文件 | 说明 |
|---|---|---|
| 用户管理(列表/搜索/改套餐/改角色/启用禁用) | admin.py + admin.vue |
全部对接真实 API |
| 使用统计 | admin.py |
查询 usage_logs 表,含今日各功能调用 + 7日趋势 |
| 操作日志 | admin.py |
带筛选器(动作/用户ID/日期范围)+ 分页 |
| 系统配置 | admin.vue |
卡片表单(input/switch/textarea),按配置项逐字段编辑 |
| 注册/登录记日志 | auth.py |
user.register/user.login/user.login_guest/user.wechat_login 写入 usage_logs |
| 管理后台搜索按钮反馈 | admin.vue |
按钮加载态 "搜索中..." + 结果数 toast |
10. 提取信息结果结构化展示
| 文件 | 改前 | 改后 |
|---|---|---|
translate.vue |
显示原始 JSON | 卡片式字段列表(字段名中文,如"产品名称""数量") |
index.vue |
显示原始 JSON | 同上 |
11. 微信静默登录配置
.env 已写入 WECHAT_APP_ID/WECHAT_APP_SECRET,前端 login.vue 已内置:
- 微信小程序:
uni.login()→ code →/auth/wechat-login - H5 微信浏览器:公众号 OAuth
snsapi_base静默授权
8. 首页快捷入口重新设计
底部导航已有"翻译、客户、营销、报价",首页快捷入口原先完全重复。重新设计为从"更多功能"区提取最高频功能:
| 原快捷入口 | 新快捷入口 | 说明 |
|---|---|---|
| 智能翻译 → 底部导航已有 | 产品库 | 外贸人每天查产品 |
| 客户管理 → 底部导航已有 | 跟进 | 写跟进是日常高频动作,带待办角标 |
| 营销文案 → 底部导航已有 | 数据 | 一键看业务概览 |
| 报价单 → 底部导航已有 | 通知 | 及时看消息提醒,带未读角标 |
同时 goToPage 函数重构为按 tabbar 页面列表自动判断 switchTab/navigateTo,不再硬编码。
三、待办事项
中优先级
- 管理后台统计/日志页有数据验证(目前
usage_logs为空,显示暂无数据)
低优先级
- 测试 WhatsApp 集成
- 性能优化测试
- 自定义 tabbar emoji 渲染效果验证(若仍有问题,改用
iconPath/selectedIconPath图片图标)
四、技术栈
| 层级 | 技术 |
|---|---|
| 后端 | FastAPI + SQLAlchemy + asyncpg |
| 数据库 | PostgreSQL + Redis |
| AI 提供商 | Sensenova (星火大模型), Spark (科大讯飞) |
| 前端 | uni-app + Vue 3 + Vite |
五、历史变更记录
| 日期 | 变更内容 |
|---|---|
| 2026-05-12 | 修复 9 个 Bug,启动后端+前端服务,完成所有 API 测试,AI 功能全部正常 |
| 2026-05-12 | 实现游客模式:新增 /api/v1/auth/login/guest、/api/v1/translate/public/* 端点,前端支持游客体验 |
| 2026-05-12 | 修复 H5 底部导航覆盖问题:精简 App.vue,uni-page 设置 calc(100% - 50px) + 独立滚动 |
| 2026-05-13 | 修复 CORS + API 500 根因:游客 UUID 格式、Vite proxy 替代直连、CORS 配置修正 |
| 2026-05-13 | 自定义 tabbar 升级:切回 custom: true,修复 emoji line-height 和字体族 |
| 2026-05-13 | 首页快捷入口重新设计:产品库/跟进/数据/通知,替换原有重复项 |
| 2026-05-18 | 管理后台完整可用(用户/统计/日志/配置)+ 注册登录记日志 + 提取信息结构化展示 + 微信登录配置就绪 |
启动脚本: /tmp/start_trademate.sh
日志文件:
- 后端:
/tmp/trademate_backend.log - 前端:
/tmp/trademate_frontend.log
六、快速验证
用户可以在浏览器中访问:
- 前端 H5: http://localhost:5173
- API 文档: http://localhost:8000/docs
游客模式体验:
- 点击 "快速体验" 按钮
- 无需登录即可体验翻译和信息提取功能
注册用户登录:
- 手机号:
13800138099 - 密码:
testpass123
本文档由任务进度跟踪系统维护