|
|
|
@ -200,6 +200,7 @@ |
|
|
|
<Tabs v-model="workerOrderTab" :animated="false" @on-click="changeWorkerOrderTab"> |
|
|
|
<TabPane :label="'待取货(' + workerOrderCounts.daiqu + ')'" name="daiqu"></TabPane> |
|
|
|
<TabPane :label="'待送达(' + workerOrderCounts.daisong + ')'" name="daisong"></TabPane> |
|
|
|
<TabPane :label="'指派单(' + workerOrderCounts.zhipai + ')'" name="zhipai"></TabPane> |
|
|
|
</Tabs> |
|
|
|
<Table :loading="workerOrderLoading" border :columns="workerOrderColumns" :data="workerOrderList" :size="tableSize" |
|
|
|
:row-class-name="getOrderRowClassName"></Table> |
|
|
|
@ -342,7 +343,8 @@ |
|
|
|
}, |
|
|
|
workerOrderCounts: { |
|
|
|
daiqu: 0, |
|
|
|
daisong: 0 |
|
|
|
daisong: 0, |
|
|
|
zhipai: 0 |
|
|
|
}, |
|
|
|
workerList: this.buildWorkerColumns(), |
|
|
|
workerOrderColumns: [], |
|
|
|
@ -354,6 +356,8 @@ |
|
|
|
workerOrderTotal: 0, |
|
|
|
orderId: "", |
|
|
|
currentTransferWorkerId: "", |
|
|
|
currentTransferOrder: null, |
|
|
|
currentTransferHallTab: "", |
|
|
|
transferActionTitle: "指派配送员", |
|
|
|
transferActionType: "assign", |
|
|
|
currentRegionId: regionId, |
|
|
|
@ -396,6 +400,20 @@ |
|
|
|
key: "workerName", |
|
|
|
width: 200, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => { |
|
|
|
const isFullTime = params.row.isFullTime == 1; |
|
|
|
return h("div", [ |
|
|
|
h("div", params.row.workerName || "-"), |
|
|
|
h("Tag", { |
|
|
|
props: { |
|
|
|
color: isFullTime ? "green" : "orange" |
|
|
|
}, |
|
|
|
style: { |
|
|
|
marginTop: "4px" |
|
|
|
} |
|
|
|
}, isFullTime ? "全职配送员" : "兼职配送员") |
|
|
|
]); |
|
|
|
} |
|
|
|
}, { |
|
|
|
title: "联系电话", |
|
|
|
key: "mobile", |
|
|
|
@ -446,33 +464,31 @@ |
|
|
|
key: "createTime", |
|
|
|
width: 190, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("div", [ |
|
|
|
h("div", this.formatDateTime(params.row.createTime)), |
|
|
|
h("div", { class: "order-time-order-no" }, "订单编号:" + this.getOrderNo(params.row)) |
|
|
|
]) |
|
|
|
}, { |
|
|
|
title: "配送员", |
|
|
|
key: "workerName", |
|
|
|
width: 170, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderWorkerInfo(h, params.row, clickableWorker) |
|
|
|
render: (h, params) => { |
|
|
|
const children = []; |
|
|
|
if (this.tabName === "delivery" && params.row.numberCode) { |
|
|
|
children.push(h("div", { |
|
|
|
style: { color: "#515a6e", fontWeight: 700, marginBottom: "4px" } |
|
|
|
}, "编号:" + params.row.numberCode)); |
|
|
|
} |
|
|
|
children.push(h("div", this.formatDateTime(params.row.createTime))); |
|
|
|
children.push(h("div", { class: "order-time-order-no" }, "订单编号:" + this.getOrderNo(params.row))); |
|
|
|
return h("div", children); |
|
|
|
} |
|
|
|
},{ |
|
|
|
title: "送达时间", |
|
|
|
key: "mustFinishTime", |
|
|
|
width: 210, |
|
|
|
width: 260, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("div", [ |
|
|
|
h("span", { class: "must-finish-time" }, this.formatDateTime(params.row.mustFinishTime)), |
|
|
|
params.row.shopMakeTime ? h("div", { |
|
|
|
style: { color: "red", marginTop: "4px", fontWeight: 700 } |
|
|
|
}, "商家已出餐:" + this.formatDateTime(params.row.shopMakeTime)) : null, |
|
|
|
h("span", { class: "must-finish-time" }, "要求送达:" +this.formatDateTime(params.row.mustFinishTime)), |
|
|
|
this.isNearMustFinishTime(params.row) ? h("div", { |
|
|
|
style: { color: "#515a6e", marginTop: "4px", fontWeight: 700 } |
|
|
|
}, this.getMustFinishWarningText(params.row)) : null |
|
|
|
]) |
|
|
|
},{ |
|
|
|
title: "配送类型", |
|
|
|
key: "deliveryType", |
|
|
|
width: 140, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderDeliveryTags(h, params.row) |
|
|
|
}, { |
|
|
|
title: "商家/取货地址", |
|
|
|
key: "shopAddress", |
|
|
|
@ -483,6 +499,18 @@ |
|
|
|
key: "receiverAddress", |
|
|
|
minWidth: 240, |
|
|
|
render: (h, params) => this.renderAddressBlock(h, params.row, "receiver") |
|
|
|
}, { |
|
|
|
title: "配送员", |
|
|
|
key: "workerName", |
|
|
|
width: 170, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderWorkerInfo(h, params.row, clickableWorker) |
|
|
|
},{ |
|
|
|
title: "配送类型", |
|
|
|
key: "deliveryType", |
|
|
|
width: 140, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderDeliveryTags(h, params.row) |
|
|
|
}, { |
|
|
|
title: "操作", |
|
|
|
key: "action", |
|
|
|
@ -675,10 +703,13 @@ |
|
|
|
this.getWorkerOrders(); |
|
|
|
}, |
|
|
|
buildWorkerOrderParams() { |
|
|
|
if (this.workerOrderTab === "zhipai") { |
|
|
|
return this.buildWorkerAssignedOrderParams(); |
|
|
|
} |
|
|
|
const source = this.activeSearchForm || {}; |
|
|
|
const params = { |
|
|
|
regionId: source.regionId || this.currentRegionId, |
|
|
|
deliveryType: source.deliveryType, |
|
|
|
deliveryType: this.getWorkerDeliveryTypeFilter(source), |
|
|
|
getAreaId: source.getAreaId, |
|
|
|
putAreaId: source.putAreaId, |
|
|
|
shopName: source.shopName, |
|
|
|
@ -690,31 +721,71 @@ |
|
|
|
}; |
|
|
|
return this.cleanParams(params); |
|
|
|
}, |
|
|
|
buildWorkerAssignedOrderParams() { |
|
|
|
const source = this.activeSearchForm || {}; |
|
|
|
const params = { |
|
|
|
regionId: source.regionId || this.currentRegionId, |
|
|
|
deliveryType: HALL_TYPE_MAP.zhipai, |
|
|
|
workerId: this.selectedWorker.workerId, |
|
|
|
getAreaId: source.getAreaId, |
|
|
|
putAreaId: source.putAreaId, |
|
|
|
shopName: source.shopName, |
|
|
|
order: source.order, |
|
|
|
pageNum: this.workerOrderForm.pageNum, |
|
|
|
pageSize: this.workerOrderForm.pageSize |
|
|
|
}; |
|
|
|
return this.cleanParams(params); |
|
|
|
}, |
|
|
|
buildWorkerOrderCountParams(status) { |
|
|
|
return Object.assign({}, this.buildWorkerOrderParams(), { |
|
|
|
const source = this.activeSearchForm || {}; |
|
|
|
const params = { |
|
|
|
regionId: source.regionId || this.currentRegionId, |
|
|
|
deliveryType: this.getWorkerDeliveryTypeFilter(source), |
|
|
|
getAreaId: source.getAreaId, |
|
|
|
putAreaId: source.putAreaId, |
|
|
|
shopName: source.shopName, |
|
|
|
order: source.order, |
|
|
|
workerId: this.selectedWorker.workerId, |
|
|
|
status: status, |
|
|
|
pageNum: 1, |
|
|
|
pageSize: 1 |
|
|
|
}; |
|
|
|
return this.cleanParams(params); |
|
|
|
}, |
|
|
|
getWorkerDeliveryTypeFilter(source) { |
|
|
|
return source.deliveryType === HALL_TYPE_MAP.zhipai ? null : source.deliveryType; |
|
|
|
}, |
|
|
|
buildWorkerAssignedOrderCountParams() { |
|
|
|
return Object.assign({}, this.buildWorkerAssignedOrderParams(), { |
|
|
|
pageNum: 1, |
|
|
|
pageSize: 1 |
|
|
|
}); |
|
|
|
}, |
|
|
|
getWorkerOrderCounts() { |
|
|
|
if (!this.selectedWorker.workerId) return; |
|
|
|
Promise.all([ |
|
|
|
orderSchedulingAdmin(this.buildWorkerOrderCountParams(DELIVERY_STATUS_MAP.daiqu)), |
|
|
|
orderSchedulingAdmin(this.buildWorkerOrderCountParams(DELIVERY_STATUS_MAP.daisong)) |
|
|
|
]).then(([daiqu, daisong]) => { |
|
|
|
orderSchedulingAdmin(this.buildWorkerOrderCountParams(DELIVERY_STATUS_MAP.daisong)), |
|
|
|
getAdminDeliveryHallData(this.buildWorkerAssignedOrderCountParams()) |
|
|
|
]).then(([daiqu, daisong, zhipai]) => { |
|
|
|
if (this.isSuccess(daiqu)) { |
|
|
|
this.workerOrderCounts.daiqu = Number((daiqu.result || {}).total) || 0; |
|
|
|
} |
|
|
|
if (this.isSuccess(daisong)) { |
|
|
|
this.workerOrderCounts.daisong = Number((daisong.result || {}).total) || 0; |
|
|
|
} |
|
|
|
if (this.isSuccess(zhipai)) { |
|
|
|
this.workerOrderCounts.zhipai = Number((zhipai.result || {}).total) || 0; |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
getWorkerOrders() { |
|
|
|
if (!this.selectedWorker.workerId) return; |
|
|
|
this.workerOrderLoading = true; |
|
|
|
orderSchedulingAdmin(this.buildWorkerOrderParams()).then((res) => { |
|
|
|
const request = this.workerOrderTab === "zhipai" |
|
|
|
? getAdminDeliveryHallData(this.buildWorkerOrderParams()) |
|
|
|
: orderSchedulingAdmin(this.buildWorkerOrderParams()); |
|
|
|
request.then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
const result = res.result || {}; |
|
|
|
this.workerOrderList = this.normalizeRecords(result.records); |
|
|
|
@ -895,6 +966,7 @@ |
|
|
|
this.$Message.success(actionText + "配送员成功"); |
|
|
|
this.transferOrder = false; |
|
|
|
this.workerOrderVisible = false; |
|
|
|
this.updateHallCountsAfterReassign(); |
|
|
|
this.getLogisticsInfo(); |
|
|
|
} |
|
|
|
}); |
|
|
|
@ -932,10 +1004,29 @@ |
|
|
|
this.searchWorker.orderType = this.getWorkerOrderType(v); |
|
|
|
this.orderId = v.id; |
|
|
|
this.currentTransferWorkerId = v.workerId || ""; |
|
|
|
this.currentTransferOrder = v; |
|
|
|
this.currentTransferHallTab = this.tabName === "hall" ? this.hallTab : ""; |
|
|
|
this.transferActionType = v.workerId ? "reassign" : "assign"; |
|
|
|
this.transferActionTitle = v.workerId ? "改派配送员" : "指派配送员"; |
|
|
|
this.getWorker(); |
|
|
|
}, |
|
|
|
updateHallCountsAfterReassign() { |
|
|
|
if (this.transferActionType !== "reassign") return; |
|
|
|
if (["waimai", "kuaidi", "paotui"].indexOf(this.currentTransferHallTab) === -1) return; |
|
|
|
const sourceKey = this.getHallCountKeyByDeliveryType(this.currentTransferOrder && this.currentTransferOrder.deliveryType); |
|
|
|
if (sourceKey !== this.currentTransferHallTab) return; |
|
|
|
this.hallCounts[sourceKey] = Math.max(this.toNumber(this.hallCounts[sourceKey]) - 1, 0); |
|
|
|
this.hallCounts.zhipai = this.toNumber(this.hallCounts.zhipai) + 1; |
|
|
|
}, |
|
|
|
getHallCountKeyByDeliveryType(deliveryType) { |
|
|
|
const map = { |
|
|
|
1: "waimai", |
|
|
|
2: "kuaidi", |
|
|
|
3: "paotui", |
|
|
|
4: "zhipai" |
|
|
|
}; |
|
|
|
return map[Number(deliveryType)] || ""; |
|
|
|
}, |
|
|
|
getWorker() { |
|
|
|
this.workerLoading = true; |
|
|
|
getMatchingWorkerListData(this.cleanParams(this.searchWorker)).then((res) => { |
|
|
|
@ -1005,7 +1096,7 @@ |
|
|
|
]); |
|
|
|
}, |
|
|
|
getDeliveryTypeText(type, row) { |
|
|
|
if (row && row.workerId && this.tabName === "hall") return "指派单"; |
|
|
|
if (row && row.workerId && (this.tabName === "hall" || (this.workerOrderVisible && this.workerOrderTab === "zhipai"))) return "指派单"; |
|
|
|
if (type == 1) return "外卖"; |
|
|
|
if (type == 2) return "快递"; |
|
|
|
if (type == 3) return "跑腿"; |
|
|
|
@ -1031,7 +1122,7 @@ |
|
|
|
return h("div", tags); |
|
|
|
}, |
|
|
|
getDeliveryTypeColor(type, row) { |
|
|
|
if (row && row.workerId && this.tabName === "hall") return "blue"; |
|
|
|
if (row && row.workerId && (this.tabName === "hall" || (this.workerOrderVisible && this.workerOrderTab === "zhipai"))) return "blue"; |
|
|
|
if (type == 1) return "gold"; |
|
|
|
if (type == 2) return "orange"; |
|
|
|
if (type == 3) return "green"; |
|
|
|
@ -1069,19 +1160,26 @@ |
|
|
|
]); |
|
|
|
}, |
|
|
|
renderActions(h, row) { |
|
|
|
const children = [h("a", { |
|
|
|
const actions = [h("a", { |
|
|
|
on: { |
|
|
|
click: () => this.orderDetail(row) |
|
|
|
} |
|
|
|
}, "订单详情")]; |
|
|
|
if (this.canAssignWorker(row)) { |
|
|
|
children.push(h("Divider", { props: { type: "vertical" } })); |
|
|
|
children.push(h("a", { |
|
|
|
actions.push(h("Divider", { props: { type: "vertical" } })); |
|
|
|
actions.push(h("a", { |
|
|
|
on: { |
|
|
|
click: () => this.unbind(row) |
|
|
|
} |
|
|
|
}, row.workerId ? "改派订单" : "指派订单")); |
|
|
|
} |
|
|
|
const children = []; |
|
|
|
if (row.isReturn == 1) { |
|
|
|
children.push(h("div", { |
|
|
|
style: { color: "#ed4014", fontWeight: 700, marginBottom: "4px" } |
|
|
|
}, "订单申请退款")); |
|
|
|
} |
|
|
|
children.push(h("div", actions)); |
|
|
|
return h("div", children); |
|
|
|
}, |
|
|
|
canAssignWorker(row) { |
|
|
|
|