1.需求 效果图
如图 需要做成这个样子
对于el-table需要增加new的标识 根据当前行的某个字段判断。如果是普通的el-table很好做直接在每行第一个td的插槽里写逻辑就行了,但是因为这个是selection多选的表格,用插槽在type="selection"里写插槽后就导致多选框没了,单独插槽里写多选框就要重写写多选的逻辑。
后来想到用::before给每一行第一个td增加样式,直接在el-table-column增加样式,像这样:
但是发现el-table-column上获取不到当前行 获取不到row.isRed
3.解决方案:
给el-table上增加:row-class-name=“rowClassName” 动态判断 这里可以获取当前行
4.代码:
<template>
<el-table
ref="multipleTable"
:data="tableData"
:row-class-name="rowClassName"
:header-cell-style="{'text-align':'center'}"
:cell-style="{'text-align':'center'}"
tooltip-effect="dark"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="60">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="200">
</el-table-column>
<el-table-column
label="是否是新消息"
width="200">
<template slot-scope="scope">
{{ scope.row.isRed?'新':'-' }}
</template>
</el-table-column>
<el-table-column
label="日期"
width="200">
<template slot-scope="scope">
{{ scope.row.date }}
</template>
</el-table-column>
<el-table-column
prop="address"
label="地址"
width="200"
show-overflow-tooltip>
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: true
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: false
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: true
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: false
}, {
date: '2016-05-08',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: false
}, {
date: '2016-05-06',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: true
}, {
date: '2016-05-07',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
isRed: false
}],
multipleSelection: []
}
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val
},
rowClassName({ row }) {
if (row.isRed) {
return 'red-style'
} else {
return ''
}
}
}
}
</script>
<style lang="scss">
.red-style {
border: 1px solid red;
background-color: blue;
td:first-child {
position: relative;
&::before {
content: url("./new.png");
position: absolute;
top: 0;
left: 0;
z-index: 99;
}
}
}
</style>