5.7 KiB
虫虫出海客户工作台
入驻企业及其成员使用的业务应用,使用 Vue 3、TypeScript、Vite、Vue Router、Pinia 和 Element Plus。
本地运行
cd apps/client-web
pnpm install
pnpm dev
生产构建:
pnpm typecheck
pnpm build
自动化测试:
pnpm test
源码组织
业务代码按领域放在 src/modules/<domain>/。每个模块可以包含 views/、components/、api/、store/、types/、data/、utils/、contracts.ts、public.ts 和 routes.ts,只创建实际需要的目录。
模块的 routes.ts 是路由与导航共用的 manifest。正式页面标记 release: 'active';尚未接入接口、权限或未进入当前范围的占位页面标记 release: 'prototype',不会被注册为可访问路由。src/modules/registry.ts 负责统一装配模块,根路由不再逐页维护配置。
跨模块调用只能经过目标模块的 public.ts;模块内部 API、store、组件和工具不作为跨模块接口。租户状态、权限映射等稳定模块契约放在 contracts.ts。
src/components/common/ 只存放真实跨模块复用的组件,src/api/ 只存放 HTTP、Token 会话和统一响应等基础设施。模块私有能力不要提前上移到全局目录。
依赖和 pnpm-lock.yaml 均保存在当前前端项目中,不需要在仓库根目录安装 Node 依赖。
一期路由:登录、注册、工作台、我的信息、企业资料、企业成员、角色权限和头程订单。登录、注册、退出、令牌刷新、个人资料、修改密码、企业资料、企业资质、权限资源、角色列表/新增/授权和成员完整维护已经接入一期后端接口;开发代理默认转发到测试环境 http://8.163.30.128:9000,可通过 API_PROXY_TARGET 覆盖。登录使用后端约定的用户名和 8–72 位密码,注册成功后可立即登录,企业资料审核只影响订单提交资格。
认证会话保存 Access Token 和轮换后的 Refresh Token,并对并发 401 请求执行单次刷新。刷新或会话上下文加载遇到临时网络故障、超时等非认证错误时保留当前有效 Token,只有服务端明确返回 401/会话失效才清理登录状态。客户端只接受 app_code 为 MERCHANT 的 JWT;页面权限通过当前用户授权接口实时加载,不从 JWT 携带或解析角色权限。前端权限仅用于导航和交互控制,服务端仍须按用户、客户和权限编码完成最终授权。
登录表单在开发和生产环境均默认留空;URL 显式传入的登录用户名仍优先。源码和构建产物不得包含联调账号、默认密码或开发提示文案。
“我的信息”使用真实个人资料和修改密码接口,姓名、电话、邮箱按服务端约束维护;修改密码成功后清理旧会话并返回登录页。成员列表返回姓名、联系方式和 roleIds,新增、编辑、角色全量保存、启停和管理员重置密码均使用真实接口,不回退静态成功。角色页同时加载成员关系,直接打开或刷新后成员数仍按真实 roleIds 统计。角色列表返回 permissionIds,页面可回显并全量保存角色权限;角色编辑、启停、删除分别调用 PUT /merchant/v1/iam/roles/{roleId}、PUT /merchant/v1/iam/roles/{roleId}/status 和 DELETE /merchant/v1/iam/roles/{roleId},内置角色及仍有关联成员的角色继续受保护。
企业资料和资质列表使用真实租户接口,覆盖 PROFILE_REQUIRED、PENDING、ACTIVE、REJECTED、DISABLED 五种企业状态。企业名称、法定名称和联系人信息支持真实保存;营业执照、法人身份证为必填资质,货代资质证书和银行开户许可证为选填资质,均使用文件服务分别上传,接受 PDF、JPG、PNG 且不超过 5MB;两项必填资质齐全后可显式提交审核,文件预览通过当前商户 Token 临时下载并在关闭弹窗后释放。
头程订单列表、详情、仓库查询、创建/编辑草稿和提交已经接入真实 API,并显式映射后端 transportMode、containerMode 和订单状态。创建与提交请求携带幂等键,merchant:order:create、merchant:order:edit、merchant:order:submit 分别映射到独立前端操作权限。页面补齐渠道、提货方式、报关模式、目的仓类型、包装类型等后端必填字段;API 模式先清空本地记录,请求失败不会回退模拟成功。FBA 和海外仓按公共仓类型筛选,选择后由仓库主数据生成目的仓字段,不再要求客户重复选择收货单位;私人仓才填写并按当前用户缓存收件资料。只有“我司提货”需要填写提货联系人和地址,其他送货方式不发送发货方快照,订单也不再依赖往来单位 customerId。快递信息仍由平台维护、客户只读。订单取消不属于本轮本地一期验收,客户端不暴露取消写操作。订单产品状态仍按已确认的七状态执行,不设置“已驳回”;若兼容旧接口数据收到 REJECTED,只按待审核展示且不开放编辑。
联调远端 Gateway 时可在启动命令前设置 API_PROXY_TARGET=http://8.163.30.128:9000;进程环境变量优先于 .env 文件。浏览器仍统一请求同源 /api,源码中不写死业务服务地址。联调时可只读检查同工作区的 baiyue-firstleg/ Controller、DTO、Service、Repository 和回归脚本,用于发现后端拉取后的契约变化,但不修改后端仓库。2026-07-31 测试 Gateway 登录和真实角色列表读取正常;Warehouse 服务已注册,但仓库和往来单位业务查询仍返回 S0500,头程草稿创建和相关浏览器流程需待后端修复后继续验收。