谈谈如何优雅地封装 el-table

news2024/12/26 11:25:58

效果

像这样的表格我们可以这样划分一下区域:

  • 1区域的渲染是通过取反插槽的条件 
  • 2区域的渲染是写在 slot 插槽的内部的,直接显示行数据
  • 3区域的渲染是通过具名插槽 bind 渲染

直接上代码:

子组件:

<template>
  <el-table v-loading="loading" border stripe :data="props.data">
    <template v-for="column in props.columns" :key="column.id">
      <el-table-column
        :label="column.label"
        :align="column.align"
        :type="column.type"
        :width="column.width"
        :prop="column.prop"
      >
        <template v-if="column.type !== 'index'" #default="scope">
          <slot :name="`default.${column.prop}`" v-bind="scope">
            {{ scope.row[column.prop] }}
          </slot>
        </template>
      </el-table-column>
    </template>
  </el-table>
</template>

<script lang="ts" setup>
interface TablePropsItem {
  id: number;
  label: string;
  prop: string;
  width: string;
  align: 'left' | 'center' | 'right';
  type: 'default' | 'index' | 'selection' | 'expand';
  options?: any[];
}

interface TableProps {
  columns: TablePropsItem[];
  data: any[];
  loading: boolean;
}

const props = defineProps<TableProps>();
</script>

父组件:

    <CustomTable
      :loading="tableLoading"
      :data="tableData"
      :columns="tableColumns"
    >
      <!-- 是否通过 -->
      <template #default.status="{ row }">
        <el-tag :type="getStatusTagType(row.status)">
          {{ getStatusLabel(row.status) }}
        </el-tag>
      </template>
      <!-- 操作 -->
      <template #default.operate="{ row }">
        <el-button
          :disabled="disabledBtnStatus(row)"
          size="small"
          @click="handleEmailSend(true)"
        >
          批准
        </el-button>
        <el-button
          :disabled="disabledBtnStatus(row)"
          size="small"
          type="danger"
          @click="handleEmailSend(false)"
        >
          拒绝
        </el-button>
      </template>
    </CustomTable>
const tableColumns = [
  { id: 0, type: 'index', align: 'center', width: '55' },
  { id: 1, label: '姓名', prop: 'name' },
  { id: 2, label: '学号', prop: 'studentId' },
  { id: 3, label: '邮箱', prop: 'email' },
  { id: 4, label: '专业', prop: 'profession' },
  { id: 5, label: '意愿部门', prop: 'department' },
  { id: 6, label: '自我介绍', prop: 'introduction', width: '200' },
  { id: 7, label: '是否通过', prop: 'status', type: 'tag' },
  { id: 8, label: '操作', prop: 'operate', width: '180' }
];


// 注意观察
// 1. 子组件的 `default.${column.prop}`
// 2. 父组件的 #default.operate="{ row }"
// 3. 数据的 prop 的属性值

就这么简单!其他功能自行拓展即可,欢迎三连,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么要用分布式锁

单应用中,如果要确保多线程修改同一个资源的安全性 加synchronized就可以了 但是性能不高 而mybatis-plus的乐观锁就可以很好的解决这类问题 但是这样的锁机制,只在单应用中有效 试想,在分布式下,有没有可能出现多个应用中的线程同时去修改同一个数据资源的并发问题 例如A …

