dingdanquanliucheng/frontend/mini-driver/pages/task-detail.js

103 lines
2.2 KiB
JavaScript

function mapTaskStatus(status) {
const statusMap = {
pending: "待接单",
accepted: "已接单",
picked_up: "已揽货",
delivered: "已送达",
canceled: "已取消",
};
return statusMap[status] || status || "-";
}
Page({
data: {
loading: true,
message: "",
actionLoading: false,
taskId: null,
taskInfo: null,
},
async onLoad(options) {
this.setData({
taskId: Number(options.id || 0),
});
await this.loadDetail();
},
async loadDetail() {
const app = getApp();
this.setData({ loading: true, message: "" });
try {
const data = await app.request({
url: `/api/driver/tasks/${this.data.taskId}`,
method: "GET",
});
this.setData({
taskInfo: {
...data,
statusText: mapTaskStatus(data.status),
},
});
} catch (error) {
this.setData({
message: error.message || "加载任务详情失败",
});
} finally {
this.setData({ loading: false });
}
},
getActionConfig() {
const status = this.data.taskInfo?.status;
if (status === "pending") {
return {
text: "接单",
url: `/api/driver/tasks/${this.data.taskId}/accept`,
successMessage: "接单成功",
};
}
if (status === "accepted") {
return {
text: "确认揽货",
url: `/api/driver/tasks/${this.data.taskId}/pickup`,
successMessage: "已确认揽货",
};
}
if (status === "picked_up") {
return {
text: "确认送达",
url: `/api/driver/tasks/${this.data.taskId}/deliver`,
successMessage: "已确认送达",
};
}
return null;
},
async handleAction() {
const action = this.getActionConfig();
if (!action) {
return;
}
const app = getApp();
this.setData({ actionLoading: true, message: "" });
try {
await app.request({
url: action.url,
method: "POST",
});
await this.loadDetail();
this.setData({
message: action.successMessage,
});
} catch (error) {
this.setData({
message: error.message || "任务操作失败",
});
} finally {
this.setData({ actionLoading: false });
}
},
});