박현정 박현정 07-22
250722 박현정 프로젝트 복제 기능 추가
@bd352977e21c87cc9de150fc8bad9a53be7f5c10
client/resources/api/asset.js
--- client/resources/api/asset.js
+++ client/resources/api/asset.js
@@ -1,4 +1,5 @@
 import apiClient from "./index";
+import axios from 'axios';
 
 // 자산(프로젝트) 목록 조회 기능
 export const findAllProjectsProc = (data) => {
@@ -6,7 +7,14 @@
 }
 
 // 자산(프로젝트) 생성 기능
-export const saveProjectProc = (data) => {
-    return apiClient.post('/project/saveProject.json', data);
-}
 
+export const saveProjectProc = (formData) => {
+  return axios.post('/api/project/saveProject.json', formData, {
+    withCredentials: true
+});
+};
+
+// 자산(프로젝트) 복제 기능
+export const duplicateProjectProc = (projectId, data) => {
+    return apiClient.post(`/project/${projectId}/duplicateProject.json`, data);
+}
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/subPage/Asset.vue
--- client/views/pages/subPage/Asset.vue
+++ client/views/pages/subPage/Asset.vue
@@ -52,9 +52,11 @@
           <!-- 드롭다운 메뉴 표시 -->
         <div v-if="openMenuIndex === index" class="dropdown-menu"   :class="dropdownDirection">
             <button><img src="../../../resources/img/content/ico_subShare.svg" alt=""> 공유</button>
-            <button><img src="../../../resources/img/content/ico_subCopy.svg" alt=""> 복사</button>
+            <button><img src="../../../resources/img/content/ico_subCopy.svg" alt="" @click="duplicateProject(project.projectId)"> 복사</button>
             <button><img src="../../../resources/img/content/ico_trashcan.svg" alt=""> 삭제</button>
-            <button><img src="../../../resources/img/content/ico_version.svg" alt=""> 버전기록</button>
+            <button><img src="../../../resources/img/content/ico_version.svg" alt="" @click="loadOldProjects"> 버전기록</button>
+            <!-- @click="changeProjectName -->
+            <button><img src="" alt="" > 이름 변경</button> 
         </div>
       </div>
     </div>
@@ -62,8 +64,9 @@
 </template>
 
 <script>
-import { findAllProjectsProc } from '../../../resources/api/asset';
 import { mapGetters } from 'vuex';
+import { findAllProjectsProc } from '../../../resources/api/asset';
+import { duplicateProjectProc } from '../../../resources/api/asset';
 
 export default {
     data() {
@@ -75,7 +78,7 @@
                 // { name: '프로젝트D', date: '2025.05.12', img: require('../../../resources/img/content/sample1.png'),isFavorite: true },
                 // { name: '프로젝트E', date: '2025.05.12', img: require('../../../resources/img/content/sample1.png'),isFavorite: false },
             ],
-             openMenuIndex: null,
+            openMenuIndex: null,
             dropdownDirection: 'right' // 또는 'left'
 
         };
@@ -102,10 +105,31 @@
             this.openMenuIndex = index;
           });
         },
-        loadProjects() {
+        loadMainProjects() {
           findAllProjectsProc({
             memberId: this.getMemId,
-            isMain: "Y" // 대표 프로젝트만 화면 목록에 뜨게 함.
+            isMain: 'Y' // 대표 프로젝트만 화면 목록에 뜨게 함.
+          })
+            .then(response => {
+              const projectList = response.data.result.projects;
+
+              this.projects = projectList.map(project => ({
+                projectId: project.projectId,
+                projectGroupId: project.projectGroupId,
+                isMain: project.isMain,
+                name: project.projectName,
+                date: project.createdAt,
+                img: require('../../../resources/img/content/sample1.png'), // 백엔드 - 썸네일 기능 추가 후 수정
+                isFavorite: false // 백엔드 - 즐겨찾기 기능 추가 후 수정
+              }));
+            })
+            .catch(error => {console.error('자산 목록 조회 실패: ', error);})
+        },
+        loadOldProjects() {
+          findAllProjectsProc({
+            memberId: this.getMemId,
+            projectGroupId: '',
+            isMain: 'N' // 이전 프로젝트만 목록에 뜨게 함.
           })
             .then(response => {
               const projectList = response.data.result.projects;
@@ -120,9 +144,25 @@
             .catch(error => {console.error('자산 목록 조회 실패: ', error);})
         },
         goToModeling() {
-          console.log("모델링 페이지로 이동");
+          console.log('모델링 페이지로 이동');
           this.$router.push('/modeling.page');
         },
+        duplicateProject(projectId) {
+          const data = {
+            memberId : this.getMemId
+          };
+
+          duplicateProjectProc(projectId, data)
+            .then((response) => {
+              console.log('복제 성공');
+              this.loadMainProjects();
+              this.openMenuIndex = null;
+            })
+            .catch((error) => {
+              console.error('복제 실패: ', error);
+            })
+        },
+        
     },
     watch: {},
     computed: {
@@ -136,7 +176,7 @@
     created() {},
     mounted() {
       console.log("로그인한 사용자:", this.getMemId);
-      this.loadProjects();
+      this.loadMainProjects();
     },
     beforeUnmount() {},
 };
Add a comment
List