当前位置: 首页 > news >正文

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面,封装通用组件,提高开发效率;
(基于uView前端框架)
在这里插入图片描述

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

在这里插入图片描述

w-table组件参数说明

参数说明类型可选值默认值
toggle列表是否带更多和收起功能
toggle值为true时,配合prop-list中定义的show字段使用,show值为true时,收起情况下默认展示的列,false则默认不展示,点击更多展开时展示
toggle值为false时prop-list中定义的show值无效,表示全部默认展示,不需要展开收缩功能
booleantrue|falsetrue
prop-list定义的字段和列标题数组(对应PC端封装表格组件,内容格式一致)
例:[{label:‘废物名称’,prop:‘name’},{label:‘数字识别码’,prop:‘code’}]
array[]
table-data后台返回数据数组array[]

prop-list具体参数说明

参数说明类型可选值默认值
label列的标题名称(如图:废物名称)string
prop字段名array[]
show列表收起时默认展示,toggletrue时生效stringtrue|falsefalse
formatItem整体列插槽(例如上图俩个状态按钮列,不展示左边标题名称,则需要整体插槽实现)booleantrue|falsefalse
formatValue值插槽(例如返回值需要加单位,格式化等情况)
formatItemtrue时此属性不生效
booleantrue|falsefalse
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页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…...

17 Linux 中断

一、Linux 中断简介 1. Linux 中断 API 函数 ① 中断号 每个中断都有一个中断号&#xff0c;通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的&#xff0c;request_irq 函数就是…...

微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?

背景&#xff1a;小程序真机调试的时候&#xff0c;发现真机的network不显示接口调用情况&#xff0c;控制台也没有输出内容。具体如下所示&#xff1b; 解决方法&#xff1a; 1、确保手机端连接的网络和微信开发者工具网络一致&#xff0c;比如用同一个WiFi 2、真机自动调试…...

最新Next 14快速上手基础部分

最新Next 14快速上手基础部分 最新的NEXT快速上手文档&#xff0c;2023.10.27 英文官网同步&#xff0c;版本Next14.0.0 本项目案例&#xff1a;GitHub地址&#xff0c;可以根据git回滚代码到对应知识&#xff0c;若有错误&#xff0c;欢迎指正&#xff01; 一、介绍 1.什么是…...

【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标

最终效果是这样的&#xff1a; 官方没有给出相关配置项&#xff0c;后来发现小箭头不是 uview 的图标&#xff0c;而是 unicode 编码&#xff0c;具体代码&#xff1a; // 箭头图标 ::v-deep .uicon-arrow-down[data-v-6e20bb40]:before {content: \1f783; }附一个查询其他 u…...

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…...

RedisTemplate连接密码设置教程

最近在一个项目中使用Redis保存Token时&#xff0c;出现连接Redis报错的情况 org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhos…...

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

温故知新:探究Android UI 绘制刷新流程

一、说明&#xff1a; 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制&#xff0c;在ViewRootImpl中还会进行主线程检测&#xff0c;也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui&#xff0c;inval…...

设计模式-命令模式(Command)

设计模式-命令模式&#xff08;Command&#xff09; 一、命令模式概述1.1 什么是命令模式1.2 简单实现命令模式1.3 使用命令模式的注意事项 二、命令模式的用途三、命令模式实现方式3.1 使用匿名内部类实现命令模式3.2 使用Lambda表达式实现命令模式3.3 使用Java内置的函数式接…...

linux批量解压zip

方法一 1&#xff0c;创建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是一个面向大数据的分布式列存数据库&#xff0c;它以Hadoop作为底层存储和计算平台。在HBase中&#xff0c;数据以表的形式存储&#xff0c;每个表由行和列组成。本文将介绍如何使用HBase导出建表语句&#xff0c;并提供相应的代码示例。 HBase建表语…...

Linux环境配置(云服务器)

目录 1.第一步&#xff1a;购买云服务器 2.第二步&#xff1a;下载Xshell 7 3.第三步&#xff1a;打开Xshell&#xff0c;登录云服务器 4.第四步&#xff1a;更加便捷的云服务器登录方式 1.第一步&#xff1a;购买云服务器 &#xff08;推荐&#xff1a;阿里云、华为云、腾…...

