EditableProTable(可编辑表格) 之坑

 

针对以上出现的情况我们只需要把 EditableProTable 组件中的 setEditableRowKeys(可编辑的key)给清空就可以了.  setEditableRowKeys([]);

核心代码:

modalProps={{
          // 弹窗属性
          destroyOnClose: true,
          onCancel: () => { // 点击取消按钮的回调
            setEditableRowKeys([]); // 把 EditableProTable 组件中 setEditableRowKeys(可编辑行的key)的值清空
            setVisibles(false);
          },
          open: visibles, // Modal 是否可见
          afterClose: () => {
            setEditableRowKeys([]); // 把 EditableProTable 组件中 setEditableRowKeys(可编辑行的key)的值清空
          }, // Modal 完全关闭后的回调
        }}

完整代码:

import {
  ActionType,
  PageContainer,
  ProColumns,
  ProTable,
  ModalForm,
  ProFormList,
  ProFormCascader,
  ProFormText,
  EditableProTable,
  ProFormGroup,
} from '@ant-design/pro-components';
import { PlusOutlined } from '@ant-design/icons';
import { Button, message, Space, Descriptions, Form } from 'antd';
import React, {useEffect, useRef, useState} from 'react';
import PageModal from './PageModal';
import {
  deletePubCfg, getPubCfgDetail,
  getPubCfgPage,
  onlinePubCfg,
  savePubCfg,
  submitPubCfg,
  getPubCatgTreeNodes
} from "@/pages/catalogLayer/catalogApply/service";

type TableListPagination = {
  total: number;
  pageSize: number;
  current: number;
};
type DataSourceType = {
  id: string;
  catalogId: string;
  itemName?: string;
  // enName?: string;
  itemType?: string;
  itemLength?: string;
};

const CatalogApply: React.FC = () => {
  /*新建弹窗*/
  const [visibles, setVisibles] = useState(false);

  /*新增行表格*/
  const actionRef2 = useRef<ActionType>();
  const [form] = Form.useForm();
  const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
  const [dataSource, setDataSource] = useState<readonly DataSourceType[]>([]);
  const columns2: ProColumns<DataSourceType>[] = [
    {
      title: '信息项名称',
      dataIndex: 'itemName',
      formItemProps: {
        rules: [
          {
            required: true,
            message: '此项为必填项',
          },
        ],
      },
      // width: '20%',
    },
    /*{
      title: '英文名称',
      dataIndex: 'enName',
      width: '20%',
    },*/
    {
      title: '信息项类型',
      key: 'itemType',
      dataIndex: 'itemType',
      valueType: 'select',
      // 把外面自定义值传给这个valueEnum
      valueEnum: () => {
        return dataType; // 这里的dataType是外面定义的一个变量
      },
      // width: '20%',
    },
    {
      title: '信息项长度',
      dataIndex: 'itemLength',
      // width: '20%',
    },
    {
      title: '操作',
      valueType: 'option',
      width: 140,
      render: (text, record, _, action) => [
        <a
          key="editable"
          onClick={() => {
            action?.startEditable?.(record.id);
          }}
        >
          编辑
        </a>,
        <a
          key="delete"
          onClick={() => {
            setDataSource(dataSource.filter((item) => item.id !== record.id));
          }}
        >
          删除
        </a>,
      ],
    },
  ];

  return (
    <PageContainer>
      <Button
         type="primary"
         key="add"
         onClick={() => {
           setDataSource([]); // 清空新建表格数据
           setVisibles(true); // 开启弹窗
         }}
         size="small"
       >
       新建
       </Button>
      {/*新建弹窗*/}
      <ModalForm
        title={substepValue}
        initialValues={currentRow}
        autoFocusFirstInput
        modalProps={{
          // 弹窗属性
          destroyOnClose: true,
          onCancel: () => { // 点击取消按钮的回调
            setEditableRowKeys([]); // 把 EditableProTable 组件中 setEditableRowKeys(可编辑行的key)的值清空
            setVisibles(false);
          },
          open: visibles, // Modal 是否可见
          afterClose: () => {
            setEditableRowKeys([]); // 把 EditableProTable 组件中 setEditableRowKeys(可编辑行的key)的值清空
          }, // Modal 完全关闭后的回调
        }}
        onFinish={async (values) => {
          const objList = {
              catalogItems: dataSource,
              id: currentRow?.id
            }
          if(currentRow?.id){
              const res = await savePubCfg({ ...objList})
              if(res.code === 200){
                message.success('编辑成功');
                if (actionRef.current) {
                  actionRef.current.reload();
                }
              }
              setVisibles(false);
              return;
            }else {
              const res = await savePubCfg({ ...objList })
              if(res.code === 200){
                message.success('新增成功');
                if (actionRef.current) {
                  actionRef.current.reload();
                }
              }
              setVisibles(false);
            }
        }}
        layout="horizontal" // 开启grid布局
        grid={true}
      >
        <ProFormGroup>
          <ProFormText
            name="name"
            label="申请目录名称"
            placeholder="请输入"
            rules={[{ required: true }]}
            labelCol={{ span: 4 }}
          />
        </ProFormGroup>
        <ProFormGroup>
          <ProFormCascader
            label="发布目录类型"
            placeholder="请选择"
            rules={[{ required: true }]}
            labelCol={{ span: 4 }}
            name="catgIdArray"
            request={async () => {
              const res = await getPubCatgTreeNodes();
              if (res.status === 'success') {
                if (res?.data2?.length !== 0 && res?.data2[0] !== null) {
                  return res.data2;
                }
              }
              /*if (res.status === 'success') {
                if (res?.data2?.length !== 0 && res?.data2[0] !== null) {
                  return res.data2;
                }
              }*/
            }}
            fieldProps={{
              onChange: (value,selectedOptions) => {
                setSelectedRowKeys(selectedOptions);
              },
              showArrow: false,
              showSearch: true,
              dropdownMatchSelectWidth: false,
              multiple: true,// 是否支持多选
              fieldNames: {
                label: 'title',
                value: 'value',
              },
              /*fieldNames: {
                label: 'name',
                value: 'id',
                children: 'children',
              },*/
              displayRender: (selectedOptions) => {
                return selectedOptions.join('/');
              },
            }}
          />
        </ProFormGroup>
        <ProFormGroup>
          <ProFormText
            name="resOrgName"
            label="资源提供单位"
            placeholder="此单位应和接口单位保持一致"
            rules={[{ required: true }]}
            labelCol={{ span: 4 }}
            initialValue={currentUser?.orgName}
          />
        </ProFormGroup>
        <ProFormGroup>
          <ProFormList
            name="tags"
            initialValue={[{ publabel: '默认标签' }]}
            creatorButtonProps={{
              creatorButtonText: '新建',
              icon: false,
              type: 'link',
              style: { width: 'unset' },
            }}
            actionGuard={{
              beforeRemoveRow: async (index) => {
                return new Promise((resolve) => {
                  if (index === 0) {
                    message.error('这行不能删');
                    resolve(false);
                    return;
                  }
                  setTimeout(() => resolve(true), 100);
                });
              },
            }}
          >
            <ProFormText
              name="publabel"
              label="标签"
              placeholder="请输入"
              rules={[{ required: true }]}
              labelCol={{ span: 4 }}
            />
          </ProFormList>
        </ProFormGroup>
        {/*表格*/}
        <Descriptions title="目录信息项" />
        <>
          <Button
            style={{ marginBottom: 16, marginLeft: 24 }}
            type="primary"
            onClick={() => {
              actionRef2.current?.addEditRecord?.({
                id: (Math.random() * 1000000).toFixed(0),
              });
            }}
            icon={<PlusOutlined />}
          >
            新建一行
          </Button>
          <EditableProTable<DataSourceType>
            rowKey="id"
            actionRef={actionRef2}
            // 关闭默认的新建按钮
            recordCreatorProps={false}
            columns={columns2}
            value={dataSource}
            onChange={setDataSource}
            editable={{ // 意思是可编辑
              form,// form里面是表单的数据
              editableKeys, // 可编辑的key
              onSave: async () => {}, // 保存
              onChange: setEditableRowKeys, // 设置可编辑的key
              actionRender: (row, config, dom) => [dom.save, dom.cancel],
            }}
          />
        </>
      </ModalForm>
      {/*详情弹窗*/}
      <PageModal ref={cRef} />
    </PageContainer>
  );
};

