From fb436a915c56e431b34cc09014397b540bbf93ff Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Tue, 18 Nov 2025 18:37:53 +0900 Subject: (김준회) SWP 추가요청사항: 정렬 및 데이터 표현량 추가, 사용성 개선 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/swp/table/swp-document-detail-dialog.tsx | 176 ++++++++++++++------------- 1 file changed, 90 insertions(+), 86 deletions(-) (limited to 'lib/swp/table/swp-document-detail-dialog.tsx') diff --git a/lib/swp/table/swp-document-detail-dialog.tsx b/lib/swp/table/swp-document-detail-dialog.tsx index a87cd0e2..77ef77f7 100644 --- a/lib/swp/table/swp-document-detail-dialog.tsx +++ b/lib/swp/table/swp-document-detail-dialog.tsx @@ -192,85 +192,97 @@ export function SwpDocumentDetailDialog({ } }; - // Revision별로 Activity 그룹핑 (rowspan용) + // Revision별로 Activity 그룹핑 및 정렬 (rowspan용) const groupedActivities = useMemo(() => { + // 1. REV 내림차순, createDate 내림차순으로 정렬 + const sortedActivities = [...activities].sort((a, b) => { + // REV 비교 (내림차순) + const revCompare = b.revNo.localeCompare(a.revNo); + if (revCompare !== 0) return revCompare; + + // 같은 REV 내에서는 createDate 내림차순 + return b.createDate.localeCompare(a.createDate); + }); + + // 2. 그룹핑 const groups: Map = new Map(); - activities.forEach((activity) => { + sortedActivities.forEach((activity) => { const key = `${activity.revNo}|${activity.stage}`; if (!groups.has(key)) { groups.set(key, []); } groups.get(key)!.push(activity); }); + return groups; }, [activities]); return ( - + - 문서 리비전 히스토리 + 문서 리비전 히스토리 {document && ( - + {document.DOC_NO} - {document.DOC_TITLE} )} {document && ( -
+
{/* 문서 정보 */} -
-
- 프로젝트: -
{document.PROJ_NO}
+
+
+ 프로젝트: + {document.PROJ_NO} {document.PROJ_NM && ( -
{document.PROJ_NM}
+ ({document.PROJ_NM}) )}
-
- 패키지: -
{document.PKG_NO || "-"}
+
+ 패키지: + {document.PKG_NO || "-"}
-
- 업체: -
{document.CPY_NM || "-"}
+
+ 업체: + {document.CPY_NM || "-"} {document.VNDR_CD && ( -
{document.VNDR_CD}
+ ({document.VNDR_CD}) )}
-
- 최신 리비전: -
{document.LTST_REV_NO || "-"}
+
+ 최신 리비전: + {document.LTST_REV_NO || "-"}
-
- 총 Activity: -
{activities.length}개
+
+ 총 Activity: + {activities.length}개
{/* Activity 테이블 */} {isLoading ? (
- - 리비전 트리 로딩 중... + + 리비전 트리 로딩 중...
) : activities.length > 0 ? ( <> {/* Activity 테이블 (위) */} -
+
- - Rev - Stage - IN/OUT - Status - Transmittal No - Activity No - Ref Activity - Modified - By + + Rev + Stage + IN/OUT + Status + Transmittal No + Activity No + Ref Activity + Modified + By @@ -280,7 +292,7 @@ export function SwpDocumentDetailDialog({ {revNo} @@ -298,45 +310,41 @@ export function SwpDocumentDetailDialog({ {/* Stage 컬럼 (첫 행만 표시, rowspan) */} {idx === 0 && ( {stage} )} - + {activity.inOut} - -
-
{activity.statusName}
-
- {activity.statusCode} -
-
+ +
{activity.statusName}
- + {activity.transmittalNo || "-"} - + {activity.actvNo} - + {activity.refActivityNo || "-"} - + {formatSwpDateShort(activity.createDate)} - + {activity.createEmpNo}
@@ -347,57 +355,53 @@ export function SwpDocumentDetailDialog({ {/* 파일 목록 (아래) */} -
-
-

파일 목록

+
+
+

파일 목록

{selectedActivity ? ( - <> -

- Activity: {selectedActivity.actvNo} -

-

- Rev {selectedActivity.revNo} ({selectedActivity.stage}) / {selectedActivity.inOut} -

- +

+ Activity: {selectedActivity.actvNo} / Rev {selectedActivity.revNo} ({selectedActivity.stage}) / {selectedActivity.inOut} +

) : ( -

+

Activity를 선택하면 파일 목록이 표시됩니다

)}
-
+
{selectedActivity ? ( isLoadingFiles ? (
- - 파일 로딩 중... + + 파일 로딩 중...
) : activityFiles.length > 0 ? (
- + - 파일명 - 크기 - 날짜 - 다운로드 + 파일명 + 크기 + 날짜 + 다운로드 {activityFiles.map((file) => ( - - + + {file.FILE_NM} - + {file.FILE_SZ ? formatFileSize(file.FILE_SZ) : "-"} - + {file.CRTE_DTM ? formatSwpDateShort(file.CRTE_DTM) : "-"} - +
) : ( -
+
- +

파일이 없습니다

) ) : ( -
+
- +

Activity를 선택해주세요

@@ -429,8 +433,8 @@ export function SwpDocumentDetailDialog({ ) : (
- -

Activity 정보가 없습니다

+ +

Activity 정보가 없습니다

)}
-- cgit v1.2.3