后端数据结构如下:
{
"message":"获取成功",
"code":200,
"data":{
"printer":"west",
"printTime":"2022-05-22 19:16:23",
"shortOrders":10,
"shortSkus":6,
"shortTotal":23,
"raws":[
[{
"orders_id":3606,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3655,
"product_nw_sku":"YM0396Z",
"pick_order_detail_sku_num":2,
"total":0,"short_num":2,
"location":[{"pi_lc_code":"ZBL2608B04","pi_stock_num":96},
{"pi_lc_code":"ZBL2614B02","pi_stock_num":40},
{"pi_lc_code":"ZPMQ1312A01","pi_stock_num":291}]
},{
"orders_id":3669,
"product_nw_sku":"YM0699Y",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0102A1","pi_stock_num":144},
{"pi_lc_code":"ZBL0602B05","pi_stock_num":29},
{"pi_lc_code":"ZBL0813A01","pi_stock_num":22},
{"pi_lc_code":"ZBL0910B01","pi_stock_num":21},
{"pi_lc_code":"ZBL2615C03","pi_stock_num":19},
{"pi_lc_code":"ZBL2817B03","pi_stock_num":10},
{"pi_lc_code":"ZBL2903C02","pi_stock_num":22},
{"pi_lc_code":"ZBX1308A02","pi_stock_num":10}]
},{
"orders_id":3742,
"product_nw_sku":"QJ0441B2",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZBL1601B05","pi_stock_num":34},
{"pi_lc_code":"ZPMQ1312B02","pi_stock_num":242}]
},{
"orders_id":3756,
"product_nw_sku":"HCP588W2",
"pick_order_detail_sku_num":3,
"total":0,
"short_num":3,
"location":[{"pi_lc_code":"ZPMQ1205A01","pi_stock_num":39}]
},{
"orders_id":3856,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3870,
"product_nw_sku":"YM0728B1",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0106A2","pi_stock_num":533},
{"pi_lc_code":"ZBL0414A01","pi_stock_num":11},
{"pi_lc_code":"ZBL0515C03","pi_stock_num":5},
{"pi_lc_code":"ZBL2519B04","pi_stock_num":28},
{"pi_lc_code":"ZBX0501C01","pi_stock_num":10},
{"pi_lc_code":"ZBX0512B03","pi_stock_num":42}]
},{
"orders_id":3894,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3898,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3898,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]}]]
},
"time":1653272183
}
<div>
<div v-for="(item,index) in pageData" :key="index" style="width:204mm;margin:auto">
<div style="margin-top: 20px;width:100%">
<div style="display:flex;justify-content: space-between;">
<div style="text-align:center">
<img :src="`data:image/png;base64,${base64_content}`">
<div>{{ pick_code }}</div>
</div>
<div>
打印人 : {{ info.user }}
打印时间 : {{ info.print_time }} <br>
缺货订单 : {{ info.order_num }}
缺货SKU : {{ info.sku_num }}
缺货数量 : {{ info.total }}
</div>
<div style="font-weight: bold;">
页数 {{ index+1 }}/{{ pageData.length }}
</div>
</div>
<table border="1" cellspacing="0" cellpadding="5" style="margin: auto;width:100%">
<tr style="height: 20px">
<th>订单号</th>
<th>牛蛙SKU</th>
<th>仓位</th>
<th>总库存</th>
<th>缺货数量</th>
</tr>
<tr v-for="(sItem, sIndex) in item" :key="sIndex" style="height: 20px;text-align:center">
<td v-if="sItem.orders_id" :rowspan="sItem.location.length">{{ sItem.orders_id }}</td>
<td v-if="sItem.product_nw_sku" :rowspan="sItem.location.length">{{ sItem.product_nw_sku }}</td>
<td>{{ sItem.location[0].pi_lc_code }}</td>
<td>{{ sItem.location[0].pi_stock_num }}</td>
<td v-if="sItem.short_num" :rowspan="sItem.location.length">{{ sItem.short_num }}</td>
</tr>
</table>
</div>
<div v-if="index!==pageData.length-1" style="page-break-after:always; height:0px;"> </div>
</div>
</div>
后端给的数据我们需要处理一下,当需要合并单元格时,需要知道需要合并多少行,并且现在后端数据是有一对多的结构,需要将多个仓位拆分一条一条插入到外层,且需要注意需要合并单元格的第一条数据以外字段不能展示td,插入时应只插入非合并的字段,这样遍历时才不会导致多出td标签导致单元格错位多出问题。
数据处理如下:
import { barcode } from '@/api/common'
import { pickCodeStock } from '@/api/storeManagement'
export default {
data() {
return {
pick_code: '', // 拣货单号
info: '', // 基本数据
pageData: [],
base64_content: '' // 条码
}
},
mounted() {
this.pick_code = this.$route.query.pick_order_code
this.getData()
},
methods: {
async getData() {
await barcode({ barcode: this.pick_code }).then(res => {
this.base64_content = res.data.base64_content
})
// 获取缺货单数据
pickCodeStock({ pick_code: this.pick_code }).then(res => {
this.info = {
user: res.data.printer,
print_time: res.data.printTime,
order_num: res.data.shortOrders,
sku_num: res.data.shortSkus,
total: res.data.shortTotal
}
if (res.data.raws && res.data.raws.length) {
this.pageData = this.dealData(res.data.raws || [])
} else {
this.$message.error('暂无缺货数据!')
}
})
},
// 处理表格数据为了合并单元格
dealData(data) {
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < data[i].length; j++) {
const item2 = data[i][j]
const location = item2.location
const a = []
if (location.length > 1) {
for (let k = 1; k < location.length; k++) {
const item3 = location[k]
const arr = []
arr.push(item3)
const obj = {
location: arr
}
a.push(obj)
}
}
data[i].splice(j + 1, 0, ...a)
j = j + a.length
}
}
return data
}
}
}
处理后的数据如下:
[
[{
"orders_id":3606,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3655,
"product_nw_sku":"YM0396Z",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZBL2608B04","pi_stock_num":96},
{"pi_lc_code":"ZBL2614B02","pi_stock_num":40},
{"pi_lc_code":"ZPMQ1312A01","pi_stock_num":291}]
},{
"location":[{"pi_lc_code":"ZBL2614B02","pi_stock_num":40}]
},{
"location":[{"pi_lc_code":"ZPMQ1312A01","pi_stock_num":291}]
},{
"orders_id":3669,
"product_nw_sku":"YM0699Y",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0102A1","pi_stock_num":144},
{"pi_lc_code":"ZBL0602B05","pi_stock_num":29},
{"pi_lc_code":"ZBL0813A01","pi_stock_num":22},
{"pi_lc_code":"ZBL0910B01","pi_stock_num":21},
{"pi_lc_code":"ZBL2615C03","pi_stock_num":19},
{"pi_lc_code":"ZBL2817B03","pi_stock_num":10},
{"pi_lc_code":"ZBL2903C02","pi_stock_num":22},
{"pi_lc_code":"ZBX1308A02","pi_stock_num":10}]
},{
"location":[{"pi_lc_code":"ZBL0602B05","pi_stock_num":29}]
},{
"location":[{"pi_lc_code":"ZBL0813A01","pi_stock_num":22}]
},{
"location":[{"pi_lc_code":"ZBL0910B01","pi_stock_num":21}]
},{
"location":[{"pi_lc_code":"ZBL2615C03","pi_stock_num":19}]
},{
"location":[{"pi_lc_code":"ZBL2817B03","pi_stock_num":10}]
},{
"location":[{"pi_lc_code":"ZBL2903C02","pi_stock_num":22}]
},{
"location":[{"pi_lc_code":"ZBX1308A02","pi_stock_num":10}]
},{
"orders_id":3742,
"product_nw_sku":"QJ0441B2",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZBL1601B05","pi_stock_num":34},
{"pi_lc_code":"ZPMQ1312B02","pi_stock_num":242}]
},{
"location":[{"pi_lc_code":"ZPMQ1312B02","pi_stock_num":242}]
},{
"orders_id":3756,
"product_nw_sku":"HCP588W2",
"pick_order_detail_sku_num":3,
"total":0,
"short_num":3,
"location":[{"pi_lc_code":"ZPMQ1205A01","pi_stock_num":39}]
},{
"orders_id":3856,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3870,
"product_nw_sku":"YM0728B1",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0106A2","pi_stock_num":533},
{"pi_lc_code":"ZBL0414A01","pi_stock_num":11},
{"pi_lc_code":"ZBL0515C03","pi_stock_num":5},
{"pi_lc_code":"ZBL2519B04","pi_stock_num":28},
{"pi_lc_code":"ZBX0501C01","pi_stock_num":10},
{"pi_lc_code":"ZBX0512B03","pi_stock_num":42}]
},{
"location":[{"pi_lc_code":"ZBL0414A01","pi_stock_num":11}]
},{
"location":[{"pi_lc_code":"ZBL0515C03","pi_stock_num":5}]
},{
"location":[{"pi_lc_code":"ZBL2519B04","pi_stock_num":28}]
},{
"location":[{"pi_lc_code":"ZBX0501C01","pi_stock_num":10}]
},{
"location":[{"pi_lc_code":"ZBX0512B03","pi_stock_num":42}]
},{
"orders_id":3894,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3898,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
},{
"orders_id":3898,
"product_nw_sku":"OD0634A",
"pick_order_detail_sku_num":2,
"total":0,
"short_num":2,
"location":[{"pi_lc_code":"ZAS0105A2","pi_stock_num":366}]
}]
]
展示效果如下:
右键打印适应A4纸张如下: