【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)

简介: 【Ant Design Pro】使用ant design pro做为你的开发模板(九)开发第一个完整的后台页面(二)

前言


上章我们说了,如何搭建一个自己想要的后台页面。那本章我们就来说一说,这个页面的接口调用,以及如果在这个页面中完成新增与编辑功能。


一、开发前:


开发前我们先来看一下本章我们的目标是什么样的呢?

如下:

1. 我们需要完成列表数据展示。

2. 我们需要完成顶部所属医院的筛选

3. 我们需要完成创建科室

4. 我们需要完成修改科室。在点击修改的时候需要赋值给表单。当修改完成后,表格需要立即刷新。


4339ebc5b89243f896133ed576d8311e.png

5ad7bdc5f6924b31b34bc66441ea4ca0.png

af9fe03b2c524d609fbd997584c7d2e2.png


二:开发步骤


1. 对接后台api。我们需要链接项目到实际的api请求地址。确保我们项目可与获取到token等有效信息。(此处不会的可与翻看之前的,我们有具体讲解过如何对接后台接口)。

2. 对接完后,我们需要给页面增加初始化调用机制,也就是页面一打开的时候就获取表格数据。


这里要强调的是与之前有所不一致,因为,之前我们都是放在生命周期里,而本次我们使用的是已经被封装好的组件中,所以我们需要使用ProTable的request 方法来进行数据请求。


官网对 ProTable的 request的介绍是这样说的


c37f532ba11e4f91b3574db2f14f3c1d.png

e776d081064248a68d2785e01a5948d8.png



通过官网介绍,我们可以知道,request就是我们获取表格dataSource的办法没有之一。它其中也包含了分页信息,loading,查询表单的值等信息。因为我们这里使用的是自定义筛选表单,所以查询表单在此处跟我们没有多大意义。

9c01d46322c04ed8ad1152b8b9d3c4d8.png


所以此处的代码我们将如上。


其中,PageIndex 与 PageSize 为查询时候传递给后台的分页条件。pageRequest 为分页查询的时候传递给后台其它数据 如:查询 、搜索等其它数据。


因为官网有说个,我们在获取数据后必须要返回一个对象,这个对象中必须包括:data(表格数据)、success(Boolean,是否成功),total(查询到的数据总数)。而且只有当其中的success 返回true,并且data 不为空,total 不为0的时候,才会有数据。

b39e8bedb734415d82e00031d4b064a4.png

其实这里的request 就相当于我们页面打开的时候发了一次请求,调用了 getOfficePageList 这个接口。并且传递了相应参数。


77fcdce8cd3b4158bb2ec777df9893f8.png


3. 新增/编辑表单


完成了页面数据后,我们就需要新增与编辑操作了。

一般来说,新增与编辑是相同的,只不过新增的时候要求都为空,而编辑的时候,需要将现有数据赋值给表单。

所以我们先完成新增操作。编辑也就基本完成了。

7d4a919213174c22ba42a3926aa75b91.png


在office/component 下新建index.tsx 文件。在这个文件中我们引入 ModalForm(浮层组件) 这个组件。

同时在浮层组件中,我们需要引入 ProForm。表单组件,毕竟后续的增改我们都是需要表单的。

<ModalForm
            >
                <ProForm.Group>
                    <div style={{ width: '700px' }}>
                        <ProFormSelect
                            width="md"
                            name="hospitalID"
                            label="所属医院"
                            rules={[{ required: true, message: '请选择所属医院' }]}
                            options={
                                hospitalList
                            }
                        />
                    </div>
                    <ProFormText
                        width="md"
                        name="officeName"
                        label="科室名称"
                        tooltip="最长为 50 位"
                        placeholder="请输入科室名称"
                        rules={[
                            {
                                required: true,
                                message: '请输入1~50位科室名称'
                            },
                            {
                                min: 1,
                                max: 50,
                                message: '长度在 1 到 50 个字符',
                            },
                        ]}
                    />
                </ProForm.Group>
            </ModalForm>

修改完成大概如上,其中所属医院下拉框中的 options的值,是我调接口获取的。大家可以随便写。不一定这里的参数要跟我一样。


当如上完成后,下来我们则需要给ModalForm (浮层组件)添加它的所需属性如:title,visible,onFinish,onVisibleChange 等。


其中,title就是 弹框的 名称

9632d1d30dd94738958371d4a3d04e42.png

visible 则为是否展示弹框的值。默认为false (不展示)

onFinish 为点击确定按钮触发的事件,在这里我们添加调用保存或者修改的后台接口。

onVisibleChange 为 visible 改变时候触发。

<ModalForm
                formRef={restFormRef}
                title={formTitle}
                modalProps={{
                    forceRender: true,
                }}
                visible={modalVisit}
                onFinish={async (values) => {
                    const dataobj = {
                        ...data,
                        ...values,
                    };
                        const res = await postOffice(dataobj);
                        if (res.status === 200) {
                            message.success('提交成功');
                            setQueryData(new Date().getTime());
                            return true;
                        } else {
                            return false;
                        }
                }}
                onVisibleChange={setModalVisit}
            >
                <ProForm.Group>
                    <div style={{ width: '700px' }}>
                        <ProFormSelect
                            width="md"
                            name="hospitalID"
                            label="所属医院"
                            rules={[{ required: true, message: '请选择所属医院' }]}
                            options={
                                hospitalList
                            }
                        />
                    </div>
                    <ProFormText
                        width="md"
                        name="officeName"
                        label="科室名称"
                        tooltip="最长为 50 位"
                        placeholder="请输入科室名称"
                        rules={[
                            {
                                required: true,
                                message: '请输入1~50位科室名称'
                            },
                            {
                                min: 1,
                                max: 50,
                                message: '长度在 1 到 50 个字符',
                            },
                        ]}
                    />
                </ProForm.Group>
            </ModalForm>

