feat(工单管理): 添加工单编号自动生成功能

新增工单编号自动生成函数,并在创建工单时自动填充编号。同时优化表单渲染逻辑,仅在新建工单时显示编号字段。
This commit is contained in:
zhang1106
2026-01-21 17:03:01 +08:00
parent ee1e10d84e
commit e9f786655a
+36 -15
View File
@@ -72,6 +72,13 @@ const getPriorityText = (priority) => {
return texts[priority] || priority;
};
const generateTicketId = () => {
const prefix = 'TKT';
const timestamp = dayjs().format('YYYYMMDDHHmmss');
const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
return `${prefix}${timestamp}${random}`;
};
function TicketManagement() {
const [tickets, setTickets] = useState([]);
const [devices, setDevices] = useState([]);
@@ -360,6 +367,8 @@ function TicketManagement() {
} else {
form.resetFields();
setDeviceSource('select');
const newTicketId = generateTicketId();
form.setFieldsValue({ ticketId: newTicketId });
}
setModalVisible(true);
}, []);
@@ -524,23 +533,35 @@ function TicketManagement() {
}, [deviceSource, devices]);
const renderFormItems = useCallback(() => {
return ticketFields.map(field => {
if (field.fieldName === 'deviceId') {
return (
<React.Fragment key="deviceSource">
<Form.Item label="设备来源" required>
<Select value={deviceSource} onChange={handleDeviceSourceChange} style={{ width: 200 }}>
<Option value="select">从设备管理选择</Option>
<Option value="manual">手动输入</Option>
</Select>
</Form.Item>
{renderDeviceFormItems()}
</React.Fragment>
);
const items = [];
if (!editingTicket) {
items.push(
<Form.Item key="ticketId" name="ticketId" label="工单编号">
<Input placeholder="自动生成" disabled style={{ background: '#f5f5f5' }} />
</Form.Item>
);
}
ticketFields.forEach(field => {
if (field.fieldName === 'ticketId' || field.fieldName === 'deviceId') {
if (field.fieldName === 'deviceId') {
items.push(
<React.Fragment key="deviceSource">
<Form.Item label="设备来源" required>
<Select value={deviceSource} onChange={handleDeviceSourceChange} style={{ width: 200 }}>
<Option value="select">从设备管理选择</Option>
<Option value="manual">手动输入</Option>
</Select>
</Form.Item>
{renderDeviceFormItems()}
</React.Fragment>
);
}
} else {
items.push(renderFormItem(field));
}
return renderFormItem(field);
});
}, [ticketFields, deviceSource, devices, handleDeviceSourceChange, renderDeviceFormItems, renderFormItem]);
return items;
}, [ticketFields, deviceSource, devices, handleDeviceSourceChange, renderDeviceFormItems, renderFormItem, editingTicket]);
const getActionItems = useCallback((record) => (
<Menu