菜鸡二次封装element中table表单

news2024/11/28 13:34:05

实现效果如下

封装的table表单

<template>
    <el-table
        :span-method="arraySpanMethod"
        :header-cell-style="rowClass"
        :cell-style="cellStyle"
        :data="tableData"
        style="width: 100%; height: 100%"
    >
        //暂无数据展示
        <template #empty>
            <div
                style="
                    width: 217px;
                    padding-left: 34%;
                    height: 154px;
                    line-height: 20px;
                "
            >
                <img src="@/assets/images/noData.png" alt="" />
                <span style="line-height: 20px">暂无数据</span>
            </div>
        </template>
         //多级表头
        <template v-for="(item, index) in tableList" :key="index">
            <el-table-column
                :type="item.type"
                :index="item.type ? indexMethod : 0"
                :fixed="item.fixed"
                :label="item.label"
                :prop="item.prop"
                :width="item.width"
                :min-width="item.minWidth"
            >
                <template v-if="item.children">
                    <el-table-column
                        :label="item.label"
                        :prop="item.prop"
                        :width="item.width"
                        v-for="(item, index) in item.children"
                        :key="index"
                    >
                        <template v-if="item.children">
                            <el-table-column
                                :width="item.width"
                                :label="item.label"
                                :prop="item.prop"
                                v-for="(item, index) in item.children"
                                :key="index"
                            >
                            </el-table-column>
                        </template>
                    </el-table-column>
                </template>
            </el-table-column>
        </template>
        <!-- 操作事件 -->
        <el-table-column
            v-if="props.formOperations.exist"
            :label="props.formOperations.label"
            :fixed="props.formOperations.fixed"
        >
            <template #default="scope">
                <el-button
                    size="small"
                    @click="handleEdit(scope.$index, scope.row)"
                    >Edit</el-button
                >
            </template>
        </el-table-column>
    </el-table>
</template>
    
  <script setup>
const props = defineProps({
    // 表单是否有最右侧的操作按钮有则调用change事件
    formOperations: {
        type: Object,
        default: () => {
            //固定到最左侧fixed:left,最右侧:fixed:right,默认固定:true,不固定:false,exist必传
            return { fixed: false, label: '', exist: false };
        },
    },
    tableData: {
        type: Array,
        default: function () {
            return [];
        },
    },
    tableList: {
        type: Array,
        default: function () {
            return [];
        },
    },
    // 最小宽度要统一放到config内部
    config: {
        type: Object,
        default: {},
    },
});
function indexMethod(index) {
    return index + 1;
}
function rowClass({ row, rowIndex }) {
    // console.log(rowIndex); //表头行标号为0
    // return { background: 'red' };
}
//cellStyle()查找行列中单个的表格元素
function cellStyle({ row, column, rowIndex, columnIndex }) {
    const colorEnumeration = {
        Ⅰ类: '#24bd5d',
        Ⅱ类: '#24bd5d',
        Ⅲ类: '#d8bc37',
        Ⅳ类: '#f87c12',
        Ⅴ类: '#f88d18',
        劣Ⅴ类: '#94004b',
    };
    if (columnIndex >= 2) {
        //指定坐标rowIndex :行,columnIndex :列
        let index = Object.keys(row)[columnIndex - 2];
        return { background: colorEnumeration[row[index]] }; //rgb(105,0,7)
    } else {
        return '';
    }
}
function arraySpanMethod({ row, column, rowIndex, columnIndex }) {
    // if (rowIndex % 2 === 0) {
    //     if (columnIndex === 0) {
    //         return [1, 2];
    //     } else if (columnIndex === 1) {
    //         return [0, 0];
    //     }
    // }
}

// const tableData = [
//     {
//         date: '2016-05-03',
//         name: 'Tom',
//         state: 'California',
//         city: 'Los Angeles',
//         address: 'No. 189, Grove St, Los Angeles',
//         zip: 'CA 90036',
//     },
//     {
//         date: '2016-05-02',
//         name: 'Tom',
//         state: 'California',
//         city: 'Los Angeles',
//         address: 'No. 189, Grove St, Los Angeles',
//         zip: 'CA 90036',
//     },
// ];

