iview的Table组件表头分组javascript
根据iview提供的demo能够看出,表头的编辑是比较容易的,只须要根据格式编写便可。vue
解决:java
须要分组的表头 key_供货人ID 须要分组的表数据 key_供货人ID
[ { "width":"200", "align":"center", "title":"物品名称", "ellipsis":true, "key":"name", }, { "width":"100", "align":"center", "title":"数量", "ellipsis":true, "key":"purchaseAmount", }, { "width":"166", "align":"center", "title":"lyy369", "ellipsis":true, "key":"supplier_11113173785", "children":[ { "width":"100", "align":"center", "title":"单价(元)", "ellipsis":true, "key":"quoteUnitPrice_11113173785", }, { "width":"100", "align":"center", "title":"总计(元)", "ellipsis":true, "key":"quoteTotalPrice_11113173785", } ] }, { "width":"166", "align":"center", "title":"私人定制", "ellipsis":true, "key":"supplier_11113173838", "children":[ { "width":"100", "align":"center", "title":"单价(元)", "ellipsis":true, "key":"quoteUnitPrice_11113173838", }, { "width":"100", "align":"center", "title":"总计(元)", "ellipsis":true, "key":"quoteTotalPrice_11113173838", } ] } ]
[ { "name":"手动添加", "purchaseAmount":"9887.00", "quoteTotalPrice_11113173785":"494350.00", "supplierId_11113173785":"11113173785", "quoteAmount_11113173785":"9887.0000", "quoteUnitPrice_11113173785":"50.0000", "quoteTotalPrice_11113173838":"988700.00", "supplierId_11113173838":"11113173838", "quoteAmount_11113173838":"9887.0000", "quoteUnitPrice_11113173838":"100.0000" }, { "name":"2018年7月9日", "purchaseAmount":"1.00", "quoteTotalPrice_11113173785":"50.00", "supplierId_11113173785":"11113173785", "quoteAmount_11113173785":"1.0000", "quoteUnitPrice_11113173785":"50.0000", "quoteTotalPrice_11113173838":"100.00", "supplierId_11113173838":"11113173838", "quoteAmount_11113173838":"1.0000", "quoteUnitPrice_11113173838":"100.0000" }, { "name":" 中国移动取消流量“漫游”费", "purchaseAmount":"563.00", "quoteTotalPrice_11113173785":"28150.00", "supplierId_11113173785":"11113173785", "quoteAmount_11113173785":"563.0000", "quoteUnitPrice_11113173785":"50.0000" }, { "name":" 中国移动取消流量“漫游”费", "purchaseAmount":"23.00", "quoteTotalPrice_11113173785":"1150.00", "supplierId_11113173785":"11113173785", "quoteAmount_11113173785":"23.0000", "quoteUnitPrice_11113173785":"50.0000", "quoteTotalPrice_11113173838":"2300.00", "supplierId_11113173838":"11113173838", "quoteAmount_11113173838":"23.0000", "quoteUnitPrice_11113173838":"100.0000" } ]
此处须要更改iview的Table组件的源码。iview
[ {// 每一条,表示有一行 "total":"合计", // 展现的数据 "key":"total", // 表头的key "align":"center", "ellipsis":true, "colspan":"2", // 须要计算合并列的个数 "tableBody":[ // tableBody.length 表示有多少个值 { "total_11113173785":"523700.00", "key":"total_11113173785", "colspan":"2", "align":"center", "ellipsis":true }, { "total_11113173838":"991100.00", "key":"total_11113173838", "colspan":"2", "align":"center", "ellipsis":true } ] } ]
如下是修改的源码,暂时不支持表格的鼠标移入等事件ui
table-body.vue:33
<!-- ++++++++++++++++ 2018年8月7日16:49:00 合并列单元格 start +++++++++++++++++++++ --> <template v-if="(index+1)==data.length"> <template v-for="(colSpanColumn, colSpanColumnIndex) in colSpanColumns"> <table-tr :row="colSpanColumn" :key="colSpanColumn.key" :prefix-cls="prefixCls" > <td :colspan="colSpanColumn.colspan" :class="alignCls(colSpanColumn, colSpanColumn.tableBody)"> <Cell :natural-index="Number(colSpanColumnIndex+data.length)" :index="Number(colSpanColumnIndex+data.length)" :prefix-cls="prefixCls" :row="colSpanColumn" :key="colSpanColumn.key" :column="colSpanColumn" ></Cell> </td> <template v-for="(colSpanBody, colSpanBodyIndex) in colSpanColumn.tableBody" :class="alignCls(colSpanColumn, colSpanBody)"> <td :colspan="colSpanBody.colspan" :class="alignCls(colSpanBody, colSpanBody)"> <Cell :natural-index="Number(colSpanBodyIndex+data.length)" :index="Number(colSpanBodyIndex+data.length)" :prefix-cls="prefixCls" :row="colSpanBody" :key="colSpanBody.key" :column="colSpanBody" ></Cell> </td> </template> </table-tr> </template> </template> <!-- ++++++++++++++++ 合并列单元格 end +++++++++++++++++++++ -->
// 2019年5月17日16:01:58 整理 colSpanColumns colSpanColumns(newData, oldData){ if(newData.length>0) { let finshData=[]; for (let i in this.columns) { // 2019年5月17日16:07:29 由于目前的数据都只有一条合并列的数据。先写死第0个。后续增长了,再改 this.colSpanColumns[0].tableBody.forEach((item, index)=>{ if(item.key==this.columns[i].key) { finshData.push(item); } }); } this.colSpanColumns[0].tableBody=finshData; } }