/** * 採購單商品表格元件 */ import { Trash2 } from "lucide-react"; import { Button } from "@/Components/ui/button"; import { Input } from "@/Components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/Components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/Components/ui/table"; import type { PurchaseOrderItem, Supplier } from "@/types/purchase-order"; import { isPriceAlert, formatCurrency } from "@/utils/purchase-order"; interface PurchaseOrderItemsTableProps { items: PurchaseOrderItem[]; supplier?: Supplier; isReadOnly?: boolean; isDisabled?: boolean; onAddItem?: () => void; onRemoveItem?: (index: number) => void; onItemChange?: (index: number, field: keyof PurchaseOrderItem, value: string | number) => void; } export function PurchaseOrderItemsTable({ items, supplier, isReadOnly = false, isDisabled = false, onRemoveItem, onItemChange, }: PurchaseOrderItemsTableProps) { return (
商品名稱 數量 單位 預估單價 小計 {!isReadOnly && } {items.length === 0 ? ( {isDisabled ? "請先選擇供應商後才能新增商品" : "尚未新增任何商品項"} ) : ( items.map((item, index) => ( {/* 商品選擇 */} {isReadOnly ? ( {item.productName} ) : ( )} {/* 數量 */} {isReadOnly ? ( {Math.floor(item.quantity)} ) : ( onItemChange?.(index, "quantity", Math.floor(Number(e.target.value))) } disabled={isDisabled} className="h-10 text-left border-gray-200 w-24" /> )} {/* 單位 */} {item.unit || "-"} {/* 單價 */} {isReadOnly ? ( {formatCurrency(item.unitPrice)} ) : (
onItemChange?.(index, "unitPrice", Number(e.target.value)) } disabled={isDisabled} className={`h-10 text-left w-32 ${isPriceAlert(item.unitPrice, item.previousPrice) ? "border-amber-400 bg-amber-50 focus-visible:ring-amber-500" : "border-gray-200" }`} /> {isPriceAlert(item.unitPrice, item.previousPrice) && (

⚠️ 高於上次: {formatCurrency(item.previousPrice || 0)}

)}
)}
{/* 小計 */} {formatCurrency(item.subtotal)} {/* 刪除按鈕 */} {!isReadOnly && onRemoveItem && ( )}
)) )}
); }