From bd2ed6191673faee93844dd0d448078618456bbc Mon Sep 17 00:00:00 2001 From: Hyoseong Jo Date: Sat, 10 Jan 2026 14:56:25 +0900 Subject: [PATCH] feat: block future week access in write page --- frontend/report/weekly/write.vue | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/frontend/report/weekly/write.vue b/frontend/report/weekly/write.vue index ed341f3..92c7ce8 100644 --- a/frontend/report/weekly/write.vue +++ b/frontend/report/weekly/write.vue @@ -553,7 +553,12 @@ onMounted(async () => { } await loadProjects() - await setDefaultWeek(user.employeeId) + const weekValid = await setDefaultWeek(user.employeeId) + + // 미래 주차로 접근한 경우 중단 + if (weekValid === false) { + return + } // 이번 주차에 이미 작성한 보고서가 있는지 확인 const existingReport = await checkExistingReport(user.employeeId) @@ -645,9 +650,20 @@ async function setDefaultWeek(userId: number) { if (route.query.year && route.query.week) { const year = parseInt(route.query.year as string) const week = parseInt(route.query.week as string) + + // 미래 주차 검증 + const currentWeek = getActualCurrentWeekInfo() + const isFutureWeek = year > currentWeek.year || (year === currentWeek.year && week > currentWeek.week) + + if (isFutureWeek) { + alert('작성할 수 없는 주차입니다.') + router.replace('/report/weekly') + return false + } + const weekInfo = getWeekDates(year, week) setWeekFromInfo(weekInfo) - return + return true } const now = new Date() @@ -675,6 +691,8 @@ async function setDefaultWeek(userId: number) { console.error('지난주 보고서 확인 실패:', e) } } + + return true } // 지난주 계획을 이번주 실적에 로드