import { createWebHistory, createRouter } from "vue-router"; // import App from "../App.vue"; import login from "../Login.vue"; import Join from "../Join.vue"; import MyPage from "./main/MyPage.vue"; import MyPlan from "./main/MyPlan.vue"; import MyPlan2 from "./main/MyPlan2.vue"; import PhotoBook from "./main/PhotoBook.vue"; import Dashboard from "./main/Dashboard.vue"; import AIDashboard from "./main/AIDashboard.vue"; import Camera from "./main/Camera.vue"; import PhotoDesign from "./main/PhotoDesign.vue"; import PhotoEdit from "./main/PhotoEdit.vue"; import PreviewNote from "./main/PreviewNote.vue"; import Main from "./main/Main.vue"; import Main_c from "./main/Main_c.vue"; import Chapter1 from "./main/Chapter/Chapter1.vue"; import Chapter1_1 from "./main/Chapter/Chapter1_1.vue"; import Chapter1_2 from "./main/Chapter/Chapter1_2.vue"; import Chapter1_3 from "./main/Chapter/Chapter1_3.vue"; import Chapter2 from "./main/Chapter/Chapter2.vue"; import Chapter2_1 from "./main/Chapter/Chapter2_1.vue"; import Chapter2_2 from "./main/Chapter/Chapter2_2.vue"; import Chapter2_3 from "./main/Chapter/Chapter2_3.vue"; import Chapter2_4 from "./main/Chapter/Chapter2_4.vue"; import Chapter2_5 from "./main/Chapter/Chapter2_5.vue"; import Chapter2_6 from "./main/Chapter/Chapter2_6.vue"; import Chapter2_7 from "./main/Chapter/Chapter2_7.vue"; import Chapter2_8 from "./main/Chapter/Chapter2_8.vue"; import Chapter2_9 from "./main/Chapter/Chapter2_9.vue"; import Chapter2_10 from "./main/Chapter/Chapter2_10.vue"; import Chapter2_11 from "./main/Chapter/Chapter2_11.vue"; import Chapter2_12 from "./main/Chapter/Chapter2_12.vue"; import Chapter2_13 from "./main/Chapter/Chapter2_13.vue"; import Chapter3 from "./main/Chapter/Chapter3.vue"; import Chapter3_1 from "./main/Chapter/Chapter3_1.vue"; import Chapter3_2 from "./main/Chapter/Chapter3_2.vue"; import Chapter3_3 from "./main/Chapter/Chapter3_3.vue"; import Chapter3_3_1 from "./main/Chapter/Chapter3_3_1.vue"; import Chapter3_4 from "./main/Chapter/Chapter3_4.vue"; import Chapter3_5 from "./main/Chapter/Chapter3_5.vue"; import Chapter3_6 from "./main/Chapter/Chapter3_6.vue"; import Chapter3_7 from "./main/Chapter/Chapter3_7.vue"; import Chapter3_8 from "./main/Chapter/Chapter3_8.vue"; import Chapter3_9 from "./main/Chapter/Chapter3_9.vue"; import Chapter3_10 from "./main/Chapter/Chapter3_10.vue"; import Chapter3_11 from "./main/Chapter/Chapter3_11.vue"; import Chapter3_12 from "./main/Chapter/Chapter3_12.vue"; import Chapter3_13 from "./main/Chapter/Chapter3_13.vue"; import Chapter3_14 from "./main/Chapter/Chapter3_14.vue"; import Chapter3_15 from "./main/Chapter/Chapter3_15.vue"; import Chapter3_16 from "./main/Chapter/Chapter3_16.vue"; import Chapter4 from "./main/Chapter/Chapter4.vue"; import Chapter5 from "./main/Chapter/Chapter5.vue"; import Chapter6 from "./main/Chapter/Chapter6.vue"; import Chapter7 from "./main/Chapter/Chapter7.vue"; import Chapter8 from "./main/Chapter/Chapter8.vue"; import Chapter9 from "./main/Chapter/Chapter9.vue"; import Chapter10 from "./main/Chapter/Chapter10.vue"; import Chapter11 from "./main/Chapter/Chapter11.vue"; import Main_p from "./parents/Main_p.vue"; import Main_t from "./teacher/Main_t.vue"; import Board from "./teacher/Board.vue"; import noticeInsert from "./teacher/noticeInsert.vue"; import noticeDetail from "./teacher/noticeDetail.vue"; import StudentList from "./teacher/StudentList.vue"; import StudentDetail from "./teacher/StudentDetail.vue"; import textbook from "./teacher/textbook.vue"; import C_Textbook from "./teacher/C_Textbook.vue"; import C_TextBookDetail from "./teacher/C_TextBookDetail.vue"; import C_TextList from "./teacher/C_TextList .vue"; import C_TextInsert from "./teacher/C_TextInsert.vue"; import C_QuestionList from "./teacher/C_QuestionList.vue"; import C_QuestionInsert from "./teacher/C_QuestionInsert.vue"; import C_Voca_List from "./teacher/C_Voca_List.vue"; import C_ExamList from "./teacher/C_ExamList.vue"; import C_ExamDetail from "./teacher/C_ExamDetail.vue"; import C_ExamInsert from "./teacher/C_ExamInsert.vue"; import TextBookDetail from "./teacher/TextBookDetail.vue"; import Home from "./teacher/Home.vue"; import ClassDetail from "./teacher/ClassDetail.vue"; import TextList from "./teacher/TextList.vue"; import TextInsert from "./teacher/TextInsert.vue"; import TextDetail from "./teacher/TextDetail.vue"; import QuestionList from "./teacher/QuestionList.vue"; import QuestionInsert from "./teacher/QuestionInsert.vue"; import QuestionDetail from "./teacher/QuestionDetail.vue"; import VocaList from "./teacher/VocaList.vue"; import VocaInsert from "./teacher/VocaInsert.vue"; import VocaDetail from "./teacher/VocaDetail.vue"; import ExamList from "./teacher/ExamList.vue"; import ExamDetail from "./teacher/ExamDetail.vue"; import ExamInsert from "./teacher/ExamInsert.vue"; import RoadMap from "./teacher/RoadMap.vue"; import store from './AppStore'; import axios from "axios"; const routes = [ { path: "/login.page", name: "login", component: login }, { path: "/Join.page", name: "Join", component: Join }, // { path: '/App.page', name: 'App', component: App, // children:[ // ] // }, // { path: '/Main.page', name: 'Main', component: Main}, /* 학생 */ { path: "/", name: "Main", component: Main, children: [ { path: "/Dashboard.page", name: "Dashboard", component: Dashboard, }, { path: "/AIDashboard.page", name: "AIDashboard", component: AIDashboard, }, { path: "/MyPage.page", name: "MyPage", component: MyPage }, { path: "/MyPlan.page", name: "MyPlan", component: MyPlan }, { path: "/MyPlan2.page", name: "MyPlan2", component: MyPlan2 }, { path: "/PhotoBook.page", name: "PhotoBook", component: PhotoBook, }, { path: "/PreviewNote.page", name: "PreviewNote", component: PreviewNote, }, ], }, { path: "/Camera.page", name: "Camera", component: Camera }, { path: "/PhotoDesign.page", name: "PhotoDesign", component: PhotoDesign }, { path: "/PhotoEdit.page", name: "PhotoEdit", component: PhotoEdit }, /* 지문 */ { path: "/Chapter1.page", name: "Chapter1", component: Chapter1 }, { path: "/Chapter1_1.page", name: "Chapter1_1", component: Chapter1_1 }, { path: "/Chapter1_2.page", name: "Chapter1_2", component: Chapter1_2 }, { path: "/Chapter1_3.page", name: "Chapter1_3", component: Chapter1_3 }, /* 단어장 및 지문 문제 */ { path: "/Chapter2.page", name: "Chapter2", component: Chapter2 }, { path: "/Chapter2_1.page", name: "Chapter2_1", component: Chapter2_1 }, { path: "/Chapter2_2.page", name: "Chapter2_2", component: Chapter2_2 }, { path: "/Chapter2_3.page", name: "Chapter2_3", component: Chapter2_3 }, { path: "/Chapter2_4.page", name: "Chapter2_4", component: Chapter2_4 }, { path: "/Chapter2_5.page", name: "Chapter2_5", component: Chapter2_5 }, { path: "/Chapter2_6.page", name: "Chapter2_6", component: Chapter2_6 }, { path: "/Chapter2_7.page", name: "Chapter2_7", component: Chapter2_7 }, { path: "/Chapter2_8.page", name: "Chapter2_8", component: Chapter2_8 }, { path: "/Chapter2_9.page", name: "Chapter2_9", component: Chapter2_9 }, { path: "/Chapter2_10.page", name: "Chapter2_10", component: Chapter2_10 }, { path: "/Chapter2_11.page", name: "Chapter2_11", component: Chapter2_11 }, { path: "/Chapter2_12.page", name: "Chapter2_12", component: Chapter2_12 }, { path: "/Chapter2_13.page", name: "Chapter2_13", component: Chapter2_13 }, /* 평가 문제 */ { path: "/Main_c.page", name: "Main_c", component: Main_c, children: [ { path: "/Chapter3.page", name: "Chapter3", component: Chapter3 }, { path: "/Chapter3_1.page", name: "Chapter3_1", component: Chapter3_1, }, { path: "/Chapter3_2.page", name: "Chapter3_2", component: Chapter3_2, }, { path: "/Chapter3_3.page", name: "Chapter3_3", component: Chapter3_3, }, { path: "/Chapter3_3_1.page", name: "Chapter3_3_1", component: Chapter3_3_1, }, { path: "/Chapter3_4.page", name: "Chapter3_4", component: Chapter3_4, }, { path: "/Chapter3_5.page", name: "Chapter3_5", component: Chapter3_5, }, { path: "/Chapter3_6.page", name: "Chapter3_6", component: Chapter3_6, }, { path: "/Chapter3_7.page", name: "Chapter3_7", component: Chapter3_7, }, { path: "/Chapter3_8.page", name: "Chapter3_8", component: Chapter3_8, }, { path: "/Chapter3_9.page", name: "Chapter3_9", component: Chapter3_9, }, { path: "/Chapter3_10.page", name: "Chapter3_10", component: Chapter3_10, }, { path: "/Chapter3_11.page", name: "Chapter3_11", component: Chapter3_11, }, { path: "/Chapter3_12.page", name: "Chapter3_12", component: Chapter3_12, }, { path: "/Chapter3_13.page", name: "Chapter3_13", component: Chapter3_13, }, { path: "/Chapter3_14.page", name: "Chapter3_14", component: Chapter3_14, }, { path: "/Chapter3_15.page", name: "Chapter3_15", component: Chapter3_15, }, ], }, /* 설문 조사 페이지*/ { path: "/Chapter3_16.page", name: "Chapter3_16", component: Chapter3_16 }, /* 평가 결과 페이지*/ { path: "/Chapter4.page", name: "Chapter4", component: Chapter4 }, { path: "/Chapter5.page", name: "Chapter5", component: Chapter5 }, { path: "/Chapter6.page", name: "Chapter6", component: Chapter6 }, { path: "/Chapter7.page", name: "Chapter7", component: Chapter7 }, { path: "/Chapter8.page", name: "Chapter8", component: Chapter8 }, { path: "/Chapter9.page", name: "Chapter9", component: Chapter9 }, { path: "/Chapter10.page", name: "Chapter10", component: Chapter10 }, { path: "/Chapter11.page", name: "Chapter11", component: Chapter11 }, /* 부모님 */ { path: "/Main_p.page", name: "Main_p", component: Main_p }, /* 선생님 */ { path: "/Main_t.page", name: "Main_t", component: Main_t, children: [ { path: "/Board.page", name: "Board", component: Board }, { path: "/noticeInsert.page", name: "noticeInsert", component: noticeInsert, }, { path: "/noticeDetail.page", name: "noticeDetail", component: noticeDetail, }, { path: "/Home.page", name: "Home", component: Home }, { path: "/ClassDetail.page", name: "ClassDetail", component: ClassDetail, }, { path: "/StudentList.page", name: "StudentList", component: StudentList, }, { path: "/StudentDetail.page", name: "StudentDetail", component: StudentDetail, }, { path: "/C_Textbook.page", name: "C_Textbook", component: C_Textbook, }, { path: "/textbook.page", name: "textbook", component: textbook }, { path: "/TextBookDetail.page", name: "TextBookDetail", component: TextBookDetail, }, { path: "/C_TextBookDetail.page", name: "C_TextBookDetail", component: C_TextBookDetail, }, { path: "/TextList.page", name: "TextList", component: TextList }, { path: "/TextInsert.page", name: "TextInsert", component: TextInsert, }, { path: "/TextDetail.page", name: "TextDetail", component: TextDetail, }, { path: "/QuestionList.page", name: "QuestionList", component: QuestionList, }, { path: "/QuestionInsert.page", name: "QuestionInsert", component: QuestionInsert, }, { path: "/QuestionDetail.page", name: "QuestionDetail", component: QuestionDetail, }, { path: "/VocaList.page", name: "VocaList", component: VocaList }, { path: "/VocaInsert.page", name: "VocaInsert", component: VocaInsert, }, { path: "/VocaDetail.page", name: "VocaDetail", component: VocaDetail, }, { path: "/ExamList.page", name: "ExamList", component: ExamList }, { path: "/ExamDetail.page", name: "ExamDetail", component: ExamDetail, }, { path: "/ExamInsert.page", name: "ExamInsert", component: ExamInsert, }, { path: "/C_TextList.page", name: "C_TextList", component: C_TextList, }, { path: "/C_TextInsert.page", name: "C_TextInsert", component: C_TextInsert, }, { path: "/C_QuestionList.page", name: "C_QuestionList", component: C_QuestionList, }, { path: "/C_QuestionInsert.page", name: "C_QuestionInsert", component: C_QuestionInsert, }, { path: "/C_Voca_List.page", name: "C_Voca_List", component: C_Voca_List, }, { path: "/C_ExamList.page", name: "C_ExamList", component: C_ExamList, }, { path: "/C_ExamDetail.page", name: "C_ExamDetail", component: C_ExamDetail, }, { path: "/C_ExamInsert.page", name: "C_ExamInsert", component: C_ExamInsert, }, { path: "/RoadMap.page", name: "RoadMap", component: RoadMap }, { path: "/TextDetail.page", name: "TextDetail", component: TextDetail, }, ], }, ]; const AppRouter = createRouter({ history: createWebHistory(), routes, }); AppRouter.beforeEach((to, from, next) => { const token = localStorage.getItem('token'); if (!token && (to.name !== 'login' && to.name !== 'Join')) { // 토큰이 없고 로그인 페이지가 아닐 경우 로그인 페이지로 리다이렉트 next({ name: 'login' }); } else if (token) { // 토큰이 있을 경우 역할에 따른 접근 제어 const tokenParts = token.split('.'); const payload = tokenParts[1]; const base64 = payload.replace(/-/g, '+').replace(/_/g, '/'); const jsonPayload = decodeURIComponent( Array.prototype.map.call(atob(base64), c => { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('') ); const userInfo = JSON.parse(jsonPayload); const teacherRoutes = routes[35].children.map(route => route.path); if (userInfo.author[0].authority === 'STUDENT') { if (teacherRoutes.includes(to.path) || to.name === 'Main_p') { next({ name: 'MyPlan' }); } else { next(); // 다른 페이지로 접근 허용 } } else if (userInfo.author[0].authority === 'TEACHER') { if (!teacherRoutes.includes(to.path)) { next({ name: 'Home' }); } else { next(); } } else if (userInfo.author[0].authority === 'PARENT') { if (to.name !== 'Main_p') { next({ name: 'Main_p' }); } else { next(); } } else { next(); } } else { next(); } }); export default AppRouter;