Compare commits

..

No commits in common. "61f001f3cb58c9730a9af475f5372db5506d1729" and "2ab3c285875ab503b2a4767ac506ecf5401693a0" have entirely different histories.

14 changed files with 240 additions and 342 deletions

View File

@ -126,12 +126,10 @@ public class SecurityConfig{
.exceptionHandling() .exceptionHandling()
.accessDeniedHandler(accessDeniedHandler()) .accessDeniedHandler(accessDeniedHandler())
.authenticationEntryPoint(authenticationEntryPoint()); .authenticationEntryPoint(authenticationEntryPoint());
// 나모 에디터 'X-Frame-Options' to 'DENY' 오류로 인하여 추가. // 나모 에디터 'X-Frame-Options' to 'DENY' 오류로 인하여 추가.
// https://computer-science-student.tistory.com/497 // https://computer-science-student.tistory.com/497
http.headers().frameOptions().sameOrigin(); http.headers().frameOptions().sameOrigin();
// 나모에디터 이미지 업로드시 csrf 토큰을 추가할 수 없어서 예외처리. http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg");//csrf예외처리
http.csrf().ignoringAntMatchers("/Crosseditor/uploadImg");
return http.build(); return http.build();
} }

View File

@ -7,7 +7,10 @@ import com.dbnt.faisp.main.codeMgt.model.CodeMgt;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService; import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.fipTarget.model.PartInfo; import com.dbnt.faisp.main.fipTarget.model.PartInfo;
import com.dbnt.faisp.main.fipTarget.model.ShipInfo; import com.dbnt.faisp.main.fipTarget.model.ShipInfo;
import com.dbnt.faisp.main.userInfo.model.*; 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.service.UserInfoService; import com.dbnt.faisp.main.userInfo.service.UserInfoService;
import com.dbnt.faisp.util.ParamMap; import com.dbnt.faisp.util.ParamMap;
import com.dbnt.faisp.util.Utils; import com.dbnt.faisp.util.Utils;
@ -216,30 +219,18 @@ public class FaispController {
mav.addObject("searchParams", userInfo); mav.addObject("searchParams", userInfo);
return mav; return mav;
} }
@GetMapping("/careerModal") @GetMapping("/careerEditModal")
public ModelAndView careerModal(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){ public ModelAndView careerEditModal(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo){
ModelAndView mav = new ModelAndView("faisp/career/careerModal"); ModelAndView mav = new ModelAndView("faisp/career/careerEditModal");
//메뉴권한 확인 //메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth(); String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth); mav.addObject("accessAuth", accessAuth);
mav.addObject("crcList", codeMgtService.selectCodeMgtList("CRC", ""));
mav.addObject("userInfo", userInfoService.selectPoliceInfo(userInfo.getUserSeq())); mav.addObject("userInfo", userInfoService.selectPoliceInfo(userInfo.getUserSeq()));
/*mav.addObject("eduList", userInfoService.selectEduList());*/ /*mav.addObject("eduList", userInfoService.selectEduList());*/
mav.addObject("userSeq", loginUser.getUserSeq()); mav.addObject("userSeq", loginUser.getUserSeq());
return mav; 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") @GetMapping("/educationMgt")
public ModelAndView educationMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){ public ModelAndView educationMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){

View File

@ -1,77 +0,0 @@
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;
}
}

View File

@ -1,9 +0,0 @@
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<UserCareer, UserCareer.UserCareerId> {
}

View File