// const tableList = [
//     {
//         fixed: true,
//         label: 'Data',
//         prop: 'date',
//         width: '130',
//         // children: [{ prop: "date", width: "160" }],
//     },
//     {
//         label: 'Delivery Info',
//         children: [
//             { label: 'Name', prop: 'name', width: '120' },
//             {
//                 label: 'Address Info',
//                 children: [
//                     { label: 'State', prop: 'state', width: '120' },
//                     { label: 'City', prop: 'city', width: '120' },
//                     { label: 'Address', prop: 'address' },
//                     {
//                         label: 'zip',
//                         prop: 'zip',
//                         width: '120',
//                     },
//                 ],
//             },
//         ],
//     },
// ];
const emit = defineEmits(['change']);
function handleEdit(index, sum) {
    //   console.log(index, sum);
    emit('change', index, sum);
}
</script>
<style scoped>
/* 暂无数据样式 */
/* ::v-deep .el-table__empty-text {
    display: none !important;
}
::v-deep .el-table__body {
    min-height: 0.5px;
}
::v-deep .el-table__empty-block {
    width: 100% !important;
    margin: auto;
    height: 100% !important;
    min-height: 150px !important;
    line-height: 150px !important;
    box-sizing: border-box;
    background: url('@/assets/images/nodata.png') no-repeat center;
} */
</style>

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

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

相关文章

汤姆斯的天堂梦(C++,Dijkstra)

题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需要向驾驶员支付一定金额的费…

【跟月影学可视化】学习笔记 41 篇(完结)

说明 【跟月影学可视化】专栏学习笔记。 个人学习笔记源码&#xff1a;https://github.com/kaimo313/visual-learning-demo 一共做了 162 个学习示例以及 41 篇博客学习笔记&#xff0c;要深入学习该课程请支持正版&#xff0c;个人笔记仅供参考。 笔记目录 【图形基础篇…

什么是无源相干定位系统?

无源定位&#xff08;Passive Localization&#xff09;不通过发射信号来探测目标的位置&#xff0c;而是接收目标的有意、无意辐射或反射信号来实现对侦察目标的探测、定位与追踪。接收的信号可以是目标直接辐射的信号&#xff0c;也可以是外辐射源照射到目标后反射或散射的信…

网站关键词怎么优化排名(网站关键词通常可以选择哪些词)

网站核心关键词的选取需要具备哪些条件 在对网站优化的过程中&#xff0c;肯定少不了对网站关键词的选取&#xff0c;关键词的选择又是网站优化中十分重要的一步&#xff0c;那么网站在选择关键词的过程中需要遵循哪些原则呢&#xff1f;关于这个问题老张带你了解一下。 1、首…

wav文件格式分析与详解

wav文件格式分析与详解WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音…

Wijmo 2022 v2 JavaScript UI Crack

Wijmo 2022 v2 采集 by Ω578867473 添加对 Angular 14 和 React 18 的支持以及对 FlexGrid 和 FlexChart 的改进。特征 Angular 14 支持——您今天就可以开始将 Angular 14 应用程序与 Wijmo 结合使用。Wijmo 提供了大量快速、灵活的 Angular 组件&#xff0c;每个组件都有丰富…

【学Vue就跟玩一样】组件-非单文件组件的使用

一&#xff0c;什么是组件实现应用中局部功能代和资源的集合&#xff08;简单来说就是将html&#xff0c;js&#xff0c;css&#xff0c;资源整合起来的一个小盒子&#xff09;理解&#xff1a;用来实现局部(特定)功能效果的代码集合为什么&#xff1a;一个界面的功能很复杂作用…

SD卡损坏了怎么办?sd卡恢复,80%的用户都试过这些方法

SD卡作为一种外部存储设备&#xff0c;多用在数据相机、监控、手机、无人机等设备中&#xff0c;可以帮我们保存很多数据。 但是SD卡也跟其他设备一样&#xff0c;容易发生数据丢失的情况。如果SD卡损坏了&#xff0c;或者我们把里面的数据误删或者格式化&#xff0c;sd卡恢复…

MySQL--什么情况下不建议使用join查询

关于join 当需要查询两个表的交集、并集等数据时&#xff0c;除了嵌套子查询的方式外&#xff0c;还可以使用join的方式提升性能。对于MySQL的join语句&#xff0c;需要两个最基础的“角色”&#xff1a;主表即驱动表&#xff0c;关联表即驱动表。join描述的就是驱动表与被驱动…

