통역인 작업중.

master
강석 최 2023-04-03 18:28:05 +09:00
parent 03dad25397
commit 7543382848
13 changed files with 496 additions and 790 deletions

View File

@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -70,14 +71,15 @@ public class TranslatorController {
return mav; return mav;
} }
@PostMapping("/insertTranslatorInfo") @PostMapping("/saveTranslatorInfo")
public String insertTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator) { public void saveTranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator) {
translator.setWrtUserSeq(loginUser.getUserSeq());
translator.setWrtNm(loginUser.getUserNm()); translator.setWrtNm(loginUser.getUserNm());
translator.setWrtOrgan(loginUser.getOgCd()); translator.setWrtOrgan(loginUser.getOgCd());
translator.setWrtPart(loginUser.getOfcCd()); translator.setWrtPart(loginUser.getOfcCd());
translator.setWrtTitle(loginUser.getTitleCd()); translator.setWrtTitle(loginUser.getTitleCd());
translator.setWrtDt(LocalDateTime.now()); translator.setWrtDt(LocalDateTime.now());
return translatorSevice.insertTranslatorInfo(translator); translatorSevice.saveTranslatorInfo(translator);
} }
@GetMapping("/translatorEditModal") @GetMapping("/translatorEditModal")
@ -85,59 +87,47 @@ public class TranslatorController {
ModelAndView mav = new ModelAndView("translator/translatorEditModal"); ModelAndView mav = new ModelAndView("translator/translatorEditModal");
//메뉴권한 확인 //메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/translator/info").get(0).getAccessAuth(); String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/translator/info").get(0).getAccessAuth();
mav.addObject("wrtUserSeq", translatorSevice.selectTrFristUserSeq(translator.getTranslatorKey()));
mav.addObject("userSeq", loginUser.getUserSeq()); mav.addObject("userSeq", loginUser.getUserSeq());
mav.addObject("trInfo", translatorSevice.selectTranslatorView(translator));
mav.addObject("mgtOrganList", loginUser.getDownOrganCdList()); mav.addObject("mgtOrganList", loginUser.getDownOrganCdList());
mav.addObject("accessAuth", accessAuth); mav.addObject("accessAuth", accessAuth);
return mav; if(translator.getTranslatorKey() != null){
} List<Translator> infoList = translatorSevice.selectHistoryList(translator.getTranslatorKey());
mav.addObject("wrtUserSeq", infoList.get(infoList.size()-1).getWrtUserSeq());
@PostMapping("/updateTranslatorInfo") mav.addObject("trInfo", infoList.get(0));
public Translator updatetranslatorInfo(@AuthenticationPrincipal UserInfo loginUser,Translator translator) { mav.addObject("historyList", infoList);
translator.setWrtNm(loginUser.getUserNm()); List<TranslatorCrr> careerList = translatorSevice.selectCareerList(translator.getTranslatorKey());
translator.setWrtOrgan(loginUser.getOgCd()); List<TranslatorCrr> kcgCareerList = new ArrayList<>();
translator.setWrtPart(loginUser.getOfcCd()); List<TranslatorCrr> otherCareerList = new ArrayList<>();
translator.setWrtTitle(loginUser.getTitleCd()); for(TranslatorCrr career: careerList){
translator.setWrtDt(LocalDateTime.now()); if(career.getHisGubun().equals("Y")){
Translator result = translatorSevice.updatetranslatorInfo(translator); kcgCareerList.add(career);
return result; }else{
} otherCareerList.add(career);
}
@GetMapping("/revisionHistory") }
public ModelAndView revisionHistory(Translator translator){ mav.addObject("kcgCareerList", kcgCareerList);
ModelAndView mav = new ModelAndView("translator/translatorHistory"); mav.addObject("otherCareerList", otherCareerList);
mav.addObject("historyList", translatorSevice.selectHistoryList(translator)); }else{
mav.addObject("wrtUserSeq", null);
mav.addObject("trInfo", new Translator());
mav.addObject("historyList", null);
mav.addObject("kcgCareerList", null);
mav.addObject("otherCareerList", null);
}
return mav; return mav;
} }
@GetMapping("/HistoryView") @GetMapping("/HistoryView")
@ResponseBody public ModelAndView HistoryView(Translator translator){
public Translator HistoryView(Translator translator){ ModelAndView mav = new ModelAndView("translator/translatorHistory");
mav.addObject("trInfo", translatorSevice.selectTranslator(translator.getTranslatorKey(), translator.getVersionNo()));
return translatorSevice.HistoryView(translator);
}
@GetMapping("/careerView")
public ModelAndView careerView(@AuthenticationPrincipal UserInfo loginUser,TranslatorCrr translatorCrr){
ModelAndView mav = new ModelAndView("translator/translatorCareerModal");
//메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/translator/info").get(0).getAccessAuth();
mav.addObject("policeCrr", translatorSevice.selectMaritimePoliceCareer(translatorCrr));
mav.addObject("anotherCrr", translatorSevice.selectAnotherOrganizationCareer(translatorCrr));
mav.addObject("trKey", translatorCrr.getTranslatorKey());
mav.addObject("wrtUserSeq", translatorSevice.selectTrFristUserSeq(translatorCrr.getTranslatorKey()));
mav.addObject("userSeq", loginUser.getUserSeq());
mav.addObject("trName", translatorSevice.selectTrLastName(translatorCrr));
mav.addObject("accessAuth", accessAuth);
return mav; return mav;
} }
@GetMapping("/careerInsertPage") @GetMapping("/careerInsertTr")
public ModelAndView careerInsertPage(TranslatorCrr translatorCrr){ public ModelAndView careerInsertTr(){
ModelAndView mav = new ModelAndView("translator/translatorCareerInsert"); return new ModelAndView("translator/careerTr");
mav.addObject("trKey", translatorCrr.getTranslatorKey());
return mav;
} }
@PostMapping("/insertTranslatorCareer") @PostMapping("/insertTranslatorCareer")

View File

@ -3,6 +3,7 @@ package com.dbnt.faisp.main.translator.repository;
import com.dbnt.faisp.main.translator.model.TranslatorCrr; import com.dbnt.faisp.main.translator.model.TranslatorCrr;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -15,11 +16,5 @@ public interface TranslatorCareerRepository extends JpaRepository<TranslatorCrr,
void deleteByTranslatorKey(int trKey); void deleteByTranslatorKey(int trKey);
List<TranslatorCrr> findByTranslatorKeyOrderByCareerSeqDesc(Integer translatorKey);
} }

View File

