${meeting.status === 'ongoing'
@@ -633,7 +704,7 @@
}
/**
- * 내 Todo 렌더링
+ * 내 Todo 렌더링 (09-Todo관리.html과 동일한 정렬 기준)
*/
function renderMyTodos() {
const container = $('#my-todos');
@@ -641,10 +712,12 @@
const myTodos = SAMPLE_TODOS
.filter(todo => todo.assignee.id === currentUser.id)
.sort((a, b) => {
- const priorityOrder = { overdue: 0, in_progress: 1, not_started: 2, completed: 3 };
- return priorityOrder[a.status] - priorityOrder[b.status];
+ // 09-Todo관리.html과 동일한 정렬: 완료되지 않은 것 우선, 마감일 순
+ if (a.status === 'completed' && b.status !== 'completed') return 1;
+ if (a.status !== 'completed' && b.status === 'completed') return -1;
+ return new Date(a.dueDate) - new Date(b.dueDate);
})
- .slice(0, 5);
+ .slice(0, 3); // 상위 3개만 표시
if (myTodos.length === 0) {
container.innerHTML = '
';
@@ -652,61 +725,122 @@
}
container.innerHTML = myTodos.map(todo => {
- const statusInfo = getTodoStatusInfo(todo);
- const isOverdue = calculateDday(todo.dueDate) < 0 && todo.status !== 'completed';
+ const dday = calculateDday(todo.dueDate);
+ const isCompleted = todo.status === 'completed';
+ const isOverdue = dday < 0 && !isCompleted;
+
+ // D-day 배지
+ let ddayBadge = '';
+ let ddayClass = '';
+ if (isCompleted) {
+ ddayBadge = '완료';
+ ddayClass = 'badge-complete';
+ } else if (isOverdue) {
+ ddayBadge = `D+${Math.abs(dday)} (지연)`;
+ ddayClass = 'badge-overdue';
+ } else if (dday === 0) {
+ ddayBadge = 'D-DAY';
+ ddayClass = 'badge-warning';
+ } else if (dday <= 3) {
+ ddayBadge = `D-${dday}`;
+ ddayClass = 'badge-warning';
+ } else if (dday <= 7) {
+ ddayBadge = `D-${dday}`;
+ ddayClass = 'badge-primary';
+ } else {
+ ddayBadge = `D-${dday}`;
+ ddayClass = '';
+ }
+
+ // 우선순위 배지
+ const priorityText = todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음';
+ const priorityClass = `badge-${todo.priority}`;
return `
-
-
-
- 마감: ${formatDate(todo.dueDate)}
- ${createBadge(todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음', todo.priority)}
-
-
- ${createProgressBar(todo.progress)}
+
+
+
+
+
+
+
+ ${ddayBadge}
+ ${priorityText}
+
+
${todo.title}
+
+
+ ${!isCompleted ? `
+
+
+
+ ` : ''}
`;
}).join('');
- // Todo 항목 클릭 시 해당 회의록 상세로 이동
- $$('.todo-item').forEach(item => {
- item.addEventListener('click', () => {
- const meetingId = item.dataset.meetingId;
- const todoId = item.dataset.todoId;
- // 회의록 상세 페이지로 이동 (Todo ID를 파라미터로 전달)
+ // Todo 카드 클릭 시 해당 회의록 상세로 이동 (체크박스와 버튼 제외)
+ $$('.todo-card').forEach(card => {
+ card.addEventListener('click', (e) => {
+ // 체크박스나 버튼 클릭은 무시
+ if (e.target.classList.contains('todo-checkbox') ||
+ e.target.classList.contains('icon-btn') ||
+ e.target.closest('.icon-btn')) {
+ return;
+ }
+ const meetingId = card.dataset.meetingId;
+ const todoId = card.dataset.todoId;
navigateTo(`10-회의록상세조회.html?meetingId=${meetingId}&todoId=${todoId}`);
});
});
}
/**
- * 내 회의록 렌더링
+ * 나의 회의록 렌더링 (참여자 또는 생성자로 등록된 회의록, 최신순 정렬)
*/
function renderMyMinutes() {
const container = $('#my-minutes');
- const myMeetings = SAMPLE_MEETINGS
- .filter(m => m.participants.some(p => p.id === currentUser.id && p.role === 'creator'))
- .slice(0, 3);
+ const myMinutes = SAMPLE_MINUTES
+ .filter(m => m.participants.some(p => p.id === currentUser.id)) // 참여자 또는 생성자 모두 포함
+ .sort((a, b) => new Date(b.date + ' ' + b.time) - new Date(a.date + ' ' + a.time)) // 최신순 정렬
+ .slice(0, 3); // 상위 3개만 표시
- if (myMeetings.length === 0) {
- container.innerHTML = '
';
+ if (myMinutes.length === 0) {
+ container.innerHTML = '
';
return;
}
- container.innerHTML = myMeetings.map(meeting => {
- const statusInfo = getMeetingStatusInfo(meeting);
+ container.innerHTML = myMinutes.map(minutes => {
+ // 상태 배지 정보
+ const statusBadge = minutes.status === 'complete'
+ ? { text: '확정완료', type: 'complete' }
+ : { text: '작성중', type: 'draft' };
+
+ // 생성자 여부 확인
+ const isCreator = minutes.participants.some(p => p.id === currentUser.id && p.role === 'creator');
+
return `
-