From 14f61e24947fb92dd71ec0a7196a6e815f8e66da Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 21 Jul 2025 07:54:26 +0000 Subject: (최겸)기술영업 RFQ 담당자 초대, 요구사항 반영 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/signup/tech-vendor-join-form.tsx | 69 ++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 12 deletions(-) (limited to 'components/signup/tech-vendor-join-form.tsx') diff --git a/components/signup/tech-vendor-join-form.tsx b/components/signup/tech-vendor-join-form.tsx index db81b88c..efdee322 100644 --- a/components/signup/tech-vendor-join-form.tsx +++ b/components/signup/tech-vendor-join-form.tsx @@ -38,6 +38,7 @@ import { Check, ChevronsUpDown, Loader2, Plus, X } from "lucide-react" import { cn } from "@/lib/utils" import { createTechVendorFromSignup } from "@/lib/tech-vendors/service" +import { TechVendorItemSelectorDialog } from "./tech-vendor-item-selector-dialog" import { createTechVendorSchema, CreateTechVendorSchema } from "@/lib/tech-vendors/validations" import { VENDOR_TYPES } from "@/db/schema/techVendors" import { verifyTechVendorInvitationToken } from "@/lib/tech-vendor-invitation-token" @@ -144,6 +145,8 @@ export function TechVendorJoinForm() { const [isSubmitting, setIsSubmitting] = React.useState(false) const [isLoading, setIsLoading] = React.useState(false) const [hasValidToken, setHasValidToken] = React.useState(null) + const [isItemSelectorOpen, setIsItemSelectorOpen] = React.useState(false) + const [selectedItemCodes, setSelectedItemCodes] = React.useState([]) // React Hook Form (항상 최상위에서 호출) const form = useForm({ @@ -158,7 +161,7 @@ export function TechVendorJoinForm() { phone: "", country: "", website: "", - techVendorType: ["조선"], + techVendorType: [], representativeName: "", representativeBirth: "", representativeEmail: "", @@ -200,13 +203,15 @@ export function TechVendorJoinForm() { if (tokenPayload) { setHasValidToken(true); + console.log("tokenPayload", tokenPayload); // 토큰에서 가져온 정보로 폼 미리 채우기 form.setValue("vendorName", tokenPayload.vendorName); form.setValue("email", tokenPayload.email); + form.setValue("techVendorType", tokenPayload.vendorType as "조선" | "해양TOP" | "해양HULL" | ("조선" | "해양TOP" | "해양HULL")[]); - // 연락처 정보도 미리 채우기 - form.setValue("contacts.0.contactName", tokenPayload.vendorName); - form.setValue("contacts.0.contactEmail", tokenPayload.email); + // // 연락처 정보도 미리 채우기 + // form.setValue("contacts.0.contactName", tokenPayload.vendorName); + // form.setValue("contacts.0.contactEmail", tokenPayload.email); toast({ title: "초대 정보 로드 완료", @@ -292,6 +297,13 @@ export function TechVendorJoinForm() { form.setValue("files", updated, { shouldValidate: true }) } + const handleItemsSelected = (itemCodes: string[]) => { + setSelectedItemCodes(itemCodes) + // 선택된 아이템 코드들을 콤마로 구분하여 items 필드에 설정 + const itemsString = itemCodes.join(", ") + form.setValue("items", itemsString) + } + // Submit async function onSubmit(values: CreateTechVendorSchema) { setIsSubmitting(true) @@ -310,7 +322,7 @@ export function TechVendorJoinForm() { email: values.email, phone: values.phone, country: values.country, - techVendorType: Array.isArray(values.techVendorType) ? values.techVendorType[0] : values.techVendorType, + techVendorType: values.techVendorType as "조선" | "해양TOP" | "해양HULL" | ("조선" | "해양TOP" | "해양HULL")[], representativeName: values.representativeName || "", representativeBirth: values.representativeBirth || "", representativeEmail: values.representativeEmail || "", @@ -323,6 +335,7 @@ export function TechVendorJoinForm() { vendorData: techVendorData, files: mainFiles, contacts: values.contacts, + selectedItemCodes: selectedItemCodes, invitationToken: invitationToken || undefined, }) @@ -413,7 +426,7 @@ export function TechVendorJoinForm() { id={`techVendorType-${type}`} checked={field.value?.includes(type) || false} onChange={(e) => { - const currentValues = field.value || []; + const currentValues = Array.isArray(field.value) ? field.value : []; if (e.target.checked) { field.onChange([...currentValues, type]); } else { @@ -557,7 +570,7 @@ export function TechVendorJoinForm() { )} /> - {/* 이메일 */} + {/* 이메일 (수정 불가, 뷰 전용) */} - + @@ -616,11 +635,29 @@ export function TechVendorJoinForm() { 주요 품목 - - - +
+ + + +
+ + {selectedItemCodes.length > 0 && ( + + {selectedItemCodes.length}개 아이템 선택됨 + + )} +
+
- 회사에서 주로 다루는 품목들을 쉼표로 구분하여 입력하세요. + 공급가능품목 선택 버튼을 클릭하여 아이템을 선택하세요. 원하는 아이템이 없다면 텍스트로 입력하세요. @@ -902,6 +939,14 @@ export function TechVendorJoinForm() { + + {/* 공급가능품목 선택 다이얼로그 */} + ) } \ No newline at end of file -- cgit v1.2.3