在用公共组件,总会遇到需求不足,自己要新加功能的时候,比如在封装elementPlus的table组件,就遇到了,当时是一个列表当列表行满足某一条件的时候,那一行需要高亮显示,如果只是el-table,这个问题很好解决,但是我们是对el-table进行了二次封装,但是并没有考虑这个需求,所以现在只能对公共组件进行改造了,先看最后效果:
实现过程:
我们封装的子组件:myTable
<el-table
ref="tableRef"
:data="tableData"
:border="border"
:stripe="stripe"
:row-key="getRowKeys"
@selection-change="selectionChange"
@row-click="rowClick"
:highlight-current-row="multiple"
:row-class-name="highlightCheck"
:tree-props="{ children: childrenName }"
>
在el-table原有的row-class-name的属性上重新赋一个方法;
在js代码块进行声明
interface TableOptions {
highlightCheck?: ({ row }: any) => string; //高亮行方法 ==> 非必传(默认为 )
}
在css写好高亮行对应的样式
.danger-row {
--el-table-tr-bg-color: var(--el-color-danger-light-9);
}
父组件中,把方法传过去:
<my-table
:stripe="false"
:highlight-check="highlightCheck"
>
ps:斑马纹对这个样式会有影响,如果有去掉。
声明highlightCheck方法:
const highlightCheck = ({ row }: { row: Contract<RzContractExtend> }) =>
new Date(row.endDate).getTime() < new Date("2023-03-24").getTime() ? "danger-row" : "";
欧克,完成。