import React, { useState, useEffect } from 'react'; import { Table, Button, Modal, Form, Input, InputNumber, Select, message, Card, Space, Popconfirm, Tag } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined } from '@ant-design/icons'; import axios from 'axios'; const { Option } = Select; function CategoryManagement() { const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); const [modalVisible, setModalVisible] = useState(false); const [editingCategory, setEditingCategory] = useState(null); const [form] = Form.useForm(); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0, showTotal: (total) => `共 ${total} 条记录` }); const [keyword, setKeyword] = useState(''); const [status, setStatus] = useState('all'); const fetchCategories = async (page = 1, pageSize = 10) => { try { setLoading(true); const response = await axios.get('/api/consumable-categories', { params: { page, pageSize, keyword, status } }); setCategories(response.data.categories); setPagination(prev => ({ ...prev, current: page, pageSize, total: response.data.total })); } catch (error) { message.error('获取分类列表失败'); console.error('获取分类列表失败:', error); } finally { setLoading(false); } }; useEffect(() => { fetchCategories(); }, [keyword, status]); const showModal = (category = null) => { setEditingCategory(category); if (category) { form.setFieldsValue(category); } else { form.resetFields(); form.setFieldsValue({ status: 'active', sortOrder: 0 }); } setModalVisible(true); }; const handleCancel = () => { setModalVisible(false); setEditingCategory(null); }; const handleSubmit = async (values) => { try { if (editingCategory) { await axios.put(`/api/consumable-categories/${editingCategory.id}`, values); message.success('分类更新成功'); } else { await axios.post('/api/consumable-categories', values); message.success('分类创建成功'); } setModalVisible(false); fetchCategories(); setEditingCategory(null); } catch (error) { message.error(error.response?.data?.error || (editingCategory ? '分类更新失败' : '分类创建失败')); console.error('提交失败:', error); } }; const handleDelete = async (id) => { try { await axios.delete(`/api/consumable-categories/${id}`); message.success('删除成功'); fetchCategories(); } catch (error) { message.error(error.response?.data?.error || '删除失败'); console.error('删除失败:', error); } }; const columns = [ { title: 'ID', dataIndex: 'id', key: 'id', width: 80 }, { title: '分类名称', dataIndex: 'name', key: 'name', width: 150 }, { title: '描述', dataIndex: 'description', key: 'description', width: 200, render: (value) => value || '-' }, { title: '排序', dataIndex: 'sortOrder', key: 'sortOrder', width: 80 }, { title: '状态', dataIndex: 'status', key: 'status', width: 100, render: (value) => ( {value === 'active' ? '启用' : '停用'} ) }, { title: '创建时间', dataIndex: 'createdAt', key: 'createdAt', width: 180, render: (value) => value ? new Date(value).toLocaleString('zh-CN') : '-' }, { title: '操作', key: 'action', width: 150, render: (_, record) => ( handleDelete(record.id)}> ) } ]; return (
} onClick={() => showModal()}>添加分类 }> setKeyword(value)} allowClear /> fetchCategories(pagination.current, pagination.pageSize)} scroll={{ x: 1000 }} />
); } export default CategoryManagement;