覆盖四个前端应用: - web-admin:App.vue、mockApi.js、router.js 等基础设施 + 19 个页面/组件 - web-sales:App.vue、mockApi.js、store.js 等基础设施 + 11 个页面/组件 - mini-driver:小程序框架 + 5 个页面 - mini-manager:小程序框架 + 8 个页面 注释内容: - 每个文件模块级职责说明 - 每个函数 JSDoc 注释(作用、参数、返回值) - 路由配置逐项标注用途和权限 - Vue 模板复杂逻辑行内注释 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
/**
|
|
* 司机端物流追踪页面
|
|
* 职责:展示司机最近的任务列表,支持查看关联订单的物流轨迹详情。
|
|
* 支持下拉刷新,点击任务可展开查看物流节点时间线。
|
|
*/
|
|
var app = getApp();
|
|
|
|
Page({
|
|
/** 页面数据 */
|
|
data: {
|
|
statusBarHeight: 20,
|
|
loading: true,
|
|
taskList: [],
|
|
selectedTaskId: null,
|
|
traceList: [],
|
|
showTrace: false,
|
|
},
|
|
|
|
/**
|
|
* 页面显示时校验登录状态并加载最近任务列表
|
|
*/
|
|
onShow: function() {
|
|
this.setData({ statusBarHeight: app.globalData.statusBarHeight || 20 });
|
|
if (!app.checkLogin()) return;
|
|
this.loadRecentTasks();
|
|
},
|
|
|
|
/**
|
|
* 下拉刷新回调:重新加载任务列表并停止刷新动画
|
|
*/
|
|
onPullDownRefresh: function() {
|
|
var that = this;
|
|
this.loadRecentTasks().then(function() { wx.stopPullDownRefresh(); });
|
|
},
|
|
|
|
/**
|
|
* 从后端加载最近任务列表,过滤已取消的任务
|
|
* @returns {Promise<void>}
|
|
*/
|
|
loadRecentTasks: function() {
|
|
var that = this;
|
|
that.setData({ loading: true });
|
|
return app.request({ url: "/api/driver/tasks", method: "GET" }).then(function(data) {
|
|
var list = (data.list || []).filter(function(t) { return t.status !== "canceled"; }).map(function(item) {
|
|
return {
|
|
taskId: item.task_id,
|
|
taskNo: item.task_no,
|
|
orderNo: item.order_no,
|
|
orderId: item.order_id,
|
|
status: item.status,
|
|
statusText: app.mapTaskStatus(item.status),
|
|
pickupAddress: item.pickup_address || "-",
|
|
deliveryAddress: item.delivery_address || "-",
|
|
};
|
|
});
|
|
that.setData({ taskList: list, loading: false });
|
|
}).catch(function(err) {
|
|
that.setData({ loading: false });
|
|
wx.showToast({ title: err.message || "加载失败", icon: "none" });
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 查看指定任务关联订单的物流轨迹
|
|
* @param {Object} event - 点击事件对象,通过 dataset.orderid 和 dataset.taskid 获取数据
|
|
*/
|
|
handleViewTrace: function(event) {
|
|
var that = this;
|
|
var orderId = event.currentTarget.dataset.orderid;
|
|
if (!orderId) {
|
|
wx.showToast({ title: "该任务暂无关联订单", icon: "none" });
|
|
return;
|
|
}
|
|
that.setData({ selectedTaskId: Number(event.currentTarget.dataset.taskid), showTrace: true, traceList: [] });
|
|
app.request({ url: "/api/logistics/" + orderId + "/trace", method: "GET" }).then(function(data) {
|
|
var traces = (data.trace_list || []).map(function(item) {
|
|
item.node_time = item.node_time || item.created_at || "-";
|
|
return item;
|
|
});
|
|
that.setData({ traceList: traces });
|
|
}).catch(function(err) {
|
|
wx.showToast({ title: err.message || "加载轨迹失败", icon: "none" });
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 关闭物流轨迹面板,回到任务列表视图
|
|
*/
|
|
handleBack: function() {
|
|
this.setData({ showTrace: false, selectedTaskId: null, traceList: [] });
|
|
},
|
|
});
|