summaryrefslogtreecommitdiff
path: root/lib/vendors
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-08-21 06:57:36 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-08-21 06:57:36 +0000
commit02b1cf005cf3e1df64183d20ba42930eb2767a9f (patch)
treee932c54d5260b0e6fda2b46be2a6ba1c3ee30434 /lib/vendors
parentd78378ecd7ceede1429359f8058c7a99ac34b1b7 (diff)
(대표님, 최겸) 설계메뉴추가, 작업사항 업데이트
설계메뉴 - 문서관리 설계메뉴 - 벤더 데이터 gtc 메뉴 업데이트 정보시스템 - 메뉴리스트 및 정보 업데이트 파일 라우트 업데이트 엑셀임포트 개선 기본계약 개선 벤더 가입과정 변경 및 개선 벤더 기본정보 - pq 돌체 오류 수정 및 개선 벤더 로그인 과정 이메일 오류 수정
Diffstat (limited to 'lib/vendors')
-rw-r--r--lib/vendors/service.ts5
-rw-r--r--lib/vendors/table/request-pq-dialog.tsx6
-rw-r--r--lib/vendors/validations.ts18
3 files changed, 23 insertions, 6 deletions
diff --git a/lib/vendors/service.ts b/lib/vendors/service.ts
index 9af81021..9cb653ea 100644
--- a/lib/vendors/service.ts
+++ b/lib/vendors/service.ts
@@ -65,6 +65,7 @@ import { deleteFile, saveFile, saveBuffer } from "../file-stroage";
import { basicContractTemplates } from "@/db/schema/basicContractDocumnet";
import { basicContract } from "@/db/schema/basicContractDocumnet";
import { headers } from 'next/headers';
+import { Router } from "lucide-react";
/* -----------------------------------------------------
1) 조회 관련
----------------------------------------------------- */
@@ -2990,6 +2991,8 @@ export async function requestBasicContractInfo({
revalidatePath("/partners/basic-contract");
revalidatePath("/ko/partners/basic-contract");
revalidatePath("/en/partners/basic-contract");
+ revalidateTag("basicContractView-vendor");
+ revalidateTag("basicContractView");
return { success: true };
} catch (error) {
@@ -3027,7 +3030,7 @@ export async function saveNdaAttachments(input: {
const saveResult = await saveDRMFile(
file,
decryptWithServerAction,
- `vendor-attachments/nda/${vendorId}`,
+ `vendors/nda/${vendorId}`,
input.userId
);
diff --git a/lib/vendors/table/request-pq-dialog.tsx b/lib/vendors/table/request-pq-dialog.tsx
index 9fd7b1d8..20388f71 100644
--- a/lib/vendors/table/request-pq-dialog.tsx
+++ b/lib/vendors/table/request-pq-dialog.tsx
@@ -2,7 +2,7 @@
import * as React from "react"
import { type Row } from "@tanstack/react-table"
-import { Loader, SendHorizonal, Search, X, Plus } from "lucide-react"
+import { Loader, SendHorizonal, Search, X, Plus, Router } from "lucide-react"
import { toast } from "sonner"
import { useMediaQuery } from "@/hooks/use-media-query"
import { Button } from "@/components/ui/button"
@@ -47,6 +47,7 @@ import { getALLBasicContractTemplates } from "@/lib/basic-contract/service"
import type { BasicContractTemplate } from "@/db/schema"
import { searchItemsForPQ } from "@/lib/items/service"
import { saveNdaAttachments } from "../service"
+import { useRouter } from "next/navigation"
// import { PQContractViewer } from "../pq-contract-viewer" // 더 이상 사용하지 않음
interface RequestPQDialogProps extends React.ComponentPropsWithoutRef<typeof Dialog> {
@@ -76,7 +77,7 @@ export function RequestPQDialog({ vendors, showTrigger = true, onSuccess, ...pro
const [isApprovePending, startApproveTransition] = React.useTransition()
const isDesktop = useMediaQuery("(min-width: 640px)")
const { data: session } = useSession()
-
+ const router = useRouter()
const [type, setType] = React.useState<"GENERAL" | "PROJECT" | "NON_INSPECTION" | null>(null)
const [dueDate, setDueDate] = React.useState<string | null>(null)
const [projects, setProjects] = React.useState<Project[]>([])
@@ -337,6 +338,7 @@ export function RequestPQDialog({ vendors, showTrigger = true, onSuccess, ...pro
}
toast.success(`총 ${totalContracts}개 기본계약이 모두 생성되었습니다`)
+ router.refresh();
} catch (error) {
console.error('기본계약 처리 중 오류:', error)
diff --git a/lib/vendors/validations.ts b/lib/vendors/validations.ts
index ecadd67a..2538e1c8 100644
--- a/lib/vendors/validations.ts
+++ b/lib/vendors/validations.ts
@@ -121,7 +121,9 @@ export type CreditAgencyType = z.infer<typeof creditAgencyEnum>;
export const updateVendorSchema = z.object({
vendorName: z.string().min(1, "업체명은 필수 입력사항입니다"),
vendorCode: z.string().optional(),
- address: z.string().optional(),
+ address: z.string().min(1, "주소는 필수 입력사항입니다."),
+ addressDetail: z.string().optional(),
+ postalCode: z.string().optional(),
country: z.string().optional(),
phone: z.string().optional(),
email: z.string().email("유효한 이메일 주소를 입력해주세요").optional(),
@@ -220,7 +222,15 @@ export const createVendorSchema = z
// Other fields remain the same
vendorCode: z.string().max(100, "Max length 100").optional(),
- address: z.string().optional(),
+ address: z.string()
+ .min(1, "주소는 필수입니다.")
+ .max(500, "주소는 최대 500자까지 입력 가능합니다."),
+ addressDetail: z.string()
+ .min(1, "상세주소는 필수입니다.")
+ .max(500, "상세주소는 최대 500자까지 입력 가능합니다."),
+ postalCode: z.string()
+ .min(1, "우편번호는 필수입니다.")
+ .max(20, "우편번호는 최대 20자까지 입력 가능합니다."),
country: z.string()
.min(1, "국가 선택은 필수입니다.")
.max(100, "Max length 100"),
@@ -399,7 +409,9 @@ export type GetRfqHistorySchema = Awaited<ReturnType<typeof searchParamsRfqHisto
export const updateVendorInfoSchema = z.object({
vendorName: z.string().min(1, "업체명은 필수 입력사항입니다."),
taxId: z.string(),
- address: z.string().optional(),
+ address: z.string().min(1, "주소는 필수 입력사항입니다."),
+ addressDetail: z.string().optional(),
+ postalCode: z.string().optional(),
country: z.string().min(1, "국가를 선택해 주세요."),
phone: z.string().optional(),
email: z.string().email("유효한 이메일을 입력해 주세요."),