fix: 로그 시간 KST 중복 보정, 일정 카운트 애니메이션, HMR 오버레이 비활성화

- 로그 formatDateTime에서 UTC 메서드 사용하여 KST 이중 변환 방지
- 일반 일정 페이지 n개 일정 텍스트에 모드 전환 애니메이션 적용
- Vite HMR 오버레이 비활성화 (외부 봇 malformed URI 에러 방지)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
caadiq 2026-03-11 21:49:13 +09:00
parent 159dd5c000
commit 8effebf681
3 changed files with 12 additions and 8 deletions

View file

@ -56,14 +56,14 @@ export function parseSummary(summary) {
return { prefix: decoded.substring(0, idx), detail: decoded.substring(idx + 2) }; return { prefix: decoded.substring(0, idx), detail: decoded.substring(idx + 2) };
} }
// 날짜/시간 포맷 // 날짜/시간 포맷 (DB에 KST로 저장되어 있으므로 UTC 기준으로 읽음)
export function formatDateTime(dateStr) { export function formatDateTime(dateStr) {
const date = new Date(dateStr); const date = new Date(dateStr);
const y = date.getFullYear(); const y = date.getUTCFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); const month = String(date.getUTCMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0'); const day = String(date.getUTCDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0'); const hours = String(date.getUTCHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0'); const minutes = String(date.getUTCMinutes()).padStart(2, '0');
return `${y}.${month}.${day} ${hours}:${minutes}`; return `${y}.${month}.${day} ${hours}:${minutes}`;
} }

View file

@ -470,7 +470,7 @@ function PCSchedule() {
animate={{ opacity: 1, scale: 1 }} animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }} exit={{ opacity: 0, scale: 0.95 }}
transition={{ duration: 0.15 }} transition={{ duration: 0.15 }}
className="flex items-center gap-3" className="flex items-center gap-3 w-full"
> >
<button <button
onClick={() => setIsSearchMode(true)} onClick={() => setIsSearchMode(true)}
@ -488,6 +488,7 @@ function PCSchedule() {
})() })()
: `${month + 1}월 전체 일정`} : `${month + 1}월 전체 일정`}
</h2> </h2>
<div className="flex-1" />
{selectedCategories.length > 0 && ( {selectedCategories.length > 0 && (
<div className="relative" ref={categoryRef}> <div className="relative" ref={categoryRef}>
<button <button
@ -520,10 +521,10 @@ function PCSchedule() {
</AnimatePresence> </AnimatePresence>
</div> </div>
)} )}
<span className="text-sm text-gray-400">{filteredSchedules.length} 일정</span>
</motion.div> </motion.div>
)} )}
</AnimatePresence> </AnimatePresence>
{!isSearchMode && <span className="text-sm text-gray-500">{filteredSchedules.length} 일정</span>}
</div> </div>
{/* 스케줄 목록 */} {/* 스케줄 목록 */}

View file

@ -13,6 +13,9 @@ export default defineConfig({
host: true, host: true,
port: 80, port: 80,
allowedHosts: true, allowedHosts: true,
hmr: {
overlay: false,
},
proxy: { proxy: {
"/api": { "/api": {
target: "http://fromis9-backend:80", target: "http://fromis9-backend:80",