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

测试需求平台9-Table 组件应用产品列表优化

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战,由浅入深带你实现测试开发岗位中平台工具技术能力入门和提升

👨‍💻 作者:大奇 MegaQi  
✍️ 专注测试开发实战&车载方向干货分享,欢迎访问长期关注博客和公众号。

1.气泡确认 Popconfirm

点击元素,弹出气泡式的确认框,一般可替代 Modal 对话框实现便捷的二次确认操作。

1.1 组件构成

由基本触发器浮层构成

  1. 触发器:点击触发器将唤起气泡确认框,触发器一般为按钮或链接

  2. 浮层:为确认框容器,其中包含了提示性文字和需要用户确认的操作

1.2 组件用法

气泡确认框是一种轻量的反馈方式,承载的内容也相对较少,主要用于二次确认操作。对比较为常规的对话框二次确认,气泡确认框从形式上更轻量,干扰更小,控件的打开关闭方式也更为便捷

<template>  <a-popconfirm content="你确定要删除此信息吗?">    <a-button>是否删除</a-button>  </a-popconfirm></template>

Popconfirm组件同样有 Props 属性具体参考引用

更多 API:https://arco.design/vue/component/popconfirm#API

本篇主要用到一个ok按钮 Events,即点击确认按钮时触发,对应还有个 cancel 事件,默认是关闭确认对话框,如确认操作无特殊交互逻辑无需处理。

1.3 应用实战

参考上一篇编辑的基础上增加行废弃菜单按钮,外层直接包裹确认气泡 popconfirm,而真正实现软删除的操作也是放在气泡的确认按钮上。

<a-table :columns="columns" :data="renderList" :pagination="false" ><template #optional="{ record }">  <a-button type="text" @click="editButtonClick(record)">编辑</a-button>+   <a-popconfirm content="你确定要废弃此产品吗?" type="warning" @ok="deleteButtonClick(record.id)">+     <a-button type="text">废弃</a-button>+   </a-popconfirm>  </template></a-table>

有个组件绑定,剩下只需要实现接口和触发删除逻辑就行了,这个气泡删除我们使用后端两个删除接口的 软删除 ,即更新产品状态。

/* 接口product.ts新增软接口 */export function apiProductRemove(id: number) {  return axios.post(`/api/product/remove?id=${id}`);}
/* 页面product/index.vue script部分新增确认事件处理 */const removeButtonClick = async (id) => {    const res = await apiProductRemove(id);    if (res.code === 20000) {        fetchData(); // 删除成功重新请求列表    } else {        console.log("产品删除失败");    }  }

案例验证下实现效果

在气泡确认组件使用建议中,有一种危险情况,比如数据彻底移出、操作会影响其他使用,这类是不建议使用 Propconfirm,而是建议使用Modal并通过改变样式、按钮状态等来更明显的提醒和阻断操作。下面以另外一个彻底删除接口实现对话框的模式的确认删除交互。

因为上篇已经详细讲解了 Modal 组件使用,这里就直接给出参考的代码了。1)src/api/product.ts

export function apiProductDelete(id: number) {  return axios.delete('/api/product/delete', {    params: {id}  });}

2)Vue tempplate

<a-modal v-model:visible="delModalVisible"           title="删除产品"           @before-ok="delModalOk"           okText="删除"           :okButtonProps="modalOkPros"  >    <div>确定彻底删除此产品吗?</div>  </a-modal>

3)Vue script

// 控制删除确认对话框const delModalVisible = ref(false); // 定义保存行删除的IDconst delId = ref("");// 对护框确定按钮的自定义属性,按钮为警告类型const modalOkPros = {    status: 'warning'    };// 赋值并弹出对话框const delBtnClick = (id) => {    delId.value = id;    delModalVisible.value = true;};// 调用接口执行删除操作const delModalOk = async () => {    const res = await apiProductRemove(delId.value);    if (res.code === 20000) {        delModalVisible.value = false;        fetchData();    } else {        console.log("产品移除失败");    };};

2.表格 Table 组件

在数据展示、分析整理、操作处理场景中最常用的就是Table表格,它是用行列的形式,结构化展示信息的组件;方便用户查看、分析数据。

2.1 组件构成

参考办公软件 Excel 在做数据表的时候(表头、行、列)格式,对应一个展示 Table 便有如下构成:

  • 表头 :说明这一列的信息类别,也可以在表头放置一些排序、筛选等操作按钮。

  • 单元格 :表格的主体由多个单元格组成,单元格内支持文字、图标、按钮、标签、单选框、复选框等元素。

  • 行列分割线:从视觉上分隔信息。

