大调整
This commit is contained in:
341
src/view/shipping/ShippingList.vue
Normal file
341
src/view/shipping/ShippingList.vue
Normal file
@@ -0,0 +1,341 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user