【uniapp】通用列表封装组件
uniapp页面一般都会有像以下的列表页面,封装通用组件,提高开发效率;
(基于uView前端框架)

首先,通过设计图来分析一下页面展示和数据结构定义

w-table组件参数说明
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| toggle | 列表是否带更多和收起功能 toggle值为true时,配合 prop-list中定义的show字段使用,show值为true时,收起情况下默认展示的列,false则默认不展示,点击更多展开时展示toggle值为false时, prop-list中定义的show值无效,表示全部默认展示,不需要展开收缩功能 | boolean | true|false | true |
| prop-list | 定义的字段和列标题数组(对应PC端封装表格组件,内容格式一致) 例:[{label:‘废物名称’,prop:‘name’},{label:‘数字识别码’,prop:‘code’}] | array | – | [] |
| table-data | 后台返回数据数组 | array | – | [] |
prop-list具体参数说明
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| label | 列的标题名称(如图:废物名称) | string | – | – |
| prop | 字段名 | array | – | [] |
| show | 列表收起时默认展示,toggle为true时生效 | string | true|false | false |
| formatItem | 整体列插槽(例如上图俩个状态按钮列,不展示左边标题名称,则需要整体插槽实现) | boolean | true|false | false |
| formatValue | 值插槽(例如返回值需要加单位,格式化等情况)formatItem为true时此属性不生效 | boolean | true|false | false |
propList数据格式
propList:[{label:'废物名称',prop:'title',show:true},{label:'数字识别码',prop:'name',show:true},{label:'危废标识',prop:'tag',show:true},{label:'废物代码',prop:'code',show:true},{label:'废物重量',prop:'weight',formatValue:true,show:true},//格式化值{label:'废物形态',prop:'name'},{label:'主要成分',prop:'name'},{label:'有害成分',prop:'name'},{label:'危险特性',prop:'name'},{label:'注意事项',prop:'name'},{label:'产生/收集单位',prop:'comp'},{label:'联系人',prop:'userName'},{label:'联系方式',prop:'phone'},{label:'产生日期',prop:'date'},{label:'备注',prop:'remark'},{label:'状态',prop:'status',formatItem:true,show:true},//格式化列默认展示{label:'二维码',prop:'qrcode',formatItem:true,show:false}//格式化列默认不展示
]
tableData数据格式
tableData:[{title:'HWCS20230908003',time:'2023-09-18 14:00',name:'废物名称',code:'1234567890123456789000030420230915101',tag:'7b9e9d22ca714365a1f6a6b338fc8fa3',code1:'900-041-49',weight:'30',unit:'kg',wasteStatus:1,reportStatus:0,
}]
具体代码
基础用法
<w-table :table-data="tableData" :prop-list="propList" :toggle="true"></w-table>
有格式化值和列的情况
<w-table :table-data="tableData" :prop-list="propList" :toggle="true"><template slot="header" slot-scope="scope"><view class="width w-flex row row-between borderB padding16"><view class="flex1 w-flex row"><text class="fs24 c-blue fwBold marginR10 flex-none"> {{scope.index < 10 ?'0'+(scope.index+1):scope.index+1}} </text><text class="flex1 text-overflow c-text fs16">{{scope.row.title}}</text></view><text class="marginLR10 flex-none">{{scope.row.time}}</text></view></template><template slot="weight" slot-scope="scope"><span>{{scope.row.weight}}{{scope.row.unit}}</span></template><template slot="status" slot-scope="scope"><view class="w-flex row row-between paddingLR30 paddingTB10"><u-tag text="待入库" mode="plain"/><view v-if="scope.row.status == 0" class="" style="color:#FF7D00"><u-icon name="clock"></u-icon><text class="marginL10">未上报</text></view><view v-else class="" style="color:#00B42A"><u-icon name="checkbox-mark"></u-icon><text class="marginL10">已上报</text></view></view></template><!-- 二维码 --><template slot="qrcode" slot-scope="scope"><view class="w-flex"> <img class="width160 height160" src="/static/img/qrcode.png" alt=""></view></template></w-table>
w-table组件源码
<template><view class="width w-table"><viewv-if="tableData.length > 0"class="w-flex col item-list marginB20 marginLR20 radius8 relative"v-for="(item, index) in tableData":key="index"><slot name="header" :row="item" :index="index"></slot><view class="width w-flex col paddingT15"><!-- <u-read-more class="width" :toggle="true" closeText="更多" :showHeight="showHeight" color="#4E5969"> --><u-cell-group><template v-for="(cellItem,i) in propList"><template v-if="!cellItem.formatItem"><!-- 默认展示 show为true时 或者 不需要折叠时执行展示列 --><view class="default-show" v-if="cellItem.show || !toggle"><u-cell-item :title="cellItem.label" :key="i" :arrow="false"><slot v-if="typeof cellItem.formatValue === 'boolean' ? cellItem.formatValue : false":row="item" :name="cellItem.prop" :index="index"></slot><text v-else>{{$util.formatTextEmpty(item[cellItem.prop])}}</text></u-cell-item></view><!-- 默认不展示 --><view class="default-notshow" v-if="!cellItem.show && item.isShow"><u-cell-item :title="cellItem.label" :key="i" :arrow="false"><slot v-if="typeof cellItem.formatValue === 'boolean' ? cellItem.formatValue : false":row="item" :name="cellItem.prop" :index="index"></slot><text v-else>{{$util.formatTextEmpty(item[cellItem.prop])}}</text></u-cell-item></view></template><template v-if="cellItem.formatItem"><!-- 整体插槽列默认展示 --><slot v-if="cellItem.show" :name="cellItem.prop" :row="item" :index="index"></slot><!-- 整体插槽列默认不展示 并且 列表展开时展示 --><slot v-if="!cellItem.show && item.isShow" :name="cellItem.prop" :row="item" :index="index"></slot></template></template><view v-show="toggle" class="width padding20 textCenter"><span v-show="!item.isShow" @click="toggleCell(index,true)">更多<u-icon name="arrow-down" class="marginL5"></u-icon></span><span v-show="item.isShow" @click="toggleCell(index,false)">收起<u-icon name="arrow-up" class="marginL5"></u-icon></span></view></u-cell-group><!-- </u-read-more> --></view></view></view>
</template><script>export default{props:{tableData:{default:[],type:Array,},propList:{default:[],type:Array,},showHeight:{default:500,type:Number,},toggle:{default:true,type:Boolean,}},data(){return{}},mounted(){if(this.toggle){// 可以展开收起时,给表格默认增加isShow属性this.tableData.forEach(item=>{this.$set(item,'isShow',!this.toggle)})}else{// 不需要收缩功能时,每一列数据默认是true,即展示,// 也就是toggle为false时,propList设置show属性无效,均为truethis.propList.forEach(item=>{this.$set(item,'show',!this.toggle)})}},methods:{toggleCell(i,value){this.$set(this.tableData[i],'isShow',value)}}}
</script><style lang="scss" scoped>::v-deep.u-cell{align-items: flex-start;}::v-deep.u-cell-box{text-indent: initial;}::v-deep.w-table .u-content__showmore-wrap{background-image:none !important;}::v-deep.w-table .u-cell_title{width: 90px !important;flex: none;font-size: 13px !important;}::v-deep.w-table .u-cell__value{text-align: left !important;overflow-wrap: break-word;}
</style>
相关文章:
【uniapp】通用列表封装组件
uniapp页面一般都会有像以下的列表页面,封装通用组件,提高开发效率; (基于uView前端框架) 首先,通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…...
17 Linux 中断
一、Linux 中断简介 1. Linux 中断 API 函数 ① 中断号 每个中断都有一个中断号,通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的,request_irq 函数就是…...
微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?
背景:小程序真机调试的时候,发现真机的network不显示接口调用情况,控制台也没有输出内容。具体如下所示; 解决方法: 1、确保手机端连接的网络和微信开发者工具网络一致,比如用同一个WiFi 2、真机自动调试…...
最新Next 14快速上手基础部分
最新Next 14快速上手基础部分 最新的NEXT快速上手文档,2023.10.27 英文官网同步,版本Next14.0.0 本项目案例:GitHub地址,可以根据git回滚代码到对应知识,若有错误,欢迎指正! 一、介绍 1.什么是…...
【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标
最终效果是这样的: 官方没有给出相关配置项,后来发现小箭头不是 uview 的图标,而是 unicode 编码,具体代码: // 箭头图标 ::v-deep .uicon-arrow-down[data-v-6e20bb40]:before {content: \1f783; }附一个查询其他 u…...
企业如何落地搭建商业智能BI系统
随着新一代信息化、数字化技术的应用,引发了新一轮的科技革命,现代化社会和数字化的联系越来越紧密,数据也变成继土地、劳动力、资本、技术之后的第五大生产要素,这一切都表明世界已经找准未来方向,前沿科技也与落地并…...
RedisTemplate连接密码设置教程
最近在一个项目中使用Redis保存Token时,出现连接Redis报错的情况 org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhos…...
基于SSM的二手车交易网站的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
温故知新:探究Android UI 绘制刷新流程
一、说明: 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制,在ViewRootImpl中还会进行主线程检测,也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui,inval…...
设计模式-命令模式(Command)
设计模式-命令模式(Command) 一、命令模式概述1.1 什么是命令模式1.2 简单实现命令模式1.3 使用命令模式的注意事项 二、命令模式的用途三、命令模式实现方式3.1 使用匿名内部类实现命令模式3.2 使用Lambda表达式实现命令模式3.3 使用Java内置的函数式接…...
linux批量解压zip
方法一 1,创建unzip.sh #!/bin/bashwhile read line do unzip $linedone < filelist.txt #!/bin/bashwhile read line dounzip "$line" >& log & done < filelist.txt3. 在终端中执行以下命令 $ chmod x unzip.sh $ ./unzip.sh 这…...
HBase导出建表语句
HBase导出建表语句 HBase是一个面向大数据的分布式列存数据库,它以Hadoop作为底层存储和计算平台。在HBase中,数据以表的形式存储,每个表由行和列组成。本文将介绍如何使用HBase导出建表语句,并提供相应的代码示例。 HBase建表语…...
Linux环境配置(云服务器)
目录 1.第一步:购买云服务器 2.第二步:下载Xshell 7 3.第三步:打开Xshell,登录云服务器 4.第四步:更加便捷的云服务器登录方式 1.第一步:购买云服务器 (推荐:阿里云、华为云、腾…...
【性能测试】Linux下Docker安装与docker-compose管理容器(超细整理)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Linux下Docker…...
陪玩2.0升级版源码/价值18500元的最新商业版游戏陪玩语音聊天系统源码
陪玩2.0升级版源码,价值18500元的最新商业版游戏陪玩语音聊天系统源码。 修复部分逻辑以及bug 修复bug:店员拒单后,退款会退到店员账号里而不是用户账户里。 修复bug:客户在盲盒下单后,马上取消了订单,但…...
读程序员的制胜技笔记08_死磕优化(上)
1. 过早的优化是万恶之源 1.1. 著名的计算机科学家高德纳(Donald Knuth)的一句名言 1.2. 原话是:“对于约97%的微小优化点,我们应该忽略它们:过早的优化是万恶之源。而对于剩下的关键的3%,我们则不能放弃优化的机会。” 2. 过早…...
【gltf-pipeline】安装gltf-pipeline 进行文件格式转换
问题 想使用gltf-pipeline进行gltf和glb格式转换。简单记录一下安装过程。 解决 1、安装Node.js Node.js下载路径:https://nodejs.org/en 建议默认设置安装。 添加系统环境变量: 测试安装是否成功: 在cmd.exe中运行: no…...
Android OpenGL ES踩坑记录
因为项目中的一个自定义绘图控件性能不行,改用OpenGL实现,也是第一次使用OpenGL,由于只是绘制2D图形,参考官方以及网上的教程,实现起来还是比较顺畅的,开发时只用了两个手机测试,运行良好&#…...
Vue3 项目完整配置
目录 一、配置简述二、创建项目1、使用包管理工具 pnpm2、新增目录 三、配置 ESLint1、添加代码2、修改 VSCode 配置 四、husky 工具配置五、暂存区 eslint 校验六、axios 配置1、安装创建2、测试 七、导入 Element Plus八、Pinia 持久化实现九、其他导入 .scss 文件需要安装 s…...
二十三种设计模式全面解析-从线程安全到创新应用:探索享元模式的进阶之路
在软件开发领域,线程安全和设计模式都是我们经常遇到的话题。线程安全保证了多线程环境下的数据一致性和可靠性,而设计模式则提供了一套经验丰富的解决方案。在前文中,我们已经了解了线程安全的处理和享元模式的基本概念。但是,如…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