< 组件用法 https://arco.design/docs/spec/table >

2.2 组件类型

作为数据展示最常用的组件,从样式来和使用场景来说,ArcoDesgin 提供了多种类型

  • 基础表格 由表头和单元格组成,无其他拓展操作,对数据进行最基础展示;

  • 固定表格 用于在固定表格重要行或列(一般为头和两边列)内容展示不全场景,出现滚动条可滑动预览;

  • 选择表格 表格可以配置行的 CheckBox,进行单选/多选方便进行批量的数据操作;

  • 展开表格 表格行可以展开,以展示更多信息;

  • 树表格 即嵌套表格,当数据信息有清晰的层级关系时,可以使用树表格。

<附之前已经实现基础表格图>

2.3 使用时机

何时使用

  • 需要展示数据时:当有大量结构化数据需要展示展示时可以使用表格对数据进行有序的展示,更有利于用户对于数据的获取。

  • 需要对数据进行复杂操作时:当需要对数据进行排序、搜索、筛选等操作时,可以使用表格组件,利于对数据进行操作。

  • 需要对数据进行对比,归纳与分类时:当需要对数据进行对比、归纳、分类等操作时,可以使用表格组件,使信息之间易于对比,便于用户快速查询其中的差异与变化、关联和区别。

何时不适用

  • 单独的选择项和对应选项时: 单独的选择项对应选项时可采用列表组件,而非表格组件。

2.4 属性 API

表格Table可以看作是一个综合且相对负责的组件,因此会有更多的功能、属性、方法等供我们组合使用来达到不同需求,如下图左侧列出了很多参考,在使用时候可以以基本模版为地基,逐项增加配置项。

https://arco.design/vue/component/table#API

<table> Props 表属性

  • columns:表格的列定义 - TableColumnData[] 类型

  • data:表格绑定的数据 - 类型 [] 数据

  • size:大小密度 - 枚举 largeminismallmedium

  • loading:加载状态,常用于大量据接口响应时间长等待 - 布尔 falsetrue

  • row-key:建议指定表数据列 key,如不指定会有很多警告

<table-column> Props 列属性

  • data-index:列信息的标识,即绑定字典中的 key - 字符串类型

  • title:表头列标题 - 字符串 或 React 组件类型

  • width:自定义列最大宽度 - number 类型

  • align:列标题及内容对齐方向 - 枚举 leftcenterright

  • ellipsis:超出列宽度自动省略号,不设置默认超宽换行 - 布尔 falsetrue

  • tooltip:配合省略属性鼠标经过现实完整提示文本 - 布尔

  • slotName:设置当前列的渲染插槽的名字,典型场景数据格式化、自定义扩展列

<table> Slots 插槽,表格本身一些元素的自定义

  • th/td/tr 自定义其元素

  • columns 表格定义,启动时候会屏蔽 columns 属性

2.5 实战优化

对产品列表利用各属性和列自定义插槽知识点进行几处改造,详细参考截图红色标记,这里注意是用到了一个日期处理库moment对日期进行快速格式化,具体知识点汇聚在下一篇统一讲解。

代码优化后刷新管理页面,查看下效果。

表格在 WEB 的系统中对数据的展示和操作有着很重要的使用占比,因此有着更多更复杂的使用方法,此篇是最常用的基础需要熟练掌握,当然后续随着测试需求平台更多的需求被实现会更多的讲解 Table 的知识点。

 

相关文章:

测试需求平台9-Table 组件应用产品列表优化

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版&#xff0c;拥抱Vue3.0将前端框架替换成字节最新开源的arco.design&#xff0c;其中约60%重构和20%新增内容&#xff0c;定位为从 0-1手把手实现简单的测试平台开发教程&#xff0c;内容将囊括基础、扩展和实战&a…...

targetSdkVersion > 30 如何将下载的网络视频 保存到手机相册里更新

在 targetSdkVersion 31 中&#xff0c;将下载的网络视频保存到手机相册中涉及几个关键步骤。由于 Android 12&#xff08;API 级别 31&#xff09;引入了更多的隐私和安全限制&#xff0c;特别是作用域存储&#xff08;Scoped Storage&#xff09;&#xff0c;因此你需要遵循这…...

C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码

1 K-Medoid算法 K-Medoid&#xff08;也称为围绕Medoid的划分&#xff09;算法是由Kaufman和Rousseeuw于1987年提出的。中间点可以定义为簇中的点&#xff0c;其与簇中所有其他点的相似度最小。 K-medoids聚类是一种无监督的聚类算法&#xff0c;它对未标记数据中的对象进行聚…...

宏定义中#与##的注意事项

