import type { ActionType, ProColumns, ProDescriptionsItemProps, } from '@ant-design/pro-components'; import { FooterToolbar, PageContainer, ProDescriptions, ProTable, } from '@ant-design/pro-components'; import { FormattedMessage, useIntl, useRequest } from '@umijs/max'; import { Button, Drawer, Input, message } from 'antd'; import React, { useCallback, useRef, useState } from 'react'; import { removeRule, rule } from '@/services/ant-design-pro/api'; import CreateForm from './components/CreateForm'; import UpdateForm from './components/UpdateForm'; const TableList: React.FC = () => { const actionRef = useRef(null); const [showDetail, setShowDetail] = useState(false); const [currentRow, setCurrentRow] = useState(); const [selectedRowsState, setSelectedRows] = useState([]); /** * @en-US International configuration * @zh-CN 国际化配置 * */ const intl = useIntl(); const [messageApi, contextHolder] = message.useMessage(); const { run: delRun, loading } = useRequest(removeRule, { manual: true, onSuccess: () => { setSelectedRows([]); actionRef.current?.reloadAndRest?.(); messageApi.success('Deleted successfully and will refresh soon'); }, onError: () => { messageApi.error('Delete failed, please try again'); }, }); const columns: ProColumns[] = [ { title: ( ), dataIndex: 'name', render: (dom, entity) => { return ( { setCurrentRow(entity); setShowDetail(true); }} > {dom} ); }, }, { title: ( ), dataIndex: 'desc', valueType: 'textarea', }, { title: ( ), dataIndex: 'callNo', sorter: true, hideInForm: true, renderText: (val: string) => `${val}${intl.formatMessage({ id: 'pages.searchTable.tenThousand', defaultMessage: ' 万 ', })}`, }, { title: ( ), dataIndex: 'status', hideInForm: true, valueEnum: { 0: { text: ( ), status: 'Default', }, 1: { text: ( ), status: 'Processing', }, 2: { text: ( ), status: 'Success', }, 3: { text: ( ), status: 'Error', }, }, }, { title: ( ), sorter: true, dataIndex: 'updatedAt', valueType: 'dateTime', renderFormItem: (item, { defaultRender, ...rest }, form) => { const status = form.getFieldValue('status'); if (`${status}` === '0') { return false; } if (`${status}` === '3') { return ( ); } return defaultRender(item); }, }, { title: ( ), dataIndex: 'option', valueType: 'option', render: (_, record) => [ } key="config" onOk={actionRef.current?.reload} values={record} />, , ], }, ]; /** * Delete node * @zh-CN 删除节点 * * @param selectedRows */ const handleRemove = useCallback( async (selectedRows: API.RuleListItem[]) => { if (!selectedRows?.length) { messageApi.warning('请选择删除项'); return; } await delRun({ data: { key: selectedRows.map((row) => row.key), }, }); }, [delRun, messageApi.warning], ); return ( {contextHolder} headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', defaultMessage: 'Enquiry form', })} actionRef={actionRef} rowKey="key" search={{ labelWidth: 120, }} toolBarRender={() => [ , ]} request={rule} columns={columns} rowSelection={{ onChange: (_, selectedRows) => { setSelectedRows(selectedRows); }, }} /> {selectedRowsState?.length > 0 && ( {' '} {selectedRowsState.length}{' '}    {' '} {selectedRowsState.reduce( (pre, item) => pre + (item.callNo ?? 0), 0, )}{' '} } > )} { setCurrentRow(undefined); setShowDetail(false); }} closable={false} > {currentRow?.name && ( column={2} title={currentRow?.name} request={async () => ({ data: currentRow || {}, })} params={{ id: currentRow?.name, }} columns={columns as ProDescriptionsItemProps[]} /> )} ); }; export default TableList;