From 207520e1d69072cb1ba7a7dfd107214cfce35c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Thu, 22 Jan 2026 20:49:22 +0900 Subject: [PATCH] =?UTF-8?q?feat(WEB):=20=EC=B9=B4=EB=93=9C=20=EA=B1=B0?= =?UTF-8?q?=EB=9E=98=20DevFill=20=EC=9E=90=EB=8F=99=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DevToolbar: 카드 버튼 경로 /new로 변경, fillEnabled 활성화 - CardTransactionDetailClient: useDevFill 훅 연동 - cardTransactionDetailConfig: transformInitialData에서 cardId 처리 수정 - accountingData: generateCardTransactionData 함수 추가 --- .../CardTransactionDetailClient.tsx | 15 +++++++++++++++ .../cardTransactionDetailConfig.ts | 4 +++- src/components/dev/DevToolbar.tsx | 4 ++-- src/components/dev/index.ts | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/components/accounting/CardTransactionInquiry/CardTransactionDetailClient.tsx b/src/components/accounting/CardTransactionInquiry/CardTransactionDetailClient.tsx index 89bf53a4..2cf7184a 100644 --- a/src/components/accounting/CardTransactionInquiry/CardTransactionDetailClient.tsx +++ b/src/components/accounting/CardTransactionInquiry/CardTransactionDetailClient.tsx @@ -12,7 +12,9 @@ import { createCardTransaction, updateCardTransaction, deleteCardTransaction, + getCardList, } from './actions'; +import { useDevFill, generateCardTransactionData } from '@/components/dev'; // ===== Props ===== interface CardTransactionDetailClientProps { @@ -29,6 +31,19 @@ export default function CardTransactionDetailClient({ const [transaction, setTransaction] = useState(null); const [isLoading, setIsLoading] = useState(initialMode !== 'create'); + // ===== DevFill: 자동 입력 기능 ===== + useDevFill('cardTransaction', useCallback(async () => { + if (initialMode === 'create') { + // 카드 목록 가져오기 + const cardResult = await getCardList(); + const cards = cardResult.success ? cardResult.data : undefined; + + const mockData = generateCardTransactionData({ cards }); + setTransaction(mockData as unknown as CardTransaction); + toast.success('카드 사용내역 데이터가 자동 입력되었습니다.'); + } + }, [initialMode])); + // ===== 데이터 로드 ===== useEffect(() => { const loadTransaction = async () => { diff --git a/src/components/accounting/CardTransactionInquiry/cardTransactionDetailConfig.ts b/src/components/accounting/CardTransactionInquiry/cardTransactionDetailConfig.ts index 5033a303..c13c79a1 100644 --- a/src/components/accounting/CardTransactionInquiry/cardTransactionDetailConfig.ts +++ b/src/components/accounting/CardTransactionInquiry/cardTransactionDetailConfig.ts @@ -97,6 +97,8 @@ export const cardTransactionDetailConfig: DetailConfig = { }, transformInitialData: (data: Record): Record => { const record = data as unknown as CardTransaction; + // DevFill에서 전달된 cardId 또는 기존 데이터의 cardId + const inputCardId = (data as Record).cardId; // usedAt을 datetime-local 형식으로 변환 (YYYY-MM-DDTHH:mm) let usedAtFormatted = ''; if (record.usedAt) { @@ -104,7 +106,7 @@ export const cardTransactionDetailConfig: DetailConfig = { usedAtFormatted = record.usedAt.replace(' ', 'T').slice(0, 16); } return { - cardId: record.id ? '' : '', // 수정 시에는 카드 변경 불가 + cardId: inputCardId ? String(inputCardId) : '', // create 모드에서 DevFill로 전달된 cardId 사용 usedAt: usedAtFormatted, merchantName: record.merchantName || '', amount: record.amount || 0, diff --git a/src/components/dev/DevToolbar.tsx b/src/components/dev/DevToolbar.tsx index 0a125436..f2940a46 100644 --- a/src/components/dev/DevToolbar.tsx +++ b/src/components/dev/DevToolbar.tsx @@ -54,7 +54,7 @@ const PAGE_PATTERNS: { pattern: RegExp; type: DevFillPageType; label: string }[] { pattern: /\/accounting\/deposits\/new/, type: 'deposit', label: '입금' }, { pattern: /\/accounting\/withdrawals\/new/, type: 'withdrawal', label: '출금' }, { pattern: /\/approval\/draft\/new/, type: 'purchaseApproval', label: '매입' }, - { pattern: /\/accounting\/card-transactions/, type: 'cardTransaction', label: '카드' }, + { pattern: /\/accounting\/card-transactions\/new/, type: 'cardTransaction', label: '카드' }, ]; // 플로우 단계 정의 @@ -71,7 +71,7 @@ const ACCOUNTING_STEPS: { type: DevFillPageType; label: string; icon: typeof Fil { type: 'deposit', label: '입금', icon: ArrowDownToLine, path: '/accounting/deposits/new', fillEnabled: true }, { type: 'withdrawal', label: '출금', icon: ArrowUpFromLine, path: '/accounting/withdrawals/new', fillEnabled: true }, { type: 'purchaseApproval', label: '매입', icon: Receipt, path: '/approval/draft/new', fillEnabled: true }, - { type: 'cardTransaction', label: '카드', icon: CreditCard, path: '/accounting/card-transactions', fillEnabled: false }, // 이동만 + { type: 'cardTransaction', label: '카드', icon: CreditCard, path: '/accounting/card-transactions/new', fillEnabled: true }, ]; export function DevToolbar() { diff --git a/src/components/dev/index.ts b/src/components/dev/index.ts index cdbbabdd..a331b96b 100644 --- a/src/components/dev/index.ts +++ b/src/components/dev/index.ts @@ -14,4 +14,4 @@ export { generateQuoteData, generateQuoteItem } from './generators/quoteData'; export { generateOrderData, generateOrderDataFull } from './generators/orderData'; export { generateWorkOrderData } from './generators/workOrderData'; export { generateShipmentData } from './generators/shipmentData'; -export { generateDepositData, generateWithdrawalData, generatePurchaseApprovalData } from './generators/accountingData'; \ No newline at end of file +export { generateDepositData, generateWithdrawalData, generatePurchaseApprovalData, generateCardTransactionData } from './generators/accountingData'; \ No newline at end of file