Vue3+Vite+TypeScript+Element Plus开发-22.客制Table组件

 系列文档目录

Vue3+Vite+TypeScript安装

Element Plus安装与配置

主页设计与router配置

静态菜单设计

Pinia引入

Header响应式菜单缩展

Mockjs引用与Axios封装

登录设计

登录成功跳转主页

多用户动态加载菜单

Pinia持久化

动态路由 -动态增加路由

动态路由-动态删除路由 

路由守卫-无路由跳转404

 路由守卫-未登录跳转登录界面

 登录退出

Tags-组件构建

Tags-与菜单联动 

Pinia持久化优化

按钮权限

客制按钮组件

客制Table组件

客制Form组件

国际化

配置文件


 文章目录

目录

 系列文档目录

 文章目录

前言

子组件-Table组件构建

父组件-Table组件显示

演示效果

 后续

代码下载 


前言

上一章节讨论按钮组件构建与使用,本章节重点讨论Table组件构建与结合按钮组件使用。


子组件-Table组件构建

创建文件:  components/ActionTableCont.vue  

实现功能:

1. 栏位定义: 栏位配置由父组件传入,栏位可自定义隐藏。

2. 数据来源: 表格数据由父组件提供。

3. 勾选功能: 支持行数据的勾选操作。

4. 分页功能: 集成分页功能,支持数据分页显示。

<template><div><!-- 表格 --><el-table:data="currentPageData"style="width: 100%"border@selection-change="handleSelectionChange"><!-- 选择列 --><el-table-columnv-if="showSelection"type="selection"width="55"align="center"></el-table-column><!-- 序号列 --><el-table-columntype="index"label="序号"width="50"align="center"></el-table-column><!-- 动态列 --><el-table-columnv-for="column in visibleColumns":key="column.prop":prop="column.prop":label="column.label":width="column.width":align="column.align || 'left'"></el-table-column></el-table><!-- 分页 --><el-pagination:current-page="currentPage":page-size="pageSize":page-sizes="pageSizes"layout="total, sizes, prev, pager, next, jumper":total="tableData.length"@size-change="handleSizeChange"@current-change="handleCurrentChange"style="margin-top: 20px"></el-pagination></div>
</template><script setup>
import { ref, computed, defineProps, defineEmits, watch } from 'vue';const props = defineProps({tableColumns: {type: Array,required: true,default: () => [],},tableData: {type: Array,required: true,default: () => [],},pageSize: {type: Number,default: 10,},pageSizes: {type: Array,default: () => [5, 10, 15, 20],},showSelection: {type: Boolean,default: false,},
});const emit = defineEmits(['update:currentPage', 'update:pageSize', 'selection-change']);const currentPage = ref(1);const currentPageData = computed(() => {const start = (currentPage.value - 1) * props.pageSize;const end = start + props.pageSize;return props.tableData.slice(start, end);
});const visibleColumns = computed(() => {return props.tableColumns.filter((column) => !column.hide);
});const handleSizeChange = (newSize) => {console.log(`分页大小改变,新的分页大小为: ${newSize}`);emit('update:pageSize', newSize);currentPage.value = 1; // 重置当前页为第一页emit('update:currentPage', currentPage.value);
};const handleCurrentChange = (newPage) => {console.log(`当前页码改变,新的页码为: ${newPage}`);currentPage.value = newPage;emit('update:currentPage', currentPage.value);
};const handleSelectionChange = (selection) => {emit('selection-change', selection);
};// 监听 currentPage 和 pageSize 的变化并记录日志
watch(currentPage, (newVal, oldVal) => {console.log(`currentPage changed from ${oldVal} to ${newVal}`);
});watch(() => props.pageSize, (newVal, oldVal) => {console.log(`pageSize changed from ${oldVal} to ${newVal}`);
});
</script>

父组件-Table组件显示

功能说明:

1. 按钮组件引用: 删除按钮默认不可用。

2. 表格组件引用: 每页显示 5 条数据。

3. 栏位数据模拟: 地址栏位默认隐藏。