修改完后,我们的代码就长如上的样子。在onFinish 中我们增加了新增后台接口调用方法。


这时候还有个问题就是,当我们没新增一个信息的时候,主页面的table需要新增一条信息,按照我们往常的操作,我们需要再调用一次查询分页接口就行,但是如今我们没办法,那应该怎么搞呢?


答案是: 有的搞。


在ProTable 中有个属性为 params,官网是这样解释的,当它的值发生变化后,request 会重新执行。

43440b79712445858f920426277f12e0.png


所以这也就是为什么,上面代码中,我在新增完成后执行了一个方法


setQueryData(new Date().getTime());


setQueryData 这个方法就是由主ProTable页面传递给 浮层表单这个组件中的。

而它的使用则是在 ProTable的 params中。

ef80d3207b91406091f7638901d983ee.png


所以这下伙计们懂了吧。当我们新增完后点击保存,这时候我们需要触发一个方法改变params的值,这样ProTable的request 就可以重新触发,我们拿到最新值。这里当然了 大家可以任意放置东西哈,不一定跟我一样这么写。只要确保数据发生变化即可。


好了,到目前为止,弹框打开到保存我们都结束了,现在就差最后一个,如何打开弹框。毕竟到目前为止我们一直没有说打开弹框的事情。


所以在最后我们说一下弹框如何打开。


因为我喜欢用ReactHook。所以这里我则使用ref的方式来打开这个组件。


   <HospItalModal 
            ref={cardRef} 
            modalVisit={modalVisible} 
            setModalVisit={setmodalVisible} 
            setQueryData={setQueryData} />


首先我们在主页面中引入浮层弹框组件。同时传入三个值,一个属性与两个方法,属性 modalVisible 为是否打开弹框,setmodalVisible 操作 modalVisible 打开与关闭方法,最后一个setQueryData 则为 ProTable 的params的值,用来出发主表格发生改变。


做完这个后,我们需要在浮层弹框组件中再进行处理。


1. 引入 forwardRef 将在主页面的ref 传递下去。


const Modal = forwardRef(
    (
        { setQueryData: setQueryData, modalVisit: modalVisit, setModalVisit: setModalVisit, hospitalList: hospitalList }: Props,
        ref,
    ) => {
    // ...
})

2. 在浮层组件中,使用 useImperativeHandle 来接收ref组件及调用后的方法。


e139f50efbf84120bdce5a66a960472b.png


3. 我们在主页面中主要声明 浮层组件的ref,并在新增时候进行调用。

af4206d87d894be2a31c4f5d4ef5b31f.png

a4278ee014ff4c9bb76f3bd2056c3938.png

如上,在主页面通过ref 调用的 current下的add方法,则就是 浮层组件中的 add 方法。

我们这时候就完成了页面功能的新增。

剩下的编辑我就不写了,大体与新增一致,只不过多了渲染一部分。这时候大家多动脑自行编写,有疑问可以随时留言给我。


总结:


本章节,跟大家从上个章节遗留的tabel数据获取到页面数据的新增,以及浮层组件的建立,使用ref 调用子组件的操作等。基本带大家熟悉了一大圈,到目前为止,属于干活的ant design pro 的基本使用内容已经告一段落了。下一章就给大家说一说最热门关心的,ant design pro如何部署上线问题。


好了。大家如果还有疑问,欢迎随时留言讨论。

目录
相关文章
|
前端开发 JavaScript
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
1270 0
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
|
开发工具 git
【Ant Design Pro】使用ant design pro做为你的开发模板(五)去除无效代码,生成一个清晰的开发模板
【Ant Design Pro】使用ant design pro做为你的开发模板(五)去除无效代码,生成一个清晰的开发模板
719 0
【Ant Design Pro】使用ant design pro做为你的开发模板(五)去除无效代码,生成一个清晰的开发模板
|
前端开发 JavaScript Java
【Ant Design Pro】使用ant design pro做为你的开发模板(完结篇)上线部署项目
【Ant Design Pro】使用ant design pro做为你的开发模板(完结篇)上线部署项目
806 0
【Ant Design Pro】使用ant design pro做为你的开发模板(完结篇)上线部署项目
|
缓存 JavaScript 安全
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
1382 0
【Ant Design Pro】使用ant design pro做为你的开发模板(四) 联调正式后台接口与运行时全局配置
Ant Design pro删除模块笔记(二)
Ant Design pro删除模块笔记(二)
89 0
|
前端开发 JavaScript 安全
【Ant Design Pro】使用ant design pro做为你的开发模板 OpenAPI,快速管理你的请求接口。
前言 >转载好文,作者:[赵小左](https://blog.csdn.net/qq_31281245/article/details/126783707)
【Ant Design Pro】使用ant design pro做为你的开发模板 OpenAPI,快速管理你的请求接口。
Ant Design Pro新增页面步骤
Ant Design Pro新增页面步骤
274 0
Ant Design Pro:页面结构规范
Ant Design Pro:页面结构规范
116 0
Ant Design Pro 修改主题设置
Ant Design Pro 修改主题设置
333 0