외사경찰 > 경력관리 작업중.

강석 최 2022-11-18 18:01:23 +09:00
parent 5646a8cdb0
commit 412aa9e0ac
14 changed files with 342 additions and 240 deletions

View File

@ -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();
}

View File

@ -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){

View File

@ -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;
}
}

View File

@ -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<UserCareer, UserCareer.UserCareerId> {
}

View File

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

View File

@ -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(
'<div id="eduDiv">'+
'<div class="mb-4 row">'+
'<label for="ogCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육명</label>'+
'<div class="col-sm-2">'+
'<input type="text" class="form-control form-control-sm tcDt eduInput" name="eduName">'+
'</div>'+
'<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육시작</label>'+
'<div class="col-sm-2">'+
'<input type="text" class="form-control form-control-sm eduSdate eduInput" name="eduSdate" readonly>'+
'</div>'+
'<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">교육종료</label>'+
'<div class="col-sm-2">'+
'<input type="text" class="form-control form-control-sm eduEdate eduInput" name="eduEdate" readonly>'+
'</div>'+
'<label for="ofcCd" class="col-sm-1 col-form-label col-form-label-sm text-center">담당기관</label>'+
'<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('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;
}

View File

@ -66,8 +66,8 @@
<label for="sex" 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="sex" name="sex">
<option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option>
</select>
</div>
</div>

View File

@ -1,90 +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">
<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

@ -0,0 +1,92 @@
<!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>부서<br></th>
<th>부서</th>
<th>생년월일</th>
<th>성별</th>
<th>외사경력</th>
@ -91,7 +91,6 @@
<th>정보경력</th>
<th>보안경력</th>
<th>국제경력</th>
<th>최종<br>수정일</th>
</tr>
</thead>
<tbody class="table-group-divider">
@ -109,7 +108,6 @@
<td></td>
<td></td>
<td></td>
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</tbody>
</table>
@ -158,9 +156,17 @@
</div>
</main>
<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 fade" id="careerModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="careerModalLabel" 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-content" id="careerEditModalContent">
<div class="modal-content" id="careerFormModalContent">
</div>
</div>

View File

@ -0,0 +1,67 @@
<!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>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex">
<option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option>
</select>
</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>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex">
<option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
<option value="SEX002" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'F'}"></option>
</select>
</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>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex">
<option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
<option value="SEX002" th:selected="${userInfo.sex eq 'SEX002'}"></option>
<option value="SEX001" th:selected="${userInfo.sex eq 'SEX001'}"></option>
</select>
</div>
</div>