文档目录
订单管理组件

简介

本组件文档面向 DouPHP 小程序端的“订单管理”能力,覆盖订单列表、订单详情、订单状态管理等关键页面与交互。重点说明:

  • 订单数据获取、更新、删除的调用路径
  • 订单状态流转(支付、发货、取消等)
  • 支付集成(微信支付)与物流跟踪(物流公司+运单号)
  • 组件配置项、事件回调与用户交互流程
  • 前后端协作方式与错误处理策略

项目结构

小程序订单相关页面位于 miniprogram/default/pages/order,包含购物车入口、订单详情、会员订单列表等;后端 API 控制器位于 api/controller/order,提供购物车与订单相关接口。

graph TB
subgraph "小程序前端"
A["order.ts<br/>购物车入口"]
B["show.ts<br/>订单详情"]
C["user.ts<br/>我的订单列表"]
end
subgraph "后端API"
D["OrderController.php<br/>购物车首页(order)"]
end
A --> D
B -.->|"调用其他订单接口"| D
C -.->|"调用其他订单接口"| D

核心组件

  • 购物车入口(order.ts)
    • 功能:展示购物车条目、数量增减、侧滑删除、跳转结算
    • 数据:通过 route('order') 获取购物车标题与条目
    • 操作:PUT 更新数量、DELETE 删除条目
  • 订单详情(show.ts)
    • 功能:加载订单详情、支付校验(线下收款)、提交物流信息、预览支付凭证、取消订单、发起微信支付
    • 数据:route('order.work.show') 返回订单、支付方式、可选物流列表、是否需要支付校验等
    • 操作:POST 支付校验、POST 提交物流、POST 取消订单、POST 发起微信支付
  • 我的订单列表(user.ts)
    • 功能:按状态筛选、分页加载、滚动到底自动加载更多、取消订单
    • 数据:route('order.user') 返回订单列表、状态枚举、支付方式等

架构总览

小程序订单模块采用“页面 + Store + HTTP + 路由”的分层组织:

  • 页面层:order.ts / show.ts / user.ts 负责 UI 与交互
  • 服务层:http.ts 封装网络请求,route.ts 生成后端路由
  • 存储层:stores/index.js 中的 authStore、cartStore、commonStore 管理登录态、购物车刷新、站点语言等
  • 后端:OrderController.php 承载购物车首页接口,其余订单接口由同目录下其他控制器实现
sequenceDiagram
participant U as "用户"
participant P as "小程序页面"
participant H as "HTTP服务"
participant R as "路由/鉴权"
participant C as "OrderController"
participant S as "OrderService(后端)"
U->>P : 打开购物车/订单页
P->>H : GET order (购物车首页)
H->>R : 鉴权
R-->>H : 通过/拒绝
H->>C : index()
C->>S : getCart(userId)
S-->>C : 购物车数据
C-->>H : 成功响应
H-->>P : 渲染购物车

详细组件分析

购物车入口(order.ts)

  • 生命周期与初始化
    • onLoad:绑定 commonStore,设置购买模式为 money
    • onShow:确保登录成功后加载购物车数据
  • 数据加载
    • 调用 route('order') 获取 title 与 cart
  • 交互逻辑
    • 数量变更:PUT 更新数量,成功后重新加载
    • 侧滑删除:touchStart/touchMove/touchEnd 计算滑动距离与角度,达到阈值后执行删除
    • 删除条目:DELETE 删除后刷新列表
  • 错误处理
    • 统一使用 douMsg 提示失败原因或默认文案
flowchart TD
Start(["进入购物车"]) --> Auth{"已登录?"}
Auth -- 否 --> Login["引导登录"]
Auth -- 是 --> Load["加载购物车数据"]
Load --> Interact{"用户操作"}
Interact -- 数量变化 --> Update["PUT 更新数量"]
Interact -- 侧滑删除 --> Delete["DELETE 删除条目"]
Update --> Reload["刷新列表"]
Delete --> Reload
Reload --> End(["完成"])

订单详情(show.ts)

  • 数据加载
    • 调用 route('order.work.show', { order_sn }) 获取订单详情、支付方式、物流列表、是否需要支付校验等
  • 业务操作
    • 支付校验(线下收款):POST 到 order.work.pay_check,确认后刷新订单
    • 物流跟踪:选择物流公司并填写运单号,POST 到 order.work.tracking,成功后刷新
    • 取消订单:POST 到 order.user.cancel,成功后返回列表
    • 微信支付:POST 到 user.weixin.pay,获取支付参数后调用 wx.requestPayment,成功后刷新
  • 错误处理
    • 统一使用 douMsg 提示失败原因或默认文案
sequenceDiagram
participant U as "用户"
participant P as "订单详情页"
participant H as "HTTP服务"
participant W as "微信客户端"
U->>P : 打开订单详情
P->>H : GET order.work.show(order_sn)
H-->>P : 返回订单/支付/物流信息
U->>P : 点击“确认收款”
P->>H : POST order.work.pay_check
H-->>P : 更新订单状态
U->>P : 填写物流并提交
P->>H : POST order.work.tracking
H-->>P : 提交成功
U->>P : 点击“立即支付”
P->>H : POST user.weixin.pay
H-->>P : 返回支付参数
P->>W : requestPayment(...)
W-->>P : 支付结果
P->>H : 刷新订单详情

