/** * 倉庫對話框元件 * 重構後:加入驗證邏輯 */ import { useEffect, useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "./ui/dialog"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "./ui/alert-dialog"; import { Input } from "./ui/input"; import { Label } from "./ui/label"; import { Textarea } from "./ui/textarea"; import { Button } from "./ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "./ui/select"; import { Trash2 } from "lucide-react"; import { Warehouse, WarehouseType, Store } from "../types/warehouse"; import { validateWarehouse } from "../utils/validation"; import { toast } from "sonner@2.0.3"; interface WarehouseDialogProps { open: boolean; onOpenChange: (open: boolean) => void; warehouse: Warehouse | null; onSave: (warehouse: Omit) => void; onDelete?: (warehouseId: string) => void; stores?: Store[]; // 門市列表 } export default function WarehouseDialog({ open, onOpenChange, warehouse, onSave, onDelete, stores = [], // 預設為空陣列 }: WarehouseDialogProps) { const [formData, setFormData] = useState<{ name: string; address: string; manager: string; phone: string; description: string; type: WarehouseType; storeId?: string; storeName?: string; }>({ name: "", address: "", manager: "", phone: "", description: "", type: "中央倉庫", storeId: undefined, storeName: undefined, }); const [showDeleteDialog, setShowDeleteDialog] = useState(false); useEffect(() => { if (warehouse) { setFormData({ name: warehouse.name, address: warehouse.address, manager: warehouse.manager, phone: warehouse.phone, description: warehouse.description, type: warehouse.type, storeId: warehouse.storeId, storeName: warehouse.storeName, }); } else { setFormData({ name: "", address: "", manager: "", phone: "", description: "", type: "中央倉庫", storeId: undefined, storeName: undefined, }); } }, [warehouse, open]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const validation = validateWarehouse(formData); if (!validation.isValid) { toast.error(validation.error); return; } onSave(formData); }; const handleDelete = () => { if (warehouse && onDelete) { onDelete(warehouse.id); setShowDeleteDialog(false); onOpenChange(false); } }; return ( <> {warehouse ? "編輯倉庫" : "新增倉庫"} {warehouse ? "修改倉庫資訊" : "建立新的倉庫資訊"}
{/* 區塊 A:基本資訊 */}

基本資訊

{/* 倉庫名稱 */}
setFormData({ ...formData, name: e.target.value })} placeholder="例:中央倉庫" required />
{/* 倉庫類型 */}
{/* 綁定門市 - 僅當類型為門市時顯示 */} {formData.type === "門市" && (
{formData.storeId && (

{stores.find((s) => s.id === formData.storeId)?.address}

)}
)}
{/* 區塊 B:位置 */}

位置

{/* 倉庫地址 */}
setFormData({ ...formData, address: e.target.value })} placeholder="例:台北市信義區信義路五段7號" required />
{/* 區塊 C:聯絡資訊 */}

聯絡資訊

{/* 負責人和聯絡電話 */}
setFormData({ ...formData, manager: e.target.value }) } placeholder="例:張經理" />
setFormData({ ...formData, phone: e.target.value })} placeholder="例:02-1234-5678" />
{/* 備註說明 */}