Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接:

https://element-plus.org/zh-CN/component/form.html

一、el-table表格行展开关闭箭头替换成加减号

注:Vue3在样式中修改箭头图标无效,可能我设置不对,欢迎各位来交流指导

转变思路:隐藏箭头,添加一行显示展开关闭所需图标

1、隐藏箭头

复制代码
.el-table__expand-icon .el-icon svg {
  display: none;
}

此时只是箭头不可见,但是箭头的占位还在,显得很空

2、去掉箭头空白,添加替换箭头的图标列

在显示展开内容的列标签中设置width="1"

复制代码
<el-table-column type="expand" width="1" >
  <template #default="props">
     <div class="tableItem" :style="{ width: 'calc(100%)'}" >
       <el-table :data="props.row.family">
         <el-table-column type="index" width="70" label="排名" prop="name" align="center"/>
         <el-table-column prop="projectNum" label="项目编号" align="left"/>
          <el-table-column prop="projectName" label="项目名称"  align="left"/>
       </el-table>
     </div>
  </template>
</el-table-column>

<el-table-column width="40" align="center" >
   <template #default="scope" >
      <el-icon :size="15" v-if="scope.row.expanded" color="#000000">
         <Minus/>
      </el-icon>
      <el-icon :size="15" v-else color="#000000">
          <Plus/>
      </el-icon>
   </template>
 </el-table-column>

二、点击整行展开数据

表格数据:

复制代码
const tableData = ref([
  {projectNum:'YCA20241120001',
    id:'5862458213',
    projectName:'项目名称项目名称项目名称',
    month: '2024-10',
    expanded:false,
    family: [
      {
        projectNum:'YCA20241120001',
        projectName:'项目名称项目名称项目名称',
      },{
        projectNum:'YCA20241120001',
        projectName:'项目名称项目名称项目名称',
      }
    ]
  },
  {
    id:'5862456248',
    projectNum:'YCA20241120001',
    projectName:'项目名称项目名称项目名称',
    month: '2024-11',
    expanded:false,
  }
])

使用到el-table的三个属性,含义请看element文档

row-key="id"

:expand-row-keys="expands"

@row-click="clickRowHandle"

复制代码
<el-table :data="tableData" 
     v-loading="state.loading"  
     @selection-change="selectionChangHandle"
     @sort-change="sortChangeHandle"
     :border="false" 
     style="width: 100%" 
     row-key="id"
     :expand-row-keys="expands"
      @row-click="clickRowHandle">
</el-table>

逻辑代码:

复制代码
const expands = ref([])
//点击事件
const clickRowHandle = (row: any) => {
 row.expanded=!row.expanded
 if (expands.value.includes(row.id)) {
   expands.value = expands.value.filter(val => val !== row.id)
 }else {
   expands.value.push(row.id)
 }
}

三、外部表格序号和排名序号对齐

设置表格el-table-column的padding-left和magin-left是无效的

解决方法:

:cell-style="productiontableStyle"

:headerCellStyle="productiontableStyle"

复制代码
<el-table-column type="expand" width="1" >
  <template #default="props">
     <div class="tableItem" :style="{ width: 'calc(100%)'}" >
       <el-table :data="props.row.family" :cell-style="productiontableStyle" 
                :headerCellStyle="productiontableStyle">
         <el-table-column type="index" width="70" label="排名" prop="name" align="center"/>
         <el-table-column prop="projectNum" label="项目编号" align="left"/>
          <el-table-column prop="projectName" label="项目名称"  align="left"/>
       </el-table>
     </div>
  </template>
</el-table-column>

逻辑代码:

复制代码
const productiontableStyle=(column:any) =>{
    if(column.columnIndex === 0) {
        return {'padding-left':'15px'}
    }
}
相关推荐
Mike_jia12 分钟前
DBSyncer:开源数据同步中间件全景实战指南
前端
烛阴25 分钟前
从`new`关键字开始:精通C#类与对象
前端·c#
天若有情67330 分钟前
笑喷!乌鸦哥版demo函数掀桌怒怼主函数:难办?那就别办了!
java·前端·servlet
记得记得就15130 分钟前
【Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装】
前端·nginx·http
天蓝色的鱼鱼31 分钟前
mescroll老用户亲测z-paging:这些功能让我果断切换!
前端·uni-app
JarvanMo36 分钟前
适用于 iOS 开发者的 Flutter 3.38:Xcode 与 Swift 集成新技巧
前端
北极糊的狐1 小时前
Vue 中 vue-awesome-swiper的使用笔记(适配 Vue2/Vue3)
前端·javascript·vue.js
anyup1 小时前
🔥100+ 天,已全面支持鸿蒙!uView Pro 近期更新盘点及未来计划
前端·uni-app·harmonyos
凯小默1 小时前
vue3-10-计算属性以及get跟set
vue3
2***57421 小时前
前端数据可视化应用
前端·信息可视化