fork download
  1. import { useForm } from "react-hook-form";
  2. import { Card, CardContent } from "@/components/ui/card";
  3. import { Button } from "@/components/ui/button";
  4. import { Input } from "@/components/ui/input";
  5. import { Select, SelectItem } from "@/components/ui/select";
  6. import { Textarea } from "@/components/ui/textarea";
  7.  
  8. export default function RTVForm() {
  9. const { register, handleSubmit, watch, formState: { errors, isValid } } = useForm({ mode: "onChange" });
  10.  
  11. const onSubmit = (data) => {
  12. console.log("Form Submitted", data);
  13. };
  14.  
  15. return (
  16. <div className="max-w-2xl mx-auto p-6">
  17. <Card>
  18. <CardContent className="p-6 space-y-4">
  19. <h2 className="text-xl font-bold">สร้างเอกสาร RTV</h2>
  20.  
  21. <form onSubmit={handleSubmit(onSubmit)}>
  22. <label>ซัพพลายเออร์</label>
  23. <Select {...register("supplier", { required: true })}>
  24. <SelectItem value="ABC Ltd">ABC Ltd</SelectItem>
  25. <SelectItem value="XYZ Corp">XYZ Corp</SelectItem>
  26. </Select>
  27. {errors.supplier && <p className="text-red-500">โปรดเลือกซัพพลายเออร์</p>}
  28.  
  29. <label>หมายเลข PO</label>
  30. <Input {...register("poNumber", { required: true })} placeholder="ระบุหมายเลข PO" />
  31. {errors.poNumber && <p className="text-red-500">โปรดระบุหมายเลข PO</p>}
  32.  
  33. <label>สินค้า</label>
  34. <Input {...register("product", { required: true })} placeholder="ชื่อสินค้า / รหัสสินค้า" />
  35. {errors.product && <p className="text-red-500">โปรดระบุสินค้า</p>}
  36.  
  37. <label>จำนวนที่ต้องการคืน</label>
  38. <Input type="number" {...register("quantity", { required: true })} />
  39. {errors.quantity && <p className="text-red-500">โปรดระบุจำนวนที่ต้องการคืน</p>}
  40.  
  41. <label>เหตุผลในการคืนสินค้า</label>
  42. <Select {...register("reason", { required: true })}>
  43. <SelectItem value="สินค้าชำรุด">สินค้าชำรุด</SelectItem>
  44. <SelectItem value="ไม่ตรงสเปค">ไม่ตรงสเปค</SelectItem>
  45. </Select>
  46. {errors.reason && <p className="text-red-500">โปรดเลือกเหตุผล</p>}
  47.  
  48. <label>ที่อยู่ในการรับคืน</label>
  49. <Input {...register("returnLocation", { required: true })} placeholder="ที่อยู่รับคืน" />
  50. {errors.returnLocation && <p className="text-red-500">โปรดระบุที่อยู่รับคืน</p>}
  51.  
  52. <label>วันที่ในการรับคืน</label>
  53. <Input type="date" {...register("returnDate", { required: true })} />
  54. {errors.returnDate && <p className="text-red-500">โปรดระบุวันที่รับคืน</p>}
  55.  
  56. <label>ชื่อผู้ติดต่อ</label>
  57. <Input {...register("contactName", { required: true })} placeholder="ชื่อผู้ติดต่อ" />
  58. {errors.contactName && <p className="text-red-500">โปรดระบุชื่อผู้ติดต่อ</p>}
  59.  
  60. <label>เบอร์โทรศัพท์</label>
  61. <Input {...register("contactPhone", { required: true })} placeholder="เบอร์โทรศัพท์" />
  62. {errors.contactPhone && <p className="text-red-500">โปรดระบุเบอร์โทรศัพท์</p>}
  63.  
  64. <label>หมายเหตุเพิ่มเติม</label>
  65. <Textarea {...register("remarks")} placeholder="ระบุข้อมูลเพิ่มเติม (ถ้ามี)" />
  66.  
  67. <Button className="w-full" type="submit" disabled={!isValid}>บันทึกเอกสาร RTV</Button>
  68. </form>
  69. </CardContent>
  70. </Card>
  71. </div>
  72. );
  73. }
  74.  
