本文會對日常中遇到對於element-ui處理相同列自動合併的問題進行代碼展現,以供爲你們提供思路.
HTML
<script src="//unpkg.com/vue/dist/vue.js"></script> <script src="//unpkg.com/element-ui@2.3.7/lib/index.js"></script> <div id="app"> <template> <div> <el-table :data="tableData6" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px"> <el-table-column prop="name" label="姓名"> </el-table-column> <el-table-column prop="amount1" label="數值 1(元)"> </el-table-column> <el-table-column prop="amount2" label="數值 2(元)"> </el-table-column> <el-table-column prop="amount3" label="數值 3(元)"> </el-table-column> </el-table> </div> </template> </div>
JS
var Main = { data() { return { tableData6: [{ name: '王小虎', type: 0, amount1: '234', amount2: '3.2', amount3: 10 }, { name: '王小虎', type: 0, amount1: '165', amount2: '4.43', amount3: 12 }, { name: '王小虎', type: 0, amount1: '324', amount2: '1.9', amount3: 9 }, { name: '王小虎', type: 0, amount1: '621', amount2: '2.2', amount3: 17 }, { name: '王小虎總計', type: 1, amount1: '539', amount2: '4.1', amount3: 15 },{ name: '王小虎1', type: 0, amount1: '234', amount2: '3.2', amount3: 10 }, { name: '王小虎1', type: 0, amount1: '165', amount2: '4.43', amount3: 12 }, { name: '王小虎1', type: 0, amount1: '324', amount2: '1.9', amount3: 9 }, { name: '王小虎1', type: 0, amount1: '621', amount2: '2.2', amount3: 17 }, { name: '王小虎1總計', type: 1, amount1: '539', amount2: '4.1', amount3: 15 }, { name: '王小虎2', type: 0, amount1: '621', amount2: '2.2', amount3: 17 }, { name: '王小虎2', type: 0, amount1: '539', amount2: '4.1', amount3: 15 }, { name: '王小虎3', type: 0, amount1: '539', amount2: '4.1', amount3: 15 }, { name: '王小虎4', type: 0, amount1: '539', amount2: '4.1', amount3: 15 }], arr1:[] }; }, created() { this.setdates(this.tableData6) }, methods: { setdates(arr) { var obj = {}, k, arr1 = []; for(var i = 0, len = arr.length; i < len; i++) { k = arr[i].name; if(obj[k]) obj[k]++; else obj[k] = 1; } console.log(obj) //保存結果{el-'元素',count-出現次數} for(var o in obj) { for(let i=0;i<obj[o];i++){ if(i===0){ this.arr1.push(obj[o]) }else{ this.arr1.push(0) } } } console.log(this.arr1); }, arraySpanMethod({ row, column, rowIndex, columnIndex }) { if (rowIndex % 2 === 0) { if (columnIndex === 0) { return [1, 2]; } else if (columnIndex === 1) { return [0, 0]; } } }, objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0 && this.tableData6[rowIndex].type == 0) { let _row = this.arr1[rowIndex] let _col = this.arr1[rowIndex] > 0 ? 1 : 0 return { rowspan: _row, colspan: _col }; }else if(columnIndex === 0 && this.tableData6[rowIndex].type == 1){ return { rowspan: 1, colspan: 2 }; }else if(columnIndex === 1 && this.tableData6[rowIndex].type == 1){ return { rowspan: 0, colspan: 0 }; } } } }; var Ctor = Vue.extend(Main) new Ctor().$mount('#app')
最終效果
Fiddle代碼預覽地址https://jsfiddle.net/Tomatoro...
可能須要翻(程序員必備)vue