Golang | Leetcode Golang题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; func oddEvenList(head *ListNode) *ListNode {if head nil {return head}evenHead : head.Nextodd : headeven : evenHeadfor even ! nil && even.Next ! nil {odd.Next even.Nextodd odd.Nexteven.Next odd.Nexteven even.N…

65 生成器函数设计要点

包含 yield 语句的函数可以用来创建生成器对象&#xff0c;这样的函数也称为生成器函数。yield 语句与 return 语句的作用相似&#xff0c;都是用来从函数中返回值。return 语句一旦执行会立刻结束函数的运行&#xff0c;而每次执行到 yield 语句返回一个值之后会暂停或挂起后面…

无人机无线电监测设备技术分析

随着无人机技术的飞速发展&#xff0c;其在民用、军事、科研及娱乐等领域的广泛应用&#xff0c;对无线电频谱资源的有效管理和监测提出了更高要求。无人机无线电监测设备作为保障空域安全、维护无线电秩序的重要工具&#xff0c;集成了高精度定位、频谱扫描、信号分析、数据处…

stm32应用、项目

主要记录实际使用中的一些注意点。 1.LCD1602 电路图&#xff1a; 看手册&#xff1a;电源和背光可以使用5v或者3.3v&#xff0c;数据和控制引脚直接和单片机引脚连接即可。 单片机型号&#xff1a;stm32c031c6t6 可以直接使用推完输出连接D0--D7,RS,EN,RW引脚&#xff0c;3…

大数据面试SQL(二):每天最高峰同时直播人数

文章目录 每天最高峰同时直播人数 一、题目 二、分析 三、SQL实战 四、样例数据参考 每天最高峰同时直播人数 一、题目 有如下数据记录直播平台主播上播及下播时间&#xff0c;根据该数据计算出平台当天最高峰同时直播人数。 这里用主播名称做统计&#xff0c;前提是主…

Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现

用数据表格table展示系统数据&#xff0c;是LayUI的基本功能&#xff0c;编码十分简单&#xff0c;就是通过table.render()渲染&#xff0c;把属性配置好就OK了&#xff0c;十分方便&#xff0c;功能也十分强大。 不过&#xff0c;在实现时&#xff0c;把table的有个功能却理解…

WPF MVVM实现TreeView层级显示

最近在写一个小工具的时候&#xff0c;遇到TreeView的层级显示&#xff0c;刚好我又用了MVVM模式&#xff0c;所以这里做个总结。 以前我是直接绑定XML数据到TreeView的&#xff0c;使用的XmlDataProvider&#xff0c;这次的数据是直接来自数据库的。 用到的都是Hierarchical…

Element学习(入门)(1)

1、Element官网&#xff1a;https://element.eleme.cn/#/zh-CN 2、来源与用处 3、Element的快速入门 &#xff08;1&#xff09; &#xff08;2&#xff09;在入口文件&#xff08;main.js&#xff09;中引入 &#xff08;3&#xff09; 4、快捷键ctrlc&#xff0c;在当前的项目…

【SpringBoot】自定义注解 I18n <约定式>国际化 (源码分享直接Copy)

0. 已做全新升级版 链接&#xff1a;【SpringBoot】自定义注解终极升级版&#xff1c;i18n国际化&#xff1e;方案源码Copy 链接&#xff1a;【SpringBoot】自定义注解终极升级版&#xff1c;i18n国际化&#xff1e;方案源码Copy 链接&#xff1a;【SpringBoot】自定义注解终…

【电子电路学习笔记】——模电笔记

关于专栏&#xff1a;本专栏用于分享学习电子电路过程中记录的笔记。模电部分使用的教材是高等教育出版社&#xff0c;华成英主编的《模拟电子技术基础&#xff08;第六版&#xff09;》&#xff08;其他版本的内容差不多&#xff0c;建议使用最新版教材&#xff09;&#xff1…

【完全二叉树的权值】

题目 代码1&#xff08;队列&#xff09; #include<bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII;const int N 1e510; int n; long long a[N]; queue<PII> q; long long sum[25]; int main() {memset(…

Leetcode—233. 数字 1 的个数【困难】

2024每日刷题&#xff08;152&#xff09; Leetcode—233. 数字 1 的个数 算法思想 参考自k神 实现代码 class Solution { public:int countDigitOne(int n) {long digit 1;long high n / 10;long low 0;long cur n % 10;long ans 0;while(high ! 0 || cur ! 0) {if(cu…

Python Web开发之“基于flask的轻量级Web应用”

参考文章1&#xff1a;https://cloud.tencent.com/developer/article/2373503 参考文章2&#xff1a;基于Flask的自定义网站设计与实现&#xff08;代码全文讲解V1.0&#xff09;_flask框架制作网页-CSDN博客 参考文章3&#xff1a;PythonFlaskMysqL设计网页 - 李明惠 - 博客…

Candance Allegro 入门教程笔记:如何绘制PCB封装库?

文章目录 一、PCB封装库的组成元素二、使用Padstack Edictor制作封装焊盘引脚三、PCB Editor软件创建贴片封装&#xff08;STM32F103T8U6 QFN36 为例&#xff09;3.1、新建PCB封装对象3.2、计算引脚启始坐标3.3、添加焊盘Pad路径3.4、放置焊盘引脚3.5、绘制装配线3.6、放置字符…

sqli-labs-php7-master\Less-1

1&#xff0c;进入mysql数据库 mysql -u root -p 接着&#xff1a; show databases; use security; select * from where id1 LIMIT 0,1; 函数的基本用法 system_user() #当前系统用户 user() #当前登录用户 current_user() #当前登录用…

MOS场效应管常见损坏原因

造成损坏的原因可能有几个: 1.缺少保护电路&#xff0c;一般来说电路中应适当设置保护电路&#xff0c;以吸收电路中的瞬间高压&#xff0c;浪涌电压保护关键元件。 2.参数选取不合理&#xff0c;没有余地&#xff1b;场效应管的耐压&#xff0c;电流都应该流有一定的余地&…

【网络】网络层

网络层 一、前置知识二、IP协议1、协议头格式2、网段划分3、特殊的IP地址&#xff1a;4、IP地址数量限制5、私有IP地址和公网IP地址6、浅谈运营商7、路由8、IP分片 一、前置知识 1、首先要对每台主机要有一个唯一标识符&#xff0c;所以要有源ip地址和目的ip地址来标识目的主机…

linux包管理工具与软件安装

目录 TAR工具的使用 常用选项&#xff1a; 对文件进行打包 查看文件包 向包文件里放添加文件 解包到当前路径 解包到指定路径 zip工具的使用 gzip压缩 bzip2压缩 gzip解压缩 bzip2解压缩 查看压缩文件内有哪些文件 将当前目录下压缩文件解压到指定目录下 软件安…

OpenGL ES->工作机制

渲染流程 渲染目的&#xff1a;输入3D立体坐标&#xff0c;输出绘制后的2D平面像素工作流程&#xff1a;顶点着色器->图元装配->几何着色器->光栅化->片段着色器->测试与混合&#xff0c;整个工作流程被封装在GPU内部&#xff0c;无法改变。运行在CPU的代码调用…