import DropdownButtons from '@/components/drop-down-buttons'; import PageTools from '@/components/page-tools'; import { PageAction } from '@/config'; import type { PageActionType } from '@/config/types'; import useTableRowSelection from '@/hooks/use-table-row-selection'; import useTableSort from '@/hooks/use-table-sort'; import { handleBatchRequest } from '@/utils'; import { DeleteOutlined, EditOutlined, PlusOutlined, SyncOutlined, UserOutlined, UserSwitchOutlined } from '@ant-design/icons'; import { PageContainer } from '@ant-design/pro-components'; import { useIntl } from '@umijs/max'; import { Button, Input, Modal, Space, Table, message } from 'antd'; import dayjs from 'dayjs'; import _ from 'lodash'; import { useEffect, useState } from 'react'; import { createUser, deleteUser, queryUsersList, updateUser } from './apis'; import AddModal from './components/add-modal'; import { FormData, ListItem } from './config/types'; const { Column } = Table; const Models: React.FC = () => { const rowSelection = useTableRowSelection(); const { sortOrder, setSortOrder } = useTableSort({ defaultSortOrder: 'descend' }); const intl = useIntl(); const [total, setTotal] = useState(0); const [openAddModal, setOpenAddModal] = useState(false); const [loading, setLoading] = useState(false); const [dataSource, setDataSource] = useState([]); const [action, setAction] = useState(PageAction.CREATE); const [title, setTitle] = useState(''); const [currentData, setCurrentData] = useState( undefined ); const [queryParams, setQueryParams] = useState({ page: 1, perPage: 10, query: '' }); const ActionList = [ { key: 'edit', label: intl.formatMessage({ id: 'common.button.edit' }), icon: }, { key: 'delete', danger: true, label: intl.formatMessage({ id: 'common.button.delete' }), icon: } ]; const fetchData = async () => { setLoading(true); try { const params = { ..._.pickBy(queryParams, (val: any) => !!val) }; const res = await queryUsersList(params); console.log('res=======', res); setDataSource(res.items); setTotal(res.pagination.total); } catch (error) { setDataSource([]); console.log('error', error); } finally { setLoading(false); } }; const handleShowSizeChange = (page: number, size: number) => { setQueryParams({ ...queryParams, perPage: size }); }; const handlePageChange = (page: number, pageSize: number | undefined) => { console.log(page, pageSize); setQueryParams({ ...queryParams, page: page }); }; const handleTableChange = (pagination: any, filters: any, sorter: any) => { console.log('handleTableChange=======', pagination, filters, sorter); setSortOrder(sorter.order); }; const handleSearch = (e: any) => { fetchData(); }; const handleNameChange = (e: any) => { setQueryParams({ ...queryParams, query: e.target.value }); }; const handleAddUser = () => { setOpenAddModal(true); setAction(PageAction.CREATE); setTitle(intl.formatMessage({ id: 'users.form.create' })); }; const handleModalOk = async (data: FormData) => { const params = { ...data, is_admin: data.is_admin === 'admin' }; try { if (action === PageAction.EDIT) { await updateUser({ data: { ...params, id: currentData?.id } }); } else { await createUser({ data: params }); } fetchData(); setOpenAddModal(false); message.success(intl.formatMessage({ id: 'common.message.success' })); } catch (error) { setOpenAddModal(false); } }; const handleModalCancel = () => { console.log('handleModalCancel'); setOpenAddModal(false); }; const handleDelete = (row: ListItem) => { Modal.confirm({ title: '', content: intl.formatMessage( { id: 'common.delete.confirm' }, { type: intl.formatMessage({ id: 'users.table.user' }) } ), async onOk() { console.log('OK'); await deleteUser(row.id); message.success(intl.formatMessage({ id: 'common.message.success' })); fetchData(); }, onCancel() { console.log('Cancel'); } }); }; const handleDeleteBatch = () => { Modal.confirm({ title: '', content: intl.formatMessage( { id: 'common.delete.confirm' }, { type: intl.formatMessage({ id: 'users.table.user' }) } ), async onOk() { await handleBatchRequest(rowSelection.selectedRowKeys, deleteUser); message.success(intl.formatMessage({ id: 'common.message.success' })); rowSelection.clearSelections(); fetchData(); }, onCancel() { console.log('Cancel'); } }); }; const handleEditUser = (row: ListItem) => { setCurrentData(row); setOpenAddModal(true); setAction(PageAction.EDIT); setTitle(intl.formatMessage({ id: 'users.form.edit' })); }; const handleSelect = (val: any, row: ListItem) => { if (val === 'edit') { handleEditUser(row); } else if (val === 'delete') { handleDelete(row); } }; useEffect(() => { fetchData(); }, [queryParams]); return ( <> } right={ } > { return record.is_admin ? ( <> {intl.formatMessage({ id: 'users.form.admin' })} ) : ( <> {intl.formatMessage({ id: 'users.form.user' })} ); }} /> { return dayjs(text).format('YYYY-MM-DD HH:mm:ss'); }} /> { return ( handleSelect(val, record)} > ); }} />
); }; export default Models;