diff --git a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java index 022bfe00..21218599 100644 --- a/src/main/java/com/dbnt/faisp/config/SecurityConfig.java +++ b/src/main/java/com/dbnt/faisp/config/SecurityConfig.java @@ -125,10 +125,12 @@ public class SecurityConfig{ .exceptionHandling() .accessDeniedHandler(accessDeniedHandler()) .authenticationEntryPoint(authenticationEntryPoint()); + // 나모 에디터 'X-Frame-Options' to 'DENY' 오류로 인하여 추가. // https://computer-science-student.tistory.com/497 http.headers().frameOptions().sameOrigin(); - http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg");//csrf예외처리 + // 나모에디터 이미지 업로드시 csrf 토큰을 추가할 수 없어서 예외처리. + http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg"); return http.build(); } diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java b/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java index 0a01ca48..ee6b421d 100644 --- a/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java +++ b/src/main/java/com/dbnt/faisp/main/userInfo/FaispController.java @@ -7,10 +7,7 @@ import com.dbnt.faisp.main.codeMgt.model.CodeMgt; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; import com.dbnt.faisp.main.fipTarget.model.PartInfo; import com.dbnt.faisp.main.fipTarget.model.ShipInfo; -import com.dbnt.faisp.main.userInfo.model.PersonnelStatus; -import com.dbnt.faisp.main.userInfo.model.UserEdu; -import com.dbnt.faisp.main.userInfo.model.UserInfo; -import com.dbnt.faisp.main.userInfo.model.UserInfoHistory; +import com.dbnt.faisp.main.userInfo.model.*; import com.dbnt.faisp.main.userInfo.service.UserInfoService; import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.Utils; @@ -219,18 +216,30 @@ public class FaispController { mav.addObject("searchParams", userInfo); return mav; } - @GetMapping("/careerEditModal") - public ModelAndView careerEditModal(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){ - ModelAndView mav = new ModelAndView("faisp/career/careerEditModal"); + @GetMapping("/careerModal") + public ModelAndView careerModal(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){ + ModelAndView mav = new ModelAndView("faisp/career/careerModal"); //메뉴권한 확인 String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth(); mav.addObject("accessAuth", accessAuth); + mav.addObject("crcList", codeMgtService.selectCodeMgtList("CRC", "")); mav.addObject("userInfo", userInfoService.selectPoliceInfo(userInfo.getUserSeq())); /*mav.addObject("eduList", userInfoService.selectEduList());*/ mav.addObject("userSeq", loginUser.getUserSeq()); return mav; } + @GetMapping("/careerFormModal") + public ModelAndView careerFormModal(@AuthenticationPrincipal UserInfo loginUser, UserCareer career){ + ModelAndView mav = new ModelAndView("faisp/career/careerFormModal"); + mav.addObject("crcList", codeMgtService.selectCodeMgtList("CRC", "")); + mav.addObject("dsnList", codeMgtService.selectCodeMgtList("DSN", "")); + mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG", "")); + mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC", "")); + mav.addObject("jtList", codeMgtService.selectCodeMgtList("JT", "")); + mav.addObject("career", career); + return mav; + } @GetMapping("/educationMgt") public ModelAndView educationMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){ diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/model/UserCareer.java b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserCareer.java new file mode 100644 index 00000000..78411293 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/model/UserCareer.java @@ -0,0 +1,77 @@ +package com.dbnt.faisp.main.userInfo.model; + +import lombok.*; +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; + + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@IdClass(UserCareer.UserCareerId.class) +@Table(name = "user_career") +public class UserCareer{ + @Id + @Column(name = "user_seq") + private Integer userSeq; + @Id + @Column(name = "career_seq") + private Integer careerSeq; + @Column(name = "career_cd") + private String careerCd; + @Column(name = "designation_cd") + private String designationCd; + @Column(name = "work_organ") + private String workOrgan; + @Column(name = "work_part") + private String workPart; + @Column(name = "work_position_str") + private String workPositionStr; + @Column(name = "work_title") + private String workTitle; + @Column(name = "start_date") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + @Column(name = "end_date") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + @Column(name = "work_day") + private Integer workDay; + @Column(name = "work_month") + private Integer workMonth; + @Column(name = "hord_cd") + private String hordCd; + + @Column(name = "wrt_organ") + private String wrtOrgan; + @Column(name = "wrt_part") + private String wrtPart; + @Column(name = "wrt_user_seq") + private String wrtUserSeq; + @Column(name = "wrt_user_grd") + private Integer wrtUserGrd; + @Column(name = "wrt_user_nm") + private String wrtUserNm; + @Column(name = "wrt_dt") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime wrtDt; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class UserCareerId implements Serializable { + private Integer userSeq; + private Integer careerSeq; + } + +} diff --git a/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserCareerRepository.java b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserCareerRepository.java new file mode 100644 index 00000000..a21a85e7 --- /dev/null +++ b/src/main/java/com/dbnt/faisp/main/userInfo/repository/UserCareerRepository.java @@ -0,0 +1,9 @@ +package com.dbnt.faisp.main.userInfo.repository; + +import com.dbnt.faisp.main.userInfo.model.UserCareer; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface UserCareerRepository extends JpaRepository { + +} diff --git a/src/main/resources/mybatisMapper/UserInfoMapper.xml b/src/main/resources/mybatisMapper/UserInfoMapper.xml index 87651da2..14bde5dd 100644 --- a/src/main/resources/mybatisMapper/UserInfoMapper.xml +++ b/src/main/resources/mybatisMapper/UserInfoMapper.xml @@ -268,13 +268,14 @@ diff --git a/src/main/resources/static/js/faisp/careerMgt.js b/src/main/resources/static/js/faisp/careerMgt.js index f96b7bed..bc49dba0 100644 --- a/src/main/resources/static/js/faisp/careerMgt.js +++ b/src/main/resources/static/js/faisp/careerMgt.js @@ -1,7 +1,3 @@ -let eduList=[]; -let selectedIdx=0; - - $(document).on('click', '#previousTab', function (){ const userStatus = $(this).data('userstatus'); location.href = "/faisp/careerMgt?userStatus="+userStatus; @@ -18,18 +14,13 @@ $(document).on('click', '#notPoliceTab', function (){ $(document).on('click', '.policeTr', function (){ $.ajax({ - url: '/faisp/careerEditModal', + url: '/faisp/careerModal', data: {userSeq: $(this).find(".userSeq").val()}, type: 'GET', dataType:"html", success: function(html){ - $("#careerEditModalContent").empty().append(html); - $(".dateSelector").datepicker({ - format: "yyyy-mm-dd", - language: "ko", - autoclose: true - }); - $("#careerEditModal").modal('show'); + $("#careerModalContent").empty().append(html); + $("#careerModal").modal('show'); }, error:function(){ @@ -37,122 +28,60 @@ $(document).on('click', '.policeTr', function (){ }); }); -$(document).on('click', '#eduAddBtn', function (){ - const userSeq = (Number($(this).data('userseq'))); - $('#insertEdu').append( - '
'+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - ''+ - '
'+ - '
'+ - '
'+ - '
'+ - ''+ - '
'+ - '
'+ - '
' - ) - $(".eduSdate").datepicker({ - format: "yyyy-mm-dd", - language: "ko" - }); - $(".eduEdate").datepicker({ - format: "yyyy-mm-dd", - language: "ko" - }); - eduList.push({userSeq:userSeq, eduName:"",eduSdate:"",eduEdate:"",eduRa:""}); -}) +$(document).on('click', '.careerAddBtn', function (){ + $.ajax({ + url: '/faisp/careerFormModal', + data: { + userSeq: $("#editModelUserSeq").val(), + careerCd: $(this).attr("data-careercd") + }, + type: 'GET', + dataType:"html", + success: function(html){ + $("#careerFormModalContent").empty().append(html); + $("#dateSelectorDiv").datepicker({ + format: "yyyy-mm-dd", + language: "ko", + autoclose: true + }); + $("#careerFormModal").modal('show'); + }, + error:function(){ -$(document).on('click', '.rowDeleteBtn', function (){ - selectedIdx = $(this).parents("#eduDiv").index()-1; - eduList.splice(selectedIdx,1); - $(this).parents('#eduDiv').remove(); + } + }); }) - -$(document).on('change', '.eduInput', function (){ - selectedIdx = $(this).parents("#eduDiv").index()-1; - const target = eduList[selectedIdx]; - switch (this.name){ - case "eduName": - target.eduName = this.value - break; - case "eduSdate": - target.eduSdate = this.value - break; - case "eduEdate": - target.eduEdate = this.value - break; - case "eduRa": - target.eduRa = this.value - break; +$(document).on('change', '#positionCheckBox', function (){ + const selfInputDiv = $("#selfInputDiv"); + const selectInputDiv = $("#selectInputDiv"); + if(this.checked){ + selfInputDiv.show(); + selfInputDiv.find("input").removeAttr("disabled"); + selectInputDiv.hide(); + selectInputDiv.find("select").attr("disabled", "disabled"); + }else{ + selfInputDiv.hide(); + selfInputDiv.find("input").attr("disabled", "disabled"); + selectInputDiv.show(); + selectInputDiv.find("select").removeAttr("disabled"); } }) - $(document).on('click', '#saveBtn', function (){ - if(eduList.length < 1){ - alert("새로 입력된 교육정보가 없습니다."); - return false; - } - if(confirm("저장하시겠습니까?")){ - contentFade("in"); - $.ajax({ - type : 'POST', - data : JSON.stringify(eduList), - url : "/faisp/saveEdu", - contentType: 'application/json', - beforeSend: function (xhr){ - xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); - }, - success : function(data) { - contentFade("out"); - alert("교육등록이 완료되었습니다."); - showModal(data); - eduList.length = 0; - }, - error : function(xhr, status) { - contentFade("out"); - alert("교육등록을 실패하였습니다"); - } - }) + if(checkValue()){ + } }) -$(document).on('click', '#deleteBtn', function (){ - const eduSeq = (Number($(this).data('eduseq'))); - const userSeq = (Number($(this).data('userseq'))); - if(confirm("삭제하시겠습니까?")){ - $.ajax({ - type : 'POST', - url : "/faisp/deleteEdu", - data : JSON.stringify({eduSeq:eduSeq, - userSeq:userSeq}), - contentType: 'application/json', - beforeSend: function (xhr){ - xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); - }, - success : function(data) { - alert("삭제 처리되었습니다."); - showModal(data); - }, - error : function(xhr, status) { - alert("삭제 처리에 실패하였습니다"); - } - }) +function checkValue(){ + let flag = true; + const form = $("#careerForm"); + if(!form.find("#designationCd").val()){ + alert("임용구분을 선택해주세요.") + flag = false; } -}) - - + if(!form.find("#startDate").val()){ + alert("근무 시작일을 입력해주세요.") + flag = false; + } + return flag; +} diff --git a/src/main/resources/templates/adminPage/userMgt/userEditModal.html b/src/main/resources/templates/adminPage/userMgt/userEditModal.html index 730a077e..b553a8f3 100644 --- a/src/main/resources/templates/adminPage/userMgt/userEditModal.html +++ b/src/main/resources/templates/adminPage/userMgt/userEditModal.html @@ -66,8 +66,8 @@
diff --git a/src/main/resources/templates/faisp/career/careerEditModal.html b/src/main/resources/templates/faisp/career/careerEditModal.html deleted file mode 100644 index 8591b8d4..00000000 --- a/src/main/resources/templates/faisp/career/careerEditModal.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/faisp/career/careerFormModal.html b/src/main/resources/templates/faisp/career/careerFormModal.html new file mode 100644 index 00000000..ed4fd9db --- /dev/null +++ b/src/main/resources/templates/faisp/career/careerFormModal.html @@ -0,0 +1,92 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/faisp/career/careerMgt.html b/src/main/resources/templates/faisp/career/careerMgt.html index 2c019e48..69c27b65 100644 --- a/src/main/resources/templates/faisp/career/careerMgt.html +++ b/src/main/resources/templates/faisp/career/careerMgt.html @@ -83,7 +83,7 @@ 계급 성명 청 - 현부서
과 + 부서 생년월일 성별 외사경력 @@ -91,7 +91,6 @@ 정보경력 보안경력 국제경력 - 최종
수정일 @@ -109,7 +108,6 @@ - @@ -158,9 +156,17 @@ -