[element-ui]el-table 当单元格 hover 进入时有文字提示效果

背景:

每个宝贝会有是否禁用标识,如果禁用,则不能禁止勾选,鼠标划过此宝贝时会悬浮提示文案。

简单的做法是在宝贝标题上用title去判断展示文案,比如

<p :title="!scope.row.accessAllowed?scope.row.reason: ''">{{ scope.row.title }}</p>

但是产品不同意,觉得这样不够醒目!!!要求在鼠标经过此行时就出现提示文案。哎。写吧。

效果:
实现方案:

在table上绑定事件

<el-table :data="tableData"
    :max-height="tableHeight" style="width:100%"
    v-loading="loading"
    highlight-current-row
    @cell-mouse-enter="handleMouseEnter"
    @cell-mouse-leave="handleMouseLeave"
    @sort-change="sortChange"></el-table>
js写法:
handleMouseEnter(row, column, cell, event) {
    if(!row.accessAllowed&&row.reason) {
        const { id } = row
        const tooltipDom = document.createElement('div')
        tooltipDom.style.cssText = `
            display: inline-block;
            max-width: 400px;
            max-height: 400px;
            position: absolute;
            top: ${event.clientY + 5}px;
            left: ${event.clientX}px;
            padding:5px 10px;
            overflow: auto;
            font-size: 12px;
            color: #595959;
            background: #fff;
            border-radius: 5px;
            z-index: 19999;
            box-shadow: 0 4px 12px 1px #ccc;    
        `    
        tooltipDom.innerHTML = row.reason
        tooltipDom.setAttribute('id', `tooltip-${id}`)
        document.body.appendChild(tooltipDom)
    }
},
handleMouseLeave(row, column, cell, event) {
    const { id } = row
    const tooltipDomLeave = document.querySelectorAll(`#tooltip-${id}`)
    if (tooltipDomLeave.length) {
        tooltipDomLeave.forEach(dom => {
            document.body.removeChild(dom)
        })
    } 
},