[SSR 비활성화] SPA 방식으로 변경
This commit is contained in:
@@ -1,8 +1,4 @@
|
||||
export default async function useOverlay() {
|
||||
if (import.meta.server) {
|
||||
// SSR에서는 cytoscape-overlays를 사용하지 않음
|
||||
return null
|
||||
}
|
||||
// 전체 export 객체를 반환
|
||||
return await import('cytoscape-overlays')
|
||||
}
|
||||
// SPA 모드에서는 항상 클라이언트에서만 실행됨
|
||||
return await import("cytoscape-overlays");
|
||||
}
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
export default defineNuxtRouteMiddleware(async (to, _from) => {
|
||||
if (import.meta.client) {
|
||||
const userStore = useUserStore();
|
||||
const { hasPagePermission } = usePermission();
|
||||
const userStore = useUserStore();
|
||||
const { hasPagePermission } = usePermission();
|
||||
|
||||
// 공개 라우트 목록 (로그인 없이 접근 가능)
|
||||
const publicRoutes = ["/login", "/register", "/auth-error"];
|
||||
// 공개 라우트 목록 (로그인 없이 접근 가능)
|
||||
const publicRoutes = ["/login", "/register", "/auth-error"];
|
||||
|
||||
// 공개 라우트인지 확인
|
||||
const isPublicRoute = publicRoutes.some(route => to.path === route);
|
||||
// 공개 라우트인지 확인
|
||||
const isPublicRoute = publicRoutes.some(route => to.path === route);
|
||||
|
||||
// 공개 라우트가 아닌 경우 로그인 체크
|
||||
if (!isPublicRoute && !userStore.isLoggedIn) {
|
||||
return navigateTo("/login");
|
||||
// 공개 라우트가 아닌 경우 로그인 체크
|
||||
if (!isPublicRoute && !userStore.isLoggedIn) {
|
||||
return navigateTo("/login");
|
||||
}
|
||||
|
||||
// 로그인된 사용자의 경우 권한 체크
|
||||
if (userStore.isLoggedIn) {
|
||||
// 홈화면 경로는 항상 허용
|
||||
if (to.path === "/" || to.path === "/1/") {
|
||||
return;
|
||||
}
|
||||
|
||||
// 로그인된 사용자의 경우 권한 체크
|
||||
if (userStore.isLoggedIn) {
|
||||
// 홈화면 경로는 항상 허용
|
||||
if (to.path === "/" || to.path === "/1/") {
|
||||
return;
|
||||
}
|
||||
|
||||
// 페이지 권한 체크
|
||||
if (!hasPagePermission(to.path)) {
|
||||
console.log(`페이지 권한이 없습니다.: ${to.path}`);
|
||||
alert(`페이지 권한이 없습니다.`);
|
||||
return navigateTo("/");
|
||||
}
|
||||
// 페이지 권한 체크
|
||||
if (!hasPagePermission(to.path)) {
|
||||
console.log(`페이지 권한이 없습니다.: ${to.path}`);
|
||||
alert(`페이지 권한이 없습니다.`);
|
||||
return navigateTo("/");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
export default defineNuxtConfig({
|
||||
compatibilityDate: "2025-05-15",
|
||||
ssr: false,
|
||||
devtools: { enabled: true },
|
||||
modules: [
|
||||
"@nuxt/eslint",
|
||||
@@ -36,7 +36,7 @@ export default defineNuxtConfig({
|
||||
shim: false,
|
||||
strict: true,
|
||||
},
|
||||
plugins: ["~/plugins/vue3-tui-grid.client.ts"],
|
||||
plugins: ["~/plugins/vue3-tui-grid.ts"],
|
||||
components: [
|
||||
{ path: "~/components/base", pathPrefix: false }, // @base/ 접두사 제거
|
||||
{ path: "~/components/layout", pathPrefix: false }, // @layout/ 접두사 제거
|
||||
|
||||
@@ -19,18 +19,6 @@ export default defineNuxtPlugin(() => {
|
||||
...(isFormData ? {} : { "Content-Type": "application/json" }),
|
||||
...(options.headers || {}),
|
||||
};
|
||||
|
||||
// 3) SSR 쿠키 포워딩
|
||||
if (import.meta.server) {
|
||||
const cookie = useRequestHeaders(["cookie"])?.cookie;
|
||||
const reqUrl = String(request);
|
||||
const isBackendApi =
|
||||
!reqUrl.startsWith("http") || reqUrl.startsWith(baseURL);
|
||||
|
||||
if (cookie && isBackendApi) {
|
||||
options.headers = { ...(options.headers || {}), cookie } as any;
|
||||
}
|
||||
}
|
||||
},
|
||||
onResponseError({ response }) {
|
||||
// 공통 로깅
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { defineNuxtPlugin } from '#app'
|
||||
import TuiGrid from 'vue3-tui-grid'
|
||||
import 'tui-grid/dist/tui-grid.css'
|
||||
|
||||
export default defineNuxtPlugin(nuxtApp => {
|
||||
nuxtApp.vueApp.use(TuiGrid)
|
||||
})
|
||||
import { defineNuxtPlugin } from '#app'
|
||||
import TuiGrid from 'vue3-tui-grid'
|
||||
import 'tui-grid/dist/tui-grid.css'
|
||||
|
||||
export default defineNuxtPlugin(nuxtApp => {
|
||||
nuxtApp.vueApp.use(TuiGrid)
|
||||
})
|
||||
Reference in New Issue
Block a user