import React, { useState, useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { FormDesigner } from '@/components/FormDesigner'; import type { FormSchema } from '@/components/FormDesigner'; import { ArrowLeft, Workflow } from 'lucide-react'; import { getDefinitionById, updateDefinition } from './service'; import type { FormDefinitionRequest } from './types'; /** * 表单设计器页面 */ const FormDesignerPage: React.FC = () => { const navigate = useNavigate(); const { id } = useParams<{ id: string }>(); const [formSchema, setFormSchema] = useState(null); const [formDefinition, setFormDefinition] = useState(null); // 加载表单定义 useEffect(() => { if (id) { loadFormDefinition(Number(id)); } }, [id]); const loadFormDefinition = async (definitionId: number) => { try { const result = await getDefinitionById(definitionId); setFormDefinition(result); setFormSchema(result.schema); } catch (error) { console.error('加载表单定义失败:', error); } }; // 保存表单(只更新 schema,不修改基本信息) const handleSave = async (schema: FormSchema) => { if (!id || !formDefinition) { alert('表单信息加载失败'); return; } const request: FormDefinitionRequest = { name: formDefinition.name, key: formDefinition.key, categoryId: formDefinition.categoryId, description: formDefinition.description, isTemplate: formDefinition.isTemplate, schema, status: formDefinition.status || 'DRAFT', }; try { await updateDefinition(Number(id), request); alert('保存成功'); } catch (error) { console.error('保存表单失败:', error); alert('保存失败'); } }; // 返回列表 const handleBack = () => { navigate('/form/definitions'); }; return (
{/* 页面标题 */}

{formDefinition?.name || '表单设计'}

{formDefinition?.description || '拖拽左侧组件到画布,配置字段属性和验证规则'}

{/* 表单设计器区域 */}
); }; export default FormDesignerPage;