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) => (