diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-10 15:46:15 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-10 15:46:15 +0900 |
| commit | 012504b8b01dc4d8de65e049f578ba133e18f62b (patch) | |
| tree | 51ed6581063386f07c78b3f61e34379a2780d23d /components/common | |
| parent | 1197e176493c88e301f9bb02321d815ffc717d10 (diff) | |
(김준회) 구매 견적: 벤더 선택기를 공용 벤더 선택기 사용하도록 변경, 벤더선택기에 국가정보 보여줄 수 있도록 확장
Diffstat (limited to 'components/common')
| -rw-r--r-- | components/common/vendor/vendor-selector.tsx | 9 | ||||
| -rw-r--r-- | components/common/vendor/vendor-service.ts | 34 |
2 files changed, 30 insertions, 13 deletions
diff --git a/components/common/vendor/vendor-selector.tsx b/components/common/vendor/vendor-selector.tsx index aa79943a..8f3cf32b 100644 --- a/components/common/vendor/vendor-selector.tsx +++ b/components/common/vendor/vendor-selector.tsx @@ -34,6 +34,7 @@ interface VendorSelectorProps { showInitialData?: boolean // 초기 클릭시 벤더들을 로드할지 여부 maxSelections?: number // 최대 선택 가능한 벤더 개수 statusFilter?: string // 특정 상태의 벤더만 표시 + includeCountry?: boolean // 국가 정보 포함 여부 } export function VendorSelector({ @@ -48,7 +49,8 @@ export function VendorSelector({ excludeVendorIds, showInitialData = true, maxSelections, - statusFilter + statusFilter, + includeCountry = false }: VendorSelectorProps) { const [open, setOpen] = useState(false) @@ -79,7 +81,8 @@ export function VendorSelector({ const result = await searchVendorsForSelector(query, page, 10, { statusFilter, sortBy: 'vendorName', - sortOrder: 'asc' + sortOrder: 'asc', + includeCountry }) if (result.success) { @@ -113,7 +116,7 @@ export function VendorSelector({ } finally { setIsSearching(false) } - }, [statusFilter]) + }, [statusFilter, includeCountry]) // Popover 열림시 초기 데이터 로드 React.useEffect(() => { diff --git a/components/common/vendor/vendor-service.ts b/components/common/vendor/vendor-service.ts index 8c440df2..bc53be3e 100644 --- a/components/common/vendor/vendor-service.ts +++ b/components/common/vendor/vendor-service.ts @@ -12,6 +12,7 @@ export interface VendorSearchItem { taxId: string | null // 사업자번호 status: string displayText: string // vendorName + vendorCode로 구성된 표시용 텍스트 + country?: string | null // 국가 정보 (선택적) } // 벤더 검색 옵션 @@ -22,6 +23,7 @@ export interface VendorSearchOptions { offset?: number sortBy?: 'vendorName' | 'vendorCode' | 'status' sortOrder?: 'asc' | 'desc' + includeCountry?: boolean // 국가 정보 포함 여부 } // 페이지네이션 정보 @@ -50,7 +52,7 @@ export async function searchVendorsForSelector( error?: string }> { try { - const { statusFilter, sortBy = 'vendorName', sortOrder = 'asc' } = options + const { statusFilter, sortBy = 'vendorName', sortOrder = 'asc', includeCountry = false } = options const offset = (page - 1) * perPage // WHERE 조건 구성 @@ -95,15 +97,26 @@ export async function searchVendorsForSelector( const totalCountResult = await totalCountQuery const total = totalCountResult.length - // 데이터 조회 + // 데이터 조회 - includeCountry에 따라 필드 선택 + const selectFields = includeCountry + ? { + id: vendors.id, + vendorName: vendors.vendorName, + vendorCode: vendors.vendorCode, + taxId: vendors.taxId, + status: vendors.status, + country: vendors.country, + } + : { + id: vendors.id, + vendorName: vendors.vendorName, + vendorCode: vendors.vendorCode, + taxId: vendors.taxId, + status: vendors.status, + } + let dataQuery = db - .select({ - id: vendors.id, - vendorName: vendors.vendorName, - vendorCode: vendors.vendorCode, - taxId: vendors.taxId, - status: vendors.status, - }) + .select(selectFields) .from(vendors) if (whereClause) { @@ -120,7 +133,8 @@ export async function searchVendorsForSelector( ...vendor, displayText: vendor.vendorCode ? `${vendor.vendorName} (${vendor.vendorCode})` - : vendor.vendorName + : vendor.vendorName, + ...(includeCountry && { country: (vendor as any).country }) })) // 페이지네이션 정보 계산 |
