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:
@@ -55,7 +55,7 @@ export function BoardDetail({ post, comments: initialComments, currentUserId }:
|
||||
}, [router]);
|
||||
|
||||
const handleEdit = useCallback(() => {
|
||||
router.push(`/ko/board/${post.boardCode}/${post.id}/edit`);
|
||||
router.push(`/ko/board/${post.boardCode}/${post.id}?mode=edit`);
|
||||
}, [router, post.boardCode, post.id]);
|
||||
|
||||
const handleConfirmDelete = useCallback(async () => {
|
||||
|
||||
@@ -8,7 +8,7 @@ import type { DetailConfig } from '@/components/templates/IntegratedDetailTempla
|
||||
* IntegratedDetailTemplate 마이그레이션 (2025-01-20)
|
||||
*/
|
||||
export const boardCreateConfig: DetailConfig = {
|
||||
title: '게시글 등록',
|
||||
title: '게시글',
|
||||
description: '새로운 게시글을 등록합니다',
|
||||
icon: FileText,
|
||||
basePath: '/boards',
|
||||
|
||||
@@ -169,9 +169,9 @@ export function BoardListUnified() {
|
||||
onClick={() => {
|
||||
const boardCode = activeTab !== 'my' ? activeTab : boards[0]?.boardCode;
|
||||
if (boardCode) {
|
||||
router.push(`/ko/board/${boardCode}/create`);
|
||||
router.push(`/ko/board/${boardCode}?mode=new`);
|
||||
} else {
|
||||
router.push('/ko/board/create');
|
||||
router.push('/ko/board?mode=new');
|
||||
}
|
||||
}}
|
||||
>
|
||||
@@ -198,11 +198,11 @@ export function BoardListUnified() {
|
||||
const isMyPost = item.authorId === currentUserId;
|
||||
|
||||
const handleRowClick = () => {
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}`);
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=view`);
|
||||
};
|
||||
|
||||
const handleEdit = () => {
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}/edit`);
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=edit`);
|
||||
};
|
||||
|
||||
const handleDelete = async () => {
|
||||
@@ -289,11 +289,11 @@ export function BoardListUnified() {
|
||||
const isMyPost = item.authorId === currentUserId;
|
||||
|
||||
const handleRowClick = () => {
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}`);
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=view`);
|
||||
};
|
||||
|
||||
const handleEdit = () => {
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}/edit`);
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=edit`);
|
||||
};
|
||||
|
||||
const handleDelete = async () => {
|
||||
|
||||
@@ -130,7 +130,7 @@ export function BoardList() {
|
||||
// ===== 액션 핸들러 =====
|
||||
const handleRowClick = useCallback(
|
||||
(item: Post) => {
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}`);
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=view`);
|
||||
},
|
||||
[router]
|
||||
);
|
||||
@@ -138,9 +138,9 @@ export function BoardList() {
|
||||
const handleNewPost = useCallback(() => {
|
||||
const boardCode = activeTab !== 'my' ? activeTab : boards[0]?.boardCode;
|
||||
if (boardCode) {
|
||||
router.push(`/ko/board/${boardCode}/create`);
|
||||
router.push(`/ko/board/${boardCode}?mode=new`);
|
||||
} else {
|
||||
router.push('/ko/board/create');
|
||||
router.push('/ko/board?mode=new');
|
||||
}
|
||||
}, [router, activeTab, boards]);
|
||||
|
||||
@@ -293,7 +293,7 @@ export function BoardList() {
|
||||
size="icon"
|
||||
className="h-8 w-8 text-gray-600 hover:text-gray-700 hover:bg-gray-50"
|
||||
onClick={() =>
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}/edit`)
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=edit`)
|
||||
}
|
||||
>
|
||||
<Pencil className="h-4 w-4" />
|
||||
@@ -352,7 +352,7 @@ export function BoardList() {
|
||||
variant="outline"
|
||||
className="flex-1"
|
||||
onClick={() =>
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}/edit`)
|
||||
router.push(`/ko/board/${item.boardCode}/${item.id}?mode=edit`)
|
||||
}
|
||||
>
|
||||
<Pencil className="w-4 h-4 mr-2" /> 수정
|
||||
|
||||
@@ -49,8 +49,8 @@ export function BoardDetail({ board, onEdit, onDelete }: BoardDetailProps) {
|
||||
return (
|
||||
<PageLayout>
|
||||
<PageHeader
|
||||
title="게시판관리 상세"
|
||||
description="게시판 목록을 관리합니다"
|
||||
title="게시판 상세"
|
||||
description="게시판 정보를 조회합니다"
|
||||
icon={ClipboardList}
|
||||
/>
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ export function BoardDetailClientV2({ boardId, initialMode }: BoardDetailClientV
|
||||
if (result.success) {
|
||||
await forceRefreshMenus();
|
||||
toast.success('게시판이 수정되었습니다.');
|
||||
router.push(`${BASE_PATH}/${boardData.id}`);
|
||||
router.push(`${BASE_PATH}/${boardData.id}?mode=view`);
|
||||
} else {
|
||||
setError(result.error || '게시판 수정에 실패했습니다.');
|
||||
toast.error(result.error || '게시판 수정에 실패했습니다.');
|
||||
|
||||
@@ -85,7 +85,7 @@ export function BoardForm({ mode, board, onSubmit }: BoardFormProps) {
|
||||
|
||||
const handleBack = () => {
|
||||
if (mode === 'edit' && board) {
|
||||
router.push(`/ko/board/board-management/${board.id}`);
|
||||
router.push(`/ko/board/board-management/${board.id}?mode=view`);
|
||||
} else {
|
||||
router.push('/ko/board/board-management');
|
||||
}
|
||||
@@ -124,8 +124,8 @@ export function BoardForm({ mode, board, onSubmit }: BoardFormProps) {
|
||||
return (
|
||||
<PageLayout>
|
||||
<PageHeader
|
||||
title={mode === 'create' ? '게시판관리 상세' : '게시판관리 상세'}
|
||||
description="게시판 목록을 관리합니다"
|
||||
title={mode === 'create' ? '게시판 등록' : '게시판 수정'}
|
||||
description={mode === 'create' ? '새 게시판을 등록합니다' : '게시판 정보를 수정합니다'}
|
||||
icon={ClipboardList}
|
||||
/>
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@ const createBoardManagementConfig = (router: ReturnType<typeof useRouter>): Univ
|
||||
createButton: {
|
||||
label: '게시판 등록',
|
||||
icon: Plus,
|
||||
onClick: () => router.push('/board/board-management/new'),
|
||||
onClick: () => router.push('/board/board-management?mode=new'),
|
||||
},
|
||||
|
||||
// 삭제 확인 메시지
|
||||
|
||||
Reference in New Issue
Block a user