前情


公司有经常需要做一些后台管理页面,我们选择了Ant Design Pro,它是基于 Ant Design 和 umi 的封装的一整套企业级中后台前端/设计解决方案。

产品效果图


最新接到的一个后台管理界面需求,如下图。需要实现数据导出功能,ProTable搜索栏默认有重置和查询按钮,所以需要增加一个导出按钮,那导出的条件是依赖搜索条件的,不像查询按钮本身就会触发request方法,里面可以拿到搜索表单的值。

解决方案

方式1:使用useRef,通过ProTable的fromRef获取表单对象,再通过表单对象下的getFieldsValue获取所有表单值,也可以以通过getFieldValue(key)获取单个表单值


关键代码:


const proTableFormRef = useRef<ProFormInstance>();
const exportBookingData = () => {
const formFieldsValue = proTableFormRef.getFieldsValue();
// 这里可以查到当前搜索表单的值
console.log('---- exportBookingData ----:', formFieldsValue );
// 接接参数,发起请求
...
}; ... <ProTable
size="middle"
rowKey="id"
columns={columns}
formRef={proTableFormRef}
actionRef={actionFormRef}
options={{ reload: false, density: false, fullScreen: true }}
search={{
labelWidth: 'auto',
optionRender: ({ searchText, resetText }, { form }) => {
return [
<Button
key="reset"
style={{ marginRight: '10px' }}
onClick={() => {
actionFormRef?.current?.reset();
}}
>
{resetText}
</Button>,
<Button key="search" type="primary" htmlType="submit" style={{ marginRight: '10px' }}>
{searchText}
</Button>,
<Button
key="export"
loading={isExportIng}
type="primary"
onClick={exportBookingData}
>
导出
</Button>,
];
},
}}
pagination={{
size: 'default',
defaultPageSize: 10,
showTotal: (total) => `共 ${total} 条`,
}}
request={requestBookingDataList}
/>

方式2:在通过search下的optionRender方法自定导出按钮的时候,它的第二个参数可以查到当前搜索表单对象,可以把此表单对象直接传给导出事件绑定的方法,再通过表单对象下的getFieldsValue获取所有表单值,也可以以通过getFieldValue(key)获取单个表单值

关键代码:

