import { useTheme } from 'antd-style' import { DATABASE_DELETE_SUCCESS, DATABASE_DUPLICATE_KEY, DATABASE_INSERT_SUCCESS, DATABASE_SELECT_SUCCESS, DATABASE_UPDATE_SUCCESS } from '@/constants/common.constants' import { utcToLocalTime } from '@/util/datetime' import { r_sys_tool_category_add, r_sys_tool_category_delete, r_sys_tool_category_get, r_sys_tool_category_update } from '@/services/system' import Card from '@/components/common/Card' import Permission from '@/components/common/Permission' import FitFullscreen from '@/components/common/FitFullscreen' import HideScrollbar from '@/components/common/HideScrollbar' const Category = () => { const theme = useTheme() const [modal, contextHolder] = AntdModal.useModal() const [form] = AntdForm.useForm() const formValues = AntdForm.useWatch([], form) const [newFormValues, setNewFormValues] = useState() const [categoryData, setCategoryData] = useState([]) const [isLoading, setIsLoading] = useState(false) const [isDrawerOpen, setIsDrawerOpen] = useState(false) const [isDrawerEdit, setIsDrawerEdit] = useState(false) const [isSubmittable, setIsSubmittable] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const handleOnAddBtnClick = () => { setIsDrawerEdit(false) setIsDrawerOpen(true) form.setFieldValue('id', undefined) form.setFieldValue('name', newFormValues?.name) form.setFieldValue('enable', newFormValues?.enable ?? true) } const categoryColumns: _ColumnsType = [ { title: '名称', dataIndex: 'name' }, { title: '创建时间', dataIndex: 'createTime', width: '20%', align: 'center', render: (value: string) => utcToLocalTime(value) }, { title: '修改时间', dataIndex: 'updateTime', width: '20%', align: 'center', render: (value: string) => utcToLocalTime(value) }, { title: '状态', dataIndex: 'enable', width: '5%', align: 'center', render: (value) => value ? 启用 : 禁用 }, { title: ( <> 操作 {' '} ( 新增 ) ), width: '15em', align: 'center', render: (_, record) => ( <> 编辑 删除 ) } ] const handleOnEditBtnClick = (value: ToolCategoryVo) => { return () => { setIsDrawerEdit(true) setIsDrawerOpen(true) form.setFieldValue('id', value.id) form.setFieldValue('name', value.name) form.setFieldValue('enable', value.enable) void form.validateFields() } } const handleOnDeleteBtnClick = (value: ToolCategoryVo) => { return () => { modal .confirm({ centered: true, maskClosable: true, title: '确定删除', content: `确定删除类别 ${value.name} 吗?` }) .then( (confirmed) => { if (confirmed) { setIsLoading(true) void r_sys_tool_category_delete(value.id) .then((res) => { const response = res.data if (response.code === DATABASE_DELETE_SUCCESS) { void message.success('删除成功') setTimeout(() => { getCategory() }) } else { void message.error('删除失败,请稍后重试') } }) .finally(() => { setIsLoading(false) }) } }, () => {} ) } } const handleOnDrawerClose = () => { setIsDrawerOpen(false) } const handleOnSubmit = () => { if (isSubmitting) { return } setIsSubmitting(true) if (isDrawerEdit) { void r_sys_tool_category_update(formValues) .then((res) => { const response = res.data switch (response.code) { case DATABASE_UPDATE_SUCCESS: setIsDrawerOpen(false) void message.success('更新成功') getCategory() break case DATABASE_DUPLICATE_KEY: void message.error('已存在相同名称的类别') break default: void message.error('更新失败,请稍后重试') } }) .finally(() => { setIsSubmitting(false) }) } else { void r_sys_tool_category_add(formValues) .then((res) => { const response = res.data switch (response.code) { case DATABASE_INSERT_SUCCESS: setIsDrawerOpen(false) void message.success('添加成功') setNewFormValues(undefined) getCategory() break case DATABASE_DUPLICATE_KEY: void message.error('已存在相同名称的类别') break default: void message.error('添加失败,请稍后重试') } }) .finally(() => { setIsSubmitting(false) }) } } const getCategory = () => { if (isLoading) { return } setIsLoading(true) void r_sys_tool_category_get() .then((res) => { const response = res.data if (response.code === DATABASE_SELECT_SUCCESS) { setCategoryData(response.data!) } else { void message.error('获取失败,请稍后重试') } }) .finally(() => { setIsLoading(false) }) } useEffect(() => { form.validateFields({ validateOnly: true }).then( () => { setIsSubmittable(true) }, () => { setIsSubmittable(false) } ) if (!isDrawerEdit && formValues) { setNewFormValues({ name: formValues.name, enable: formValues.enable }) } }, [formValues]) useEffect(() => { getCategory() }, []) const drawerToolbar = ( 取消 提交 ) const addAndEditForm = ( ) return ( <> record.id} loading={isLoading} pagination={false} /> {addAndEditForm} {contextHolder} ) } export default Category