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

@@ -89,7 +89,7 @@ export function PopupDetailClientV2({ popupId, initialMode }: PopupDetailClientV
if (newMode === 'edit' && popupId) {
router.push(`${popupDetailConfig.basePath}/${popupId}?mode=edit`);
} else if (newMode === 'view' && popupId) {
router.push(`${popupDetailConfig.basePath}/${popupId}`);
router.push(`${popupDetailConfig.basePath}/${popupId}?mode=view`);
}
},
[router, popupId]
@@ -120,7 +120,7 @@ export function PopupDetailClientV2({ popupId, initialMode }: PopupDetailClientV
const result = await updatePopup(popupId!, popupFormData);
if (result.success) {
toast.success('팝업이 수정되었습니다.');
router.push(`${popupDetailConfig.basePath}/${popupId}`);
router.push(`${popupDetailConfig.basePath}/${popupId}?mode=view`);
return { success: true };
}
return { success: false, error: result.error || '팝업 수정에 실패했습니다.' };
@@ -158,7 +158,7 @@ export function PopupDetailClientV2({ popupId, initialMode }: PopupDetailClientV
router.push(popupDetailConfig.basePath);
} else {
setMode('view');
router.push(`${popupDetailConfig.basePath}/${popupId}`);
router.push(`${popupDetailConfig.basePath}/${popupId}?mode=view`);
}
}, [router, popupId, isNewMode]);
@@ -175,14 +175,11 @@ export function PopupDetailClientV2({ popupId, initialMode }: PopupDetailClientV
: popupData || undefined;
// 타이틀 동적 설정
// IntegratedDetailTemplate: create → "{title} 등록", view → "{title}", edit → "{title} 수정"
// view 모드에서 "팝업 상세"로 표시하려면 직접 설정 필요
const dynamicConfig = {
...popupDetailConfig,
title:
mode === 'create'
? '팝업관리'
: mode === 'edit'
? popupData?.title || '팝업관리'
: popupData?.title || '팝업관리 상세',
title: mode === 'view' ? '팝업 상세' : '팝업',
};
return (

View File

@@ -36,20 +36,20 @@ export function PopupList({ initialData }: PopupListProps) {
// ===== 핸들러 =====
const handleRowClick = useCallback(
(item: Popup) => {
router.push(`/ko/settings/popup-management/${item.id}`);
router.push(`/ko/settings/popup-management/${item.id}?mode=view`);
},
[router]
);
const handleEdit = useCallback(
(id: string) => {
router.push(`/ko/settings/popup-management/${id}/edit`);
router.push(`/ko/settings/popup-management/${id}?mode=edit`);
},
[router]
);
const handleCreate = useCallback(() => {
router.push('/ko/settings/popup-management/new');
router.push('/ko/settings/popup-management?mode=new');
}, [router]);
// ===== UniversalListPage Config =====