jichoi / calendar star
박정하 박정하 3 days ago
250808 박정하 출장(품의/복명) 재신청 로직 수정
@7562cbdde7825bacd2835b0c33567c0a4419b369
client/resources/api/bsrp.js
--- client/resources/api/bsrp.js
+++ client/resources/api/bsrp.js
@@ -28,4 +28,9 @@
 // 출장 정보, 출장 품의 삭제
 export const deleteBsrpProc = data => {
   return apiClient.delete(`/bsrp/${data}/deleteBsrp.json`);
+}
+
+// 출장 정보, 출장 품의 재신청
+export const reapplyBsrpProc = (id, data) => {
+  return apiClient.post(`/bsrp/${id}/reapplyBsrp.json`, data);
 }
(파일 끝에 줄바꿈 문자 없음)
client/resources/api/bsrpRport.js
--- client/resources/api/bsrpRport.js
+++ client/resources/api/bsrpRport.js
@@ -23,4 +23,9 @@
 // 출장 복명 삭제
 export const deleteBsrpRportProc = data => {
   return apiClient.delete(`/bsrpRport/${data}/deleteBsrpRport.json`);
+}
+
+// 출장 복명 재신청
+export const reapplyBsrpRport = data => {
+  return fileClient.post('/bsrpRport/reapplyBsrpRport.file', data);
 }
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/Manager/attendance/BsrpInsert.vue
--- client/views/pages/Manager/attendance/BsrpInsert.vue
+++ client/views/pages/Manager/attendance/BsrpInsert.vue
@@ -126,7 +126,8 @@
         <button type="button" class="btn sm btn-red" @click="handleLoadLastApprovers">이전 승인자 불러오기</button>
         <button type="button" class="btn sm primary" v-if="$isEmpty(pageId)" @click="handleSave">신청</button>
         <template v-else>
-          <button type="button" class="btn sm primary" @click="handleUpdate"> {{ submitButtonText }} </button>
+          <button type="button" class="btn sm primary" v-if="isReapplyMode" @click="handleReapply">재신청</button>
+          <button type="button" class="btn sm primary" v-else @click="handleUpdate">수정</button>
           <button type="button" class="btn sm secondary" @click="handleCancel">취소</button>
         </template>
       </div>
@@ -141,7 +142,7 @@
 import SanctnList from '../../../component/Sanctn/SanctnFormList.vue';
 import EditorComponent from '../../../component/editor/EditorComponent.vue';
 // API
-import { saveBsrpProc, findBsrpProc, updateBsrpProc, findLastBsrpCnsulProc } from '../../../../resources/api/bsrp';
+import { saveBsrpProc, findBsrpProc, updateBsrpProc, findLastBsrpCnsulProc, reapplyBsrpProc } from '../../../../resources/api/bsrp';
 
 export default {
   name: 'BsrpInsert',
@@ -209,11 +210,6 @@
     isReapplyMode() {
       return this.pageMode === 'reapply';
     },
-
-    // 재신청 여부에 따른 등록 버튼 변경
-    submitButtonText() {
-      return this.isReapplyMode ? '재신청' : '수정';
-    }
   },
 
   async created() {
@@ -291,8 +287,25 @@
         let data = this.buildSendData("update");
 
         const response = await updateBsrpProc(this.pageId, data);
-        const message = this.isReapplyMode ? "재신청되었습니다." : "수정되었습니다.";
-        alert(message);
+        alert("수정되었습니다.");
+
+        this.handleNavigation('view', response.data.data.pageId);
+      } catch (error) {
+        this.handleError(error);
+      }
+    },
+
+    // 재신청 핸들러
+    async handleReapply() {
+      try {
+        if (!this.validateForm()) {
+          return;
+        }
+
+        let data = this.buildSendData("insert");
+
+        const response = await reapplyBsrpProc(this.pageId, data);
+        alert("재신청되었습니다.");
 
         this.handleNavigation('view', response.data.data.pageId);
       } catch (error) {
client/views/pages/Manager/attendance/BsrpRportInsert.vue
--- client/views/pages/Manager/attendance/BsrpRportInsert.vue
+++ client/views/pages/Manager/attendance/BsrpRportInsert.vue
@@ -100,9 +100,10 @@
       </div>
       <div class="buttons">
         <button type="button" class="btn sm btn-red" @click="handleLoadLastApprovers">이전 승인자 불러오기</button>
-        <button type="button" class="btn sm primary" v-if="!this.hasBsrpRport" @click="handleSave">신청</button>
+        <button type="button" class="btn sm primary" v-if="!hasBsrpRport" @click="handleSave">신청</button>
         <template v-else>
-          <button type="button" class="btn sm primary" @click="handleUpdate"> {{ submitButtonText }} </button>
+          <button type="button" class="btn sm primary" v-if="isReapplyMode" @click="handleReapply">재신청</button>
+          <button type="button" class="btn sm primary" v-else @click="handleUpdate">수정</button>
           <button type="button" class="btn sm secondary" @click="handleCancel">취소</button>
         </template>
       </div>
@@ -116,7 +117,7 @@
 import EditorComponent from '../../../component/editor/EditorComponent.vue';
 // API
 import { findBsrpProc } from '../../../../resources/api/bsrp';
-import { findBsrpRportProc, saveBsrpRportProc, updateBsrpRport, findLastBsrpRportProc } from '../../../../resources/api/bsrpRport';
+import { findBsrpRportProc, saveBsrpRportProc, updateBsrpRport, findLastBsrpRportProc, reapplyBsrpRport } from '../../../../resources/api/bsrpRport';
 
 export default {
   name: 'BsrpRportInsert',
@@ -159,11 +160,6 @@
     isReapplyMode() {
       return this.pageMode === 'reapply';
     },
-
-    // 재신청 여부에 따른 등록 버튼 변경
-    submitButtonText() {
-      return this.isReapplyMode ? '재신청' : '수정';
-    }
   },
 
   async created() {
@@ -264,7 +260,8 @@
         });
 
         await saveBsrpRportProc(formData);
-        alert('출장 복명서가 등록되었습니다.');
+        alert("등록되었습니다.");
+
         this.handleNavigation('view', this.pageId);
       } catch (error) {
         alert(error.response?.data?.message || '저장에 실패했습니다.');
@@ -296,8 +293,7 @@
         });
 
         await updateBsrpRport(formData);
-        const message = this.isReapplyMode ? "재신청되었습니다." : "수정되었습니다.";
-        alert(message);
+        alert("수정되었습니다.");
 
         this.handleNavigation('view', this.pageId);
       } catch (error) {
@@ -305,6 +301,28 @@
       }
     },
 
+    // 재신청 핸들러
+    async handleReapply() {
+      if (!this.validateForm()) return;
+
+      try {
+        const formData = this.buildFormData();
+
+        this.bsrpRport.bsrpTrvctList.forEach(item => {
+          if (item.file) {
+            formData.append('files', item.file);
+          }
+        });
+
+        await reapplyBsrpRport(formData);
+        alert("재신청되었습니다.");
+
+        this.handleNavigation('view', this.pageId);
+      } catch (error) {
+        alert(error.response?.data?.message || '저장에 실패했습니다.');
+      }
+    },
+
     // 승인자 추가 핸들러
     handleApproverAdd(user) {
       this.bsrpRport.sanctnList.push({
Add a comment
List