/** * 生產工單詳情頁面 * 含追溯資訊:成品批號 → 原物料批號 → 來源採購單 */ import { Factory, ArrowLeft, Package, Calendar, User, Warehouse, FileText, Link2 } from 'lucide-react'; import { Button } from "@/Components/ui/button"; import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout"; import { Head, router, Link } from "@inertiajs/react"; import { getBreadcrumbs } from "@/utils/breadcrumb"; import { Badge } from "@/Components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/Components/ui/table"; interface ProductionOrderItem { id: number; quantity_used: number; unit?: { id: number; name: string } | null; inventory: { id: number; batch_number: string; box_number: string | null; arrival_date: string | null; origin_country: string | null; product: { id: number; name: string; code: string } | null; source_purchase_order?: { id: number; code: string; vendor?: { id: number; name: string } | null; } | null; } | null; } interface ProductionOrder { id: number; code: string; product: { id: number; name: string; code: string; base_unit?: { name: string } | null } | null; warehouse: { id: number; name: string } | null; user: { id: number; name: string } | null; output_batch_number: string; output_box_count: string | null; output_quantity: number; production_date: string; expiry_date: string | null; status: 'draft' | 'completed' | 'cancelled'; remark: string | null; created_at: string; items: ProductionOrderItem[]; } interface Props { productionOrder: ProductionOrder; } const statusConfig: Record = { draft: { label: "草稿", variant: "secondary" }, completed: { label: "已完成", variant: "default" }, cancelled: { label: "已取消", variant: "destructive" }, }; export default function ProductionShow({ productionOrder }: Props) { return (

{productionOrder.code}

生產工單詳情與追溯資訊

{statusConfig[productionOrder.status]?.label || productionOrder.status}
{/* 成品資訊 */}

成品資訊

成品商品

{productionOrder.product?.name || '-'} ({productionOrder.product?.code || '-'})

成品批號

{productionOrder.output_batch_number}

生產數量

{productionOrder.output_quantity.toLocaleString()} {productionOrder.product?.base_unit?.name && ( {productionOrder.product.base_unit.name} )} {productionOrder.output_box_count && ( ({productionOrder.output_box_count} 箱) )}

入庫倉庫

{productionOrder.warehouse?.name || '-'}

生產日期

{productionOrder.production_date}

成品效期

{productionOrder.expiry_date || '-'}

操作人員

{productionOrder.user?.name || '-'}

{productionOrder.remark && (

備註

{productionOrder.remark}

)}
{/* 原物料使用明細 (BOM) */}

原物料使用明細 (BOM) - 追溯資訊

{productionOrder.items.length === 0 ? (

無原物料記錄

) : (
原物料 批號 來源國家 入庫日期 使用量 來源採購單 {productionOrder.items.map((item) => (
{item.inventory?.product?.name || '-'}
{item.inventory?.product?.code || '-'}
{item.inventory?.batch_number || '-'} {item.inventory?.box_number && ( #{item.inventory.box_number} )} {item.inventory?.origin_country || '-'} {item.inventory?.arrival_date || '-'} {item.quantity_used.toLocaleString()} {item.unit?.name && ( {item.unit.name} )} {item.inventory?.source_purchase_order ? (
{item.inventory.source_purchase_order.code} {item.inventory.source_purchase_order.vendor && ( {item.inventory.source_purchase_order.vendor.name} )}
) : ( - )}
))}
)}
); }