4. 勾选功能:

        • 勾选数据后,删除按钮变为可用状态;

        • 未勾选任何数据时,删除按钮保持不可用状态。

5. 勾选数据展示: 勾选的数据会在表格下方空白处显示。

6. 删除按钮功能: 点击删除按钮时,获取勾选的数据。

<template><div><ActionButtonGroup:show-add="hasPermission('demo2:create')"  :show-delete="true":disabled-add="false":disabled-edit="!selectedData.length":disabled-delete="!selectedData.length"@add="handleAdd"@edit="handleEdit"@delete="handleDelete"/><!-- 表格 --><CustomTable:tableColumns="columns":tableData="data":pageSize="pageSize":pageSizes="[5, 10, 15, 20, 30]":showSelection="true"@update:currentPage="currentPage = $event"@update:pageSize="pageSize = $event"@selection-change="handleSelectionChange"/><!-- 显示选中数据 --><div v-if="selectedData.length > 0" style="margin-top: 20px"><h3>选中的数据:</h3><pre>{{ selectedData }}</pre></div></div>
</template><script setup>
import { ref } from 'vue';
import CustomTable from '@/components/ActionTableCont.vue';
import { usePermission } from "@/utils/permissionUtils";
import ActionButtonGroup from "@/components/ActionBtnHdrCont.vue";
import {Plus,Check,Delete,Edit,Message,Search,Star,Upload,
} from '@element-plus/icons-vue'const hasPermission = usePermission();const columns = ref([{prop: 'date',label: '日期',width: 180,},{prop: 'name',label: '姓名',width: 180,},{prop: 'address',label: '地址',hide: true,},
]);const data = ref([{id: 1,date: '2025-04-14',name: '张三',address: '上海市普陀区金沙江路 1518 弄',},{id: 2,date: '2025-04-15',name: '李四',address: '上海市普陀区金沙江路 1517 弄',},{id: 3,date: '2025-04-16',name: '王五',address: '上海市普陀区金沙江路 1516 弄',},{id: 4,date: '2025-04-17',name: '赵六',address: '上海市普陀区金沙江路 1515 弄',},{id: 5,date: '2025-04-18',name: '孙七',address: '上海市普陀区金沙江路 1514 弄',},{id: 6,date: '2025-04-19',name: '周八',address: '上海市普陀区金沙江路 1513 弄',},{id: 7,date: '2025-04-20',name: '吴九',address: '上海市普陀区金沙江路 1512 弄',},{id: 8,date: '2025-04-21',name: '郑十',address: '上海市普陀区金沙江路 1511 弄',},{id: 9,date: '2025-04-22',name: '钱十一',address: '上海市普陀区金沙江路 1510 弄',},{id: 10,date: '2025-04-23',name: '孔十二',address: '上海市普陀区金沙江路 1509 弄',},{id: 11,date: '2025-04-24',name: '秦十三',address: '上海市普陀区金沙江路 1508 弄',},{id: 12,date: '2025-04-25',name: '尤十四',address: '上海市普陀区金沙江路 1507 弄',},
]);const currentPage = ref(1);
const pageSize = ref(5);// 默认每页显示5条数据// 用于存储选中的数据
const selectedData = ref([]);// 处理选中数据变化
const handleSelectionChange = (selection) => {selectedData.value = selection;
};// 获取选中数据
const handleDelete = () => {console.log('Selected Data:', selectedData.value);console.log('Selected  Data length:', selectedData.value.length);if (selectedData.value.length > 0) {// 删除逻辑console.log('Deleting selected data...');selectedData.value = [];} else {console.log('No selected data to delete.');}};
</script>

演示效果

测试效果:

1. 地址栏位: 地址栏位未显示。

2. 数据加载: 数据被成功加载。

3. 分页显示: 页码与翻页功能显示正确。

4. 删除按钮: 删除按钮默认不可用。

测试效果:

1. 勾选操作:

        • 勾选任意数据后,删除按钮显示,选中数据显示勾选资料

        • 未勾选任何数据时,删除按钮不显示。

2. 全选与全取消:

        • 支持全选操作,全选后删除按钮显示,选中数据显示勾选资料

        • 支持全取消操作,全取消后删除按钮不显示。

测试效果:

1. 每页显示笔数: 每页显示的记录数正确。

2. 页码选择: 页码选项可正常选择。

3. 前往页码: 支持跳转到指定页码。


 后续

本章节主要介绍:客制化 Table 组件的实现。下一章节将讨论:Form 组件的构建。


代码下载 

GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/sen_shan/ssVue3Demo.gitss.vue3.demo: 本项目以 Vue3、Vite、TypeScript、Element Plus 为核心框架,结合 Vue Router、Element Plus Icons、Less、Axios、Pinia、Mock 等技术,初始的构建登录,主界面,权限控制,按钮组件,table组件,form组件等小模型,可以随意搭建web管理系统https://gitee.com/sen_shan/ssVue3Demo.git

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

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

相关文章

Java读取JSON文件并将其中元素转为JSON对象输出

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java读取JSON文件并将其中元素转为JSON对象输…

Spring Boot自动配置原理深度解析:从条件注解到spring.factories

大家好&#xff01;今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎&#xff0c;因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧&#xff01;&#x1f440; &#x1f31f; 什么是自动配置…

【ELF2学习板】利用OpenMP采用多核并行技术提升FFTW的性能

目录 引言 OpenMP简介 编译OpenMP支持的FFTW库 部署与测试 测试程序 程序部署 测试结果 结语 引言 在前面已经介绍了在ELF2开发板上运行FFTW计算FFT。今天尝试利用RK3588的多核运算能力来加速FFT运算。FFTW利用多核能力可以考虑使用多线程或者OpenMP。今天介绍一下Ope…

2000-2017年各省城市天然气供气总量数据

2000-2017年各省城市天然气供气总量数据 1、时间&#xff1a;2000-2017年 2、来源&#xff1a;国家统计局、能源年鉴 3、指标&#xff1a;行政区划代码、城市、年份、城市天然气供气总量 4、范围&#xff1a;31省 5、指标说明&#xff1a;城市天然气供气总量是指在一定时间…

Hadoop的三大结构及其作用?

Hadoop是一个分布式存储和计算框架&#xff0c;其三大核心组件是HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。它们各自有着重要的作用&#xff0c;共同构成了Hadoop生态系统的基础…

【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试

摘要&#xff1a;颜色在人类感知中起着重要作用&#xff0c;通常在视觉推理中提供关键线索。 然而&#xff0c;尚不清楚视觉语言模型&#xff08;VLMs&#xff09;是否以及如何像人类一样感知、理解和利用颜色。 本文介绍了ColorBench&#xff0c;这是一个精心设计的创新基准&a…

Python番外——常用的包功能讲解和分类组合

目录 1. Web开发框架与工具 2. 数据处理与分析 3. 网络请求与爬虫 4. 异步编程 5. 数据库操作 6. 图像与多媒体处理 7. 语言模型与NLP 8. 安全与加密 9. 配置与工具 10. 其他工具库 11.典型组合场景 此章节主要是记录我所使用的包&#xff0c;以及模块。方便供自己方…

华硕原厂系统枪神9/9p超竟版-WIN11原装开箱出厂系统安装

华硕原厂系统枪神9/9p超竟版-WIN11-24H2-专业工作站版本安装可带F12-ASUSRecovery恢复功能 适用机型&#xff1a; G635LX、G635LW、G835LX、G835LW、G615LW、G615LP、G615LM、G615LH G815LW、G815LP、G815LM、G815LH、G635LR、G835LR、G615LR、G815LR 远程恢复安装&#xff…

拉取windows的docker镜像转到服务器上构建服务镜像

在windows上将拉取ubuntu的docker镜像转到服务器上 1.要求 1.1 要求windows和服务器安装好docker 2.拉取ubuntu镜像到windows&#xff08;dos操作&#xff0c;可能需要连接到外网&#xff09; 一旦你选择了一个合适的基础镜像&#xff0c;你可以使用docker pull命令从Docke…

T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)

最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理&#xff0c;首先需要有数据&#xff0c;然后需要准备对应的处理平台和工具箱&#xff0c;进行一系列。那么开始记录~ 前言&#xff1a; 为了基于种子点的功能连…

Nginx-前言

nginx是什么&#xff1f; 轻量级&#xff0c;开源免费的web服务器软件&#xff0c;服务器安装nginx&#xff0c;服务器则成为web服务器 nginx的稳定版版本号&#xff1a; 偶数版本 nginx的相关目录&#xff1a; /etc/nginx/nginx.conf nginx的主配置文件 /etc/nginx/ngi…

缓慢前行,静待花开

最期待的不是成品出炉&#xff0c;而是揉面时感受到温度、发酵时闻到淡淡香气 1 “慢就是稳&#xff0c;稳就是快”。 这句来自特种兵的训练语&#xff0c;被许多自媒体人奉为准则。 在看似风云突变的环境下&#xff0c;速度被隐藏在稳定中&#xff0c;结果被酝酿在过程里。…

洛谷的几道题(2)

P1008 [NOIP 1998 普及组] 三连击 # P1008 [NOIP 1998 普及组] 三连击 ## 题目背景 本题为提交答案题&#xff0c;您可以写程序或手算在本机上算出答案后&#xff0c;直接提交答案文本&#xff0c;也可提交答案生成程序。 ## 题目描述 将 $1, 2, \ldots , 9$ 共 $9$ 个数分…

Day10【基于encoder- decoder架构实现新闻文本摘要的提取】

实现新闻文本摘要的提取 1. 概述与背景2.参数配置3.数据准备4.数据加载5.主程序6.预测评估7.生成效果8.总结 1. 概述与背景 新闻摘要生成是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;其目标是自动从长篇的新闻文章中提取出简洁、准确的摘要。近年来…

【大疆dji】ESDK开发环境搭建(软件准备篇)

接上一篇【大疆dji】ESDK开发环境搭建&#xff08;硬件准备篇&#xff09; 1. 编译环境 ESDK 提供 x86_64/aarch64 基于 Linux 平台 Ubuntu 发行版操作系统构建的静态库&#xff0c;运行 demo 先正确安装所需的依赖包。arm32位就不支持了。建议使用编译安装的方式&#xff0c;…

Java数据结构——ArrayList

Java中ArrayList 一 ArrayList的简介二 ArrayList的构造方法三 ArrayList常用方法1.add()方法2.remove()方法3.get()和set()方法4.index()方法5.subList截取方法 四 ArrayList的遍历for循环遍历增强for循环(for each)迭代器遍历 ArrayList问题及其思考 前言 ArrayList是一种 顺…

【信息获取能力】

第一层&#xff1a;表象观察 现象&#xff1a;AI系统&#xff08;如GPT-4&#xff09;可以瞬间调用并整合全球互联网上的公开信息&#xff0c;而人类即使穷尽一生也无法完成同等规模的知识储备。 底层逻辑&#xff1a; 存储与检索效率&#xff1a;人类大脑的记忆容量有限&…

03、GPIO外设(三):标准库代码示例

标准库代码示例 1、点亮LED2、LED闪烁3、LED流水灯4、按键控制LED5、蜂鸣器 本章源代码链接&#xff1a; 链接: link 1、点亮LED 实验要求&#xff1a;点亮LED ①LED.c文件的代码如下: #include "LED.h"/*** LED引脚初始化*//* 定义数组&#xff0c;想要添加引脚…

卷积神经网络(CNN)与VGG16在图像识别中的实验设计与思路

卷积神经网络&#xff08;CNN&#xff09;与VGG16在图像识别中的实验设计与思路 以下从基础原理、VGG16架构解析、实验设计步骤三个层面展开说明&#xff0c;结合代码示例与关键参数设置&#xff0c;帮助理解其应用逻辑。 一、CNN与VGG16的核心差异 基础CNN结构 通常包含33~55个…

java导出word含表格并且带图片

背景 我们需要通过 Java 动态导出 Word 文档&#xff0c;基于预定义的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替换模板中的文本&#xff08;如占位符 ${设备类型} 等&#xff09;。 替换模板中的图…