박현정 박현정 07-30
250730 박현정 피드백 생성 기능 추가
@655dc35509355d4e29c253ddbb705ba84adbc703
client/resources/api/modeling.js
--- client/resources/api/modeling.js
+++ client/resources/api/modeling.js
@@ -27,3 +27,8 @@
     }
   });
 }
+
+// 피드백 생성 기능
+export const saveFeedbackProc = (projectGroupId, data) => {
+  return apiClient.post(`/project/${projectGroupId}/feedback/saveFeedback.json`, data);
+}
client/views/pages/subPage/Modeling.vue
--- client/views/pages/subPage/Modeling.vue
+++ client/views/pages/subPage/Modeling.vue
@@ -76,7 +76,7 @@
                     <!-- 오른쪽 툴 -->
                     <ul class="toolbar right layout gap10">
                         <li
-                            v-for="tool in subTolls.slice(-4)"
+                            v-for="tool in subTolls.slice(-5)"
                             :key="tool.id"
                             :class="{ active: activeToolId === tool.id && !activeSubToolId }"
                             style="position: relative;">
@@ -106,10 +106,22 @@
                                                 <textarea  class="form-control sm" v-model="localCommentData.comment"></textarea>
                                             </div>
                                         </div>
+                                        <div v-else-if="activeModalTool.title === '피드백'" class="mb10">
+                                            <div class="input-group mb10">
+                                                <label for="">writer</label>
+                                                <input type="text" class="form-control sm" :value="getMemNm" disabled>
+                                            </div>
+                                            <div class="input-group mb10">
+                                                <label for="">content</label>
+                                                <input type="text" class="form-control sm" v-model="feedback">
+                                            </div>
+                                        </div>
                                         <div class="btn-group layout center justify-center gap10">
                                             <button class="btn sm black" v-if="activeModalTool.title === '참여자'" @click="closeModal">닫기</button>
                                             <button class="btn sm purple" v-if="activeModalTool.title === '코멘트'" @click="saveComment">저장</button>
                                             <button class="btn sm black" v-if="activeModalTool.title === '코멘트'" @click="closeModal">취소</button>
+                                            <button class="btn sm purple" v-if="activeModalTool.title === '피드백'" @click="saveFeedback">저장</button>
+                                            <button class="btn sm black" v-if="activeModalTool.title === '피드백'" @click="closeModal">취소</button>
                                         </div>
                                     </div>
                                 </div>
@@ -168,7 +180,7 @@
 
 <script>
 import { mapGetters } from 'vuex';
-import { saveProjectProc, findProjectProc, updateProjectProc } from '../../../resources/api/modeling';
+import { saveProjectProc, findProjectProc, updateProjectProc, saveFeedbackProc } from '../../../resources/api/modeling';
 
 export default {
     data() {
@@ -336,6 +348,12 @@
                 },
                                 {
                     id: 700,
+                    icon: require('../../../resources/img/content/ico_comment_w.svg'),
+                    title: '피드백',
+                    type: 'modal'
+                },
+                                {
+                    id: 800,
                     icon: require('../../../resources/img/content/ico_close_w.svg'),
                     title: '닫기',
                 },
@@ -349,12 +367,14 @@
                 summary: '',
                 comment: ''
             },
-            localCommentData: { // 복사본
+            localCommentData: { // 주석 입력 데이터 복사본
                 summary: '',
                 comment: ''
             },
             projectId: null, // 프로젝트 수정 시 사용
+            projectGroupId: null, // 프로젝트 피드백 작성 시 사용
             isReset: null, // 이미지 초기화 시 사용
+            feedback: '', // 피드백 내용
         };
     },
     methods: {
@@ -462,8 +482,6 @@
         },
         saveComment() {
             this.commentData = {...this.localCommentData}; // 저장 시 반영
-            console.log('요약: ', this.commentData.summary);
-            console.log('주석: ', this.commentData.comment);
             this.closeModal();
         },
         loadProjectData(projectId) {
@@ -475,6 +493,7 @@
                 .then(response => {
                     const projectInfo = response.data.result;
                     this.projectId = projectId;
+                    this.projectGroupId = projectInfo.project.projectGroupId;
                     this.localCommentData.summary =  projectInfo.projectComment.summary;
                     this.localCommentData.comment =  projectInfo.projectComment.comment;
                     this.saveComment();
@@ -485,11 +504,28 @@
                         name: member.memberName,
                         isOwner: member.isOwner
                     }));
+                    
                 })
         },
         resetImage(){
             this.isReset = true;
         },
+        saveFeedback() {
+            if(this.projectGroupId == null) {
+                console.error('신규 프로젝트에는 피드백을 남길 수 없습니다.');
+                return;
+            }
+            const data = {
+                memberId : this.getMemId,
+                feedbackContent : this.feedback
+            };
+            saveFeedbackProc(this.projectGroupId, data)
+                .then(response => {
+                    console.log('피드백 저장 완료');
+                })
+                .catch(error => {console.error('피드백 저장 실패');});
+            this.closeModal();
+        }
     }, 
     watch: {},
     computed: {
Add a comment
List