import axios from '../common/defaultAxios.js'; import store from "./AppStore"; import { createWebHistory, createRouter } from "vue-router"; // #페이지 // 데이터관리 import FileManagement from "../pages/data/FileManagement.vue"; // 파일 관리 import DataManagement from "../pages/data/DataPostManagement.vue"; // 데이터 관리 // 작업관리 import ScheduleManagement from "../pages/schedule/ScheduleManagement.vue"; // 작업 스케줄 관리 // 회원관리 import UserManagement from "../pages/integrated/UserManagement.vue"; // 사용자 관리 import AdminManagement from "../pages/integrated/AdminManagement.vue"; // 관리자 관리 import DepartmentManagement from "../pages/integrated/DepartmentManagement.vue"; // 부서 관리 import DBConnectionList from "../pages/dbConnection/DBConnectionList.vue"; // 연계정보 관리 // 정보관리 import myPage from "../pages/user/myPage.vue"; // 내 정보 관리 import myPagePwd from "../pages/user/myPagePwd.vue"; // 비밀번호 변경 // 미분류 import DBConnectionDetail from "../pages/dbConnection/DBConnectionDetail.vue"; import HostManagement from "../pages/data/HostManagement.vue"; import InsertDataPost from "../pages/data/InsertDataPost.vue"; import DataPostDetail from "../pages/data/DataPostDetail.vue"; import DataEditView from "../pages/data/DataEditView.vue"; import TermManagement from "../pages/meta/TermManagement.vue"; import DataMetaManagement from "../pages/meta/DataMetaManagement.vue"; import Push from "../pages/push/Push.vue"; import InsertDBConnection from "../pages/dbConnection/InsertDBConnection.vue"; import CustomSelectList from "../pages/custom/CustomSelectList.vue"; import CustomSelectOne from "../pages/custom/CustomSelectOne.vue"; import InsertDataAnalytics from "./custom/InsertDataAnalytics.vue"; import OpenApiList from "../pages/openapi/OpenApiList.vue"; import OpenApiInsert from "../pages/openapi/OpenApiInsert.vue"; import OpenApiSelectListOne from "../pages/openapi/OpenApiSelectListOne.vue"; import GisInfoList from "../pages/gisinfo/GisInfoList.vue"; import GisInfoInsert from "../pages/gisinfo/GisInfoInsert.vue"; import GisInfoSelectListOne from "../pages/gisinfo/GisInfoSelectListOne.vue"; import OpenApiKeyList from "../pages/openapi/OpenApiKeyList.vue"; // 로그인 화면 import Login from "../pages/login/Login.vue"; // 커뮤니티 관리 import NoticeList from "../pages/community/NoticeList.vue"; import NoticeView from "../pages/community/NoticeView.vue"; import NoticeInsert from "../pages/community/NoticeInsert.vue"; import FaqList from "../pages/community/FaqList.vue"; import FaqView from "../pages/community/FaqView.vue"; import FaqInsert from "../pages/community/FaqInsert.vue"; // 차트 import Chart from "../component/chart/ChartPage.vue"; // 템플릿 import Searchbar from "../template/templateElement/Searchbar.vue"; import Table from "../template/templateElement/Table.vue"; import BtnPosition from "../template/templateElement/BtnPosition.vue"; import Horizontal from "../template/layoutTemplate/Horizontal.vue"; import Vertical from "../template/layoutTemplate/Vertical.vue"; import FormModal from "../template/templateElement/FormModal.vue"; import ListModal from "../template/templateElement/ListModal.vue"; import AlertModal from "../template/templateElement/AlertModal.vue"; import Icon from "../template/templateElement/Icon.vue"; import Guide from "../template/guide/TemplateGuide.vue"; const routes = [ // 작업관리 { path: "/scheduleManagement.page", name: "ScheduleManagement", component: ScheduleManagement }, // 작업 스케줄 관리 // 회원관리 { path: "/user.page", name: "User", component: UserManagement }, // 사용자 관리 { path: "/adminManagement.page", name: "AdminManagement", component: AdminManagement }, // 관리자 관리 { path: "/departmentManagement.page", name: "Department", component: DepartmentManagement }, // 부서 관리 { path: "/dbConnectionList.page", name: "DBConnectionList", component: DBConnectionList }, // 연계정보 관리 { path: "/fileManagement.page", name: "FileManagement", component: FileManagement }, { path: "/hostManagement.page", name: "HostManagement", component: HostManagement }, { path: "/dataManagement.page", name: "DataManagement", component: DataManagement }, { path: "/insertDataPost.page", name: "InsertDataPost", component: InsertDataPost }, { path: "/dataPostDetail.page", name: "DataPostDetail", component: DataPostDetail }, { path: "/DataEditView.page", name: "DataEditView", component: DataEditView }, { path: "/termManagement.page", name: "TermManagement", component: TermManagement }, { path: "/dataMetaManagement.page", name: "DataMetaManagement", component: DataMetaManagement }, { path: "/push.page", name: "Push", component: Push }, { path: "/insertDBConnection.page", name: "InsertDBConnection", component: InsertDBConnection }, { path: "/DBConnectionDetail.page", name: "DBConnectionDetail", component: DBConnectionDetail }, { path: "/gisInfoList.page", name: "GisInfoList", component: GisInfoList }, { path: "/gisInfoInsert.page", name: "GisInfoInsert", component: GisInfoInsert }, { path: "/gisInfoListOne.page", name: "GisInfoSelectListOne", component: GisInfoSelectListOne }, { path: "/myPage.page", name: "myPage", component: myPage }, { path: "/myPagePwd.page", name: "myPagePwd", component: myPagePwd }, { path: "/login.page", name: "Login", component: Login }, // OPEN API { path: "/openApiList.page", name: "OpenApiList", component: OpenApiList }, { path: "/openApiInsert.page", name: "OpenApiInsert", component: OpenApiInsert }, { path: "/openApiListOne.page", name: "OpenApiSelectListOne", component: OpenApiSelectListOne }, { path: "/openApiKeyList.page", name: "OpenApiKeyList", component: OpenApiKeyList }, // 데이터활용관리 { path: "/customSelectList.page", name: "CustomSelectList", component: CustomSelectList }, { path: "/customSelectOne.page", name: "CustomSelectOne", component: CustomSelectOne }, { path: "/insertDataAnalytics.page", name: "InsertDataAnalytics", component: InsertDataAnalytics }, // 커뮤니티 관리 { path: "/noticeList.page", name: "NoticeList", component: NoticeList }, { path: "/noticeView.page", name: "NoticeView", component: NoticeView }, { path: "/noticeInsert.page", name: "NoticeInsert", component: NoticeInsert }, { path: "/faqList.page", name: "FaqList", component: FaqList }, { path: "/faqView.page", name: "FaqView", component: FaqView }, { path: "/faqInsert.page", name: "FaqInsert", component: FaqInsert }, // 차트 { path: "/chart.page", name: "Chart", component: Chart }, // 템플릿 화면 { path: "/searchbar.page", name: "Searchbar", component: Searchbar }, { path: "/table.page", name: "Table", component: Table }, { path: "/btnPosition.page", name: "BtnPosition", component: BtnPosition }, { path: "/horizontal.page", name: "Horizontal", component: Horizontal }, { path: "/vertical.page", name: "Vertical", component: Vertical }, { path: "/formModal.page", name: "FormModal", component: FormModal }, { path: "/listModal.page", name: "ListModal", component: ListModal }, { path: "/alertModal.page", name: "AlertModal", component: AlertModal }, { path: "/icon.page", name: "Icon", component: Icon }, { path: "/guide.page", name: "Guide", component: Guide }, ]; function userAuthCheck(to, from, next) { const authList = store.state.loginUser.user_auth; let userAdmAuthCheck = "ROLE_USER"; for (let auth of authList) { if (auth == "ROLE_VIEWER") { userAdmAuthCheck = "ROLE_VIEWER"; break; } } for (let auth of authList) { if (auth == "ROLE_ADMIN") { userAdmAuthCheck = "ROLE_ADMIN"; break; } } if (userAdmAuthCheck == "ROLE_ADMIN") { if (to.path == "/" || to.path == "/login.page") { next("/fileManagement.page"); } else { next(); } } else if (userAdmAuthCheck == "ROLE_VIEWER") { if (to.path == "/openApiList.page" || to.path == "/openApiListOne.page" || to.path == "/myPage.page" || to.path == "/myPagePwd.page") { next(); } else { if (to.path != "/") { alert("접근 권한이 없습니다."); } next("/openApiList.page"); } } else { if (to.path == "/") { next("/fileManagement.page"); } else if (to.path != "/user.page" && to.path != "/adminManagement.page" && to.path != "/departmentManagement.page" && to.path != "/hostManagement.page" && to.path != "/openApiKeyList.page" || to.path != "/dbConnectionList.page") { next(); } else { alert("접근 권한이 없습니다."); next("/fileManagement.page"); } } } const AppRouter = createRouter({ history: createWebHistory(), routes, }); AppRouter.beforeEach(async (to, from, next) => { // 로그인 페이지는 항상 접근 가능 if (to.path == "/login.page") { return next(); } // 모든 페이지 이동 시 로그인 상태 체크 (세션 만료 체크 포함) axios({ url: "/getLoginInfo.json", method: "post", headers: { "Content-Type": "application/json; charset=UTF-8" }, }) .then(function (response) { if (response.data.checkMessage.status > 0) { // 로그인 정보 갱신 store.commit("setLoginUser", response.data.resultData.LoginUserInfo); // 권한 체크 후 라우팅 userAuthCheck(to, from, next); } else { // 로그인 상태가 아니거나 세션이 만료된 경우 store.commit("setLoginUser", null); // 로그인 정보 초기화 next("/login.page"); } }) .catch(function (error) { alert("에러가 발생했습니다. 관리자에게 문의해 주세요."); store.commit("setLoginUser", null); // 로그인 정보 초기화 next("/login.page"); }); }); export default AppRouter;