Kaynağa Gözat

답변 작성 기능 완료

inkoreakim 2 yıl önce
ebeveyn
işleme
c03a07e91f

+ 2 - 0
src/main/generated/com/example/ili_web/board/domain/QBoard.java

@@ -19,6 +19,8 @@ public class QBoard extends EntityPathBase<Board> {
 
     public static final QBoard board = new QBoard("board");
 
+    public final StringPath comment = createString("comment");
+
     public final StringPath company = createString("company");
 
     public final StringPath content = createString("content");

+ 14 - 2
src/main/java/com/example/ili_web/board/controller/BoardController.java

@@ -125,7 +125,7 @@ public class BoardController {
      * @author -> 김주한
      **/
     @PatchMapping("/board/detail")
-    public ResponseEntity<?> updateBoardDetail (@RequestBody BoardReq req) {
+    public ResponseEntity<SuccessRes> updateBoardDetail (@RequestBody BoardReq req) {
         return ResponseEntity.ok(boardService.updateBoardDetail(req));
     }
 
@@ -137,7 +137,19 @@ public class BoardController {
      * @author -> 김주한
      **/
     @DeleteMapping("/board")
-    public ResponseEntity<?> deleteBoard (BoardReq req) {
+    public ResponseEntity<SuccessRes> deleteBoard (BoardReq req) {
         return ResponseEntity.ok(boardService.deleteBoard(req));
     }
+
+    /**
+     * method -> updateComment
+     * description -> 문의 답변
+     * @return -> SuccessRes
+     * date -> 2024.03.27
+     * @author -> 김주한
+     **/
+    @PutMapping("/board/comment")
+    public ResponseEntity<SuccessRes> updateComment (@RequestBody BoardReq req) {
+        return ResponseEntity.ok(boardService.updateComment(req));
+    }
 }

+ 7 - 0
src/main/java/com/example/ili_web/board/domain/Board.java

@@ -34,6 +34,8 @@ public class Board {
     @Column
     private String content;
     @Column
+    private String comment;
+    @Column
     private String type;
     @Column
     private String useYn;
@@ -55,6 +57,7 @@ public class Board {
         this.nickName = req.getNickname();
         this.email = req.getEmail();
         this.title = req.getTitle();
+        this.comment = req.getComment();
         this.content = req.getContent();
         this.type = req.getType();
         this.useYn = "Y";
@@ -67,4 +70,8 @@ public class Board {
         this.upDt = LocalDateTime.now();
     }
 
+    public void updateComment(String comment) {
+        this.comment = comment;
+        this.upDt = LocalDateTime.now();
+    }
 }

+ 1 - 0
src/main/java/com/example/ili_web/board/dto/BoardInfoReq.java

@@ -9,6 +9,7 @@ public class BoardInfoReq {
     private String title;
     private String userName;
     private String content;
+    private String comment;
     private String type;
     private String email;
     private String password;

+ 1 - 0
src/main/java/com/example/ili_web/board/dto/BoardReq.java

@@ -10,6 +10,7 @@ public class BoardReq {
     private String userName;
     private String type;
     private String content;
+    private String comment;
     private int page;
     private int offset;
     private int limit;

+ 8 - 0
src/main/java/com/example/ili_web/board/service/BoardService.java

@@ -172,9 +172,17 @@ public class BoardService {
         return new SuccessRes("200", "update success");
     }
 
+    @Transactional
     public SuccessRes deleteBoard(BoardReq req) {
         Board board = repository.findById(req.getId()).orElseThrow(() -> new EntityNotFoundException("Board Not Found"));
         repository.delete(board);
         return new SuccessRes("200", "delete success");
     }
+
+    @Transactional
+    public SuccessRes updateComment(BoardReq req) {
+        Board board = repository.findById(req.getId()).orElseThrow(() -> new EntityNotFoundException("Board Not Found"));
+        board.updateComment(req.getComment());
+        return new SuccessRes("200", "update success");
+    }
 }

+ 0 - 4
src/main/resources/static/css/backoffice.css

@@ -112,7 +112,3 @@ body {
         font-size: 3.5rem;
     }
 }
-
-.table-responsive {
-    text-align: center;
-}

+ 2 - 2
src/main/resources/static/js/admin/adminChangeInner.js

@@ -7,7 +7,7 @@ async function adminChangeInner(name) {
         target = 'notice_list_table';
     } else {
         code = 'LG';
-        target = 'admin_advice_table';
+        target = 'advice_list_table';
     }
     // html 가져오기
     await axios.get(`/html/admin/${name}.html`)
@@ -33,7 +33,7 @@ async function goToDetail(id, type) {
             target.innerHTML = res.data;
         })
     let response = await getDetail(id);
-    bindNotice(response.data);
+    bindDetail(response.data);
 }
 
 function goToInsert() {

+ 9 - 1
src/main/resources/static/js/admin/adminGetData.js

@@ -11,12 +11,20 @@ function getDetail(id) {
 
 }
 
-function bindNotice (data) {
+function bindDetail (data) {
     document.getElementById('board_id').value = data.id;
     document.getElementById('board_title').innerText = data.title;
     document.getElementById('board_info').innerText = makeInfo(data.userName, data.regDt);
     document.getElementById('board_content').innerText = data.content;
     document.getElementById('board_edit_content').innerText = data.content;
+    document.getElementById('board_comment_content').value = data.comment;
+    document.getElementById('board_comment').style.display = 'block';
+    document.getElementById('board_comment').innerText = data.comment;
+    // 답변 여부 확인
+    if (data.comment != null) {
+        document.getElementById('board_comment').style.display = 'block';
+        document.getElementById('comment_label').style.display = 'block';
+    }
 }
 
 function makeInfo (userName, regDt) {

+ 32 - 1
src/main/resources/static/js/admin/adminPublic.js

@@ -51,7 +51,7 @@ function insertBoard() {
     formData.append('type', type);
     axios.post('/api/v1/board', formData)
         .then(res=>{
-            alert('저장이 완료되었습니다.')
+            alert('저장이 완료되었습니다.');
             adminChangeInner('admin-notice');
 
         })
@@ -60,6 +60,37 @@ function insertBoard() {
         })
 }
 
+function commentBoard() {
+    const comment = document.getElementById('board_comment_content').value;
+    document.getElementById('saveBtn').style.display = 'inline-block';
+    document.getElementById('commentBtn').style.display = 'none';
+    document.getElementById('delBtn').style.display = 'none';
+    document.getElementById('board_comment_content').style.display = 'flex';
+    document.getElementById('comment_label').style.display = 'block';
+    document.getElementById('board_comment_content').focus();
+
+    if (comment.length > 1) {
+        document.getElementById('board_comment').style.display = 'none';
+    }
+
+}
+
+function saveComment() {
+    const id = document.getElementById('board_id').value;
+    const comment = document.getElementById('board_comment_content').value;
+    if (comment) {
+        axios.put('/api/v1/board/comment', {id, comment})
+            .then(res => {
+                alert('답변이 저장되었습니다.');
+                adminChangeInner('admin-advice');
+            })
+            .catch(error => {
+                console.log(error);
+            })
+    }
+
+}
+
 function nullCheck (data) {
     return !data || !data.trim();
 }

+ 4 - 1
src/main/resources/static/js/contact/advice.js

@@ -101,7 +101,10 @@ function initFile(input) {
 
 async function bindDetail(id) {
     const data = await getDetail(id);
-    console.log(data);
+    console.log(data.comment)
+    if (data.comment != null) {
+        data.content = `${data.content}\n\n\n----------답변----------\n\n\n${data.comment}`;
+    }
     document.getElementById('lg_detail_name').value = data.userName;
     document.getElementById('lg_detail_phone').value = data.phoneNum;
     document.getElementById('lg_detail_email').value = data.email;

+ 24 - 0
src/main/resources/templates/html/admin/admin-advice-detail.html

@@ -0,0 +1,24 @@
+<div class="card my-4">
+    <input type="hidden" id="board_id">
+    <div class="card-header d-flex justify-content-between align-items-center">
+        <div>
+            <span class="fw-bold" id="board_title"></span>
+            <span class="mx-2">|</span>
+            <span class="text-muted" id="board_info"></span>
+        </div>
+        <div>
+            <button type="button" class="btn btn-secondary" onclick="commentBoard()" id="commentBtn">답글</button>
+            <button type="button" class="btn btn-success" onclick="saveComment()" id="saveBtn" style="display: none">저장</button>
+            <button type="button" class="btn btn-danger" id="delBtn" onclick="deleteBoard()">삭제</button>
+        </div>
+    </div>
+    <div class="card-body">
+        <p class="card-text" id="board_content"></p>
+        <textarea class="form-control" id="board_edit_content" rows="15" style="display: none"></textarea>
+        <label for="board_comment_content" class="mt-5 fw-bold" id="comment_label" style="display: none"> - 답글란 - </label>
+        <p class="card-text fw-bold" id="board_comment" style="display: none"></p>
+        <textarea class="form-control" id="board_comment_content" rows="15" style="display: none"></textarea>
+    </div>
+</div>
+
+<button type="button" class="btn btn-dark w-10" onclick="adminChangeInner('admin-advice')">목록</button>

+ 2 - 2
src/main/resources/templates/html/admin/admin-advice.html

@@ -3,7 +3,7 @@
     <button type="button" class="btn btn-success" onclick="goToInsert()">게시글 작성</button>
 </div>
 <div class="table-responsive" id="admin_advice_table">
-    <table class="table table-striped table-sm" >
+    <table class="table table-striped table-sm">
         <thead>
         <tr>
             <th scope="col" >제목</th>
@@ -12,7 +12,7 @@
             <th scope="col">등록일</th>
         </tr>
         </thead>
-        <tbody id="notice_list_table">
+        <tbody id="advice_list_table">
 
         </tbody>
     </table>

+ 7 - 4
src/main/resources/templates/html/admin/admin-notice-detail.html

@@ -2,9 +2,9 @@
     <input type="hidden" id="board_id">
     <div class="card-header d-flex justify-content-between align-items-center">
         <div>
-            <span class="fw-bold" id="board_title">게시글 제목</span>
+            <span class="fw-bold" id="board_title"></span>
             <span class="mx-2">|</span>
-            <span class="text-muted" id="board_info">작성자명 - 2024-03-12</span>
+            <span class="text-muted" id="board_info"></span>
         </div>
         <div>
             <button type="button" class="btn btn-primary" onclick="editBoard()" id="editBtn">수정</button>
@@ -13,7 +13,10 @@
         </div>
     </div>
     <div class="card-body">
-        <p class="card-text" id="board_content">게시글 내용이 여기에 들어갑니다. 게시글에 대한 상세한 내용을 추가하세요.</p>
+        <p class="card-text" id="board_content"></p>
         <textarea class="form-control" id="board_edit_content" rows="15" style="display: none"></textarea>
     </div>
-</div>
+
+
+</div>
+<button type="button" class="btn btn-dark w-10" onclick="adminChangeInner('admin-notice')">목록</button>