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

这篇具有很好参考价值的文章主要介绍了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:2000
   message:null,
   data:{
          list: [....],
          last: 161,
          count: 1610,
          pageNo: 1,
          pageSize: 10,
   }
}

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

{
   resultCode:2000
   resultMessage: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,这样就算彻底解决了我的问题。

好了,就到这吧,后续还会发出新的总结,希望能帮到大家。文章来源地址https://www.toymoban.com/news/detail-707323.html

到了这里,关于vben-admin中渲染table表格时怎么处理不同的数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vben Admin 的介绍以及使用

    Vben Admin官方文档地址 好像官网挂了 !! 嘤嘤嘤嘤嘤 因为最近业务需要,项目使用 vben作为前端框架,开始了解并学习 vben 的使用,发现在网上很少能够找到 vben 相关的教程以及视频, 对于前端方面了解较少,以下内容仅代表个人理解,如有错误,欢迎评论指正 Vue-Vben-Admin 是一个基于

    2023年04月09日
    浏览(24)
  • vue+Element UI Table表格动态渲染表头内容及操作按钮

    循环表格头信息数组 封装操作组件并引入表格文件内 配置表头信息数组及添加操作事件

    2024年02月13日
    浏览(48)
  • 管理后台UI框架vue-vben-admin运行

    Vue Vben Admin 是一个免费开源的中后台模版。使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案,也可用于学习参考。 Github地址: https://github.com/anncwb/vue-vben-admin 文档地址: https://vvbin.cn/doc-next/ Tailwind CSS Ant Design Vue 2.0 node 和 git -项目开发环境 Vi

    2024年02月06日
    浏览(29)
  • yudao-ui-admin-vben管理后台:基于最新vben 框架的企业级管理后台应用解决方案

    摘要: 本文主要介绍了yudao-ui-admin-vben管理后台,一个基于最新vben 框架的企业级管理后台应用解决方案。文章首先概述了yudao-ui-admin-vben管理后台的技术栈和功能特点,然后深入探讨了其架构设计、核心模块实现以及性能优化等方面的技术细节。最后,文章总结了yudao-ui-admi

    2024年04月27日
    浏览(23)
  • vue vben admin 使用, (个人感觉这项目封装的太深了!!!!)

    我们是不会被困难打败的, 只会越战越勇! 开启了表单搜索功能, demo 代码是 formtable 组件, 个人还是比较喜欢 template 方式, 这样的方式使用不了 getForm 这种方法 需要注意的是, 如果使用了组件表单搜索功能, 就是说你需要提供一个获取数据的api, 这里着重去看怎么适配表格需要的

    2024年02月06日
    浏览(34)
  • vue纯前端导入excel,获取excel的表格数据渲染el-table

    最近有个需求,最开始列表数据是通过新增按钮一条条添加的,但是部分数据量可能上百条,客户自己手选会很慢,所以产品经理给了个需求要求可以通过上传excle文件进行导入。 经过网上查询及涉及自己项目,实现了此功能。 第一步:安装插件,我安的是0.16.0;原因是默认

    2024年02月16日
    浏览(37)
  • 【前端】vue3+ts+vite,el-table表格渲染记录重复情况

    给自己一个目标,然后坚持一段时间,总会有收获和感悟! 在使用vue的过程中,总会遇到一些有疑问的地方,总结就能够加深印象,下次再出现的时候也有个参考的地方。 Element UI 的 el-table 组件是一个强大的表格组件,提供了许多常见的属性来配置和定制表格的外观和行为

    2024年02月04日
    浏览(33)
  • vue大数据表格上万条数据,树型表格,解决el-table表格数据量过大渲染卡死的问题,使用umy-ui的大数据表格虚拟表格虚拟滚u-table解决。

    先看看效果吧,拿实例说话,直接渲染四万多条数据不分页,树形表格可以展开 直接上代码: 第一步:引入表格组件:自行按照官方文档引入即可 第二步:具体页面实现代码: 这是HTMl代码,多的不介绍,基本方法和el-atble没什么区别,只是tl-table的基础上加了几个属性,这

    2024年02月11日
    浏览(35)
  • vue3 组合式 ant.design组件Table嵌套表格,从后端获取数据并动态渲染

    在根据官方文档使用ant.design中的嵌套表格时,发现官方文档很多地方都不够详细。在过程中踩了不少坑,例如: 子表如何获取父表的数据? 如何获取子表的行索引? 如何让子表的数据源来自父表该行的数据? 总之,最后还是磕磕绊绊做完了功能,于是第一时间把代码整理

    2024年02月15日
    浏览(27)
  • elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

    效果图如下: 首先 首先:需要在表格行加入 template slot-scope=\\\"{ row }\\\" /template标签  2.在methods里面加入这个方法:  3.去设置自己喜欢的颜色: //还有另一种(这种后端返回的数据里面带有背景色的字段)    

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包