vue实现动态表头

获取返回数据类型:

{
  "code": 200,
  "message": "查询成功",
  "data": [
    {
      "opDate": "2023-08-01",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 17901.49
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 3233.3
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 4201.845
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-02",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 16715.63
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3255.289
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-03",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 17483.12
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 4101.407
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-04",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 14570.18
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 2897.257
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-05",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 4942.47
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 1470.994
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-06",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 8188.58
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 2998.148
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-07",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 12675.62
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3014.079
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-08",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 17289.77
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3957.453
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-09",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 182
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3942.195
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-10",
      "supplierDayList": [
        {
          "supplierName": "供应商测试2",
          "totalPrice": 2214.488
        },
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 0
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-11",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 15279.13
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 25409.28
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 2585.916
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 19752.5
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-12",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 6472.06
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 1916.48
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 1903.768
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-13",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 8031.59
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 1138.5
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 2389.872
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-14",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 13376.35
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 5629.42
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3341.525
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-15",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 14364.68
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 3528.46
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 3444.371
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    },
    {
      "opDate": "2023-08-16",
      "supplierDayList": [
        {
          "supplierName": "河南汇群福商贸有限公司",
          "totalPrice": 14603.885
        },
        {
          "supplierName": "河南鹏旭食品有限公司",
          "totalPrice": 4783.3
        },
        {
          "supplierName": "供应商测试2",
          "totalPrice": 4119
        },
        {
          "supplierName": "供应商测试3",
          "totalPrice": 0
        }
      ],
      "mcateDayList": null
    }
  ]
}

 在vuex中的actions调用接口,获取后端传过来的数据:

actions:{
        // 获取表格显示信息
        getInTotalActions({state,commit}){
            axios.get('/common/report/getSupplierData',{params:state.pageInfo}).then(response =>{
                if(response.code === 200){
                    commit('getSupplierList',response.data)
                    Message({
                        message:response.message,
                        type:'success'
                    })
                }else{
                    Message({
                        message:response.message,
                        type:'error'
                    })
                }
            })
        },
    }

在vuex的mutations处理我们所获取到的数据:

 // 获取表格信息
        getSupplierList(state,list){
            state.transformedData = null
            state.tableHead = []  //这里需要附空,否则数据会出现累加
            state.transformedData = list
            let selectState = list[0].supplierDayList
            selectState.forEach((item,index) => {
                //这里是循环数据得到的动态表头
                state.tableHead.push({index:index,property:'supplierDayList',label:item.supplierName})
            });
            const anotherTableHead = [
                {
                    label:'日期'+"\\"+'供应商',
                    property:'opDate'
                }
            ]
            state.tableHead = [...anotherTableHead,...state.tableHead]
        },

vuex中的state用来存储数据:

state:{
        transformedData:null,
        pageInfo:{
            beginTime:null,
            endTime:null,
        },
        tableHead:[],
    },

在我们的vue页面中的script调用vuex:

import {mapState , mapActions} from 'vuex';
...
computed:{
        ...mapState('vendor',['pageInfo','transformedData','tableHead'])
    },
    methods:{
        ...mapActions('vendor',['getInTotalActions']),
    }

在vue页面的template进行渲染表格:

<!-- 表格 -->
        <el-table :data="transformedData" border id="out-table">
            <el-table-column v-for="(item,index) in tableHead" :key="index" :label="item.label" :property="item.property" :index="item.index" align="center">
                <template slot-scope="scope">
                    <div>
                        <p v-if="scope.column.property !='supplierDayList'">{{ scope.row[scope.column.property] }}</p>
                        <p v-else>{{ scope.row[scope.column.property][scope.column.index].totalPrice }}</p>
                    </div>
                </template>
            </el-table-column>
        </el-table>

最终显示结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值