diff --git a/frontend/index.html b/frontend/index.html
index 18e9e42..cdd5e8a 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -403,15 +403,17 @@
-
+
-
+
-
+
@@ -1403,11 +1405,20 @@
});
}
- // 검토 상태 필터 적용
+ // 워크플로우 상태 필터 적용
if (reviewStatusFilter) {
filteredIssues = filteredIssues.filter(issue => {
- const isCompleted = isReviewCompleted(issue);
- return reviewStatusFilter === 'completed' ? isCompleted : !isCompleted;
+ // 새로운 워크플로우 시스템 사용
+ if (issue.review_status) {
+ return issue.review_status === reviewStatusFilter;
+ }
+ // 기존 데이터 호환성을 위한 폴백
+ else {
+ const isCompleted = isReviewCompleted(issue);
+ if (reviewStatusFilter === 'pending_review') return !isCompleted;
+ if (reviewStatusFilter === 'completed') return isCompleted;
+ return false;
+ }
});
}
@@ -1421,9 +1432,20 @@
return;
}
- // 검토 상태별로 분류 및 정렬
- const pendingIssues = filteredIssues.filter(issue => !isReviewCompleted(issue));
- const completedIssues = filteredIssues.filter(issue => isReviewCompleted(issue));
+ // 워크플로우 상태별로 분류 및 정렬
+ const groupedIssues = {
+ pending_review: filteredIssues.filter(issue =>
+ issue.review_status === 'pending_review' || (!issue.review_status && !isReviewCompleted(issue))
+ ),
+ in_progress: filteredIssues.filter(issue => issue.review_status === 'in_progress'),
+ completed: filteredIssues.filter(issue =>
+ issue.review_status === 'completed' || (!issue.review_status && isReviewCompleted(issue))
+ ),
+ disposed: filteredIssues.filter(issue => issue.review_status === 'disposed')
+ };
+
+ const pendingIssues = groupedIssues.pending_review;
+ const completedIssues = [...groupedIssues.in_progress, ...groupedIssues.completed, ...groupedIssues.disposed];
// 검토 필요 항목을 먼저 표시
if (pendingIssues.length > 0) {
diff --git a/frontend/issue-view.html b/frontend/issue-view.html
index 38557a0..6b5a7ea 100644
--- a/frontend/issue-view.html
+++ b/frontend/issue-view.html
@@ -135,13 +135,15 @@
-
+
-
+
@@ -513,11 +515,20 @@
});
}
- // 검토 상태 필터 적용
+ // 워크플로우 상태 필터 적용
if (reviewStatusFilter) {
filteredIssues = filteredIssues.filter(issue => {
- const isCompleted = isReviewCompleted(issue);
- return reviewStatusFilter === 'completed' ? isCompleted : !isCompleted;
+ // 새로운 워크플로우 시스템 사용
+ if (issue.review_status) {
+ return issue.review_status === reviewStatusFilter;
+ }
+ // 기존 데이터 호환성을 위한 폴백
+ else {
+ const isCompleted = isReviewCompleted(issue);
+ if (reviewStatusFilter === 'pending_review') return !isCompleted;
+ if (reviewStatusFilter === 'completed') return isCompleted;
+ return false;
+ }
});
}
@@ -668,45 +679,64 @@
return;
}
- // 검토 상태별로 분류 및 정렬
- const pendingIssues = filteredIssues.filter(issue => !isReviewCompleted(issue));
- const completedIssues = filteredIssues.filter(issue => isReviewCompleted(issue));
+ // 워크플로우 상태별로 분류 및 정렬
+ const groupedIssues = {
+ pending_review: filteredIssues.filter(issue =>
+ issue.review_status === 'pending_review' || (!issue.review_status && !isReviewCompleted(issue))
+ ),
+ in_progress: filteredIssues.filter(issue => issue.review_status === 'in_progress'),
+ completed: filteredIssues.filter(issue =>
+ issue.review_status === 'completed' || (!issue.review_status && isReviewCompleted(issue))
+ ),
+ disposed: filteredIssues.filter(issue => issue.review_status === 'disposed')
+ };
container.innerHTML = '';
- // 검토 필요 항목을 먼저 표시
- if (pendingIssues.length > 0) {
- const pendingHeader = document.createElement('div');
- pendingHeader.className = 'mb-4';
- pendingHeader.innerHTML = `
-
- 검토 필요 (${pendingIssues.length}건)
-
- `;
- container.appendChild(pendingHeader);
-
- pendingIssues.forEach(issue => {
- container.appendChild(createIssueCard(issue, false));
- });
- }
+ // 각 상태별로 표시
+ const statusConfig = [
+ { key: 'pending_review', title: '수신함 (검토 대기)', icon: 'fas fa-inbox', color: 'text-orange-700' },
+ { key: 'in_progress', title: '관리함 (진행 중)', icon: 'fas fa-cog', color: 'text-blue-700' },
+ { key: 'completed', title: '관리함 (완료됨)', icon: 'fas fa-check-circle', color: 'text-green-700' },
+ { key: 'disposed', title: '폐기함 (폐기됨)', icon: 'fas fa-trash', color: 'text-gray-700' }
+ ];
- // 검토 완료 항목을 아래에 표시
- if (completedIssues.length > 0) {
- const completedHeader = document.createElement('div');
- completedHeader.className = 'mb-4 mt-8';
- completedHeader.innerHTML = `
-
- 검토 완료 (${completedIssues.length}건)
-
- `;
- container.appendChild(completedHeader);
-
- completedIssues.forEach(issue => {
- container.appendChild(createIssueCard(issue, true));
- });
- }
+ statusConfig.forEach((config, index) => {
+ const issues = groupedIssues[config.key];
+ if (issues.length > 0) {
+ const header = document.createElement('div');
+ header.className = index > 0 ? 'mb-4 mt-8' : 'mb-4';
+ header.innerHTML = `
+
+ ${config.title} (${issues.length}건)
+
+ `;
+ container.appendChild(header);
+
+ issues.forEach(issue => {
+ container.appendChild(createIssueCard(issue, config.key === 'completed'));
+ });
+ }
+ });
}
+ // 워크플로우 상태 표시 함수
+ function getWorkflowStatusBadge(issue) {
+ const status = issue.review_status || (isReviewCompleted(issue) ? 'completed' : 'pending_review');
+
+ const statusConfig = {
+ 'pending_review': { text: '검토 대기', class: 'bg-orange-100 text-orange-700', icon: 'fas fa-inbox' },
+ 'in_progress': { text: '진행 중', class: 'bg-blue-100 text-blue-700', icon: 'fas fa-cog' },
+ 'completed': { text: '완료됨', class: 'bg-green-100 text-green-700', icon: 'fas fa-check-circle' },
+ 'disposed': { text: '폐기됨', class: 'bg-gray-100 text-gray-700', icon: 'fas fa-trash' }
+ };
+
+ const config = statusConfig[status] || statusConfig['pending_review'];
+ return `
+ ${config.text}
+ `;
+ }
+
// 부적합 사항 카드 생성 함수 (조회용)
function createIssueCard(issue, isCompleted) {
const categoryNames = {
@@ -740,10 +770,7 @@
- ${isCompleted ?
- '
검토완료
' :
- '
검토필요
'
- }
+ ${getWorkflowStatusBadge(issue)}
${projectInfo}