element-table-column表格内容展开收起,自动展示三行

需求:element-table-column表格内容展示三行,点击展开所有内容,点击收起展示三行+展开按钮,鼠标悬停之后展示详情

参考文章:https://segmentfault.com/a/1190000041558177

先准备一个计算字符数的函数

// 计算字符数
byteCount(str) {
  const count = (str && str.replace(/[^\x00-\xff]/g, "xx").length) || 0;
  return count;
},

对从接口中获取到的数据进行处理,拿到list之后for循环遍历,这里字符数大于270就显示展开按钮
(这个数字需要自己慢慢调试),添加一个新的属性spread控制是否展开,注意要在加上之后再传给前端tabledata进行渲染。

async operateLogList() {
      try {
        var data ={
        referenceId: this.$route.query.row.id,
        pageNum: this.pageNum, //当前页
        pageSize: this.pageSize//查询个数
        }
        const res = await operateLogList(data);
        if (res.returnCode == "00000") {
          var list=res.data.rows;
          console.log(list,'list');
          for (let i=0;i<list.length;i++){
            if(this.byteCount(list[i].opreateDetail)>270){
              list[i].spread=false;
              console.log(123456789)
          }
        }
          this.tableData=list;
          console.log(this.tableData,666)
          this.total=res.data.total;//总数
        }else{
          this.$message({
            message: res.returnMessage,
            type: 'error'
          })
        }
      } catch (err) {
        this.$message({
            message: "服务异常, 请稍后重试!!!",
            type: 'error'
          })
      }
    },

展开收起标签的写法:

注:1.这里使用了template插槽

<template slot-scope="scope">
    <div class="spread-box" :style="{'-webkit-line-clamp':scope.row.spread ? '':3}">
        {{scope.row.opreateDetail}}
    </div>
              
    <div v-show="scope.row.spread==false" @click="spreadText(scope.row)" class="spread-btn">
        <el-button type="text">展开<el-icon class="el-icon-arrow-down"></el-icon></el-button>
    </div>
    <div v-show="scope.row.spread==true" @click="spreadText(scope.row)" class="spread-btn">
        <el-button type="text">收起<el-icon class="el-icon-arrow-up"></el-icon></el-button>
    </div>
</template>  

理解slot-scope="scope"属性

(1)slot-scope="scope"本质上就是一个插槽,简单说就是先在 el-table 中占一个位置,然后再等待操作往里面填值即可;

(2)scope.row.operateDetail语句中row 是 scope 的内置属性,可以理解为给 label="操作详情" 列中的每个 row 中添加 tableData 数组所有对象中的 operateDetail属性;

(3)此时的所占位置的 scope 并不是代表着 table,可以将scope.row理解为一个整体,从而来存放 tableData 所有数组对象中的 address 属性值;

总结:其中的slot-scope的一个作用就是获取当前所在元素的数据,令slot-scope值为scope,那么由scope.row就可以得到数据了。

element-ui中<template slot-scope="scope">的用法学习这两篇文章:

https://blog.csdn.net/Shaojun_jita/article/details/107390442

https://blog.csdn.net/weixin_43405300/article/details/124655802

2.需要折叠的文字标签写法
  样式逻辑主要就是控制-webkit-line-clamp的行数,设置数字就是显示对应行数,不设置就是全部展开。

<div class="spread-box" :style="{'-webkit-line-clamp':scope.row.spread ? '':3}">
    {{scope.row.opreateDetail}}
</div>

3.展开收起逻辑对应的方法

spreadText(obj){
    obj.spread=!obj.spread;
}

4.对应的css

.spread-box{
    overflow: hidden;
    text-overflow: ellipsis;
    display:-webkit-box;
    -webkit-box-orient: vertical
  }
  .spread-btn{
    text-align: center;
    vertical-align: middle;
    color:#5995ef;
    // font-size: 14px;
  }

5.鼠标悬停展示详情

利用el-tooltip组件:这里content是固定的,展示提示的内容。

<el-tooltip :content="scope.row.opreateDetail" placement="top">
    <div class="spread-box" :style="{'-webkit-line-clamp':scope.row.spread ? '':3}">
        {{scope.row.opreateDetail}}
    </div>
</el-tooltip>

注意:设置el-tooltip宽度问题,新写一个<style>,修改tooltip样式即可,但是注意不要写在同页面的scoped中可能会不生效!!


<style>
  .el-tooltip__popper {
    max-width: 400px;
    line-height: 180%;
  }
</style>

完整代码:

<el-table-column  prop="opreateDetail" label="操作详情">
    <template slot-scope="scope">
        <el-tooltip :content="scope.row.opreateDetail" placement="top">
            <div class="spread-box" :style="{'-webkit-line-clamp':scope.row.spread ? '':3}">
                {{scope.row.opreateDetail}}
            </div>
        </el-tooltip>
        <div v-show="scope.row.spread==false" @click="spreadText(scope.row)" class="spread-btn">
            <el-button type="text">展开<el-icon class="el-icon-arrow-down"></el-icon></el-button>
        </div>
        <div v-show="scope.row.spread==true" @click="spreadText(scope.row)" class="spread-btn">
            <el-button type="text">收起<el-icon class="el-icon-arrow-up"></el-icon></el-button>
        </div>
    </template>  
</el-table-column>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
element-plus-table-dragable是一个基于Vue.jsElement Plus实现的表格拖拽排序和列宽度调整的组件,用户可以使用鼠标拖拽表格的列头来改变列的宽度,也可以使用鼠标拖拽表格的行来实现表格行的排序。 该组件的开发灵感来源于Element Plus组件库的el-table组件,但为了提高用户的使用体验和便捷性,element-plus-table-dragable通过添加拖拽排序和列宽度调整功能,使用户能够更加自由地操作表格。 具体来说,该组件的使用方法非常简单,只需在Vue的template中引入element-plus-table-dragable并设置相关的props即可。例如,下面的代码片段演示如何生成一个具有两行三列的表格并启用拖拽排序和列宽度调整功能: <element-plus-table-dragable :data="tableData" :dragSort="true" :resize="true"> <el-table-column label="姓名" prop="name"></el-table-column> <el-table-column label="年龄" prop="age"></el-table-column> <el-table-column label="地址" prop="address"></el-table-column> </element-plus-table-dragable> 上述代码中,tableData是表格要显示的数据,dragSort和resize分别用于启用拖拽排序和列宽度调整功能。此外,用户还可以根据自己的需求来选择是否用slot来自定义表格内容。 总之,element-plus-table-dragable组件为Vue.jsElement Plus用户提供了更多实用的表格操作功能,通过拖拽排序和列宽度调整,用户可以更高效地管理和处理表格数据,从而提高工作效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值