|   | 
| import React, { useState, useRef, useEffect } from 'react'; | 
| import { Button, message, Modal, Tag  } from 'antd'; | 
| import { | 
|     FooterToolbar, | 
|     PageContainer, | 
|     ProTable, | 
|     LightFilter, | 
| } from '@ant-design/pro-components'; | 
| import { FormattedMessage, useIntl } from '@umijs/max'; | 
| import { PlusOutlined, ExportOutlined } from '@ant-design/icons'; | 
| import Http from '@/utils/http'; | 
| import Edit from './components/edit' | 
| import { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter } from '@/components/TableSearch' | 
| import { statusMap } from '@/utils/enum-util' | 
| import { repairBug } from '@/utils/common-util'; | 
|   | 
| const TABLE_KEY = 'pro-table-@{SIMPLEENTITYNAME}'; | 
|   | 
| const handleSave = async (val, intl) => { | 
|     const hide = message.loading(intl.formatMessage({ id: 'page.adding', defaultMessage: '正在添加' })); | 
|     try { | 
|         const resp = await Http.doPost('api/@{SIMPLEENTITYNAME}/save', val); | 
|         if (resp.code === 200) { | 
|             message.success(intl.formatMessage({ id: 'page.add.success', defaultMessage: '添加成功' })); | 
|             return true; | 
|         } else { | 
|             message.error(resp.msg); | 
|             return false; | 
|         } | 
|     } catch (error) { | 
|         message.error(intl.formatMessage({ id: 'page.add.fail', defaultMessage: '添加失败请重试!' })); | 
|         return false; | 
|     } finally { | 
|         hide(); | 
|     } | 
| }; | 
|   | 
| const handleUpdate = async (val, intl) => { | 
|     const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '正在更新' })); | 
|     try { | 
|         const resp = await Http.doPost('api/@{SIMPLEENTITYNAME}/update', val); | 
|         if (resp.code === 200) { | 
|             message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '更新成功' })); | 
|             return true; | 
|         } else { | 
|             message.error(resp.msg); | 
|             return false; | 
|         } | 
|     } catch (error) { | 
|         message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '更新失败请重试!' })); | 
|         return false; | 
|     } finally { | 
|         hide(); | 
|     } | 
| }; | 
|   | 
| const handleRemove = async (rows, intl) => { | 
|     if (!rows) return true; | 
|     const hide = message.loading(intl.formatMessage({ id: 'page.deleting', defaultMessage: '正在删除' })); | 
|     try { | 
|         const resp = await Http.doPost('api/@{SIMPLEENTITYNAME}/remove/' + rows.map((row) => row.id).join(',')); | 
|         if (resp.code === 200) { | 
|             message.success(intl.formatMessage({ id: 'page.delete.success', defaultMessage: '删除成功' })); | 
|             return true; | 
|         } else { | 
|             message.error(resp.msg); | 
|             return false; | 
|         } | 
|     } catch (error) { | 
|         message.error(intl.formatMessage({ id: 'page.delete.fail', defaultMessage: '删除失败,请重试!' })); | 
|         return false; | 
|     } finally { | 
|         hide(); | 
|     } | 
| }; | 
|   | 
| const handleExport = async (intl) => { | 
|     const hide = message.loading(intl.formatMessage({ id: 'page.exporting', defaultMessage: '正在导出' })); | 
|     try { | 
|         const resp = await Http.doPostBlob('api/@{SIMPLEENTITYNAME}/export'); | 
|         const blob = new Blob([resp], { type: 'application/vnd.ms-excel' }); | 
|         window.location.href = window.URL.createObjectURL(blob); | 
|         message.success(intl.formatMessage({ id: 'page.export.success', defaultMessage: '导出成功' })); | 
|         return true; | 
|     } catch (error) { | 
|         message.error(intl.formatMessage({ id: 'page.export.fail', defaultMessage: '导出失败,请重试' })); | 
|         return false; | 
|     } finally { | 
|         hide(); | 
|     } | 
| }; | 
|   | 
|   | 
| const Main = () => { | 
|     const intl = useIntl(); | 
|     const formTableRef = useRef(); | 
|     const actionRef = useRef(); | 
|     const [selectedRows, setSelectedRows] = useState([]); | 
|     const [modalVisible, setModalVisible] = useState(false); | 
|     const [currentRow, setCurrentRow] = useState(); | 
|     const [searchParam, setSearchParam] = useState({}); | 
|   | 
|     useEffect(() => { | 
|   | 
|     }, []); | 
|   | 
|     const columns = [ | 
|         { | 
|             title: intl.formatMessage({ | 
|                 id: 'page.table.no', | 
|                 defaultMessage: 'No' | 
|             }), | 
|             dataIndex: 'index', | 
|             valueType: 'indexBorder', | 
|             width: 48, | 
|         }, | 
| @{TABLECOLUMNS} | 
|         { | 
|             title: '操作', | 
|             dataIndex: 'option', | 
|             width: 140, | 
|             valueType: 'option', | 
|             render: (_, record) => [ | 
|                 <Button | 
|                     type="link" | 
|                     key="edit" | 
|                     onClick={() => { | 
|                         setModalVisible(true); | 
|                         setCurrentRow(record); | 
|                     }} | 
|                 > | 
|                     <FormattedMessage id='page.edit' defaultMessage='编辑' /> | 
|                 </Button>, | 
|                 <Button | 
|                     type="link" | 
|                     danger | 
|                     key="batchRemove" | 
|                     onClick={async () => { | 
|                         Modal.confirm({ | 
|                             title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), | 
|                             content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), | 
|                             onOk: async () => { | 
|                                 const success = await handleRemove([record], intl); | 
|                                 if (success) { | 
|                                     if (actionRef.current) { | 
|                                         actionRef.current.reload(); | 
|                                     } | 
|                                 } | 
|                             }, | 
|                         }); | 
|                     }} | 
|                 > | 
|                     <FormattedMessage id='page.delete' defaultMessage='删除' /> | 
|                 </Button>, | 
|             ], | 
|         }, | 
|     ]; | 
|   | 
|     return ( | 
|         <PageContainer | 
|             header={{ | 
|                 breadcrumb: {}, | 
|             }} | 
|         > | 
|             <div style={{ width: '100%', float: 'right' }}> | 
|                 <ProTable | 
|                     key="@{SIMPLEENTITYNAME}" | 
|                     rowKey="id" | 
|                     actionRef={actionRef} | 
|                     formRef={formTableRef} | 
|                     columns={columns} | 
|                     cardBordered | 
|                     scroll={{ x: 1300 }} | 
|                     dateFormatter="string" | 
|                     pagination={{ pageSize: 16 }} | 
|                     search={false} | 
|                     toolbar={{ | 
|                         search: { | 
|                             onSearch: (value) => { | 
|                                 setSearchParam(prevState => ({ | 
|                                     ...prevState, | 
|                                     condition: value | 
|                                 })); | 
|                                 actionRef.current?.reload(); | 
|                             }, | 
|                         }, | 
|                         filter: ( | 
|                             <LightFilter | 
|                                 onValuesChange={(val) => { | 
|                                 }} | 
|                             > | 
|                             </LightFilter> | 
|                         ), | 
|                         actions: [ | 
|                             <Button | 
|                                 type="primary" | 
|                                 key="save" | 
|                                 onClick={async () => { | 
|                                     setModalVisible(true) | 
|                                 }} | 
|                             > | 
|                                 <PlusOutlined /> | 
|                                 <FormattedMessage id='page.add' defaultMessage='添加' /> | 
|                             </Button>, | 
|                             <Button | 
|                                 key="export" | 
|                                 onClick={async () => { | 
|                                     handleExport(intl); | 
|                                 }} | 
|                             > | 
|                                 <ExportOutlined /> | 
|                                 <FormattedMessage id='page.export' defaultMessage='导出' /> | 
|                             </Button>, | 
|                         ], | 
|                     }} | 
|                     request={(params, sorter, filter) => | 
|                         Http.doPostPromise('/api/@{SIMPLEENTITYNAME}/page', { ...params, ...searchParam }, (res) => { | 
|                             return { | 
|                                 data: res.data.records, | 
|                                 total: res.data.total, | 
|                                 success: true, | 
|                             } | 
|                         }) | 
|                     } | 
|                     rowSelection={{ | 
|                         onChange: (ids, rows) => { | 
|                             setSelectedRows(rows); | 
|                         } | 
|                     }} | 
|                     columnsState={{ | 
|                         persistenceKey: TABLE_KEY, | 
|                         persistenceType: 'localStorage', | 
|                         defaultValue: { | 
|                             // memo: { show: repairBug(TABLE_KEY, 'memo', false) }, | 
|                             option: { fixed: 'right', disable: true }, | 
|                         }, | 
|                         onChange(value) { | 
|                         }, | 
|                     }} | 
|                 /> | 
|             </div> | 
|   | 
|             {selectedRows?.length > 0 && ( | 
|                 <FooterToolbar | 
|                     extra={ | 
|                         <div> | 
|                             <a style={{ fontWeight: 600 }}>{selectedRows.length}</a> | 
|                             <FormattedMessage id='page.selected' defaultMessage=' 项已选择' /> | 
|                         </div> | 
|                     } | 
|                 > | 
|                     <Button | 
|                         key="remove" | 
|                         danger | 
|                         onClick={async () => { | 
|                             Modal.confirm({ | 
|                                 title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), | 
|                                 content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), | 
|                                 onOk: async () => { | 
|                                     const success = await handleRemove(selectedRows, intl); | 
|                                     if (success) { | 
|                                         setSelectedRows([]); | 
|                                         actionRef.current?.reloadAndRest?.(); | 
|                                     } | 
|                                 }, | 
|                             }); | 
|                         }} | 
|                     > | 
|                         <FormattedMessage id='page.delete.batch' defaultMessage='批量删除' /> | 
|                     </Button> | 
|                 </FooterToolbar> | 
|             )} | 
|   | 
|             <Edit | 
|                 open={modalVisible} | 
|                 values={currentRow || {}} | 
|                 onCancel={ | 
|                     () => { | 
|                         setModalVisible(false); | 
|                         setCurrentRow(undefined); | 
|                     } | 
|                 } | 
|                 onSubmit={async (values) => { | 
|                     let ok = false; | 
|                     if (values.id) { | 
|                         ok = await handleUpdate({ ...values }, intl) | 
|                     } else { | 
|                         ok = await handleSave({ ...values }, intl) | 
|                     } | 
|                     if (ok) { | 
|                         setModalVisible(false); | 
|                         setCurrentRow(undefined); | 
|                         if (actionRef.current) { | 
|                             actionRef.current.reload(); | 
|                         } | 
|                     } | 
|                 }} | 
|             /> | 
|         </PageContainer> | 
|     ); | 
| }; | 
|   | 
| export default Main; |