@ -268,14 +268,13 @@
<select id="selectPoliceInfo" resultType="UserInfo" parameterType="Integer"> <select id="selectPoliceInfo" resultType="UserInfo" parameterType="Integer">
select user_seq, select user_seq,
user_nm, user_nm,
dic_code, (select item_value from code_mgt where item_cd = title_cd) as title_cd,
(select item_value from code_mgt where item_cd = title_cd) as title_cd, (select item_value from code_mgt where item_cd = og_cd) as og_cd,
(select item_value from code_mgt where item_cd = og_cd) as og_cd, (select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd,
(select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd, (select item_value from code_mgt where item_cd = sex) as sex,
(select item_value from code_mgt where item_cd = sex) as sex, birth_date,
birth_date, (select item_value from code_mgt where item_cd = language_cd) as language_cd
(select item_value from code_mgt where item_cd = language_cd) as language_cd
from user_info from user_info
where user_seq = #{userSeq} where user_seq = #{userSeq}
</select> </select>

View File

@ -1,3 +1,7 @@
let eduList=[];
let selectedIdx=0;
$(document).on('click', '#previousTab', function (){ $(document).on('click', '#previousTab', function (){
const userStatus = $(this).data('userstatus'); const userStatus = $(this).data('userstatus');
location.href = "/faisp/careerMgt?userStatus="+userStatus; location.href = "/faisp/careerMgt?userStatus="+userStatus;
@ -14,13 +18,18 @@ $(document).on('click', '#notPoliceTab', function (){
$(document).on('click', '.policeTr', function (){ $(document).on('click', '.policeTr', function (){
$.ajax({ $.ajax({
url: '/faisp/careerModal', url: '/faisp/careerEditModal',
data: {userSeq: $(this).find(".userSeq").val()}, data: {userSeq: $(this).find(".userSeq").val()},
type: 'GET', type: 'GET',
dataType:"html", dataType:"html",
success: function(html){ success: function(html){
$("#careerModalContent").empty().append(html); $("#careerEditModalContent").empty().append(html);
$("#careerModal").modal('show'); $(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#careerEditModal").modal('show');
}, },
error:function(){ error:function(){
@ -28,60 +37,122 @@ $(document).on('click', '.policeTr', function (){
}); });
}); });
$(document).on('click', '.careerAddBtn', function (){ $(document).on('click', '#eduAddBtn', function (){
$.ajax({ const userSeq = (Number($(this).data('userseq')));
url: '/faisp/careerFormModal', $('#insertEdu').append(
data: { '<div id="eduDiv">'+
userSeq: $("#editModelUserSeq").val(), '<div class="mb-4 row">'+
careerCd: $(this).attr("data-careercd") '<label for="ogCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육명</label>'+
}, '<div class="col-sm-2">'+
type: 'GET', '<input type="text" class="form-control form-control-sm tcDt eduInput" name="eduName">'+
dataType:"html", '</div>'+
success: function(html){ '<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육시작</label>'+
$("#careerFormModalContent").empty().append(html); '<div class="col-sm-2">'+
$("#dateSelectorDiv").datepicker({ '<input type="text" class="form-control form-control-sm eduSdate eduInput" name="eduSdate" readonly>'+
format: "yyyy-mm-dd", '</div>'+
language: "ko", '<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육종료</label>'+
autoclose: true '<div class="col-sm-2">'+
}); '<input type="text" class="form-control form-control-sm eduEdate eduInput" name="eduEdate" readonly>'+
$("#careerFormModal").modal('show'); '</div>'+
}, '<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">담당기관</label>'+
error:function(){ '<div class="col-sm-2">'+
'<input type="text" class="form-control form-control-sm eduInput" name="eduRa">'+
} '</div>'+
'</div>'+
'<div class="row justify-content-center">'+
'<div class="col-sm-1">'+
'<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn"><i class="bi bi-x"></i></button>'+
'</div>'+
'</div>'+
'</div>'
)
$(".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('change', '#positionCheckBox', function (){
const selfInputDiv = $("#selfInputDiv"); $(document).on('click', '.rowDeleteBtn', function (){
const selectInputDiv = $("#selectInputDiv"); selectedIdx = $(this).parents("#eduDiv").index()-1;
if(this.checked){ eduList.splice(selectedIdx,1);
selfInputDiv.show(); $(this).parents('#eduDiv').remove();
selfInputDiv.find("input").removeAttr("disabled"); })
selectInputDiv.hide();
selectInputDiv.find("select").attr("disabled", "disabled"); $(document).on('change', '.eduInput', function (){
}else{ selectedIdx = $(this).parents("#eduDiv").index()-1;
selfInputDiv.hide(); const target = eduList[selectedIdx];
selfInputDiv.find("input").attr("disabled", "disabled"); switch (this.name){
selectInputDiv.show(); case "eduName":
selectInputDiv.find("select").removeAttr("disabled"); 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('click', '#saveBtn', function (){ $(document).on('click', '#saveBtn', function (){
if(checkValue()){ 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("교육등록을 실패하였습니다");
}
})
} }
}) })
function checkValue(){ $(document).on('click', '#deleteBtn', function (){
let flag = true; const eduSeq = (Number($(this).data('eduseq')));
const form = $("#careerForm"); const userSeq = (Number($(this).data('userseq')));
if(!form.find("#designationCd").val()){ if(confirm("삭제하시겠습니까?")){
alert("임용구분을 선택해주세요.") $.ajax({
flag = false; 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("삭제 처리에 실패하였습니다");
}
})
} }
if(!form.find("#startDate").val()){ })
alert("근무 시작일을 입력해주세요.")
flag = false;
}
return flag;
}

View File

@ -66,8 +66,8 @@
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label> <label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4"> <div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex"> <select class="form-select form-select-sm" id="sex" name="sex">
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option> <option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option> <option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -0,0 +1,90 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title">경력 관리</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3 mt-3 row">
<label for="dicCode" class="col-sm-2 col-form-label col-form-label-sm text-center">직급</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" th:value="${userInfo.titleCd}" readonly>
</div>
<label for="userId" class="col-sm-2 col-form-label col-form-label-sm text-center ">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" th:value="${userInfo.birthDate}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="phoneNo" class="col-sm-2 col-form-label col-form-label-sm text-center">성명</label>
<div class="col-sm-4">
<input type="tel" class="form-control form-control-sm" th:value="|${userInfo.ogCd} ${userInfo.ofcCd} ${userInfo.userNm}|" readonly>
</div>
<label for="email" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4">
<input type="email" class="form-control form-control-sm" th:value="${userInfo.sex}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">학력사항</label>
<div class="col-sm-2">
<input type="email" class="form-control form-control-sm" readonly>
</div>
<label for="sex" class="col-sm-1 col-form-label col-form-label-sm text-center">학교</label>
<div class="col-sm-2">
<input type="email" class="form-control form-control-sm" readonly>
</div>
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">외국어</label>
<div class="col-sm-2">
<input type="email" class="form-control form-control-sm" th:value="${userInfo.languageCd}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="birthDate" class="col-sm-2 col-form-label col-form-label-sm text-center">전공</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="birthDate" name="birthDate" readonly>
</div>
</div>
<div class="card">
<div class="card-body text-center">
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<th>교육명</th>
<th>교육일</th>
<th>담당기관</th>
<th></th>
</tr>
</thead>
<tbody class="overflow-scroll">
<!--<tr th:each="list:${eduList}">
<td th:text="${list.eduName}"></td>
<td th:text="|${list.eduSdate}~${list.eduEdate}|"></td>
<td th:text="${list.eduRa}"></td>
<td>
<button type="button" class="btn btn-sm btn-danger" id="deleteBtn" th:data-eduseq="${list.eduSeq}" th:data-userseq="${list.userSeq}" th:if="${accessAuth eq 'ACC003'} or ${list.wrtUserSeq eq userSeq}">삭제</button>
</td>
</tr>-->
</tbody>
</table>
<div id="insertEdu">
<div class="row justify-content-center">
<button class="btn btn-sm btn-outline-primary col-auto" th:data-userseq="${userInfo.userSeq}" id="eduAddBtn"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer row justify-content-between">
<div class="col-auto">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary" id="saveBtn" th:if="${accessAuth eq 'ACC003'} or ${userInfo.userSeq eq userSeq}">저장</button>
</div>
</div>
</html>

View File

@ -1,92 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title">경력 추가</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="careerForm" action="#" method="POST"></form>
<input type="hidden" name="userSeq" th:value="${career.userSeq}">
<div class="row my-1">
<label for="careerCd" class="col-sm-2 col-form-label col-form-label-sm text-center">경력구분</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="careerCd" name="careerCd">
<th:block th:each="code:${crcList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq career.careerCd}"></option>
</th:block>
</select>
</div>
<label for="designationCd" class="col-sm-2 col-form-label col-form-label-sm text-center">임용구분</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="designationCd" name="designationCd">
<option value="">선택</option>
<th:block th:each="code:${dsnList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block>
</select>
</div>
</div>
<div class="row my-1">
<label class="col-sm-2 col-form-label col-form-label-sm text-center fs-13">근무지</label>
<div class="col-sm-10">
<div class="row border m-0 py-1">
<div class="col-12">
<input type="checkbox" id="positionCheckBox">
<label for="positionCheckBox" class="col-sm-2 col-form-label col-form-label-sm px-2">직접입력</label>
</div>
<div class="col-12" id="selfInputDiv" style="display: none">
<input type="text" class="form-control form-control-sm" id="workPositionStr" name="workPositionStr">
</div>
<div class="col-12" id="selectInputDiv">
<div class="row">
<label for="workOrgan" class="col-sm-1 col-form-label col-form-label-sm text-center fs-13">관서</label>
<div class="col-sm-3">
<select class="form-select form-select-sm" id="workOrgan" name="workOrgan">
<option value="">선택</option>
<th:block th:each="code:${ogList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block>
</select>
</div>
<label for="workPart" class="col-sm-1 col-form-label col-form-label-sm text-center fs-13">부서</label>
<div class="col-sm-3">
<select class="form-select form-select-sm" id="workPart" name="workPart">
<option value="">선택</option>
<th:block th:each="code:${ofcList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block>
</select>
</div>
<label for="workTitle" class="col-sm-1 col-form-label col-form-label-sm text-center fs-13">직급</label>
<div class="col-sm-3">
<select class="form-select form-select-sm" id="workTitle" name="workTitle">
<option value="">선택</option>
<th:block th:each="code:${jtList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row my-1">
<label for="dateSelectorDiv" class="col-sm-2 col-form-label col-form-label-sm text-center fs-13">근무일</label>
<div class="col-sm-4">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly>
<input type="text" class="form-control form-control-sm" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly>
</div>
</div>
</div>
</div>
<div class="modal-footer row justify-content-between">
<div class="col-auto">
<button type="button" class="btn btn-primary" id="saveBtn">저장</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
</div>
</html>

View File

@ -83,7 +83,7 @@
<th>계급</th> <th>계급</th>
<th>성명</th> <th>성명</th>
<th></th> <th></th>
<th>부서</th> <th>부서<br></th>
<th>생년월일</th> <th>생년월일</th>
<th>성별</th> <th>성별</th>
<th>외사경력</th> <th>외사경력</th>
@ -91,6 +91,7 @@
<th>정보경력</th> <th>정보경력</th>
<th>보안경력</th> <th>보안경력</th>
<th>국제경력</th> <th>국제경력</th>
<th>최종<br>수정일</th>
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider"> <tbody class="table-group-divider">
@ -108,6 +109,7 @@
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -156,17 +158,9 @@
</div> </div>
</main> </main>
<div class="modal fade" id="careerModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="careerModalLabel" aria-hidden="true"> <div class="modal fade" id="careerEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="careerEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="careerModalContent">
</div>
</div>
</div>
<div class="modal fade" id="careerFormModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="careerFormModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-scrollable"> <div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content" id="careerFormModalContent"> <div class="modal-content" id="careerEditModalContent">
</div> </div>
</div> </div>

View File

@ -1,67 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title" th:text="|${userInfo.ogCd} ${userInfo.ofcCd} ${userInfo.titleCd} ${userInfo.userNm}|"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="hidden" id="editModelUserSeq" th:value="${userInfo.userSeq}">
<div class="card">
<div class="card-body text-center">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<th:block th:each="code, idx:${crcList}">
<li class="nav-item" role="presentation">
<button class="nav-link" type="button" role="tab" data-bs-toggle="tab" th:id="|${code.itemCd}Tab|"
th:data-bs-target="${#strings.concat('#', code.itemCd, 'TabPanel')}" th:aria-controls="|${code.itemCd}TabPanel|"
th:aria-selected="${idx.index eq 0?'true':'false'}" th:classappend="${idx.index eq 0?'active':''}"
th:text="${code.itemValue}"></button>
</li>
</th:block>
</ul>
<div class="tab-content border border-top-0">
<th:block th:each="code, idx:${crcList}">
<div class="tab-pane fade p-2" th:classappend="${idx.index eq 0?'show active':''}"
th:id="|${code.itemCd}TabPanel|" role="tabpanel"
th:aria-labelledby="|${code.itemCd}Tab|" tabindex="0">
<table class="table table-hover">
<thead>
<tr>
<th>임용구분</th>
<th>근무지</th>
<th>직급</th>
<th>시작일</th>
<th>종료일</th>
<th>일수</th>
<th>개월수</th>
<th>등록자</th>
<th>등록일</th>
<th></th>
</tr>
</thead>
<tbody th:id="|${code.itemValue}Tbody|">
</tbody>
<tfoot>
<tr>
<td colspan="9">
<div class="row justify-content-center">
<div class="col-auto">
<button type="button" class="btn btn-sm btn-primary careerAddBtn" th:data-careercd="${code.itemCd}">추가</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-sm btn-success kwmsCareerBtn" th:classappend="${#strings.isEmpty(userInfo.dicCode)?'disabled':''}">인사시스템 경력정보</button>
</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
</th:block>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
</html>

View File

@ -50,8 +50,8 @@
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label> <label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4"> <div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex"> <select class="form-select form-select-sm" id="sex" name="sex">
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option> <option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option> <option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -60,8 +60,8 @@
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label> <label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4"> <div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex"> <select class="form-select form-select-sm" id="sex" name="sex">
<option value="SEX002" th:selected="${userInfo.sex eq 'M'}"></option> <option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'F'}"></option> <option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -88,8 +88,8 @@
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label> <label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4"> <div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex"> <select class="form-select form-select-sm" id="sex" name="sex">
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option> <option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option> <option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
</select> </select>
</div> </div>
</div> </div>