@ -5,11 +5,13 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Optional;
public interface TranslatorRepository extends JpaRepository<Translator, Translator.TranslatorId> { public interface TranslatorRepository extends JpaRepository<Translator, Translator.TranslatorId> {
Translator findFirstByOrderByTranslatorKeyDesc(); Optional<Translator> findFirstByOrderByTranslatorKeyDesc();
void deleteByTranslatorKey(int trKey); void deleteByTranslatorKey(int trKey);
@ -17,6 +19,7 @@ public interface TranslatorRepository extends JpaRepository<Translator, Translat
String getTrLastName(@Param("translatorKey") Integer translatorKey); String getTrLastName(@Param("translatorKey") Integer translatorKey);
List<Translator> findByTranslatorKeyOrderByVersionNoDesc(Integer translatorKey);
Optional<Translator> findTop1ByTranslatorKeyOrderByVersionNoDesc(Integer translatorKey);
} }

View File

@ -25,17 +25,16 @@ public class TranslatorService {
private final TranslatorCareerRepository translatorCareerRepository; private final TranslatorCareerRepository translatorCareerRepository;
private final TranslatorMapper translatorMapper; private final TranslatorMapper translatorMapper;
public String insertTranslatorInfo(Translator translator) { @Transactional
Translator dbTranslator = translatorRepository.findFirstByOrderByTranslatorKeyDesc(); public void saveTranslatorInfo(Translator translator) {
translator.setWrtDt(LocalDateTime.now()); if(translator.getTranslatorKey()==null){
if (dbTranslator == null) { Translator dbTranslator = translatorRepository.findFirstByOrderByTranslatorKeyDesc().orElse(null);
translator.setTranslatorKey(1); translator.setTranslatorKey(dbTranslator == null?1:(dbTranslator.getTranslatorKey()+1));
translator.setVersionNo(1); translator.setVersionNo(1);
} else { }else{
translator.setTranslatorKey(dbTranslator.getTranslatorKey() + 1); translator.setVersionNo(translator.getVersionNo()+1);
translator.setVersionNo(1); }
} translatorRepository.save(translator);
return translatorRepository.save(translator).getTrName();
} }
public List<Translator> selectTranslatorList(Translator translator) { public List<Translator> selectTranslatorList(Translator translator) {
@ -46,49 +45,17 @@ public class TranslatorService {
return translatorMapper.selectTranslatorListCnt(translator); return translatorMapper.selectTranslatorListCnt(translator);
} }
public Translator selectTranslatorView(Translator translator) { public Translator selectTranslator(Integer translatorKey, Integer versionNo) {
return translatorRepository.findById(new TranslatorId(translator.getTranslatorKey(), translator.getVersionNo())) return translatorRepository.findById(new TranslatorId(translatorKey, versionNo)).orElse(null);
.orElse(null);
} }
@Transactional public List<Translator> selectHistoryList(Integer translatorKey) {
public Translator updatetranslatorInfo(Translator translator) { return translatorRepository.findByTranslatorKeyOrderByVersionNoDesc(translatorKey);
Translator dbTranslator = translatorRepository
.findById(new TranslatorId(translator.getTranslatorKey(), translator.getVersionNo())).orElse(null);
Translator translatorTmp = new Translator();
translatorTmp.setTranslatorKey(dbTranslator.getTranslatorKey());
translatorTmp.setVersionNo(dbTranslator.getVersionNo() + 1);
translatorTmp.setOgdp1(translator.getOgdp1());
translatorTmp.setTrLang(translator.getTrLang());
translatorTmp.setTrCareer(translator.getTrCareer());
translatorTmp.setTrName(translator.getTrName());
translatorTmp.setTrSex(translator.getTrSex());
translatorTmp.setTrPhone(translator.getTrPhone());
translatorTmp.setTrNny(translator.getTrNny());
translatorTmp.setTrAge(translator.getTrAge());
translatorTmp.setTrEdu(translator.getTrEdu());
translatorTmp.setTrCft(translator.getTrCft());
translatorTmp.setTrVisa(translator.getTrVisa());
translatorTmp.setAptDt(translator.getAptDt());
translatorTmp.setDmlYn(translator.getDmlYn());
translatorTmp.setRemark(translator.getRemark());
translatorTmp.setWrtNm(translator.getWrtNm());
translatorTmp.setWrtDt(translator.getWrtDt());
translatorTmp.setWrtOrgan(translator.getWrtOrgan());
translatorTmp.setWrtPart(translator.getWrtPart());
translatorTmp.setWrtTitle(translator.getWrtTitle());
translatorTmp.setWrtUserSeq(translator.getWrtUserSeq());
translatorRepository.save(translatorTmp);
return translatorTmp;
} }
public List<Translator> selectHistoryList(Translator translator) { public List<TranslatorCrr> selectCareerList(Integer translatorKey) {
return translatorMapper.selectHistoryList(translator); return translatorCareerRepository.findByTranslatorKeyOrderByCareerSeqDesc(translatorKey);
} }
public Translator HistoryView(Translator translator) {
return translatorMapper.HistoryView(translator);
}
public int insertTranslatorCareer(List<TranslatorCrr> translatorCrr) { public int insertTranslatorCareer(List<TranslatorCrr> translatorCrr) {
int trKey = 0; int trKey = 0;
@ -141,12 +108,4 @@ public class TranslatorService {
return translatorMapper.selectTranslatorListEx(translator); return translatorMapper.selectTranslatorListEx(translator);
} }
public String selectTrFristUserSeq(int translatorKey) {
return translatorMapper.selectTrFristUserSeq(translatorKey);
}
public String selectTrLastName(TranslatorCrr translatorCrr) {
return translatorRepository.getTrLastName(translatorCrr.getTranslatorKey());
}
} }

View File

@ -99,9 +99,6 @@
.fs-13{ .fs-13{
font-size: 13px; font-size: 13px;
} }
.pl-15{
padding-left: 15%;
}
.w-30{ .w-30{
width: 30%!important; width: 30%!important;
} }

View File

@ -1,12 +1,23 @@
let trCarrerList=[];
let selectedIdx=0;
$(function(){ $(function(){
$("#dateSelectorDiv").datepicker({ $("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd", format: "yyyy-mm-dd",
language: "ko", language: "ko",
autoclose: true autoclose: true
}); });
/*$("#aptDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});*/
})
$(document).on('click', '#addTranslatorBtn', function (){
getTranslatorEditModal(null, null);
}) })
$(document).on('click', '.infoTr', function (){ $(document).on('click', '.infoTr', function (){
@ -35,129 +46,35 @@ function getTranslatorEditModal(translatorKey, versionNo){
}); });
} }
$(document).on('click', '.translatorInfo', function (){ $(document).on('click', '#saveBtn,#updateBtn', function (){
document.getElementById('accessTab').classList.add('active'); if(contentCheck()){
document.getElementById('approvalTab').classList.remove('active'); if(confirm("저장하시겠습니까?")){
const trKey = Number($("#selectedKey").val()); contentFade("in");
const verNo = Number($("#selectedVerNo").val()); const trInfoForm = $("#trInfoForm");
const url = '/translator/translatorEditModal'; trInfoForm.find('select,input').removeAttr("disabled");
revisionHistory(trKey,verNo,url); const formData = new FormData(trInfoForm[0]);
var html=""; $.ajax({
html += '<input type="hidden" class="tapTrKey" value="'+trKey+'">'; type : 'POST',
html += '<input type="hidden" class="tapVerNo" value="'+verNo+'">'; data : formData,
$("#KeyValue").empty().html(html) url : "/translator/saveTranslatorInfo",
}) processData: false,
contentType: false,
$(document).on('click', '#trView', function (){ success : function(result) {
document.getElementById('accessTab').classList.add('active'); alert("저장되었습니다.")
document.getElementById('approvalTab').classList.remove('active'); location.reload();
const trKey = (Number($(this).find(".trKey").val())); },
const verNo = (Number($(this).find(".verNo").val())); error : function(xhr, status) {
const url = '/translator/translatorEditModal'; alert("저장에 실패하였습니다.")
revisionHistory(trKey,verNo,url); contentFade("out");
var html=""; }
html += '<input type="hidden" class="tapTrKey" value="'+trKey+'">'; })
html += '<input type="hidden" class="tapVerNo" value="'+verNo+'">'; }
$("#KeyValue").empty().html(html);
})
$(document).on('click', '#updateBtn', function (){
if($('#eOgdp1').val() == ''){
alert("관서를 선택해주세요.");
$('#eOgdp1').focus();
return false;
}
if($('#eTrLang').val() == ''){
alert("언어를 선택해주세요.");
$('#eTrLang').focus();
return false;
}
if($('#eTrEname').val() == ''){
alert("성명을 입력해주세요.");
$('#eTrEname').focus();
return false;
}
if(confirm("수정하시겠습니까?")){
document.getElementById("eOgdp1").disabled = false;
const url = '/translator/translatorEditModal';
contentFade("in");
const formData = new FormData($("#trInfoUpdate")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/translator/updateTranslatorInfo",
processData: false,
contentType: false,
success : function(data) {
alert("수정되었습니다.");
contentFade("out");
revisionHistory(data.translatorKey,data.versionNo,url);
},
error : function(xhr, status) {
alert("수정에 실패하였습니다.");
contentFade("out");
}
})
}
})
$(document).on('click', '#saveBtn', function (){
if($('#ogdp1').val() == ''){
alert("관서를 선택해주세요.");
$('#ogdp1').focus();
return false;
}
if($('#lang').val() == ''){
alert("언어를 선택해주세요.");
$('#lang').focus();
return false;
}
if($('#trName').val() == ''){
alert("성명을 입력해주세요.");
$('#trName').focus();
return false;
}
if($('#dmlYn').val() == ''){
alert("해촉여부를 선택해주세요.");
$('#dmlYn').focus();
return false;
}
if(confirm("저장하시겠습니까?")){
document.getElementById("ogdp1").disabled = false;
contentFade("in");
const formData = new FormData($("#translatorInsert")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/translator/insertTranslatorInfo",
processData: false,
contentType: false,
success : function(result) {
alert("저장되었습니다.")
contentFade("out");
location.reload();
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.")
contentFade("out");
}
})
} }
}) })
$(document).on('click', '.historyInfoTr', function (){ $(document).on('click', '.historyInfoTr', function (){
$(".hisChk").prop("checked", false);
$(this).find('.hisChk').prop('checked',true) $(this).find('.hisChk').prop('checked',true)
if($(this).find('.hisChk').prop('checked')){
$('.hisChk').prop('checked',false);
$(this).find('.hisChk').prop('checked',true)
}
$.ajax({ $.ajax({
url: '/translator/HistoryView', url: '/translator/HistoryView',
data: { data: {
@ -165,40 +82,17 @@ $(document).on('click', '.historyInfoTr', function (){
versionNo : Number($(this).find(".verNo").val()) versionNo : Number($(this).find(".verNo").val())
}, },
type: 'GET', type: 'GET',
dataType:"json", dataType:"html",
success: function(data){ success: function(html){
$("#ogdp1V").val(data.ogdp1); $("#valueDiv").empty().append(html);
$("#trLangV").val(data.trLang);
$("#trCareerV").val(data.trCareer);
$("#trNameV").val(data.trName);
$("#trSexV").val(data.trSex);
$("#trPhoneV").val(data.trPhone);
$("#trNnyV").val(data.trNny);
$("#trAgeV").val(data.trAge);
$("#trVisaV").val(data.trVisa);
$("#trEduV").val(data.trEdu);
$("#trCftV").val(data.trCft);
$("#aptDtV").val(data.aptDt);
$("#dmlYnV").val(data.dmlYn);
$("#remarkV").val(data.remark);
}, },
error:function(e){ error:function(e){
ajaxErrorAction(e); ajaxErrorAction(e);
} }
}); });
}) })
$(document).ready( function() {
$("#aptDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
$(document).on('click', '#approvalTab', function (){ $(document).on('click', '#approvalTab', function (){
const trKey = (Number($('.tapTrKey').val())); const trKey = (Number($('.tapTrKey').val()));
@ -262,120 +156,36 @@ $(document).on('change', '#eTrNny', function (){
} }
}); });
$(document).on('click', '#crrAddBtn', function (){ $(document).on('click', '.addCareerBtn', function (){
const trKey = (Number($('#tcInsertKey').val())); const hisGubun = $(this).attr('data-hisgubun')
$('#insertCareer').append(
'<div id="crrDiv">'+
'<div class="row mb-1">'+
'<label for="ogCd" class="col-sm-2 col-form-label-sm text-center">경력구분</label>'+
'<div class="col-sm-2">'+
'<select class="form-select form-select-sm crrInput" name="hisGubun">'+
'<option value="">선택</option>'+
'<option value="Y">해양경찰청</option>'+
'<option value="N">타기관</option>'+
'</select>'+
'</div>'+
'<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">날짜</label>'+
'<div class="col-sm-2">'+
'<input type="text" class="form-control tcDt crrInput" id="tcDt" name="tcDt" readonly>'+
'</div>'+
'<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">내용</label>'+
'<div class="col-sm-2">'+
'<input type="text" class="form-control crrInput" id="contents" name="contents">'+
'</div>'+
'</div>'+
'<div class="mb-2 row">'+
'<label for="ofcCd" class="col-sm-2 col-form-label-sm text-center">비고</label>'+
'<div class="col-sm-8">'+
'<input type="text" class="form-control crrInput" id="remark" name="remark">'+
'</div>'+
'<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>'
)
$(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
trCarrerList.push({translatorKey:trKey, hisGubun:"",tcDt:"",contents:"",remark:""});
})
$(document).on('click', '.rowDeleteBtn', function (){
selectedIdx = $(this).parents("#crrDiv").index()-1;
trCarrerList.splice(selectedIdx,1);
$(this).parents('#crrDiv').remove();
})
$(document).on('change', '.crrInput', function (){
selectedIdx = $(this).parents("#crrDiv").index()-1;
const target = trCarrerList[selectedIdx];
switch (this.name){
case "hisGubun":
target.hisGubun = this.value
break;
case "tcDt":
target.tcDt = this.value
break;
case "contents":
target.contents = this.value
break;
case "remark":
target.remark = this.value
break;
}
})
$(document).on('click', '.careerInfo', function (){
const trKey = Number($("#selectedKey").val());
showCareer(trKey);
})
function showCareer(trKey){
$.ajax({ $.ajax({
url: '/translator/careerView', url: '/translator/careerInsertTr',
data: {
translatorKey: trKey,
},
type: 'GET', type: 'GET',
dataType:"html", dataType:"html",
success: function(html){ success: function(html){
$("#careerView").empty().append(html) const addBody = $(html).find("#addBody");
$("#translatorCareerModal").modal('show'); addBody.find(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
if(hisGubun === 'Y'){
$("#kcgCareerTbody").append(addBody.children()[0])
}else{
$("#otherCareerTbody").append(addBody.children()[0])
}
}, },
error:function(e){ error:function(e){
ajaxErrorAction(e); ajaxErrorAction(e);
} }
}); });
} })
$(document).on('click', '#crrInsertBtn', function (){ $(document).on('click', '#crrInsertBtn', function (){
const trKey = Number($("#tcmKey").val());
$.ajax({
url: '/translator/careerInsertPage',
data: {
translatorKey: trKey,
},
type: 'GET',
dataType:"html",
success: function(html){
$("#careerView").empty().append(html)
$("#translatorCareerModal").modal('show');
},
error:function(e){
ajaxErrorAction(e);
}
});
}) })
$(document).on('click', '#crrSaveBtn', function (){ $(document).on('click', '#crrSaveBtn', function (){
if(trCarrerList.length < 1){
alert("새로 입력된 경력정보가 없습니다.");
return false;
}
if(confirm("저장하시겠습니까?")){ if(confirm("저장하시겠습니까?")){
contentFade("in"); contentFade("in");
$.ajax({ $.ajax({
@ -400,9 +210,9 @@ $(document).on('click', '#crrSaveBtn', function (){
} }
}) })
function deleteCareerBtn(crrSeq,trKey){ $(document).on('click', '.deleteCareerBtn', function (){
if(confirm("삭제하시겠습니까?")){ if(confirm("삭제하시겠습니까?")){
$.ajax({ /*$.ajax({
type : 'POST', type : 'POST',
url : "/translator/deleteCareer", url : "/translator/deleteCareer",
data : JSON.stringify({careerSeq:crrSeq, data : JSON.stringify({careerSeq:crrSeq,
@ -418,9 +228,9 @@ function deleteCareerBtn(crrSeq,trKey){
error : function(xhr, status) { error : function(xhr, status) {
alert("삭제 처리에 실패하였습니다"); alert("삭제 처리에 실패하였습니다");
} }
}) })*/
} }
} })
$(document).on('click', '#trDeleteBtn', function (){ $(document).on('click', '#trDeleteBtn', function (){
if(confirm("해임 하시겠습니까?")){ if(confirm("해임 하시겠습니까?")){
@ -468,3 +278,27 @@ $(document).on('click', '#excelDown', function (){
function contentCheck(){
if(!$('#eOgdp1').val()){
alert("관서를 선택해주세요.");
return false;
}
if(!$('#eTrLang').val()){
alert("언어를 선택해주세요.");
return false;
}
if(!$('#eTrEname').val()){
alert("성명을 입력해주세요.");
return false;
}
if(!$('#eDmlYn').val()){
alert("해촉여부를 선택해주세요.");
return false;
}
return true;
}

View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<table>
<tbody id="addBody">
<tr>
<td></td>
<td><input type="text" class="form-control form-control-sm tcDt" placeholder="날짜"></td>
<td><input type="text" class="form-control form-control-sm contents" placeholder="내용"></td>
<td><input type="text" class="form-control form-control-sm remark" placeholder="비고"></td>
<td>
<button type="button" class="btn btn-danger m-0 deleteCareerBtn">삭제</button>
</td>
</tr>
</tbody>
</table>
</html>

View File

@ -126,7 +126,7 @@
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider"> <tbody class="table-group-divider">
<tr class="infoTr" data-bs-toggle="dropdown" aria-expanded="false" th:each="trInfo, idx:${translatorList}"> <tr class="infoTr" th:each="trInfo, idx:${translatorList}">
<input type="hidden" class="trKey" th:value="${trInfo.translatorKey}"> <input type="hidden" class="trKey" th:value="${trInfo.translatorKey}">
<input type="hidden" class="verNo" th:value="${trInfo.versionNo}"> <input type="hidden" class="verNo" th:value="${trInfo.versionNo}">
<td th:text="${idx.count+((searchParams.pageIndex-1)*searchParams.rowCnt)}"></td> <td th:text="${idx.count+((searchParams.pageIndex-1)*searchParams.rowCnt)}"></td>
@ -195,6 +195,5 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</html> </html>

View File

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row mx-0">
<div class="col-12 card bg-light">
<div class="card-body">
<div class="row justify-content-start">
<h6>경력 등록</h6>
<input type="hidden" id="tcInsertKey" th:value="${trKey}">
<div class="card">
<div class="card-body">
<div class="row">
<div id="insertCareer">
<div class="row justify-content-center">
<button class="btn btn-sm btn-outline-primary col-auto" id="crrAddBtn"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-primary" id="crrSaveBtn">저장</button>
</div>
</div>
</div>
</div>
</html>

View File

@ -1,73 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row mx-0">
<div class="col-12 card bg-light">
<div class="card-body">
<div class="row justify-content-start">
<div class="row mb-1">
<label class="col-sm-2 col-form-label text-center">통역인이름</label>
<div class="col-sm-2">
<input type="text" class="form-control text-center" th:value="${trName}">
</div>
</div>
<div class="card">
<div class="card-body">
<div class="row">
<h6>해양경찰청 이력</h6>
<input type="hidden" id="tcmKey" th:value="${trKey}">
<table class="table table-sm table-hover table-bordered text-center" id="categoryTable">
<thead>
<tr>
<th>연번</th>
<th>날짜</th>
<th>내용</th>
<th>비고</th>
<th></th>
</tr>
</thead>
<tbody class="overflow-scroll table-group-divider text-center">
<tr class="" th:each="crrInfo,i:${policeCrr}">
<td th:text="${policeCrr.size()-i.index}"></td>
<td th:text="${crrInfo.tcDt}"></td>
<td th:text="${crrInfo.contents}"></td>
<td th:text="${crrInfo.remark}"></td>
<td><button type="button" class="btn btn-danger m-0" id="deleteCareerBtn" th:onclick="|javascript:deleteCareerBtn('${crrInfo.careerSeq}','${crrInfo.translatorKey}')|" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">삭제</button></td>
</tr>
</tbody>
</table>
</div>
<div class="row">
<h6>타기관 이력</h6>
<table class="table table-sm table-hover table-bordered text-center" id="categoryTable">
<thead>
<tr>
<th>연번</th>
<th>날짜</th>
<th>내용</th>
<th>비고</th>
<th></th>
</tr>
</thead>
<tbody class="overflow-scroll table-group-divider">
<tr class="" th:each="crrInfo,i:${anotherCrr}">
<td th:text="${anotherCrr.size()-i.index}"></td>
<td th:text="${crrInfo.tcDt}"></td>
<td th:text="${crrInfo.contents}"></td>
<td th:text="${crrInfo.remark}"></td>
<td><button type="button" class="btn btn-danger m-0" id="deleteCareerBtn" th:onclick="|javascript:deleteCareerBtn('${crrInfo.careerSeq}','${crrInfo.translatorKey}')|" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">삭제</button></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-primary" id="crrInsertBtn" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">이력등록</button>
</div>
</div>
</div>
</div>
</html>

View File

@ -1,84 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<script type="text/javascript" th:src="@{/js/translator/translator.js}"></script>
<div class="card">
<div class="card-header bg-white">
<div class="row justify-content-between">
<div class="col-auto">민간통역인현황</div>
<div class="col-auto"><a href="/translator/info" class="link-dark"><i class="bi bi-list"></i></a></div>
</div>
</div>
<div class="card-body">
<input type="hidden" id="selectedKey">
<input type="hidden" id="selectedVerNo">
<table class="table table-sm table-hover table-bordered">
<thead>
<tr>
<th>관서명</th>
<th>언어</th>
<th>성명</th>
<th>위촉일</th>
<th>연락처</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr class="userInfoTr" data-bs-toggle="dropdown" aria-expanded="false" th:each="trInfo:${translatorList}">
<input type="hidden" class="trKey" th:value="${trInfo.translatorKey}">
<input type="hidden" class="verNo" th:value="${trInfo.versionNo}">
<td>
<p class="m-0" th:text="${trInfo.ogdp1}"></p>
<ul class="dropdown-menu">
<li><a class="dropdown-item careerInfo" href="#">경력관리</a></li>
<li><a class="dropdown-item translatorInfo" href="#">인적사항</a></li>
</ul>
</td>
<td th:text="${trInfo.trLang}"></td>
<td th:text="${trInfo.trName}"></td>
<td th:text="${trInfo.aptDt}"></td>
<td th:text="${trInfo.trPhone}"></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal fade" id="translatorEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="authEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header bg-dark">
<h5 class="modal-title text-white" id="translatorEditModalLabel">통역인 정보</h5>
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div id="KeyValue">
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="accessTab" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">인적사항</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="approvalTab" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">수정이력</button>
</li>
</ul>
<div class="tab-content bg-white border border-top-0" id="configInfo">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="translatorCareerModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="authEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header bg-dark">
<h5 class="modal-title text-white" id="translatorCareerModalLabel">경력현황</h5>
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="tab-content border bg-white border-top-0" id="careerView">
</div>
</div>
</div>
</div>
</div>
</html>

View File

@ -7,142 +7,286 @@
<div id="KeyValue"> <div id="KeyValue">
</div> </div>
<div class="modal-body"> <div class="modal-body">
<ul class="nav nav-tabs" id="userTab" role="tablist"> <ul class="nav nav-tabs" id="translatorTab" role="tablist">
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link active" id="accessTab" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">인적사항</button> <button class="nav-link active" id="infoTab" data-bs-toggle="tab" data-bs-target="#infoTabPanel" type="button" role="tab" aria-controls="infoTabPanel" aria-selected="true">인적사항</button>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation" th:if="${historyList ne null}">
<button class="nav-link" id="approvalTab" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">수정이력</button> <button class="nav-link" id="historyTab" data-bs-toggle="tab" data-bs-target="#historyTabPanel" type="button" role="tab" aria-controls="historyTabPanel" aria-selected="false">수정이력</button>
</li>
<li class="nav-item" role="presentation" th:if="${kcgCareerList ne null or otherCareerList ne null}">
<button class="nav-link" id="careerTab" data-bs-toggle="tab" data-bs-target="#careerTabPanel" type="button" role="tab" aria-controls="careerTabPanel" aria-selected="false">경력</button>
</li> </li>
</ul> </ul>
<div class="tab-content bg-white border border-top-0" id="configInfo"> <div class="tab-content bg-white border border-top-0" id="configInfo">
<form id="trInfoUpdate" method="post"> <div class="tab-pane fade p-2 show active" id="infoTabPanel" role="tabpanel" tabindex="0">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/> <form id="trInfoForm" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/> <input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" class="translatorKey" name="translatorKey" th:value="${trInfo.translatorKey}"/> <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" class="versionNo" name="versionNo" th:value="${trInfo.versionNo}"/> <input type="hidden" class="translatorKey" name="translatorKey" th:value="${trInfo.translatorKey}"/>
<br> <input type="hidden" class="versionNo" name="versionNo" th:value="${trInfo.versionNo}"/>
<div class="pl-15"> <br>
<div class="row mb-1"> <div class="row justify-content-center">
<label for="eOgdp1" class="col-sm-1 col-form-label-sm text-center">관서</label> <div class="col-8">
<div class="col-sm-2"> <div class="row mb-1">
<select class="form-select" id="eOgdp1" name="ogdp1" th:disabled="${accessAuth ne 'ACC003'}"> <label for="eOgdp1" class="col-sm-1 col-form-label-sm text-center">관서</label>
<option value="">선택</option> <div class="col-sm-3">
<th:block th:each="commonCode:${session.commonCode.get('OG')}"> <select class="form-select" id="eOgdp1" name="ogdp1" th:disabled="${!(trInfo.translatorKey eq null and accessAuth ne 'ACC001') and !(accessAuth eq 'ACC003')}">
<th:block th:if="${#lists.contains(mgtOrganList, commonCode.itemCd)}"> <option value="">선택</option>
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.ogdp1}"></option> <th:block th:each="commonCode:${session.commonCode.get('OG')}">
</th:block> <th:block th:if="${#lists.contains(mgtOrganList, commonCode.itemCd)}">
</th:block> <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.ogdp1}"></option>
</select> </th:block>
</div> </th:block>
<label for="eTrLang" class="col-sm-1 col-form-label-sm text-center">언어</label> </select>
<div class="col-sm-2"> </div>
<select class="form-select" id="eTrLang" name="trLang"> <label for="eTrLang" class="col-sm-1 col-form-label-sm text-center">언어</label>
<option value="">선택</option> <div class="col-sm-3">
<th:block th:each="commonCode:${session.commonCode.get('LGG')}"> <select class="form-select" id="eTrLang" name="trLang">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.trLang}"></option> <option value="">선택</option>
</th:block> <th:block th:each="commonCode:${session.commonCode.get('LGG')}">
</select> <option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.trLang}"></option>
</div> </th:block>
<label for="eTrCareer" class="col-sm-1 col-form-label-sm text-center">경력</label> </select>
<div class="col-sm-2"> </div>
<input type="text" class="form-control" id="eTrCareer" name="trCareer" th:value="${trInfo.trCareer}"> <label for="eTrCareer" class="col-sm-1 col-form-label-sm text-center">경력</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="eTrCareer" name="trCareer" th:value="${trInfo.trCareer}">
</div>
</div>
<div class="row mb-1">
<label for="eTrEname" class="col-sm-1 col-form-label-sm text-center">성명</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="eTrEname" name="trName" th:value="${trInfo.trName}">
</div>
<label for="eTrSex" class="col-sm-1 col-form-label-sm text-center">성별</label>
<div class="col-sm-3">
<select class="form-select" id="eTrSex" name="trSex">
<option value="">선택</option>
<th:block th:each="code:${session.commonCode.get('SEX')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trSex}"></option>
</th:block>
</select>
</div>
<label for="eTrPhone" class="col-sm-1 col-form-label-sm text-center">연락처</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="eTrPhone" name="trPhone" th:value="${trInfo.trPhone}">
</div>
</div>
<div class="row mb-1">
<label for="eTrNny" class="col-sm-1 col-form-label-sm text-center">국적</label>
<div class="col-sm-3">
<select class="form-select" id="eTrNny" name="trNny">
<option value="">선택</option>
<th:block th:each="code:${session.commonCode.get('NNY')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trNny}"></option>
</th:block>
</select>
</div>
<label for="enaturalization" class="col-sm-1 col-form-label-sm text-center">귀화</label>
<div class="col-sm-3">
<select class="form-select" id="enaturalization" name="naturalization" th:disabled="${trInfo.trNny ne 'NNY001'}">
<option value="">선택</option>
<option value="O" th:selected="${trInfo.naturalization eq 'O'}">O</option>
<option value="X" th:selected="${trInfo.naturalization eq 'X'}">X</option>
</select>
</div>
</div>
<div class="row mb-1">
<label for="eTrAge" class="col-sm-1 col-form-label-sm text-center">나이</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="eTrAge" name="trAge" th:value="${trInfo.trAge}">
</div>
<label for="eTrEdu" class="col-sm-1 col-form-label-sm text-center">학력</label>
<div class="col-sm-3">
<select class="form-select" id="eTrEdu" name="trEdu">
<option value="">선택</option>
<th:block th:each="code:${session.commonCode.get('EDU')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trEdu}"></option>
</th:block>
</select>
</div>
<label for="eTrCft" class="col-sm-1 col-form-label-sm text-center">자격증</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="eTrCft" name="trCft" th:value="${trInfo.trCft}">
</div>
</div>
<div class="row mb-1">
<label for="eTrVisa" class="col-sm-1 col-form-label-sm text-center">비자</label>
<div class="col-sm-3">
<select class="form-select" id="eTrVisa" name="trVisa">
<option value="">선택</option>
<th:block th:each="code:${session.commonCode.get('VISA')}">
<option th:if="${code.useChk eq 'T' or code.itemCd eq trInfo.trVisa}" th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trVisa}"></option>
</th:block>
</select>
</div>
<label for="viewAptDt" class="col-sm-1 col-form-label-sm text-center">위촉일</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="viewAptDt" name="aptDt" th:value="${trInfo.aptDt}" readonly>
</div>
<label for="eDmlYn" class="col-sm-1 col-form-label-sm text-center">해촉</label>
<div class="col-sm-3">
<select class="form-select" id="eDmlYn" name="dmlYn">
<option value="">선택</option>
<option value="O" th:selected="'O' == ${trInfo.dmlYn}">O</option>
<option value="X" th:selected="'X' == ${trInfo.dmlYn}">X</option>
</select>
</div>
</div>
<div class="mb-2 row">
<label for="eRemark" class="col-sm-1 col-form-label-sm text-center">비고</label>
<div class="col-sm-11">
<input type="text" class="form-control" id="eRemark" name="remark" th:value="${trInfo.remark}">
</div>
</div>
<div class="row justify-content-end">
<button type="button" class="btn btn-secondary col-auto mx-1" id="trDeleteBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">해임</button>
<button type="button" class="btn btn-warning col-auto mx-1" id="updateBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">수정</button>
<button type="button" class="btn btn-primary col-auto mx-1" id="saveBtn" th:if="${accessAuth ne 'ACC001' and trInfo.translatorKey eq null}">저장</button>
</div>
</div> </div>
</div> </div>
<div class="row mb-1"> </form>
<label for="eTrEname" class="col-sm-1 col-form-label-sm text-center">성명</label> </div>
<div class="col-sm-2"> <div class="tab-pane fade p-2" id="historyTabPanel" role="tabpanel" tabindex="0">
<input type="text" class="form-control" id="eTrEname" name="trName" th:value="${trInfo.trName}"> <div class="row mx-0">
</div> <div class="col-100 card text-center">
<label for="eTrSex" class="col-sm-1 col-form-label-sm text-center">성별</label> <div class="card-body">
<div class="col-sm-2"> <div class="row">
<select class="form-select" id="eTrSex" name="trSex"> </div>
<option value="">선택</option> <div class="row justify-content-start">
<th:block th:each="commonCode:${session.commonCode.get('SEX')}"> <div class="col-4">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.trSex}"></option> <div class="card">
</th:block> <div class="card-body">
</select> <div class="row">
</div> <table class="table table-sm table-hover table-bordered" id="categoryTable">
<label for="eTrPhone" class="col-sm-1 col-form-label-sm text-center">연락처</label> <thead>
<div class="col-sm-2"> <tr>
<input type="text" class="form-control" id="eTrPhone" name="trPhone" th:value="${trInfo.trPhone}"> <th></th>
</div> <th>작성자</th>
</div> <th>등록일</th>
<div class="row mb-1"> </tr>
<label for="eTrNny" class="col-sm-1 col-form-label-sm text-center">국적</label> </thead>
<div class="col-sm-2"> <tbody class="table-group-divider overflow-scroll">
<select class="form-select" id="eTrNny" name="trNny"> <tr class="historyInfoTr" th:each="trInfo:${historyList}">
<option value="">선택</option> <input type="hidden" class="trKey" th:value="${trInfo.translatorKey}">
<th:block th:each="code:${session.commonCode.get('NNY')}"> <input type="hidden" class="verNo" th:value="${trInfo.versionNo}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trNny}"></option> <td><input type="checkbox" class="hisChk"></td>
</th:block> <td>
</select> <th:block th:each="code:${session.commonCode.get('JT')}">
</div> <th:block th:if="${code.itemCd eq trInfo.wrtTitle}" th:text="${code.itemValue}"></th:block>
<label for="enaturalization" class="col-sm-1 col-form-label-sm text-center">귀화</label> </th:block>
<div class="col-sm-2"> <th:block th:text="${trInfo.wrtNm}"></th:block>
<select class="form-select" id="enaturalization" name="naturalization" th:disabled="${trInfo.trNny ne 'NNY001'}"> </td>
<option value="">선택</option> <td th:text="${#temporals.format(trInfo.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<option value="O" th:selected="${trInfo.naturalization eq 'O'}">O</option> </tr>
<option value="X" th:selected="${trInfo.naturalization eq 'X'}">X</option> </tbody>
</select> </table>
</div> </div>
</div> </div>
<div class="row mb-1"> </div>
<label for="eTrAge" class="col-sm-1 col-form-label-sm text-center">나이</label> </div>
<div class="col-sm-2"> <div class="col-8" id="valueDiv">
<input type="text" class="form-control" id="eTrAge" name="trAge" th:value="${trInfo.trAge}">
</div> </div>
<label for="eTrEdu" class="col-sm-1 col-form-label-sm text-center">학력</label> </div>
<div class="col-sm-2">
<select class="form-select" id="eTrEdu" name="trEdu">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('EDU')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd} == ${trInfo.trEdu}"></option>
</th:block>
</select>
</div>
<label for="eTrCft" class="col-sm-1 col-form-label-sm text-center">자격증</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="eTrCft" name="trCft" th:value="${trInfo.trCft}">
</div>
</div>
<div class="row mb-1">
<label for="eTrVisa" class="col-sm-1 col-form-label-sm text-center">비자</label>
<div class="col-sm-2">
<select class="form-select" id="eTrVisa" name="trVisa">
<option value="">선택</option>
<th:block th:each="code:${session.commonCode.get('VISA')}">
<option th:if="${code.useChk eq 'T' or code.itemCd eq trInfo.trVisa}" th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq trInfo.trVisa}"></option>
</th:block>
</select>
</div>
<label for="viewAptDt" class="col-sm-1 col-form-label-sm text-center">위촉일</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="viewAptDt" name="aptDt" th:value="${trInfo.aptDt}" readonly>
</div>
<label for="eDmlYn" class="col-sm-1 col-form-label-sm text-center">해촉</label>
<div class="col-sm-2">
<select class="form-select" id="eDmlYn" name="dmlYn">
<option value="">선택</option>
<option value="O" th:selected="'O' == ${trInfo.dmlYn}">O</option>
<option value="X" th:selected="'X' == ${trInfo.dmlYn}">X</option>
</select>
</div>
</div>
<div class="mb-2 row">
<label for="eRemark" class="col-sm-1 col-form-label-sm text-center">비고</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="eRemark" name="remark" th:value="${trInfo.remark}">
</div> </div>
</div> </div>
</div> </div>
</form> </div>
<div class="tab-pane fade p-2" id="careerTabPanel" role="tabpanel" tabindex="0">
<div class="row">
<h6>해양경찰청 이력</h6>
<table class="table table-sm table-hover table-bordered text-center">
<colgroup>
<col style="width: 5%">
<col style="width: 15%">
<col style="width: 35%">
<col style="width: 35%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>연번</th>
<th>날짜</th>
<th>내용</th>
<th>비고</th>
<th></th>
</tr>
</thead>
<tbody class="overflow-scroll table-group-divider text-center" id="kcgCareerTbody">
<tr class="" th:each="crrInfo,i:${kcgCareerList}">
<td th:text="${kcgCareerList.size()-i.index}"></td>
<td th:text="${crrInfo.tcDt}"></td>
<td th:text="${crrInfo.contents}"></td>
<td th:text="${crrInfo.remark}"></td>
<td>
<button type="button" class="btn btn-danger m-0 deleteCareerBtn"
th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">삭제</button>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<button type="button" class="btn btn-sm btn-outline-primary addCareerBtn"
data-hisgubun="Y" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">
<i class="bi bi-plus"></i>
</button>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="row">
<h6>타기관 이력</h6>
<table class="table table-sm table-hover table-bordered text-center">
<colgroup>
<col style="width: 5%">
<col style="width: 15%">
<col style="width: 35%">
<col style="width: 35%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>연번</th>
<th>날짜</th>
<th>내용</th>
<th>비고</th>
<th></th>
</tr>
</thead>
<tbody class="overflow-scroll table-group-divider" id="otherCareerTbody">
<tr class="" th:each="crrInfo,i:${otherCareerList}">
<td th:text="${otherCareerList.size()-i.index}"></td>
<td th:text="${crrInfo.tcDt}"></td>
<td th:text="${crrInfo.contents}"></td>
<td th:text="${crrInfo.remark}"></td>
<td>
<button type="button" class="btn btn-danger m-0 deleteCareerBtn"
th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">삭제</button>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<button type="button" class="btn btn-sm btn-outline-primary addCareerBtn"
data-hisgubun="N" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}">
<i class="bi bi-plus"></i>
</button>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="row justify-content-end">
<button type="button" class="btn btn-primary col-auto" id="crrInsertBtn" th:if="${accessAuth eq 'ACC003' or wrtUserSeq eq userSeq}" th:data-translatorkey="${trInfo.translatorKey}">저장</button>
</div>
</div>
</div> </div>
</div> </div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-secondary" id="trDeleteBtn" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">해임</button>
<button type="button" class="btn btn-warning" id="updateBtn" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">수정</button>
</div>
</html> </html>

View File

@ -1,110 +1,65 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"> <html lang="ko" xmlns:th="http://www.thymeleaf.org">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/> <div class="row mb-1">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/> <label class="col-sm-1 col-form-label-sm text-center">관서</label>
<div class="row mx-0"> <label class="col-sm-3 col-form-label-sm text-start">
<div class="col-100 card text-center"> <th:block th:each="code:${session.commonCode.get('OG')}">
<div class="card-body"> <th:block th:if="${code.itemCd eq trInfo.ogdp1}" th:text="${code.itemValue}"></th:block>
<div class="row"> </th:block>
</div> </label>
<div class="row justify-content-start"> <label class="col-sm-1 col-form-label-sm text-center">언어</label>
<div class="col-4"> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trLang}"></label>
<div class="card"> <label class="col-sm-1 col-form-label-sm text-center">경력</label>
<div class="card-body"> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trCareer}"></label>
<div class="row"> </div>
<table class="table table-sm table-hover table-bordered" id="categoryTable"> <div class="row mb-1">
<thead> <label class="col-sm-1 col-form-label-sm text-center">성명</label>
<tr> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trName}"></label>
<th></th> <label class="col-sm-1 col-form-label-sm text-center">성별</label>
<th>작성자</th> <label class="col-sm-3 col-form-label-sm text-start">
<th>등록일</th> <th:block th:each="code:${session.commonCode.get('SEX')}">
</tr> <th:block th:if="${code.itemCd eq trInfo.trSex}" th:text="${code.itemValue}"></th:block>
</thead> </th:block>
<tbody class="table-group-divider overflow-scroll"> </label>
<tr class="historyInfoTr" th:each="trInfo:${historyList}"> <label class="col-sm-1 col-form-label-sm text-center">연락처</label>
<td><input type="checkbox" class="hisChk"> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trPhone}"></label>
<input type="hidden" class="trKey" th:value="${trInfo.translatorKey}"> </div>
<input type="hidden" class="verNo" th:value="${trInfo.versionNo}"> <div class="row mb-1">
</td> <label class="col-sm-1 col-form-label-sm text-center">국적</label>
<td th:text="|${trInfo.wrtTitle} ${trInfo.wrtNm}|"></td> <label class="col-sm-3 col-form-label-sm text-start">
<td th:text="${#temporals.format(trInfo.wrtDt, 'yyyy-MM-dd HH:mm')}"></td> <th:block th:each="code:${session.commonCode.get('NNY')}">
</tr> <th:block th:if="${code.itemCd eq trInfo.trNny}" th:text="${code.itemValue}"></th:block>
</tbody> </th:block>
</table> </label>
</div> <label class="col-sm-1 col-form-label-sm text-center">귀화</label>
</div> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.naturalization}"></label>
</div> </div>
</div> <div class="row mb-1">
<div class="col-8" id="valueDiv"> <label class="col-sm-1 col-form-label-sm text-center">나이</label>
<div class="row mb-1"> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trAge}"></label>
<label for="ogCd" class="col-sm-1 col-form-label-sm text-center">관서</label> <label class="col-sm-1 col-form-label-sm text-center">학력</label>
<div class="col-sm-3"> <label class="col-sm-3 col-form-label-sm text-start">
<input type="text" class="form-control" id="ogdp1V" readonly> <th:block th:each="code:${session.commonCode.get('EDU')}">
</div> <th:block th:if="${code.itemCd eq trInfo.trEdu}" th:text="${code.itemValue}"></th:block>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">언어</label> </th:block>
<div class="col-sm-3"> </label>
<input type="text" class="form-control" id="trLangV" readonly> <label class="col-sm-1 col-form-label-sm text-center">자격증</label>
</div> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.trCft}"></label>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">경력</label> </div>
<div class="col-sm-3"> <div class="row mb-1">
<input type="text" class="form-control" id="trCareerV" readonly> <label class="col-sm-1 col-form-label-sm text-center">비자</label>
</div> <label class="col-sm-3 col-form-label-sm text-start">
</div> <th:block th:each="code:${session.commonCode.get('VISA')}">
<div class="row mb-1"> <th:block th:if="${code.itemCd eq trInfo.trVisa}" th:text="${code.itemValue}"></th:block>
<label for="ogCd" class="col-sm-1 col-form-label-sm text-center">성명</label> </th:block>
<div class="col-sm-3"> </label>
<input type="text" class="form-control" id="trNameV" readonly> <label class="col-sm-1 col-form-label-sm text-center">위촉일</label>
</div> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.aptDt}"></label>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">성별</label> <label class="col-sm-1 col-form-label-sm text-center">해촉</label>
<div class="col-sm-3"> <label class="col-sm-3 col-form-label-sm text-start" th:text="${trInfo.dmlYn}"></label>
<input type="text" class="form-control" id="trSexV"readonly> </div>
</div> <div class="row mb-1">
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">연락처</label> <label class="col-sm-1 col-form-label-sm text-center">비고</label>
<div class="col-sm-3"> <label class="col-sm-11 col-form-label-sm text-start" th:text="${trInfo.remark}"></label>
<input type="text" class="form-control" id="trPhoneV" readonly> </div>
</div>
</div>
<div class="row mb-1">
<label for="ogCd" class="col-sm-1 col-form-label-sm text-center">국적</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trNnyV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">나이</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trAgeV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">학력</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trEduV" readonly>
</div>
</div>
<div class="row mb-1">
<label for="ogCd" class="col-sm-1 col-form-label-sm text-center">자격증</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trCftV"readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">비자</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="trVisaV" readonly>
</div>
<label for="ofcCd" class="col-sm-1 col-form-label-sm text-center">위촉일</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="aptDtV" name="aptDt">
</div>
</div>
<div class="row mb-1">
<label for="ogCd" class="col-sm-1 col-form-label-sm text-center">해촉</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="dmlYnV" readonly>
</div>
<label for="tel" class="col-sm-1 col-form-label-sm text-center">비고</label>
<div class="col-sm-7">
<input type="text" class="form-control" id="remarkV" readonly>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</html> </html>