import React, { useState } from 'react'; import { Box, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography, Chip, Card, CardContent, } from '@mui/material'; import { useReactTable, getCoreRowModel, createColumnHelper, flexRender, } from '@tanstack/react-table'; import DescriptionIcon from '@mui/icons-material/Description'; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; import CancelIcon from '@mui/icons-material/Cancel'; import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; interface QCReport { id: string; productName: string; isQualified: boolean; remarks: string; reportDate: string; batchNumber: string; inspector: string; testResults: string; specifications: string; } interface QCReportFormProps { reports: QCReport[]; } function QCReportForm({ reports }: QCReportFormProps): JSX.Element { const [selectedReport, setSelectedReport] = useState(null); const handleReportClick = (report: QCReport): void => { setSelectedReport(report); }; const getQualifiedStatus = (isQualified: boolean) => { return isQualified ? ( } label="合格" color="success" size="small" sx={{ fontWeight: 'medium' }} /> ) : ( } label="不合格" color="error" size="small" sx={{ fontWeight: 'medium' }} /> ); }; const columnHelper = createColumnHelper(); const columns = [ // columnHelper.accessor('productName', { // header: '產品', // cell: info => ( // // {info.getValue()} // // ), // }), columnHelper.accessor('isQualified', { header: '合格', cell: info => getQualifiedStatus(info.getValue()), }), columnHelper.accessor('remarks', { header: '備註', cell: info => ( {info.getValue()} ), }), columnHelper.accessor('reportDate', { header: '上報日期', cell: info => ( {info.getValue()} ), }), ]; const table = useReactTable({ data: reports, columns, getCoreRowModel: getCoreRowModel(), }); return ( {/* Table Section */} 上報資料 {table.getHeaderGroups().map(headerGroup => ( {headerGroup.headers.map(header => ( {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())} ))} ))} {table.getRowModel().rows.map(row => ( handleReportClick(row.original)} sx={{ cursor: 'pointer', '&:hover': { bgcolor: 'grey.50' }, bgcolor: selectedReport?.id === row.original.id ? 'primary.light' : 'inherit', transition: 'background-color 0.15s', }} > {row.getVisibleCells().map(cell => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} ))}
); } // Dummy data const dummyReports = [ { id: '1', productName: '無線藍牙耳機', isQualified: false, remarks: '包裝有破損', reportDate: '2024-08-06', batchNumber: 'WBE-240806-002', inspector: '李測試', testResults: '音質測試:左右聲道音量差異>3dB,不符合標準', specifications: '頻響範圍20Hz-20kHz,左右聲道音量差≤1dB,電池續航≥8小時', }, { id: '2', productName: '筆記型電腦', isQualified: true, remarks: '經檢查,無損壞', reportDate: '2024-08-05', batchNumber: 'NB-240805-003', inspector: '王檢驗', testResults: '溫度測試:CPU最高溫度75°C,性能測試:符合預期', specifications: 'CPU溫度≤85°C,開機時間≤30秒,電池續航≥6小時', }, ]; // Main component function EscalationLog(): JSX.Element { return ; }; export default EscalationLog;