export default CatalogApply;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: EditableProTable 的 Tab 是指表格的多页签功能,可以让用户在同一个表格组件内切换不同的页签,以展示不同的数据。使用 EditableProTable 的 Tab 功能可以方便地实现数据的分页展示,并且可以通过 Tab 栏快速切换展示不同的数据页签,提高了用户体验。在 EditableProTable 中,可以通过配置 dataSource 和 columns 来定义每个 Tab 下的数据和表格列信息。同时,也可以通过 onChange 事件来监听 Tab 切换时的回调函数,以便在用户切换 Tab 时执行相应的操作。 ### 回答2: EditableProTable 的 Tab 是指 EditableProTable 组件中的一个选项卡,用于实现数据的分组展示和切换。 EditableProTable 是一个基于 Ant Design 的表格组件,可以实现表格数据的编辑和可视化操作。而 Tab 是 EditableProTable 组件中的一种展示方式,可以将表格数据按照不同的分组进行展示和切换。 通过使用 EditableProTable 的 Tab 功能,我们可以将大量数据分成不同的组,并且可以通过选项卡来切换不同的组,使得数据的管理和查看更加方便和直观。每个选项卡对应一个数据分组,可以在每个选项卡中显示该组数据的表格,并且可以对数据进行编辑和操作。 在 Tab 中,我们可以自定义选项卡的名称和排序,可以根据具体的业务需求来设置不同的选项卡。同时,也可以在选项卡上添加图标或其他标识,以便更加清晰地区分不同的数据分组。 总之,EditableProTable 的 Tab 功能是为了更加方便地展示和切换表格数据分组而设计的,可以提高数据的管理效率和用户的操作体验。 ### 回答3: EditableProTable的Tab是一个用于显示和管理表格数据的可编辑标签页组件。它是Ant Design Pro框架中的一个重要组成部分,提供了丰富的功能和交互方式,方便用户对表格数据进行增删改查操作。 EditableProTable的Tab通过使用Tab组件,将表格数据分成不同的标签页展示,每个标签页可以独立操作和管理数据。用户可以通过点击不同的标签页来切换展示不同的数据集合,从而方便地查看和编辑不同类型的数据。 EditableProTable的Tab不仅支持基本的增删改查功能,还可以进行自定义列设置、数据排序、筛选和分页等操作。用户可以根据自己的需求,灵活地配置和管理表格数据的展示和操作方式。 此外,EditableProTable的Tab还支持批量操作和快速搜索功能,提供了方便的数据处理和查找方式。 总之,EditableProTable的Tab是一个功能强大、灵活多样的标签页组件,可以帮助用户进行方便高效的表格数据管理和操作。无论是对于数据展示还是数据处理,它都提供了丰富的功能和交互方式,使得用户可以轻松地对表格数据进行管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发那点事儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值