diff --git a/.env.dev b/.env.dev
index ca5299c..759edf0 100644
--- a/.env.dev
+++ b/.env.dev
@@ -1,3 +1,3 @@
NODE_ENV = "dev"
-VITE_APP_API_SERVER_URL = "http://10.10.11.144:8080"
+VITE_APP_API_SERVER_URL = "http://localhost:80"
VITE_ROOT_PATH = ""
\ No newline at end of file
diff --git a/components.d.ts b/components.d.ts
index 7b145c3..96bfebc 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -9,28 +9,28 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
AppFooter: typeof import('./src/components/AppFooter.vue')['default']
- CompareComponent: typeof import('./src/components/run/executions/CompareComponent.vue')['default']
+ CompareComponent: typeof import('./src/components/templates/run/executions/CompareComponent.vue')['default']
DatasetsBaseDoalog: typeof import('./src/components/atoms/organisms/DatasetsBaseDoalog.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']
ExperimentCreateDialog: typeof import('./src/components/atoms/organisms/ExperimentCreateDialog.vue')['default']
HelloWorld: typeof import('./src/components/HelloWorld.vue')['default']
- IconArrowDown: typeof import('./src/components/button/IconArrowDown.vue')['default']
- IconArrowUp: typeof import('./src/components/button/IconArrowUp.vue')['default']
- IconDeleteBtn: typeof import('./src/components/button/IconDeleteBtn.vue')['default']
- IconDeployment: typeof import('./src/components/button/IconDeployment.vue')['default']
- IconDownloadBtn: typeof import('./src/components/button/IconDownloadBtn.vue')['default']
- IconInfoBtn: typeof import('./src/components/button/IconInfoBtn.vue')['default']
- IconModifyBtn: typeof import('./src/components/button/IconModifyBtn.vue')['default']
- IconSettingBtn: typeof import('./src/components/button/IconSettingBtn.vue')['default']
+ IconArrowDown: typeof import('./src/components/atoms/button/IconArrowDown.vue')['default']
+ IconArrowUp: typeof import('./src/components/atoms/button/IconArrowUp.vue')['default']
+ IconDeleteBtn: typeof import('./src/components/atoms/button/IconDeleteBtn.vue')['default']
+ IconDeployment: typeof import('./src/components/atoms/button/IconDeployment.vue')['default']
+ 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']
+ IconSettingBtn: typeof import('./src/components/atoms/button/IconSettingBtn.vue')['default']
LayoutComponent: typeof import('./src/components/common/LayoutComponent.vue')['default']
- ListComponent: typeof import('./src/components/Datasets/ListComponent.vue')['default']
+ ListComponent: typeof import('./src/components/home/ListComponent.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
StapComfigDialog: typeof import('./src/components/atoms/organisms/StapComfigDialog.vue')['default']
TrainingScriptBaseDoalog: typeof import('./src/components/atoms/organisms/TrainingScriptBaseDoalog.vue')['default']
- ViewComponent: typeof import('./src/components/Datasets/ViewComponent.vue')['default']
+ ViewComponent: typeof import('./src/components/templates/Datasets/ViewComponent.vue')['default']
WorkflowDialog: typeof import('./src/components/atoms/organisms/WorkflowDialog.vue')['default']
WorkflowsCreateDialog: typeof import('./src/components/atoms/organisms/WorkflowsCreateDialog.vue')['default']
WorkflowsUploadDialog: typeof import('./src/components/atoms/organisms/WorkflowsUploadDialog.vue')['default']
diff --git a/src/App.vue b/src/App.vue
index 64618cd..ecbb947 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -5,5 +5,5 @@
diff --git a/src/components/button/IconArrowDown.vue b/src/components/atoms/button/IconArrowDown.vue
similarity index 100%
rename from src/components/button/IconArrowDown.vue
rename to src/components/atoms/button/IconArrowDown.vue
diff --git a/src/components/button/IconArrowUp.vue b/src/components/atoms/button/IconArrowUp.vue
similarity index 100%
rename from src/components/button/IconArrowUp.vue
rename to src/components/atoms/button/IconArrowUp.vue
diff --git a/src/components/button/IconDeleteBtn.vue b/src/components/atoms/button/IconDeleteBtn.vue
similarity index 100%
rename from src/components/button/IconDeleteBtn.vue
rename to src/components/atoms/button/IconDeleteBtn.vue
diff --git a/src/components/button/IconDeployment.vue b/src/components/atoms/button/IconDeployment.vue
similarity index 100%
rename from src/components/button/IconDeployment.vue
rename to src/components/atoms/button/IconDeployment.vue
diff --git a/src/components/button/IconDownloadBtn.vue b/src/components/atoms/button/IconDownloadBtn.vue
similarity index 100%
rename from src/components/button/IconDownloadBtn.vue
rename to src/components/atoms/button/IconDownloadBtn.vue
diff --git a/src/components/button/IconInfoBtn.vue b/src/components/atoms/button/IconInfoBtn.vue
similarity index 100%
rename from src/components/button/IconInfoBtn.vue
rename to src/components/atoms/button/IconInfoBtn.vue
diff --git a/src/components/button/IconModifyBtn.vue b/src/components/atoms/button/IconModifyBtn.vue
similarity index 100%
rename from src/components/button/IconModifyBtn.vue
rename to src/components/atoms/button/IconModifyBtn.vue
diff --git a/src/components/button/IconSettingBtn.vue b/src/components/atoms/button/IconSettingBtn.vue
similarity index 100%
rename from src/components/button/IconSettingBtn.vue
rename to src/components/atoms/button/IconSettingBtn.vue
diff --git a/src/components/atoms/organisms/DeploymentDialog.vue b/src/components/atoms/organisms/DeploymentDialog.vue
index 319220d..b932e53 100644
--- a/src/components/atoms/organisms/DeploymentDialog.vue
+++ b/src/components/atoms/organisms/DeploymentDialog.vue
@@ -1,8 +1,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mdi-magnify
+
+
+
+
+
+
+
+
+ 총 {{ data.totalDataLength.toLocaleString() }}개
+
+
+
+
+
+
+
+
+
+ Create Project
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ |
+
+ {{ item.label }}
+ |
+
+
+
+
+
+ |
+
+ |
+
+ {{ item.no }} |
+ {{ item.name }} |
+
+
+
+ {{ item.desc }}
+ |
+
+
+
+
+
+ {{ u }}
+
+
+ -
+ |
+
+ {{ item.registDt }} |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ data.modalMode === "create" ? "Create Project" : "Modify Project"
+ }}
+
+
+
+
+
+
+
+
+
+
+ Cancel
+
+ {{ data.modalMode === "create" ? "Create" : "Save" }}
+
+
+
+
+
+
+
+
diff --git a/src/components/deployment/ListComponent.vue b/src/components/templates/deployment/ListComponent.vue
similarity index 98%
rename from src/components/deployment/ListComponent.vue
rename to src/components/templates/deployment/ListComponent.vue
index a25e235..6e4b911 100644
--- a/src/components/deployment/ListComponent.vue
+++ b/src/components/templates/deployment/ListComponent.vue
@@ -1,10 +1,10 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Details
+ YAML
+
+
+
+
+
+
+ Workflow Information
+
+
+
+ Workflow Name
+ {{ detail.workflowName }}
+ Version
+ {{ detail.version }}
+
+
+
+ Workflow Description
+ {{ detail.workflowDescription }}
+
+
+
+ Created Date
+ {{ detail.createdDate }}
+ Created ID
+ {{ detail.createdId }}
+
+
+
+
+
+
+
+ Step Overview
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.status }}
+
+
+
+
+
+ Back to List
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/workflow/ViewComponent.vue b/src/components/workflow/ViewComponent.vue
deleted file mode 100644
index e924bdb..0000000
--- a/src/components/workflow/ViewComponent.vue
+++ /dev/null
@@ -1,497 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Details
- YAML
-
-
-
-
- Workflow Information
-
-
-
-
-
- Workflow Name
-
- {{ experimentInfo.workflowName }}
- Version
- {{ experimentInfo.version }}
-
-
-
-
-
-
- Workflow Description
-
- {{ experimentInfo.workflowDescription }}
-
-
-
-
-
-
- Created Date
-
- {{ experimentInfo.createdDate }}
-
- Created ID
-
- {{ experimentInfo.createdId }}
-
-
-
-
-
-
-
- Step Overview
-
-
-
-
-
- {{ index + 1 }}
-
-
-
-
- {{ item.status }}
-
-
-
-
-
- Back to List
-
-
-
-
-
-
-
-
-
-
diff --git a/src/layouts/default.vue b/src/layouts/default.vue
index b91b180..973fc71 100644
--- a/src/layouts/default.vue
+++ b/src/layouts/default.vue
@@ -5,5 +5,5 @@
diff --git a/src/pages/DatasetView.vue b/src/pages/DatasetView.vue
index 0e15a7a..c37d46a 100644
--- a/src/pages/DatasetView.vue
+++ b/src/pages/DatasetView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/DeploymentView.vue b/src/pages/DeploymentView.vue
index eef311f..b1f8e29 100644
--- a/src/pages/DeploymentView.vue
+++ b/src/pages/DeploymentView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/ExecutionsView.vue b/src/pages/ExecutionsView.vue
index 510834b..5dd2d83 100644
--- a/src/pages/ExecutionsView.vue
+++ b/src/pages/ExecutionsView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/ExperimentView.vue b/src/pages/ExperimentView.vue
index c5f3ccb..c33a5d3 100644
--- a/src/pages/ExperimentView.vue
+++ b/src/pages/ExperimentView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/LoginView.vue b/src/pages/LoginView.vue
index 5231b87..7ace2c8 100644
--- a/src/pages/LoginView.vue
+++ b/src/pages/LoginView.vue
@@ -1,5 +1,4 @@
+
+
+
+
+
+
diff --git a/src/pages/TrainingScriptView.vue b/src/pages/TrainingScriptView.vue
index ae27120..6947fee 100644
--- a/src/pages/TrainingScriptView.vue
+++ b/src/pages/TrainingScriptView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/WorkflowStepConfigView.vue b/src/pages/WorkflowStepConfigView.vue
index b9e17dd..d24833a 100644
--- a/src/pages/WorkflowStepConfigView.vue
+++ b/src/pages/WorkflowStepConfigView.vue
@@ -1,5 +1,5 @@
diff --git a/src/pages/WorkflowView.vue b/src/pages/WorkflowView.vue
index 444b477..7d2441b 100644
--- a/src/pages/WorkflowView.vue
+++ b/src/pages/WorkflowView.vue
@@ -1,5 +1,5 @@
diff --git a/src/router/index.js b/src/router/index.js
index 05f3510..83c7f80 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -18,15 +18,6 @@ const routes = [
},
component: () => import("@/pages/MainView.vue"),
},
- {
- name: "home",
- path: `/home`,
- meta: {
- title: "Home",
- requiresAuth: false,
- },
- component: () => import("@/pages/HomeView.vue"),
- },
{
name: "select",
path: `/select`,
@@ -37,6 +28,25 @@ const routes = [
},
component: () => import("@/views/Select.vue"),
},
+ {
+ name: "project",
+ path: `/project`,
+ meta: {
+ title: "Project",
+ requiresAuth: false,
+ },
+ component: () => import("@/pages/ProjectView.vue"),
+ },
+ {
+ name: "home",
+ path: `/home`,
+ meta: {
+ title: "Home",
+ requiresAuth: false,
+ },
+ component: () => import("@/pages/HomeView.vue"),
+ },
+
{
name: "workflows",
path: `/workflows`,
diff --git a/src/stores/autoflowStore.ts b/src/stores/autoflowStore.ts
index d4fbf44..a3f5eb0 100644
--- a/src/stores/autoflowStore.ts
+++ b/src/stores/autoflowStore.ts
@@ -2,14 +2,38 @@ import { defineStore } from "pinia";
import { ref } from "vue";
export const useAutoflowStore = defineStore("autoflowStore", () => {
- const ProjectName = ref("");
- const setProjectName = (v) => {
- ProjectName.value = v;
+ // 초기값 복원
+ const storedId = localStorage.getItem("projectId");
+ const projectId = ref(storedId ? Number(storedId) : null);
+
+ const projectName = ref(localStorage.getItem("projectName") || "");
+
+ const setProjectId = (id: number) => {
+ projectId.value = id;
+ localStorage.setItem("projectId", String(id));
};
- return {
- ProjectName,
+ const clearProjectId = () => {
+ projectId.value = null;
+ localStorage.removeItem("projectId");
+ };
+ const setProjectName = (name: string) => {
+ projectName.value = name;
+ localStorage.setItem("projectName", name);
+ };
+
+ const clearProjectName = () => {
+ projectName.value = "";
+ localStorage.removeItem("projectName");
+ };
+
+ return {
+ projectId,
+ projectName,
+ setProjectId,
+ clearProjectId,
setProjectName,
+ clearProjectName,
};
});
diff --git a/src/utils/menuUtils.js b/src/utils/menuUtils.js
index aaaac7c..90efece 100644
--- a/src/utils/menuUtils.js
+++ b/src/utils/menuUtils.js
@@ -6,6 +6,12 @@ export const menuUtils = {
value: "home",
icon: "mdi-monitor-multiple",
},
+ {
+ title: "Project",
+ path: "/project",
+ value: "project",
+ icon: "mdi-folder-cog-outline",
+ },
{
title: "Workflows",
path: "/workflows",
@@ -40,13 +46,13 @@ export const menuUtils = {
title: "Training Script",
path: "/training-script",
value: "training-script",
- icon: "mdi-account",
+ icon: "mdi-file-code-outline",
},
{
title: "Datasets",
path: "/datasets",
value: "datasets",
- icon: "mdi-account",
+ icon: "mdi-database-outline",
},
],
};
diff --git a/src/utils/storage.js b/src/utils/storage.js
index 2cae909..23c2e3d 100644
--- a/src/utils/storage.js
+++ b/src/utils/storage.js
@@ -8,8 +8,40 @@ export const storage = {
getToken: () => {
const authString = localStorage.getItem("autoflow-auth");
if (authString !== null) {
- const auth = JSON.parse(authString);
- return auth.token;
+ try {
+ const auth = JSON.parse(authString);
+
+ if (auth.jwtCookie) {
+ const match = auth.jwtCookie.match(/cuuva-jwt=([^;]+)/);
+ if (match && match[1]) {
+ return match[1];
+ }
+ }
+ } catch (e) {
+ console.error("[storage] getToken parse error:", e);
+ }
+ }
+ return "";
+ },
+
+ // 리프레시 토큰만 잘라서 반환
+ getRefreshToken: () => {
+ const authString = localStorage.getItem("autoflow-auth");
+ if (authString !== null) {
+ try {
+ const auth = JSON.parse(authString);
+
+ if (auth.jwtRefreshCookie) {
+ const match = auth.jwtRefreshCookie.match(
+ /cuuva-jwt-refresh=([^;]+)/,
+ );
+ if (match && match[1]) {
+ return match[1];
+ }
+ }
+ } catch (e) {
+ console.error("[storage] getRefreshToken parse error:", e);
+ }
}
return "";
},
@@ -21,7 +53,7 @@ export const storage = {
}
return "";
},
- getId: () =>{
+ getId: () => {
const authString = localStorage.getItem("autoflow-auth");
if (authString !== null) {
const auth = JSON.parse(authString);
diff --git a/src/views/Select.vue b/src/views/Select.vue
index 429cda1..ed6ce2b 100644
--- a/src/views/Select.vue
+++ b/src/views/Select.vue
@@ -1,148 +1,295 @@
@@ -152,8 +299,11 @@ onMounted(() => {
Project Selection
+
+
{
- 생성자: {{ project.creator }}
+ Select Users: {{ project.creator }}
등록일: {{ project.date }}
@@ -205,6 +355,7 @@ onMounted(() => {
+
{
+
-
{{ modalMode === "create" ? "Create Project" : "Modify Project" }}
@@ -245,6 +396,8 @@ onMounted(() => {
label="Select Users"
v-model="form.selectedUsers"
:items="userOptions"
+ item-title="username"
+ item-value="username"
multiple
chips
closable-chips
@@ -255,7 +408,6 @@ onMounted(() => {
Cancel
-
{{ modalMode === "create" ? "Create" : "Save" }}
diff --git a/typed-router.d.ts b/typed-router.d.ts
index 559ed61..8c4a1a7 100644
--- a/typed-router.d.ts
+++ b/typed-router.d.ts
@@ -26,6 +26,7 @@ declare module 'vue-router/auto-routes' {
'/HomeView': RouteRecordInfo<'/HomeView', '/HomeView', Record, Record>,
'/LoginView': RouteRecordInfo<'/LoginView', '/LoginView', Record, Record>,
'/MainView': RouteRecordInfo<'/MainView', '/MainView', Record, Record>,
+ '/ProjectView': RouteRecordInfo<'/ProjectView', '/ProjectView', Record, Record>,
'/SignupView': RouteRecordInfo<'/SignupView', '/SignupView', Record, Record>,
'/TrainingScriptView': RouteRecordInfo<'/TrainingScriptView', '/TrainingScriptView', Record, Record>,
'/WorkflowStepConfigView': RouteRecordInfo<'/WorkflowStepConfigView', '/WorkflowStepConfigView', Record, Record>,
diff --git a/vite.config.mjs b/vite.config.mjs
index a94c4b5..1d3db52 100644
--- a/vite.config.mjs
+++ b/vite.config.mjs
@@ -15,7 +15,8 @@ import { fileURLToPath, URL } from "node:url";
// https://vitejs.dev/config/
export default defineConfig({
// 배포할때는 주석 풀기
- // base: "/autoflow/",
+ // base: process.env.VITE_ROOT_PATH,
+ base: "/autoflow/",
plugins: [
VueRouter(),
Layouts(),
@@ -78,9 +79,6 @@ export default defineConfig({
sass: {
api: "modern-compiler",
},
- scss: {
- api: "modern-compiler",
- },
},
},
});