/** * 安全庫存設定頁面 * Last Updated: 2025-12-29 */ import { useState, useEffect } from "react"; import { ArrowLeft, Plus, Shield } from "lucide-react"; import { Button } from "@/Components/ui/button"; import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout"; import { Head, Link, router } from "@inertiajs/react"; import { SafetyStockSetting, WarehouseInventory, Warehouse, Product } from "@/types/warehouse"; import SafetyStockList from "@/Components/Warehouse/SafetyStock/SafetyStockList"; import AddSafetyStockDialog from "@/Components/Warehouse/SafetyStock/AddSafetyStockDialog"; import EditSafetyStockDialog from "@/Components/Warehouse/SafetyStock/EditSafetyStockDialog"; import { toast } from "sonner"; import { getInventoryBreadcrumbs } from "@/utils/breadcrumb"; import { Can } from "@/Components/Permission/Can"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/Components/ui/alert-dialog"; interface Props { warehouse: Warehouse; safetyStockSettings: SafetyStockSetting[]; inventories: WarehouseInventory[]; availableProducts: Product[]; } export default function SafetyStockPage({ warehouse, safetyStockSettings: initialSettings = [], inventories = [], availableProducts = [], }: Props) { const [settings, setSettings] = useState(initialSettings); const [showAddDialog, setShowAddDialog] = useState(false); const [editingSetting, setEditingSetting] = useState(null); const [deleteId, setDeleteId] = useState(null); // 當 Props 更新時同步本地 State useEffect(() => { setSettings(initialSettings); }, [initialSettings]); const handleAdd = (newSettings: SafetyStockSetting[]) => { router.post(route('warehouses.safety-stock.store', warehouse.id), { settings: newSettings.map(s => ({ productId: s.productId, quantity: s.safetyStock })), }, { onSuccess: () => { setShowAddDialog(false); toast.success(`成功新增 ${newSettings.length} 項安全庫存設定`); }, onError: (errors) => { const firstError = Object.values(errors)[0]; toast.error(typeof firstError === 'string' ? firstError : "新增失敗"); } }); }; const handleEdit = (updatedSetting: SafetyStockSetting) => { router.put(route('warehouses.safety-stock.update', [warehouse.id, updatedSetting.id]), { safetyStock: updatedSetting.safetyStock, }, { onSuccess: () => { setEditingSetting(null); toast.success(`成功更新 ${updatedSetting.productName} 的安全庫存`); }, onError: (errors) => { const firstError = Object.values(errors)[0]; toast.error(typeof firstError === 'string' ? firstError : "更新失敗"); } }); }; const handleDelete = () => { if (!deleteId) return; router.delete(route('warehouses.safety-stock.destroy', [warehouse.id, deleteId]), { onSuccess: () => { setDeleteId(null); toast.success("已刪除安全庫存設定"); }, onError: () => { toast.error("刪除失敗"); } }); }; if (!warehouse) { return
正在載入倉庫資料...
; } return (
{/* 頁面標題與導航 */}

安全庫存設定 - {warehouse.name}

設定商品的安全庫存量,當庫存低於安全值時將發出警告

{/* 安全庫存列表 */} {/* 新增對話框 */} {/* 編輯對話框 */} {editingSetting && ( !open && setEditingSetting(null)} setting={editingSetting} onSave={handleEdit} /> )} {/* 刪除確認對話框 */} !open && setDeleteId(null)}> 確認刪除安全庫存設定 您確定要刪除此項商品的安全庫存設定嗎?刪除後系統將不再針對此商品發出庫存不足警告。此動作無法復原。 取消 確認刪除
); }