dingdanquanliucheng/.claude/plans/logistics-editing-fix.md
2026-06-26 22:02:04 +08:00

2.9 KiB
Raw Blame History

修复业务员端物流信息修改功能

问题分析

用户反馈:业务员修改物流信息后,提交再打开仍然是空白。

现状

  1. web-sales/OrdersPage.vue833行 — 纯列表页,无物流编辑功能,只有"查看"跳转到详情页
  2. web-sales/OrderDetailPage.vue969行 — 已有物流单号编辑功能(修改快递公司/单号/备注),通过 raw fetch 调用后端 API
  3. 用户粘贴的3657行版本 — 包含复杂的商品明细+SKU选择+物流编辑功能但该版本在磁盘上不存在git历史中也从未出现过

已有功能分析OrderDetailPage.vue

OrderDetailPage.vue 已经有完整的物流编辑功能:

  • 物流任务单号编辑line 371-399openTrackingEdit()doUpdateTracking() → 调用 PUT /api/logistics/tasks/{task_id}/tracking
  • 自发订单快递单号编辑line 406-434openSelfDeliveryTrackingEdit()doUpdateSelfTracking() → 调用 PUT /api/orders/{order_id}/tracking
  • 数据加载line 287-305loadDetail() 从后端加载 logistics_info.task 并映射到 trackingInfo
  • 保存后刷新line 391保存成功后调用 loadDetail() 重新加载

代码逻辑看起来是正确的。 后端 API 也支持这两个端点,且允许 salesman 角色调用。

可能的问题原因

  1. 后端未正确持久化PUT /api/logistics/tasks/{task_id}/tracking 可能没有正确写入数据库
  2. 后端返回数据未包含更新后的值GET /api/orders/{id} 返回的 logistics_info.task.tracking_number 可能未更新
  3. 前端 loadDetail() 解析问题data.logistics_info?.task 的数据结构可能与前端期望的不一致

修复方案

步骤1在 sales mockApi 中添加 updateLogisticsTracking 函数

当前 sales mockApi 没有封装物流单号更新 APIOrderDetailPage 用 raw fetch。为了统一和可维护性添加 mockApi 函数。

文件: frontend/web-sales/src/mockApi.js 操作: 新增 updateLogisticsTracking(taskId, payload)updateOrderTracking(orderId, payload) 函数

步骤2检查 OrderDetailPage.vue 的物流编辑逻辑

检查以下几点:

  • loadDetail() 是否正确解析 logistics_info.task
  • doUpdateTracking() 是否正确调用 API 并处理响应
  • 保存后是否正确刷新数据
  • 模板中物流信息的显示条件是否正确

步骤3检查后端 API

  • PUT /api/logistics/tasks/{task_id}/tracking 是否正确写入数据库
  • GET /api/orders/{id} 返回的 logistics_info.task 是否包含更新后的 tracking_number

验证方式

  1. 以业务员身份登录
  2. 进入一个已有物流任务的订单详情页
  3. 点击"修改单号",修改快递公司和单号
  4. 保存后检查页面是否显示更新后的值
  5. 刷新页面或重新进入,检查数据是否持久化