前端根据后端数据展示表格 处理数据 动态合并单元格

后端数据结构如下:

{
    "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 }}&nbsp;&nbsp;&nbsp;&nbsp;
            打印时间 : {{ info.print_time }} <br>
            缺货订单 : {{ info.order_num }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            缺货SKU : {{ info.sku_num }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            缺货数量 : {{ 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;">&nbsp;</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纸张如下:

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在使用EasyExcel导入数据的过程中,遇到合并单元格的情况时,需要注意处理合并单元格数据。首先,需要通过读取Excel的元数据信息来获取合并单元格的信息。在EasyExcel中,可以使用SheetExtra方法获取Sheet对象中合并单元格的信息。 获取Sheet对象中合并单元格的信息之后,需要对数据进行处理。如果要获取合并单元格数据,则需要使用合并单元格的起始单元格的值。由于合并单元格的值只存储在起始单元格中,因此读取数据时需要从起始单元格中获取该合并单元格的值。 对于需要使用合并单元格数据进行计算的情况,需要注意合并单元格的影响。由于合并单元格的值只存储在起始单元格中,因此如果直接使用原始数据源进行计算,容易出现计算错误的情况。为了避免这种情况的发生,需要在读取数据之后,特别处理合并单元格数据。这种处理方式包括:扩展合并单元格,复制合并单元格数据到其他单元格。 扩展合并单元格可以使用Java语言中的数组或集合操作实现。复制合并单元格数据可以使用EasyExcel提供的方法实现。例如,使用SheetExtra对象提供的方法copyMergeValue()方法即可实现合并单元格的复制操作。 综上所述,EasyExcel导入合并单元格数据需要注意以下几点: 1. 读取Excel的元数据信息,获取合并单元格的信息。 2. 对于需要使用合并单元格数据进行计算的情况,需要特别处理合并单元格数据。 3. 实现合并单元格的复制操作,可以使用EasyExcel提供的方法copyMergeValue()方法实现。 通过以上步骤,可以实现EasyExcel导入合并单元格数据功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hy2356891299

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值