feat(WEB): 전체 페이지 ?mode= URL 네비게이션 패턴 적용

- 등록(?mode=new), 상세(?mode=view), 수정(?mode=edit) URL 패턴 일괄 적용
- 중복 패턴 제거: /edit?mode=edit → ?mode=edit (16개 파일)
- 제목 일관성: {기능} 등록/상세/수정 패턴 적용
- 검수 체크리스트 문서 추가 (79개 페이지)
- UniversalListPage, IntegratedDetailTemplate 공통 컴포넌트 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-25 12:27:43 +09:00
parent 72f1accbe4
commit f6551c7e8b
162 changed files with 2907 additions and 480 deletions

View File

@@ -129,7 +129,7 @@ export function WithdrawalDetail({ withdrawalId, mode }: WithdrawalDetailProps)
if (isNewMode) {
router.push('/ko/accounting/withdrawals');
} else {
router.push(`/ko/accounting/withdrawals/${withdrawalId}`);
router.push(`/ko/accounting/withdrawals/${withdrawalId}?mode=view`);
}
}, [router, withdrawalId, isNewMode]);

View File

@@ -112,7 +112,7 @@ export default function WithdrawalDetailClientV2({
const handleModeChange = useCallback(
(newMode: DetailMode) => {
if (newMode === 'edit' && withdrawalId) {
router.push(`/ko/accounting/withdrawals/${withdrawalId}/edit`);
router.push(`/ko/accounting/withdrawals/${withdrawalId}?mode=edit`);
} else {
setMode(newMode);
}
@@ -120,9 +120,17 @@ export default function WithdrawalDetailClientV2({
[withdrawalId, router]
);
// 타이틀 동적 설정
// IntegratedDetailTemplate: create → "{title} 등록", view → "{title}", edit → "{title} 수정"
// view 모드에서 "출금 상세"로 표시하려면 직접 설정 필요
const dynamicConfig = {
...withdrawalDetailConfig,
title: mode === 'view' ? '출금 상세' : '출금',
};
return (
<IntegratedDetailTemplate
config={withdrawalDetailConfig as Parameters<typeof IntegratedDetailTemplate>[0]['config']}
config={dynamicConfig as Parameters<typeof IntegratedDetailTemplate>[0]['config']}
mode={mode}
initialData={withdrawal as unknown as Record<string, unknown> | undefined}
itemId={withdrawalId}

View File

@@ -160,7 +160,7 @@ export function WithdrawalManagement({ initialData, initialPagination }: Withdra
// ===== 핸들러 =====
const handleRowClick = useCallback((item: WithdrawalRecord) => {
router.push(`/ko/accounting/withdrawals/${item.id}`);
router.push(`/ko/accounting/withdrawals/${item.id}?mode=view`);
}, [router]);
const handleEdit = useCallback((item: WithdrawalRecord) => {