Ant Design Pro 之 ProTable使用操作


Posted in Javascript onOctober 31, 2020

标签<ProTable>

Ant Design Pro 之 ProTable使用操作

Pro-Table 是阿里Ant Design Pro V4版本,在Table基础上再封装的一个组件,包含完整的增删改查逻辑,不用复杂的操作,简单几个配置即可实现

官网Api地址

https://protable.ant.design/

示例

V4版本刚出不久,网上的教程还比较少,踩了不少坑,把自己学习过程分享出来,希望可以帮到你

创建项目(需要node.js及npm环境)

npm config set registry https://registry.npm.taobao.org
npm i yarn -g
yarn config set registry https://registry.npm.taobao.org
//进入你准备创建项目的目录
yarn create umi my-app
cd my-app
yarn
yarn start

创建项目完成后如图

Ant Design Pro 之 ProTable使用操作

登录后如图

Ant Design Pro 之 ProTable使用操作

添加菜单

V4版本目录结构有一些改变,影响不大,按步骤创建就行了

Ant Design Pro 之 ProTable使用操作

完成后,在basicCustomer.tsx中写入helloworld,测试能否成功访问

import React from "react"; 
class Customer extends React.Component{
 
 render(){
  return (
    <div>helloworld</div>
  );
 }
} 
export default Customer;

成功后用下面代码替换

import { DownOutlined, PlusOutlined } from '@ant-design/icons';
import { Button, Dropdown, Menu} from 'antd';
import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
import { selectPage } from './service'; 
 
const TableList: React.FC<{}> = () => {
 const actionRef = useRef<ActionType>();
 const columns: ProColumns[] = [
  {
   title: '客户名称',  //表头显示的名称
   dataIndex: 'name', // 列数据在数据项中对应的路径,支持通过数组查询嵌套路径
   width: '20%',
  },
  {
   title: '经营性质',
   dataIndex: 'nature',
   filters: [   // 表头的筛选菜单项
    { text: '个人', value: '个人' },
    { text: '一般纳税人', value: '一般纳税人' },
   ],
   width: '20%',
  },
  {
   title: '联系人',
   dataIndex: 'linkMan',
   hideInSearch : 'false', // 设置搜索栏是否显示
  },
  {
   title: '联系电话',
   dataIndex: 'linkPhone',
   hideInSearch : 'false',
  },
  {
   title: '税号',
   dataIndex: 'taxNumber',
  },
  {
   title: '状态',
   dataIndex: 'status',
   valueEnum: {        //当前列值的枚举
    false: { text: '禁用', status: 'Error' },    //false是后台传的值,text是页面显示的,status是antd提供的状态,具体看api
    true: { text: '启用', status: 'Success' },
   },
  },
 ];
 
 return (
  <PageHeaderWrapper>  //布局标签
   <ProTable      //表格Pro组件
    headerTitle="查询表格"  //表头
    actionRef={actionRef}  //用于触发刷新操作等,看api
    rowKey="id"        //表格行 key 的取值,可以是字符串或一个函数
    toolBarRender={(action, { selectedRows }) => [
     <Button icon={<PlusOutlined />} type="primary" onClick={()=>{}}>
      新建
     </Button>,
     selectedRows && selectedRows.length > 0 && (
      <Dropdown
       overlay={
        <Menu
         selectedKeys={[]}
        >
         <Menu.Item key="remove">批量删除</Menu.Item>
        </Menu>
       }
      >
       <Button>
        批量操作 <DownOutlined />
       </Button>
      </Dropdown>
     ),
    ]}
    request={(params) => selectPage(params)}//请求数据的地方,例子是用mock模拟数据,我是在后台请求的数据
    columns={columns}  //上面定义的
    rowSelection={{}}
   />
  </PageHeaderWrapper>
 );
}; 
export default TableList;

下面是请求数据的service

import Qs from "qs";
import request from "umi-request";
 
