vue+elementui实现表头根据后台数据动态生成字段

有时需求涉及表头动态加载 ,肯定是涉及渲染了
代码如:

 cols: [
                { label: "节点编号", prop: "node", type: "normal" },
                { label: "名称", prop: "name", type: "normal" },
                { label: "类型", prop: "type", type: "sort" },
                { label: "坐标", prop: "coordinate", type: "normal" }
            ]

prop属性设定的值肯定是表头绑定的 属性,表格数据当然是以prop值作为绑定表格属性

<template>
    <div>
        <el-table class="tb-edit" highlight-current-row :data="tableData" style="width: 100%">
 
            <template v-for="(col ,index) in cols">
                <el-table-column v-if="col.type==='normal'" :prop="col.prop" :label="col.label"></el-table-column>
                <el-table-column v-if="col.type==='sort'" :prop="col.prop" sortable :label="col.label">
                    <template slot-scope="scope">
                        <el-tag type="primary">{{ scope.row.type }}</el-tag>
                    </template>
                </el-table-column>
            </template>
        </el-table>
        <br>数据:{{tableData}}
    </div>
</template>
<script>
export default {
    data() {
        return {
            // cols prop属性值都是作为 tableData的属性
            cols: [
                { label: "节点编号", prop: "node", type: "normal" },
                { label: "名称", prop: "name", type: "normal" },
                { label: "类型", prop: "type", type: "sort" },
                { label: "坐标", prop: "coordinate", type: "normal" }
            ],
            tableData: [
                {
                    node: "0051",
                    name: " 机库顶",
                    type: "UWB",
                    status: "正常",
                    coordinate: "12.21,34.45,34.6"
                },
                {
                    node: "0061",
                    name: "机库门",
                    type: "GPS",
                    status: "低电",
                    coordinate: "45.41,67.45,78.6"
                }
            ]
        };
    },
    methods: {
        handleCurrentChange(row, event, column) {
            console.log(row, event, column, event.currentTarget);
        },
        handleEdit(index, row) {
            console.log(index, row);
        },
        handleDelete(index, row) {
            console.log(index, row);
        }
    }
};
</script>

这个是我在项目中的遇到的:
效果图:
在这里插入图片描述
代码:html

  <el-main style="margin-top:-30px;" v-show="lis_show">
            <h3 style="float:left">月度汇总</h3>
            <el-button class="filter-item" style="margin-left: 10px;float:right" @click="handleExport" type="primary">导出</el-button>
            <el-table :data="tableData1"  border fit highlight-current-row
              style="width:100%;margin-top:8px"  :header-cell-style="{background:'#199ED8'}">
              <template v-for="(col,key) in cols1">
                <el-table-column v-if="col.prop==='sum'" align="center" :prop="col.prop" :label="col.label"></el-table-column>
                <el-table-column v-else="col.prop==col.label" align="center" :prop="col.prop" :label="col.label.substring(8,10)"></el-table-column>//*这个做了处理*
            </template> 
          </el-table>
          </el-main>

          <el-main v-show="lis_show">
             <h3 style="float:left">产品汇总</h3>
             <el-button class="filter-item" style="margin-left: 10px;float:right" @click="hadeExcst" type="primary">导出</el-button>
             <el-table :data="tableData2"  border fit highlight-current-row
              style="width:100%;margin-top:8px"  :header-cell-style="{background:'#199ED8'}">
               <template v-for="col in cols2">
                <el-table-column v-if="col.prop==='part_name'" align="center" :prop="col.prop" :label="col.label"></el-table-column>   
                <el-table-column v-if="col.prop==='part_or_product'" align="center" :prop="col.prop" :label="col.label"></el-table-column>   
                <el-table-column v-if="col.prop==='part_code'" align="center" :prop="col.prop" :label="col.label"></el-table-column>
                <el-table-column v-if="col.prop==='sum'" align="center" :prop="col.prop" :label="col.label">
                   <template slot-scope="scope">
                        <span class="link-type futiop" @click="ppp(scope.row,col.prop)">{{scope.row.sum}}</span>
                    </template>
                </el-table-column>
                <el-table-column v-if="col.prop==col.label" align="center" :prop="col.prop"  :label="col.label.substring(8,10)">
                    <template slot-scope="scope">
                        <span class="link-type futiop" @click="ppp(scope.row,col.prop)">{{scope.row[col.prop]}}</span>
                    </template>
                </el-table-column>
            </template> 
          </el-table>
          </el-main>
          <!-- 底栏容器 -->
          <el-footer v-show="lis_show">
            <div class="pagination-container">
              <el-pagination background 
              @size-change="handleSizeChange" 
              @current-change="handleCurrentChange" 
              :current-page="listQuery.pageNum" 
              :page-sizes="[5,10,15,20]" 
              :page-size="listQuery.pageSize" 
              layout="total, sizes, prev, pager, next, jumper" 
              :total="top_total">
              </el-pagination>
            </div>
          </el-footer>

js

// 月度汇总
        mouthAA(){
         mouthList(this.listQuery).then(response =>{
           var pos={ label: "", prop: "node1" }
           this.cols1 = response.data.data.column
           this.cols1.unshift(pos)
           var zhilist = response.data.data.result
           zhilist['node1'] = "总计"
           this.tableData1 = []
           this.tableData1.push(zhilist)
         })
        },
        //汇总
        aggregateAA(){
          poolList(this.listQuery).then(response => {
           if (response.data.code == 200) {
             this.cols2 = response.data.data.column
             this.tableData2 = response.data.data.result
             this.top_total = response.data.data.total
             }else {
              this.$notify({
              title: '警告',
              message: response.data.msg,
              type: 'warning',
              duration: 3000
            })
          }
        })
       }, 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗的小鸟鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值