VUE之Vxe-table动态生成多级表头及后端返回数据的处理

34 篇文章 2 订阅
3 篇文章 0 订阅

需求:
1.第一列为正常列;
2.第二列开始为动态生成列(根据接口返回数据生成);
3.最后一列为编辑列。

步骤:

写入动态html模板

<vxe-table
 id="prdRequest-id"
  ref="clearSort-req"
  border
  :page="page"
  :row-config="{ isHover: true }"
  v-bind="{
    height: tableHeight,
    sortConfig: {remote: true},
    showFooter: true,
    'show-overflow':true
  }"
  auto-resize
  align="center"
  class="content-height mytable-scrollbar"
  :data="tableData"
  :footer-method="footerMethod"
  @sort-change="sortChange"
>
  <vxe-column title="日期" field="recordDate" width="120" sortable />
  <!---将多级表头循环遍历-->
  <template v-for="(item, key) in TableColumns">
  <!---一级表头-->
    <vxe-colgroup
      :key="item.label || key"
      :title="item.label"
      :width="item.width || 100"
    >
    <!---二级表头-->
      <template v-if="item.children">
        <vxe-column
          v-for="(items, index) in item.children"
          :key="index"
          :title="items.label"
          :field="items.prop"
          v-bind="{'show-overflow': true}"
        />
      </template>
    </vxe-colgroup>
  </template>
  <vxe-column
    :width="200"
    type="html"
    title="操作"
  >
    <template slot-scope="scope">
      <div class="table-reload">
        <span class="table-reload-examine" @click="(e) => handleEditRow(e, scope.row)">编辑</span>
      </div>
    </template>
  </vxe-column>
</vxe-table>

核心js方法

centerProcess(response) {
      if (response.code === 200) {
        response.data.records.map(item => {
          // 动态生成colums(由于一级表头对应多个二级表头,而二级表头为三个固定重复表头,故加入index以保证prop唯一性)
          this.TableColumns = item.detail.map((v, index) => {
            return {
              label: v.sectionName,
              children: [
                {
                  prop: 'receiveNum' + index,
                  label: '领料数'
                },
                {
                  prop: 'goodNum' + index,
                  label: '良品数'
                },
                {
                  prop: 'goodRate' + index,
                  label: '良品率'
                }
              ]
            }
          })
        })
        //合计行参数处理
        for (var i = 0; i < this.TableColumns.length; i++) {
          this.totalArr.push(...['receiveNum' + i, 'goodNum' + i])
        }
        // 将detail中三个数量处理为下标对应值(和表头处理类似)
        response.data.records.map((item, index) => {
          item.detail.map((v, i) => {
            item['receiveNum' + i] = v.receiveNum
            item['goodNum' + i] = v.goodNum
            item['goodRate' + i] = v.goodRate
          })
        })
        this.tableData = response.data.records
        this.page.total = response.data.total
        this.loading = false
      } else {
        this.$message({
          message: response.message,
          type: 'error'
        })
      }
    }

response返回数据格式:
在这里插入图片描述
来看前端效果
在这里插入图片描述
非常nice!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vxe-tablevxe-column是基于Vue.js的表格组件,可以实现多级表头。下面是一个示例代码,演示了如何使用vxe-tablevxe-column实现多级表头: ```vue <template> <vxe-table :data="tableData" border show-header> <vxe-column type="index" title="序号"></vxe-column> <vxe-column title="基本信息"> <vxe-column title="姓名" field="name"></vxe-column> <vxe-column title="年龄" field="age"></vxe-column> </vxe-column> <vxe-column title="联系方式"> <vxe-column title="电话" field="phone"></vxe-column> <vxe-column title="邮箱" field="email"></vxe-column> </vxe-column> <vxe-column title="操作"> <vxe-column title="编辑" :render-header="renderEditHeader"></vxe-column> <vxe-column title="删除" :render-header="renderDeleteHeader"></vxe-column> </vxe-column> </vxe-table> </template> <script> import 'vxe-table/lib/style.css'; import { VXETable } from 'vxe-table'; export default { data() { return { tableData: [ { name: '张三', age: 20, phone: '123456789', email: 'zhangsan@example.com' }, { name: '李四', age: 25, phone: '987654321', email: 'lisi@example.com' }, ], }; }, methods: { renderEditHeader({ column }) { return <span>{column.title}(编辑)</span>; }, renderDeleteHeader({ column }) { return <span>{column.title}(删除)</span>; }, }, mounted() { VXETable.setup({ size: 'mini', }); }, }; </script> ``` 在上面的代码中,我们使用了vxe-tablevxe-column组件来创建一个表格。通过嵌套vxe-column组件,我们可以实现多级表头。每个vxe-column组件都代表一个表头列,可以设置title属性来定义列的标题,field属性来指定列对应的数据字段。 在示例中,我们创建了一个基本的表格,包含了基本信息和联系方式两个多级表头。每个表头列都可以自定义渲染,通过render-header属性来指定渲染函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赫兹/Herzz

如果我的博文帮助到您请打赏支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值