Преглед на файлове

게시물 비밀번호 인증 구현 중

inkoreakim преди 2 години
родител
ревизия
3f3752bb80
променени са 25 файла, в които са добавени 364 реда и са изтрити 57 реда
  1. 59 0
      src/main/generated/com/example/ili_web/board/domain/QBoardFile.java
  2. 2 2
      src/main/java/com/example/ili_web/board/controller/BoardController.java
  3. 5 0
      src/main/java/com/example/ili_web/board/domain/Board.java
  4. 42 0
      src/main/java/com/example/ili_web/board/domain/BoardFile.java
  5. 15 0
      src/main/java/com/example/ili_web/board/dto/BoardFileDTO.java
  6. 9 0
      src/main/java/com/example/ili_web/board/repository/BoardCustomRepository.java
  7. 7 0
      src/main/java/com/example/ili_web/board/repository/BoardFileRepository.java
  8. 2 0
      src/main/java/com/example/ili_web/board/repository/BoardRepository.java
  9. 2 0
      src/main/java/com/example/ili_web/board/repository/BoardRepositoryDsl.java
  10. 21 0
      src/main/java/com/example/ili_web/board/repository/BoardRepositoryImpl.java
  11. 28 6
      src/main/java/com/example/ili_web/board/service/BoardService.java
  12. 2 2
      src/main/resources/application.properties
  13. 35 5
      src/main/resources/static/js/business-sector/bizChangeInner.js
  14. 18 0
      src/main/resources/static/js/contact/advice.js
  15. 25 8
      src/main/resources/static/js/contact/auth-phone.js
  16. 4 4
      src/main/resources/static/js/contact/getList.js
  17. 5 5
      src/main/resources/static/js/contact/makeHtml.js
  18. 37 0
      src/main/resources/static/js/contact/modalControl.js
  19. 0 10
      src/main/resources/static/js/contact/openModal.js
  20. 2 2
      src/main/resources/templates/html/contact-inner/estimate.html
  21. 4 4
      src/main/resources/templates/html/contact-inner/logi-advice.html
  22. 1 1
      src/main/resources/templates/html/contact-inner/notice.html
  23. 6 5
      src/main/resources/templates/html/contact-us.html
  24. 3 3
      src/main/resources/templates/html/modal/lg-advice-modal.html
  25. 30 0
      src/main/resources/templates/html/modal/lg-auth-modal.html

+ 59 - 0
src/main/generated/com/example/ili_web/board/domain/QBoardFile.java

@@ -0,0 +1,59 @@
+package com.example.ili_web.board.domain;
+
+import static com.querydsl.core.types.PathMetadataFactory.*;
+
+import com.querydsl.core.types.dsl.*;
+
+import com.querydsl.core.types.PathMetadata;
+import javax.annotation.processing.Generated;
+import com.querydsl.core.types.Path;
+import com.querydsl.core.types.dsl.PathInits;
+
+
+/**
+ * QBoardFile is a Querydsl query type for BoardFile
+ */
+@Generated("com.querydsl.codegen.DefaultEntitySerializer")
+public class QBoardFile extends EntityPathBase<BoardFile> {
+
+    private static final long serialVersionUID = -1272698652L;
+
+    private static final PathInits INITS = PathInits.DIRECT2;
+
+    public static final QBoardFile boardFile = new QBoardFile("boardFile");
+
+    public final QBoard board;
+
+    public final StringPath filePath = createString("filePath");
+
+    public final NumberPath<Long> id = createNumber("id", Long.class);
+
+    public final DateTimePath<java.time.LocalDateTime> regDt = createDateTime("regDt", java.time.LocalDateTime.class);
+
+    public final DateTimePath<java.time.LocalDateTime> upDt = createDateTime("upDt", java.time.LocalDateTime.class);
+
+    public final StringPath useYn = createString("useYn");
+
+    public QBoardFile(String variable) {
+        this(BoardFile.class, forVariable(variable), INITS);
+    }
+
+    public QBoardFile(Path<? extends BoardFile> path) {
+        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
+    }
+
+    public QBoardFile(PathMetadata metadata) {
+        this(metadata, PathInits.getFor(metadata, INITS));
+    }
+
+    public QBoardFile(PathMetadata metadata, PathInits inits) {
+        this(BoardFile.class, metadata, inits);
+    }
+
+    public QBoardFile(Class<? extends BoardFile> type, PathMetadata metadata, PathInits inits) {
+        super(type, metadata, inits);
+        this.board = inits.isInitialized("board") ? new QBoard(forProperty("board")) : null;
+    }
+
+}
+

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

