element ui 提供了table ,根據對象數組 動態展示表格,但是實際需求中,有很多豎向展示表格的需求
效果圖:
原本數據
data: [ { code: "weixin", name: "微信", icon: "src地址", isActive: false, templateInfoList: [ { code: "confirmation", name: "人工確認", isConfiged: true }, { code: "executeSuccess", name: "執行成功", isConfiged: true }, { code: "executeFailure", name: "執行失敗", isConfiged: true }, { code: "beforeCronJobExecute", name: "定時執行前", isConfiged: true }, { code: "beforeCronJobEnd", name: "定時結束前", isConfiged: true }, { code: "cronJobFailed", name: "定時啟動失敗", isConfiged: true } ] }, { code: "weixin", name: "郵件", icon: "src地址", isActive: false, templateInfoList: [ { code: "confirmation", name: "人工確認", isConfiged: true }, { code: "executeSuccess", name: "執行成功", isConfiged: true }, { code: "executeFailure", name: "執行失敗", isConfiged: true }, { code: "beforeCronJobExecute", name: "定時執行前", isConfiged: true }, { code: "beforeCronJobEnd", name: "定時結束前", isConfiged: true }, { code: "cronJobFailed", name: "定時啟動失敗", isConfiged: true } ] }, ]
element ui table 渲染形式
一條對象數據 為一數列渲染
數據
tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀區金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀區金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀區金沙江路 1516 弄' }]
效果圖:
4條數據 每一行按照prop 把對應的對象數據得值取出來 並渲染
以我的項目為例,需要6條數據,現在是按照微信 郵件分划的 4條數據 不符合,所以需要轉化
人工確認,1,2,3,4,
執行成功,1,2,3,4,
...
這種類型的 6組數據 (就是每一行的數據,這里沒有標題)
將數據轉化
created() { //第一行數據為標題 所以要有一個空字符串 預留位置 this.title.push(""); let matrixData = this.data.map(row => { let arr = []; this.title.push({ name: row.name, icon: row.icon, isActive: row.isActive, isConfiged: row.isActive }); for (let key in row.templateInfoList) { arr.push(row.templateInfoList[key]); } return arr; }); console.log(this.title); // 加入標題拼接最終的轉化好得數據 this.transData = matrixData[0].map((col, i) => { return [ col.name, ...matrixData.map(row => { return row[i].isConfiged; }) ]; }); console.log(this.transData); }
template 結構
<el-table border style="margin-top: 50px;" :data="transData"> <el-table-column align="center" v-for="(item, index) in title"> <template slot="header" slot-scope="scope"> <div v-if="scope.$index == 0" class="line_box"> <span class="tit1">渠道</span> <div class="line"></div> <span class="tit2">模板</span> </div> <div v-else> <img :src="item.icon" alt="" /> <el-checkbox-group v-model="item.isActive"> <el-checkbox @change="isFlag(item)" name="type"></el-checkbox> </el-checkbox-group> <span class="text">{{ item.name }}</span> </div> </template> <template slot-scope="scope"> {{ scope.row[index] }} </template> </el-table-column> </el-table>
按照這個邏輯 就實現了表頭縱向顯示