elementUI、elementPlus的el-table都支持文字一行展示不全隐藏,悬停展示tooltip。但是UI设计会提出展示2行隐藏的的要求,我们便有这样的需求。项目中el-table往往会进行二次封装,所以下面的代码是在此基础上解决这个问题的。
- if="item.tooltip">
- <el-tooltip
- :content="item.tooltip.contentFun ? item.tooltip.contentFun(scope.row[item.prop]) : scope.row[item.prop]"
- placement="top"
- :hide-after="0"
- :show-after="100"
- :raw-content="item.tooltip.rawContent || false"
- effect="dark">
- <div class="tooltip-content"
- :style="{
- webkitLineClamp: item.tooltip.lines || 1,
- lineClamp: item.tooltip.lines || 1
- }"
- >{{ scope.row[item.prop] || '--' }}div>
- el-tooltip>
- /**
- * {
- * tooltip: { 气泡文字提示
- * lines 展示几行后隐藏 数字类型
- * rawContent 内容是否作为 HTML 字符串处理 Boolean类型
- * contentFun 内容处理函数 Funciton(data){}
- * }
- * }
- */
- columns: {
- type: Array,
- default: () => []
- },
我们通常会props接受columns来生成表格,这里如果列带有tooltip属性,则悬停展示全部文字。tooltip可以是一个Object或者Boolean。
Object支持参数:
- [
- {
- label: 'xxxx',
- prop: 'xxxx',
- fixed: true,
- props: {
- minWidth: '170'
- },
- tooltip: {
- lines: 2,
- rawContent: true,
- contentFun: function (data) {
- const arr = data.split('(')
- return `${arr[0]}
(${arr[1]}` - }
- }
- },
- ]
我这里是需要截取折行,具体使用的时候根据需要去处理内容即可。
后面还想要扩展下如果没有隐藏就无需悬停展示全部,写了以后会更新上来。