|
|
|
@ -1,6 +1,58 @@ |
|
|
|
<style lang="less"> |
|
|
|
@import "@/styles/table-common.less"; |
|
|
|
@import "./logistics.less"; |
|
|
|
|
|
|
|
.logistics-warning-row td { |
|
|
|
background-color: #fff1f0 !important; |
|
|
|
} |
|
|
|
|
|
|
|
.logistics-warning-row:hover td { |
|
|
|
background-color: #ffe4e1 !important; |
|
|
|
} |
|
|
|
|
|
|
|
.order-time-order-no { |
|
|
|
margin-top: 4px; |
|
|
|
color: #666; |
|
|
|
font-size: 12px; |
|
|
|
} |
|
|
|
|
|
|
|
.worker-info { |
|
|
|
color: #2d8cf0; |
|
|
|
cursor: pointer; |
|
|
|
} |
|
|
|
|
|
|
|
.worker-info-name { |
|
|
|
font-size: 14px; |
|
|
|
font-weight: 700; |
|
|
|
} |
|
|
|
|
|
|
|
.worker-info-phone { |
|
|
|
margin-top: 2px; |
|
|
|
color: #666; |
|
|
|
font-size: 13px; |
|
|
|
} |
|
|
|
|
|
|
|
.must-finish-time { |
|
|
|
display: inline-block; |
|
|
|
min-width: 168px; |
|
|
|
padding: 2px 8px; |
|
|
|
border: 1px solid #8ce6b0; |
|
|
|
border-radius: 3px; |
|
|
|
background: #edfff3; |
|
|
|
color: #19be6b; |
|
|
|
font-size: 15px; |
|
|
|
font-weight: 700; |
|
|
|
line-height: 20px; |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
|
|
|
|
.transfer-pickup-code { |
|
|
|
margin-top: 4px; |
|
|
|
color: #722ed1; |
|
|
|
font-size: 12px; |
|
|
|
line-height: 18px; |
|
|
|
word-break: break-all; |
|
|
|
} |
|
|
|
</style> |
|
|
|
<template> |
|
|
|
<div class="search"> |
|
|
|
@ -107,7 +159,7 @@ |
|
|
|
<a class="select-clear" @click="clearSelectAll">清空</a> |
|
|
|
</Alert> --> |
|
|
|
<Table v-if="isOrderTab" :loading="loading" border :columns="columns" :data="data" :size="tableSize" sortable="custom" |
|
|
|
@on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table> |
|
|
|
:row-class-name="getOrderRowClassName" @on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table> |
|
|
|
<Row v-if="isOrderTab" type="flex" justify="end" class="page"> |
|
|
|
<Page :current="activeSearchForm.pageNum" :total="total" :page-size="activeSearchForm.pageSize" |
|
|
|
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]" |
|
|
|
@ -115,6 +167,11 @@ |
|
|
|
</Row> |
|
|
|
</Card> |
|
|
|
<Modal v-model="transferOrder" :title="transferActionTitle" @on-ok="transferClose" :width="1065"> |
|
|
|
<Row style="margin-bottom: 12px;" @keydown.enter.native="handleWorkerSearch"> |
|
|
|
<Input v-model="searchWorker.keyword" clearable placeholder="请输入配送员名称或手机号" style="width: 260px" /> |
|
|
|
<Button type="primary" icon="ios-search" style="margin-left: 8px;" @click="handleWorkerSearch">搜索</Button> |
|
|
|
<Button style="margin-left: 8px;" @click="handleWorkerReset">重置</Button> |
|
|
|
</Row> |
|
|
|
<Table :loading="workerLoading" border :columns="workerList" :data="transferList" :size="tableSize" |
|
|
|
sortable="custom" ref="table1"></Table> |
|
|
|
<Row type="flex" justify="end" class="page"> |
|
|
|
@ -123,7 +180,23 @@ |
|
|
|
:page-size-opts="[10, 20, 50]" size="small" show-total show-elevator show-sizer></Page> |
|
|
|
</Row> |
|
|
|
</Modal> |
|
|
|
<Modal title="订单详情" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000"> |
|
|
|
<Modal v-model="workerOrderVisible" :title="workerOrderTitle" :mask-closable="false" :width="1200"> |
|
|
|
<Tabs v-model="workerOrderTab" :animated="false" @on-click="changeWorkerOrderTab"> |
|
|
|
<TabPane :label="'待取货(' + workerOrderCounts.daiqu + ')'" name="daiqu"></TabPane> |
|
|
|
<TabPane :label="'待送达(' + workerOrderCounts.daisong + ')'" name="daisong"></TabPane> |
|
|
|
</Tabs> |
|
|
|
<Table :loading="workerOrderLoading" border :columns="workerOrderColumns" :data="workerOrderList" :size="tableSize" |
|
|
|
:row-class-name="getOrderRowClassName"></Table> |
|
|
|
<Row type="flex" justify="end" class="page"> |
|
|
|
<Page :current="workerOrderForm.pageNum" :total="workerOrderTotal" :page-size="workerOrderForm.pageSize" |
|
|
|
@on-change="changeWorkerOrderPage" @on-page-size-change="changeWorkerOrderPageSize" |
|
|
|
:page-size-opts="[10, 20, 50]" size="small" show-total show-elevator show-sizer></Page> |
|
|
|
</Row> |
|
|
|
<div slot="footer"> |
|
|
|
<Button type="text" @click="workerOrderVisible = false">关闭</Button> |
|
|
|
</div> |
|
|
|
</Modal> |
|
|
|
<Modal title="订单详情" v-model="Visiable" :mask-closable="true" :scrollabele="true" :width="1000"> |
|
|
|
<logistics-address v-if="Visiable" ref="dialog"></logistics-address> |
|
|
|
<div slot="footer" v-show="Visiable"> |
|
|
|
<Button type="text" @click="Visiable = false">关闭</Button> |
|
|
|
@ -178,9 +251,14 @@ |
|
|
|
openTip: true, |
|
|
|
loading: false, |
|
|
|
workerLoading: false, |
|
|
|
workerOrderLoading: false, |
|
|
|
autoRefreshing: false, |
|
|
|
settingLoading: false, |
|
|
|
customerServiceLoading: false, |
|
|
|
transferOrder: false, |
|
|
|
workerOrderVisible: false, |
|
|
|
workerOrderTab: "daiqu", |
|
|
|
selectedWorker: {}, |
|
|
|
selectList: [], |
|
|
|
searchWorker: { |
|
|
|
baozhang: false, |
|
|
|
@ -228,6 +306,10 @@ |
|
|
|
regionId: regionId, |
|
|
|
customerPhone: "" |
|
|
|
}, |
|
|
|
workerOrderForm: { |
|
|
|
pageNum: 1, |
|
|
|
pageSize: 10 |
|
|
|
}, |
|
|
|
form: {}, |
|
|
|
tabName: "hall", |
|
|
|
hallTab: "waimai", |
|
|
|
@ -242,11 +324,18 @@ |
|
|
|
daiqu: 0, |
|
|
|
daisong: 0 |
|
|
|
}, |
|
|
|
workerOrderCounts: { |
|
|
|
daiqu: 0, |
|
|
|
daisong: 0 |
|
|
|
}, |
|
|
|
workerList: this.buildWorkerColumns(), |
|
|
|
workerOrderColumns: [], |
|
|
|
columns: [], |
|
|
|
data: [], |
|
|
|
workerOrderList: [], |
|
|
|
total: 0, |
|
|
|
workerTotal: 0, |
|
|
|
workerOrderTotal: 0, |
|
|
|
orderId: "", |
|
|
|
transferActionTitle: "指派配送员", |
|
|
|
transferActionType: "assign", |
|
|
|
@ -267,11 +356,17 @@ |
|
|
|
}, |
|
|
|
deliveryTotalCount() { |
|
|
|
return this.toNumber(this.deliveryCounts.daiqu) + this.toNumber(this.deliveryCounts.daisong); |
|
|
|
}, |
|
|
|
workerOrderTitle() { |
|
|
|
const name = this.selectedWorker.workerName || "配送员"; |
|
|
|
const phone = this.selectedWorker.workerPhone ? "(" + this.selectedWorker.workerPhone + ")" : ""; |
|
|
|
return name + phone + "的订单"; |
|
|
|
} |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
init() { |
|
|
|
this.columns = this.buildOrderColumns(); |
|
|
|
this.workerOrderColumns = this.buildOrderColumns(false); |
|
|
|
this.getLogisticsInfo(); |
|
|
|
this.refreshOrderCounts(); |
|
|
|
this.startCountRefreshTimer(); |
|
|
|
@ -279,12 +374,7 @@ |
|
|
|
this.getCustomerServiceSetting(); |
|
|
|
}, |
|
|
|
buildWorkerColumns() { |
|
|
|
return [{ |
|
|
|
type: "index", |
|
|
|
width: 60, |
|
|
|
align: "center", |
|
|
|
fixed: "left", |
|
|
|
}, { |
|
|
|
return [ { |
|
|
|
title: "配送人员", |
|
|
|
key: "workerName", |
|
|
|
width: 200, |
|
|
|
@ -297,17 +387,17 @@ |
|
|
|
}, { |
|
|
|
title: "待取", |
|
|
|
key: "orderGetCount", |
|
|
|
width: 130, |
|
|
|
width: 110, |
|
|
|
align: "center", |
|
|
|
}, { |
|
|
|
title: "待送", |
|
|
|
key: "orderPutCount", |
|
|
|
width: 130, |
|
|
|
width: 110, |
|
|
|
align: "center", |
|
|
|
}, { |
|
|
|
title: "待接单", |
|
|
|
key: "orderWaitCount", |
|
|
|
width: 130, |
|
|
|
width: 110, |
|
|
|
align: "center", |
|
|
|
}, { |
|
|
|
title: "配送佣金", |
|
|
|
@ -330,37 +420,37 @@ |
|
|
|
]) |
|
|
|
}]; |
|
|
|
}, |
|
|
|
buildOrderColumns() { |
|
|
|
buildOrderColumns(clickableWorker = true) { |
|
|
|
return [{ |
|
|
|
type: "index", |
|
|
|
width: 60, |
|
|
|
align: "center", |
|
|
|
fixed: "left", |
|
|
|
}, { |
|
|
|
title: "订单时间", |
|
|
|
key: "createTime", |
|
|
|
width: 170, |
|
|
|
width: 190, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("span", this.formatDateTime(params.row.createTime)) |
|
|
|
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: 150, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderWorkerInfo(h, params.row, clickableWorker) |
|
|
|
},{ |
|
|
|
title: "送达时间", |
|
|
|
key: "mustFinishTime", |
|
|
|
width: 180, |
|
|
|
width: 210, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("div", [ |
|
|
|
h("Tag", { |
|
|
|
props: { |
|
|
|
color: this.isNearMustFinishTime(params.row) ? "red" : "green" |
|
|
|
} |
|
|
|
}, this.formatDateTime(params.row.mustFinishTime)), |
|
|
|
h("span", { class: "must-finish-time" }, this.formatDateTime(params.row.mustFinishTime)), |
|
|
|
this.isNearMustFinishTime(params.row) ? h("div", { |
|
|
|
style: { color: "#ed4014", marginTop: "4px" } |
|
|
|
style: { color: "#515a6e", marginTop: "4px", fontWeight: 700 } |
|
|
|
}, this.getMustFinishWarningText(params.row)) : null |
|
|
|
]) |
|
|
|
},{ |
|
|
|
title: "配送类型", |
|
|
|
key: "deliveryType", |
|
|
|
width: 100, |
|
|
|
width: 140, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => this.renderDeliveryTags(h, params.row) |
|
|
|
}, { |
|
|
|
@ -373,25 +463,6 @@ |
|
|
|
key: "receiverAddress", |
|
|
|
minWidth: 240, |
|
|
|
render: (h, params) => this.renderAddressBlock(h, params.row, "receiver") |
|
|
|
}, { |
|
|
|
title: "订单状态", |
|
|
|
key: "status", |
|
|
|
width: 80, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("Tag", { |
|
|
|
props: { |
|
|
|
color: this.getStatusColor(params.row.status) |
|
|
|
} |
|
|
|
}, this.getStatusText(params.row.status)) |
|
|
|
}, { |
|
|
|
title: "配送员", |
|
|
|
key: "workerName", |
|
|
|
width: 150, |
|
|
|
align: "center", |
|
|
|
render: (h, params) => h("div", [ |
|
|
|
h("div", params.row.workerName || "未分配"), |
|
|
|
params.row.workerPhone ? h("div", { style: { color: "#999", fontSize: "12px" } }, params.row.workerPhone) : null |
|
|
|
]) |
|
|
|
}, { |
|
|
|
title: "配送佣金", |
|
|
|
key: "deliveryFee", |
|
|
|
@ -501,6 +572,24 @@ |
|
|
|
this.searchWorker.pageNum = 1; |
|
|
|
this.getWorker(); |
|
|
|
}, |
|
|
|
handleWorkerSearch() { |
|
|
|
this.searchWorker.pageNum = 1; |
|
|
|
this.getWorker(); |
|
|
|
}, |
|
|
|
handleWorkerReset() { |
|
|
|
this.searchWorker.keyword = ""; |
|
|
|
this.searchWorker.pageNum = 1; |
|
|
|
this.getWorker(); |
|
|
|
}, |
|
|
|
changeWorkerOrderPage(v) { |
|
|
|
this.workerOrderForm.pageNum = v; |
|
|
|
this.getWorkerOrders(); |
|
|
|
}, |
|
|
|
changeWorkerOrderPageSize(v) { |
|
|
|
this.workerOrderForm.pageSize = v; |
|
|
|
this.workerOrderForm.pageNum = 1; |
|
|
|
this.getWorkerOrders(); |
|
|
|
}, |
|
|
|
changeTableSize(v) { |
|
|
|
this.tableSize = v; |
|
|
|
}, |
|
|
|
@ -512,53 +601,126 @@ |
|
|
|
} |
|
|
|
this.getLogisticsInfo(); |
|
|
|
}, |
|
|
|
getLogisticsInfo() { |
|
|
|
getLogisticsInfo(silent = false) { |
|
|
|
if (!this.isOrderTab) return; |
|
|
|
if (this.tabName === "hall") { |
|
|
|
this.getHallOrders(); |
|
|
|
return this.getHallOrders(silent); |
|
|
|
} else { |
|
|
|
this.getDeliveryOrders(); |
|
|
|
return this.getDeliveryOrders(silent); |
|
|
|
} |
|
|
|
}, |
|
|
|
getHallOrders() { |
|
|
|
this.loading = true; |
|
|
|
getHallOrders(silent = false) { |
|
|
|
if (!silent) this.loading = true; |
|
|
|
const params = this.cleanParams(this.hallSearchForm); |
|
|
|
delete params.paths; |
|
|
|
delete params.waimaiData; |
|
|
|
delete params.kuaidiData; |
|
|
|
delete params.workerId; |
|
|
|
getAdminDeliveryHallData(params).then((res) => { |
|
|
|
return getAdminDeliveryHallData(params).then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
const result = res.result || {}; |
|
|
|
this.data = this.normalizeRecords(result.records); |
|
|
|
this.total = Number(result.total) || 0; |
|
|
|
} |
|
|
|
}).finally(() => { |
|
|
|
this.loading = false; |
|
|
|
if (!silent) this.loading = false; |
|
|
|
}); |
|
|
|
}, |
|
|
|
getDeliveryOrders() { |
|
|
|
this.loading = true; |
|
|
|
getDeliveryOrders(silent = false) { |
|
|
|
if (!silent) this.loading = true; |
|
|
|
const params = this.cleanParams(this.deliverySearchForm); |
|
|
|
delete params.workerId; |
|
|
|
orderSchedulingAdmin(params).then((res) => { |
|
|
|
return orderSchedulingAdmin(params).then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
const result = res.result || {}; |
|
|
|
this.data = this.normalizeRecords(result.records); |
|
|
|
this.total = Number(result.total) || 0; |
|
|
|
} |
|
|
|
}).finally(() => { |
|
|
|
this.loading = false; |
|
|
|
if (!silent) this.loading = false; |
|
|
|
}); |
|
|
|
}, |
|
|
|
openWorkerOrders(row) { |
|
|
|
if (!row || !row.workerId) { |
|
|
|
this.$Message.warning("该订单暂无配送员"); |
|
|
|
return; |
|
|
|
} |
|
|
|
this.selectedWorker = { |
|
|
|
workerId: row.workerId, |
|
|
|
workerName: row.workerName || "", |
|
|
|
workerPhone: row.workerPhone || "" |
|
|
|
}; |
|
|
|
this.workerOrderTab = "daiqu"; |
|
|
|
this.workerOrderForm.pageNum = 1; |
|
|
|
this.workerOrderVisible = true; |
|
|
|
this.getWorkerOrderCounts(); |
|
|
|
this.getWorkerOrders(); |
|
|
|
}, |
|
|
|
changeWorkerOrderTab(v) { |
|
|
|
this.workerOrderTab = v; |
|
|
|
this.workerOrderForm.pageNum = 1; |
|
|
|
this.getWorkerOrders(); |
|
|
|
}, |
|
|
|
buildWorkerOrderParams() { |
|
|
|
const source = this.activeSearchForm || {}; |
|
|
|
const params = { |
|
|
|
regionId: source.regionId || this.currentRegionId, |
|
|
|
deliveryType: source.deliveryType, |
|
|
|
getAreaId: source.getAreaId, |
|
|
|
putAreaId: source.putAreaId, |
|
|
|
shopName: source.shopName, |
|
|
|
order: source.order, |
|
|
|
workerId: this.selectedWorker.workerId, |
|
|
|
status: DELIVERY_STATUS_MAP[this.workerOrderTab], |
|
|
|
pageNum: this.workerOrderForm.pageNum, |
|
|
|
pageSize: this.workerOrderForm.pageSize |
|
|
|
}; |
|
|
|
return this.cleanParams(params); |
|
|
|
}, |
|
|
|
buildWorkerOrderCountParams(status) { |
|
|
|
return Object.assign({}, this.buildWorkerOrderParams(), { |
|
|
|
status: status, |
|
|
|
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]) => { |
|
|
|
if (this.isSuccess(daiqu)) { |
|
|
|
this.workerOrderCounts.daiqu = Number((daiqu.result || {}).total) || 0; |
|
|
|
} |
|
|
|
if (this.isSuccess(daisong)) { |
|
|
|
this.workerOrderCounts.daisong = Number((daisong.result || {}).total) || 0; |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
getWorkerOrders() { |
|
|
|
if (!this.selectedWorker.workerId) return; |
|
|
|
this.workerOrderLoading = true; |
|
|
|
orderSchedulingAdmin(this.buildWorkerOrderParams()).then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
const result = res.result || {}; |
|
|
|
this.workerOrderList = this.normalizeRecords(result.records); |
|
|
|
this.workerOrderTotal = Number(result.total) || 0; |
|
|
|
} |
|
|
|
}).finally(() => { |
|
|
|
this.workerOrderLoading = false; |
|
|
|
}); |
|
|
|
}, |
|
|
|
refreshOrderCounts() { |
|
|
|
this.getHallOrderCounts(); |
|
|
|
this.getDeliveryStatusCounts(); |
|
|
|
return Promise.all([ |
|
|
|
this.getHallOrderCounts(), |
|
|
|
this.getDeliveryStatusCounts() |
|
|
|
]); |
|
|
|
}, |
|
|
|
startCountRefreshTimer() { |
|
|
|
this.clearCountRefreshTimer(); |
|
|
|
this.countRefreshTimer = setInterval(() => { |
|
|
|
this.refreshOrderCounts(); |
|
|
|
this.refreshAutoData(); |
|
|
|
}, 30000); |
|
|
|
}, |
|
|
|
clearCountRefreshTimer() { |
|
|
|
@ -567,6 +729,16 @@ |
|
|
|
this.countRefreshTimer = null; |
|
|
|
} |
|
|
|
}, |
|
|
|
refreshAutoData() { |
|
|
|
if (!this.isOrderTab || this.loading || this.autoRefreshing) return; |
|
|
|
this.autoRefreshing = true; |
|
|
|
Promise.all([ |
|
|
|
this.getLogisticsInfo(true), |
|
|
|
this.refreshOrderCounts() |
|
|
|
]).catch(() => {}).finally(() => { |
|
|
|
this.autoRefreshing = false; |
|
|
|
}); |
|
|
|
}, |
|
|
|
getHallOrderCounts() { |
|
|
|
const params = this.cleanParams({ |
|
|
|
...this.hallSearchForm, |
|
|
|
@ -579,7 +751,7 @@ |
|
|
|
delete params.workerId; |
|
|
|
delete params.deliveryType; |
|
|
|
delete params.order; |
|
|
|
getAdminDeliveryHallData(params).then((res) => { |
|
|
|
return getAdminDeliveryHallData(params).then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
this.setHallCounts(res.result || {}); |
|
|
|
} |
|
|
|
@ -596,7 +768,7 @@ |
|
|
|
delete params.workerId; |
|
|
|
return params; |
|
|
|
}; |
|
|
|
Promise.all([orderSchedulingAdmin(buildParams(1)), orderSchedulingAdmin(buildParams(2))]).then(([daiqu, daisong]) => { |
|
|
|
return Promise.all([orderSchedulingAdmin(buildParams(1)), orderSchedulingAdmin(buildParams(2))]).then(([daiqu, daisong]) => { |
|
|
|
if (this.isSuccess(daiqu)) { |
|
|
|
this.deliveryCounts.daiqu = Number((daiqu.result || {}).total) || 0; |
|
|
|
} |
|
|
|
@ -704,10 +876,12 @@ |
|
|
|
newWorkerId: item.workerId, |
|
|
|
newWorkerName: item.workerName, |
|
|
|
newWorkerPhone: item.mobile, |
|
|
|
fromWhere: "admin", |
|
|
|
}).then((res) => { |
|
|
|
if (this.isSuccess(res)) { |
|
|
|
this.$Message.success(actionText + "配送员成功"); |
|
|
|
this.transferOrder = false; |
|
|
|
this.workerOrderVisible = false; |
|
|
|
this.getLogisticsInfo(); |
|
|
|
} |
|
|
|
}); |
|
|
|
@ -725,7 +899,7 @@ |
|
|
|
}, |
|
|
|
unbind(v) { |
|
|
|
if (!this.canAssignWorker(v)) { |
|
|
|
this.$Message.warning("只有待接单配送单支持指派或改派"); |
|
|
|
this.$Message.warning("只有待接单、待取货、待送达配送单支持指派或改派"); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!v.getAreaId || !v.putAreaId) { |
|
|
|
@ -783,7 +957,23 @@ |
|
|
|
}); |
|
|
|
}, |
|
|
|
getOrderNo(row) { |
|
|
|
return row.numberCode || row.orderId || row.orderNo || row.id || ""; |
|
|
|
return row.orderId || row.orderNo || row.numberCode || row.id || ""; |
|
|
|
}, |
|
|
|
getOrderRowClassName(row) { |
|
|
|
return this.isNearMustFinishTime(row) ? "logistics-warning-row" : ""; |
|
|
|
}, |
|
|
|
renderWorkerInfo(h, row, clickable = true) { |
|
|
|
const children = [ |
|
|
|
h("div", { class: "worker-info-name" }, row.workerName || "未分配"), |
|
|
|
row.workerPhone ? h("div", { class: "worker-info-phone" }, row.workerPhone) : null |
|
|
|
]; |
|
|
|
if (!clickable || !row.workerId) return h("div", children); |
|
|
|
return h("div", { |
|
|
|
class: "worker-info", |
|
|
|
on: { |
|
|
|
click: () => this.openWorkerOrders(row) |
|
|
|
} |
|
|
|
}, children); |
|
|
|
}, |
|
|
|
getDeliveryTypeText(type, row) { |
|
|
|
if (row && row.workerId && this.tabName === "hall") return "指派单"; |
|
|
|
@ -802,6 +992,9 @@ |
|
|
|
} |
|
|
|
if (row.transferDelivery == 1) { |
|
|
|
tags.push(h("Tag", { props: { color: "purple" } }, "中转配送")); |
|
|
|
if (row.transferPickupCode) { |
|
|
|
tags.push(h("div", { class: "transfer-pickup-code" }, "中转码:" + row.transferPickupCode)); |
|
|
|
} |
|
|
|
} |
|
|
|
if (row.isBig == 1) { |
|
|
|
tags.push(h("Tag", { props: { color: "red" } }, "超大/超重")); |
|
|
|
@ -818,10 +1011,10 @@ |
|
|
|
renderAddressBlock(h, row, type) { |
|
|
|
if (type === "shop") { |
|
|
|
const children = [ |
|
|
|
h("div", { style: { fontWeight: 700 } }, row.shopName || ""), |
|
|
|
h("div", row.shopAddress || "") |
|
|
|
h("div", { style: { fontWeight: 700 } }, row.shopName || "") |
|
|
|
]; |
|
|
|
if (row.shopPhone) children.push(h("div", { style: { color: "#999" } }, "电话:" + row.shopPhone)); |
|
|
|
if (row.shopPhone) children.push(h("div", { style: { fontWeight: 700 } }, "电话:" + row.shopPhone)); |
|
|
|
children.push(h("div", row.shopAddress || "")); |
|
|
|
if (row.transferDelivery == 1) { |
|
|
|
children.push(h("div", { style: { color: "#b26a00" } }, "中转点:" + (row.transferAddressName || row.shopName || ""))); |
|
|
|
children.push(h("div", { style: { color: "#b26a00" } }, "送达中转点:" + (row.transferArriveTime ? this.formatDateTime(row.transferArriveTime) : "商家未确认送达"))); |
|
|
|
@ -831,8 +1024,8 @@ |
|
|
|
} |
|
|
|
return h("div", [ |
|
|
|
h("div", { style: { fontWeight: 700 } }, row.receiverName || ""), |
|
|
|
row.receiverPhone ? h("div", { style: { fontWeight: 700 } }, "电话:" + row.receiverPhone) : null, |
|
|
|
h("div", row.receiverAddress || ""), |
|
|
|
row.receiverPhone ? h("div", { style: { color: "#999" } }, "电话:" + row.receiverPhone) : null, |
|
|
|
row.deliveryType == 2 || row.deliveryType == 3 ? h("div", { style: { color: "#999" } }, "件数:" + (row.allCount || 0) + "件") : null, |
|
|
|
row.getCodes ? h("div", { style: { color: "#999" } }, "取件码:" + row.getCodes) : null, |
|
|
|
row.phoneNumber ? h("div", { style: { color: "#999" } }, "手机尾号:" + row.phoneNumber) : null |
|
|
|
@ -863,7 +1056,7 @@ |
|
|
|
return h("div", children); |
|
|
|
}, |
|
|
|
canAssignWorker(row) { |
|
|
|
return row && row.status == 0; |
|
|
|
return row && [0, 1, 2].indexOf(Number(row.status)) > -1; |
|
|
|
}, |
|
|
|
getWorkerOrderType(row) { |
|
|
|
return row && row.deliveryType == 2 ? 1 : 0; |
|
|
|
@ -927,6 +1120,12 @@ |
|
|
|
mounted() { |
|
|
|
this.init(); |
|
|
|
}, |
|
|
|
activated() { |
|
|
|
this.startCountRefreshTimer(); |
|
|
|
}, |
|
|
|
deactivated() { |
|
|
|
this.clearCountRefreshTimer(); |
|
|
|
}, |
|
|
|
beforeDestroy() { |
|
|
|
this.clearCountRefreshTimer(); |
|
|
|
}, |
|
|
|
|