'use client'; import React, { useEffect, useState } from 'react'; import { Alert, Button, Card, Col, Empty, Flex, Image as AntImage, Row, Space, Spin, Table, Tabs, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { ArrowLeftOutlined } from '@ant-design/icons'; import { useRouter } from 'next/navigation'; import { Breadcrumb } from '@/components/Breadcrumb'; import { StatusBadge } from '@/components/StatusBadge'; import { BackendApi } from '@/services/backendApi'; import type { InspectionRecord, MachineDetail, MachineImageItem } from '@/types'; const { Text } = Typography; export default function MachineDetailPage({ params }: { params: { serialNumber: string } }) { const router = useRouter(); const serialNumber = decodeURIComponent(params.serialNumber); const [machine, setMachine] = useState(null); const [loading, setLoading] = useState(true); const [errorMessage, setErrorMessage] = useState(''); useEffect(() => { let isMounted = true; const loadMachineDetail = async () => { try { setLoading(true); setErrorMessage(''); const data = await BackendApi.getMachineDetail(serialNumber); if (!isMounted) return; setMachine(data); } catch (error) { if (!isMounted) return; setMachine(null); setErrorMessage(error instanceof Error ? error.message : '机器详情加载失败,请稍后重试'); } finally { if (isMounted) { setLoading(false); } } }; loadMachineDetail(); return () => { isMounted = false; }; }, [serialNumber]); const renderImageGroup = (images: MachineImageItem[]) => { if (!images.length) return ; return ( {images.map((image) => (
{image.name} {image.createdAt}
))}
); }; const recordColumns: ColumnsType = [ { title: '查验时间', dataIndex: 'time', key: 'time' }, { title: '操作人', dataIndex: 'operator', key: 'operator' }, { title: '结果', dataIndex: 'result', key: 'result' }, { title: '备注', dataIndex: 'remark', key: 'remark' }, ]; if (loading) { return ( ); } if (!machine) { return ( {errorMessage && ( )} ); } const imageTabs = [ { key: 'incoming', label: '来料检验单', children: renderImageGroup(machine.images.incomingInspection) }, { key: 'startup', label: '开机测试样张', children: renderImageGroup(machine.images.startupTestSample) }, { key: 'production', label: '生产加工单', children: renderImageGroup(machine.images.productionOrder) }, { key: 'robot', label: '机器人查验拍照', children: renderImageGroup(machine.images.robotInspection) }, ]; return (
{errorMessage && ( )} 序列号: {machine.serialNumber} 机器型号: {machine.modelName} 所属报关单: 当前状态: {Object.entries(machine.specs).map(([key, value]) => ( {key}: {value} ))} }} /> ); }