首页 > 其他分享 >Element-Plus表格:Table自定义合并行数据的最佳实践

Element-Plus表格:Table自定义合并行数据的最佳实践

时间:2024-12-01 19:33:26浏览次数:6  
标签:知识点 自定义 rowIndex Element columnIndex Plus id row

“ 知行合一 ” —— 王阳明

在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列。
接下来,我们将探讨在实际开发中如何应对这一挑战。

本文案例采用的技术:

名称 版本
Vue3 ^3.5.12
element-plus ^2.8.8

知识点

我们先来复习下2个知识点,来自element-plus文档 table

1、自定义表头

通过设置 slot 来自定义表头。(只贴出重点代码)

<el-table :data="filterTableData" style="width: 100%">
    <el-table-column label="Date" prop="date" />
    <el-table-column label="Name" prop="name" />
    <el-table-column align="right">
      <template #header>
        <el-input v-model="search" size="small" placeholder="Type to search" />
      </template>
      <template #default="scope">
        <el-button size="small" @click="handleEdit(scope.$index, scope.row)">
          Edit
        </el-button>
        <el-button
          size="small"
          type="danger"
          @click="handleDelete(scope.$index, scope.row)"
        >
          Delete
        </el-button>
      </template>
    </el-table-column>
  </el-table>

其中可以看出,通过 <template #header> 自定义表头,<template #default="scope"> 自定义内容。

2、合并行或列

多行或多列共用一个数据时,可以合并行或列。
通过给 table 传入span-method方法可以实现合并行或列, 方法的参数是一个对象,里面包含当前行 row、当前列 column、当前行号 rowIndex、当前列号 columnIndex 四个属性。 该函数可以返回一个包含两个元素的数组,第一个元素代表 rowspan,第二个元素代表 colspan。 也可以返回一个键名为 rowspan 和 colspan 的对象。

 <el-table
      :data="tableData"
      :span-method="arraySpanMethod"
      border
      style="width: 100%"
    >
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="amount1" sortable label="Amount 1" />
      <el-table-column prop="amount2" sortable label="Amount 2" />
      <el-table-column prop="amount3" sortable label="Amount 3" />
    </el-table>

<script lang="ts" setup>
// 省略其他代码...
const arraySpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  if (rowIndex % 2 === 0) {
    if (columnIndex === 0) {
      return [1, 2]
    } else if (columnIndex === 1) {
      return [0, 0]
    }
  }
}
</script>

实战开发

假设一个需求:在最后一行新增一条自定义的行数据。
结合上述2个知识点,我们可以进行改进:

<template>
  <el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 500px">
    <el-table-column prop="id" label="ID" width="100">
      <template #default="scope">
        <span v-if="scope.$index === tableData.length - 1">
          <span>是否确认信息:</span>
          <el-radio-group v-model="scope.row.confirmFlag">
            <el-radio :value="true">确认</el-radio>
            <el-radio :value="false">未确认</el-radio>
          </el-radio-group>
        </span>
        <template v-else>{{ scope.row.id }}</template>
      </template>
    </el-table-column>
    <el-table-column prop="name" label="姓名" />
    <el-table-column prop="age" label="年龄" />
  </el-table>
</template>

<script setup lang="ts">
import type { TableColumnCtx } from 'element-plus'

interface User {
  id?: string
  name?: string
  age?: number
  confirmFlag?: boolean
}

interface SpanMethodProps {
  row: User
  column: TableColumnCtx<User>
  rowIndex: number
  columnIndex: number
}

const arraySpanMethod = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
   // 最后一行
  if (rowIndex === tableData.length - 1) {
  // [1,3] 占一行三列
    return [1, 3]
  }
}

const tableData: User[] = [
  {
    id: '1',
    name: 'Tom1',
    age: 20,
  },
  {
    id: '2',
    name: 'Tom2',
    age: 30,
  },
  {
    id: '3',
    name: 'Tom3',
    age: 40,
  },
  // 新增一条自定义的数据
  {
    confirmFlag: true,
  },
]
</script>

<style scoped></style>

结语

根据文档中所提供的2个知识点,可以结合进行其他自定义操作。
还有其他好玩的操作,小伙伴可以留言哈~

标签:知识点,自定义,rowIndex,Element,columnIndex,Plus,id,row
From: https://www.cnblogs.com/codemz/p/18580208

相关文章

  • 通过自定义feignclient 的LoadBalancerFeignClient实现灵活的负载均衡策略
    通过自定义feignclient的LoadBalancerFeignClient或IRule能实现完全自定义的负载均衡策略,本文主要是通过实现自定义的LoadBalancerFeignClient而达到自定义的负载均衡策略示例代码实现如下:packagecn.zuowenjun.demo;importcom.netflix.loadbalancer.Server;importfeign......
  • ElementUI上传多图的操作
    一、使用ElementUI上传多图1.在项目中引入ElementUI的相关组件<el-form-itemlabel="详细图片"><!--<el-upload:action="api_url+'/api/upload.php'"list-type="picture-card&quo......
  • getelementbyId和queryselect平时经常使用哪一个?说说你的看法
    在前端开发中,getElementById和querySelector都是用于选择HTML元素的常用方法,但它们各有优缺点,适用场景略有不同。我通常会根据具体情况选择更合适的方法:getElementById:优点:速度最快:因为它直接通过ID查找,浏览器可以进行优化,使其速度非常快。代码简洁:语法简单,易......
  • 从 0 到 1 制作自定义镜像并用于训练(MPI+CPU/GPU)
    本章节介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是MPI,训练使用的资源是CPU或GPU。说明:本实践教程仅适用于新版训练作业。场景描述本示例使用Linuxx86_64架构的主机,操作系统ubuntu-18.04,通过编写Dockerfile文件制作自定义镜像。......
  • 从 0 到 1 制作自定义镜像并用于训练(Pytorch+CPU/GPU)
    本章节介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是PyTorch,训练使用的资源是CPU或GPU。说明:本实践教程仅适用于新版训练作业。场景描述本示例使用Linuxx86_64架构的主机,操作系统ubuntu-18.04,通过编写Dockerfile文件制作自定义镜像......
  • 通过代码实现log4net自定义配置
    大家在使用log4net的时候,常规的用法都是在配置文件里面进行设置。但是配置文件里面的配置项非常多,不利于记忆,所以说我们希望他能直接在代码中设置。于是,我写了个自定义日志配置的方法,核心的配置对象为RollingFileAppender,只需要对他进行设置就可以了。下面给大家展示下,基于......
  • .NET 项目自定义 MSBuild Task
    ......
  • 使用Mybatis-Plus时遇到的报错问题及解决方案
    创建Maven项目后,一个个手动添加spring-boot和mybatis-plus依赖冲突问题解决方案:找一个现成的pom.xml文件替换后重新加载(以下提供java8,对应的spring-boot,mybatis-plus依赖)<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"......
  • vue3实现自定义导航菜单
    一、创建项目    1.打开HBuilderX图1    2.新建一个空项目        文件->新建->项目->uni-app        填写项目名称:vue3demo        选择项目存放目录:D:/HBuilderProjects        一定要注意vue的版本,当前选择的版......
  • easyexcel导出头部样式设置,多个tab导出,头部自定义RGB颜色
    alibabaeasyexcel版本3.0.5,poi版本4.1.2,导出头部样式设置,多个tab导出,头部自定义RGB颜色 效果,头部三行,三个tab  下面贴出代码:packagecom.alpha.erp.dto.accounts;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.metadata.data.WriteCellDa......