我的订单列表(user.ts)

  • 数据加载
    • 首次进入:onShow 中确保登录后重置分页并加载列表
    • 分页:onReachBottom 触发下一页加载,支持拼接数据
  • 交互逻辑
    • 状态筛选:切换 status 并重新加载
    • 取消订单:POST 到 order.user.cancel 后刷新列表
  • 错误处理
    • 统一使用 douMsg 提示失败原因或默认文案
flowchart TD
Enter["进入我的订单"] --> Auth{"已登录?"}
Auth -- 否 --> Login["引导登录"]
Auth -- 是 --> Init["初始化分页/状态"]
Init --> Load["GET order.user(status, page)"]
Load --> Render["渲染列表"]
Render --> Scroll{"触底?"}
Scroll -- 是 --> Next["page+1 并加载"]
Scroll -- 否 --> Action{"用户操作"}
Next --> Render
Action -- 切换状态 --> Load
Action -- 取消订单 --> Cancel["POST order.user.cancel"] --> Load

依赖关系分析

  • 前端依赖
    • stores/index.js:authStore(登录态)、cartStore(购物车刷新)、commonStore(站点/语言/特性)
    • services/http.ts:统一网络请求封装
    • utils/route.ts:生成后端路由名
    • utils/ui.ts:统一消息提示
  • 后端依赖
    • OrderController.php:购物车首页接口,内部依赖 OrderService
    • 其他订单接口(如 order.user、order.work.*、user.weixin.pay)由同目录控制器实现,被小程序页面通过 route 调用
graph LR
TS_order["order.ts"] --> RT["utils/route.ts"]
TS_show["show.ts"] --> RT
TS_user["user.ts"] --> RT
RT --> API["api/controller/order/*.php"]
API --> SVC["OrderService(后端)"]

性能考虑

  • 分页与懒加载
    • 我的订单列表采用分页加载,避免一次性拉取大量数据
  • 登录态复用
    • 通过 authStore.ensureLogin 在多个页面复用登录检查,减少重复鉴权开销
  • 局部刷新
    • 购物车数量更新、删除等操作后仅刷新必要数据,降低重绘成本
  • 网络请求合并
    • 建议将关联数据(如订单详情与物流列表)在一次请求中返回,减少往返次数

故障排查指南

  • 常见错误提示
    • 请求失败:统一通过 douMsg 显示 err.message 或默认文案
    • 未登录:OrderController 中会抛出未授权错误,前端需引导登录
  • 定位步骤
    • 检查 route 是否正确映射到后端控制器
    • 检查 http 请求是否携带必要的 token/会话
    • 查看后端日志与数据库记录,确认状态流转是否符合预期
  • 常见问题
    • 微信支付失败:核对 user.weixin.pay 返回参数与签名
    • 物流提交失败:确认 shipping_id 与 tracking_no 非空且格式正确

结论

DouPHP 小程序订单管理组件以清晰的页面分层与统一的 HTTP/路由抽象,实现了购物车、订单详情与订单列表的核心能力。通过标准化的错误处理与状态流转(支付、物流、取消),配合后端 OrderService 与多控制器协同,满足常见的电商订单场景。建议在后续迭代中继续优化分页体验、合并请求与增强异常反馈,以提升用户体验与系统稳定性。

附录

订单数据结构(基于页面返回字段)

  • 购物车(order.ts)
    • title:购物车标题
    • cart:购物车条目集合(含商品、数量、价格等)
  • 订单详情(show.ts)
    • order:订单主体(含 order_sn、tracking_no 等)
    • payment:支付方式列表
    • need_pay_check:是否需要线下收款校验
    • shipping_list:可选物流公司列表
    • shipping_index:当前选中的物流公司索引
    • tracking_no:运单号
  • 我的订单列表(user.ts)
    • order_list:订单列表
    • status_list:状态枚举
    • payment:支付方式列表

状态流转(支付、物流、取消)

stateDiagram-v2
[*] --> 待付款
待付款 --> 已付款 : "微信支付成功"
待付款 --> 已取消 : "用户取消"
已付款 --> 已发货 : "提交物流信息"
已发货 --> 已完成 : "确认收货(外部流程)"
已取消 --> [*]
已完成 --> [*]

[此图为概念性流程图,不直接映射具体代码文件]

支付集成(微信支付)

  • 前端调用顺序
    • POST user.weixin.pay 获取支付参数
    • 调用 wx.requestPayment 发起支付
    • 支付成功后刷新订单详情
  • 注意事项
    • 确保签名类型与参数一致
    • 处理支付成功与失败的分支逻辑

物流跟踪

  • 前端输入
    • 选择物流公司(shipping_list)
    • 填写运单号(tracking_no)
  • 提交接口
    • POST order.work.tracking
  • 成功后
    • 提示提交成功并刷新订单详情
添加日期:2026-10-05