2.9 KiB
2.9 KiB
修复业务员端物流信息修改功能
问题分析
用户反馈:业务员修改物流信息后,提交再打开仍然是空白。
现状
web-sales/OrdersPage.vue(833行) — 纯列表页,无物流编辑功能,只有"查看"跳转到详情页web-sales/OrderDetailPage.vue(969行) — 已有物流单号编辑功能(修改快递公司/单号/备注),通过 raw fetch 调用后端 API- 用户粘贴的3657行版本 — 包含复杂的商品明细+SKU选择+物流编辑功能,但该版本在磁盘上不存在(git历史中也从未出现过)
已有功能分析(OrderDetailPage.vue)
OrderDetailPage.vue 已经有完整的物流编辑功能:
- 物流任务单号编辑(line 371-399):
openTrackingEdit()→doUpdateTracking()→ 调用PUT /api/logistics/tasks/{task_id}/tracking - 自发订单快递单号编辑(line 406-434):
openSelfDeliveryTrackingEdit()→doUpdateSelfTracking()→ 调用PUT /api/orders/{order_id}/tracking - 数据加载(line 287-305):
loadDetail()从后端加载logistics_info.task并映射到trackingInfo - 保存后刷新(line 391):保存成功后调用
loadDetail()重新加载
代码逻辑看起来是正确的。 后端 API 也支持这两个端点,且允许 salesman 角色调用。
可能的问题原因
- 后端未正确持久化 —
PUT /api/logistics/tasks/{task_id}/tracking可能没有正确写入数据库 - 后端返回数据未包含更新后的值 —
GET /api/orders/{id}返回的logistics_info.task.tracking_number可能未更新 - 前端
loadDetail()解析问题 —data.logistics_info?.task的数据结构可能与前端期望的不一致
修复方案
步骤1:在 sales mockApi 中添加 updateLogisticsTracking 函数
当前 sales mockApi 没有封装物流单号更新 API(OrderDetailPage 用 raw fetch)。为了统一和可维护性,添加 mockApi 函数。
文件: frontend/web-sales/src/mockApi.js
操作: 新增 updateLogisticsTracking(taskId, payload) 和 updateOrderTracking(orderId, payload) 函数
步骤2:检查 OrderDetailPage.vue 的物流编辑逻辑
检查以下几点:
loadDetail()是否正确解析logistics_info.taskdoUpdateTracking()是否正确调用 API 并处理响应- 保存后是否正确刷新数据
- 模板中物流信息的显示条件是否正确
步骤3:检查后端 API
PUT /api/logistics/tasks/{task_id}/tracking是否正确写入数据库GET /api/orders/{id}返回的logistics_info.task是否包含更新后的tracking_number
验证方式
- 以业务员身份登录
- 进入一个已有物流任务的订单详情页
- 点击"修改单号",修改快递公司和单号
- 保存后检查页面是否显示更新后的值
- 刷新页面或重新进入,检查数据是否持久化