Success #stdin #stdout 0.02s 25672KB
stdin
Standard input is empty
stdout
import { useForm } from "react-hook-form";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Select, SelectItem } from "@/components/ui/select";
import { Textarea } from "@/components/ui/textarea";

export default function RTVForm() {
  const { register, handleSubmit, watch, formState: { errors, isValid } } = useForm({ mode: "onChange" });

  const onSubmit = (data) => {
    console.log("Form Submitted", data);
  };

  return (
    <div className="max-w-2xl mx-auto p-6">
      <Card>
        <CardContent className="p-6 space-y-4">
          <h2 className="text-xl font-bold">สร้างเอกสาร RTV</h2>
          
          <form onSubmit={handleSubmit(onSubmit)}>
            <label>ซัพพลายเออร์</label>
            <Select {...register("supplier", { required: true })}>
              <SelectItem value="ABC Ltd">ABC Ltd</SelectItem>
              <SelectItem value="XYZ Corp">XYZ Corp</SelectItem>
            </Select>
            {errors.supplier && <p className="text-red-500">โปรดเลือกซัพพลายเออร์</p>}

            <label>หมายเลข PO</label>
            <Input {...register("poNumber", { required: true })} placeholder="ระบุหมายเลข PO" />
            {errors.poNumber && <p className="text-red-500">โปรดระบุหมายเลข PO</p>}

            <label>สินค้า</label>
            <Input {...register("product", { required: true })} placeholder="ชื่อสินค้า / รหัสสินค้า" />
            {errors.product && <p className="text-red-500">โปรดระบุสินค้า</p>}

            <label>จำนวนที่ต้องการคืน</label>
            <Input type="number" {...register("quantity", { required: true })} />
            {errors.quantity && <p className="text-red-500">โปรดระบุจำนวนที่ต้องการคืน</p>}

            <label>เหตุผลในการคืนสินค้า</label>
            <Select {...register("reason", { required: true })}>
              <SelectItem value="สินค้าชำรุด">สินค้าชำรุด</SelectItem>
              <SelectItem value="ไม่ตรงสเปค">ไม่ตรงสเปค</SelectItem>
            </Select>
            {errors.reason && <p className="text-red-500">โปรดเลือกเหตุผล</p>}

            <label>ที่อยู่ในการรับคืน</label>
            <Input {...register("returnLocation", { required: true })} placeholder="ที่อยู่รับคืน" />
            {errors.returnLocation && <p className="text-red-500">โปรดระบุที่อยู่รับคืน</p>}

            <label>วันที่ในการรับคืน</label>
            <Input type="date" {...register("returnDate", { required: true })} />
            {errors.returnDate && <p className="text-red-500">โปรดระบุวันที่รับคืน</p>}

            <label>ชื่อผู้ติดต่อ</label>
            <Input {...register("contactName", { required: true })} placeholder="ชื่อผู้ติดต่อ" />
            {errors.contactName && <p className="text-red-500">โปรดระบุชื่อผู้ติดต่อ</p>}

            <label>เบอร์โทรศัพท์</label>
            <Input {...register("contactPhone", { required: true })} placeholder="เบอร์โทรศัพท์" />
            {errors.contactPhone && <p className="text-red-500">โปรดระบุเบอร์โทรศัพท์</p>}

            <label>หมายเหตุเพิ่มเติม</label>
            <Textarea {...register("remarks")} placeholder="ระบุข้อมูลเพิ่มเติม (ถ้ามี)" />

            <Button className="w-full" type="submit" disabled={!isValid}>บันทึกเอกสาร RTV</Button>
          </form>
        </CardContent>
      </Card>
    </div>
  );
}