vben-admin中渲染table表格时怎么处理不同的数据结构

最近在用vben admin开发后台管理系统,vben admin这个后管端框架封装的非常细,颗粒度非常细,如果了解里面的组件或者api用法,那开发起来非常快。如果不了解,那就非常痛苦了,目前关于vben admin这块的开发问题的博客很少,所以有的问题很难查到。我经历了这样的过程,于是就把在开发中遇到的问题总结下来,希望让能用到的同学少走一点弯路。

一、接口请求回来的数据结构不匹配现在的表格组件怎么办

首先我遇到的第一个问题就是,后端返回了数据,但是数据结构和数据名称都不是我想要的,因为table表格组件是封装好的,其中的字段名也都是定好的,那如果后端返回的数据结构和数据名不一样怎么办呢?

先看代码

// 获取页面的列表数据
// getRuleList();
const [registerTable, { getRawDataSource, reload, updateTableDataRecord, getForm }] = useTable({api: getRuleList,columns,formConfig: {labelWidth: 120,schemas: searchFormSchema,autoSubmitOnEnter: true,showResetButton: false,showSubmitButton: false,},beforeFetch: (params) => {params.ruleId = query.ruleId;return params;},afterFetch: (data) => {console.log('-------------------请求之后的参数处理---------');// 获取接口的原始数据getRawData();return data;},useSearchForm: true,bordered: true,showIndexColumn: false,
});

对于getRuleList这个接口,我希望返回的数据结构是这样的:

{code:2000message:null,data:{list: [....],last: 161,count: 1610,pageNo: 1,pageSize: 10,}
}

但是现在后端返回的数据结构是这样的:

{resultCode:2000resultMessage:null,resultData:{records: [....],pageCount: 161,totalCount: 1610,pageNum: 1,pageSize: 10,}
}

这个时候就需要在接口请求数据回来后做一层转换了;

代码如下:

//获取客户资料列表
export const getRuleList = (params: any) => {return new Promise((resolve, reject) => {defHttp.post<any>({url: Api.GetRuleList,params,}).then((res) => {console.log('-----------列表返回的数据------------');console.log(res);resolve({code:res.resultCode,message:res.message,data:{list: res.resultData.records,last: res.resultData.pageCount,count: res.resultData.totalCount,pageNo: res.resultData.pageNum,pageSize: res.resultData.pageSize,}});});});
};

做了一层转换之后,现在的数据结构满足这个需求了;

这个问题就解决了,表单数据渲染出来了。
但是又有新的数据来了,如果页面带有搜索表格,表格中的数据怎么反显?

2、带有表单和表格的页面,表单数据怎么反显?

这个问题需要分两步完成,第一步:拿到表单数据;第二步:怎么赋值到表单中;

我遇到这个问题是因为表格数据可以反显了,但是表单数据就拿不到了。

// 获取页面的列表数据
// getRuleList();
const [registerTable, { getRawDataSource, reload, updateTableDataRecord, getForm }] = useTable({api: getRuleList,columns,formConfig: {labelWidth: 120,schemas: searchFormSchema,autoSubmitOnEnter: true,showResetButton: false,showSubmitButton: false,},// 请求数据接口之前的处理函数beforeFetch: (params) => {params.ruleId = query.ruleId;return params;},// 请求接口数据之后的处理函数afterFetch: (data) => {console.log('-------------------请求之后的参数处理---------');// 获取接口的原始数据并给表单赋值,使表单反显getRawData();return data;},useSearchForm: true,bordered: true,showIndexColumn: false,
});

一、解决第一步的问题:拿到表单数据

在afterFetch这个处理函数中打印请求回来时,打印data,打印不出来,这个时候,我们不知道data是什么数据,不过从后面渲染的页面数据来看,这个data应该是res.data.list,list里面是不包含表单数据,只包含表格数据,那我怎么拿到原始的请求数据呢?

vben admin提供了一个方法 useTable中的 getRawDataSource (请看代码中是如何引入的)可以拿到接口的原始数据,这个时候就可以拿到表单数据了。

// 获取接口的原始数据
// getRawData();
// 获取接口的完整数据
function getRawData() {console.log('请在控制台查看!');console.log(getRawDataSource());// 获取到请求回来的原始数据,然后对原始数据赋值let getFormData = getRawDataSource();// 第一步 拿到表单数据fromData.name = getFormData.data.name;fromData.departmentName = getFormData.data.departmentName;fromData.field = getFormData.data.field;fromData.scenarioName = getFormData.data.scenarioName;fromData.applicableUserName = getFormData.data.applicableUserName;console.log('---------------form表单-----------------');console.log(fromData);// 第二步 对表单数据进行赋值let form = getForm();console.log('---------------获取到的form表单数据-----------------');console.log(form);getForm().setFieldsValue({datalistName: fromData.departmentName,department: fromData.departmentName,field: fromData.field,UsageScenario: fromData.scenarioName,applicableUser: fromData.applicableUserName,});
}

二、解决第二步的问题:把拿到的数据赋值给表单

useTable中提供了getForm这个方法,getForm这个方法中包含了对表单处理的各种方法,其中对表单赋值的方法是setFieldsValue,设置表单数据的方法。(上面第一步的代码也包含了第二步的代码)

// 第二步 对表单数据进行赋值let form = getForm();console.log('---------------获取到的form表单数据-----------------');console.log(form);getForm().setFieldsValue({datalistName: fromData.departmentName,department: fromData.departmentName,field: fromData.field,UsageScenario: fromData.scenarioName,applicableUser: fromData.applicableUserName,});

第一步,第二步的问题都解决了,我们还有一步要完成,就是什么时候调用getRawData去获取数据,去赋值。
这个时候我们就要用到了afterFetch,在afterFetch中调用getRawData,这样就算彻底解决了我的问题。

好了,就到这吧,后续还会发出新的总结,希望能帮到大家。

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

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

相关文章

linux-awk命令

目录 1.linux awk 模糊查询 2.linux awk 取列 2 3.linux awk 多个条件and查询 4.linux awk取列 1 5.linux awk取行 6.linux awk 所有pod日志查询 7.linux awk 批量删除pod 1.linux awk 模糊查询 释&#xff1a;~ 为包含&#xff0c;!~ 为不包含 【1】查询test.log文件…

Linux工具(一)

前言&#xff1a;Linux是一个开源的操作系统&#xff0c;它拥有庞大而活跃的开发社区&#xff0c;为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员&#xff0c;也适用于普通用户&#xff0c;可以帮助他们完成各种任务&#xff0c;从简单的文件管…

题目 1057: 二级C语言-分段函数

有一个函数如下&#xff0c;写一程序&#xff0c;输入x&#xff0c;输出y值。 保留两位小数 样例输入 1 样例输出 1.00 这道题的思路很简单&#xff0c;我直接用if判断输入的X对应的函数Y的区间&#xff0c;代入对应的函数&#xff0c;求出结果。记得变量用浮点型&#xff…

JS操作字符串方法学习系列(3)-每天学习10个方法

目录 字符串包含 (Includes)**:**字符串字符替换 (CharAt 和 CharCodeAt)**:**字符串逆序 (Reverse)**:**字符串拼接 (Join)**:**字符串查找最大/最小字符 (Max/Min)**:**字符串重复填充 (PadStart 和 PadEnd)**:**字符串按字母排序 (Sort)**:**字符串分组 (Chunking)**:**字符…

手游(偏二次元)简记

游戏上市时间开发商、代理/发行公司类型、品质、乐趣日常肝度周本、活动肝度和氪度等崩坏&#xff1a;星穹铁道2023年4月26日米哈游回合制二次元手游&#xff0c;有场景地图可自由活动。Top3水平。建模精美&#xff0c;动画级演出&#xff0c;无PVP。乐趣&#xff1a;剧情、集卡…

亚马逊云科技面向游戏运营活动的AI生图解决方案

随着Stable Diffusion等AI生图方案逐步普及&#xff0c;越来越多的场景被开发和落地。其中面向游戏C端玩家的AI生图营销活动场景正在被逐步验证&#xff1a;在某个游戏社区中&#xff0c;玩家一键从手机上传一张照片&#xff0c;AI会将自动识别该照片中的元素并替换成游戏中相应…

今年嵌入式行情怎么样?

今年嵌入式行情怎么样&#xff1f; 嵌入式技术今年可以说是IT领域中最炙手可热的之一。随着中年危机和内卷问题的出现&#xff0c;越来越多的互联网从业者将目光投向了嵌入式领域。国内的嵌入式市场一直受终端需求变化的影响而波动&#xff0c;但随着国内产业自主化的发展趋势…

Python匿名函数

简单来说&#xff0c;匿名函数就是懒。 结构 函数名 lambda 参数 : 函数体 fun lambda x,y : x*y*y fun(3,5)优点 可以让写代码更“懒”一点

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家&#xff0c;试图创建患者是否患有心脏病的预测因子。目前&#xff0c;您正在试验 11 种不同的特征&#xff08;潜在心脏病指标&#xff09;和 XGBoost 分类模型&#xff0c;您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

Docker的基本操作

Docker的基本操作 操作常见指令 # 推送镜像到服务 docker push # 从服务拉去镜像 docker pull # 构建镜像 docker build # 保存镜像为一个压缩包 docker save # 加载镜像 docker load镜像加载、删除等 拉取nginx docker pull nginx查看镜像 docker images # 只查看id doc…

C++ 霍夫变换圆形检测

霍夫变换圆形检测 一、检测原理二、实现步骤三、算法实现一、检测原理 HoughCircles 参数说明: HoughCircles(   InputArray image,  // 输入图像 ,必须是 8 位的单通道灰度图像   OutputArray circles,  // 输出结果,发现的圆信息   Int method,  // 方法 - HOUGH…

thinkphp:查询本周中每天中日期的数据,查询今年中每个月的数据,查询近五年每年的总数据

一、查询本周中每天中日期的数据 结果&#xff1a; 以今天2023-09-14为例&#xff0c;这一周为2023-09-11~2023-09-07 代码 后端thinkphp: //查询本周每天的的总金额数 //获取本周的起始日期和结束日期 $weekStart date(Y-m-d, strtotime(this week Monday)); $weekEnd …

【QT--使用百度地图API显示地图并绘制路线】

QT--使用百度地图API显示地图并绘制路线 前言准备工作申请百度地图密钥(AK)安装开发环境 开发过程新建项目ui界面GPSManager类主窗口Map 效果展示 前言 先吐槽一下下&#xff0c;本身qt学的就不咋滴&#xff0c;谁想到第一件事就是让写一个上位机工具&#xff0c;根据CAN总线传…

x86架构基础汇编知识

​ 通用寄存器 EAX 32位 函数返回值 AX 低16位 AH 高八位 AL 低八位 EBX 32位 ECX 32位 循环次数&#xff0c;this指针 EDX 32位 EBP 32位 栈底寄存器 ESP 32位 栈顶寄存器 ESI 源索引寄存器 EDI 目标索引寄存器 EIP 无法直接通过汇编操作 例子 mov al&#xff0c;0xff …

web端程序访问过慢时如何判断问题

当Web端程序访问过慢时&#xff0c;可以按照以下步骤进行问题判断和排查&#xff1a; 1.确认问题&#xff1a; 确认Web端程序访问真的过慢&#xff0c;可以通过以下方法进行测试&#xff1a; 在不同浏览器和设备上测试访问速度&#xff0c;以排除个别设备或浏览器的问题。 …

python 第一次作业

1.使用turtle换一个五环 2.设计这样一个程序&#xff1a;输入一个数字 判断它是不是一个质数 使用turtle换一个五环&#xff1a; >>> import turtle #导入模块 >>> turtle.width(10) #设置圆圈宽度 >>> turtle.color("blue&qu…

Tomcat7+ Weak Password Backend Getshell Vulnerability

漏洞描述 Tomcat 支持通过后端部署 war 文件&#xff0c;所以我们可以直接将 webshell 放入 Web 目录下。为了访问后端&#xff0c;需要权限。 Tomcat7 的权限如下&#xff1a; 经理&#xff08;后台管理&#xff09; 管理器-GUI&#xff08;HTML 页面的权限&#xff09;管理…

WMS系统库存条码管理

1. 定义 库存条码管理是WMS系统中的一项关键功能&#xff0c;通过对仓库内货物进行条码标识和管理&#xff0c;实现对库存的精确追踪和控制。库存条码可以是一维条码&#xff08;如条形码&#xff09;或二维条码&#xff08;如QR码&#xff09;&#xff0c;用于唯一标识和识别…

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

(1)数据库 MSQ 数据库 安装 使用 以及增删改查

下载官网&#xff1a;MySQL :: Download MySQL Shell 常见的数据库分为&#xff1a; 关系型数据库&#xff0c; Oracle、MySQL、SQLServer、Access非关系型数据库&#xff0c; MongoDB、Redis、Solr、ElasticSearch、Hive、HBase 安装过程 使用过程