Files
trade-assistant/PROGRESS.md
T
TradeMate Dev f70dd24c7d feat: upgrade custom tabbar with emoji support, redesign quick-actions
- Switch back to custom tabbar (custom: true) with emoji fix (line-height, font-family)
- Redesign home quick-actions: product/followup/analytics/notifications replace redundant nav items
- Refactor goToPage to auto-detect tabbar vs non-tabbar pages
- Update PROGRESS.md
2026-05-13 18:23:58 +08:00

9.3 KiB
Raw Blame History

TradeMate (外贸小助手) - 项目进度文档

更新时间: 2026-05-13 12:00
状态: CORS/API 500 修复 + 自定义 tabbar 升级(emoji 正常渲染) - 所有功能正常


一、服务状态

服务 地址 状态
后端 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 subguest_xxx(非 UUID),DB UUID 列查询抛 500,CORS 头无法返回 → 浏览器误报 CORS 错误 游客 ID 改为合法 UUIDget_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 就被截断了
  • 解决方案:
    1. 增加 max_tokens 从 1000 到 3000
    2. 增强 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 项目已启动:

前端功能:

  • 登录页: 支持 "快速体验" 进入游客模式,微信登录按钮 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: 11.5,追加 emoji 字体族 Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji

8. 首页快捷入口重新设计

底部导航已有"翻译、客户、营销、报价",首页快捷入口原先完全重复。重新设计为从"更多功能"区提取最高频功能:

原快捷入口 新快捷入口 说明
智能翻译 → 底部导航已有 产品库 外贸人每天查产品
客户管理 → 底部导航已有 跟进 写跟进是日常高频动作,带待办角标
营销文案 → 底部导航已有 数据 一键看业务概览
报价单 → 底部导航已有 通知 及时看消息提醒,带未读角标

同时 goToPage 函数重构为按 tabbar 页面列表自动判断 switchTab/navigateTo,不再硬编码。


三、待办事项

低优先级

  1. 测试 WhatsApp 集成
  2. 性能优化测试
  3. 自定义 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.vueuni-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 首页快捷入口重新设计:产品库/跟进/数据/通知,替换原有重复项

启动脚本: /tmp/start_trademate.sh
日志文件:

  • 后端: /tmp/trademate_backend.log
  • 前端: /tmp/trademate_frontend.log

六、快速验证

用户可以在浏览器中访问:

游客模式体验:

  1. 点击 "快速体验" 按钮
  2. 无需登录即可体验翻译和信息提取功能

注册用户登录:

  • 手机号: 13800138099
  • 密码: testpass123

本文档由任务进度跟踪系统维护