diff --git a/docs/update.md b/docs/update.md index 6010eec..0c9a7fb 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 로그 +## 2026-04-01 v1.3.18 +- 커스텀 아이템 기본 이름은 파일명 전체를 그대로 쓰지 않고 확장자 제거·공백 정리·60자 제한을 먼저 적용하도록 바꿔, 템플릿 요청 전에 커스텀 업로드가 길이 제한으로 실패하던 흐름을 줄임. +- 템플릿 요청 실패 안내는 커스텀 이미지 업로드 실패와 일반 bad request를 구분해, 사용자가 제목/설명/아이템 이름 길이 제한 문제를 더 쉽게 파악할 수 있게 보강함. +- 관리자 Image Optimization 월 필터는 기본 month input 대신 연도/월 셀렉트와 전체 초기화 버튼으로 바꿔, 기간 선택을 더 직관적으로 조작할 수 있게 정리함. + ## 2026-04-01 v1.3.17 - 티어 에디터 열 헤더 입력창과 행 라벨은 좌우 패딩을 대칭으로 다시 잡아, 드래그 핸들과 삭제 아이콘이 있어도 제목이 한쪽으로 쏠려 보이지 않도록 보정함. - 열 삭제도 이제 행 삭제와 같은 확인 모달을 거쳐 진행되도록 바꿔, 실수로 즉시 제거되던 문제를 막음. diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue index 1915835..80edfa5 100644 --- a/frontend/src/views/AdminView.vue +++ b/frontend/src/views/AdminView.vue @@ -270,6 +270,49 @@ const visibleLinkedGames = computed(() => ) const imageStatsPeriodLabel = computed(() => (imageStatsMonth.value ? `${imageStatsMonth.value} 기준` : '전체 기간')) +const imageStatsYearOptions = computed(() => { + const currentYear = new Date().getFullYear() + return Array.from({ length: 6 }, (_, index) => String(currentYear - index)) +}) +const imageStatsMonthOptions = [ + { value: '01', label: '1월' }, + { value: '02', label: '2월' }, + { value: '03', label: '3월' }, + { value: '04', label: '4월' }, + { value: '05', label: '5월' }, + { value: '06', label: '6월' }, + { value: '07', label: '7월' }, + { value: '08', label: '8월' }, + { value: '09', label: '9월' }, + { value: '10', label: '10월' }, + { value: '11', label: '11월' }, + { value: '12', label: '12월' }, +] +const selectedImageStatsYear = computed({ + get: () => (imageStatsMonth.value ? imageStatsMonth.value.slice(0, 4) : ''), + set: (year) => { + if (!year) { + imageStatsMonth.value = '' + return + } + const month = imageStatsMonth.value ? imageStatsMonth.value.slice(5, 7) : '01' + imageStatsMonth.value = `${year}-${month}` + }, +}) +const selectedImageStatsMonthNumber = computed({ + get: () => (imageStatsMonth.value ? imageStatsMonth.value.slice(5, 7) : ''), + set: (month) => { + if (!month) { + imageStatsMonth.value = '' + return + } + const year = imageStatsMonth.value ? imageStatsMonth.value.slice(0, 4) : String(new Date().getFullYear()) + imageStatsMonth.value = `${year}-${month}` + }, +}) +function clearImageStatsMonth() { + imageStatsMonth.value = '' +} async function refreshImageDiagnostics() { try { @@ -2100,8 +2143,18 @@ async function saveFeaturedOrder() {
Image Optimization
-
- +
+
+ + + +