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

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 });
}
},
});