{{- $global := . }} {{- if .IsAdd }} // ============ 表单组件新增字段配置 ============ // 表单新增字段 {{- range .Fields}} {{- if .Form}} {{ GenerateReactFormItem . }} {{- end }} {{- end }} {{- else }} {{- if not .OnlyTemplate}} /** * KRA - {{.Description}}表单组件 * Auto-generated by KRA AutoCode */ import React, { useEffect, useState } from 'react'; import { Modal, Form, Input, message, {{- if .HasTimer }} DatePicker, {{- end }} {{- if or .DictTypes .HasDataSource }} Select, {{- end }} {{- if .HasBool }} Switch, {{- end }} {{- if .HasNumber }} InputNumber, {{- end }} {{- if .IsTree }} TreeSelect, {{- end }} } from 'antd'; import type { FormInstance } from 'antd/es/form'; import { create{{.StructName}}, update{{.StructName}}, find{{.StructName}}, {{- if .HasDataSource }} get{{.StructName}}DataSource, {{- end }} } from '@/services/kratos/{{.PackageName}}'; import type { {{.StructName}} } from '@/services/kratos/{{.PackageName}}'; {{- if .DictTypes }} import { useDictionary } from '@/hooks/useDictionary'; {{- end }} interface {{.StructName}}FormProps { visible: boolean; type: 'create' | 'edit'; record?: {{.StructName}} | null; onClose: () => void; onSuccess: () => void; {{- if .IsTree }} treeData?: {{.StructName}}[]; {{- end }} } const {{.StructName}}Form: React.FC<{{.StructName}}FormProps> = ({ visible, type, record, onClose, onSuccess, {{- if .IsTree }} treeData = [], {{- end }} }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [detailLoading, setDetailLoading] = useState(false); {{- if .HasDataSource }} const [dataSource, setDataSource] = useState>>({}); {{- end }} {{- if .DictTypes }} // 字典数据 {{- range $index, $element := .DictTypes}} const { options: {{$element}}Options } = useDictionary('{{$element}}'); {{- end }} {{- end }} {{- if .HasDataSource }} // 获取数据源 const fetchDataSource = async () => { try { const res = await get{{.StructName}}DataSource(); if (res.code === 0) { setDataSource(res.data || {}); } } catch (error) { console.error('获取数据源失败:', error); } }; {{- end }} // 获取详情数据 const fetchDetail = async (id: {{ GenerateTSType .PrimaryField.FieldType }}) => { setDetailLoading(true); try { const res = await find{{.StructName}}({ {{.PrimaryField.FieldJson}}: id }); if (res.code === 0 && res.data) { form.setFieldsValue(res.data); } } catch (error) { message.error('获取详情失败'); } finally { setDetailLoading(false); } }; useEffect(() => { if (visible) { {{- if .HasDataSource }} fetchDataSource(); {{- end }} if (type === 'edit' && record?.{{.PrimaryField.FieldJson}}) { fetchDetail(record.{{.PrimaryField.FieldJson}}); } else if (type === 'create') { form.resetFields(); {{- if .IsTree }} if (record?.parentID) { form.setFieldsValue({ parentID: record.parentID }); } {{- end }} } } }, [visible, type, record]); // 提交表单 const handleSubmit = async () => { try { const values = await form.validateFields(); setLoading(true); const submitData = type === 'edit' ? { ...record, ...values } : values; const res = type === 'create' ? await create{{.StructName}}(submitData) : await update{{.StructName}}(submitData); if (res.code === 0) { message.success(type === 'create' ? '创建成功' : '更新成功'); handleClose(); onSuccess(); } else { message.error(res.msg || (type === 'create' ? '创建失败' : '更新失败')); } } catch (error) { // 表单验证失败 } finally { setLoading(false); } }; // 关闭弹窗 const handleClose = () => { form.resetFields(); onClose(); }; return (
{{- if .IsTree }} {{- end }} {{- range .Fields}} {{- if .Form}} {{ GenerateReactFormItem . }} {{- end }} {{- end }}
); }; export default {{.StructName}}Form; {{- else}} /** * KRA - {{.Description}}表单组件 * Auto-generated by KRA AutoCode */ import React from 'react'; import { Modal, Form, Input } from 'antd'; interface {{.StructName}}FormProps { visible: boolean; type: 'create' | 'edit'; record?: any; onClose: () => void; onSuccess: () => void; } const {{.StructName}}Form: React.FC<{{.StructName}}FormProps> = ({ visible, type, onClose, onSuccess, }) => { const [form] = Form.useForm(); return ( { form.validateFields().then(() => { onSuccess(); onClose(); }); }} onCancel={onClose} destroyOnClose >
{/* 表单字段 */}
); }; export default {{.StructName}}Form; {{- end }} {{- end }}