Files
baiyue-firstleg/docs/phase1-frontend-integration-tasks.md
T
2026-07-30 18:01:36 +08:00

6.9 KiB
Raw Blame History

一期前端本地联调任务

1. 文档范围

本文只用于本地开发联调,不包含测试环境、生产环境、国内外部署和跨区域事件同步。

一期业务闭环:商户注册 → 登录 → 完善企业资料 → 上传营业执照 → 平台审核 → 审核通过后创建头程订单 → 编辑草稿 → 提交订单。

2. 本地联调入口

项目 地址
前端统一 API 地址 http://127.0.0.1:9000
局域网前端统一 API 地址 http://192.168.110.149:9000
Swagger http://127.0.0.1:9000/swagger-ui.html
MySQL 127.0.0.1:3306,本地密码 123456
Redis 127.0.0.1:6379
Nacos http://127.0.0.1:8848/nacos

前端不得直连 9100、9201 等业务端口,所有请求统一经过 Gateway 的 9000 端口。

当前允许的前端 Origin:

  • http://localhost:5173、http://localhost:5174
  • http://127.0.0.1:5173、http://127.0.0.1:5174
  • http://192.168.110.149:5173、http://192.168.110.149:5174

如果前端实际 IP 或端口不同,修改 scripts/local-env.ps1 中的 CORS_ALLOWED_ORIGINS,然后只重启 Gateway。

3. 本地启动顺序

先启动 MySQL、Redis、Nacos,再在 IDEA 中启动以下应用:

  1. BaiyueIamApplication,端口 9201
  2. BaiyueAuthApplication,端口 9100
  3. BaiyueFirstlegApplication,端口 9202
  4. BaiyueOrderApplication,端口 9204
  5. BaiyueWarehouseApplication,端口 9205
  6. FileServiceApplication,端口 9206
  7. PrintServiceApplication,端口 9207
  8. BaiyueGatewayApplication,端口 9000,最后启动

一期最小主流程必须启动 Gateway、Auth、IAM、Order、File。为了让一期前端菜单、仓储选择、打印与完整 Swagger 不出现缺失,日常联调建议启动上面 8 个应用。

启动后检查:

http://127.0.0.1:9000/actuator/health
http://127.0.0.1:9100/actuator/health
http://127.0.0.1:9201/actuator/health
http://127.0.0.1:9202/actuator/health
http://127.0.0.1:9204/actuator/health
http://127.0.0.1:9205/actuator/health
http://127.0.0.1:9206/actuator/health
http://127.0.0.1:9207/actuator/health

预期均返回 status=UP。

4. 联调账号

端 用户名 密码
平台端 platform_admin ChangeMe123!
商户端 merchant_admin ChangeMe123!

两端共用登录接口,但 JWT 中 app_code、租户、角色和按钮权限不同。平台 Token 不能访问商户接口,商户 Token 不能访问平台接口。

5. 前端公共能力任务

  • 配置统一请求基地址,不在页面中写死业务服务端口。
  • 成功登录后保存 accessToken 和 refreshToken,业务请求发送 Authorization: Bearer <accessToken>。
  • 遇到 401 时尝试刷新一次 Token;刷新失败则清理会话并回到登录页,禁止无限重试。
  • 统一解析 {code,message,data,requestId,traceId,timestamp}。
  • HTTP 200 仍需判断业务 code 是否为 0。
  • 统一处理 400、401、403、404、409、422、429、500、503。
  • 根据登录返回的角色和权限生成菜单、按钮;按钮隐藏不是安全边界,后端仍执行权限校验。
  • 商户页面不允许传入或切换 tenantId,租户从 JWT 获取。
  • 平台查询租户业务时必须显式传目标 tenantId。
  • 文件上传使用 multipart/form-data,不要手工设置 multipart boundary。

6. 一期页面任务

6.1 公共登录与注册

  • 完成商户注册表单及前端校验。
  • 完成平台、商户统一登录页。
  • 完成 Token 刷新、退出登录和登录态恢复。
  • 根据 app_code 进入平台端或商户端,禁止跨端复用页面权限。

6.2 商户端企业入驻

  • 企业资料详情页:查询并编辑企业名称、法定名称、联系人、电话、邮箱。
  • 资质页:上传营业执照,显示上传结果和资质审核状态。
  • 资质图片预览/下载必须携带商户 Token。
  • 企业未审核通过时,头程下单入口置灰,并展示后端返回的禁止原因。

状态展示:PROFILE_REQUIRED/PENDING 表示待完善或待审,ACTIVE 表示审核通过,REJECTED 表示已驳回。

6.3 平台端企业审核

  • 待审核列表。
  • 查询指定租户资质列表。
  • 携带平台 Token 预览资质图片。
  • 审核通过、审核驳回及审核意见输入。
  • 按钮权限:platform:customer:review、platform:customer:approve、platform:customer:reject。

6.4 商户端头程订单

  • 订单列表:关键字、状态、客户、目的仓、时间和分页筛选。
  • 订单详情:订单、货物、发收货方、状态历史。
  • 新建草稿、编辑草稿、提交订单。
  • 仅 DRAFT、REJECTED 可编辑;一期主流程状态为 DRAFT → SUBMITTED。
  • 商户详情不得展示 internalNotes;前端模型即使收到未知字段也不得渲染平台内部备注。
  • 按钮权限:merchant:order:create、merchant:order:edit、merchant:order:submit。

7. 一期验收清单

  • 8 个应用健康检查全部 UP。
  • 平台账号、商户账号均能通过 Gateway 登录。
  • 两类 Token 跨端访问返回 403。
  • 商户能查询、编辑企业资料。
  • 商户能上传真实 JPG/PNG 营业执照,非图片或超过 5MB 被拒绝。
  • 平台能查询待审核记录、查看资质并通过或驳回。
  • 企业审核前创建订单被拒绝,审核后可创建草稿。
  • 商户可查询、编辑和提交自己的订单,不能读取其他租户订单。
  • 商户订单详情不返回平台内部备注。
  • 局域网前端 Origin 的 OPTIONS 预检返回 200,非白名单 Origin 返回 403。
  • Swagger UI 和一期服务 API 文档均可通过 Gateway 打开。

8. 本次本地实测结果

2026-07-30 已完成本机验证:8 个健康检查均为 UP;平台/商户登录成功;IAM、Order、Firstleg、Warehouse、File、Print 状态接口及商户资料、订单列表、仓库列表均能通过 Gateway 返回成功;13 个 Swagger 页面/分组返回 200;http://192.168.110.149:5173 跨域预检返回 200,非白名单返回 403。

另创建本地联调订单并添加 1 条平台内部备注:平台详情可见 1 条,商户详情返回 0 条,租户端数据隔离验证通过。

2026-07-30 17:20 使用最新代码重新完成成熟度回归:

  • 全仓 19 个 Reactor 项目构建成功,75 项单元及组件测试全部通过。
  • 认证、个人资料、修改密码、成员、角色、按钮权限、租户隔离共 68 项真实 API 检查全部通过。
  • 仓库、往来单位、订单草稿、可信快照、停用限制、重复提交、快递只读共 37 项真实 API 检查全部通过。
  • Gateway Swagger UI、配置及 11 个业务分组共 13 个入口全部返回 200。
  • 白名单 CORS 预检返回 200,非白名单返回 403。

详细报告见 docs/phase1-business-maturity-regression-report.md。营业执照真实图片的桌面端和移动端浏览器查看、替换仍需前端执行人工验收。