前端技术文档
更新日期:2026-05-31。
本文记录当前前端工程:admin、client、ops、h5。所有包管理命令统一使用 bun。
工程总览
| 工程 | 目录 | 技术栈 | 业务定位 |
|---|---|---|---|
| 管理端 | admin |
Vue 3、TypeScript、Vite Plus、Element Plus、Pinia、Vue Router、Axios | 平台管理、运营配置、商品、订单、物流、系统 |
| 消费者小程序 | client |
微信原生小程序、Vant WeApp、Big.js | 商城购买链路和个人中心 |
| 运营小程序 | ops |
微信原生小程序、Vant WeApp | 商户发货、仓库作业、配送员任务 |
| 活动 H5 | h5 |
Bun HTTP 服务、静态 HTML、CSS、JavaScript | 运营活动会场和外部分享落地页 |
四个前端工程共用同一后端业务域,但使用场景不同。admin 偏管理和批量操作,页面以表格、筛选、弹窗和表单为主;client 偏消费者购物,页面以商品、订单和个人中心为主;ops 偏现场作业,页面需要优先支持扫码、快速确认、状态提示和异常原因展示;h5 偏活动内容展示,通过静态资源和接口代理承接会场访问。
admin
技术栈
- Vue 3、TypeScript、Vite Plus。
- Element Plus 作为管理端 UI 组件库。
- Pinia 管理用户、菜单、设置、标签页和表格状态。
- Vue Router 支持静态路由和后端菜单转路由。
- Axios 封装在
src/utils/http,业务接口集中在src/api。
主要目录
| 目录 | 说明 |
|---|---|
src/api |
管理端接口封装 |
src/views |
页面模块 |
src/router |
路由、守卫、菜单转路由 |
src/store |
Pinia 状态 |
src/components/core |
基础布局、表格、表单、菜单等通用组件 |
src/components/custom |
文件图片、图片选择、地区选择、SKU 级联等业务组件 |
状态与路由
| 模块 | 说明 |
|---|---|
src/store/modules/user.ts |
用户信息、Token、角色、权限等登录态 |
src/store/modules/menu.ts |
菜单数据和动态路由相关状态 |
src/store/modules/setting.ts |
主题、布局和页面偏好 |
src/store/modules/worktab.ts |
多标签页状态 |
src/router/guards/beforeEach.ts |
登录校验、权限和路由跳转控制 |
src/router/utils/menuToRouter.ts |
后端菜单转前端路由 |
admin 支持前端静态路由和后端动态菜单两种方式。src/router/routes/asyncRoutes.ts 中的泛资源路由会把 baseUrl、主键、表单字段、远程选择器和动作按钮下发给 AdminResource 页面,适合营销、消息、基础资料等标准 CRUD 页面。业务页面应以菜单配置为入口,避免只添加页面文件但没有菜单和权限。
页面模块
- 账号:员工、企业、政府、商户、个人账户。
- 商品:类目、品牌、属性、SPU、SKU、SKU 管理、库存、价格策略、上架、上架审核、商品创建流程。
- 业务:订单、发货、物流相关业务视图。
- 运营:Banner、Banner 分组、广告、公告、营销活动、优惠券、券池、预算、活动价、佣金、钱包、物流公司、运费规则、包裹类型。
- 组织:组织信息、物流组织、我的店铺、组织订单、仓库。
- 系统:用户、角色、菜单、字典、地区、通知、日志、系统设置、用户中心。
- 文件:文件中心和图片选择能力。
请求约定
- 接口封装使用相对业务路径,例如
product/spu/page、logistics/delivery-order/page。 - 请求基础地址由环境配置和代理决定。
- 业务模块新增接口应放到对应
src/api/*Api.ts,页面不直接拼接底层请求细节。
管理端接口封装建议按业务域维护:
| 文件 | 业务域 |
|---|---|
productApi.ts |
类目、品牌、属性、SPU、SKU、价格策略 |
orderApi.ts |
订单查询和订单动作 |
logisticsApi.ts |
发货单、发货明细、包裹类型、车次 |
accountApi.ts |
账户、商户、店铺和组织相关能力 |
walletApi.ts |
钱包、提现、结算相关能力 |
messageApi.ts、announcementApi.ts |
消息和公告 |
marketingApi.ts、adminResourceRegistry.ts |
平台活动、商户活动、优惠券、券池、预算、活动价、补贴确认 |
dictApi.ts、locationApi.ts、organizationApi.ts |
系统基础资料 |
fileApi.ts |
文件和图片 |
管理端新增标准资源页时,优先复用 ResourceService 和泛资源配置;涉及状态流转的按钮,例如启动、暂停、恢复、结束、结算归档、取消、充值和退回,应配置为独立动作接口,不能用普通编辑接口替代。
client
技术栈
- 微信原生小程序工程,页面由
.js、.wxml、.wxss、.json组成。 - Vant WeApp 提供小程序组件。
- Big.js 用于购物车和订单金额计算。
- 全局样式集中在
app.wxss,公共工具类和语义样式优先在这里维护。 - 不使用
weapp-vite、Tailwind CSS、SCSS 或 TypeScript 编译链。
主要目录
| 目录 | 说明 |
|---|---|
api |
消费者侧接口封装,request.js 负责请求,index.js 按业务分组导出 |
pages |
小程序页面 |
components |
商品卡片、商品列表、商品选择、图片等业务组件 |
custom-tab-bar |
自定义底部导航 |
utils |
价格等通用工具 |
assets |
Tab 图标、默认图、品牌 Logo 和业务图标 |
miniprogram_npm |
微信开发者工具构建出的 npm 依赖 |
页面模块
- 登录:账号密码登录、微信登录、手机号绑定。
- 首页与导购:首页、分类、搜索、搜索结果、商品列表、商品详情。
- 店铺:店铺入口、店铺列表、店铺主页、店铺分类、店铺收藏。
- 交易:购物车、订单确认、订单列表、订单详情、订单成功、支付、支付结果。
- 售后与评价:退款申请、退款列表、退款详情、评价列表、评价创建。
- 个人中心:我的、个人资料、地址、地址管理、优惠券、收藏、店铺关注、足迹、钱包、支付记录、社交账号、账户安全、客服、帮助、设置、关于。
- 消息与物流:消息列表、消息偏好、消息订阅、待办、公告、物流详情。
- 营销:营销活动、优惠券、卡券钱包、秒杀、拼团页面。
消费者关键流程
| 流程 | 页面 | 接口封装 | 说明 |
|---|---|---|---|
| 微信登录 | pages/login/index |
api/index.js 的 user 分组 |
wx.login 后调用微信登录接口,未绑定手机号时进入绑定流程 |
| 商品浏览 | 首页、分类、搜索、商品列表、商品详情 | api/index.js 的 banner、productCategory、search、spu、sku、shop 分组 |
拉取 Banner、分类、商品、SKU 和店铺信息 |
| 加购下单 | 商品详情、购物车、订单确认 | api/index.js 的 shoppingCart、personalOrder、cartOrder、orderDemo 分组 |
购物车数量和金额计算需要使用精确金额处理 |
| 领券用券 | 优惠券、订单确认 | api/index.js 的 couponWallet、personalOrder 分组 |
可用券、领券、带券试算和订单用券都以后端结果为准 |
| 支付结果 | 订单支付、支付结果 | api/index.js 的 personalOrder 分组 |
支付动作完成后刷新订单状态 |
| 物流跟踪 | 订单详情、物流页 | api/index.js 的 personalOrder 分组 |
从订单物流详情组装运单、包裹和轨迹 |
| 售后评价 | 退款申请、评价列表、评价创建 | api/index.js 的 personalOrder、productReview 分组 |
售后和评价依赖订单状态 |
| 个人中心 | 我的、个人资料、地址、设置、钱包、支付记录、社交账号 | api/index.js 的 user、file、data、wallet、walletTransaction、paymentTransaction、social 分组 |
头像上传、钱包流水和社交绑定都以后端账户关系为准 |
| 消息待办 | 消息、消息偏好、消息订阅、待办、公告 | api/index.js 的 message、messagePreference、messageSubscription、todo、announcement 分组 |
订阅支持 SKU 到货、SKU 降价、店铺上新和订阅分页 |
请求环境
请求封装在 api/request.js,环境配置在 api/config.js。小程序根据 envVersion 选择环境,开发版、体验版和正式版应分别配置后端域名。正式版域名上线前需要替换占位值。
小程序本地缓存需要谨慎处理:
- 未完成手机号绑定时,不写入完整登录态。
- 用户资料、头像 URL 和账户关系更新后,要同步刷新本地缓存。
- 订单、购物车和地址页面进入时应重新拉取关键数据,避免跨页面状态过期。
- 多语言切换后,登录参数和页面文案都需要保持一致。
消费者金额展示
订单确认页应展示后端返回的完整金额结构,不自行根据券面额重算最终金额。
| 展示项 | 后端字段 |
|---|---|
| 商品原价合计 | totalPrice |
| 商品优惠 | totalDiscountPrice |
| 优惠券优惠 | couponDiscountAmount |
| 国内运费 | internalShippingAmount |
| 国际运费 | foreignShippingAmount |
| 应付金额 | totalPayPrice |
优惠券交互建议:
- 进入订单确认页先做不带券试算。
- 调用可用券接口展示可选平台券和商户券。
- 用户选券后重新试算,展示后端返回金额。
- 创建订单时传入同一组卡券钱包项。
- 支付失败、取消或返回订单确认页时重新查询可用券和卡券状态。
ops
技术栈
- 微信原生小程序工程,页面由
.js、.wxml、.wxss、.json组成。 - Vant WeApp 提供小程序组件,公共组件在
app.json中注册。 - 接口封装集中在
api/auth.js、api/logistics.js、api/system.js。 - 请求、会话、鉴权和页面工具集中在
utils/。 - 不使用
weapp-vite、Tailwind CSS、SCSS 或 TypeScript 编译链。
页面模块
- 登录:运营角色登录和本地会话维护。
- 首页:按角色展示商户、仓库、配送相关入口。
- 商户发货:商户发货单列表和发货详情。
- 仓库作业:国内或通用仓作业入口。
- 海外仓作业:到仓确认、入库预查询、正式入库、仓内复核、中转、派送准备。
- 配送员任务:本人派送任务查询、签收、失败上报、退仓。
运营关键流程
| 流程 | 页面 | 接口封装 | 说明 |
|---|---|---|---|
| 登录和会话 | pages/login/index |
api/auth.js、utils/session.js |
登录后保存 Token 和用户信息 |
| 商户发货 | pages/merchant-shipment/index、pages/merchant-shipment-detail/index |
api/logistics.js |
查询发货单和明细,按明细执行发货 |
| 仓库作业 | pages/warehouse-operation/index |
api/logistics.js |
国内或通用仓作业入口 |
| 海外仓入库 | pages/abroad-warehouse-operation/index |
api/logistics.js |
到仓确认、预查询、正式入库、复核 |
| 海外仓中转 | pages/abroad-warehouse-operation/index |
api/logistics.js |
创建中转上下文、批次加包、封批、封车、出库 |
| 海外仓派送 | pages/abroad-warehouse-operation/index |
api/logistics.js |
创建派送上下文、分拣加包、完成分拣、分配配送员 |
| 配送员任务 | pages/courier-tasks/index |
api/logistics.js |
查询本人任务,执行签收、失败、退仓 |
业务注意事项
- 当前海外仓页面不调用
/api/v1/logistics/overseas-warehouse/...,而是使用通用仓接口/api/v1/logistics/warehouse/...。 - 配送员接口在后端
wt-admin下,路径包含/api/v1/logistics/dispatcher/query和/api/v1/logistics/dispatcher/task。 - 仓派送加包存在包裹状态前置条件,前端页面需要展示后端返回的阻断原因,不应自行判断可派送。
现场作业页面应优先保证操作反馈明确。所有扫码、确认、出库、签收等动作都需要展示后端返回结果;失败时展示业务错误原因,不只显示“操作失败”。
ops 作业恢复
ops 现场作业页面不能依赖本地缓存作为流程事实来源。用户退出后重新进入,应通过业务编号恢复现场:
| 场景 | 推荐输入 | 恢复接口 |
|---|---|---|
| 中转车次未完成 | shipmentNo |
中转车次分页和详情 |
| 海外仓未入库 | shipmentNo、batchNo |
仓入库车次分页、入库详情、入库预查询 |
| 已入库未复核 | packageNo、waybillNo |
仓库存包裹列表 |
| 已复核未派送 | packageNo、waybillNo |
仓库存包裹列表、派送上下文 |
| 派送中 | 配送员登录态 | 配送员本人任务分页和详情 |
h5
技术栈
- 使用
Bun.serve提供本地或部署后的静态服务。 - 静态活动页放在
h5/public/activity/<活动标识>/,公共图片放在h5/public/assets/<活动标识>/。 - 构建脚本在
h5/scripts/build.ts,产物输出到h5/dist。
请求和路由
| 项 | 当前约定 |
|---|---|
| 默认端口 | 3016,可通过 PORT 覆盖 |
| 默认活动入口 | DEFAULT_ACTIVITY_PATH,当前默认 /activity/618/ |
| 静态目录 | STATIC_DIR,默认 public |
| 接口代理 | 访问 /api/v1/** 时转发到 CLIENT_API_ORIGIN |
h5 只承接活动会场和素材展示,不承接登录态复杂业务。需要下单、领券或查看订单时,应跳转小程序页面或调用 client 侧已有接口能力。
常用命令
前端工程均使用 bun 管理依赖。admin 有完整开发和构建脚本:
bun install
bun run dev
bun run build
bun run check
client 与 ops 以微信开发者工具编译、预览和真机调试为准:
bun install
bun run check
h5 可直接用 Bun 启动活动服务:
bun run start
补充说明:
admin的脚本来自package.json,构建会先执行类型检查。client使用微信开发者工具打开client/project.config.json,依赖变化后执行“构建 npm”。ops使用微信开发者工具打开ops/project.config.json,依赖变化后执行“构建 npm”。h5默认访问http://localhost:3016/activity/618/,根路径会按默认活动入口跳转。- 小程序样式优先复用各自
app.wxss中的公共变量和工具类。
开发约定
admin新接口先落到src/api,小程序新接口先落到各自api/,再由页面调用。- 优先使用
async/await。 - 除非确有必要,接口调用层不额外包裹
try/catch。 - 中文文案与英文、数字之间保留空格,避免乱码。
- 小程序页面新增后需要同步各自
app.json。
联调检查清单
| 检查项 | admin |
client |
ops |
|---|---|---|---|
| 登录态 | Token、用户信息、菜单权限 | Token、手机号绑定、个人账户 | Token、角色和员工身份 |
| 接口前缀 | 管理端代理和后端 /api/v1 |
小程序环境域名和客户端前缀 | 运营小程序域名和仓配接口权限 |
| 文件展示 | 文件中心和图片选择 | 头像、商品图、评价图 | 扫码或作业凭证图 |
| 权限 | 菜单、按钮、接口 403 | 登录态和个人权限 | 仓库、配送员和商户身份 |
| 状态刷新 | 表格操作后刷新 | 页面返回后刷新关键数据 | 作业动作后立即刷新任务状态 |
| 错误提示 | 表单校验和接口错误 | 手机号绑定、支付、售后错误 | 扫码失败、状态阻断、权限失败 |
| 营销金额 | 活动预算、用券记录、补贴确认 | 可用券、卡券状态、带券试算 | 暂不参与消费者营销 |