基于uniapp+vue3自定义增强版table表格组件「兼容H5+小程序+App端」

news/2024/11/18 19:52:29/文章来源:https://www.cnblogs.com/xiaoyan2017/p/18199130

vue3+uniapp多端自定义table组件|uniapp加强版综合表格组件

uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5+小程序端+App端

如下图: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: `https://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 class="flex-c">{{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" style="transform:scale(0.6);" /></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" style="margin-left: 5px;" @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><viewclass="uv3__table"...><!-- 表头 --><view v-if="showHeader" class="uv3__table-thead" :style="{'background': headerBackground}"><viewv-for="(col, cindex) in columns":key="cindex"class="uv3__thead-th":class="[{'fixedLeft': col.fixed == true || col.fixed == 'left','fixedRight': col.fixed == 'right','fixedLeftShadow': cindex == fixedLeftIndex,'fixedRightShadow': cindex == fixedRightIndex,},col.className || col.class]"...@click="handleHeaderClick(col)">...</view></view><!-- 表体 --><view class="uv3__table-tbody">...</view></view>
</template>

目前uv3-table表格组件作为独立版本,已经发布到我的作品集,欢迎去下载使用。

uniapp+vue3增强版自定义表格组件

Props参数

columns参数

  • background 对应列背景色
  • type 对应列类型(多选selection 索引index)
  • label 显示的列标题
  • prop 对应的列字段名
  • align 列水平对齐方式(left center right)
  • width 对应列宽度
  • fixed 该列固定到左侧(fixed:true|‘left’) 或 右侧(fixed:‘right’)
  • columnStyle 对应列自定义样式
  • className/class 表格列的类名className

事件

  • @headerClick 点击表头
  • @rowClick 点击行触发
  • @select 多选/单选

自定义插槽

  • headerCell 自定义表头内容
  • default 默认表体内容
  • empty 无数据插槽

希望以上分享对大家有些帮助,开发不易,一起fighting~~💝

https://www.cnblogs.com/xiaoyan2017/p/18165578

https://www.cnblogs.com/xiaoyan2017/p/18048244

 

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

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

相关文章

扩散模型的多元化应用:药物发现、文本生成、时间序列预测等

AlphaFold3 是 DeepMind 开发的一款蛋白质结构预测软件,它在AlphaFold2的基础上进行了改进。其中最主要的一个改进就是引入了扩散模型,这使得扩散模型不仅仅可以应用于文生图,其实扩散模型早已经在各个领域中都又所发展,今天我们就来研究一下扩散模型的多元化应用。https:/…

FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

​AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准。AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制订工作,参考软件的测试表明,AVS3基准档次的性能比上一代标准AVS2和HEVC提升了约30%。li…

笔记3. 链表

目录链表结构单链表和双链表链表题目常用技巧题目面试题 02.06. 回文链表给定一个数,把单链表划分为左边小于,中间相等,右边大的形式138. 复制带随机指针的链表单链表相交问题补充:哈希表和有序表的简单介绍 链表结构 单链表和双链表 // 单链表 typedef struct Node {int v…

vue2中安装scss

在终端执行命令cnpm i sass sass-loader -D 注意 ::v-deep

《程序员自我修养》读书笔记

目录虚拟地址空间(虚拟内存)布局编译与链接例子源码看看obj文件的组成格式主要的段全部的段组成格式:头信息+段一些概念和命令的总结概念命令 虚拟地址空间(虚拟内存)布局bss段节省的是文件的空间,不是虚拟地址空间指令段和数据段在程序运行起来后是不变的,不可伸缩从0地…

pip 下载速度慢

1、打开文件夹,输入%APPDATA%回车,打开%APPDATA%路径,并在此路径下新建一个pip文件夹:2、在pip文件夹下,新建pip.ini文件,并将以下内容添加至pip.ini文件中:[global] timeout = 6000 index-url = http://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun…

ServiceHub.DataWarehouseHost.exe内存占用过高

最近在优化WCS系统中同层调度多辆车子的功能,功能写完后,顺手写了个仿真的脚本,模拟车辆动作。准备测试下合理性。但是使用VS2022进行调试时,刚调试时程序响应很快,因为总是被领导喊去参加各种会议,忙完回来,准备继续测试时,程序响应总是很慢,一开始没注意,以为是许久…

MongoDB基础知识梳理笔记

1、mongodb是什么? MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在给 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储给一个文档,数据结构由键值(key=&g…

restcontroller中使用delete请求发送带参路径报错

报错内容:Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method DELETE not supported] 具体情景:postman中发送的路径: 每次用这个路径发送delete请求都报错,但是用这个路径发送get请求做查询却没问题,真的让我苦恼好久解决:因为…

Axure介绍

Axure Axure是一款功能强大的原型设计工具,被广泛应用于用户体验设计领域。它的特点和使用方法使其受到了许多设计师和产品经理的青睐。 交互设计 Axure作为一款领先的原型设计工具,突出了其丰富的交互功能,为用户提供了广泛的设计自由度。无论是页面过渡、动画效果、还是表…

Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤镜

一、前言 在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名。这种应用场景非常普遍,而且非常有必要,可以非常直观的直接看到对应移动的物体是什么…

一对一视频源码,实现限流对优化系统性能尤为重要

一对一视频源码,实现限流对优化系统性能尤为重要,主要内容为滑动日志,令牌桶,漏桶三种限流算法的Java实现获取连接许可的接口一、滑动日志用一个有序集合来存储所有请求的时间戳,以空间换时间的方式来简化计算二、令牌桶利用延迟计算来维护令牌数量三、漏桶漏桶算法原理类…