element el-table(表格/树形表格)添加、编辑、合并单元格

10 篇文章 0 订阅
该文章详细介绍了如何在基于Vue.js的el-table组件中实现添加空行、双击编辑单元格并自动聚焦以及单元格的合并功能。通过设置表格属性和使用自定义方法,可以实现动态添加数据行、编辑表格内容以及对表格进行滚动定位和编辑操作。同时,文章提供了合并单元格的示例代码,以适应不同级别的行展示需求。
摘要由CSDN通过智能技术生成


1. vue el-table

给表格设置ref,给行设置高度:row-style="{height: '60px'}",用于滚动
绑定key用于刷新表格

<el-table border ref="diffeDataTable" :data="TreeList" :row-style="{height: '60px'}" highlight-current-row row-key="id" :tree-props="{children: 'children'}" :span-method="arraySpanMethod" default-expand-all sorable="custom"  :key="MathRandom" @cell-dblclick="doubleClick">
  <el-table-column type="index" label="序号" width="55"> </el-table-column>
  <el-table-column prop="name" label="名称" min-width="300px" class-name="operate_name">
    <template slot-scope="scope">
      <el-input v-if="!!scope.row.addNew" :id="scope.row.id" :size="elTableTreeFormSize" v-model="scope.row.name"></el-input>
      <span v-else>{{ scope.row.name }}</span>
    </template>
  </el-table-column>
  <el-table-column prop="remark" label="备注" width="300">
    <template slot-scope="scope">
      <el-input v-if="!!scope.row.addNew" :size="elTableTreeFormSize" v-model="scope.row.remark"></el-input>
      <el-input v-else-if="!scope.row.addNew && scope.row[scope.column.property + 'Show']" :ref="scope.column.property" :id="scope.row.id" :size="elTableTreeFormSize" v-model="scope.row.remark" @blur="subEditForm(scope.row, scope.column)"></el-input>
      <span v-else>{{ scope.row.remark }}</span>
    </template>
  </el-table-column>
  <el-table-column fixed="right" label="操作" width="200" class-name="operate-button">
    <template slot-scope="scope" v-if="!!scope.row.parentId">
      <Buttons v-if="!!scope.row.addNew" type="primary" @parentClick="subNewRow(scope.row)">
        <span slot="title">保存</span>
      </Buttons>
      <Buttons v-else-if="scope.row.type ===0" type="primary" @parentClick="addEmptyRow(scope.row,scope.$index)">
        <span slot="title">新增</span>
      </Buttons>
    </template>
  </el-table-column>
</el-table>

2. 添加空行

给树形子级添加一行,滚动到添加行并聚焦

// 添加空行
addEmptyRow(row, index) {
  if (!row.children) {
    row.children = []
  }
  let obj = {
    id: "id-" + row.id,
    name: "",
    remark: "",
    addNew: true,
  }
  row.children.push(obj)
  // 定位/聚焦到新增行
  this.$nextTick(() => {
    this.$refs.diffeDataTable.bodyWrapper.scrollTop = (index + row.children.length - 2) * 60;
    $("#" + obj.id).focus()
  })
}

3. 双击编辑并聚焦

// 编辑-双击单元格触发事件
doubleClick(row, column) {
  this.$set(row, column.property + 'Show', true)
  // 聚焦方法一:根据ref聚焦
  // 聚焦事件需要更新表格
  this.updateTable()
  this.$nextTick(() => {
    this.$refs[column.property] && this.$refs[column.property].focus()
  })
  // 聚焦方法二:根据id聚焦
  this.$nextTick(() => {
    $("#" + row.id).focus()
  })
},
// 编辑-输入框失焦事件
subEditForm(row, column) {
  row[column.property + 'Show'] = false
  // 请求后台,根据后端要求填写参数
},
// 更新表格
updateTable() {
  this.MathRandom = Math.random()
},

4. 合并单元格

// ------------------ 合并单元格 ------------------
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
  // 一级
  if (row.level == 0) {
    if (columnIndex === 1) {
      return [1, 6];
    } else if (columnIndex === 0) {
      return [0, 0];
    } else if (columnIndex === 2) {
      return [0, 0];
    } else if (columnIndex === 3) {
      return [0, 0];
    }
  }
  // 二级
  if (row.level === 1) {
    if (columnIndex === 1) {
      return [1, 5];
    } else if (columnIndex === 0) {
      return [0, 0];
    } else if (columnIndex === 2) {
      return [0, 0];
    } else if (columnIndex === 3) {
      return [0, 0];
    }
  }
},

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui的表格el-table本身并不支持动态合并单元格(行和列),但可以通过自定义表格的slot-scope和span-method来实现动态合并单元格的功能。首先,我们需要在表格定义时添加span-method属性,并指定一个方法来计算单元格合并行数和列数。例如: ```html <el-table :data="tableData" :span-method="mergeCells"> ... </el-table> ``` 然后,在methods中定义mergeCells方法来计算单元格合并行数和列数。该方法有四个参数分别是({row, column, rowIndex, columnIndex}),我们可以根据需要通过判断行索引和列索引来返回合适的行数和列数,例如合并第一行的两列可以这样实现: ```javascript methods: { mergeCells({row, column, rowIndex, columnIndex}) { if (rowIndex === 0 && columnIndex < 2) { return { rowspan: 1, colspan: 2 }; } } } ``` 这样就实现了动态合并第一行的两个单元格。如果想要合并其他行或列,可以根据需要进行判断和返回。 给表头添加斜线可以通过自定义表头的样式来实现。可以通过CSS的`::before`或`::after`伪元素来添加斜线样式。例如,给第一列的表头添加斜线可以这样实现: ```html <el-table ...> <el-table-column label="姓名"> <template slot="header" slot-scope="scope"> <div class="header-wrapper"> <div class="header-content"> <span>{{scope.column.label}}</span> </div> </div> </template> </el-table-column> ... </el-table> ``` 然后在样式中定义斜线效果: ```css <style> .header-content::before { content: ""; display: block; border-bottom: 1px solid #333; transform: skew(-45deg); width: 80%; margin-left: 10%; } </style> ``` 这样就实现了给第一列的表头添加斜线的效果。可以根据需要调整斜线的样式和位置来达到期望的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值