1. #是字符串化操作符。它的作用是将宏参数转换成字符串 2. ##是标记粘贴操作符。它的作用是将两个标记连接起来形成一个新的标记 #define TEST1(a) #a #define TEST2(a) b##a/***********************************************************/ 举例&#xff1a;TEST1(hello) 会…...

Java函数式编程

Java函数式编程 Java函数式编程&#xff08;Functional Programming in Java&#xff09;是指使用函数式编程范式来编写Java代码的一种编程方式。函数式编程是一种编程范式&#xff0c;它强调使用函数作为基本构建块&#xff0c;并将计算视为数学上的函数求值&#xff0c;避免…...

【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 深度优先搜索 LeetCode2003. 每棵子树内缺失的最小基因值 有一棵根节点为 0 的 家族树 &#xff0c;总共包含 n 个节点&#xff0c;节点编号为 0 到 n - 1 。给你一个下标从 0 开始的整数数组 parents &#xff0c;其中…...

电脑开机显示器没有信号而且键盘鼠标不亮怎么解决?

大家在使用电脑的过程,开机没有反应是比较经常遇到的问题,就有用户反映说自己的电脑启动之后,显示器无信号,键盘鼠标灯也不亮,怎么操作都没有效果。对开机有影响的硬件主要是内存条,内存条是非常容易松动的,而且金手指如果氧化了,都会导致开不了机 大家在使用电脑的过程…...

RLWE同态加密编码打包——系数打包

RLWE同态加密的明文域 RLWE的加密方案&#xff0c;如BGV、BFV&#xff0c;加密的对象&#xff0c;实际上是分圆多项式环上的一个整系数多项式。而我们在平时接触到的需要加密的数据&#xff0c;如图像或者工资&#xff0c;通常是一个数。所以&#xff0c;在使用RLWE同态加密时…...

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…...

【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口

力扣题目链接 1. 暴力解法 这道题的暴力解法是两层嵌套for循环&#xff0c;第一层循环从 i 0 开始遍历至数组末尾&#xff0c;第二层循环从 j i 开始遍历至找到总和大于等于 target 的连续子数组&#xff0c;并将该连续子数组的长度与之前找到的子数组长度相比较&#xff0…...

MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径

依赖本人写的多平台编译器宏判断&#xff1a; C/C MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客 MACOS头文件依赖&#xff1a; #if defined(_MACOS) #include <libproc.h> #endif #include <mach-o/dyld.h> 只需要链接 libSystem.dylib 就行了&#…...

【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务

这篇文章&#xff0c;主要介绍如何通过Nginx服务器转发客户端的WebSocket接口到后端服务【知识星球】。 目录 一、Nginx配置WebSocket 1.1、Nginx配置内容 1.2、客户端请求地址 1.3、创建WebSocket测试工程 1.4、启动测试 1.5、WebSocket超时问题 1.5.1、设置超时时间 …...

关于高德地图及其APP获取地图数据的研究

刚过完春节没几天&#xff0c;有个客户提出要获取高德地图的数据。 我看了下&#xff0c;回复说&#xff1a;这不是很简单嘛&#xff0c;高德有公开的开放平台&#xff0c;有足够的API支持用户获取数据&#xff0c;开发自己基于高德数据库的应用。 客户回复说&#xff1a;他的要…...

【Python入门教程】Python实现鸡兔同笼

今天跟大家分享一下很久之前自己做的鸡兔同笼求解问题的小游戏&#xff0c;使用公式和基本的判断语句即可实现&#xff0c;可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路&#xff0c;例如应该套几层循环、分几个模块等等。然后在编码时可以先随意…...

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif...

物体检测-系列教程20:YOLOV5 源码解析10 (Model类前向传播、forward_once函数、_initialize_biases函数)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 14、Model类 14.2 前向传播 def forward(self, x, augmentFalse, profileFalse):if augm…...

贪吃蛇(C语言)步骤讲解

一&#xff1a;文章大概 使用C语言在windows环境的控制台中模拟实现经典小游戏 实现基本功能&#xff1a; 1.贪吃蛇地图绘制 2.蛇吃食物的功能&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右方向控制蛇的动作&#xff09; 3.蛇撞墙死亡 4.计算得分 5.蛇身加…...

MySQL 数据库表设计和优化

一、数据结构设计 正确的数据结构设计对数据库的性能是非常重要的。 在设计数据表时&#xff0c;尽量遵循一下几点&#xff1a; 将数据分解为合适的表&#xff0c;每个表都应该有清晰定义的目的&#xff0c;避免将过多的数据存储在单个表中。使用适当的数据类型来存储数据&…...