const exportBookingData = (form) => {
const formFieldsValue = form.getFieldsValue();
// 这里可以查到当前搜索表单的值
console.log('---- exportBookingData ----:', formFieldsValue );
// 接接参数,发起请求
...
}; ... <ProTable
size="middle"
rowKey="id"
columns={columns}
formRef={proTableFormRef}
actionRef={actionFormRef}
options={{ reload: false, density: false, fullScreen: true }}
search={{
labelWidth: 'auto',
optionRender: ({ searchText, resetText }, { form }) => {
return [
<Button
key="reset"
style={{ marginRight: '10px' }}
onClick={() => {
actionFormRef?.current?.reset();
}}
>
{resetText}
</Button>,
<Button key="search" type="primary" htmlType="submit" style={{ marginRight: '10px' }}>
{searchText}
</Button>,
<Button
key="export"
loading={isExportIng}
type="primary"
onClick={() => exportBookingData(form)}
>
导出
</Button>,
];
},
}
pagination={{
size: 'default',
defaultPageSize: 10,
showTotal: (total) => `共 ${total} 条`,
}}
request={requestBookingDataList}
/>
  • 注:二种方式都可以完成此需求,从使用方便考虑,推荐第二种

思考

定义一个标志变量,标示当前是查询还是导出,在导出的时候主动触发查询方法,在查询方法里

拿到表单值,再把当前的表单值用于导出请求,方法千千W,你是否有更好的方式推荐了?期待你的分享。

Ant Design Pro项目ProTable怎么获取搜索表单值的更多相关文章

  1. Ant Design Pro项目打开页设为登录或者其他页面

    Ant Design Pro项目打开页设为登录或者其他页面 一.打开页设为登录页 首先找到utils包中的authority文件,在该文件中找到如下代码: export function getAut ...

  2. 【后台管理系统】—— Ant Design Pro 项目爬坑(一)

    1.表单rule中可以分对象处理不同规则 <FormItem label="类型名称" {...formLayout}> { form.getFieldDecorato ...

  3. ant design pro(一)安装、目录结构、项目加载启动【原始、以及idea开发】

    一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等, ...

  4. 使用ant design pro搭建项目

    脚手架搭建 git clone --depth=1 https://github.com/ant-design/ant-design-pro.git my-project 然后 cd my-proje ...

  5. 阿里开源项目之Ant Design Pro

    本篇文章主要包含的内容有三个方面. 第一.Ant Design Pro简介; 第二.Ant Design Pro能做什么; 第三.初步使用; 我相信通过这三个方面的讲解能让你大概知道Ant Desig ...

  6. 【后台管理系统】—— Ant Design Pro入门学习&项目实践笔记(三)

    前言:前一篇记录了[后台管理系统]目前进展开发中遇到的一些应用点,这一篇会梳理一些自己学习Ant Design Pro源码的功能点.附:Ant Design Pro 在线预览地址. Dashboard ...

  7. Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行

    ant-design-pro ----> version :2.3.1 由于网上Ant Design Pro+Electron的资料太少,我就贡献一点经验   最近需要讲AntD Pro项目(以 ...

  8. ant design pro (十五)advanced 使用 API 文档工具

    一.概述 原文地址:https://pro.ant.design/docs/api-doc-cn 在日常开发中,往往是前后端分离的,这个时候约定好一套接口标准,前后端各自独立开发,就不会被对方的技术难 ...

  9. Ant Design Pro快速入门

    在上一篇文章中,我们介绍了如何构建一个Ant Design Pro的环境. 同时讲解了如何启动服务并查看前端页面功能. 在本文中,我们将简单讲解如何在Ant Design Pro框架下实现自己的业务功 ...

  10. Ant Design Pro 脚手架+umiJS 实践总结

    一.简介 1.Ant Design Pro Ant Design Pro是一款搭建中后台管理控制台的脚手架 ,基于React,dva.js,Ant Design (1)其中dva主要是控制数据流向,是 ...

随机推荐

  1. iframe嵌套登录页-页面无法加载

    背景 活动页面和登录页跨域,过去都是跳转到登录页登录之后再跳转回来,体验不好. 现在需要将登录模块嵌入到活动页,因为懒,不想开发重复的模块,首先我想到的是iframe 刚开始还能正常使用,一段时间后安 ...

  2. [TK] 矩阵取数游戏<简单版> hzoi-tg-906-2

    本题是一个坐标DP问题 状态转移 首先我们注意到,一个状态只能由两种前置状态得到:取左边的数和取右边的数,因此我们以状态为阶段定义如下: \(f[a][b][c]\) 为状态转移数组,其中 \(a\) ...

  3. Autodesk Maya无法打开 refrence file 解决办法

    删除预设 预设的位置在: 我的文档/maya/version/ prefs 备注: 我的文档/maya/version/ 无法确定是不是该路径下的所有文件夹都能删除,所以只剪切了 prefs 文件夹出 ...

  4. 微信小程序上拉加载

    下面是一个示例,在个人使用的过程中按自己需求进行更改 创建一个DataController控制器 php artisan make:controller DataController 创建一个Data ...

  5. 云原生周刊:K8s 在 v1.27 中移除的特性和主要变更

    文章推荐 K8s 在 v1.27 中移除的特性和主要变更 随着 Kubernetes 发展和成熟,为了此项目的整体健康,某些特性可能会被弃用.移除或替换为优化过的特性.基于目前在 v1.27 发布流程 ...

  6. Curve 分布式存储在 KubeSphere 中的实践

    Curve 介绍 Curve 是网易开发的现代存储系统,目前支持文件存储 (CurveFS) 和块存储 (CurveBS).现在它作为一个沙盒项目托管在 CNCF. Curve 是一个高性能.轻量级操 ...

  7. HTML常见的文本语义标签

    列举HTML里一些常用的块内语义元素.可以通过F12来查看每个示例. <strong>:即"重点内容",通常是加粗,对应Markdown中的**加粗. 示例:归约数往往 ...

  8. Java新特性-stream流

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达 ...

  9. springboot实现验证码校验

    验证码校验共三步 1.创建验证码 2.发送验证码 3.验证码校验 创建生成验证码的工具类 public class RandomValidateCode { private Random random ...

  10. myBatis插入操作获取不到返回的自增id问题

    myBatis插入操作后想返回自增 id 有多种方式 其中一种使用率较高的就是: 在<insert></insert> 标签中添加 useGeneratedKeys 和 key ...