import React, { useState, useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { FormRenderer } from '@/components/FormDesigner'; import { ArrowLeft, Loader2 } from 'lucide-react'; import { getFormDataById } from './service'; import type { FormDataResponse, FormDataStatus, FormDataBusinessType } from './types'; /** * 表单数据详情页 */ const FormDataDetail: React.FC = () => { const navigate = useNavigate(); const { id } = useParams<{ id: string }>(); const [loading, setLoading] = useState(false); const [data, setData] = useState(null); // 加载数据 useEffect(() => { if (id) { loadData(Number(id)); } }, [id]); const loadData = async (dataId: number) => { setLoading(true); try { const result = await getFormDataById(dataId); setData(result); } catch (error) { console.error('加载表单数据失败:', error); } finally { setLoading(false); } }; // 返回列表 const handleBack = () => { navigate('/form/data'); }; // 状态徽章 const getStatusBadge = (status: FormDataStatus) => { const statusMap: Record = { DRAFT: { variant: 'outline', text: '草稿' }, SUBMITTED: { variant: 'success', text: '已提交' }, COMPLETED: { variant: 'default', text: '已完成' }, }; const statusInfo = statusMap[status]; return {statusInfo.text}; }; // 业务类型徽章 const getBusinessTypeBadge = (type: FormDataBusinessType) => { const typeMap: Record = { STANDALONE: { variant: 'outline', text: '独立' }, WORKFLOW: { variant: 'default', text: '工作流' }, ORDER: { variant: 'secondary', text: '订单' }, }; const typeInfo = typeMap[type]; return {typeInfo.text}; }; // 描述项组件 const DescriptionItem: React.FC<{ label: string; value: React.ReactNode }> = ({ label, value }) => (
{label}
{value}
); if (loading) { return (
加载中...
); } if (!data) { return (
数据不存在
); } return (
表单数据详情
表单数据 {/* 使用 FormRenderer 以只读模式展示数据 */}
); }; export default FormDataDetail;