133 lines
3.1 KiB
JavaScript
133 lines
3.1 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,
|
|
actionRemark: "",
|
|
traceList: [],
|
|
},
|
|
|
|
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),
|
|
},
|
|
});
|
|
if (data.order_id) {
|
|
const traceData = await app.request({
|
|
url: `/api/logistics/${data.order_id}/trace`,
|
|
method: "GET",
|
|
});
|
|
this.setData({
|
|
traceList: traceData.trace_list || [],
|
|
});
|
|
}
|
|
} catch (error) {
|
|
this.setData({
|
|
message: error.message || "加载任务详情失败",
|
|
});
|
|
} finally {
|
|
this.setData({ loading: false });
|
|
}
|
|
},
|
|
|
|
handleRemarkInput(event) {
|
|
this.setData({
|
|
actionRemark: event.detail.value,
|
|
});
|
|
},
|
|
|
|
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",
|
|
data: {
|
|
photo_files: this.data.taskInfo?.status === "accepted" || this.data.taskInfo?.status === "picked_up"
|
|
? [
|
|
{
|
|
file_url: "https://oss.example.com/demo-photo.jpg",
|
|
file_name: "demo-photo.jpg",
|
|
},
|
|
]
|
|
: [],
|
|
video_files: [],
|
|
remark: this.data.actionRemark || action.successMessage,
|
|
},
|
|
});
|
|
await this.loadDetail();
|
|
this.setData({
|
|
message: action.successMessage,
|
|
actionRemark: "",
|
|
});
|
|
} catch (error) {
|
|
this.setData({
|
|
message: error.message || "任务操作失败",
|
|
});
|
|
} finally {
|
|
this.setData({ actionLoading: false });
|
|
}
|
|
},
|
|
});
|