【性能测试】Linux下Docker安装与docker-compose管理容器(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Linux下Docker…...

陪玩2.0升级版源码/价值18500元的最新商业版游戏陪玩语音聊天系统源码

陪玩2.0升级版源码&#xff0c;价值18500元的最新商业版游戏陪玩语音聊天系统源码。 修复部分逻辑以及bug 修复bug&#xff1a;店员拒单后&#xff0c;退款会退到店员账号里而不是用户账户里。 修复bug&#xff1a;客户在盲盒下单后&#xff0c;马上取消了订单&#xff0c;但…...

读程序员的制胜技笔记08_死磕优化(上)

1. 过早的优化是万恶之源 1.1. 著名的计算机科学家高德纳(Donald Knuth)的一句名言 1.2. 原话是&#xff1a;“对于约97%的微小优化点&#xff0c;我们应该忽略它们&#xff1a;过早的优化是万恶之源。而对于剩下的关键的3%&#xff0c;我们则不能放弃优化的机会。” 2. 过早…...

【gltf-pipeline】安装gltf-pipeline 进行文件格式转换

问题 想使用gltf-pipeline进行gltf和glb格式转换。简单记录一下安装过程。 解决 1、安装Node.js Node.js下载路径&#xff1a;https://nodejs.org/en 建议默认设置安装。 添加系统环境变量&#xff1a; 测试安装是否成功&#xff1a; 在cmd.exe中运行&#xff1a; no…...

Android OpenGL ES踩坑记录

因为项目中的一个自定义绘图控件性能不行&#xff0c;改用OpenGL实现&#xff0c;也是第一次使用OpenGL&#xff0c;由于只是绘制2D图形&#xff0c;参考官方以及网上的教程&#xff0c;实现起来还是比较顺畅的&#xff0c;开发时只用了两个手机测试&#xff0c;运行良好&#…...

Vue3 项目完整配置

目录 一、配置简述二、创建项目1、使用包管理工具 pnpm2、新增目录 三、配置 ESLint1、添加代码2、修改 VSCode 配置 四、husky 工具配置五、暂存区 eslint 校验六、axios 配置1、安装创建2、测试 七、导入 Element Plus八、Pinia 持久化实现九、其他导入 .scss 文件需要安装 s…...

二十三种设计模式全面解析-从线程安全到创新应用:探索享元模式的进阶之路

在软件开发领域&#xff0c;线程安全和设计模式都是我们经常遇到的话题。线程安全保证了多线程环境下的数据一致性和可靠性&#xff0c;而设计模式则提供了一套经验丰富的解决方案。在前文中&#xff0c;我们已经了解了线程安全的处理和享元模式的基本概念。但是&#xff0c;如…...

Windows10运行OpenClaw 安装配置一站式教程(含最新版安装包)

OpenClaw 小龙虾 Windows10 专属一键部署教程&#xff5c;10分钟搞定本地AI数字员工适配系统&#xff1a;Windows10 64位&#xff08;纯小白友好版&#xff09; 核心优势&#xff1a;免命令行、免环境配置、解压即装&#xff0c;内置所有运行依赖&#xff0c;全程可视化操作&am…...

Keil uVision隐藏技能Get:利用User Command,让STM32工程编译后自动打包bin、hex甚至版本信息

Keil uVision隐藏技能&#xff1a;利用User Command实现STM32工程编译全自动化 在嵌入式开发领域&#xff0c;效率往往决定着项目成败。想象一下这样的场景&#xff1a;每次修改代码后&#xff0c;你不仅要等待漫长的编译过程&#xff0c;还需要手动执行一系列重复操作——生成…...

别再只盯着地图看!5分钟搞懂OSM文件里那些‘点、线、面’到底在说什么

别再只盯着地图看&#xff01;5分钟搞懂OSM文件里那些‘点、线、面’到底在说什么 第一次打开OSM文件时&#xff0c;很多人都会被满屏的XML标签吓到——这堆<node>、<way>和<relation>到底对应着地图上的什么&#xff1f;作为开发者或数据分析师&#xff0c;…...

这款OBS弹幕编辑神器,让你的直播录播更精彩!

这款OBS弹幕编辑神器&#xff0c;让你的直播录播更精彩&#xff01; 在直播与录播的领域中&#xff0c;弹幕是增强互动性与丰富内容的关键要素。今天&#xff0c;为大家带来一款极为实用的OBS弹幕编辑网页程序&#xff0c;它能让弹幕操作变得轻松且高效。 产品概述 这是一款轻量…...

STM32 ADC+高速DMA 采集原理与实战

一、核心概念1. 什么是 ADC&#xff1f;ADC 是模数转换器&#xff0c;作用是把模拟电压转换成数字值。STM32F103 的 ADC 是 12 位的&#xff0c;输出范围 0~4095&#xff0c;对应电压范围 0~3.3V&#xff0c;换算公式&#xff1a;电压 ADC值 3.3V / 4096。2. 什么是 DMA&…...

零信任嵌入式开发时代,C代码如何通过MISRA-C 2026+ISO/IEC TS 24772-3双重合规审计?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;零信任嵌入式开发范式转型与合规性演进全景 传统嵌入式系统长期依赖边界防御模型&#xff0c;而物联网设备爆发式增长、远程固件更新常态化以及边缘计算场景深化&#xff0c;正加速推动零信任原则向资源…...

Ray Serve 模型推理部署(上)

第六章:Ray Serve 模型推理部署(上) 6.1 部署架构与核心概念 Ray Serve 是 Ray 生态中专门用于模型推理和服务部署的库。它提供了可扩展、可编程的模型服务框架,支持实时推理和批量推理两种模式。Ray Serve 的设计目标是让开发者能够轻松地将训练好的模型部署到生产环境,同…...

在Firefly RK3399 ProC上部署Python 3.7:一份保姆级的交叉编译与第三方库安装指南

在Firefly RK3399 ProC上部署Python 3.7&#xff1a;一份保姆级的交叉编译与第三方库安装指南 当开发者需要在嵌入式设备上运行Python应用时&#xff0c;往往会遇到一个关键挑战&#xff1a;如何在资源受限的ARM架构设备上构建完整的Python环境。Firefly RK3399 ProC作为一款高…...

避坑指南:在银河麒麟V10(arm64)离线安装Docker 20.10.7时,我踩过的那些权限和配置的‘坑’

银河麒麟V10&#xff08;arm64&#xff09;离线安装Docker实战&#xff1a;从权限陷阱到架构适配的深度解析 第一次在银河麒麟V10上部署Docker时&#xff0c;本以为按照常规Linux流程就能轻松搞定&#xff0c;结果却被一连串"Permission denied"和cgroup错误狠狠教育…...

别再硬啃BladeX源码了!从它的starter包结构,我总结了一套企业级微服务技术选型清单

企业级微服务技术选型实战指南&#xff1a;从BladeX starter看架构设计精髓 当技术团队面临微服务架构选型时&#xff0c;往往陷入两难&#xff1a;既要保证技术栈的前瞻性和扩展性&#xff0c;又要确保组件的稳定性和团队上手成本。BladeX框架通过精心设计的starter包结构&…...