From c25411710646a09e9c9aa719fde009f261df1e5d Mon Sep 17 00:00:00 2001 From: jschoi Date: Wed, 17 Sep 2025 09:37:04 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80,=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20Step=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 3 + .../atoms/organisms/StapComfigDialog.vue | 99 ---- .../atoms/organisms/WorkflowsBaseDialog.vue | 8 +- .../organisms/WorklfowStepBaseDialog.vue | 207 +++++++ src/components/common/DrawerComponent.vue | 31 +- src/components/common/LayoutComponent.vue | 124 ++-- src/components/common/SidebarHeader.vue | 12 + .../management/{Autoflow.ts => Workflow.ts} | 0 .../models/management/WorkflowStep.ts | 21 + .../service/management/AutoflowStepService.ts | 20 - ...{AutoflowService.ts => workflowService.ts} | 4 +- .../service/management/workflowStepService.ts | 23 + .../templates/stepconfig/ListComponent.vue | 552 +++++++++--------- .../templates/workflow/ListComponent.vue | 51 +- .../templates/workflow/ViewComponent.vue | 4 +- src/pages/SignupView.vue | 12 +- src/router/index.js | 5 +- 17 files changed, 659 insertions(+), 517 deletions(-) delete mode 100644 src/components/atoms/organisms/StapComfigDialog.vue create mode 100644 src/components/atoms/organisms/WorklfowStepBaseDialog.vue create mode 100644 src/components/common/SidebarHeader.vue rename src/components/models/management/{Autoflow.ts => Workflow.ts} (100%) create mode 100644 src/components/models/management/WorkflowStep.ts delete mode 100644 src/components/service/management/AutoflowStepService.ts rename src/components/service/management/{AutoflowService.ts => workflowService.ts} (88%) create mode 100644 src/components/service/management/workflowStepService.ts diff --git a/components.d.ts b/components.d.ts index 9ce08d3..bc7634c 100644 --- a/components.d.ts +++ b/components.d.ts @@ -28,12 +28,15 @@ declare module 'vue' { ListComponent: typeof import('./src/components/home/ListComponent.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] + SidebarHeader: typeof import('./src/components/common/SidebarHeader.vue')['default'] StapComfigDialog: typeof import('./src/components/atoms/organisms/StapComfigDialog.vue')['default'] + StepComfigDialog: typeof import('./src/components/atoms/organisms/StepComfigDialog.vue')['default'] TrainingScriptBaseDoalog: typeof import('./src/components/atoms/organisms/TrainingScriptBaseDoalog.vue')['default'] ViewComponent: typeof import('./src/components/templates/Datasets/ViewComponent.vue')['default'] WorkflowDialog: typeof import('./src/components/atoms/organisms/WorkflowDialog.vue')['default'] WorkflowsBaseDialog: typeof import('./src/components/atoms/organisms/WorkflowsBaseDialog.vue')['default'] WorkflowsCreateDialog: typeof import('./src/components/atoms/organisms/WorkflowsCreateDialog.vue')['default'] WorkflowsUploadDialog: typeof import('./src/components/atoms/organisms/WorkflowsUploadDialog.vue')['default'] + WorklfowStepBaseDialog: typeof import('./src/components/atoms/organisms/WorklfowStepBaseDialog.vue')['default'] } } diff --git a/src/components/atoms/organisms/StapComfigDialog.vue b/src/components/atoms/organisms/StapComfigDialog.vue deleted file mode 100644 index 0f9e8ef..0000000 --- a/src/components/atoms/organisms/StapComfigDialog.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/src/components/atoms/organisms/WorkflowsBaseDialog.vue b/src/components/atoms/organisms/WorkflowsBaseDialog.vue index 0ab00e2..2b4c3c3 100644 --- a/src/components/atoms/organisms/WorkflowsBaseDialog.vue +++ b/src/components/atoms/organisms/WorkflowsBaseDialog.vue @@ -4,9 +4,9 @@ import IconArrowUp from "@/components/atoms/button/IconArrowUp.vue"; import IconDeleteBtn from "@/components/atoms/button/IconDeleteBtn.vue"; import IconModifyBtn from "@/components/atoms/button/IconModifyBtn.vue"; import { computed, onBeforeUnmount, onMounted, watch, ref } from "vue"; -import { AutoflowService } from "@/components/service/management/AutoflowService"; +import { WorkflowService } from "@/components/service/management/workflowService"; import { storage } from "@/utils/storage"; -import type { Workflow } from "@/components/models/management/Autoflow"; +import type { Workflow } from "@/components/models/management/Workflow"; import { storeToRefs } from "pinia"; import { useAutoflowStore } from "@/stores/autoflowStore"; @@ -122,12 +122,12 @@ async function submit() { return; } - const { data } = await AutoflowService.update(id, payload); + const { data } = await WorkflowService.update(id, payload); emit("saved", data); emit("close-modal"); } else { // 생성 - const { data } = await AutoflowService.add(payload); + const { data } = await WorkflowService.add(payload); emit("saved", data); emit("close-modal"); } diff --git a/src/components/atoms/organisms/WorklfowStepBaseDialog.vue b/src/components/atoms/organisms/WorklfowStepBaseDialog.vue new file mode 100644 index 0000000..ea509cd --- /dev/null +++ b/src/components/atoms/organisms/WorklfowStepBaseDialog.vue @@ -0,0 +1,207 @@ + + + diff --git a/src/components/common/DrawerComponent.vue b/src/components/common/DrawerComponent.vue index 4d5ed09..c026f39 100644 --- a/src/components/common/DrawerComponent.vue +++ b/src/components/common/DrawerComponent.vue @@ -3,16 +3,21 @@ import { ref, onMounted, computed } from "vue"; import { useRoute, useRouter } from "vue-router"; import { menuUtils } from "@/utils/menuUtils"; import { storage } from "@/utils/storage"; -import logo from "@/assets/iteration (1).png"; +import SidebarHeader from "@/components/common/SidebarHeader.vue"; const route = useRoute(); const router = useRouter(); +const isAdminRoute = computed(() => + route.matched.some((r) => r.meta?.requiresAdmin), +); +const menuItems = computed(() => + isAdminRoute.value ? menuUtils.adminMenuItem : menuUtils.menuItem, +); const isShowAuth = ref(false); function readRolesFromStorage(): string[] { try { - // storage.get(...) 이 문자열일 수도, 객체일 수도 있어서 분기 const raw = storage.get?.("autoflow-auth") ?? localStorage.getItem("autoflow-auth") ?? @@ -20,8 +25,6 @@ function readRolesFromStorage(): string[] { const auth = typeof raw === "string" ? JSON.parse(raw) : raw; let roles = auth?.userInfo?.roles ?? auth?.roles ?? []; - - // "ROLE_USER,ROLE_ADMIN" 처럼 문자열로 오는 경우 if (typeof roles === "string") { roles = roles.split(",").map((s: string) => s.trim()); } @@ -33,7 +36,6 @@ function readRolesFromStorage(): string[] { } } -// ADMIN 인지 계산 (ROLE_ADMIN 또는 ADMIN 둘 다 허용) const isAdmin = computed(() => { const roles = readRolesFromStorage(); return roles.some((r) => r === "ROLE_ADMIN" || r === "ADMIN"); @@ -43,10 +45,6 @@ const isLinkActive = (link) => { return route.path.includes(link); }; -const goMain = () => { - router.push("/home"); -}; - onMounted(() => { isShowAuth.value = true; //storage.getAuth().auth === "ADMIN"; @@ -55,19 +53,6 @@ onMounted(() => {