/** * 安全庫存設定列表 */ import { Trash2, Pencil, Package } from "lucide-react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/Components/ui/table"; import { Button } from "@/Components/ui/button"; import { StatusBadge } from "@/Components/shared/StatusBadge"; import { SafetyStockSetting, WarehouseInventory } from "@/types/warehouse"; import { calculateProductTotalStock, getSafetyStockStatus } from "@/utils/inventory"; import { Can } from "@/Components/Permission/Can"; interface SafetyStockListProps { settings: SafetyStockSetting[]; inventories: WarehouseInventory[]; onEdit: (setting: SafetyStockSetting) => void; onDelete: (id: string) => void; } export default function SafetyStockList({ settings, inventories, onEdit, onDelete, }: SafetyStockListProps) { if (settings.length === 0) { return (

尚無安全庫存設定

尚未為此倉庫設定任何商品的安全庫存量。設定後系統將在庫存不足時提醒您。

); } // 按產品類型與名稱排序 const sortedSettings = [...settings].sort((a, b) => { if (a.productType !== b.productType) { return a.productType.localeCompare(b.productType, "zh-TW"); } return a.productName.localeCompare(b.productName, "zh-TW"); }); // 獲取狀態徽章 (與 InventoryTable 保持一致) const getStatusBadge = (quantity: number, safetyStock: number, isNew?: boolean) => { // 如果是自動帶入的品項且尚未存檔,顯示「未設定」 if (isNew) { return ( 未設定 ); } const status = getSafetyStockStatus(quantity, safetyStock); if (status === '正常') { return ( 正常 ); } if (status === '接近') { // 數量 <= 安全庫存 * 1.2 return ( 接近 ); } if (status === '低於') { // 數量 < 安全庫存 return ( 低於 ); } return null; }; return (
# 商品名稱 類型 安全庫存量 目前總庫存 庫存狀態 操作 {sortedSettings.map((setting, index) => { const currentStock = calculateProductTotalStock(inventories, setting.productId); return ( {index + 1} {setting.productName} {setting.productType} {setting.safetyStock} {setting.unit || '個'} {currentStock} {setting.unit || '個'} {getStatusBadge(currentStock, setting.safetyStock, setting.isNew)}
); })}
); }