정원/현원 현황 페이지 엑셀 다운로드 추가.

외사경찰 > 경력현황 작업중.
강석 최 2022-11-17 14:22:45 +09:00
parent 44edcd0ceb
commit b544f6296a
19 changed files with 496 additions and 506 deletions

View File

@ -44,8 +44,8 @@ public class CrackdownStatusController {
for (CrackdownStatus cds:crackdownStatusList) {
cds.setViolationList(violationRepository.findByFbKey(cds.getFbKey()));
cds.setProcessResult(processResultRepository.findByCdsKey(cds.getCdsKey()).orElse(null));
cds.setFishingBoat(fishingBoatRepository.findByCdsKey(cds.getCdsKey()).orElse(null));
cds.setProcessResult(processResultRepository.findByCdsKey(cds.getCdsKey()).orElse(new ProcessResult()));
cds.setFishingBoat(fishingBoatRepository.findByCdsKey(cds.getCdsKey()).orElse(new FishingBoat()));
cds.setSailorList(sailorRepository.findByFbKey(cds.getFbKey()));
}

View File

@ -26,9 +26,9 @@ public class FishingBoatBaseEntity extends BaseModel {
@Column(name = "nationality")
private String nationality;
@Column(name = "sailor_cnt")
private Integer sailorCnt;
private Integer sailorCnt=0;
@Column(name = "ton_cnt")
private Double tonCnt;
private Double tonCnt=0d;
@Column(name = "fishery_type")
private String fisheryType;
@Column(name = "boat_material")
@ -40,17 +40,17 @@ public class FishingBoatBaseEntity extends BaseModel {
@Column(name = "offense_type")
private String offenseType;
@Column(name = "offense_weight")
private Double offenseWeight;
private Double offenseWeight=0d;
@Column(name = "offense_quantity")
private Integer offenseQuantity;
private Integer offenseQuantity=0;
@Column(name = "offense_amount")
private Integer offenseAmount;
private Integer offenseAmount=0;
@Column(name = "offense_illegal_waste_quantity")
private Integer offenseIllegalWasteQuantity;
private Integer offenseIllegalWasteQuantity=0;
@Column(name = "dambo_unpaid_amount")
private Integer damboUnpaidAmount;
private Integer damboUnpaidAmount=0;
@Column(name = "dambo_payment")
private Integer damboPayment;
private Integer damboPayment=0;
@Column(name = "payment_payment_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime paymentPaymentDt;
@ -67,11 +67,11 @@ public class FishingBoatBaseEntity extends BaseModel {
@Column(name = "catch_fish_species")
private String catchFishSpecies;
@Column(name = "catch_cnt")
private Integer catchCnt;
private Integer catchCnt=0;
@Column(name = "offense_fish_species")
private String offenseFishSpecies;
@Column(name = "offense_catch_cnt")
private Integer offenseCatchCnt;
private Integer offenseCatchCnt=0;
@Column(name = "save_yn")
private String saveYn;
@Column(name = "wrt_organ")

View File

@ -42,7 +42,7 @@ public class FaispController {
@GetMapping("/policeList")
public ModelAndView policeList(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("faisp/policeList");
ModelAndView mav = new ModelAndView("faisp/police/policeList");
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
if(userInfo.getUserStatus() == null) {
userInfo.setUserStatus("USC003");
@ -91,7 +91,7 @@ public class FaispController {
@GetMapping("/policeEditModal")
public ModelAndView policeEditModal(@AuthenticationPrincipal UserInfo loginUser,UserInfo userInfo){
ModelAndView mav = new ModelAndView("/faisp/policeEditModal");
ModelAndView mav = new ModelAndView("/faisp/police/policeEditModal");
mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG", ""));
mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC", ""));
mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT", ""));
@ -115,7 +115,7 @@ public class FaispController {
@GetMapping("/policeHistory")
public ModelAndView policeHistory(@AuthenticationPrincipal UserInfo loginUser,UserInfoHistory userInfoHistory){
ModelAndView mav = new ModelAndView("/faisp/policeHistory");
ModelAndView mav = new ModelAndView("/faisp/police/policeHistory");
mav.addObject("userStatus", userInfoService.selectuserStatus(userInfoHistory));
mav.addObject("policeList", userInfoService.selectPoliceHisList(userInfoHistory));
@ -201,7 +201,7 @@ public class FaispController {
@GetMapping("/careerMgt")
public ModelAndView careerMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){
ModelAndView mav = new ModelAndView("faisp/careerMgt");
ModelAndView mav = new ModelAndView("faisp/career/careerMgt");
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
if(userInfo.getUserStatus() == null) {
userInfo.setUserStatus("USC003");
@ -222,7 +222,7 @@ public class FaispController {
@GetMapping("/educationMgt")
public ModelAndView educationMgt(@AuthenticationPrincipal UserInfo loginUser, UserInfo userInfo, HttpServletResponse response){
ModelAndView mav = new ModelAndView("faisp/educationMgt");
ModelAndView mav = new ModelAndView("faisp/education/educationMgt");
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
if(userInfo.getUserStatus() == null) {
userInfo.setUserStatus("USC003");
@ -243,7 +243,7 @@ public class FaispController {
@GetMapping("/eduEditModal")
public ModelAndView eduEditModal(@AuthenticationPrincipal UserInfo loginUser,UserEdu userEdu){
ModelAndView mav = new ModelAndView("/faisp/eduEditModal");
ModelAndView mav = new ModelAndView("/faisp/education/eduEditModal");
//메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/educationMgt").get(0).getAccessAuth();
@ -257,16 +257,13 @@ public class FaispController {
@PostMapping("/saveEdu")
@ResponseBody
public int saveEdu(@AuthenticationPrincipal UserInfo loginUser,@RequestBody List<UserEdu> userEdu){
System.out.println("userEdu"+userEdu);
int userSeq = userInfoService.saveEdu(loginUser,userEdu);
return userSeq;
return userInfoService.saveEdu(loginUser,userEdu);
}
@PostMapping("/deleteEdu")
@ResponseBody
public int deleteEdu(@RequestBody UserEdu userEdu) {
int userSeq = userInfoService.deleteEdu(userEdu);
return userSeq;
return userInfoService.deleteEdu(userEdu);
}
private List<PersonnelStatus> calcStatusList(List<PersonnelStatus> statusList) {

View File

@ -227,4 +227,51 @@ function dateTimeCalc(startDateTime, endDateTime) {
}
return null;
}
function exportExcel(name, tableId){
var excelHandler = {
getExcelFileName : function(){
return name+'_'+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return name;
},
getExcelData : function(){
return document.getElementById(tableId); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday(){
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (1 + date.getMonth())).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}

View File

@ -218,7 +218,7 @@ $(document).on('change', '#processStatus', function (){
});
$(document).on('click', '#cdsDownExcel', function (){
exportExcel('불법조업 불법어선 단속현황');
exportExcel('불법조업 불법어선 단속현황', 'cdsTable');
});
function getCrackdownStatusHistoryDetail(versionNo, cdsKey){
@ -469,50 +469,3 @@ function contentCheck(){
return flag;
}
function exportExcel(name){
var excelHandler = {
getExcelFileName : function(){
return name+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return name;
},
getExcelData : function(){
return document.getElementById('cdsTable'); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday(){
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (1 + date.getMonth())).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}

View File

@ -130,7 +130,7 @@ $(document).on('change', '#executionDetail', function (){
});
$(document).on('click', '#processResultDownExcel', function (){
exportExcel('불법조업 불법어선 처리현황');
exportExcel('불법조업 불법어선 처리현황', 'prTable');
});
function getProcessResultHistoryDetail(versionNo, prKey, cdsKey, fbKey){
@ -326,68 +326,4 @@ function saveProcessResult(saveYn){
function contentCheck(){
let flag = true;
return flag;
}
function exportExcel(name){
var excelHandler = {
getExcelFileName : function(){
return name+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return name;
},
getExcelData : function(){
return document.getElementById('prTable'); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday(){
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (1 + date.getMonth())).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}
function dateTimeCalc(startDateTime, endDateTime) {
if (startDateTime != '' &&endDateTime != '' && startDateTime != undefined && endDateTime != undefined) {
const startDate = new Date(startDateTime);
const endDate = new Date(endDateTime);
let diffTime = endDate.getTime() - startDate.getTime();
const day = Math.floor(diffTime / (1000* 60 * 60 * 24));
const hour = Math.floor((diffTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minute = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60));
return day + '일' + hour + '시간' + minute + '분';
}
return null;
}
}

View File

@ -86,7 +86,7 @@ $(document).on('change', 'select[name="boatNameKr"]', function (){
$(document).on('click', '#sailorDownExcel', function (){
exportExcel('불법조업 불법어선 선원세부현황');
exportExcel('불법조업 불법어선 선원세부현황', 'sailorTable');
});
function getSailorHistoryDetail(versionNo, sailorKey, cdsKey, fbKey){
@ -253,66 +253,3 @@ function contentCheck(){
return flag;
}
function exportExcel(name){
var excelHandler = {
getExcelFileName : function(){
return name+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return name;
},
getExcelData : function(){
return document.getElementById('sailorTable'); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday(){
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (1 + date.getMonth())).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}
function dateTimeCalc(startDateTime, endDateTime) {
if (startDateTime != '' &&endDateTime != '' && startDateTime != undefined && endDateTime != undefined) {
const startDate = new Date(startDateTime);
const endDate = new Date(endDateTime);
let diffTime = endDate.getTime() - startDate.getTime();
const day = Math.floor(diffTime / (1000* 60 * 60 * 24));
const hour = Math.floor((diffTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minute = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60));
return day + '일' + hour + '시간' + minute + '분';
}
return null;
}

View File

@ -0,0 +1,169 @@
$(document).on('change', '#year', function (){
$("#searchFm").submit();
})
$(document).on('click', '#personnelStatusEditModalBtn', function (){
$("#personnelStatusEditDiv").empty();
$("#personnelStatusEditModal").modal('show');
})
$(document).on('click', '#personnelStatusAddBtn', function (){
$.ajax({
url: '/faisp/personnelStatusRow',
type: 'GET',
dataType:"html",
success: function(html){
$("#personnelStatusEditDiv").append(html)
},
error:function(){
}
});
})
$(document).on('click', '.personnelStatusRemoveBtn', function (){
$(this).parents(".personnelStatusRow").remove();
})
$(document).on('change', '.ogCd', function (){
const personnelStatusRow = $(this).parents(".personnelStatusRow");
if(this.value !== ''){
personnelStatusRow.find(".nowPersonnelStatusBtn")[0].className = "btn btn-sm btn-success nowPersonnelStatusBtn";
$.ajax({
url: '/faisp/selectPersonnelStatus',
type: 'GET',
data: {year: new Date().getFullYear(), ogCd: this.value},
dataType:"json",
success: function(data){
personnelStatusRow.find(".jt007Max").val(data.jt007Max);
personnelStatusRow.find(".jt007Now").val(data.jt007Now);
personnelStatusRow.find(".jt006Max").val(data.jt006Max);
personnelStatusRow.find(".jt006Now").val(data.jt006Now);
personnelStatusRow.find(".jt005Max").val(data.jt005Max);
personnelStatusRow.find(".jt005Now").val(data.jt005Now);
personnelStatusRow.find(".jt004Max").val(data.jt004Max);
personnelStatusRow.find(".jt004Now").val(data.jt004Now);
personnelStatusRow.find(".jt003Max").val(data.jt003Max);
personnelStatusRow.find(".jt003Now").val(data.jt003Now);
personnelStatusRow.find(".jt002Max").val(data.jt002Max);
personnelStatusRow.find(".jt002Now").val(data.jt002Now);
personnelStatusRow.find(".jt001Max").val(data.jt001Max);
personnelStatusRow.find(".jt001Now").val(data.jt001Now);
},
error:function(){
}
});
}else{
personnelStatusRow.find(".nowPersonnelStatusBtn")[0].className = "btn btn-sm btn-success nowPersonnelStatusBtn disabled";
}
})
$(document).on('click', '.nowPersonnelStatusBtn', function (){
const personnelStatusRow = $(this).parents(".personnelStatusRow");
$.ajax({
url: '/faisp/nowPersonnelStatus',
type: 'GET',
data: {ogCd: personnelStatusRow.find(".ogCd").val()},
dataType:"json",
success: function(data){
if(data === null){
alert("결과가 없습니다.")
}else{
personnelStatusRow.find(".jt007Now").val(data.jt007Now);
personnelStatusRow.find(".jt006Now").val(data.jt006Now);
personnelStatusRow.find(".jt005Now").val(data.jt005Now);
personnelStatusRow.find(".jt004Now").val(data.jt004Now);
personnelStatusRow.find(".jt003Now").val(data.jt003Now);
personnelStatusRow.find(".jt002Now").val(data.jt002Now);
personnelStatusRow.find(".jt001Now").val(data.jt001Now);
}
},
error:function(){
alert("조회에 실패하였습니다.")
}
});
})
$(document).on('click', '#saveBtn', function (){
if($(".ogCd").length===0){
alert("저장할 항목이 없습니다.")
}else{
if(personnelStatusOgCdCheck()){
if(confirm("저장하시겠습니까?")){
contentFade("in");
const personnelStatusList = [];
const year = new Date().getFullYear();
$.each($(".personnelStatusRow"), function(idx, personnelStatus){
const row = $(personnelStatus);
personnelStatusList.push({});
personnelStatusList[idx].year = year;
personnelStatusList[idx].ogCd = row.find(".ogCd").val()
personnelStatusList[idx].jt007Max = row.find(".jt007Max").val()
personnelStatusList[idx].jt007Now = row.find(".jt007Now").val()
personnelStatusList[idx].jt006Max = row.find(".jt006Max").val()
personnelStatusList[idx].jt006Now = row.find(".jt006Now").val()
personnelStatusList[idx].jt005Max = row.find(".jt005Max").val()
personnelStatusList[idx].jt005Now = row.find(".jt005Now").val()
personnelStatusList[idx].jt004Max = row.find(".jt004Max").val()
personnelStatusList[idx].jt004Now = row.find(".jt004Now").val()
personnelStatusList[idx].jt003Max = row.find(".jt003Max").val()
personnelStatusList[idx].jt003Now = row.find(".jt003Now").val()
personnelStatusList[idx].jt002Max = row.find(".jt002Max").val()
personnelStatusList[idx].jt002Now = row.find(".jt002Now").val()
personnelStatusList[idx].jt001Max = row.find(".jt001Max").val()
personnelStatusList[idx].jt001Now = row.find(".jt001Now").val()
})
$.ajax({
type : 'POST',
data : JSON.stringify(personnelStatusList),
url : "/faisp/savePersonnelStatus",
contentType: 'application/json',
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function() {
alert("저장되었습니다.");
contentFade("out");
location.reload();
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.");
contentFade("out");
}
})
}
}
}
})
$(document).on('click', '.statusTr', function (){
const statusTr = $(this);
$.ajax({
url: '/faisp/personnelStatusHistory',
type: 'GET',
data: {year: statusTr.find(".year").val(), ogCd: statusTr.find(".ogCd").val()},
dataType:"html",
success: function(html){
$("#personnelStatusHistoryModalBody").empty().append(html)
$("#personnelStatusHistoryModal").modal('show');
},
error:function(){
}
});
})
function personnelStatusOgCdCheck(){
let flag = true;
$.each($(".ogCd"), function(idx, selectBox){
if($(selectBox).val()===''){
flag = false;
}
})
if(!flag){
alert("관서가 지정되지 않은 항목이 있습니다.")
}
return flag;
}

View File

@ -2,8 +2,13 @@ $(document).on('change', '#year', function (){
$("#searchFm").submit();
})
$(document).on('click', '#personnelStatusExcelBtn', function (){
exportExcel($("#year").val()+"년 외사경찰 정원현원 현황", "psTable");
})
$(document).on('click', '#personnelStatusEditModalBtn', function (){
$("#personnelStatusEditModal").modal('show')
$("#personnelStatusEditDiv").empty();
$("#personnelStatusEditModal").modal('show');
})
$(document).on('click', '#personnelStatusAddBtn', function (){
@ -141,7 +146,7 @@ $(document).on('click', '.statusTr', function (){
$.ajax({
url: '/faisp/personnelStatusHistory',
type: 'GET',
data: {year: statusTr.find(".year").val(), ogCd: statusTr.find(".ogCd").val()},
data: {year: statusTr.attr("data-year"), ogCd: statusTr.attr("data-ogcd")},
dataType:"html",
success: function(html){
$("#personnelStatusHistoryModalBody").empty().append(html)

View File

@ -7,60 +7,13 @@ $(function(){
})
$(document).on('click', '#fieldDownExcel', function (){
exportExcel('분야별');
exportExcel('견문통계_분야별', 'tableData');
})
$(document).on('click', '#ratingDownExcel', function (){
exportExcel('평가별');
exportExcel('견문통계_평가별', 'tableData');
})
function exportExcel(name){
var excelHandler = {
getExcelFileName : function(){
return '견문통계'+'_'+name+'_'+getToday()+'.xlsx'; //파일명
},
getSheetName : function(){
return '견문통계'+'_'+name;
},
getExcelData : function(){
return document.getElementById('tableData'); //TABLE id
},
getWorksheet : function(){
return XLSX.utils.table_to_sheet(this.getExcelData());
}
}
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function getToday(){
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (1 + date.getMonth())).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}
$(document).on('click', '#fieldSearch', function (){
goFieldStatistics();
})

View File

@ -3,7 +3,7 @@
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script type="text/javascript" th:src="@{/js/faisp/police.js}"></script>
<script type="text/javascript" th:src="@{/js/faisp/careerMgt.js}"></script>
</th:block>
<div layout:fragment="content">
<main class="pt-3">
@ -32,10 +32,9 @@
<div class="row">
<div class="col-12">
<form id="searchFm" method="get" th:action="@{/faisp/careerMgt}">
<input type="hidden" name="excel">
<input type="hidden" name="userStatus" th:value="${userStatus}">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between pe-3 py-1">
<div class="row justify-content-between">
<div class="col-auto">
<select class="form-select" name="rowCnt" id="rowCnt">
<th:block th:each="num : ${#numbers.sequence(1,5)}">
@ -43,11 +42,6 @@
</th:block>
</select>
</div>
<div class="col-auto">
<button type="button" class="btn btn-success" id="goExcel">엑셀다운</button>
</div>
</div>
<div class="row justify-content-end pe-3 py-1">
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">

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,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

@ -24,6 +24,7 @@
</div>
<div class="col-auto">
<button type="button" class="btn btn-sm btn-primary" id="personnelStatusEditModalBtn" th:if="${accessAuth ne 'ACC001'}">등록</button>
<button type="button" class="btn btn-sm btn-success" id="personnelStatusExcelBtn">엑셀 다운로드</button>
</div>
</div>
</form>
@ -31,7 +32,7 @@
<div class="col-12">
<div class="card">
<div class="card-body">
<table class="table table-hover table-bordered">
<table class="table table-hover table-bordered" id="psTable">
<thead>
<tr>
<th rowspan="3">관서</th>
@ -73,9 +74,7 @@
</tr>
</thead>
<tbody class="table-group-divider">
<tr class="statusTr" th:each="status:${statusList}">
<input type="hidden" class="year" th:value="${status.year}">
<input type="hidden" class="ogCd" th:value="${status.ogCd}">
<tr class="statusTr" th:each="status:${statusList}" th:data-year="${status.year}" th:data-ogcd="${status.ogCd}">
<th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${code.itemCd eq status.ogCd}">
<td th:text="${code.itemValue}"></td>

View File

@ -0,0 +1,152 @@
<!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="modal-header">
<h5 class="modal-title" th:text="${userStatus eq 'USC003' ? '現 외사경찰 상세' : userStatus eq 'USC006' ? '前 외사경찰 상세' : userStatus eq 'USC007' ? '非 외사경찰 상세' : null}"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link" id="editTab" th:data-userseq="${policeList[0].userSeq}" data-bs-toggle="tab" type="button" role="tab">현황 상세</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link active" id="historyTab" th:data-userseq="${policeList[0].userSeq}" data-bs-toggle="tab" type="button" role="tab">수정이력</button>
</li>
</ul>
<div class="row mx-0">
<div class="col-100 card text-center">
<div class="row">
</div>
<div class="row justify-content-start">
<div class="col-4">
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<th></th>
<th>작성자</th>
<th>등록일</th>
</tr>
</thead>
<tbody class="overflow-scroll">
<tr class="historyInfoTr" th:each="list:${policeList}">
<td>
<input type="checkbox" class="hisChk">
<input type="hidden" class="userSeq" th:value="${list.userSeq}">
<input type="hidden" class="verNo" th:value="${list.versionNo}">
</td>
<td th:text="|${list.wrtTitle} ${list.wrtNm}|"></td>
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-8" id="valueDiv">
<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 dateSelector" id="vDicCode"readonly>
</div>
</div>
<div class="mb-3 row">
<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 dateSelector" id="vUserId"readonly>
</div>
<label for="userNm" 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="vUserNm" 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="text" class="form-control form-control-sm dateSelector" id="vPhone"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="text" class="form-control form-control-sm dateSelector" id="vEmail" 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-4">
<input type="text" class="form-control form-control-sm dateSelector" id="vSex"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="vBirth"readonly>
</div>
<label for="policeInDate" 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="vPoliceInDate"readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" 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="vOgCd" readonly>
</div>
<label for="organInDate" 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="vOrganInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ofcCd" 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="vOfcCd"readonly>
</div>
<label for="ofcInDate" 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="vOfcInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" 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="vTitleCd" readonly>
</div>
<label for="titleInDate" 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="vTitleInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="outturnCd" 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="vOutturnCd" readonly>
</div>
<label for="seriesCd" 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="vSeriesCd" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="languageCd" 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="vLanguageCd" readonly>
</div>
</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>
</html>

View File

@ -1,152 +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="modal-header">
<h5 class="modal-title" th:text="${userStatus eq 'USC003' ? '現 외사경찰 상세' : userStatus eq 'USC006' ? '前 외사경찰 상세' : userStatus eq 'USC007' ? '非 외사경찰 상세' : null}"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link" id="editTab" th:data-userseq="${policeList[0].userSeq}" data-bs-toggle="tab" type="button" role="tab">현황 상세</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link active" id="historyTab" th:data-userseq="${policeList[0].userSeq}" data-bs-toggle="tab" type="button" role="tab">수정이력</button>
</li>
</ul>
<div class="row mx-0">
<div class="col-100 card text-center">
<div class="row">
</div>
<div class="row justify-content-start">
<div class="col-4">
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-striped" id="categoryTable">
<thead>
<tr>
<th></th>
<th>작성자</th>
<th>등록일</th>
</tr>
</thead>
<tbody class="overflow-scroll">
<tr class="historyInfoTr" th:each="list:${policeList}">
<td>
<input type="checkbox" class="hisChk">
<input type="hidden" class="userSeq" th:value="${list.userSeq}">
<input type="hidden" class="verNo" th:value="${list.versionNo}">
</td>
<td th:text="|${list.wrtTitle} ${list.wrtNm}|"></td>
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col-8" id="valueDiv">
<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 dateSelector" id="vDicCode"readonly>
</div>
</div>
<div class="mb-3 row">
<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 dateSelector" id="vUserId"readonly>
</div>
<label for="userNm" 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="vUserNm" 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="text" class="form-control form-control-sm dateSelector" id="vPhone"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="text" class="form-control form-control-sm dateSelector" id="vEmail" 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-4">
<input type="text" class="form-control form-control-sm dateSelector" id="vSex"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="vBirth"readonly>
</div>
<label for="policeInDate" 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="vPoliceInDate"readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" 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="vOgCd" readonly>
</div>
<label for="organInDate" 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="vOrganInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ofcCd" 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="vOfcCd"readonly>
</div>
<label for="ofcInDate" 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="vOfcInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" 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="vTitleCd" readonly>
</div>
<label for="titleInDate" 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="vTitleInDate" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="outturnCd" 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="vOutturnCd" readonly>
</div>
<label for="seriesCd" 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="vSeriesCd" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="languageCd" 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="vLanguageCd" readonly>
</div>
</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>
</html>