Ant Design Pro 新增一个表格页面(一)

本文档详细记录了使用AntDesignPro(v5+typescript)创建一个显示用户列表的表格页面的步骤,包括配置本地代理、定义路由、接口数据格式以及编写接口请求。通过实例展示了如何与后端接口交互,处理分页和排序问题,并提供了部分代码示例。

前言

纪录个人学习Ant Design Pro并投入实际项目开发:新增表格页面的过程。
简述:从后端请求一个用户列表并用ProTable展示

Ant Design Pro新增一个表格页面

版本:antd pro v5 + typescript。

配置本地代理

修改文件config/proxy.ts中的dev:

dev: {
    '/index.php/api/': {
      target: 'http://localhost:63341',
      changeOrigin: true,
      pathRewrite: { '^': '' },
    },
  },

具体如何写与每个人的后端接口有关,个人本地的后端接口示例:http://localhost:63341/index.php/api/passport/login
文件 src/services/ant-design-pro/api.ts 中的请求代码:

/** 登录接口 POST /index.php/api/login/account */
export async function login(body: API.LoginParams, options?: { [key: string]: any }) {
  return request<API.LoginResult>('/index.php/api/passport/login', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}

注意:在线上环境中,也就是npm run build生成的包,代理是不会生效的,因此发布到线上时,确定你的网站已经有了后端服务。

创建文件

在pages路径中新增一个文件夹admin,复制一份TableList文件夹到admin中,并修改名称为users
在这里插入图片描述

定义路由

路由配置文件:config/routes.ts 中添加以下代码:

{
    name: 'admin',
    icon: 'user',
    path: '/admin',
    routes: [{
      name: 'users',
      // icon: 'user',
      path: '/admin/users',
      component: './admin/users',
    }],
  },

同时在国际化文件(src/locales/zh-CN/menu.ts)中添加

  'menu.admin.users': '员工管理',

路由字段释义

  • name: ‘admin’,定义的是该路由在导航栏的名称,会在国际化文件(src/locales/zh-CN)中寻找menu.admin的值,并渲染。
  • icon: ‘user’,渲染了一个user图标
  • path: ‘/admin/users’, 指定访问路由
  • routes: 配置子路由
  • component: ‘./admin/users’,指定该页面的组件,antd pro会到pages/admin/users下寻找index.tsx文件,并渲染它的内容

添加后运行命令npm run start:no-mock(:no-mock代表不使用mock模拟数据), 可以看到以下效果:
在这里插入图片描述

约定接口数据格式

文件为src/services/ant-design-pro/typings.d.ts, 添加用户相关接口数据返回格式,以下是个人的后端接口数据格式:

  type MemberList = {
    success: boolean;
    data?: {
      items: MemberListItem[];
      _links: Links;
      _meta: Pagination;
    };
  };

type MemberListItem = {
    id?: number;
    login_count?: number;
    type?: number;
    type_formatted?: string;
    avatar?: string;
    username?: string;
    created_at?: number;
    creator?: number;
    mobile_phone?: string;
  };
  
  type Links = {
    self: {
      href: string;
    };
    first: {
      href: string;
    };
    last: {
      href: string;
    };
  };

  type Pagination = {
    totalCount: number;
    pageCount: number;
    currentPage: number;
    prePage: number;
  };

注:根据自己的后端接口返回的数据格式编写

编写接口请求

接口请求文件:src/services/ant-design-pro/api.ts, 文件中自带rule的增删查改API,复制一份改为用户增删改查接口。

注意:

我根据自己的后端API查询参数格式,对原列表接口代码进行了一些修改。

ProTable默认使用的分页参数名是current以及pageSize,与后端不一致。这里我让后端适应前端,接收这两个参数进行分页。
此外,ProTable默认的排序方式也与后端不一致,我在前端进行了处理。

最后函数的返回值再进行额外的处理,data的值应为一个数组用于渲染表格。参考文档链接

/** 获取用户列表 GET /api/member/index */
export async function members(
  params: {
    // query
    /** 当前的页码 */
    current?: number;
    /** 页面的容量 */
    pageSize?: number;
  },
  // sorter接收排序字段
  sorter: {},
  options?: { [key: string]: any },
) {
  // 前端排序处理
  let sortObj = {};
  if (sorter) {
    for (let key in sorter) {
      sortObj['sort'] = sorter[key] == 'ascend' ? key : '-' + key;
      break;
    }
  }
  const response = await request<API.MemberList>('/api/member/index', {
    method: 'GET',
    // 添加排序参数到params
    params: {
      ...params, ...sortObj,
    },
    ...(options || {}),
  });
  return {
  	// 返回值处理
    data: response?.data?.items,
    success: response.success,
    total: response.data?._meta.totalCount,
  };
}

文件修改

接下来对admin/users/index.ts进行修改

未完待续

Ant Design Pro 新增一个表格页面(二)

视频教程

个人参考的Antd Pro视频教程:求知99网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值