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

@@ -108,6 +108,7 @@ function buildMenuTree(flatMenus: FlatMenuItem[]): MenuTreeItem[] {
interface PermissionDetailClientProps {
permissionId: string;
isNew?: boolean;
mode?: 'view' | 'edit';
}
// 권한 타입
@@ -122,7 +123,7 @@ const PERMISSION_LABELS_MAP: Record<PermissionType, string> = {
manage: '관리',
};
export function PermissionDetailClient({ permissionId, isNew = false }: PermissionDetailClientProps) {
export function PermissionDetailClient({ permissionId, isNew = false, mode = 'view' }: PermissionDetailClientProps) {
const router = useRouter();
// 역할 데이터
@@ -477,8 +478,8 @@ export function PermissionDetailClient({ permissionId, isNew = false }: Permissi
<PageLayout>
{/* 페이지 헤더 */}
<PageHeader
title={isNew ? '역할 등록' : '역할 상세'}
description={isNew ? '새 역할을 등록합니다' : '역할 정보와 권한을 관리합니다'}
title={isNew ? '역할 등록' : mode === 'edit' ? '역할 수정' : '역할 상세'}
description={isNew ? '새 역할을 등록합니다' : mode === 'edit' ? '역할 정보를 수정합니다' : '역할 정보와 권한을 관리합니다'}
icon={Shield}
actions={
<Button variant="ghost" size="sm" onClick={handleBack}>

View File

@@ -127,16 +127,16 @@ export function PermissionManagement() {
// ===== 핸들러 =====
const handleAdd = () => {
router.push('/settings/permissions/new');
router.push('/settings/permissions?mode=new');
};
const handleEdit = (role: Role, e?: React.MouseEvent) => {
e?.stopPropagation();
router.push(`/settings/permissions/${role.id}`);
router.push(`/settings/permissions/${role.id}?mode=edit`);
};
const handleViewDetail = (role: Role) => {
router.push(`/settings/permissions/${role.id}`);
router.push(`/settings/permissions/${role.id}?mode=view`);
};
const handleDelete = (role: Role, e?: React.MouseEvent) => {