feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
import { Banknote } from 'lucide-react';
|
2026-02-20 10:45:47 +09:00
|
|
|
import { formatNumber } from '@/lib/utils/amount';
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
import type { DetailConfig, FieldDefinition } from '@/components/templates/IntegratedDetailTemplate/types';
|
|
|
|
|
import type { WithdrawalRecord } from './types';
|
|
|
|
|
import { WITHDRAWAL_TYPE_SELECTOR_OPTIONS } from './types';
|
2026-01-22 23:19:30 +09:00
|
|
|
import { getVendors, getBankAccounts } from './actions';
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
|
|
|
|
|
// ===== 필드 정의 =====
|
|
|
|
|
const fields: FieldDefinition[] = [
|
2026-01-22 19:45:52 +09:00
|
|
|
// 출금일
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
{
|
|
|
|
|
key: 'withdrawalDate',
|
|
|
|
|
label: '출금일',
|
2026-01-22 19:45:52 +09:00
|
|
|
type: 'date',
|
|
|
|
|
placeholder: '출금일을 선택해주세요',
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
},
|
2026-01-22 19:45:52 +09:00
|
|
|
// 출금계좌
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
{
|
2026-01-22 23:19:30 +09:00
|
|
|
key: 'bankAccountId',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
label: '출금계좌',
|
2026-01-22 23:19:30 +09:00
|
|
|
type: 'select',
|
|
|
|
|
placeholder: '선택',
|
|
|
|
|
fetchOptions: async () => {
|
|
|
|
|
const result = await getBankAccounts();
|
|
|
|
|
if (result.success) {
|
|
|
|
|
return result.data.map((a) => ({
|
|
|
|
|
value: a.id,
|
|
|
|
|
label: a.name,
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
return [];
|
|
|
|
|
},
|
2026-01-22 19:45:52 +09:00
|
|
|
disabled: (mode) => mode === 'view',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
},
|
2026-01-22 19:45:52 +09:00
|
|
|
// 수취인명
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
{
|
|
|
|
|
key: 'recipientName',
|
|
|
|
|
label: '수취인명',
|
|
|
|
|
type: 'text',
|
2026-01-22 19:45:52 +09:00
|
|
|
placeholder: '수취인명을 입력해주세요',
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
},
|
2026-01-22 19:45:52 +09:00
|
|
|
// 출금금액
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
{
|
|
|
|
|
key: 'withdrawalAmount',
|
|
|
|
|
label: '출금금액',
|
2026-02-27 12:26:15 +09:00
|
|
|
type: 'currency',
|
2026-01-22 19:45:52 +09:00
|
|
|
placeholder: '출금금액을 입력해주세요',
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
},
|
|
|
|
|
// 적요 (editable)
|
|
|
|
|
{
|
|
|
|
|
key: 'note',
|
|
|
|
|
label: '적요',
|
|
|
|
|
type: 'text',
|
|
|
|
|
placeholder: '적요를 입력해주세요',
|
|
|
|
|
gridSpan: 2,
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
|
|
|
|
},
|
|
|
|
|
// 거래처 (editable, required)
|
|
|
|
|
{
|
|
|
|
|
key: 'vendorId',
|
|
|
|
|
label: '거래처',
|
|
|
|
|
type: 'select',
|
|
|
|
|
required: true,
|
|
|
|
|
placeholder: '선택',
|
|
|
|
|
fetchOptions: async () => {
|
|
|
|
|
const result = await getVendors();
|
|
|
|
|
if (result.success) {
|
|
|
|
|
return result.data.map((v) => ({
|
|
|
|
|
value: v.id,
|
|
|
|
|
label: v.name,
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
return [];
|
|
|
|
|
},
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
|
|
|
|
},
|
|
|
|
|
// 출금 유형 (editable, required)
|
|
|
|
|
{
|
|
|
|
|
key: 'withdrawalType',
|
|
|
|
|
label: '출금 유형',
|
|
|
|
|
type: 'select',
|
|
|
|
|
required: true,
|
|
|
|
|
placeholder: '선택',
|
|
|
|
|
options: WITHDRAWAL_TYPE_SELECTOR_OPTIONS.map((opt) => ({
|
|
|
|
|
value: opt.value,
|
|
|
|
|
label: opt.label,
|
|
|
|
|
})),
|
|
|
|
|
disabled: (mode) => mode === 'view',
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// ===== Config 정의 =====
|
|
|
|
|
export const withdrawalDetailConfig: DetailConfig = {
|
|
|
|
|
title: '출금',
|
|
|
|
|
description: '출금 상세 내역을 등록합니다',
|
|
|
|
|
icon: Banknote,
|
|
|
|
|
basePath: '/accounting/withdrawals',
|
|
|
|
|
fields,
|
|
|
|
|
gridColumns: 2,
|
|
|
|
|
actions: {
|
|
|
|
|
showBack: true,
|
|
|
|
|
showDelete: true,
|
|
|
|
|
showEdit: true,
|
|
|
|
|
backLabel: '목록',
|
|
|
|
|
deleteLabel: '삭제',
|
|
|
|
|
editLabel: '수정',
|
|
|
|
|
deleteConfirmMessage: {
|
|
|
|
|
title: '출금 삭제',
|
|
|
|
|
description: '이 출금 내역을 삭제하시겠습니까? 삭제된 데이터는 복구할 수 없습니다.',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
transformInitialData: (data: Record<string, unknown>): Record<string, unknown> => {
|
|
|
|
|
const record = data as unknown as WithdrawalRecord;
|
|
|
|
|
return {
|
|
|
|
|
withdrawalDate: record.withdrawalDate || '',
|
2026-01-22 23:19:30 +09:00
|
|
|
bankAccountId: record.bankAccountId || '',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
recipientName: record.recipientName || '',
|
2026-02-20 10:45:47 +09:00
|
|
|
withdrawalAmount: record.withdrawalAmount ? formatNumber(record.withdrawalAmount) : '0',
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
note: record.note || '',
|
|
|
|
|
vendorId: record.vendorId || '',
|
|
|
|
|
withdrawalType: record.withdrawalType || 'unset',
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
transformSubmitData: (formData: Record<string, unknown>): Partial<WithdrawalRecord> => {
|
|
|
|
|
return {
|
2026-01-22 19:45:52 +09:00
|
|
|
withdrawalDate: formData.withdrawalDate as string,
|
2026-01-22 23:19:30 +09:00
|
|
|
bankAccountId: formData.bankAccountId as string,
|
2026-01-22 19:45:52 +09:00
|
|
|
recipientName: formData.recipientName as string,
|
|
|
|
|
withdrawalAmount: typeof formData.withdrawalAmount === 'string'
|
|
|
|
|
? parseInt(formData.withdrawalAmount.replace(/,/g, ''), 10)
|
|
|
|
|
: formData.withdrawalAmount as number,
|
feat(WEB): Phase 2-3 V2 마이그레이션 완료 및 ServerErrorPage 적용
Phase 2 완료 (4개):
- 노무관리, 단가관리(건설), 입금, 출금
Phase 3 라우팅 구조 변경 완료 (22개):
- 거래처(영업), 팝업관리, 공정관리, 게시판관리, 대손추심, Q&A
- 현장관리, 실행내역, 견적관리, 견적(테스트)
- 입찰관리, 이슈관리, 현장설명회, 견적서(건설)
- 협력업체, 시공관리, 기성관리, 품목관리(건설)
- 회계 도메인: 거래처, 매출, 세금계산서, 매입
신규 컴포넌트:
- ErrorCard: 에러 페이지 UI 통일
- ServerErrorPage: V2 페이지 에러 처리 필수
- V2 Client 컴포넌트 및 Config 파일들
총 47개 상세 페이지 중 28개 완료, 19개 제외/불필요
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 17:31:28 +09:00
|
|
|
note: formData.note as string,
|
|
|
|
|
vendorId: formData.vendorId as string,
|
|
|
|
|
withdrawalType: formData.withdrawalType as WithdrawalRecord['withdrawalType'],
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
};
|