/**
* 安全庫存設定列表
*/
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)}
);
})}
);
}