云服务器怎样搭建静态网站?

先买好域名和云服务器&#xff0c;然后把云服务器的ip地址和域名解析到一起。 然后登陆云服务器&#xff0c;安装Nginx 我的软件环境是 CentOS 1、安装 Nginx 在 CentOS 上&#xff0c;可直接使用 yum 来安装 Nginx&#xff08;安装时间稍微有点长&#xff0c;安装过程中代码会…

Linux应用编程---10.信号量

Linux应用编程—10.信号量 ​ 信号量用于任务间的同步!简单来理解&#xff0c;信号量是一个被内核维护的整数&#xff0c;这个整数一般是“大于等于零”的&#xff0c;我们对这个信号量的操作一般为&#xff1a;将信号量设置一个值、发布(加上一个信号量)、消耗(减去一个信号量…

LINUX提权之计划任务提权篇

前言 今天给大家带来的是计划任务提权&#xff0c;说起定时任务对于linux很熟悉的小伙伴一定不会陌生&#xff0c;但你有没有想过可以通过定时任务来进行权限提升的操作&#xff0c;本文会根据该知识点进行展开&#xff0c;同时给大家介绍一个用于探测漏洞的工具使用方法&…

线程通信:生产者消费者问题

问题 1.生产者&#xff08;Producer&#xff09;将产品给店员&#xff08;Clerk&#xff09;&#xff0c;而消费者&#xff08;Customer&#xff09;从店员处取走产品&#xff0c;店员一次只能持有固定数量的产品&#xff08;比如&#xff1a;20&#xff09; &#xff0c;如果生…

实验 1 MATLAB 图像处理基础

一、实验目的1. 熟悉启动和退出 MATLAB 的方法。2. 熟悉 MATLAB 命令窗口的组成。3. 掌握 MATLAB 基本绘图函数和图像处理函数的使用。4. 掌握图像内插和灰度图像的集合运算。二、实验例题1. 求下列表达式的值(1) (2) 答&#xff1a;(1)y1exp(2)/2*sin(35*pi/180)y1 2.1191(2)方…

索尼数字人研究:画质超逼真,面部表情与身体动作保持协调

近年来&#xff0c;3D动捕、数字虚拟人等技术受到越来越多关注&#xff0c;它不仅可以应用于电影场景&#xff0c;游戏、社交等领域也开始采用。相比于过去高成本、高门槛的全身动捕技术&#xff0c;现在制作基于动捕的虚拟人越来越容易&#xff0c;不需要过高的成本或是专业技…

Linux 可加载内核模块剖析

Linux 就是通常所说的单内核&#xff08;monolithic kernel&#xff09;&#xff0c;即操作系统的大部分功能都被称为内核&#xff0c;并在特权模式下运行。 它与微型内核不同&#xff0c;后者只把基本的功能&#xff08;进程间通信 [IPC]、调度、基本的输入/输出 [I/O] 和内存…

Hudi系列1:Hudi介绍

文章目录一. 什么是Hudi二. 发展历史三. Hudi 功能和特性四. Hudi 基础架构五. 使用公司六. 小结参考:一. 什么是Hudi Apache Hudi&#xff08;发音“hoodie”&#xff09;是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接带到数据湖中。Hudi提供了表&#xff0c…

6.6 工具-ELK安装

目录 6.6.1 Elasticsearch安装 6.6.1.1 安装 6.6.1.1.1 window 6.6.1.1.2 Linux 6.6.1.2 问题 6.6.1.2.1 问题一 6.6.1.2.2 问题二 6.6.2 Logstash安装 6.6.2.1 安装 6.6.2.1.1 window 6.6.2.1.2 Linux 6.6.2.2 问题 6.6.2.2.1 问题一 6.6.3 Kibana 6.6.3.1 安装…

论文投稿指南——中文核心期刊推荐(中国医学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

拿捏几道经典的字符串模拟问题

希望本篇对你有所帮助 我发现这种字符串的问题其实写起来很麻烦&#xff0c;可能思路不难多少都能想到一些&#xff0c;主要就是代码的处理&#xff0c;细节问题。太考验代码编写的能力了。这两天写了好多道字符串&#xff0c;模拟之类的问题&#xff0c;今天就分享分享吧 刚…