diff --git a/components.d.ts b/components.d.ts index 9ce08d3..17340ba 100644 --- a/components.d.ts +++ b/components.d.ts @@ -10,7 +10,10 @@ declare module 'vue' { export interface GlobalComponents { AppFooter: typeof import('./src/components/AppFooter.vue')['default'] CompareComponent: typeof import('./src/components/templates/run/executions/CompareComponent.vue')['default'] + copy: typeof import('./src/components/atoms/organisms/TrainingScriptBaseDoalog copy.vue')['default'] + DatasetBaseDoalog: typeof import('./src/components/atoms/organisms/DatasetBaseDoalog.vue')['default'] DatasetsBaseDoalog: typeof import('./src/components/atoms/organisms/DatasetsBaseDoalog.vue')['default'] + DatesetBaseDoalog: typeof import('./src/components/atoms/organisms/DatesetBaseDoalog.vue')['default'] DeploymentDialog: typeof import('./src/components/atoms/organisms/DeploymentDialog.vue')['default'] DrawerComponent: typeof import('./src/components/common/DrawerComponent.vue')['default'] ExecutionBaseDialog: typeof import('./src/components/atoms/organisms/ExecutionBaseDialog.vue')['default'] @@ -23,17 +26,23 @@ declare module 'vue' { IconDownloadBtn: typeof import('./src/components/atoms/button/IconDownloadBtn.vue')['default'] IconInfoBtn: typeof import('./src/components/atoms/button/IconInfoBtn.vue')['default'] IconModifyBtn: typeof import('./src/components/atoms/button/IconModifyBtn.vue')['default'] + IconRunBtn: typeof import('./src/components/atoms/button/IconRunBtn.vue')['default'] IconSettingBtn: typeof import('./src/components/atoms/button/IconSettingBtn.vue')['default'] LayoutComponent: typeof import('./src/components/common/LayoutComponent.vue')['default'] - ListComponent: typeof import('./src/components/home/ListComponent.vue')['default'] + ListComponent: typeof import('./src/components/templates/Datasets/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'] + WorkflowsRunDialog: typeof import('./src/components/atoms/organisms/WorkflowsRunDialog.vue')['default'] + WorkflowsRunsDialog: typeof import('./src/components/atoms/organisms/WorkflowsRunsDialog.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/button/IconRunBtn.vue b/src/components/atoms/button/IconRunBtn.vue new file mode 100644 index 0000000..21d21e8 --- /dev/null +++ b/src/components/atoms/button/IconRunBtn.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/atoms/organisms/DatasetBaseDoalog.vue b/src/components/atoms/organisms/DatasetBaseDoalog.vue new file mode 100644 index 0000000..acf925c --- /dev/null +++ b/src/components/atoms/organisms/DatasetBaseDoalog.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/components/atoms/organisms/DatasetsBaseDoalog.vue b/src/components/atoms/organisms/DatasetsBaseDoalog.vue deleted file mode 100644 index 00f752c..0000000 --- a/src/components/atoms/organisms/DatasetsBaseDoalog.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - diff --git a/src/components/atoms/organisms/ExperimentCreateDialog.vue b/src/components/atoms/organisms/ExperimentCreateDialog.vue index 53e3c9a..1fdb73d 100644 --- a/src/components/atoms/organisms/ExperimentCreateDialog.vue +++ b/src/components/atoms/organisms/ExperimentCreateDialog.vue @@ -1,29 +1,170 @@ diff --git a/src/components/atoms/organisms/WorkflowsRunDialog.vue b/src/components/atoms/organisms/WorkflowsRunDialog.vue new file mode 100644 index 0000000..801b5b5 --- /dev/null +++ b/src/components/atoms/organisms/WorkflowsRunDialog.vue @@ -0,0 +1,158 @@ + + + diff --git a/src/components/atoms/organisms/WorklfowStepBaseDialog.vue b/src/components/atoms/organisms/WorklfowStepBaseDialog.vue new file mode 100644 index 0000000..89dc1f7 --- /dev/null +++ b/src/components/atoms/organisms/WorklfowStepBaseDialog.vue @@ -0,0 +1,249 @@ + + + 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(() => {