/** * 採購單商品表格元件 */ 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 { 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) => { // 計算換算後的單價 (基本單位單價) const convertedUnitPrice = item.selectedUnit === 'large' && item.conversion_rate ? item.unitPrice / item.conversion_rate : item.unitPrice; return ( {/* 商品選擇 */} {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" /> )} {/* 單位選擇 */} {!isReadOnly && item.large_unit_id ? ( ) : ( {item.selectedUnit === 'large' && item.large_unit_name ? item.large_unit_name : (item.base_unit_name || "個")} )} {/* 換算基本單位 */}
{item.selectedUnit === 'large' && item.conversion_rate ? item.quantity * item.conversion_rate : item.quantity} {item.base_unit_name || "個"}
{/* 單價 */} {isReadOnly ? ( {formatCurrency(item.unitPrice)} ) : (
onItemChange?.(index, "unitPrice", Number(e.target.value)) } disabled={isDisabled} className={`h-10 text-left w-32 ${ // 如果有數量但沒有單價,顯示錯誤樣式 item.quantity > 0 && (!item.unitPrice || item.unitPrice <= 0) ? "border-red-400 bg-red-50 focus-visible:ring-red-500" : "border-gray-200" }`} /> {/* 錯誤提示 (保留必填提示) */} {item.quantity > 0 && (!item.unitPrice || item.unitPrice <= 0) && (

❌ 請填寫金額

)}
)}
{/* 小計 */} {formatCurrency(item.subtotal)} {/* 換算採購單價 / 基本單位 */}
{formatCurrency(convertedUnitPrice)} / {item.base_unit_name || "個"}
{convertedUnitPrice > 0 && item.previousPrice && item.previousPrice > 0 && ( <> {convertedUnitPrice > item.previousPrice && (

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

)} {convertedUnitPrice < item.previousPrice && (

📉 低於上次: {formatCurrency(item.previousPrice)}

)} )}
{/* 刪除按鈕 */} {!isReadOnly && onRemoveItem && ( )}
); }) )}
); }