- wx:if 改为 hidden,避免 DOM 销毁重建导致的闪烁 - statusBarHeight 去掉 || 20 fallback,避免 header 高度跳变 - empty-card 加 min-height 占位,减少加载到内容的布局跳动 - 修复 sed 替换导致的运算优先级问题(!! 和 !status ===) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
97 lines
3.0 KiB
JavaScript
97 lines
3.0 KiB
JavaScript
/**
|
|
* 司机端任务列表页面
|
|
* 职责:展示司机的所有配送任务,支持按状态筛选,点击可查看任务详情。
|
|
*/
|
|
|
|
function mapTaskStatus(status) {
|
|
var statusMap = { pending: "待接单", accepted: "已接单", picked_up: "已揽货", delivered: "已送达", canceled: "已取消" };
|
|
return statusMap[status] || status || "-";
|
|
}
|
|
|
|
function getStatusBadge(status) {
|
|
var map = { pending: "badge-orange", accepted: "badge-blue", picked_up: "badge-blue", delivered: "badge-green", canceled: "badge-red" };
|
|
return map[status] || "badge-gray";
|
|
}
|
|
|
|
var filterTabs = [
|
|
{ key: "", label: "全部" },
|
|
{ key: "pending", label: "待接单" },
|
|
{ key: "accepted", label: "进行中" },
|
|
{ key: "delivered", label: "已送达" },
|
|
];
|
|
|
|
Page({
|
|
data: {
|
|
statusBarHeight: 20,
|
|
loading: true,
|
|
message: "",
|
|
filterTabs: filterTabs,
|
|
activeFilter: "",
|
|
taskRows: [],
|
|
},
|
|
|
|
onPullDownRefresh: function () {
|
|
var that = this;
|
|
this.loadTasks().then(function () { wx.stopPullDownRefresh(); });
|
|
},
|
|
|
|
onShow: function () {
|
|
var app = getApp();
|
|
this.setData({ statusBarHeight: app.globalData.statusBarHeight });
|
|
if (!app.checkLogin()) return;
|
|
var tab = this.getTabBar();
|
|
if (tab) {
|
|
tab.setData({ selected: 0 });
|
|
tab.updateRole(app.globalData.userRole);
|
|
}
|
|
this.loadTasks();
|
|
},
|
|
|
|
loadTasks: function () {
|
|
var that = this;
|
|
var app = getApp();
|
|
that.setData({ loading: true, message: "" });
|
|
var url = "/api/driver/tasks";
|
|
if (that.data.activeFilter && that.data.activeFilter !== "accepted") {
|
|
url += "?status=" + encodeURIComponent(that.data.activeFilter);
|
|
}
|
|
return app.request({ url: url, method: "GET" }).then(function (data) {
|
|
var list = (data.list || []).map(function (item) {
|
|
return {
|
|
taskId: item.task_id,
|
|
taskNo: item.task_no,
|
|
orderNo: item.order_no,
|
|
driverName: item.driver_name || "-",
|
|
factoryName: item.factory_name || "-",
|
|
pickupAddress: item.pickup_address,
|
|
deliveryAddress: item.delivery_address,
|
|
pickupContent: item.pickup_content,
|
|
quantity: item.quantity || 0,
|
|
status: item.status,
|
|
statusText: mapTaskStatus(item.status),
|
|
badgeClass: getStatusBadge(item.status),
|
|
createdAt: item.created_at || "-",
|
|
};
|
|
});
|
|
if (that.data.activeFilter === "accepted") {
|
|
list = list.filter(function (t) { return t.status === "accepted" || t.status === "picked_up"; });
|
|
}
|
|
that.setData({ taskRows: list });
|
|
}).catch(function (error) {
|
|
that.setData({ message: error.message || "加载任务失败" });
|
|
}).finally(function () {
|
|
that.setData({ loading: false });
|
|
});
|
|
},
|
|
|
|
handleFilterTap: function (event) {
|
|
this.setData({ activeFilter: event.currentTarget.dataset.key });
|
|
this.loadTasks();
|
|
},
|
|
|
|
handleOpenDetail: function (event) {
|
|
var id = event.currentTarget.dataset.id;
|
|
wx.navigateTo({ url: "/pages/driver/task-detail/task-detail?id=" + id });
|
|
},
|
|
});
|