const getRandomuserParams = (params:any) => {
 return {
  pageSize: params.pageSize,
  pageIndex: params.current,
  ...params
 };
}; 
 
export async function selectPage(params:any) {
 console.log(getRandomuserParams(params))
 const res = request('/server/api/basic/basicCustomer/selectPageListCopy', {
  method: 'POST',
  headers:{
   'Content-Type':'application/x-www-form-urlencoded',
   appId: '1117664844619845632',
   token: 'eyJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE1ODYzNDQ2MjcsImlkIjoiNzkxNzA2Y2Q2M2RiM2EwMSIsImV4cCI6MTU4ODkzNjYyNywiaWF0IjoxNTg2MzQ0NjI3fQ.Gtmm-TZHlMFiEV34ncrLryjzNsv07DwnCYsChQcYEWg'
  },
  data: Qs.stringify(getRandomuserParams(params)),
 });
 
 return res;
}

Ant Design Pro 之 ProTable使用操作

前后端分离会有跨域问题出现,这里在proxy里配置代理解决

Ant Design Pro 之 ProTable使用操作

'/server/api/'表示以此开头的请求都拦截,pathRewrite表示发送请求时,所省略的

配置完成后访问,

Ant Design Pro 之 ProTable使用操作

可以看到已经成功了,包括分页,以及表头筛选,条件查询都是可以用的,新增删除还没有写,等后面再补充吧!

补充知识:ant-design-pro的ProTable中column中设置valueEnum属性

如果是给定得默认值,使用如下:

{
   title: '是否过期',
   dataIndex: 'overdue',
   key: 'overdue',
   valueEnum: {
   0: {text: '未过期',},
   1: {text: '已过期',},
   },
 }

或者先定义

const enumList = {
 0: { text: '未过期' },
 1: { text: '已过期' },
 };
------------------------然后使用----------------------------
  {
      title: '是否过期',
      dataIndex: 'overdue',
      key: 'overdue',
      valueEnum: enumList
    }

但是如果valueEnum的值是通过接口获取的,比如说,你想用数据库里的用户id作为key,userName作为text:值,因为数据是会动态变化的,无法用枚举直接自定义,下面给出一种解决方法:

const [datas, setDatas] = useState({})
  useEffect(() => {
  //调用接口
   listOverdue().then((res) => {
   //如果响应成功
    if(res.bizCode===200){
     let data = {};
     //将拿到的返回值遍历
     res.data.map(item=>{
  //使用接口返回值的id做为 代替原本的0,1
      data[item.id]={
  //使用接口返回值中的overdueValue属性作为原本的text:后面的值
       text: item.overdueValue,
      }
     })
     setDatas(data) 
    }     
  })
 }, []);
 ----------------然后使用-----------------------------
 {
   title: '是否过期',
   dataIndex: 'overdue',
   key: 'overdue',
   valueEnum: datas
   }

这样就可以使用了啊~

以上这篇Ant Design Pro 之 ProTable使用操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用jQuery的deferred对象实现异步按顺序加载JS文件
Mar 17 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 Javascript
js实现背景图片感应鼠标变化的方法
Feb 28 Javascript
js正则表达式中exec用法实例
Jul 23 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
angular4中关于表单的校验示例
Oct 16 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
react ant Design手动设置表单的值操作
Oct 31 #Javascript
解决pycharm双击但是无法打开的情况
Oct 31 #Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 #Javascript
antd design table更改某行数据的样式操作
Oct 31 #Javascript
antd配置config-overrides.js文件的操作
Oct 31 #Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 #Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 #Javascript
You might like
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
小结Python的反射机制
2020/09/28 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
自荐信包含哪些内容
2013/10/30 职场文书
甘南现象心得体会
2014/09/11 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
税务会计岗位职责
2015/04/02 职场文书
施工安全员岗位职责
2015/04/11 职场文书
学校通报表扬范文
2015/05/04 职场文书
小学音乐课教学反思
2016/02/18 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers