一、关于循环出来的table列合并
经过多方尝试这个方法是有用的
<div v-for="(t, index) in tableList" :key="index">
<md-table
:columns="columns"
:data="t.list"
:span-method=(index)=>"heBingLie(index)"
>
</md-table>
</div>
flitterData(arr,columnIndex ) {
let spanOneArr = []
let concatOne = 0
arr.forEach((item, index) => {
if (index === 0) {
spanOneArr.push(1)
} else {
//name 修改
if (columnIndex===0 && item.xinagMu === arr[index - 1].xinagMu) {
//第一列需合并相同内容的判断条件
spanOneArr[concatOne] += 1
spanOneArr.push(0)
} else {
spanOneArr.push(1)
concatOne = index
}
}
})
return {
one: spanOneArr
}
},
heBingLie({ row, column, rowIndex, columnIndex },index) {
// 需要合并的列
if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2) {
const arr = this.tableList.map(item => {
const _row = this.flitterData(item.list,columnIndex ).one[rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
})
return { ...arr[index] }
}
}
二、el-table表头没有插槽可以用,那就只能用Render了
下面的方法是实现表头popover的方法。在Render里面使用组件记得提前引入。以下代码中使用到了this.$createElement是因为要取组件的ref元素,普通情况下直接用h函数就行。具体原因是,h函数是作用在渲染的时候,而ref是取渲染之后的实例。所以这个时候实例还(不存在)在渲染中,ref是undefined
renderHeader: h => {
return this.$createElement(
'div',
{
style: 'display: flex;justify-content: space-between;align-items: center;'
},
[
this.$createElement('span', ''),
this.$createElement('span', '药品'),
this.$createElement(
Popover,
{
ref: 'popover',
props: {
trigger: 'click'
}
},
[
this.$createElement(Icon, {
slot: 'reference',
props: {
name: 'shezhi-s',
color: '#40a9fe'
},
style: 'cursor: pointer'
}),
this.list.map((i, index) => {
return this.$createElement(Checkbox, {
props: {
value: i.isCheck,
label: i.label,
disabled: i.isDisabled
},
on: {
change: value => {
i.isCheck = value
this.handleClick(i, value)
this.$refs.popover.doClose()
}
}
})
})
]
)
]
)
},
三、el-tabke的selectable
selectable用于手动对table的checkBox进行手动勾选
{
type: 'selection',
selectable: row => {
return !row.yiShengCBZ
}
},
网友评论