342 lines
9.6 KiB
Vue
342 lines
9.6 KiB
Vue
|
|
<template>
|
|||
|
|
<ai-list class="list" v-loading="isLoading">
|
|||
|
|
<ai-title
|
|||
|
|
slot="title"
|
|||
|
|
title="已收货发货单列表"
|
|||
|
|
isShowBottomBorder>
|
|||
|
|
<template #rightBtn>
|
|||
|
|
<div class="title-right">
|
|||
|
|
<div>
|
|||
|
|
<label style="width:90px">店铺:</label>
|
|||
|
|
<el-select v-model="search.mallId" @change="changeMallId" placeholder="请选择" size="small">
|
|||
|
|
<el-option
|
|||
|
|
v-for="item in $store.state.mallList"
|
|||
|
|
:key="item.mallId"
|
|||
|
|
:label="item.mallName"
|
|||
|
|
:value="item.mallId">
|
|||
|
|
</el-option>
|
|||
|
|
</el-select>
|
|||
|
|
<el-button type="button" :class="'el-button el-button--primary'" @click="beginSync">同步</el-button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
</ai-title>
|
|||
|
|
<template slot="content">
|
|||
|
|
<div class="top">
|
|||
|
|
<div class="item">
|
|||
|
|
<h2><span><i class="el-icon-time"></i></span>最后一次同步时间</h2>
|
|||
|
|
<p>{{ lastSyncDate }}</p>
|
|||
|
|
</div>
|
|||
|
|
<div class="item">
|
|||
|
|
<h2>发货总量</h2>
|
|||
|
|
<p>{{ totalDelivery }}</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<ai-card title="数据明细" style="padding-bottom: 40px;">
|
|||
|
|
<!--<template #right>
|
|||
|
|
<json-excel
|
|||
|
|
:data="last30Daylist"
|
|||
|
|
:fields="last30DaysJsonFields"
|
|||
|
|
:before-generate = "startDownload"
|
|||
|
|
name="近30天销售数据.xls"
|
|||
|
|
worksheet="近30天销售统计">
|
|||
|
|
<el-button type="primary">导出数据</el-button>
|
|||
|
|
</json-excel>
|
|||
|
|
</template>-->
|
|||
|
|
<ai-table
|
|||
|
|
:tableData="tableData"
|
|||
|
|
:col-configs="colConfigs"
|
|||
|
|
:total="total"
|
|||
|
|
style="margin-top: 8px;"
|
|||
|
|
:current.sync="search.current" :size.sync="search.size"
|
|||
|
|
@getList="getDeliveryOrderList">
|
|||
|
|
</ai-table>
|
|||
|
|
</ai-card>
|
|||
|
|
</template>
|
|||
|
|
</ai-list>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import {sendChromeAPIMessage} from '@/api/chromeApi'
|
|||
|
|
// import JsonExcel from 'vue-json-excel'
|
|||
|
|
import {timestampToTime} from '@/utils/date'
|
|||
|
|
import { Message } from 'element-ui'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
name: 'ShippingList',
|
|||
|
|
|
|||
|
|
data () {
|
|||
|
|
return {
|
|||
|
|
isLoading: false,
|
|||
|
|
list: [],
|
|||
|
|
colConfigs: [
|
|||
|
|
{ prop: 'productName', label: '商品名称', align: 'left' },
|
|||
|
|
{ prop: 'skcExtCode', label: '货号', align: 'left' },
|
|||
|
|
{ prop: 'skcId', label: 'SKC ID', align: 'left' },
|
|||
|
|
{ prop: 'logisticName', label: '物流公司', align: 'left' },
|
|||
|
|
{ prop: 'logisticNumber', label: '物流单号', align: 'left' },
|
|||
|
|
{ prop: 'totalNumber', label: '总件数', align: 'left' },
|
|||
|
|
{ prop: 'deliveryTime', label: '发货时间', width: '180px', fixed: 'right'}
|
|||
|
|
],
|
|||
|
|
currentPage: 1,
|
|||
|
|
pageSize: 100,
|
|||
|
|
|
|||
|
|
tableData: [],
|
|||
|
|
total: 0,
|
|||
|
|
search: {
|
|||
|
|
current: 1,
|
|||
|
|
size: 10,
|
|||
|
|
mallId: ''
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
packageNumber: 0,
|
|||
|
|
lastSyncDate: '',
|
|||
|
|
totalDelivery: 0,
|
|||
|
|
lastDeliveryTimestamp: 0
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
computed: {
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
/*components: {
|
|||
|
|
JsonExcel
|
|||
|
|
},*/
|
|||
|
|
|
|||
|
|
created () {
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
methods: {
|
|||
|
|
changeDataType() {
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
getDeliveryOrderList () {
|
|||
|
|
this.$http.post('/api/deliveryOrder/page',null,{
|
|||
|
|
params: {
|
|||
|
|
...this.search
|
|||
|
|
}
|
|||
|
|
}).then(res => {
|
|||
|
|
this.tableData = res.data.records
|
|||
|
|
this.total = res.data.total
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
changeMallId() {
|
|||
|
|
if (!this.search.mallId) {
|
|||
|
|
Message.error("请先选择店铺")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
this.search.current = 1
|
|||
|
|
this.tableData = []
|
|||
|
|
this.getDeliveryOrderList()
|
|||
|
|
this.getInfo()
|
|||
|
|
},
|
|||
|
|
getInfo() {
|
|||
|
|
this.$http.post('/api/deliveryRecord/getLastSyncTime',null, {
|
|||
|
|
params: {mallId: this.search.mallId}
|
|||
|
|
}).then(res => {
|
|||
|
|
if (res.code === 0) {
|
|||
|
|
this.lastSyncDate = res.data?.lastSyncTime
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
this.$http.post('/api/deliveryOrder/totalDelivery',null, {
|
|||
|
|
params: {mallId: this.search.mallId}
|
|||
|
|
}).then(res => {
|
|||
|
|
if (res.code === 0) {
|
|||
|
|
this.totalDelivery = res.data
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
beginSync() {
|
|||
|
|
this.isLoading = true
|
|||
|
|
this.currentPage = 1
|
|||
|
|
this.packageNumber = 0
|
|||
|
|
this.$http.post('/api/deliveryRecord/start',null, {
|
|||
|
|
params: {mallId: this.search.mallId}
|
|||
|
|
}).then(res => {
|
|||
|
|
if (res.code === 0) {
|
|||
|
|
this.lastDeliveryTimestamp = res.data?.lastDeliveryTime
|
|||
|
|
this.getList()
|
|||
|
|
} else {
|
|||
|
|
this.isLoading = false
|
|||
|
|
Message.error("同步发货单失败")
|
|||
|
|
}
|
|||
|
|
}).catch(() => {
|
|||
|
|
this.isLoading = false
|
|||
|
|
Message.error("同步发货单失败")
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
end() {
|
|||
|
|
this.$http.post('/api/deliveryRecord/end',null, {
|
|||
|
|
params: {mallId: this.search.mallId}
|
|||
|
|
}).then(res => {
|
|||
|
|
if (res.code === 0) {
|
|||
|
|
this.search.current = 1
|
|||
|
|
this.getDeliveryOrderList()
|
|||
|
|
this.getInfo()
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
getList () {
|
|||
|
|
let data = {
|
|||
|
|
"pageNo": this.currentPage,
|
|||
|
|
"pageSize": this.pageSize,
|
|||
|
|
"status": 2
|
|||
|
|
}
|
|||
|
|
if (this.lastDeliveryTimestamp) {
|
|||
|
|
data.deliverTimeFrom = this.lastDeliveryTimestamp
|
|||
|
|
data.deliverTimeTo = Date.now() / 1000
|
|||
|
|
}
|
|||
|
|
sendChromeAPIMessage({
|
|||
|
|
url: 'bgSongbird-api/supplier/deliverGoods/management/pageQueryDeliveryOrders',
|
|||
|
|
needMallId: true,
|
|||
|
|
mallId: this.search.mallId,
|
|||
|
|
anti: true,
|
|||
|
|
data: data}).then((res) => {
|
|||
|
|
if (res.errorCode == 1000000) {
|
|||
|
|
let list = []
|
|||
|
|
for(let i = 0;i < res.result.list.length; i++) {
|
|||
|
|
let item = res.result.list[i];
|
|||
|
|
let data = {};
|
|||
|
|
data.id = item.deliveryOrderSn
|
|||
|
|
data.productName = item.subPurchaseOrderBasicVO.productName;
|
|||
|
|
data.mallId = this.search.mallId
|
|||
|
|
data.skcId = item.subPurchaseOrderBasicVO.productSkcId;
|
|||
|
|
data.skcExtCode = item.subPurchaseOrderBasicVO.skcExtCode;
|
|||
|
|
data.logisticName = item.expressCompany
|
|||
|
|
data.logisticNumber = item.expressDeliverySn
|
|||
|
|
data.totalNumber = item.deliverSkcNum
|
|||
|
|
data.deliveryTime = timestampToTime(item.deliverTime)
|
|||
|
|
|
|||
|
|
list.push(data)
|
|||
|
|
|
|||
|
|
this.packageNumber = this.packageNumber + item.receivePackageNum
|
|||
|
|
setTimeout(() => {
|
|||
|
|
this.getSkuDetailList(data.id)
|
|||
|
|
}, 200 * i)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.$http.post('/api/deliveryOrder/add',list).then(res => {
|
|||
|
|
console.log(res)
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
if (this.pageSize == res.result.list.length) {
|
|||
|
|
this.currentPage ++
|
|||
|
|
setTimeout(() => {
|
|||
|
|
this.getList()
|
|||
|
|
}, 1500)
|
|||
|
|
} else {
|
|||
|
|
if (this.currentPage == 1 && res.result.list.length == 0) {
|
|||
|
|
this.isLoading = false
|
|||
|
|
}
|
|||
|
|
this.end()
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
setTimeout(() => {
|
|||
|
|
this.getList()
|
|||
|
|
}, 1500)
|
|||
|
|
}
|
|||
|
|
}).catch(() => {
|
|||
|
|
this.isLoading = false
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
getSkuDetailList(sn) {
|
|||
|
|
sendChromeAPIMessage({
|
|||
|
|
url: 'bgSongbird-api/supplier/deliverGoods/management/queryDeliveryOrderPackageDetailInfo',
|
|||
|
|
needMallId: true,
|
|||
|
|
mallId: this.search.mallId,
|
|||
|
|
anti: true,
|
|||
|
|
data: {deliveryOrderSn: sn}}).then((res) => {
|
|||
|
|
if (res.errorCode == 1000000) {
|
|||
|
|
let list = []
|
|||
|
|
for(let i = 0;i < res.result.deliveryOrderDetails.length; i++) {
|
|||
|
|
let item = res.result.deliveryOrderDetails[i]
|
|||
|
|
|
|||
|
|
let data = {}
|
|||
|
|
data.deliveryOrderId = sn
|
|||
|
|
data.productSkuId = item.productSkuId
|
|||
|
|
data.productSkuNumber = item.deliverSkuNum
|
|||
|
|
|
|||
|
|
list.push(data)
|
|||
|
|
}
|
|||
|
|
this.packageNumber = this.packageNumber - res.result.deliveryOrderDetails.length
|
|||
|
|
|
|||
|
|
if (this.packageNumber < 5) this.isLoading = false
|
|||
|
|
this.$http.post('/api/deliveryOrderDetail/add',list)
|
|||
|
|
} else {
|
|||
|
|
setTimeout(() => {
|
|||
|
|
this.getSkuDetailList(sn)
|
|||
|
|
}, 200)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.list {
|
|||
|
|
.title-right {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
|
|||
|
|
& > div:first-child {
|
|||
|
|
margin-right: 20px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
::v-deep.ai-list {
|
|||
|
|
.ai-list__content--right-wrapper {
|
|||
|
|
background: transparent;
|
|||
|
|
box-shadow: none;
|
|||
|
|
padding: 0!important;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.top {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
margin-bottom: 24px;
|
|||
|
|
|
|||
|
|
.item {
|
|||
|
|
flex: 1;
|
|||
|
|
margin-right: 20px;
|
|||
|
|
padding: 16px 24px;
|
|||
|
|
background: #FFF;
|
|||
|
|
box-shadow: 0px 4px 6px -2px rgba(15, 15, 21, 0.15);
|
|||
|
|
border-radius: 4px;
|
|||
|
|
|
|||
|
|
&:last-child {
|
|||
|
|
margin-right: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
&:nth-of-type(1) {
|
|||
|
|
color: #2266ff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
&:nth-of-type(2) {
|
|||
|
|
color: #f8b426;
|
|||
|
|
}
|
|||
|
|
&:nth-of-type(3) {
|
|||
|
|
color: #21aa99;
|
|||
|
|
}
|
|||
|
|
&:nth-of-type(4) {
|
|||
|
|
color: #F46;
|
|||
|
|
}
|
|||
|
|
&:nth-of-type(5) {
|
|||
|
|
color: #11A265;
|
|||
|
|
}
|
|||
|
|
h2 {
|
|||
|
|
margin-bottom: 30px;
|
|||
|
|
font-size: 16px;
|
|||
|
|
color: #999;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
p {
|
|||
|
|
font-weight: 600;
|
|||
|
|
font-size: 28px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|