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

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

时间:2024-12-04 16:57:56浏览次数:6  
标签:自定义 rowIndex age Element columnIndex Plus id row

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

“ 知行合一 ” —— 王阳明

在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列。

 接下来,我们将探讨在实际开发中如何应对这一挑战。

本文案例采用的技术:

名称 版本

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',

    nam

e: 'Tom2',

    age: 30,

  },

  {

    id: '3',

    name: 'Tom3',

    age: 40,

  },

  // 新增一条自定义的数据

  {

    confirmFlag: true,

标签:自定义,rowIndex,age,Element,columnIndex,Plus,id,row
From: https://blog.csdn.net/weixin_55010563/article/details/144178599

相关文章

  • plus.webview.create( url, id, styles, extras )参数及说明
    plus.webview.create("xxx.html",//url:String类型,可选,新窗口加载的HTML页面地址.新打开Webview窗口要加载的HTML页面地址,可支持本地地址和网络地址."xxx",//id:String类型,可选,新窗口的标识.窗口标识可用于在其它页面中通过getWebviewById来查找指定的窗口,为了保持窗口......
  • 使用自定义 JsonConverter 解决 long 类型在前端的精度问题
    问题Javascript的number类型存在精度限制,浏览器反序列化JSON时,无法完整保留long类型的精度。在JSON序列化时将long转换为string进行传递就可以保留精度。在ASP.NETCore中,可以创建一个自定义JsonConverter来达到这一目的。实现long和string转换的JsonC......
  • 饿了么面试官:实现一下 Element-UI 官网的主题切换动画!
    · 实现基本效果首先我们起一个html文件,写一个按钮,以及简单的背景颜色切换,来模拟主题的切换可以看到实现了最简单的主题切换效果document.startViewTransition想要实现过渡效果,需要先用到一个JavaScript的原生方法:document.startViewTransition这个方法是用来......
  • Element Plus组件v-loading在el-dialog组件上使用无效
    前情公司有经常需要做一些后台管理页面,我们选择了ElementPlus,它是基于Vue3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个Vue3UI框架|ElementPlus,对于请求服务数据交互提供一个loading加载中效果是一个提高用户体验的好方法。......
  • #渗透测试#SRC漏洞挖掘#红蓝攻防#黑客工具之Burp Suite进阶-自定义UI组件教程
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 如需获取工具,评论区留言即可!!!目录一、BurpSuite自定义UI......
  • Vue3.5新版本特性一览-数组操作10倍性能提升+响应式属性解构+自定义组件优化+ssr水合
    Vue团队欣喜地宣布,Vue3.5(代号TengenToppaGurrenLagann)于9月初发布!本次小版本更新并未引入任何破坏性更改,带来了诸多内部优化以及新功能。在这篇文章中,我们将重点介绍一些新特性和改进。如需了解全部更新内容,请参阅GitHub上的完整更新日志。最近突然想整理一些前......
  • java-自定义日志注解
    ......
  • 【Thinkphp6】使用框架内置中间件AllowCrossDomain允许跨域请求,当请求header中携带自
    【问题描述】使用框架内置中间件AllowCrossDomain允许跨域请求,当请求header中携带自定义参数时,跨域请求报错,不携带自定义参数时,可正常访问【解决方案】方案一:修改框架内置中间件修改框架内置中间件 AllowCrossDomain,将$header属性的 Access-Control-Allow-Headers ......
  • 你知道什么是html5plus吗?
    HTML5Plus(简称H5+)是一个扩展的HTML5规范,由DCloud(数字天堂)推出,主要用于跨平台移动应用开发。它在标准HTML5的基础上增加了大量的JavaScriptAPI,使得开发者可以使用JavaScript调用原生设备能力,例如:访问设备硬件:地理位置、摄像头、麦克风、加速度传感器、陀螺仪等......
  • 在普通网页中如何调用html5+的plus对象?
    在普通网页中无法直接调用HTML5+的plus对象。plus对象是5+Runtime提供的,只能在5+App或uni-app项目中使用。普通网页运行在浏览器环境中,不具备5+Runtime的能力。如果你想在普通网页中使用类似plus对象提供的原生能力,你需要考虑以下几种方案:使用浏览器提供的......