6.9 KiB
一期前端本地联调任务
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:5174http://127.0.0.1:5173、http://127.0.0.1:5174http://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 中启动以下应用:
BaiyueIamApplication,端口 9201BaiyueAuthApplication,端口 9100BaiyueFirstlegApplication,端口 9202BaiyueOrderApplication,端口 9204BaiyueWarehouseApplication,端口 9205FileServiceApplication,端口 9206PrintServiceApplication,端口 9207BaiyueGatewayApplication,端口 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。营业执照真实图片的桌面端和移动端浏览器查看、替换仍需前端执行人工验收。