From 12cbc70c65a8588b85af3d90b527e16a0a9f8e21 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Sun, 2 Nov 2025 18:15:09 +0900 Subject: (김준회) 공통: 숫자 , 구분 (3자리) 공통함수 추가 및 PO 금액 컬럼들에 적용, currency 정보에 따라 표기하도록 분기 처리 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/po/vendor-table/shi-vendor-po-columns.tsx | 7 +++-- lib/utils.ts | 45 ++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/po/vendor-table/shi-vendor-po-columns.tsx b/lib/po/vendor-table/shi-vendor-po-columns.tsx index 2aa7996b..64c95d32 100644 --- a/lib/po/vendor-table/shi-vendor-po-columns.tsx +++ b/lib/po/vendor-table/shi-vendor-po-columns.tsx @@ -18,6 +18,7 @@ import { TooltipTrigger, } from "@/components/ui/tooltip" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" +import { formatNumber } from "@/lib/utils" import { VendorPO } from "./types" @@ -212,7 +213,7 @@ export function getShiVendorColumns({ ), cell: ({ row }) => { const amount = row.getValue("totalAmount") as string | number - return
{amount || '-'}
+ return
{formatNumber(amount)}
}, size: 120, }, @@ -267,8 +268,8 @@ export function getShiVendorColumns({ ), cell: ({ row }) => { - const rate = row.getValue("exchangeRate") as string - return
{rate || '-'}
+ const rate = row.getValue("exchangeRate") as string | number + return
{formatNumber(rate)}
}, size: 100, }, diff --git a/lib/utils.ts b/lib/utils.ts index dab65b37..98142389 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -236,7 +236,7 @@ export function formatHtml(html: string): string { return html; // 이미 포맷팅된 것으로 보임 } - let formatted = html + const formatted = html // 태그 앞뒤 공백 정리 .replace(/>\s*<') // 블록 요소들 앞에 줄바꿈 @@ -290,3 +290,46 @@ export function compareItemNumber(a?: string, b?: string) { return as.length - bs.length; } +/** + * 숫자를 3자리마다 콤마(,)로 구분하여 포맷팅합니다. + * + * @param value 포맷팅할 숫자 (number, string, null, undefined 허용) + * @param decimals 소수점 자릿수 (선택, 지정하지 않으면 원본 소수점 유지) + * @returns 포맷된 문자열 (예: "1,234,567.89") + * + * @example + * formatNumber(1234567) // "1,234,567" + * formatNumber(1234567.89) // "1,234,567.89" + * formatNumber(1234567.89, 1) // "1,234,567.9" + * formatNumber(null) // "-" + * formatNumber("1234567") // "1,234,567" + */ +export function formatNumber( + value: number | string | null | undefined, + decimals?: number +): string { + // null, undefined, 빈 문자열 처리 + if (value === null || value === undefined || value === '') { + return '-'; + } + + // 문자열을 숫자로 변환 + const numValue = typeof value === 'string' ? parseFloat(value) : value; + + // NaN 체크 + if (isNaN(numValue)) { + return '-'; + } + + // 소수점 자릿수가 지정된 경우 + if (decimals !== undefined) { + return numValue.toLocaleString('en-US', { + minimumFractionDigits: decimals, + maximumFractionDigits: decimals, + }); + } + + // 소수점 자릿수가 지정되지 않은 경우 (원본 소수점 유지) + return numValue.toLocaleString('en-US'); +} + -- cgit v1.2.3