diff --git a/public/css/custom.css b/public/css/custom.css index acdf64e..2295c1b 100644 --- a/public/css/custom.css +++ b/public/css/custom.css @@ -1,6 +1,70 @@ /* 여기에 light css 작성 */ - +/* 에러페이지 */ +/* 전체 화면을 덮는 스타일 */ +.error-page { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: #fff; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + color: #000; + font-family: 'Poppins', sans-serif; + z-index: 9999 !important; +} +/* 오류 메시지 컨텐츠 */ +.error-content { + text-align: center; + animation: fadeIn 0.8s ease-in-out; +} +/* 에러 이미지 */ +.error-image { + width: 280px; /* 이미지 크기 */ + margin-bottom: 20px; +} +/* 에러 코드 스타일 */ +.error-content h1 { + font-size: 6rem; + font-weight: bold; + color: #ff8c00; /* 오렌지 */ + text-shadow: 2px 2px 8px rgba(255, 140, 0, 0.3); + margin-bottom: 60px; +} +/* 홈으로 돌아가기 버튼 */ +.home-btn { + display: inline-block; + padding: 10px 28px; + font-size: 1rem; + font-weight: bold; + text-decoration: none; + color: #fff; + background: rgba(105, 108, 255, 0.9); + border-radius: 30px; + transition: 0.3s ease-in-out; + box-shadow: 0 4px 15px rgba(105, 108, 255, 0.5); +} +/* 버튼 호버 효과 */ +.home-btn:hover { + background: linear-gradient(90deg, orange, #ff8c00); + box-shadow: 0 0 20px rgba(255, 140, 0, 1); + transform: scale(1.05); +} +/* 페이드 인 애니메이션 */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} /* 휴가 */ .fc-daygrid-event { diff --git a/public/img/icons/illustrations/page-misc-error-light.png b/public/img/icons/illustrations/page-misc-error-light.png deleted file mode 100644 index 02dac04..0000000 Binary files a/public/img/icons/illustrations/page-misc-error-light.png and /dev/null differ diff --git a/src/common/axios-interceptor.js b/src/common/axios-interceptor.js index 2068cb7..b1e6b52 100644 --- a/src/common/axios-interceptor.js +++ b/src/common/axios-interceptor.js @@ -51,6 +51,10 @@ $api.interceptors.response.use( // 오류 응답 처리 if (error.response) { switch (error.response.status) { + case 400: + toastStore.onToast('잘못된 요청입니다.', 'e'); + router.push('/error/400'); // 🚀 400 에러 발생 시 자동 이동 + break; case 401: if (!error.config.headers.isLogin) { // toastStore.onToast('인증이 필요합니다.', 'e'); @@ -62,9 +66,11 @@ $api.interceptors.response.use( break; case 404: toastStore.onToast('요청한 페이지를 찾을 수 없습니다.', 'e'); + router.push('/error/404'); break; case 500: toastStore.onToast('서버 오류가 발생했습니다.', 'e'); + router.push('/error/500'); break; default: toastStore.onToast('알 수 없는 오류가 발생했습니다.', 'e'); diff --git a/src/router/index.js b/src/router/index.js index 7d94513..e5a575d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -89,10 +89,12 @@ const routes = [ component: () => import('@v/admin/TheAuthorization.vue'), meta: { requiresAuth: true } }, + { path: "/error/400", name: "Error400", component: () => import('@v/error/Error400.vue') }, + { path: "/error/500", name: "Error500", component: () => import('@v/error/Error500.vue') }, { path: "/:anything(.*)", - component: () => import('@v/ErrorPage.vue'), - } + name: "Error404", component: () => import('@v/error/Error404.vue') + }, ]; const router = createRouter({ @@ -126,4 +128,21 @@ router.beforeEach(async (to, from, next) => { next(); }); +import axios from 'axios'; + +axios.interceptors.response.use( + response => response, + error => { + const status = error.response?.status; + + if (status === 400) { + router.push({ name: 'Error400' }); + } else if (status === 500) { + router.push({ name: 'Error500' }); + } + + return Promise.reject(error); + } +); + export default router diff --git a/src/views/ErrorPage.vue b/src/views/ErrorPage.vue deleted file mode 100644 index 0892542..0000000 --- a/src/views/ErrorPage.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/src/views/error/Error400.vue b/src/views/error/Error400.vue new file mode 100644 index 0000000..9f1c61b --- /dev/null +++ b/src/views/error/Error400.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/views/error/Error404.vue b/src/views/error/Error404.vue new file mode 100644 index 0000000..1ee5a81 --- /dev/null +++ b/src/views/error/Error404.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/views/error/Error500.vue b/src/views/error/Error500.vue new file mode 100644 index 0000000..4e0730a --- /dev/null +++ b/src/views/error/Error500.vue @@ -0,0 +1,16 @@ + + + + +