dingdanquanliucheng/frontend/mini-manager/pages/approve-detail.js

98 lines
2.5 KiB
JavaScript

function mapOrderStatus(status) {
const statusMap = {
pending_approve: "待审批",
cancel_pending: "待取消审批",
approved: "已审批",
rejected: "已驳回",
canceled: "已取消",
};
return statusMap[status] || status || "-";
}
Page({
data: {
taskId: null,
loading: true,
actionLoading: false,
message: "",
approveOpinion: "",
orderInfo: 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/orders/${this.data.taskId}`,
method: "GET",
});
this.setData({
orderInfo: {
...data,
statusText: mapOrderStatus(data.order_status),
salePriceTotalText: Number(data.sale_price_total || 0).toFixed(2),
costPriceTotalText: Number(data.cost_price_total || 0).toFixed(2),
rebateTotalText: Number(data.rebate_total || 0).toFixed(2),
freightTotalText: Number(data.freight_total || 0).toFixed(2),
profitTotalText: Number(data.profit_total || 0).toFixed(2),
},
});
} catch (error) {
this.setData({
message: error.message || "加载审批详情失败",
});
} finally {
this.setData({ loading: false });
}
},
handleOpinionInput(event) {
this.setData({
approveOpinion: event.detail.value,
});
},
async handleApprove(event) {
const { result } = event.currentTarget.dataset;
const app = getApp();
const orderInfo = this.data.orderInfo;
if (!orderInfo) {
return;
}
const targetUrl = orderInfo.order_status === "cancel_pending"
? `/api/orders/${orderInfo.order_id}/cancel-approve`
: `/api/orders/${orderInfo.order_id}/approve`;
this.setData({ actionLoading: true, message: "" });
try {
await app.request({
url: targetUrl,
method: "POST",
data: {
approve_result: result,
approve_opinion: this.data.approveOpinion || (result === "pass" ? "同意" : "退回"),
},
});
await this.loadDetail();
this.setData({
message: result === "pass" ? "审批处理成功" : "已完成退回处理",
});
} catch (error) {
this.setData({
message: error.message || "审批处理失败",
});
} finally {
this.setData({ actionLoading: false });
}
},
});