@@ -64,9 +64,9 @@ public class BoardController {
 
     /**
      method -> checkNickName
-     description -> 닉네임 중복확인
+     description -> 게시물 추가
      @author -> 김주한
-     @return -> CheckDupleRes
+     @return -> insertBoard
      date -> 2024.03.14
      **/
     @PostMapping("/board/add")

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

@@ -6,6 +6,7 @@ import jakarta.persistence.*;
 import lombok.*;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Getter
 @Entity
@@ -39,6 +40,10 @@ public class Board {
     @Column
     private LocalDateTime upDt;
 
+    /*@OneToMany(mappedBy = "BOARD", cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<BoardFile> files;*/
+
+
     @Builder
     public Board(BoardInfoReq req) {
         this.userName = req.getUserName();

+ 42 - 0
src/main/java/com/example/ili_web/board/domain/BoardFile.java

@@ -0,0 +1,42 @@
+package com.example.ili_web.board.domain;
+
+import com.example.ili_web.board.dto.BoardFileDTO;
+import jakarta.persistence.*;
+import lombok.AccessLevel;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Getter
+@Entity
+@NoArgsConstructor( access = AccessLevel.PROTECTED)
+@Table(name="BOARD_FILE")
+public class BoardFile {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name="board_id")
+    private Board board;
+    @Column
+    private String filePath;
+    @Column
+    private String useYn;
+    @Column
+    private LocalDateTime regDt;
+    @Column
+    private LocalDateTime upDt;
+
+    @Builder
+
+    public BoardFile(BoardFileDTO dto) {
+        this.board = dto.getBoardId();
+        this.filePath = dto.getFilePath();
+        this.useYn = "Y";
+        this.regDt = LocalDateTime.now();
+        this.upDt = LocalDateTime.now();
+    }
+}

+ 15 - 0
src/main/java/com/example/ili_web/board/dto/BoardFileDTO.java

@@ -0,0 +1,15 @@
+package com.example.ili_web.board.dto;
+
+import com.example.ili_web.board.domain.Board;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class BoardFileDTO {
+    private Board boardId;
+    private String filePath;
+    private String useYn;
+    private LocalDateTime regDt;
+    private LocalDateTime upDt;
+}

+ 9 - 0
src/main/java/com/example/ili_web/board/repository/BoardCustomRepository.java

@@ -0,0 +1,9 @@
+package com.example.ili_web.board.repository;
+
+import com.example.ili_web.board.dto.BoardFileDTO;
+
+import java.util.List;
+
+public interface BoardCustomRepository {
+    void boardFileInsert(List<BoardFileDTO> list);
+}

+ 7 - 0
src/main/java/com/example/ili_web/board/repository/BoardFileRepository.java

@@ -0,0 +1,7 @@
+package com.example.ili_web.board.repository;
+
+import com.example.ili_web.board.domain.BoardFile;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface BoardFileRepository extends JpaRepository<BoardFile, Long> {
+}

+ 2 - 0
src/main/java/com/example/ili_web/board/repository/BoardRepository.java

@@ -2,7 +2,9 @@ package com.example.ili_web.board.repository;
 
 import com.example.ili_web.board.domain.Board;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
+@Repository
 public interface BoardRepository extends JpaRepository<Board, Long> {
     long countBoardsByNickName(String nick_name);
 }

+ 2 - 0
src/main/java/com/example/ili_web/board/repository/BoardRepositoryDsl.java

@@ -2,6 +2,7 @@ package com.example.ili_web.board.repository;
 
 import com.example.ili_web.board.domain.Board;
 import com.example.ili_web.board.domain.QBoard;
+import com.example.ili_web.board.domain.QBoardFile;
 import com.example.ili_web.board.dto.BoardList;
 import com.example.ili_web.board.dto.BoardReq;
 import com.example.ili_web.board.dto.BoardRes;
@@ -51,4 +52,5 @@ public class BoardRepositoryDsl {
         return type.equals("NT") ? b.type.in("NT", "GD") : b.type.eq(type);
     }
 
+
 }

+ 21 - 0
src/main/java/com/example/ili_web/board/repository/BoardRepositoryImpl.java

@@ -0,0 +1,21 @@
+package com.example.ili_web.board.repository;
+
+import com.example.ili_web.board.dto.BoardFileDTO;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Repository
+public class BoardRepositoryImpl implements BoardCustomRepository{
+    @PersistenceContext
+    private EntityManager em;
+
+    @Transactional
+    @Override
+    public void boardFileInsert(List<BoardFileDTO> list) {
+        String sql = "INSERT INTO board_file (board_id, file_path, use_yn, reg_dt, up_dt) VALUES (?, ?, ?, ?, ?)";
+    }
+}

+ 28 - 6
src/main/java/com/example/ili_web/board/service/BoardService.java

@@ -1,7 +1,9 @@
 package com.example.ili_web.board.service;
 
 import com.example.ili_web.board.domain.Board;
+import com.example.ili_web.board.domain.BoardFile;
 import com.example.ili_web.board.dto.*;
+import com.example.ili_web.board.repository.BoardFileRepository;
 import com.example.ili_web.board.repository.BoardRepository;
 import com.example.ili_web.board.repository.BoardRepositoryDsl;
 import com.example.ili_web.main.response.CheckDupleRes;
@@ -22,6 +24,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.List;
 
 import static java.net.http.HttpClient.*;
@@ -31,6 +34,7 @@ import static java.net.http.HttpClient.*;
 @Slf4j
 public class BoardService {
     private final BoardRepository repository;
+    private final BoardFileRepository fileRepository;
     private final BoardRepositoryDsl boardDsl;
     @Value("${multipart.file.storage.win}")
     private String fileStorageWindow;
@@ -50,12 +54,7 @@ public class BoardService {
         int pageSize = 10;
         req.setOffset((currentPage - 1) * pageSize);
         req.setLimit(pageSize);
-        if (req.getType().equals("NT")) {
-            return boardDsl.boardList(req);
-        } else {
-            return null;
-        }
-
+        return boardDsl.boardList(req);
     }
 
     public SuccessRes sendSms(SendSmsReq req) {
@@ -99,13 +98,36 @@ public class BoardService {
 
     @Transactional
     public void insertBoard(BoardInfoReq req, List<MultipartFile> file) throws IOException {
+        // BOARD 테이블 저장
         Board board = new Board(req);
         repository.save(board);
+
+        List<BoardFileDTO> fileList = new ArrayList<>();
+        for (int i = 0; i < file.size(); i++) {
+            BoardFileDTO dto = new BoardFileDTO();
+            dto.setFilePath("/"+req.getType()+"/Board" + board.getId()+"/"+file.get(i).getOriginalFilename());
+            dto.setBoardId(board);
+            fileList.add(dto);
+        }
+        insertFile(fileList);
+
         String osPath = osProperty();
         if (!file.isEmpty()) {
             String filePath = osPath + "/" + req.getType() + "/Board" + board.getId()+"/";
             fileUpload(filePath, file);
         }
+
+    }
+
+    @Transactional
+    public void insertFile(List<BoardFileDTO> fileList) {
+        List<BoardFile> fList = new ArrayList<>();
+        for (BoardFileDTO dto : fileList) {
+            BoardFile file = new BoardFile(dto);
+            fList.add(file);
+        }
+        log.info(fList.get(0).getFilePath());
+        fileRepository.saveAll(fList);
     }
 
     public String osProperty() {

+ 2 - 2
src/main/resources/application.properties

@@ -1,9 +1,9 @@
 #spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
 logging.level.org.springframework.web=INFO
 #local
-spring.datasource.url=jdbc:mysql://103.55.191.37:3306/iliweb_test
+spring.datasource.url=jdbc:mysql://103.55.191.37:3306/iliweb_test?rewriteBatchedStatements=true&profileSQL=true&logger=Slf4JLogger&maxQuerySizeToLog=999999
 #server
-#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/iliweb
+#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/iliweb_test?rewriteBatchedStatements=true&profileSQL=true&logger=Slf4JLogger&maxQuerySizeToLog=999999
 spring.datasource.username=logisticsbiz
 spring.datasource.password=#il2020)(*
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

+ 35 - 5
src/main/resources/static/js/business-sector/bizChangeInner.js

@@ -6,13 +6,43 @@ function changeInner (name) {
 }
 
 async function changeInnerAjax(name) {
-    const element = name !== 'logi-advice' ? document.getElementById(`${name}`) : document.getElementById('logi_advice')
-    const anotherElement = document.getElementsByClassName('container marketing');
-    for (let div of anotherElement) div.style.display = 'none';
-    element.style.display='block';
+    let code = findCode(name);
+    const element = document.getElementById('notice')
+    // html 가져오기
     await axios.get(`/html/contact-inner/${name}.html`)
-        .then((res)=> {
+        .then(async (res) => {
             //element.insertAdjacentHTML('afterBegin', res.request.responseText);
             element.innerHTML = res.data;
+            const list = await getList(code, 1);
+            const target = findTarget(name);
+            makeTable(list.data.dataList, target, code);
+            pagenation(list.data, code);
+            clearModal();
         })
+}
+
+function findCode (name) {
+    let result = '';
+    switch (name) {
+        case 'notice' : result = 'NT'
+            break;
+        case 'estimate' : result = 'EM'
+            break;
+        case 'logi-advice' : result = 'LG'
+            break;
+    }
+    return result;
+}
+
+function findTarget (name) {
+    let result = '';
+    switch (name) {
+        case 'notice' : result = document.getElementById('notice_table').querySelector('tbody');
+            break;
+        case 'estimate' : result = document.getElementById('esti_table').querySelector('tbody');
+            break;
+        case 'logi-advice' : result = document.getElementById('la_table').querySelector('tbody');
+            break;
+    }
+    return result;
 }

+ 18 - 0
src/main/resources/static/js/contact/advice.js

@@ -80,6 +80,7 @@ function clearModal() {
     timer.innerHTML = '';
 }
 
+/*
 document.getElementById('lg_file').addEventListener('change', (event)=>{
     const files = event.target.files;
     let html = '';
@@ -95,3 +96,20 @@ document.getElementById('lg_file').addEventListener('change', (event)=>{
     li.appendChild(textNode);
     ul.appendChild(li);
 })
+*/
+
+function initFile (input) {
+    const files = input.files;
+    let html = '';
+    if (fileArray.length > 5) {
+        alert('파일은 5개까지 업로드 가능합니다.')
+    } else {
+        fileArray.push(files);
+    }
+    const ul = document.getElementById('lg_file_list');
+    const textNode = document.createTextNode(files[0].name);
+    const li = document.createElement('li');
+    li.setAttribute('class', 'list-group-item')
+    li.appendChild(textNode);
+    ul.appendChild(li);
+}

+ 25 - 8
src/main/resources/static/js/contact/auth-phone.js

@@ -1,8 +1,8 @@
 let intervalCount;
 
 // 인증번호 전송
-async function beforeAuth() {
-    const phoneNum = document.getElementById('check_phone').value
+async function beforeAuth(tag) {
+    const phoneNum = document.getElementById(`${tag}`).value
     if (phoneNum.length === 0) {
         alert('휴대폰 번호를 입력해 주세요.');
         return false;
@@ -12,8 +12,7 @@ async function beforeAuth() {
     // 문자전송 api 호출
     await axios.get('/api/v1/send/sms', {
         params: {
-            randomCode,
-            phoneNum
+            randomCode, phoneNum
         }
     })
     setCookie('authNum', randomCode, 3);
@@ -23,7 +22,7 @@ async function beforeAuth() {
 }
 
 // 인증버튼 클릭
-function afterAuth() {
+function afterAuth(tag) {
     const phoneNumInput = document.getElementById('check_phone');
     const authNumInput = document.getElementById('check_apply_num');
     const phoneBtn = document.getElementById('button_phone');
@@ -54,9 +53,23 @@ function saveAuth() {
     const name = document.getElementById('check_name').value;
     const email = document.getElementById('check_email').value;
     const phone = document.getElementById('check_phone').value;
-    if (name.length <= 0) {alert('이름을 입렵하세요.'); return false}
-    if (email.length <= 0) {alert('이메일을 입렵하세요.'); return false}
-    if (phone.length <= 0) {alert('휴대폰인증을 진행하세요.'); return false}
+    const authBtn = document.getElementById('button_auth').disabled;
+    if (name.length <= 0) {
+        alert('이름을 입렵하세요.');
+        return false
+    }
+    if (email.length <= 0) {
+        alert('이메일을 입렵하세요.');
+        return false
+    }
+    if (phone.length <= 0) {
+        alert('휴대폰번호를 입력하세요.');
+        return false
+    }
+    if (!authBtn) {
+        alert('휴대폰인증을 진행하세요.');
+        return false
+    }
     document.getElementById('lg_name').value = name;
     document.getElementById('lg_email').value = email;
     document.getElementById('lg_phone').value = phone;
@@ -83,3 +96,7 @@ function countDown() {
     }, 1000);
 }
 
+function showPhoneAuth() {
+    document.getElementById('auth_phone').style.display = 'flex';
+    document.getElementById('auth_num').style.display = 'flex';
+}

+ 4 - 4
src/main/resources/static/js/contact/getList.js

@@ -13,10 +13,10 @@ function goToDetail (title, userName, regDt, content) {
     document.getElementById('nt_content').innerText = content;
 }
 
+function goToAdvice () {
+
+}
+
 document.addEventListener('DOMContentLoaded', async function () {
-    //getList('NT', 1);
     await changeInnerAjax('notice');
-    const res = await getList('NT', 1)
-    makeTable(res.data.dataList);
-    pagenation(res.data);
 });

+ 5 - 5
src/main/resources/static/js/contact/makeHtml.js

@@ -1,18 +1,18 @@
-function makeTable(list) {
-    const target = document.getElementById('notice_table').querySelector('tbody');
+function makeTable(list, target, code) {
     target.innerHTML = '';
     let html = '';
 
     for (let data of list) {
         html += '<tr>';
         html += `<td>${data.regDt}</td>`
-        html += `<td><a href="javascript:void(0);" onclick="goToDetail('${data.title}', '${data.userName}', '${data.regDt}', '${data.content}',)">${data.title}</a></td>`
+        html += code !== 'LG' ? `<td><a href="javascript:void(0);" onclick="goToDetail('${data.title}', '${data.userName}', '${data.regDt}', '${data.content}')">${data.title}</a></td>`
+            : `<td><a href="javascript:void(0);" onclick="modalControl('auth_modal')">${data.title}</a></td>`
         html += `<td>${data.userName}</td>`
         html += '</tr>';
     }
     target.innerHTML = html;
     const firstRowLink = target.querySelector('tr:first-of-type td:nth-of-type(2) a');
-    firstRowLink.click();
+    code !== 'LG' ? firstRowLink.click() : null;
 }
 
 function pagenation (data, type) {
@@ -37,5 +37,5 @@ function pagenation (data, type) {
 
     paginationHtml += '</ul>';
 
-    document.getElementById('pageTag').innerHTML = paginationHtml;
+    document.getElementById('page_tag').innerHTML = paginationHtml;
 }

+ 37 - 0
src/main/resources/static/js/contact/modalControl.js

@@ -0,0 +1,37 @@
+function modalControl(tag) {
+    const modal = document.querySelector(`#${tag}`);
+    modal.style.display = 'flex'
+}
+
+function closeModal(tag) {
+    const modal = document.querySelector(`#${tag}`);
+    modal.style.display = 'none'
+    document.getElementById('auth_phone').style.display = 'none';
+    document.getElementById('auth_num').style.display = 'none';
+    clearModal();
+}
+
+function clearModal() {
+    const modalBody = document.querySelector('.modal_body');
+
+    if (modalBody) {
+        // 모든 input 필드를 찾아 값을 초기화하고 disabled 상태를 해제함
+        const inputs = modalBody.querySelectorAll('input');
+        inputs.forEach(input => {
+            input.value = ''; // 값 초기화
+            input.disabled = false; // disabled 해제
+        });
+
+        // 모든 button을 찾아 disabled 상태를 해제함
+        const buttons = modalBody.querySelectorAll('button');
+        buttons.forEach(button => {
+            button.disabled = false; // disabled 해제
+        });
+
+        // 모든 span 태그를 찾아 텍스트 내용을 초기화함
+        const ps = modalBody.querySelectorAll('span');
+        ps.forEach(p => {
+            p.textContent = ''; // 텍스트 내용 초기화
+        });
+    }
+}

+ 0 - 10
src/main/resources/static/js/contact/openModal.js

@@ -1,10 +0,0 @@
-function openModal (tag) {
-    const modal = document.querySelector('.modal');
-    modal.style.display = 'flex'
-}
-
-function closeModal () {
-    const modal = document.querySelector('.modal');
-    modal.style.display = 'none'
-}
-

+ 2 - 2
src/main/resources/templates/html/contact-inner/estimate.html

@@ -12,7 +12,7 @@
     <!-- 왼쪽 영역: 문의 목록 표시 -->
     <div class="col-md-6">
         <h3 class="text-center">물류견적목록</h3>
-        <table class="table table-striped">
+        <table class="table table-striped" id="esti_table">
             <thead>
             <tr>
                 <th>일시</th>
@@ -50,7 +50,7 @@
             <!-- 추가적인 문의 목록 행들을 여기에 추가 -->
             </tbody>
         </table>
-        <nav aria-label="Page navigation">
+        <nav aria-label="Page navigation" id="page_tag">
             <ul class="pagination justify-content-center">
                 <li class="page-item disabled">
                     <a aria-disabled="true" class="page-link" href="#" tabindex="-1">Previous</a>

+ 4 - 4
src/main/resources/templates/html/contact-inner/logi-advice.html

@@ -13,7 +13,7 @@
     <!-- 왼쪽 영역: 문의 목록 표시 -->
     <div class="col-md-6">
         <h3 class="text-center">문의 목록</h3>
-        <table class="table table-striped">
+        <table class="table table-striped" id="la_table">
             <thead>
             <tr>
                 <th>일시</th>
@@ -25,7 +25,7 @@
             <!-- 추가적인 문의 목록 행들을 여기에 추가 -->
             </tbody>
         </table>
-        <nav aria-label="Page navigation">
+        <nav aria-label="Page navigation" id="page_tag">
 
         </nav>
     </div>
@@ -46,7 +46,7 @@
                             <div class="input-group mb-3 form-floating">
                                 <input class="form-control" id="lg_phone" required type="tel" name="phoneNum" disabled>
                                 <label class="form-label" for="lg_phone">핸드폰번호</label>
-                                <button class="btn btn-outline-secondary" id="button-phone" type="button" onclick="openModal()">인증 확인</button>
+                                <button class="btn btn-outline-secondary" id="button-phone" type="button" onclick="modalControl('advice_modal')">인증 확인</button>
                             </div>
                         </div>
                         <div class="col-md-6 form-floating">
@@ -75,7 +75,7 @@
                         </div>
                         <div class="col-md-6">
                             <label class="btn btn-primary" for="lg_file">파일업로드</label>
-                            <input class="form-control" id="lg_file" type="file" style="display:none;" multiple>
+                            <input class="form-control" id="lg_file" type="file" style="display:none;" onchange="initFile(this)" multiple>
                         </div>
                         <div class="col-md-6">
                             <p>파일목록</p>

+ 1 - 1
src/main/resources/templates/html/contact-inner/notice.html

@@ -24,7 +24,7 @@
 
             </tbody>
         </table>
-        <nav aria-label="Page navigation" id="pageTag">
+        <nav aria-label="Page navigation" id="page_tag">
            <!-- <ul class="pagination justify-content-center">
                 <li class="page-item disabled">
                     <a aria-disabled="true" class="page-link" href="#" tabindex="-1">Previous</a>

+ 6 - 5
src/main/resources/templates/html/contact-us.html

@@ -20,6 +20,7 @@
 </head>
 <body>
 <div th:include="html/modal/lg-advice-modal"></div>
+<div th:include="html/modal/lg-auth-modal"></div>
 <header th:include="html/common/header">
 </header>
 <main>
@@ -38,7 +39,7 @@
                         <p><a class="btn" href="javascript:void(0);" th:onclick="changeInnerAjax('notice')">안내/공지</a>
                             <a class="btn" href="javascript:void(0);" th:onclick="changeInnerAjax('estimate')">물류견적</a>
                             <a class="btn" href="javascript:void(0);" th:onclick="changeInnerAjax('logi-advice')">물류자문</a>
-                            <a class="btn" href="javascript:void(0);" th:onclick="changeInner('history')">무역자문</a>
+                            <a class="btn" href="javascript:void(0);">무역자문</a>
                         </p>
                     </div>
                 </div>
@@ -50,12 +51,12 @@
     <!--<div class="container marketing" id="notice" th:include="html/contact-inner/notice">-->
     <div class="container marketing" id="notice">
     </div>
-   <!-- <div class="container marketing" id="estimate" th:include="html/contact-inner/estimate" style="display: none">-->
+    <!--<div class="container marketing" id="estimate" th:include="html/contact-inner/estimate" style="display: none">
     <div class="container marketing" id="estimate" style="display: none">
     </div>
-    <!--<div class="container marketing" id="logi_advice" th:include="html/contact-inner/logi-advice" style="display: none">-->
+    <div class="container marketing" id="logi_advice" th:include="html/contact-inner/logi-advice" style="display: none">
     <div class="container marketing" id="logi_advice" style="display: none">
-    </div>
+    </div>-->
     <hr class="featurette-divider">
 </main>
 
@@ -69,7 +70,7 @@
 <script src="/js/contact/makeHtml.js"></script>
 <script src="/js/contact/advice.js"></script>
 <script src="/js/contact/adviceValidation.js"></script>
-<script src="/js/contact/openModal.js"></script>
+<script src="/js/contact/modalControl.js"></script>
 <script src="/js/cookie/cookie-control.js"></script>
 <script src="/js/contact/auth-phone.js"></script>
 </html>

+ 3 - 3
src/main/resources/templates/html/modal/lg-advice-modal.html

@@ -1,4 +1,4 @@
-<div class="modal">
+<div class="modal" id="advice_modal">
     <div class="modal_body">
         <h2>개인정보 인증</h2>
         <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="closeModal()"></button>
@@ -14,12 +14,12 @@
             <div class="form-floating mb-3 input-group">
                 <input type="tel" class="form-control" id="check_phone" placeholder="xxx-xxxx-xxxx">
                 <label for="check_phone">휴대폰번호</label>
-                <button class="btn btn-outline-secondary" id="button_phone" type="button" onclick="beforeAuth()">번호 발급</button>
+                <button class="btn btn-outline-secondary" id="button_phone" type="button" onclick="beforeAuth('check_phone')">번호 발급</button>
             </div>
             <div class="form-floating mb-3 input-group">
                 <input type="email" class="form-control" id="check_apply_num" placeholder="0000000">
                 <label for="check_apply_num">인증번호</label>
-                <button class="btn btn-outline-secondary" id="button_auth" type="button" onclick="afterAuth()">인증 확인</button>
+                <button class="btn btn-outline-secondary" id="button_auth" type="button" onclick="afterAuth('check_apply_num')">인증 확인</button>
             </div>
             <p id="timer" style="display: none"></p>
             <div class="form-floating mb-3">

+ 30 - 0
src/main/resources/templates/html/modal/lg-auth-modal.html

@@ -0,0 +1,30 @@
+<div class="modal" id="auth_modal">
+    <div class="modal_body">
+        <h2>비밀번호 입력</h2>
+        <button aria-label="Close" class="btn-close" data-bs-dismiss="modal" onclick="closeModal('auth_modal')"
+                type="button"></button>
+        <form id="check_info">
+            <div class="form-floating mb-3">
+                <input class="form-control" id="auth_password" placeholder="홍깅동" type="password">
+                <label for="auth_password">비밀번호</label>
+            </div>
+            <div class="form-floating mb-3">
+                <a href="javascript:void(0);" onclick="showPhoneAuth()">비밀번호를 잊으셨나요?</a>
+            </div>
+            <div class="form-floating mb-3 input-group" id="auth_phone" style="display: none">
+                <input type="tel" class="form-control" id="auth_check_phone" placeholder="xxx-xxxx-xxxx">
+                <label for="auth_check_phone">휴대폰번호</label>
+                <button class="btn btn-outline-secondary" id="button_phone" type="button" onclick="beforeAuth('auth_check_phone')">번호 발급</button>
+            </div>
+            <div class="form-floating mb-3 input-group" id="auth_num" style="display: none">
+                <input type="email" class="form-control" id="auth_apply_num" placeholder="0000000">
+                <label for="auth_apply_num">인증번호</label>
+                <button class="btn btn-outline-secondary" id="button_auth" type="button" onclick="afterAuth('auth_apply_num')">인증 확인</button>
+            </div>
+            <p id="timer" style="display: none"></p>
+            <div class="form-floating mb-3">
+                <button class="btn btn-success" onclick="saveAuth()" type="button">제출</button>
+            </div>
+        </form>
+    </div>
+</div>