美文网首页
2022-11-18 ant-design/pro-compon

2022-11-18 ant-design/pro-compon

作者: 无尽甜蜜里悠悠记忆 | 来源:发表于2022-11-17 10:27 被阅读0次

    import services from '@/services/demo';

    import {

    ActionType,

      FooterToolbar,

      PageContainer,

      ProDescriptions,

      ProDescriptionsItemProps,

      ProTable,

    }from '@ant-design/pro-components';

    import {Button, Divider, Drawer, message }from 'antd';

    import React, {useRef, useState }from 'react';

    import CreateFormfrom './components/CreateForm';

    import UpdateForm, { FormValueType }from './components/UpdateForm';

    const {addUser, queryUserList, deleteUser, modifyUser } =

    services.UserController;

    /**

    * 添加节点

    * @param fields

    */

    const handleAdd =async (fields: API.UserInfo) => {

    const hide =message.loading('正在添加');

      try {

    await addUser({ ...fields });

        hide();

        message.success('添加成功');

    return true;

      }catch (error) {

    hide();

        message.error('添加失败请重试!');

    return false;

      }

    };

    /**

    * 更新节点

    * @param fields

    */

    const handleUpdate =async (fields: FormValueType) => {

    const hide =message.loading('正在配置');

      try {

    await modifyUser(

    {

    userId: fields.id ||'',

          },

          {

    name: fields.name ||'',

            nickName: fields.nickName ||'',

            email: fields.email ||'',

          },

        );

        hide();

        message.success('配置成功');

    return true;

      }catch (error) {

    hide();

        message.error('配置失败请重试!');

    return false;

      }

    };

    /**

    *  删除节点

    * @param selectedRows

    */

    const handleRemove =async (selectedRows: API.UserInfo[]) => {

    const hide =message.loading('正在删除');

      if (!selectedRows)return true;

      try {

    await deleteUser({

    userId: selectedRows.find((row) => row.id)?.id ||'',

        });

        hide();

        message.success('删除成功,即将刷新');

    return true;

      }catch (error) {

    hide();

        message.error('删除失败,请重试');

    return false;

      }

    };

    const TableList: React.FC = () => {

    const [createModalVisible, handleModalVisible] =useState(false);

      const [updateModalVisible, handleUpdateModalVisible] =

    useState(false);

      const [stepFormValues, setStepFormValues] =useState({});

      const actionRef =useRef();

      const [row, setRow] =useState();

      const [selectedRowsState, setSelectedRows] =useState([]);

      const columns: ProDescriptionsItemProps[] = [

    {

    title:'名称',

          dataIndex:'name',

          tip:'名称是唯一的 key',

          formItemProps: {

    rules: [

    {

    required:true,

                message:'名称为必填项',

              },

            ],

          },

        },

        {

    title:'昵称',

          dataIndex:'nickName',

          valueType:'text',

        },

        {

    title:'性别',

          dataIndex:'gender',

          hideInForm:true,

          valueEnum: {

    0: {text:'男', status:'MALE' },

            1: {text:'女', status:'FEMALE' },

          },

        },

        {

    title:'操作',

          dataIndex:'option',

          valueType:'option',

          render: (_, record) => (

    <>

                onClick={() => {

    handleUpdateModalVisible(true);

                  setStepFormValues(record);

                }}

    >

                配置

              <Divider type="vertical" />

              <a href="">订阅警报

          ),

        },

      ];

      return (

          header={{

    title:'CRUD 示例',

          }}

    >

          <ProTable

    headerTitle="查询表格"

            actionRef={actionRef}

    rowKey="id"

            search={{

    labelWidth:120,

            }}

    toolBarRender={() => [

                key="1"

                type="primary"

                onClick={() =>handleModalVisible(true)}

    >

                新建

              </Button>,

            ]}

    request={async (params, sorter, filter) => {

    const { data, success } =await queryUserList({

    ...params,

                // FIXME: remove @ts-ignore

                // @ts-ignore

                sorter,

                filter,

              });

              return {

    data: data?.list || [],

                success,

              };

            }}

    columns={columns}

    rowSelection={{

    onChange: (_, selectedRows) =>setSelectedRows(selectedRows),

            }}

    />

          {selectedRowsState?.length >0 && (

              extra={

                  已选择{' '}

    <a style={{fontWeight:600 }}>{selectedRowsState.length}</a>{' '}

    项 

              }

    >

                onClick={async () => {

    await handleRemove(selectedRowsState);

                  setSelectedRows([]);

                  actionRef.current?.reloadAndRest?.();

                }}

    >

                批量删除

              <Button type="primary">批量审批

          )}

            onCancel={() =>handleModalVisible(false)}

    modalVisible={createModalVisible}

    >

            <ProTable

    onSubmit={async (value) => {

    const success =await handleAdd(value);

                if (success) {

    handleModalVisible(false);

                  if (actionRef.current) {

    actionRef.current.reload();

                  }

    }

    }}

    rowKey="id"

              type="form"

              columns={columns}

    />

          {stepFormValues &&Object.keys(stepFormValues).length ? (

              onSubmit={async (value) => {

    const success =await handleUpdate(value);

                if (success) {

    handleUpdateModalVisible(false);

                  setStepFormValues({});

                  if (actionRef.current) {

    actionRef.current.reload();

                  }

    }

    }}

    onCancel={() => {

    handleUpdateModalVisible(false);

                setStepFormValues({});

              }}

    updateModalVisible={updateModalVisible}

    values={stepFormValues}

    />

          ) :null}

            width={600}

    visible={!!row}

    onClose={() => {

    setRow(undefined);

            }}

    closable={false}

    >

            {row?.name && (

    <ProDescriptions

    column={2}

    title={row?.name}

    request={async () => ({

    data: row || {},

                })}

    params={{

    id:row?.name,

                }}

    columns={columns}

    />

            )}

      );

    };

    export default TableList;

    相关文章

      网友评论

          本文标题:2022-11-18 ant-design/pro-compon

          本文链接:https://www.haomeiwen.com/subject/eqqpxdtx.html