JavaScript进阶-高阶技巧

文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后&#xff0c;里面的属性值是简单数据类型直接拷贝值&#xff0c;如果属性值是引用数…...

C语言中“#“和“##“的用法

1. 前言 # &#xff1a;把宏参数变为一个字符串, ##&#xff1a;把两个宏参数贴合在一起. 2. 一般用法 #include<stdio.h> #define toString(str) #str //转字符串 #define conStr(a,b) (a##b)//连接 int main() { printf(toString(12345)): //输出字符串&q…...

SQL如何处理包含NULL分组的聚合计算_NULLS LAST排序技巧

SQL中NULL在GROUP BY中被视为相同值而归为一组&#xff0c;但业务上“未填”与“明确为空”需用CASE WHEN区分&#xff1b;ORDER BY NULLS LAST兼容性差&#xff0c;MySQL 5.7需用IF模拟&#xff1b;聚合函数自动忽略NULL&#xff0c;AVG全NULL时返回NULL而非0&#xff1b;WHER…...

Agent学习--LLM--推理熵

平时我们用大模型的时候&#xff0c;可以看到虽然最后出来的是一大段话&#xff0c;但是实际上一般都是采用的是流式输出&#xff0c;即一个字一个字的输出出来&#xff0c;而这每个字的生成&#xff0c;本质是agent在不断地推理下一个字或者词是什么&#xff0c;当它遇到关键决…...

Python数据可视化指南

Python数据可视化指南 后端转 Rust 的萌新&#xff0c;ID "第一程序员"——名字大&#xff0c;人很菜&#xff08;暂时&#xff09;。正在跟所有权和生命周期死磕&#xff0c;日常记录 Rust 学习路上的踩坑经验和"啊哈时刻"&#xff0c;代码片段保证能跑。…...

PyCharm 2023最新汉化指南:一键切换中文开发环境

1. PyCharm 2023中文界面一键配置指南 刚接触Python开发的朋友们&#xff0c;第一次打开PyCharm可能会被满屏的英文吓到。别担心&#xff0c;JetBrains早就考虑到了这个问题&#xff0c;从2020版开始就提供了官方中文语言包。2023年的最新版本更是优化了汉化体验&#xff0c;整…...

TMSpeech:Windows平台离线语音转文字的终极解决方案

TMSpeech&#xff1a;Windows平台离线语音转文字的终极解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而手忙脚乱吗&#xff1f;还在为在线课程笔记而烦恼吗&#xff1f;今天我要向你介绍一…...

HWA_19leetcode83删除链表中的重复元素

题目题解 class Solution:def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:#从链表的头节点开始访问每一个节点cur head#在访问过程中&#xff0c;只要当前节点和当前节点的下一个节点有值&#xff0c;就不断地访问下去while cur and cur.nex…...

解决easyExcel写入Excel时遇到的cglib与asm版本冲突问题

1. 当easyExcel遇上cglib与asm&#xff1a;一场版本冲突引发的血案 最近在项目中使用easyExcel导出数据时&#xff0c;突然遇到了一个让人头疼的报错&#xff1a;ExcelGenerateException伴随着ExceptionInInitializerError。作为一名Java开发者&#xff0c;看到这种嵌套异常第一…...

【生产环境亲测】HANA2.0高可用切换实战指南

SLES 15 SP3 + HANA 2.0 SPS06 生产级 HA 手工切换全流程 | 维护模式规范 | 零数据丢失 | Pacemaker 集群运维 文章标签 SAP HANA SLES 15 SP3 高可用切换 Pacemaker SAP Basis 运维实战 数据库维护 一、前言 在 SLES 15 SP3 + SAP HANA 2.0 SPS06 + Pacemaker/Corosync 高可…...

UE5: 解密Actor Tick的注册时机与执行流程

1. 从“Tick”说起&#xff1a;为什么我们需要关心它&#xff1f; 如果你用过UE5&#xff0c;哪怕只是新建一个空白项目&#xff0c;放一个立方体进去&#xff0c;大概率也见过“Tick”这个词。在蓝图的“事件”图表里&#xff0c;那个每帧自动执行的“Event Tick”节点&#x…...

Bouncy Castle bcpkix-jdk15on 实战:X.509 证书的生成与验证全流程解析

1. 为什么需要Bouncy Castle处理X.509证书&#xff1f; 在Java生态中&#xff0c;虽然JDK自带了java.security包提供基础的证书操作支持&#xff0c;但实际开发中经常会遇到三个痛点&#xff1a;第一&#xff0c;原生API对某些加密算法的支持有限&#xff1b;第二&#xff0c;处…...