import { Wand2 } from "lucide-react"; import { Button } from "@/Components/ui/button"; import { Input } from "@/Components/ui/input"; import { Label } from "@/Components/ui/label"; import { Textarea } from "@/Components/ui/textarea"; import { SearchableSelect } from "@/Components/ui/searchable-select"; import { Switch } from "@/Components/ui/switch"; import { useForm } from "@inertiajs/react"; import { toast } from "sonner"; import type { Category, Product } from "@/Pages/Product/Index"; import type { Unit } from "@/Components/Unit/UnitManagerDialog"; interface ProductFormProps { initialData?: Product | null; categories: Category[]; units: Unit[]; onSubmitsuccess?: () => void; } export default function ProductForm({ initialData, categories, units, }: ProductFormProps) { const isEdit = !!initialData; const urlParams = new URLSearchParams(window.location.search); const from = urlParams.get('from'); const { data, setData, post, put, processing, errors } = useForm({ code: initialData?.code || "", barcode: initialData?.barcode || "", name: initialData?.name || "", category_id: initialData?.categoryId?.toString() || (categories.length > 0 ? categories[0].id.toString() : ""), brand: initialData?.brand || "", specification: initialData?.specification || "", base_unit_id: initialData?.baseUnitId?.toString() || "", large_unit_id: initialData?.largeUnitId?.toString() || "", conversion_rate: initialData?.conversionRate?.toString() || "", purchase_unit_id: initialData?.purchaseUnitId?.toString() || "", location: initialData?.location || "", cost_price: initialData?.cost_price?.toString() || "", price: initialData?.price?.toString() || "", member_price: initialData?.member_price?.toString() || "", wholesale_price: initialData?.wholesale_price?.toString() || "", is_active: initialData?.is_active ?? true, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (isEdit) { put(route("products.update", { product: initialData.id, from }), { onSuccess: () => toast.success("商品已更新"), onError: () => toast.error("更新失敗,請檢查輸入資料"), }); } else { post(route("products.store"), { onSuccess: () => toast.success("商品已建立"), onError: () => toast.error("新增失敗,請檢查輸入資料"), }); } }; const generateRandomBarcode = () => { let result = ""; for (let i = 0; i < 13; i++) { result += Math.floor(Math.random() * 10).toString(); } setData("barcode", result); }; const generateRandomCode = () => { const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; let result = ""; for (let i = 0; i < 8; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } setData("code", result); }; return (
); }