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,这样就算彻底解决了我的问题。
好了,就到这吧,后续还会发出新的总结,希望能帮到大家。
相关文章:
vben-admin中渲染table表格时怎么处理不同的数据结构
最近在用vben admin开发后台管理系统,vben admin这个后管端框架封装的非常细,颗粒度非常细,如果了解里面的组件或者api用法,那开发起来非常快。如果不了解,那就非常痛苦了,目前关于vben admin这块的开发问题…...
从零开始在树莓派上搭建WordPress博客网站并实现公网访问
文章目录 序幕概述1. 安装 PHP2. 安装MySQL数据库3. 安装 Wordpress4. 设置您的 WordPress 数据库设置 MySQL/MariaDB创建 WordPress 数据库 5. WordPress configuration6. 将WordPress站点发布到公网安装相对URL插件修改config.php配置 7. 支持好友链接样式8. 定制主题 序幕 …...
Go基础18-理解方法的本质以选择正确的receiver类型
Go语言虽然不支持经典的面向对象语法元素,比如类、对象、继承等,但Go语言也有方法。和函数相比,Go语言中的方法在声明形式上仅仅多了一个参数,Go称之为receiver参数。receiver参数是方法与类型之间的纽带。 Go方法的一般声明形式…...
Go基础12-理解Go语言表达式的求值顺序
Go语言在变量声明、初始化以及赋值语句上相比其先祖C语言做了一些改进,诸如: ● 支持在同一行声明和初始化多个变量(不同类型也可以) var a, b, c 5, "hello", 3.45 a, b, c : 5, "hello", 3.45 // 短变量…...
OJ练习第165题——修车的最少时间
修车的最少时间 力扣链接:2594. 修车的最少时间 题目描述 给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你一个整数 cars ,表示总…...
纯前端实现 导入 与 导出 Excel
最近经常在做 不规则Excel的导入,或者一些普通Excel的导出,当前以上说的都是纯前端来实现;下面我们来聊聊经常用到的Excel导出与导入的实现方案,本文实现技术栈以 Vue2 JS 为例 导入分类: 调用 API 完全由后端来解析数…...
关于一次两段式提交和数据库恢复数据我的一些想法
binlog是服务层的功能,而redolog是innodb引擎的功能,binlog主要用于主从复制,redolog主要用做数据的恢复,我们必须保证binlog和redolog日志数据的一致性。恢复数据时也必须遵守此一致性。 1.如果只写一次redolog会出现什么问题&a…...
阿里巴巴springcloud的gateway网关如何用继承接口WebExceptionHandler定义一个json格式的404错误页面实例
如果你想通过实现 WebExceptionHandler 接口来定义一个返回 JSON 格式的 404 错误页面的实例,可以按照以下方式操作: import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.ster…...
『力扣每日一题07』字符串最后一个单词的长度
气死我啦,今天这道题花了快一个小时,我学完了答案的解法,放上去在线 OJ ,一直报错,找来找去都找不到自己错在哪,明明跟答案一模一样。后来还是学了另一种解法,才跑出来的(̥̥̥̥̥̥̥̥o̥̥…...
成都睿趣科技:抖音开店初期要注意什么
随着社交媒体和短视频平台的崛起,抖音已经成为了一个风靡全球的短视频应用,拥有着庞大的用户群体。因此,越来越多的创业者开始在抖音上开设自己的线上店铺,希望借助这个平台赚取丰厚的利润。然而,在抖音开店初期&#…...
QT 5.13保姆级安装教程
辨清关系 要想学习一个新的东西,我们必须知其事,达其理,悟其道,然后才能无往而不利也! 我们常听到QT、Qt Creator 和 Qt SDK ,这三者究竟是什么,他们之间的关系又是如何的?在安装QT之前我们先来了解一下他们之间的关系: Qt:Qt 是一个跨平台的 C++ 应用程序开发框架,…...
js 创建DOM,并添加父DOM上,移除某个DOM的所有子节点
在sectionIdDiv上,添加子DOM <div ref"sectionIdDiv" class"sectionIdDiv"> </div>创建你要添加的子DOM ## 创建DOM let elementDom document.createElement(div)## 设置DOM的样式 elementDom.style.height "15px" e…...
element el-input 二次封装
说明:为实现输入限制,不可输入空格,长度限制。 inputView.vue <template><!-- 输入框 --><el-input:type"type":placeholder"placeholder"v-model"input"input"inputChange":maxle…...
[源码系列:手写spring] IOC第十三节:Bean作用域,增加prototype的支持
为了帮助大家更深入的理解bean的作用域,特意将BeanDefinition的双例支持留到本章节中,创建Bean,相关Reader读取等逻辑都有所改动。 内容介绍 在Spring中,Bean的作用域(Scope)定义了Bean的生命周期和可见性。包括单例和…...
【性能优化】事件委托
一、为什么要用事件委托 当 dom 有事件处理程序时,我们一般都会直接给它设置事件处理程序,设想一下,如果在一个父元素中有很多个 dom 需要添加事件处理呢?比如 ul 中处在100个 li,每个 li 都有相同的 click 事件&…...
C 风格文件输入/输出---无格式输入/输出---(std::fputc,std::putc,std::fputs)
C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 写字符到文件流 std::fputc, std::putc in…...
建议收藏!Harmony应用配置文件概述(Stage模型)
一. 应用配置文件 每个应用项目必须在项目的代码目录下加入配置文件,这些配置文件会向编译工具、操作系统和应用市场提供应用的基本信息。 在基于Stage模型开发的应用项目代码下,都存在一个app.json5及一个或多个module.json5这两种配置文件。 app.json5…...
金蝶云星空和四化智造MES(WEB)单据接口对接
金蝶云星空和四化智造MES(WEB)单据接口对接 接入系统:四化智造MES(WEB) MES建立统一平台上通过物料防错防错、流程防错、生产统计、异常处理、信息采集和全流程追溯等精益生产和精细化管理,帮助企业合理安排…...
Shell命令切换root用户、管理配置文件、检查硬件
Shell命令切换root用户、管理配置文件、检查硬件 切换root用户 两种方法 su命令详细介绍 sudo命令详细介绍 /etc/passwd文件 /etc/passwd文件里为什么有乱七八糟的用户? /etc/shadow文件 管理配置文件 检查硬件命令 查看CPU 查看GPU 与其他基于UNIX的系统…...
DataX(MySQL同步数据到Doris)
1.场景 这里演示介绍的使用 Doris 的 Datax 扩展 DorisWriter实现从Mysql数据定时抽取数据导入到Doris数仓表里 2.编译 DorisWriter 这个的扩展的编译可以不在 doris 的 docker 编译环境下进行,本文是在 windows 下的 WLS 下进行编译的 首先从github上拉取源码 …...
sql server服务无法启动怎么办?如何正常启动?
sql server软件是一款关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。并且有些应用软件使用过程中是需要sql server数据库的后台支持的,我们在数据编程操作时经常会使用这款编程软件,在编程时系统有时会提示sql server服务无…...
SpringMVC实现文件上传和下载
目录 前言 一. SpringMVC文件上传 1. 配置多功能视图解析器 2. 前端代码中,将表单标记为多功能表单 3. 后端利用MultipartFile 接口,接收前端传递到后台的文件 4. 文件上传示例 1. 相关依赖: 2. 逆向生成对应的类 3. 后端代码…...
Your build is currently configured to use Java 20.0.2 and Gradle 8.0
jdk 版本不适配 下载jdk17 https://www.oracle.com/java/technologies/downloads/#jdk17 参考 JDK17的下载安装与配置(详细教程)_keyila798的博客-CSDN博客...
栈 之 如何实现一个栈
前言 栈最鲜明的特点就是后进先出,一碟盘子就是类似这样的结构,最晚放上去的,可以最先拿出来。本文将介绍的是如何自己实现一个栈结构。 栈的操作 栈是一种先进后出(Last-In-First-Out, LIFO)的数据结构,…...
uni-app:自带的消息提示被遮挡的解决办法(自定义消息提示框)
效果: 代码: 1、在最外层或者根组件的模板中添加一个容器元素,用于显示提示消息。例如: <div class"toast-container" v-if"toastMessage"><div class"toast-content">{{ toastMessa…...
PHP设备检验系统Dreamweaver开发mysql数据库web结构php编程计算机网页代码
一、源码特点 PHP设备检验系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88306259 php设备检验系统1 …...
Windows 可以使用以下快捷键打开终端(命令提示符)
Windows 可以使用以下快捷键打开终端(命令提示符) 使用快捷键 Win R 打开 “运行” 对话框,然后输入 “cmd” 并按下 Enter 键。这将打开默认的命令提示符窗口。 使用快捷键 Ctrl Shift Esc 打开任务管理器,然后在 “文件” …...
Netty编程面试题
1.Netty 是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。 2.Netty 的特点是什么? 高并发&a…...
math_review
topics mathmatics supreme and optimumNorm and Linear producttopology of R*Continuious Function supreme and optimum Def 1: 非空有界集合必有上确界 common norm (1) x ∈ \in ∈ Rn, ||x||2 x 1 2 x 2 2 . . . x n 2 \sqrt {x_1^2x_2^2...x_n^2} x12x22.…...
肖sir__设计测试用例方法之场景法04_(黑盒测试)
设计测试用例方法之场景法 1、场景法主要是针对测试场景类型的,顾也称场景流程分析法。 2、流程分析是将软件系统的某个流程看成路径,用路径分析的方法来设计测试用例。根据流程的顺序依次进行组合,使得流程的各个分支能走到。 举例说明&…...
万网备案初审过了后网站能访问吗/互联网营销师报名
题目描述: 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 Input 只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。 字符串是待替换的字符串,字符串长度小于等于30个字符,且不含空格…...
网站空间租用费用/广告投放公司
6月5日下午,中国国际广播电台(以下简称“国广”)俄东中心和成都电视台经济资讯频道联合摄制的纪录片《针传》在成都举行首映。这是一部讲述中国传统文化的纪录片,该片介绍了中国针灸悠久的历史、发展和传承。成都针灸医师邹群和她的徒弟们也来到首映仪式…...
龙岩做网站开发找哪家/班级优化大师
1. 路由器基本配置请注意:JUNIPER路由器命令不是即时生效的,而是需要通过commit命令来使的命令生效,如果是双的路由引擎,则需要通过commit synchronize来使得命令生效并让配置在两个路由引擎(RE)里同步配置…...
win7用自己ip做网站/搜索百度下载安装
系列文章目录 🍑 Python语言基础—注释的作用及分类 🍑 Python语言基础—常用运算符总结 🍑 Python语言基础—定义变量与数据类型 🍑 Python语言基础—if判断和循环总结 🍑 Python语言基础—理解面向对象 🍑…...
做标签网站/理发培训专业学校
docker images|grep none|awk {print $3}|xargs docker rmi 转载于:https://www.cnblogs.com/jiuchongxiao/p/9597069.html...
中港海通网站是谁做的/任务放单平台
本文转自网络,对疑问的地方做了修改 官方参考文献:http://www.mongovue.com/tutorials/ MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用, 一、基础操作 新增一个连接 进入的界面形如 二、进阶操…...