import React, { useState, useEffect } from 'react';
import {
Table,
Button,
Modal,
Form,
Input,
Select,
message,
Card,
Space,
InputNumber,
Switch,
} from 'antd';
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons';
import axios from 'axios';
const { Option } = Select;
function TicketFieldManagement() {
const [fields, setFields] = useState([]);
const [loading, setLoading] = useState(true);
const [modalVisible, setModalVisible] = useState(false);
const [editingField, setEditingField] = useState(null);
const [form] = Form.useForm();
const fetchFields = async () => {
try {
setLoading(true);
const response = await axios.get('/api/ticket-fields');
setFields(response.data.sort((a, b) => a.order - b.order));
} catch (error) {
message.error('获取字段列表失败');
console.error('获取字段列表失败:', error);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchFields();
}, []);
const showModal = (field = null) => {
setEditingField(field);
if (field) {
const fieldData = {
...field,
options: field.options ? JSON.stringify(field.options, null, 2) : '',
};
form.setFieldsValue(fieldData);
} else {
form.resetFields();
}
setModalVisible(true);
};
const handleCancel = () => {
setModalVisible(false);
setEditingField(null);
};
const handleSubmit = async values => {
try {
const fieldData = {
...values,
options: values.options ? JSON.parse(values.options || '[]') : null,
};
if (editingField) {
await axios.put(`/api/ticket-fields/${editingField.fieldId}`, fieldData);
message.success('字段更新成功');
} else {
await axios.post('/api/ticket-fields', fieldData);
message.success('字段创建成功');
}
setModalVisible(false);
fetchFields();
setEditingField(null);
} catch (error) {
message.error(editingField ? '字段更新失败' : '字段创建失败');
console.error(error);
}
};
const handleDelete = async fieldId => {
Modal.confirm({
title: '确认删除',
content: '确定要删除这个字段吗?',
okText: '删除',
okType: 'danger',
cancelText: '取消',
onOk: async () => {
try {
await axios.delete(`/api/ticket-fields/${fieldId}`);
message.success('字段删除成功');
fetchFields();
} catch (error) {
message.error('字段删除失败');
console.error('字段删除失败:', error);
}
},
});
};
const columns = [
{
title: '字段名称',
dataIndex: 'fieldName',
key: 'fieldName',
},
{
title: '显示名称',
dataIndex: 'displayName',
key: 'displayName',
},
{
title: '字段类型',
dataIndex: 'fieldType',
key: 'fieldType',
render: type => {
const typeMap = {
string: '文本',
number: '数字',
boolean: '布尔值',
select: '下拉选择',
date: '日期',
datetime: '日期时间',
textarea: '多行文本',
device: '设备选择',
};
return typeMap[type] || type;
},
},
{
title: '必填',
dataIndex: 'required',
key: 'required',
render: required =>