From 0f2dc242749c5ebbbd7adecc3e2f29fe0e05bb35 Mon Sep 17 00:00:00 2001 From: TaehunPark Date: Fri, 14 Oct 2022 10:22:10 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EC=99=B8=EC=82=AC=EC=B7=A8=EC=95=BD?= =?UTF-8?q?=EC=A7=80=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faisp/fipTarget/FipTargetController.java | 104 ++++++++- .../fipTarget/mapper/FipTargetMapper.java | 11 + .../dbnt/faisp/fipTarget/model/VulnFile.java | 85 ++++++++ .../faisp/fipTarget/model/Vulnerable.java | 97 +++++++++ .../repository/VulnFileRepository.java | 23 ++ .../fipTarget/repository/VulnRepository.java | 13 ++ .../fipTarget/service/FipTargetService.java | 94 ++++++++- .../resources/mybatisMapper/FipTarget.xml | 91 ++++++++ .../static/js/fipTarget/vulnerable.js | 198 ++++++++++++++++++ .../templates/fipTarget/vulnEditModal.html | 94 +++++++++ .../templates/fipTarget/vulnInfoModal.html | 42 ++++ .../templates/fipTarget/vulnViewModal.html | 62 ++++++ .../templates/fipTarget/vulnerableList.html | 82 ++++++++ 13 files changed, 994 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/dbnt/faisp/fipTarget/model/VulnFile.java create mode 100644 src/main/java/com/dbnt/faisp/fipTarget/model/Vulnerable.java create mode 100644 src/main/java/com/dbnt/faisp/fipTarget/repository/VulnFileRepository.java create mode 100644 src/main/java/com/dbnt/faisp/fipTarget/repository/VulnRepository.java create mode 100644 src/main/resources/static/js/fipTarget/vulnerable.js create mode 100644 src/main/resources/templates/fipTarget/vulnEditModal.html create mode 100644 src/main/resources/templates/fipTarget/vulnInfoModal.html create mode 100644 src/main/resources/templates/fipTarget/vulnViewModal.html create mode 100644 src/main/resources/templates/fipTarget/vulnerableList.html diff --git a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java index 76d73dc3..570caf8b 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/FipTargetController.java @@ -6,6 +6,8 @@ import com.dbnt.faisp.fipTarget.model.PartInfo; import com.dbnt.faisp.fipTarget.model.PartInfoFile; import com.dbnt.faisp.fipTarget.model.PartWork; import com.dbnt.faisp.fipTarget.model.PartWorkFile; +import com.dbnt.faisp.fipTarget.model.VulnFile; +import com.dbnt.faisp.fipTarget.model.Vulnerable; import com.dbnt.faisp.fipTarget.service.FipTargetService; import com.dbnt.faisp.organMgt.service.OrganConfigService; import com.dbnt.faisp.userInfo.model.UserInfo; @@ -363,8 +365,108 @@ public class FipTargetController { e.printStackTrace(); } } -//외사분실실적 끝 +//외사분실실적 끝 +//외사취약지 시작 + + @GetMapping("/vulnerableList") + public ModelAndView vulnerableList(@AuthenticationPrincipal UserInfo loginUser,Vulnerable vulnerable, HttpServletResponse response) { + ModelAndView mav = new ModelAndView("fipTarget/vulnerableList"); + + mav.addObject("vulnerableList", fipTargetService.selectVulnerableList(vulnerable)); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/vulnerableList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + mav.addObject("searchParams", vulnerable); + return mav; + } + @GetMapping("/vulnEditModal") + public ModelAndView vulnEditModal(@AuthenticationPrincipal UserInfo loginUser,Vulnerable vulnerable) { + ModelAndView mav = new ModelAndView("fipTarget/vulnEditModal"); + vulnerable.setDownOrganCdList(loginUser.getDownOrganCdList()); + mav.addObject("organList", fipTargetService.selecetVulnOrganList(vulnerable)); + mav.addObject("userOrgan", loginUser.getOgCd()); + if(vulnerable.getVulnKey() != null) { + vulnerable = fipTargetService.selectVulnInfo(vulnerable); + vulnerable.setFileList(fipTargetService.selectVulnFile(vulnerable.getVulnKey())); + mav.addObject("userId", loginUser.getUserId()); + } + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/vulnerableList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + vulnerable.setWrtNm(loginUser.getUserId()); + vulnerable.setWrtPart(loginUser.getOfcCd()); + vulnerable.setWrtUserSeq(loginUser.getUserSeq()); + vulnerable.setWrtOrgan(loginUser.getOgCd()); + mav.addObject("info", vulnerable); + return mav; + } + + @PostMapping("/saveVulnerable") + public Integer saveVulnerable (@AuthenticationPrincipal UserInfo loginUser, Vulnerable vulnerable,MultipartHttpServletRequest request, + @RequestParam(value = "fileSeq", required = false) List < Integer > deleteFileSeq){ + vulnerable.setMultipartFileList(request.getMultiFileMap().get("uploadFiles")); + vulnerable.setWrtDt(LocalDateTime.now()); + Integer result = fipTargetService.saveVulnerable(vulnerable,deleteFileSeq); + return result; + } + + @GetMapping("/vulnInfoModal") + public ModelAndView vulnInfoModal(@AuthenticationPrincipal UserInfo loginUser,Vulnerable vulnerable) { + ModelAndView mav = new ModelAndView("fipTarget/vulnInfoModal"); + vulnerable.setDownOrganCdList(loginUser.getDownOrganCdList());; + mav.addObject("vulnInfoList", fipTargetService.selectVulnInfoList(vulnerable)); + mav.addObject("organNm", fipTargetService.selectOrganName(vulnerable.getMgtOrgan())); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/vulnerableList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + + return mav; + } + + @GetMapping("/vulnViewModal") + public ModelAndView vulnViewModal(@AuthenticationPrincipal UserInfo loginUser,Vulnerable vulnerable) { + ModelAndView mav = new ModelAndView("fipTarget/vulnViewModal"); + Vulnerable vulnInfo = fipTargetService.selectVulnInfo(vulnerable); + vulnInfo.setFileList(fipTargetService.selectVulnFile(vulnInfo.getVulnKey())); + mav.addObject("vulnInfo", vulnInfo); + //메뉴권한 확인 + String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/vulnerableList").get(0).getAccessAuth(); + mav.addObject("accessAuth", accessAuth); + + return mav; + } + + @GetMapping("/vulnFileDownload") + public void vulnFileDownload(HttpServletRequest request, + HttpServletResponse response, + Integer fileSeq, + Integer vulnKey) { + VulnFile downloadFile = fipTargetService.selectVulnInfoFileDown(fileSeq, vulnKey); + + BufferedInputStream in; + BufferedOutputStream out; + try { + File file = new File(downloadFile.getFilePath(), downloadFile.getConvNm()); + + setDisposition(downloadFile.getOrigNm()+'.'+downloadFile.getFileExtn(), request, response); + in = new BufferedInputStream(new FileInputStream(file)); + out = new BufferedOutputStream(response.getOutputStream()); + FileCopyUtils.copy(in, out); + out.flush(); + if(out!=null) out.close(); + if(in!=null )in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @PostMapping("/deleteVulnerable") + @ResponseBody + public void deleteVulnerable(@RequestBody Vulnerable vulnerable) { + fipTargetService.deleteVulnerable(vulnerable); + } +//외사취약지 끝 diff --git a/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java b/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java index 532bf506..2d4223fa 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/mapper/FipTargetMapper.java @@ -3,6 +3,7 @@ package com.dbnt.faisp.fipTarget.mapper; import com.dbnt.faisp.fipTarget.model.PartInfo; import com.dbnt.faisp.fipTarget.model.PartInfoFile; import com.dbnt.faisp.fipTarget.model.PartWork; +import com.dbnt.faisp.fipTarget.model.Vulnerable; import com.dbnt.faisp.util.ParamMap; import org.apache.ibatis.annotations.Mapper; @@ -40,6 +41,16 @@ public interface FipTargetMapper { PartWork selectPartWorkInfo(PartWork partWork); + List selecetVulnOrganList(Vulnerable vulnerable); + + List selectVulnerableList(Vulnerable vulnerable); + + List selectVulnInfoList(Vulnerable vulnerable); + + String selectOrganName(String mgtOrgan); + + Vulnerable selectVulnInfo(Vulnerable vulnerable); + diff --git a/src/main/java/com/dbnt/faisp/fipTarget/model/VulnFile.java b/src/main/java/com/dbnt/faisp/fipTarget/model/VulnFile.java new file mode 100644 index 00000000..2d252662 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fipTarget/model/VulnFile.java @@ -0,0 +1,85 @@ +package com.dbnt.faisp.fipTarget.model; + +import com.dbnt.faisp.config.BaseModel; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@IdClass(VulnFile.VulnFileId.class) +@Table(name = "vuln_file") +public class VulnFile extends BaseModel implements Serializable{ + @Id + @Column(name = "file_seq") + private Integer fileSeq; + @Id + @Column(name = "vuln_key") + private Integer vulnKey; + @Column(name = "orig_nm") + private String origNm; + @Column(name = "conv_nm") + private String convNm; + @Column(name = "file_extn") + private String fileExtn; + @Column(name = "file_size") + private String fileSize; + @Column(name = "file_path") + private String filePath; + + + + + + + +@Override +public String toString() { + return "VulnFile [fileSeq=" + fileSeq + ", vulnKey=" + vulnKey + ", origNm=" + origNm + ", convNm=" + convNm + + ", fileExtn=" + fileExtn + ", fileSize=" + fileSize + ", filePath=" + filePath + "]"; +} + + +@Embeddable +@Data +@NoArgsConstructor +@AllArgsConstructor +public static class VulnFileId implements Serializable { + private Integer fileSeq; + private Integer vulnKey; +} + + + + + + + + + + + + + + + + +} diff --git a/src/main/java/com/dbnt/faisp/fipTarget/model/Vulnerable.java b/src/main/java/com/dbnt/faisp/fipTarget/model/Vulnerable.java new file mode 100644 index 00000000..035ce4fb --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fipTarget/model/Vulnerable.java @@ -0,0 +1,97 @@ +package com.dbnt.faisp.fipTarget.model; + +import com.dbnt.faisp.config.BaseModel; + + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.web.multipart.MultipartFile; + +import javax.persistence.*; + + +import java.time.LocalDateTime; +import java.util.List; + + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "board_vuln") +public class Vulnerable extends BaseModel{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "vuln_key") + private Integer vulnKey; + @Column(name = "mgt_organ") + private String mgtOrgan; + @Column(name = "vuln_type") + private String vulnType; + @Column(name = "vuln_nm") + private String vulnNm; + @Column(name = "description") + private String description; + @Column(name = "wrt_organ") + private String wrtOrgan; + @Column(name = "wrt_part") + private String wrtPart; + @Column(name = "wrt_user_seq") + private Integer wrtUserSeq; + @Column(name = "wrt_nm") + private String wrtNm; + @Column(name = "wrt_dt") + private LocalDateTime wrtDt; + + @Transient + private List multipartFileList; + + @Transient + private String organNm; + + @Transient + private List fileList; + +@Override +public String toString() { + return "Vulnerable [vulnKey=" + vulnKey + ", mgtOrgan=" + mgtOrgan + ", vulnType=" + vulnType + ", vulnNm=" + vulnNm + + ", description=" + description + ", wrtOrgan=" + wrtOrgan + ", wrtPart=" + wrtPart + ", wrtUserSeq=" + + wrtUserSeq + ", wrtNm=" + wrtNm + ", wrtDt=" + wrtDt + ", multipartFileList=" + multipartFileList + + ", organNm=" + organNm + ", fileList=" + fileList + "]"; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} diff --git a/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnFileRepository.java b/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnFileRepository.java new file mode 100644 index 00000000..7bf12820 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnFileRepository.java @@ -0,0 +1,23 @@ +package com.dbnt.faisp.fipTarget.repository; + + +import com.dbnt.faisp.fipTarget.model.VulnFile; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + + + +public interface VulnFileRepository extends JpaRepository { + + VulnFile findTopByVulnKeyOrderByFileSeqDesc(Integer vulnKey); + + List findByVulnKeyOrderByFileSeq(Integer vulnKey); + + List findByVulnKey(Integer vulnKey); + + void deleteByVulnKey(Integer vulnKey); + + +} diff --git a/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnRepository.java b/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnRepository.java new file mode 100644 index 00000000..ce1452ad --- /dev/null +++ b/src/main/java/com/dbnt/faisp/fipTarget/repository/VulnRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.faisp.fipTarget.repository; + + +import com.dbnt.faisp.fipTarget.model.Vulnerable; + +import org.springframework.data.jpa.repository.JpaRepository; + + + +public interface VulnRepository extends JpaRepository { + + +} diff --git a/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java b/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java index 292d17e2..c435d4af 100644 --- a/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java +++ b/src/main/java/com/dbnt/faisp/fipTarget/service/FipTargetService.java @@ -12,10 +12,16 @@ import com.dbnt.faisp.fipTarget.model.PartWork; import com.dbnt.faisp.fipTarget.model.PartWork.PartWorkId; import com.dbnt.faisp.fipTarget.model.PartWorkFile; import com.dbnt.faisp.fipTarget.model.PartWorkFile.PartWorkFileId; +import com.dbnt.faisp.fipTarget.model.VulnFile; +import com.dbnt.faisp.fipTarget.model.VulnFile.VulnFileId; +import com.dbnt.faisp.fipTarget.model.Vulnerable; import com.dbnt.faisp.fipTarget.repository.PartInfoFileRepository; import com.dbnt.faisp.fipTarget.repository.PartInfoRepository; import com.dbnt.faisp.fipTarget.repository.PartWorkFileRepository; import com.dbnt.faisp.fipTarget.repository.PartWorkRepository; +import com.dbnt.faisp.fipTarget.repository.VulnFileRepository; +import com.dbnt.faisp.fipTarget.repository.VulnRepository; +import com.dbnt.faisp.publicBoard.model.PublicFile; import com.dbnt.faisp.util.ParamMap; import lombok.RequiredArgsConstructor; @@ -38,6 +44,8 @@ public class FipTargetService extends BaseService { private final PartInfoFileRepository partInfoFileRepository; private final PartWorkRepository partWorkRepository; private final PartWorkFileRepository partWorkFileRepository; + private final VulnRepository vulnRepository; + private final VulnFileRepository vulnFileRepository; private final FipTargetMapper fipTargetMapper; @Transactional @@ -314,7 +322,91 @@ public class FipTargetService extends BaseService { public PartWorkFile selectPartWorkFileDown(Integer fileSeq, Integer pwSeq, Integer piSeq) { return partWorkFileRepository.findById(new PartWorkFileId(fileSeq, pwSeq,piSeq)).orElse(null); } - + + public List selecetVulnOrganList(Vulnerable vulnerable) { + return fipTargetMapper.selecetVulnOrganList(vulnerable); + } + + @Transactional + public Integer saveVulnerable(Vulnerable vulnerable, List deleteFileSeq) { + Integer vulnKey = vulnRepository.save(vulnerable).getVulnKey(); + if(deleteFileSeq!=null && deleteFileSeq.size()>0){ + deleteVulnFile(vulnerable, deleteFileSeq); + } + if(vulnerable.getMultipartFileList()!= null){ + saveVulnerableFiles(vulnKey, vulnerable.getMultipartFileList()); + } + return vulnKey; + } + + private void saveVulnerableFiles(Integer vulnKey, List multipartFileList) { + VulnFile lastFileInfo = vulnFileRepository.findTopByVulnKeyOrderByFileSeqDesc(vulnKey); + int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); + for(MultipartFile file : multipartFileList){ + String saveName = UUID.randomUUID().toString(); + String path = locationPath+File.separator+"publicFile"+File.separator; + saveFile(file, new File(path+File.separator+saveName)); + + String originalFilename = file.getOriginalFilename(); + int extnIdx = originalFilename.lastIndexOf("."); + VulnFile fileInfo = new VulnFile(); + fileInfo.setVulnKey(vulnKey); + fileInfo.setFileSeq(fileSeq++); + fileInfo.setOrigNm(originalFilename.substring(0, extnIdx)); + fileInfo.setFileExtn(originalFilename.substring(extnIdx+1)); + fileInfo.setConvNm(saveName); + fileInfo.setFileSize(calculationSize(file.getSize())); + fileInfo.setFilePath(path); + vulnFileRepository.save(fileInfo); + } + } + + private void deleteVulnFile(Vulnerable vulnerable, List deleteFileSeq) { + List VulnFileList = vulnFileRepository.findByVulnKey(vulnerable.getVulnKey()); + for(VulnFile file: VulnFileList ){ + if(deleteFileSeq.contains(file.getFileSeq())){ + deleteStoredFile(new File(file.getFilePath(), file.getConvNm())); + vulnFileRepository.delete(file); + } + } + } + + public List selectVulnerableList(Vulnerable vulnerable) { + return fipTargetMapper.selectVulnerableList(vulnerable); + } + + public List selectVulnInfoList(Vulnerable vulnerable) { + return fipTargetMapper.selectVulnInfoList(vulnerable); + } + + public String selectOrganName(String mgtOrgan) { + return fipTargetMapper.selectOrganName(mgtOrgan); + } + + public Vulnerable selectVulnInfo(Vulnerable vulnerable) { + return fipTargetMapper.selectVulnInfo(vulnerable); + } + + public List selectVulnFile(Integer vulnKey) { + return vulnFileRepository.findByVulnKeyOrderByFileSeq(vulnKey); + } + + public VulnFile selectVulnInfoFileDown(Integer fileSeq, Integer vulnKey) { + return vulnFileRepository.findById(new VulnFileId(fileSeq, vulnKey)).orElse(null); + } + + @Transactional + public void deleteVulnerable(Vulnerable vulnerable) { + //파일삭제 + List VulnFileList = vulnFileRepository.findByVulnKey(vulnerable.getVulnKey()); + if(VulnFileList != null) { + for(VulnFile file: VulnFileList){ + deleteStoredFile(new File(file.getFilePath(), file.getConvNm())); + } + } + vulnFileRepository.deleteByVulnKey(vulnerable.getVulnKey()); + vulnRepository.deleteById(vulnerable.getVulnKey()); + } diff --git a/src/main/resources/mybatisMapper/FipTarget.xml b/src/main/resources/mybatisMapper/FipTarget.xml index c4c048ea..ae8a44a1 100644 --- a/src/main/resources/mybatisMapper/FipTarget.xml +++ b/src/main/resources/mybatisMapper/FipTarget.xml @@ -437,5 +437,96 @@ and pw.pw_seq = #{pwSeq} and pw.pi_seq = #{piSeq} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/fipTarget/vulnerable.js b/src/main/resources/static/js/fipTarget/vulnerable.js new file mode 100644 index 00000000..75c23b1a --- /dev/null +++ b/src/main/resources/static/js/fipTarget/vulnerable.js @@ -0,0 +1,198 @@ +let files = []; + +$(document).ready(function(){ + $(".table_id").each(function(){ + var rows = $(".table_id:contains('"+$(this).text()+"')"); + if(rows.length > 1){ + rows.eq(0).attr("rowspan", rows.length); + rows.not(":eq(0)").remove(); + } + }) + +}); + +$(document).on('click', '#addVuln', function (){ + const vulnKey =null; + vulnEditModal(vulnKey); +}) + +function vulnEditModal(vulnKey){ + $.ajax({ + url: '/target/vulnEditModal', + type: 'GET', + data: {vulnKey:vulnKey}, + dataType:"html", + success: function(html){ + $("#vulnEditModalContent").empty().append(html); + $("#vulnEditModal").modal('show'); + setUploadDiv(); + }, + error:function(){ + + } + }); +} + +$(document).on('click', '#saveVuln', function() { + if (Validation()) { + if (confirm("저장하시겠습니까?")) { + document.getElementById("mgtOrgan").disabled = false; + contentFade("in"); + const formData = new FormData($("#saveVulnoFm")[0]); + for (const file of files) { + if (!file.isDelete) + formData.append('uploadFiles', file, file.name); + } + $.ajax({ + type: 'POST', + data: formData, + url: "/target/saveVulnerable", + processData: false, + contentType: false, + success: function(result) { + alert("저장되었습니다."); + contentFade("out"); + location.reload(); + }, + error: function(xhr, status) { + alert("저장에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +}) + +$(document).on('click', '#infoModal', function (){ + const mgtOrgan = $(this).attr("data-mgtOrgan"); + + $.ajax({ + url: '/target/vulnInfoModal', + type: 'GET', + data: {mgtOrgan:mgtOrgan}, + dataType:"html", + success: function(html){ + $("#vulnEditModalContent").empty().append(html); + $("#vulnEditModal").modal('show'); + }, + error:function(){ + + } + }); +}) + +$(document).on('click', '#viewModal', function (){ + const vulnKey = $(this).attr("data-vulnKey"); + + $.ajax({ + url: '/target/vulnViewModal', + type: 'GET', + data: {vulnKey:vulnKey}, + dataType:"html", + success: function(html){ + $("#vulnEditModalContent").empty().append(html); + $("#vulnEditModal").modal('show'); + }, + error:function(){ + + } + }); +}) + +$(document).on('click', '#fileDown', function (){ + const target = $(this) + let url = "/target/vulnFileDownload?" + url += "&fileSeq="+target.attr("data-fileSeq"); + url += "&vulnKey="+target.attr("data-vulnKey"); + window.open(encodeURI(url)); +}) + +$(document).on('click', '#deleteVuln', function (){ + const vulnKey = $('input[name=vulnKey]').val(); + if(confirm("삭제하시겠습니까?")){ + contentFade("in"); + $.ajax({ + type : 'POST', + url : "/target/deleteVulnerable", + data : JSON.stringify({vulnKey:vulnKey}), + contentType: 'application/json', + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(data) { + alert("삭제 처리되었습니다."); + location.reload(); + }, + error : function(xhr, status) { + alert("삭제 처리에 실패하였습니다"); + } + }) + + } + +}) + +$(document).on('click', '#goEdit', function (){ + const vulnKey = $(this).attr("data-vulnKey"); + vulnEditModal(vulnKey); +}) + +$(document).on('click', '#updateVuln', function (){ + if(Validation()){ + if(confirm("수정하시겠습니까?")){ + contentFade("in"); + const formData = new FormData($("#saveVulnoFm")[0]); + document.getElementById("mgtOrgan").disabled = false; + for(const file of files) { + if(!file.isDelete) + formData.append('uploadFiles', file, file.name); + } + $(".text-decoration-line-through").each(function (idx, el){ + formData.append('fileSeq', $(el).attr("data-fileseq")); + }) + $.ajax({ + type : 'POST', + data : formData, + url : "/target/saveVulnerable", + processData: false, + contentType: false, + success : function(data) { + alert("수정되었습니다."); + contentFade("out"); + vulnEditModal(data) + }, + error : function(xhr, status) { + alert("수정에 실패하였습니다.") + contentFade("out"); + } + }) + } + } +}) + +function Validation(){ + let flag = true; + if($('#mgtOrgan').val() == ""){ + alert("경찰서를 선택해주세요."); + $('#mgtOrgan').focus(); + flag = false; + } + if($('#vulnNm').val() == ""){ + alert("취약지명을 입력해주세요."); + $('#vulnNm').focus(); + flag = false; + } + if($('#vulnType').val() == ""){ + alert("취약등급을 선택해 주세요."); + $('#vulnType').focus(); + flag = false; + } + return flag; +} + +$(document).on('click', '#btn-close', function (){ + location.reload(); +}) + + + diff --git a/src/main/resources/templates/fipTarget/vulnEditModal.html b/src/main/resources/templates/fipTarget/vulnEditModal.html new file mode 100644 index 00000000..9d1f904d --- /dev/null +++ b/src/main/resources/templates/fipTarget/vulnEditModal.html @@ -0,0 +1,94 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fipTarget/vulnInfoModal.html b/src/main/resources/templates/fipTarget/vulnInfoModal.html new file mode 100644 index 00000000..43d5d624 --- /dev/null +++ b/src/main/resources/templates/fipTarget/vulnInfoModal.html @@ -0,0 +1,42 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fipTarget/vulnViewModal.html b/src/main/resources/templates/fipTarget/vulnViewModal.html new file mode 100644 index 00000000..15253928 --- /dev/null +++ b/src/main/resources/templates/fipTarget/vulnViewModal.html @@ -0,0 +1,62 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fipTarget/vulnerableList.html b/src/main/resources/templates/fipTarget/vulnerableList.html new file mode 100644 index 00000000..f982c1d8 --- /dev/null +++ b/src/main/resources/templates/fipTarget/vulnerableList.html @@ -0,0 +1,82 @@ + + + + + +
+
+

외사취약지 목록

+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
구분경찰서취약등급
A급B급C급
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ + + +
+ \ No newline at end of file