박현정 박현정 07-23
250723 박현정 피드백 목록 조회 및 확인 기능 추가
@af13acf77da05e4ce270ce25cddddf2453ee130a
 
client/resources/api/feedback.js (added)
+++ client/resources/api/feedback.js
@@ -0,0 +1,11 @@
+import apiClient from "./index";
+
+// 피드백 목록 조회 기능
+export const findAllFeedbacksProc = (data) => {
+    return apiClient.post('/feedback/findAllFeedbacks.json', data);
+}
+
+// 피드백 확인 기능
+export const checkFeedbackProc = (feedbackId, data) => {
+    return apiClient.post(`/feedback/${feedbackId}/checkFeedback.json`, data);
+}
client/views/pages/subPage/FeedBack.vue
--- client/views/pages/subPage/FeedBack.vue
+++ client/views/pages/subPage/FeedBack.vue
@@ -31,7 +31,7 @@
                         <button class="btn sm black" @click="replyTo(feedback)">회신</button>
                     </div>
                     <div class="btn-group" v-else>
-                        <button class="btn sm primary" @click="markAsRead(feedback.id)">확인됨</button>
+                        <button class="btn sm primary" @click="replyTo(feedback)">확인됨</button>
                     </div>
                 </div>
             </div>
@@ -72,35 +72,40 @@
 </template>
 
 <script>
+import { mapGetters } from 'vuex';
+import { checkFeedbackProc, findAllFeedbacksProc } from '../../../resources/api/feedback';
+import dayjs from 'dayjs';
+import relativeTime from 'dayjs/plugin/relativeTime';
+dayjs.extend(relativeTime);
 
 export default {
     data() {
         return {
             feedbackList: [
-                {
-                    id: 1,
-                    project: '프로젝트 C',
-                    message: '“크기를 두 배 증가시켜 주세요..”',
-                    time: '5분 전',
-                    user: '김철수님',
-                    status: 'unread' // 'unread' | 'read' | 'confirmed'
-                },
-                {
-                    id: 2,
-                    project: '프로젝트 B',
-                    message: '“플라스틱 재질을 다음과 같이..”',
-                    time: '30분 전',
-                    user: '이영희님',
-                    status: 'unread'
-                },
-                {
-                    id: 3,
-                    project: '프로젝트 B',
-                    message: '“좀 더 밝은 색으로 바꿔주세요..”',
-                    time: '어제',
-                    user: '김철수님',
-                    status: 'confirmed'
-                }
+                // {
+                //     id: 1,
+                //     project: '프로젝트 C',
+                //     message: '“크기를 두 배 증가시켜 주세요..”',
+                //     time: '5분 전',
+                //     user: '김철수님',
+                //     status: 'unread' // 'unread' | 'read' | 'confirmed'
+                // },
+                // {
+                //     id: 2,
+                //     project: '프로젝트 B',
+                //     message: '“플라스틱 재질을 다음과 같이..”',
+                //     time: '30분 전',
+                //     user: '이영희님',
+                //     status: 'unread'
+                // },
+                // {
+                //     id: 3,
+                //     project: '프로젝트 B',
+                //     message: '“좀 더 밝은 색으로 바꿔주세요..”',
+                //     time: '어제',
+                //     user: '김철수님',
+                //     status: 'confirmed'
+                // }
             ],
             feedbackSummary: {
                 total: 3,
@@ -157,16 +162,16 @@
         };
     },
     methods: {
-        async markAsRead(id) {
-            // 서버에 상태값 전달
-            try {
-            await axios.post(`/api/feedback/${id}/mark-read`);
-            const item = this.feedbackList.find(f => f.id === id);
-            if (item) item.status = 'read';
-            } catch (err) {
-            console.error('확인 처리 실패:', err);
-            }
-        },
+        // async markAsRead(id) {
+        //     // 서버에 상태값 전달
+        //     try {
+        //     await axios.post(`/api/feedback/${id}/checkFeedback.json`);
+        //     const item = this.feedbackList.find(f => f.id === id);
+        //     if (item) item.status = 'read';
+        //     } catch (err) {
+        //     console.error('확인 처리 실패:', err);
+        //     }
+        // },
         async submitReply() {
             if (!this.replyText.trim()) return;
             try {
@@ -186,12 +191,53 @@
             this.selectedFeedback = feedback;
             this.replyingFeedbackId = feedback.id;
         },
+        loadFeedbacks() {
+            findAllFeedbacksProc({
+                memberId: this.getMemId
+            })
+                .then(response => {
+                    const feedbackList = response.data.result;
+
+                    this.feedbackList = feedbackList.map(feedback => ({
+                        id: feedback.feedbackId,
+                        projectGroupId: feedback.projectGroupId,
+                        project: feedback.projectName,
+                        message: `"${feedback.feedbackContent}"`, // 큰따옴표로 감싸기
+                        time: dayjs(feedback.createdAt).fromNow(), //createdAt 시간 계산
+                        user: feedback.memberName + '님',
+                        chatRoomId: feedback.chatRoomId,
+                        status: feedback.isChecked === 'Y' ? 'read' : 'unread' // 'unread' | 'read' | 'confirmed'
+                    }));
+                })
+                .catch(error => {console.error('피드백 목록 조회 실패: ', error);})
+        },
+        markAsRead(feedbackId) {
+            const data = {
+                memberId : this.getMemId
+            };
+            checkFeedbackProc(feedbackId, data)
+                .then(response => {
+                    this.loadFeedbacks();
+                    console.log('피드백 확인 완료');
+                })
+                .catch(error => {
+                    console.error('피드백 확인 실패: ', error);
+                })
+        }
     },
     watch: {},
-    computed: {},
+    computed: {
+    ...mapGetters([
+      'getMemId',
+      'getMemNm',
+      'getMemLoginId'
+    ])
+    },
     components: {},
     created() {},
-    mounted() {},
+    mounted() {
+        this.loadFeedbacks();
+    },
     beforeUnmount() {},
 };
 
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -10,6 +10,7 @@
         "axios": "^1.10.0",
         "babel-loader": "8.2.5",
         "css-loader": "6.7.1",
+        "dayjs": "^1.11.13",
         "express": "4.18.1",
         "express-http-proxy": "^2.1.1",
         "file-loader": "6.2.0",
@@ -1697,6 +1698,12 @@
       "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
       "license": "MIT"
     },
+    "node_modules/dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+      "license": "MIT"
+    },
     "node_modules/debug": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
package.json
--- package.json
+++ package.json
@@ -5,6 +5,7 @@
     "axios": "^1.10.0",
     "babel-loader": "8.2.5",
     "css-loader": "6.7.1",
+    "dayjs": "^1.11.13",
     "express": "4.18.1",
     "express-http-proxy": "^2.1.1",
     "file-loader": "6.2.0",
Add a comment
List