uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
本文提供增强版table表格组件体验,打造跨端表格的新标杆.
uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5+小程序端+App端。
提供详细示例代码,直接复制运行即可
引言
- uv3-table使用示例
- uv3Table编码实现
如下图:H5+小程序+App端,多端运行一致。

uv3-table表格插件是最新原创项目uniapp-os后台管理系统的一个独立版组件。
由于在开发uni-os手机后台系统需要用到table表格组件。无奈uniapp官方及插件市场table表格组件无论功能及UI上都不满足要求,于是自己爆肝一个多日夜开发了一款全新uniapp+vue3综合表格组件。

目前该项目已经出阶段性成果接近尾声了,相信很快就能和大家见面,到时也会做一些技术分享,敬请期待!

uv3-table使用示例
将uv3-table组件放到uniapp项目components目录下,无需在页面再次引入,即可使用。

基础用法
<uv3-table :columns="columns" :dataSource="data.list" />
自定义条纹样式
<uv3-table:columns="columns":dataSource="data.list"stripestripeColor="#eee"padding="5px"height="450rpx"
/>
综合用法(固定表头/列、自定义插槽内容)
<script setup>import { ref } from 'vue'import Mock from 'mockjs'const columns = ref([{type: 'selection', align: 'center', width: 80, fixed: true}, // 多选{type: 'index', label: 'ID', align: 'center', width: 80, fixed: true}, // 索引序号{prop: 'author', label: '作者', align: 'center', width: 120},{prop: 'title', label: '标题', align: 'left', width: 350},{prop: 'image', label: '图片', align: 'center', width: 120},{prop: 'switch', label: '推荐', align: 'center', width: 100},{prop: 'tags', label: '标签', align: 'center', width: 100},{prop: 'rate', label: '评分', align: 'center', width: 200},{prop: 'date', label: '发布时间', align: 'left', width: 250}, // 时间{prop: 'action', label: '操作', align: 'center', width: 150, fixed: 'right'}, // 操作])const data = ref(Mock.mock({total: 100,page: 1,pagesize: 10,'list|20': [{id: '@id()',author: '@cname()',title: '@ctitle(10, 20)',image: `//api.yimian.xyz/img?id=@integer(100, 300)`,switch: '@boolean()','tags|1': ['admin', 'test', 'dev'],rate: '@integer(1, 5)',date: '@datetime()',color: '@color()',}]}))
</script>
<uv3-table:dataSource="data.list":columns="columns":headerBold="true"headerBackground="#ecf5ff"stripeborderpadding="5px"maxHeight="650rpx"@rowClick="handleRowClick"@select="handleSelect"
><!-- 自定义header插槽内容 --><template #headerCell="{ key, col, index }"><template v-if="key == 'title'"><view >{{col.label}} <input placeholder="搜索" size="small" /></view></template><template v-else-if="key == 'date'"><uni-icons type="calendar"></uni-icons> {{col.label}}</template><template v-else>{{col.label}}</template></template><!-- 自定义body插槽内容(由于小程序不支持动态:name插槽,通过key标识来自定义表格内容) --><template #default="{ key, value, row, col, index }"><template v-if="key == 'image'"><uv-image :src="value" lazyLoad observeLazyLoad @click="previewImage(value)" /></template><template v-else-if="key == 'switch'"><switch :checked="value" /></template><template v-else-if="key == 'tags'"><uv-tags :text="value" :color="row.color" :borderColor="row.color" plain size="mini" /></template><template v-else-if="key == 'rate'"><uni-rate :value="value" size="14" readonly /></template><template v-else-if="key == 'action'"><uni-icons type="compose" color="#00aa7f" @click="handleEdit(row)" /><uni-icons type="trash" color="#ff007f" @click="handleDel(row)" /></template><template v-else>{{value}}</template></template>
</uv3-table>

rowClick点击表格行,会返回该行数据。

select单选/多选,会返回表格选中数据。

uv3Table编码实现
uv3-table表格参数配置
const props = defineProps({// 表格数据dataSource: {type: Array,default() {return []}},/*** @params {string} background 对应列背景色* @params {string} type 对应列类型(多选selection 索引index)* @params {string} label 显示的列标题* @params {string} prop 对应的列字段名* @params {string} align 列水平对齐方式(left center right)* @params {number|string} width 对应列宽度* @params {boolean|string} fixed 该列固定到左侧(fixed:true|'left')或右侧(fixed:'right')* @params {string} columnStyle 对应列自定义样式* @params {string} className/class 表格列的类名className*/columns: {type: Array,default() {return []}},// 表格宽度width: { type: [Number, String] },// 表格高度height: { type: [Number, String] },// 表格最大高度maxHeight: { type: [Number, String] },// 是否为斑马纹stripe: { type: [Boolean, String] },// 斑马纹背景stripeColor: { type: String, default: '#fafafa' },// 是否带有边框border: { type: [Boolean, String] },// 列宽度(推荐默认rpx)columnWidth: { type: [Number, String], default: 200 },// 单元格间距padding: { type: String, default: '5rpx 10rpx' },// 是否显示表头showHeader: { type: [Boolean, String], default: true },// 表头背景色headerBackground: { type: String, default: '#ebeef5' },// 表头颜色headerColor: { type: String, default: '#333' },// 表头字体加粗headerBold: { type: [Boolean, String], default: true },// 表格背景色background: { type: String, default: '#fff' },// 表格颜色color: { type: String, default: '#606266' },// 空数据时显示的文本内容,也可以通过 #empty 设置emptyText: { type: String, default: '暂无数据' }
})
模板结构如下
<template><view...><!-- 表头 --><view v-if="showHeader" :><viewv-for="(col, cindex) in columns":key="cindex":...@click="handleHeaderClick(col)">...</view></view><!-- 表体 --><view >...</view></view>
</template>
Props参数

columns 参数
-
background:指定对应列的背景色,可用于为特定列设置独特的视觉效果,以突出显示重要信息或区分不同的数据类型。
-
type:定义对应列的类型,支持 "selection"(多选)和 "index"(索引)两种特殊类型。"selection" 类型用于创建多选列,允许用户选择多行数据;"index" 类型用于显示行的索引或序号,方便用户快速定位数据。
-
label:设置显示在表头的列标题,清晰地描述该列数据的含义,帮助用户理解表格内容。
-
prop:绑定对应的列字段名,将表格数据中的特定属性与该列关联,确保数据正确展示。
-
align:控制列内容的水平对齐方式,可选值为 "left"(左对齐)、"center"(居中对齐)和 "right"(右对齐),以满足不同数据的展示需求。
-
width:设定对应列的宽度,可以根据数据内容的长度和表格布局的需求进行调整,以实现合理的空间分配。
-
fixed:将该列固定到表格的左侧或右侧,支持 "left"、"right" 或布尔值 true(默认固定到左侧)。固定列在表格滚动时保持不动,方便用户查看关键信息。
-
columnStyle:为对应列提供自定义样式,允许通过 CSS 样式对象来调整字体、颜色、边框等视觉效果,以实现高度个性化的表格设计。
-
className/class:指定表格列的类名,通过添加自定义的 CSS 类,可以进一步细化列的样式,实现复杂的布局和交互效果。
事件
-
@headerClick:当用户点击表头时触发,可用于实现排序、筛选等操作。通过监听该事件,可以获取被点击的表头信息,进而根据业务逻辑对表格数据进行处理。
-
@rowClick:点击表格行时触发,返回该行的数据。该事件适用于行级别的交互操作,如查看详情、编辑数据或根据行数据执行特定的业务流程。
-
@select:在多选或单选场景下触发,返回表格选中的数据。通过该事件,可以获取用户选择的行数据,用于批量操作、数据导出或其他业务处理。
自定义插槽
-
headerCell:自定义表头内容的插槽,允许开发者根据需求定制表头的显示效果,如添加图标、按钮或复杂的表头结构,以增强表格的交互性和视觉效果。
-
default:默认表体内容的插槽,用于自定义表格单元格的展示方式。可以根据数据类型、业务逻辑或用户需求,灵活地调整单元格的内容和样式。
-
empty:无数据插槽,当表格数据为空时展示自定义的提示文字或占位图。通过该插槽,可以为用户提供清晰的反馈,告知其当前表格中没有数据,并可引导用户进行下一步操作。
相关文章:
uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table:一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…...
新时期下k8s 网络插件calico 安装
1、k8s master节点初始化完毕以后一直处于notreadey状态,一直怀疑是安装有问题或者是初始化有问题(当然,如果真有问题要先解决这些问题),经过不断探索才发现是网络插件没有安装导致的,根据建议安装calico插…...
【SQL】COUNT()函数 用法详解
COUNT()函数 COUNT函数用法:COUNT ( [ALL | DISTINCT] column | expression | *) ALL关键字指示统计所有值,而DISTINCT关键字强制函数仅对不同的值进行操作。 默认情况下,使用ALL选项。条件表达式 COUNT()函数中条件表达式加 OR null。例如…...
【HTML+CSS+JS+VUE】web前端教程-6-图片路径详解
绝对路径 绝对路径是电脑盘符存储与访问的具体位置 E:\xxx\1.jpg <img src"E:\xxx\1.jpg">相对路径 两者相对关系,两者在同一路径下可以直接访问 子级关系:/ 父级关系:../ 同级关系: ./网络路径 具体的网络地址:…...
C++中面向对象的三大特性是什么?
封装(Encapsulation) 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员设为私有(private)或受保护(protected),并提供公共ÿ…...
Centos 修改 yum 源为阿里云
参考 https://serverfault.com/questions/1161816/mirrorlist-centos-org-no-longer-resolve 修改 Centos 的 yum 源为阿里云 去阿里云 yum 镜像源官网: https://developer.aliyun.com/mirror/ 选择自己对应的操作系统,这里以 centos7 演示…...
Qt之Cannot create children for a parent that is in a different thread问题分析
问题 在多线程场景中,使用QSerialPort,QTcpSocket等QIODevice设备时出现报Cannot create children for a parent that is in a different thread 分析 QObject构造函数中会检查父对象的线程数据与当前对象的线程数据是否一致 static bool check_parent_thread(Q…...
均值滤波从图像复原角度的解释
廖老师说若将图像生成看作一个随机过程,均值滤波(Mean Filtering)可以视为在高斯噪声模型下的线性最小均方估计(Linear Minimum Mean Squared Error, LMMSE)或者极大似然估计(Maximum Likelihood Estimatio…...
Tableau数据可视化与仪表盘搭建-数据连接
目录 连接本地文件 课程操作 连接方式(实时/数据提取) 保存工作簿 筛选器 数据处理 连接数据有三种类型 第一种,连接到本地文件,例如Excel,csv,JSON等 第二种,连接到数据库,例…...
VsCode对Arduino的开发配置
ps:我的情况是在对esp32进行编译、烧录时,找不到按钮,无法识别Arduino文件,适合已经有ini文件的情况。 1.在vscode中安装拓展 2.打开设置,点击右上角,转到settings.json文件 3.复制以下代码并保存 {"…...
2024版idea 插件无法加载
解决方法: 进入Settings 点击plugins 选择 HTTP Proxy Settings 设置成如图所示...
VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略
VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略 导读:在2024年末,智谱于11月29日正式提出了GLM-OS概念,并推出了两款Agent产品——AutoGLM和GLM-PC。为了促进大模型Agent生态的发展,智谱决…...
Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具
1、目标 从库存栏中把道具拖到游戏场景中,库存栏中道具数相应做减法或者删除道具。同时在库存栏中可以交换两个道具的位置。 2、UIInventorySlot设置Raycast属性 在UIInventorySlot中,我们只希望最外层的UIInventorySlot响应Raycast,他下面…...
Kafka优势剖析-消费者组、并行消费
目录 1. 消费者组(Consumer Group) 1.1 什么是消费者组? 1.2 消费者组的工作原理 1.3 消费者组的优势 2. 并行消费(Parallel Consumption) 2.1 什么是并行消费? 2.2 并行消费的工作原理 2.3 并行消…...
Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台
当今互联网发展迅速,应用程序的性能监控显得越来越重要。 DockerJmeterInfluxDBGrafana 是一种常用的性能监控平台,可以帮助开发者快速搭建一套可靠的监控体系。在本文中,我们将介绍如何使用这些工具搭建性能监控平台,以便开发人…...
Maven 详细配置:Maven settings 配置文件的详细说明
Maven settings 配置文件是 Maven 环境的重要组成部分,它用于定义用户特定的配置信息和全局设置,例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件(settings.xml)和用户配置文件&#x…...
【文本分类】bert二分类
import os import torch from torch.utils.data import DataLoader, Dataset from transformers import BertTokenizer, BertForSequenceClassification, AdamW from sklearn.metrics import accuracy_score, classification_report from tqdm import tqdm# 自定义数据集 class…...
单例模式-如何保证全局唯一性?
以下是几种实现单例模式并保证全局唯一性的方法: 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数,防止外部创建对象Singleton() {}// 静态成员变量,存储单例对象static Singleton instance; public:// 公有静态成员函数&…...
设计模式学习笔记——结构型模式
文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用…...
WEB攻防-通用漏洞_文件上传_黑白盒审计流程
目录 前置知识点 Finecms-CMS文件上传 编辑 Cuppa-Cms文件上传 Metinfo-CMS 文件上传 前置知识点 思路: 黑盒就是寻找一切存在文件上传的功能应用 1 、个人用户中心是否存在文件上传功能 2 、后台管理系统是否存在文件上传功能 3 、字典目录扫描探针文件上传构…...
SOFABoot 过滤器系统终极指南:JVMFilter 与组件生命周期管理深度解析
SOFABoot 过滤器系统终极指南:JVMFilter 与组件生命周期管理深度解析 【免费下载链接】sofa-boot SOFABoot is a framework that enhances Spring Boot and fully compatible with it, provides readiness check, class isolation, etc. 项目地址: https://gitcod…...
Python原生AOT在2026年终于可用?(官方PEP 718+PyO3 v0.24+Maturin 2.0三重验证实录)
第一章:Python原生AOT编译的里程碑意义与2026年落地全景Python长久以来以解释执行和动态特性见长,但启动延迟、内存开销与冷启动瓶颈严重制约其在边缘计算、嵌入式系统及云原生FaaS场景中的深度应用。2026年,CPython官方正式将原生AOT&#x…...
DeOldify在档案修复中的应用:老照片数字化上色企业落地实战案例
DeOldify在档案修复中的应用:老照片数字化上色企业落地实战案例 1. 引言:当黑白记忆遇见彩色未来 想象一下,你手里有一张泛黄的黑白老照片,那是你爷爷年轻时的样子。照片里的他意气风发,但黑白影像总让人觉得少了点什…...
云南塑料管公司哪家好
在云南,塑料管行业面临着诸多挑战,这些问题严重影响了工程质量和使用体验。行业痛点凸显塑料管的地域适配性差、产品品质参差不齐、性价比失衡、服务不完善以及供应链不稳定是当前行业普遍面临的难题。云南山区多、昼夜温差大、雨季漫长且软土地基普遍&a…...
颠覆式闲鱼智能客服系统:家居卖家7×24小时值守零门槛解决方案
颠覆式闲鱼智能客服系统:家居卖家724小时值守零门槛解决方案 【免费下载链接】XianyuAutoAgent 智能闲鱼客服机器人系统:专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感…...
SEO网络推广和SEM(搜索引擎营销)有什么不同
SEO网络推广和SEM(搜索引擎营销)有什么不同 在当今的数字营销世界中,SEO网络推广和SEM(搜索引擎营销)是两种非常重要的策略,它们都有助于提高网站的可见性和流量。它们在方法、成本、效果等方面有着显著的不同。本文将详细探讨SEO和SEM的差异࿰…...
OpenClaw插件开发指南:为百川2-13B-4bits定制飞书会议纪要生成器
OpenClaw插件开发指南:为百川2-13B-4bits定制飞书会议纪要生成器 1. 为什么需要定制会议纪要生成器 去年参加完一场跨部门会议后,我花了整整两小时整理会议纪要。当时就想:如果能自动提取关键信息、生成结构化摘要该多好。尝试过几个SaaS工…...
基于SpringBoot + Vue的人工智能时代个人计算机的安全防护科普系统
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
鸿子铭:电脑上录视频后出现这个电流声得怎么处理?
大家好,我是鸿子铭。可能我们在电脑上做视频的时候可能会电流声,或者说我们在录视频之后,它也会出现这个沙沙这个声音。出现这个问题,我们该如何去解决呢?其实解决的方法有两点,在电脑上只要调试这两点的话…...
TIKTOK 2026 爆单公式:SOUNDVIEW 本土化内容 + 货架场搜索,双轮驱动 GPM 飙升 60%!
2026 年,TikTok Shop 的流量格局已经发生了翻天覆地的变化。 如果说过去两年是“内容为王”的短视频混战时代,那么 2026 年则是“内容场 货架场”双轮驱动的红利爆发期。根据最新行业数据显示,TikTok 商城搜索场的 GPM(千次曝光…...
