불법조업 외국어선 하위 페이지 게시판 디자인 작업 및 검색조건 정리.

공통코드 저장시 오류사항 수정.
datepicker autoclose 미적용 항목 수정.
강석 최 2022-12-01 15:15:55 +09:00
parent f98ce35af1
commit 5068c2e10f
23 changed files with 1731 additions and 1641 deletions

View File

@ -14,4 +14,5 @@ public interface CodeMgtRepository extends JpaRepository<CodeMgt, CodeMgt.CodeMg
Optional<CodeMgt> findByCategoryCdAndItemValue(String categoryCd, String itemValue);
List<CodeMgt> findByUseChkOrderByItemCdAsc(String useChk);
List<CodeMgt> findByOrderByOrderNumAsc();
Optional<CodeMgt> findByCategoryCdOrderByItemCdDesc(String categoryCd);
}

View File

@ -39,7 +39,13 @@ public class CodeMgtService{
HashMap<String, Integer> map = new HashMap<>();
for(CodeMgt code: codeList){
if(code.getItemCd().isEmpty()){
map.put(code.getCategoryCd(), 1);
CodeMgt lastCode = codeMgtRepository.findByCategoryCdOrderByItemCdDesc(code.getCategoryCd()).orElse(null);
if(lastCode==null){
String lastCodeSeq = lastCode.getItemCd().replace(lastCode.getCategoryCd(), "");
map.put(code.getCategoryCd(), Integer.parseInt(lastCodeSeq)+1);
}else{
map.put(code.getCategoryCd(), 1);
}
}
}
for(CodeMgt code: codeList){

View File

@ -104,8 +104,8 @@
.w-100p{
width: 100px;
}
#subModalBody{
white-space: nowrap;
.min-width-300{
min-width: 300px!important;
}
.statusInput::-webkit-outer-spin-button,
.statusInput::-webkit-inner-spin-button{

View File

@ -20,9 +20,10 @@ $(document).on('click', '#addEquip', function (){
$("#equipEditModalContent").empty().append(html);
$("#equipEditModal").modal('show');
$(".storedYear").datepicker({
minViewMode: 'years',
format: "yyyy",
language: "ko"
minViewMode: 'years',
format: "yyyy",
language: "ko",
autoclose: true
})
},
error:function(){
@ -120,9 +121,10 @@ function showUpdateModal(equKey){
$("#equipEditModalContent").empty().append(html)
$("#equipModifyModal").modal('show');
$(".mStoredYear").datepicker({
minViewMode: 'years',
format: "yyyy",
language: "ko"
minViewMode: 'years',
format: "yyyy",
language: "ko",
autoclose: true
})
},
error:function(){

View File

@ -1,7 +1,8 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
language: "ko",
autoclose: true
});
})
@ -25,8 +26,9 @@ function showEditModal(useType){
$("#useEditModalContent").empty().append(html);
$("#useEditModal").modal('show');
$("#useDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$('#detailSelf').hide();
},
@ -96,8 +98,9 @@ function showMdifyModal(useNo,useType,mgtOrgan){
$("#useEditModalContent").empty().append(html);
$("#useEditModal").modal('show');
$("#mUseDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
if($('#mDetailType').val() != 'PVREUSE007' && $('#mDetailType').val() != 'QIRUSE006'){
$('#mDetailSelf').hide();

View File

@ -1,471 +1,468 @@
$(function(){
$("#napoDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#paymentPaymentDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#consignmentStartDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#consignmentEndDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#confiscationDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#boatDisposalDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#directHandoverDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#fieldIvsgtNapoDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#fieldIvsgtReleaseDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#pressurizedStartDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#pressurizedEndDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
const searchFormBoat = $("#searchFormBoat")
if(searchFormBoat.val()!==""){
searchFormBoat.find("."+$("#searchFormPolice").val()).show();
searchFormBoat.removeAttr("disabled");
}
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
$(document).on('change', '#searchFormPolice', function (){
const searchFormBoat = $("#searchFormBoat")
searchFormBoat.find("option").hide()
if(this.value !== ""){
searchFormBoat.removeAttr("disabled")
searchFormBoat.find("."+this.value).show();
}else{
searchFormBoat.attr("disabled", "disabled")
}
})
$(document).on('click', '#searchFormBtn', function (){
const btn = $(this)
if(btn.attr("data-state")==="hide"){
$(".subSearchParam").show();
btn.attr("data-state", "show");
btn.empty().append("조건<br>숨기기");
}else{
$(".subSearchParam").hide();
btn.attr("data-state", "hide");
btn.empty().append("조건<br>펼치기");
}
})
$(document).on('click', '#crackdownStatusAddBtn', function () {
getCrackdownStatusEditModal(null);
getCrackdownStatusEditModal(null);
});
$(document).on('click', '#cdsEditBtn', function () {
$("#crackdownStatusViewModal").modal('hide');
getCrackdownStatusEditModal(Number($("#crackdownStatusViewBody").find("[name='cdsKey']").val()));
$("#crackdownStatusViewModal").modal('hide');
getCrackdownStatusEditModal(Number($("#crackdownStatusViewBody").find("[name='cdsKey']").val()));
});
$(document).on('click', '#saveCrackdownStatusBtn', function (){
saveCrackdownStatus('N')
saveCrackdownStatus('N')
});
$(document).on('click', '#saveTempBtn', function (){
saveCrackdownStatus('Y')
saveCrackdownStatus('Y')
});
$(document).on('click', '.tr', function (){
getCrackdownStatusViewModal($(this).data('key'));
getCrackdownStatusViewModal($(this).data('key'));
});
$(document).on('click', '#history-tab', function (){
getCrackdownStatusHistoryViewModal($('#cdsEditForm').find('input[name="cdsKey"]').val());
getCrackdownStatusHistoryViewModal($('#cdsEditForm').find('input[name="cdsKey"]').val());
});
$(document).on('click', '#crackdownStatus-tab', function (){
getCrackdownStatusViewModal($('#cdsEditForm').find('input[name="cdsKey"]').val());
getCrackdownStatusViewModal($('#cdsEditForm').find('input[name="cdsKey"]').val());
});
$(document).on('click', '.version-tr', function (){
$(this).find('input[name="versionNo"]').prop('checked', true);
const versionNo = $(this).find('input[name="versionNo"]').val();
const cdsKey = $('#cdsEditForm').find('input[name="cdsKey"]').val();
getCrackdownStatusHistoryDetail(versionNo, cdsKey);
$(this).find('input[name="versionNo"]').prop('checked', true);
const versionNo = $(this).find('input[name="versionNo"]').val();
const cdsKey = $('#cdsEditForm').find('input[name="cdsKey"]').val();
getCrackdownStatusHistoryDetail(versionNo, cdsKey);
});
$(document).on('change', 'select[name="crackdownPolice"]', function (){
dynamicOption('select[name="crackdownBoat"]', $(this).val());
dynamicOption('select[name="crackdownBoat"]', $(this).val());
});
$(document).on('click', '#sailorAddBtn', function (e){
e.preventDefault();
$('#sailorDiv').append(
'<div class="row">'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">선원이름</label>'
+ '<div class="col-sm-2">'
+ '<input class="form-control form-control-sm" name="sailorNameKr">'
+ '</div>'
+ '<div class="col-sm-2">'
+ '<select class="form-select form-select-sm" name="sailor">'
+ '<option value="">선택</option>'
+ '<option value="Y">구속</option>'
+ '<option value="N">불구속</option>'
+ '</select>'
+ '</div>'
+ '<button type="button" class="btn btn-sm btn-outline-secondary w-auto opacity-75" id="sailorRemoveBtn">'
+ '<i class="bi bi-dash-square text-danger"></i>'
+ '</button>'
+ '</div>'
)
e.preventDefault();
$('#sailorDiv').append(
'<div class="row">'
+ '<label class="col-sm-1 col-form-label col-form-label-sm text-center">선원이름</label>'
+ '<div class="col-sm-2">'
+ '<input class="form-control form-control-sm" name="sailorNameKr">'
+ '</div>'
+ '<div class="col-sm-2">'
+ '<select class="form-select form-select-sm" name="sailor">'
+ '<option value="">선택</option>'
+ '<option value="Y">구속</option>'
+ '<option value="N">불구속</option>'
+ '</select>'
+ '</div>'
+ '<button type="button" class="btn btn-sm btn-outline-secondary w-auto opacity-75" id="sailorRemoveBtn">'
+ '<i class="bi bi-dash-square text-danger"></i>'
+ '</button>'
+ '</div>'
)
});
$(document).on('click', '#violationAddBtn', function (e){
e.preventDefault()
let violation = '';
commonCode.VT.forEach(function (item){
violation += '<option value="'+ item.itemCd +'">' + item.itemValue +'</option>';
})
e.preventDefault()
let violation = '';
commonCode.VT.forEach(function (item){
violation += '<option value="'+ item.itemCd +'">' + item.itemValue +'</option>';
})
$('#violationDiv').append(
'<div class="row">'
+ '<select class="form-select form-select-sm violation" name="violation" style="max-width: 90% !important;">'
+ '<option value="">선택</option>'
+ violation
+ '<option value="etc">직접입력</option>'
+ '</select>'
+ '<button type="button" class="btn btn-sm btn-outline-secondary w-auto opacity-75" id="violationRemoveBtn">'
+ '<i class="bi bi-dash-square text-danger"></i>'
+ '</button>'
+ '</div>'
)
$('#violationDiv').append(
'<div class="row">'
+ '<select class="form-select form-select-sm violation" name="violation" style="max-width: 90% !important;">'
+ '<option value="">선택</option>'
+ violation
+ '<option value="etc">직접입력</option>'
+ '</select>'
+ '<button type="button" class="btn btn-sm btn-outline-secondary w-auto opacity-75" id="violationRemoveBtn">'
+ '<i class="bi bi-dash-square text-danger"></i>'
+ '</button>'
+ '</div>'
)
});
$(document).on('click', '#sailorRemoveBtn', function (e){
e.preventDefault();
$(this).parent().remove();
let deleteKey = $(this).parent().children("input[name='sailorKey']").val();
$("#cdsEditForm").append('<input type="hidden" name="sailorDeleteKeyList" value="' + deleteKey + '">');
e.preventDefault();
$(this).parent().remove();
let deleteKey = $(this).parent().children("input[name='sailorKey']").val();
$("#cdsEditForm").append('<input type="hidden" name="sailorDeleteKeyList" value="' + deleteKey + '">');
});
$(document).on('click', '#violationRemoveBtn', function (e){
e.preventDefault()
$(this).parent().remove();
let deleteKey = $(this).parent().children("input[name='violationKey']").val();
$("#cdsEditForm").append('<input type="hidden" name="violationDeleteKeyList" value="' + deleteKey + '">');
e.preventDefault()
$(this).parent().remove();
let deleteKey = $(this).parent().children("input[name='violationKey']").val();
$("#cdsEditForm").append('<input type="hidden" name="violationDeleteKeyList" value="' + deleteKey + '">');
});
$(document).on('change', '.violation', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="row col-auto etcDiv">'
+ '<input type="text" class="form-control" name="violationEtc">'
+ '</div>'
);
} else {
$(this).next('.etcDiv').remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="row col-auto etcDiv">'
+ '<input type="text" class="form-control" name="violationEtc">'
+ '</div>'
);
} else {
$(this).next('.etcDiv').remove();
}
});
$(document).on('change', '#fisheryType', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="fisheryTypeEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="fisheryTypeEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('change', '#crackdownPolice', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="crackdownPoliceEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="crackdownPoliceEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('change', '#crackdownBoat', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="crackdownBoatEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="crackdownBoatEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('change', '#boatMaterial', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="boatMaterialEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="boatMaterialEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('change', '#processStatus', function (){
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="processStatusEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
if ($(this).val() == 'etc') {
$(this).after(
'<div class="col-auto">'
+ '<input type="text" class="form-control" name="processStatusEtc">'
+ '</div>'
);
} else {
$(this).next().remove();
}
});
$(document).on('click', '#cdsDownExcel', function (){
exportExcel('불법조업 불법어선 단속현황', 'cdsTable');
exportExcel('불법조업 불법어선 단속현황', 'cdsTable');
});
function getCrackdownStatusHistoryDetail(versionNo, cdsKey){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusHistoryDetail',
data: {
versionNo : versionNo,
cdsKey : cdsKey
},
type: 'GET',
dataType:"html",
success: function(html){
$("#historyDetailDiv").empty().append(html);
},
error:function(){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusHistoryDetail',
data: {
versionNo : versionNo,
cdsKey : cdsKey
},
type: 'GET',
dataType:"html",
success: function(html){
$("#historyDetailDiv").empty().append(html);
},
error:function(){
}
});
}
});
}
function getCrackdownStatusViewModal(cdsKey){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusViewModal',
data: {cdsKey: cdsKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#cdsEditBody").empty();
$("#crackdownStatusViewBody").empty().append(html)
$("#crackdownStatusViewModal").modal('show');
},
error:function(){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusViewModal',
data: {cdsKey: cdsKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#cdsEditBody").empty();
$("#crackdownStatusViewBody").empty().append(html)
$("#crackdownStatusViewModal").modal('show');
},
error:function(){
}
});
}
});
}
function getCrackdownStatusHistoryViewModal(cdsKey){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusHistoryViewModal',
data: {cdsKey: cdsKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#crackdownStatusViewBody").empty().append(html)
$("#crackdownStatusViewModal").modal('show');
},
error:function(){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusHistoryViewModal',
data: {cdsKey: cdsKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#crackdownStatusViewBody").empty().append(html)
$("#crackdownStatusViewModal").modal('show');
},
error:function(){
}
});
}
});
}
function getCrackdownStatusEditModal(cdsKey){
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusEditModal',
data: {
cdsKey: cdsKey
},
type: 'GET',
dataType:"html",
success: function(html){
$("#crackdownStatusViewBody").empty();
$("#crackdownStatusEditModalContent").empty().append(html);
$("#crackdownStatusEditModal").modal('show');
$.ajax({
url: '/faStatistics/crackdownStatus/crackdownStatusEditModal',
data: {
cdsKey: cdsKey
},
type: 'GET',
dataType:"html",
success: function(html){
$("#crackdownStatusViewBody").empty();
$("#crackdownStatusEditModalContent").empty().append(html);
$("#crackdownStatusEditModal").modal('show');
$("#napoDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#birthdate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#paymentPaymentDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#consignmentStartDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#consignmentEndDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#evictionDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#returnDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#confiscationDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#boatDisposalDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#directHandoverDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#fieldIvsgtNapoDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#fieldIvsgtReleaseDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#pressurizedStartDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#pressurizedEndDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
},
error:function(){
$("#napoDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr',
autoclose: true
});
$("#birthdate").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#paymentPaymentDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#consignmentStartDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#consignmentEndDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#evictionDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#returnDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#confiscationDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#boatDisposalDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#directHandoverDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#fieldIvsgtNapoDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#fieldIvsgtReleaseDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#pressurizedStartDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$("#pressurizedEndDt").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
},
error:function(){
}
});
}
});
}
function saveCrackdownStatus(saveYn){
$('input[name="fieldIvsgtTimeTaken"]').val(dateTimeCalc($("#fieldIvsgtNapoDt").val(), $("#fieldIvsgtReleaseDt").val()));
$('input[name="pressurizedTimeTaken"]').val(dateTimeCalc($("#pressurizedStartDt").val(), $("#pressurizedEndDt").val()));
$('input[name="fieldIvsgtTimeTaken"]').val(dateTimeCalc($("#fieldIvsgtNapoDt").val(), $("#fieldIvsgtReleaseDt").val()));
$('input[name="pressurizedTimeTaken"]').val(dateTimeCalc($("#pressurizedStartDt").val(), $("#pressurizedEndDt").val()));
if(contentCheck()){
if(confirm("저장하시겠습니까?")){
$("#saveYn").val(saveYn);
contentFade("in");
const formData = new FormData($("#cdsEditForm")[0]);
if(contentCheck()){
if(confirm("저장하시겠습니까?")){
$("#saveYn").val(saveYn);
contentFade("in");
const formData = new FormData($("#cdsEditForm")[0]);
let violationList = [];
let sailorList = [];
let violationList = [];
let sailorList = [];
sailorList.push(
{
sailorKey: $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="captinSailorKey"]').val()) : null,
position: 'POS001',
sailorNameKr: $("#cdsEditForm").find('input[name="sailorNameKr"]').val() != '' ? $("#cdsEditForm").find('input[name="sailorNameKr"]').val() : null,
isRestriction: $("#cdsEditForm").find('select[name="captin"]').val() != '' ? $("#cdsEditForm").find('select[name="captin"]').val() : null,
birthdate: $("#cdsEditForm").find('input[name="birthdate"]').val() != '' ? $("#cdsEditForm").find('input[name="birthdate"]').val() : null
},
{
sailorKey: $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="mateSailorKey"]').val()) : null,
position: 'POS002',
sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="mate"]').val() != '' ? $("#cdsEditForm").find('select[name="mate"]').val() : null
},
{
sailorKey: $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="wardenSailorKey"]').val()) : null,
position: 'POS003',
sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="warden"]').val() != '' ? $("#cdsEditForm").find('select[name="warden"]').val() : null
}
);
sailorList.push(
{
sailorKey: $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="captinSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="captinSailorKey"]').val()) : null,
position: 'POS001',
sailorNameKr: $("#cdsEditForm").find('input[name="sailorNameKr"]').val() != '' ? $("#cdsEditForm").find('input[name="sailorNameKr"]').val() : null,
isRestriction: $("#cdsEditForm").find('select[name="captin"]').val() != '' ? $("#cdsEditForm").find('select[name="captin"]').val() : null,
birthdate: $("#cdsEditForm").find('input[name="birthdate"]').val() != '' ? $("#cdsEditForm").find('input[name="birthdate"]').val() : null
},
{
sailorKey: $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="mateSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="mateSailorKey"]').val()) : null,
position: 'POS002',
sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="mate"]').val() != '' ? $("#cdsEditForm").find('select[name="mate"]').val() : null
},
{
sailorKey: $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != '' && $("#cdsEditForm").find('input[name="wardenSailorKey"]').val() != 'false' ? Number($("#cdsEditForm").find('input[name="wardenSailorKey"]').val()) : null,
position: 'POS003',
sailorNameKr: null,
isRestriction: $("#cdsEditForm").find('select[name="warden"]').val() != '' ? $("#cdsEditForm").find('select[name="warden"]').val() : null
}
);
$("select[name='sailor']").each(function (){
sailorList.push({
sailorKey: $(this).parent().parent().find('input[name="sailorKey"]').val() != undefined ? Number($(this).parent().parent().find('input[name="sailorKey"]').val()) : null,
sailorNameKr: $(this).parent().parent().find('input[name="sailorNameKr"]').val(),
position: 'POS006',
isRestriction: $(this).val() != undefined ? $(this).val() : null
});
});
$("select[name='sailor']").each(function (){
sailorList.push({
sailorKey: $(this).parent().parent().find('input[name="sailorKey"]').val() != undefined ? Number($(this).parent().parent().find('input[name="sailorKey"]').val()) : null,
sailorNameKr: $(this).parent().parent().find('input[name="sailorNameKr"]').val(),
position: 'POS006',
isRestriction: $(this).val() != undefined ? $(this).val() : null
});
});
for (let i=0; i < sailorList.length; i++) {
if (sailorList[i].sailorKey != null) {
formData.append(`sailorList[${i}].sailorKey`, sailorList[i].sailorKey);
}
if (sailorList[i].sailorNameKr != null) {
formData.append(`sailorList[${i}].sailorNameKr`, sailorList[i].sailorNameKr);
}
formData.append(`sailorList[${i}].position`, sailorList[i].position);
if (sailorList[i].isRestriction != null) {
formData.append(`sailorList[${i}].isRestriction`, sailorList[i].isRestriction);
}
if (sailorList[i].birthdate != null) {
formData.append(`sailorList[${i}].birthdate`, sailorList[i].birthdate);
}
}
$(".violation").each(function (){
violationList.push({
violationKey: $(this).parent().find('input[name="violationKey"]').val() != undefined ? Number($(this).parent().find('input[name="violationKey"]').val()) : null,
fbKey: $("#cdsEditForm").find('input[name="fbKey"]').val() != undefined ? Number($("#cdsEditForm").find('input[name="fbKey"]').val()) : null,
violation: $(this).val() != '' ? $(this).val() : null,
violationEtc: $(this).parent().find('input[name="violationEtc"]').val() != undefined ? $(this).parent().find('input[name="violationEtc"]').val() : null
});
});
for (let i=0; i < violationList.length; i++) {
if (violationList[i].violationKey != null) {
formData.append(`violationList[${i}].violationKey`, violationList[i].violationKey);
}
if (violationList[i].fbKey != null) {
formData.append(`violationList[${i}].fbKey`, violationList[i].fbKey);
}
if (violationList[i].violation != null) {
formData.append(`violationList[${i}].violation`, violationList[i].violation);
}
if (violationList[i].violationEtc != null) {
formData.append(`violationList[${i}].violationEtc`, violationList[i].violationEtc);
}
}
$.ajax({
type : 'POST',
data : formData,
url : "/faStatistics/crackdownStatus/saveCrackdownStatus",
processData: false,
contentType: false,
success : function(result) {
alert("저장되었습니다.");
contentFade("out");
$("#crackdownStatusEditModal").modal('hide');
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.")
contentFade("out");
}
})
for (let i=0; i < sailorList.length; i++) {
if (sailorList[i].sailorKey != null) {
formData.append(`sailorList[${i}].sailorKey`, sailorList[i].sailorKey);
}
if (sailorList[i].sailorNameKr != null) {
formData.append(`sailorList[${i}].sailorNameKr`, sailorList[i].sailorNameKr);
}
formData.append(`sailorList[${i}].position`, sailorList[i].position);
if (sailorList[i].isRestriction != null) {
formData.append(`sailorList[${i}].isRestriction`, sailorList[i].isRestriction);
}
if (sailorList[i].birthdate != null) {
formData.append(`sailorList[${i}].birthdate`, sailorList[i].birthdate);
}
}
$(".violation").each(function (){
violationList.push({
violationKey: $(this).parent().find('input[name="violationKey"]').val() != undefined ? Number($(this).parent().find('input[name="violationKey"]').val()) : null,
fbKey: $("#cdsEditForm").find('input[name="fbKey"]').val() != undefined ? Number($("#cdsEditForm").find('input[name="fbKey"]').val()) : null,
violation: $(this).val() != '' ? $(this).val() : null,
violationEtc: $(this).parent().find('input[name="violationEtc"]').val() != undefined ? $(this).parent().find('input[name="violationEtc"]').val() : null
});
});
for (let i=0; i < violationList.length; i++) {
if (violationList[i].violationKey != null) {
formData.append(`violationList[${i}].violationKey`, violationList[i].violationKey);
}
if (violationList[i].fbKey != null) {
formData.append(`violationList[${i}].fbKey`, violationList[i].fbKey);
}
if (violationList[i].violation != null) {
formData.append(`violationList[${i}].violation`, violationList[i].violation);
}
if (violationList[i].violationEtc != null) {
formData.append(`violationList[${i}].violationEtc`, violationList[i].violationEtc);
}
}
$.ajax({
type : 'POST',
data : formData,
url : "/faStatistics/crackdownStatus/saveCrackdownStatus",
processData: false,
contentType: false,
success : function(result) {
alert("저장되었습니다.");
contentFade("out");
$("#crackdownStatusEditModal").modal('hide');
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.")
contentFade("out");
}
})
}
}
}
function contentCheck(){
let flag = true;
let flag = true;
if(!$('#cdsEditForm').find($('input[name="boatNameKr"]').val())) {
alert('선명을 입력해주세요.');
$('input[name="boatNameKr"]').focus();
return false;
}
if(!$('#cdsEditForm').find($('input[name="boatNameKr"]').val())) {
alert('선명을 입력해주세요.');
$('input[name="boatNameKr"]').focus();
return false;
}
if(!$('#cdsEditForm').find($('select[name="processStatus"]').val())) {
alert('처리현황을 선택해주세요.');
$('select[name="processStatus"]').focus();
return false;
}
if(!$('#cdsEditForm').find($('select[name="processStatus"]').val())) {
alert('처리현황을 선택해주세요.');
$('select[name="processStatus"]').focus();
return false;
}
return flag;
return flag;
}

View File

@ -1,5 +1,27 @@
let selectedList = [];
let fileList = [];
$(function (){
const searchFormBoat = $("#searchFormBoat")
if(searchFormBoat.val()!==""){
searchFormBoat.find("."+$("#searchFormPolice").val()).show();
searchFormBoat.removeAttr("disabled");
}
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('change', '#searchFormPolice', function (){
const searchFormBoat = $("#searchFormBoat")
searchFormBoat.find("option").hide()
if(this.value !== ""){
searchFormBoat.removeAttr("disabled")
searchFormBoat.find("."+this.value).show();
}else{
searchFormBoat.attr("disabled", "disabled")
}
})
$(document).on('click', '#getFishingBoatEditModalBtn', function (){
getFishingBoatEditModal(null);
})

View File

@ -1,11 +1,13 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
@ -265,8 +267,9 @@ $(document).on('change', '#purpose', function (){
$(function(){
$("#datePickerDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
@ -298,8 +301,9 @@ function makeSpiInfoDiv(name) {
+ '</div>'
);
$("#stayQualificationDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
}
@ -432,12 +436,14 @@ function getIcaEditModal(icaKey){
$("#icaEditModalContent").empty().append(html);
$("#icaEditModal").modal('show');
$("#crimeAwarenessDtDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#caseSentDtDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("[name='caseOverview']").summernote({
lang:'ko-KR',

View File

@ -1,24 +1,9 @@
$(function(){
$("#consignmentStartDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#consignmentEndDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#returnDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#confiscationDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#boatDisposalDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
$(document).on('click', '#processResultAddBtn', function () {
getProcessResultAddModal(null);
@ -201,24 +186,29 @@ function getProcessResultAddModal(){
$("#processResultAddModal").modal('show');
$("#consignmentStartDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#consignmentEndDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#returnDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#confiscationDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#boatDisposalDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
},
error:function(){
@ -241,24 +231,29 @@ function getProcessResultEditModal(prKey){
$("#processResultEditModal").modal('show');
$("#consignmentStartDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#consignmentEndDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#returnDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#confiscationDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#boatDisposalDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
},
error:function(){

View File

@ -162,8 +162,9 @@ function getSailorEditModal(sailorKey){
$("#sailorEditModal").modal('show');
$("#birthdate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
},
error:function(){
@ -182,8 +183,9 @@ function getSailorAddModal(){
$("#sailorAddModal").modal('show');
$("#birthdate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
},
error:function(){

View File

@ -191,7 +191,8 @@ function showModal(piSeq){
$(function(){
$("#startDate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
language: "ko",
autoclose: true
});
})

View File

@ -9,8 +9,9 @@ $(document).on('click', '#addPartWork', function (){
$("#partWorkEditModal").modal('show');
setUploadDiv();
$("#workDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#workInfo").summernote({
lang:'ko-KR',
@ -109,8 +110,9 @@ function showModal(pwSeq,piSeq){
$("#partWorkEditModal").modal('show');
setUploadDiv();
$("#mWorkDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#mWorkInfo").summernote({
lang:'ko-KR',

View File

@ -65,8 +65,9 @@ $(document).on('change', '#searchArrestCd', function (){
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});

View File

@ -74,12 +74,14 @@ $(document).on('click', '#eduAddBtn', function (){
'</div>'
)
$(".eduSdate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".eduEdate").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
eduList.push({userSeq:userSeq, eduName:"",eduSdate:"",eduEdate:"",eduRa:""});
})

View File

@ -172,13 +172,15 @@ $(document).on('click', '.historyInfoTr', function (){
})
$(document).ready( function() {
$("#aptDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
});
$(document).on('click', '#approvalTab', function (){
@ -212,8 +214,9 @@ function revisionHistory(trKey,verNo,url){
$("#configInfo").empty().append(html)
$("#translatorEditModal").modal('show');
$("#viewAptDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
},
error:function(){
@ -264,9 +267,10 @@ $(document).on('click', '#crrAddBtn', function (){
'</div>'
)
$(".tcDt").datepicker({
format: "yyyy-mm-dd",
language: "ko"
});
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
trCarrerList.push({translatorKey:trKey, hisGubun:"",tcDt:"",contents:"",remark:""});
})

View File

@ -184,7 +184,7 @@
<input type="hidden" id="modalUrl" value="/modal/userModal">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="subModalBody">
<div class="modal-body text-nowrap" id="subModalBody">
<div class="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">

View File

@ -61,7 +61,7 @@
</div>
<label for="crackdownPolice" class="col-sm-1 col-form-label col-form-label-sm text-center">단속경찰서</label>
<div class="col-sm-2">
<select class="form-select form-select-sm crackdownStatusInfo" name="crackdownPolice" id="crackdownPolice">
<select class="form-select form-select-sm crackdownStatusInfo crackdownPolice" name="crackdownPolice" id="crackdownPolice">
<option value="">선택</option>
<th:block th:each="code:${cpoList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.crackdownPolice}"></option>
@ -70,7 +70,7 @@
</div>
<label for="crackdownBoat" class="col-sm-1 col-form-label col-form-label-sm text-center">단속함정</label>
<div class="col-sm-2">
<select class="form-select form-select-sm crackdownStatusInfo" name="crackdownBoat" id="crackdownBoat" th:data-boatcode="${crackdownStatus.crackdownBoat}" disabled>
<select class="form-select form-select-sm crackdownStatusInfo crackdownBoat" name="crackdownBoat" id="crackdownBoat" th:data-boatcode="${crackdownStatus.crackdownBoat}" disabled>
<option value="">단속경찰서를 선택해주세요.</option>
</select>
</div>

View File

@ -1,21 +1,7 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="css">
<style>
.ws-normal{
white-space: normal;
}
.ws-nowrap{
white-space: nowrap;
}
.min-width-300{
min-width: 300px!important;
}
</style>
</th:block>
<th:block layout:fragment="script">
<script type="text/javascript" th:src="@{/js/faStatistics/fishingBoatMgt.js}"></script>
</th:block>
@ -23,242 +9,260 @@
<main>
<div class="row justify-content-between">
<div class="col-auto"><h4>불법조업 외국어선 정보</h4></div>
<div class="col-auto"><p>외사통계 > 불법조업외국어선 > 불법조업 외국어선 정보</p></div>
<div class="col-auto"><p class="mb-0 mt-2">외사통계 > 불법조업외국어선 > 불법조업 외국어선 정보</p></div>
</div>
<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 text-center">
<div class="card-body">
<form method="get" th:action="@{/faStatistics/fishingBoat}">
<form method="get" th:action="@{/faStatistics/fishingBoat}" id="searchForm">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row pe-3 py-1">
<div class="col-1">
<div class="row justify-content-between py-1">
<div class="col-auto">
<select class="form-select form-select-sm" name="rowCnt" id="rowCnt">
<th:block th:each="num : ${#numbers.sequence(1,5)}">
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt eq num*10}"></option>
</th:block>
</select>
<select class="form-select form-select-sm">
<select class="form-select form-select-sm" name="year">
<option value="">연도</option>
<th:block th:each="year : ${#numbers.sequence(2020, 2030)}">
<option th:value="${year}" th:text="${year}" th:selected="${searchParams.fishingBoat.year eq year}"></option>
</th:block>
</select>
</div>
<div class="col-10">
<div class="row justify-content-end pb-1">
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">사건담당경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.caseAgency}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">단속경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.crackdownPolice}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">단속함정</option>
<th:block th:each="commonCode:${session.commonCode.get('CDB')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.crackdownBoat}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="startDate" name="startDate" placeholder="단속기간 시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm" id="endDate" name="endDate" placeholder="단속기간 종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
<div class="col-8">
<div class="row">
<div class="col-11">
<div class="row justify-content-end pb-1">
<div class="col-2">
<select class="form-select form-select-sm" name="caseAgency">
<option value="">사건담당기관</option>
<th:block th:each="code:${session.commonCode.get('ATA')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.caseAgency}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="searchFormPolice">
<option value="">단속경찰서</option>
<th:block th:each="code:${session.commonCode.get('CPO')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.crackdownPolice}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownBoat" id="searchFormBoat" disabled>
<option value="">단속함정</option>
<th:block th:each="cpoNum:${#numbers.sequence(1, #lists.size(session.commonCode.get('CPO')))}">
<th:block th:each="code:${session.commonCode.get('CPO'+cpoNum)}">
<option th:class="${code.categoryCd}" th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.crackdownBoat}" style="display: none;"></option>
</th:block>
</th:block>
</select>
</div>
<div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="선명(한글)" name="boatNameKr" th:value="${searchParams.fishingBoat.boatNameKr}">
</div>
<div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="선적지" name="boatNny" th:value="${searchParams.fishingBoat.boatNny}">
</div>
<div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="톤수" name="tonCnt" th:value="${searchParams.fishingBoat.tonCnt>0?searchParams.fishingBoat.tonCnt:''}">
</div>
</div>
<div class="row justify-content-end">
<div class="col-2">
<select class="form-select form-select-sm" name="boatMaterial">
<option value="">선질</option>
<th:block th:each="code:${session.commonCode.get('BM')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.fishingBoat.boatMaterial}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="fisheryType">
<option value="">어업종류</option>
<th:block th:each="code:${session.commonCode.get('FT')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.fishingBoat.fisheryType}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="violation">
<option value="">위반형태</option>
<th:block th:each="code:${session.commonCode.get('VT')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.fishingBoat.violation}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="processStatus">
<option value="">처리현황</option>
<th:block th:each="code:${session.commonCode.get('PR')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.processResult.processStatus}"></option>
</th:block>
</select>
</div>
<div class="col-4">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<select class="form-select form-select-sm w-30" name="dateSelector">
<option value="">조건선택</option>
<option value="napoDt" th:selected="${searchParams.dateSelector eq 'napoDt'}">나포일시</option>
<option value="evictionDt" th:selected="${searchParams.dateSelector eq 'evictionDt'}">퇴거일</option>
<option value="directHandoverDt" th:selected="${searchParams.dateSelector eq 'directHandoverDt'}">직접인계일</option>
<option value="consignmentDt" th:selected="${searchParams.dateSelector eq 'consignmentDt'}">위탁일</option>
<option value="confiscationDt" th:selected="${searchParams.dateSelector eq 'confiscationDt'}">몰수확정일</option>
<option value="boatDisposalDt" th:selected="${searchParams.dateSelector eq 'boatDisposalDt'}">폐선일</option>
<option value="returnDt" th:selected="${searchParams.dateSelector eq 'returnDt'}">환부일</option>
<option value="wrtDt" th:selected="${searchParams.dateSelector eq 'wrtDt'}">최종수정일</option>
</select>
<input type="text" class="form-control form-control-sm w-35" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm w-35" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
</div>
</div>
</div>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="선적지" name="boatNny" th:value="${searchParams.fishingBoat.boatNny}">
<div class="col-1 d-grid gap-2">
<input type="submit" class="btn btn-lg btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
<div class="row justify-content-end">
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">선질</option>
<th:block th:each="commonCode:${session.commonCode.get('BM')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.fishingBoat.boatMaterial}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="톤수" name="tonCnt" th:value="${searchParams.fishingBoat.tonCnt}">
</div>
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">어업종류</option>
<th:block th:each="commonCode:${session.commonCode.get('FT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.fishingBoat.fisheryType}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">처리현황</option>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.processResult.processStatus}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm">
<option value="">위반형태</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.fishingBoat.violation}"></option>
</th:block>
</select>
</div>
</div>
</div>
<div class="col-1 d-grid gap-2">
<input type="submit" class="btn btn-lg btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</form>
<div class="row justify-content-start">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row overflow-auto">
<table class="table table-sm table-hover table-bordered ws-nowrap">
<thead>
<tr class="table-secondary">
<th></th>
<th>나포일시</th>
<th>나포해점</th>
<th>사건담당기관</th>
<th>단속경찰서</th>
<th>단속함정</th>
<th>선명</th>
<th>선장명</th>
<th>어업종류</th>
<th>선적지</th>
<th>톤수</th>
<th>선질</th>
<th>위반형태</th>
<th>처리결과</th>
<th>작성자</th>
<th>수정일</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr class="crackdownStatusTr" th:each="crackdownStatus:${crackdownStatusList}">
<input type="hidden" class="cdsKey" th:value="${crackdownStatus.cdsKey}">
<td><input type="checkbox" class="trChkBox"></td>
<td th:text="${#temporals.format(crackdownStatus.napoDt, 'yyyy-MM-dd HH:mm')}"></td>
<td>
<th:block th:text="${crackdownStatus.napoSeaPointLon}"></th:block>
<br>
<th:block th:text="${crackdownStatus.napoSeaPointLat}"></th:block>
</td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.caseAgency)}">
<td></td>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 overflow-auto">
<table class="table table-sm table-hover table-bordered text-nowrap">
<thead class="align-middle">
<tr class="table-secondary">
<th></th>
<th>나포일시</th>
<th>나포해점</th>
<th>사건담당기관</th>
<th>단속경찰서</th>
<th>단속함정</th>
<th>선명</th>
<th>선장명</th>
<th>어업종류</th>
<th>선적지</th>
<th>톤수</th>
<th>선질</th>
<th>위반형태</th>
<th>처리결과</th>
<th>작성자</th>
<th>수정일</th>
</tr>
</thead>
<tbody class="table-group-divider align-middle">
<tr class="crackdownStatusTr" th:each="crackdownStatus:${crackdownStatusList}">
<input type="hidden" class="cdsKey" th:value="${crackdownStatus.cdsKey}">
<td><input type="checkbox" class="trChkBox"></td>
<td th:text="${#temporals.format(crackdownStatus.napoDt, 'yyyy-MM-dd HH:mm')}"></td>
<td>
<th:block th:text="${crackdownStatus.napoSeaPointLon}"></th:block>
<br>
<th:block th:text="${crackdownStatus.napoSeaPointLat}"></th:block>
</td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.caseAgency)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.caseAgency)}">
<th:block th:each="code:${session.commonCode.get('ATA')}">
<td th:if="${crackdownStatus.caseAgency eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.caseAgency)}">
<th:block th:each="commonCode:${session.commonCode.get('ATA')}">
<td th:if="${crackdownStatus.caseAgency eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<th:block th:if="${#strings.isEmpty(crackdownStatus.crackdownPolice)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.crackdownPolice)}">
<th:block th:each="code:${session.commonCode.get('CPO')}">
<td th:if="${crackdownStatus.crackdownPolice eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<th:block th:if="${#strings.isEmpty(crackdownStatus.crackdownPolice)}">
<td></td>
</th:block>
<th:block th:if="${#strings.isEmpty(crackdownStatus.crackdownBoat)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.crackdownBoat)}">
<th:block th:each="code:${session.commonCode.get(crackdownStatus.crackdownPolice)}">
<td th:if="${crackdownStatus.crackdownBoat eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.crackdownPolice)}">
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td th:text="${crackdownStatus.boatNameKr}"></td>
<td th:text="${crackdownStatus.sailorNameKr}"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.fisheryType)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.fisheryType)}">
<th:block th:each="code:${session.commonCode.get('FT')}">
<td th:if="${crackdownStatus.fisheryType eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<th:block th:if="${#strings.isEmpty(crackdownStatus.crackdownBoat)}">
<td></td>
</th:block>
<td th:text="|${crackdownStatus.boatNnySung} ${crackdownStatus.boatNnySi}|"></td>
<td th:text="|${crackdownStatus.tonCnt}t|"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.boatMaterial)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.boatMaterial)}">
<th:block th:each="code:${session.commonCode.get('BM')}">
<td th:if="${crackdownStatus.boatMaterial eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.crackdownBoat)}">
<th:block th:each="commonCode:${session.commonCode.get(crackdownStatus.crackdownPolice)}">
<td th:if="${crackdownStatus.crackdownBoat eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td class="text-wrap min-width-300" th:text="${crackdownStatus.violationStr}"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.processStatus)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.processStatus)}">
<th:block th:each="code:${session.commonCode.get('PR')}">
<td th:if="${crackdownStatus.processStatus eq code.itemCd}" th:text="${code.itemValue}"></td>
</th:block>
<td th:text="${crackdownStatus.boatNameKr}"></td>
<td th:text="${crackdownStatus.sailorNameKr}"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.fisheryType)}">
<td></td>
</th:block>
<td>
<th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${crackdownStatus.wrtOrgan eq code.itemCd}" th:text="${code.itemValue}"></th:block>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.fisheryType)}">
<th:block th:each="commonCode:${session.commonCode.get('FT')}">
<td th:if="${crackdownStatus.fisheryType eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:each="code:${session.commonCode.get('JT')}">
<th:block th:if="${crackdownStatus.wrtUserGrd eq code.itemCd}" th:text="${code.itemValue}"></th:block>
</th:block>
<td th:text="|${crackdownStatus.boatNnySung} ${crackdownStatus.boatNnySi}|"></td>
<td th:text="|${crackdownStatus.tonCnt}t|"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.boatMaterial)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.boatMaterial)}">
<th:block th:each="commonCode:${session.commonCode.get('BM')}">
<td th:if="${crackdownStatus.boatMaterial eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td class="ws-normal min-width-300" th:text="${crackdownStatus.violationStr}"></td>
<th:block th:if="${#strings.isEmpty(crackdownStatus.processStatus)}">
<td></td>
</th:block>
<th:block th:unless="${#strings.isEmpty(crackdownStatus.processStatus)}">
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<td th:if="${crackdownStatus.processStatus eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td>
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
<th:block th:if="${crackdownStatus.wrtOrgan eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
<th:block th:if="${crackdownStatus.wrtUserGrd eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<th:block th:text="${crackdownStatus.wrtUserNm}"></th:block>
</td>
<td th:text="${#temporals.format(crackdownStatus.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</tbody>
</table>
</div>
<div class="row justify-content-between">
<div class="col-auto"></div>
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination mb-0">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
</th:block>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}">
<a class="page-link" href="#" th:text="${num}"></a>
</li>
</th:block>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</th:block>
</ul>
</nav>
</div>
<div class="col-auto">
<input type="button" class="btn btn-success" value="등록" id="getFishingBoatEditModalBtn">
</div>
</div>
<th:block th:text="${crackdownStatus.wrtUserNm}"></th:block>
</td>
<td th:text="${#temporals.format(crackdownStatus.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between">
<div class="col-auto"></div>
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination mb-0">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
</th:block>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}">
<a class="page-link" href="#" th:text="${num}"></a>
</li>
</th:block>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</th:block>
</ul>
</nav>
</div>
<div class="col-auto">
<input type="button" class="btn btn-success" value="등록" id="getFishingBoatEditModalBtn">
</div>
</div>
</div>
@ -291,7 +295,7 @@
<input type="hidden" id="modalUrl" value="/modal/crackdownStatusModal">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="subModalBody">
<div class="modal-body text-nowrap" id="subModalBody">
<div class="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">

View File

@ -1,6 +1,5 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
@ -11,11 +10,14 @@
</th:block>
<div layout:fragment="content">
<main>
<h4>불법조업 외국어선 처리현황</h4>
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row justify-content-between">
<div class="col-auto"><h4>불법조업 외국어선 처리현황</h4></div>
<div class="col-auto"><p class="mb-0 mt-2">외사통계 > 불법조업 외국어선 > 불법조업 외국어선 처리현황</p></div>
</div>
<div class="row mx-0">
<div class="col-12 card bg-light">
<div class="col-12 card bg-light text-center">
<div class="card-body">
<form method="get" th:action="@{/faStatistics/processResult}" id="processResultSearchForm">
<div class="row justify-content-between py-1">
@ -29,146 +31,165 @@
</select>
</div>
</div>
<div class="col-10">
<div class="row justify-content-end">
<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="사건번호" name="sailorNameKr" th:value="${searchParams.caseNum}">
<div class="col-8">
<div class="row">
<div class="col-11">
<div class="row justify-content-end pb-1">
<div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="사건번호" name="sailorNameKr" th:value="${searchParams.caseNum}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownPolice" id="crackdownPolice">
<option value="">사건담당경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${searchParams.crackdownPolice eq commonCode.itemCd}"></option>
</th:block>
<option value="etc" th:selected="${searchParams.crackdownPolice ne '' && searchParams.crackdownPolice ne null && !#strings.contains(searchParams.crackdownPolice, 'CPO')}">직접입력</option>
</select>
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="boatNameKr" id="boatNameKr" placeholder="피의자(선박명)" th:value="${searchParams.boatNameKr}">
</div>
<div class="col-2">
<select class="form-select form-select-sm violation" name="violation">
<option value="">위반내용</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.violation}"></option>></option>
</th:block>
</select>
</div>
</div>
<div class="row justify-content-end">
<div class="col-2">
<input class="form-control form-control-sm" name="sentencingCourt" id="sentencingCourt" placeholder="선고법원" th:value="${searchParams.sentencingCourt}">
</div>
<div class="col-2">
<input class="form-control form-control-sm" name="sentencingDetail" id="sentencingDetail" placeholder="선고내용" th:value="${searchParams.sentencingDetail}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="executionDetail" id="executionDetail">
<option value="">처리현황</option>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.executionDetail}"></option>
</th:block>
</select>
</div>
<div class="col-4">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<select class="form-select form-select-sm w-30" name="dateSelector">
<option value="">조건선택</option>
<option value="napoDt" th:selected="${searchParams.dateSelector eq 'napoDt'}">나포일시</option>
<option value="evictionDt" th:selected="${searchParams.dateSelector eq 'evictionDt'}">퇴거일</option>
<option value="directHandoverDt" th:selected="${searchParams.dateSelector eq 'directHandoverDt'}">직접인계일</option>
<option value="consignmentDt" th:selected="${searchParams.dateSelector eq 'consignmentDt'}">위탁일</option>
<option value="confiscationDt" th:selected="${searchParams.dateSelector eq 'confiscationDt'}">몰수확정일</option>
<option value="boatDisposalDt" th:selected="${searchParams.dateSelector eq 'boatDisposalDt'}">폐선일</option>
<option value="returnDt" th:selected="${searchParams.dateSelector eq 'returnDt'}">환부일</option>
<option value="wrtDt" th:selected="${searchParams.dateSelector eq 'wrtDt'}">최종수정일</option>
</select>
<input type="text" class="form-control form-control-sm w-35" id="startDate" name="startDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.startDate}">
<input type="text" class="form-control form-control-sm w-35" id="endDate" name="endDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.endDate}">
</div>
</div>
</div>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="crackdownPolice" id="crackdownPolice">
<option value="">사건담당경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${searchParams.crackdownPolice eq commonCode.itemCd}"></option>
</th:block>
<option value="etc" th:selected="${searchParams.crackdownPolice ne '' && searchParams.crackdownPolice ne null && !#strings.contains(searchParams.crackdownPolice, 'CPO')}">직접입력</option>
</select>
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="boatNameKr" id="boatNameKr" placeholder="피의자(선박명)" th:value="${searchParams.boatNameKr}">
</div>
<div class="col-auto">
<select class="form-select form-select-sm violation" name="violation">
<option value="">위반내용</option>
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.violation}"></option>></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="sentencingCourt" id="sentencingCourt" placeholder="선고법원" th:value="${searchParams.sentencingCourt}">
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="sentencingDetail" id="sentencingDetail" placeholder="선고내용" th:value="${searchParams.sentencingDetail}">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="executionDetail" id="executionDetail">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.executionDetail}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="returnDt" id="returnDate" placeholder="환부일" th:value="${#temporals.format(searchParams.returnDt, 'yyyy-MM-dd')}">
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="consignmentStartDt" id="consignmentStartDate" placeholder="위탁시작일" th:value="${#temporals.format(searchParams.consignmentStartDt, 'yyyy-MM-dd')}">
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="consignmentEndDt" id="consignmentEndDate" placeholder="위탁종료일" th:value="${#temporals.format(searchParams.consignmentEndDt, 'yyyy-MM-dd')}">
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="confiscationDt" id="confiscationDate" placeholder="몰수확정일" th:value="${#temporals.format(searchParams.confiscationDt, 'yyyy-MM-dd')}">
</div>
<div class="col-auto">
<input class="form-control form-control-sm" name="boatDisposalDt" id="boatDisposalDate" placeholder="폐선일" th:value="${#temporals.format(searchParams.boatDisposalDt, 'yyyy-MM-dd')}">
<div class="col-1 d-grid gap-2">
<input type="submit" class="btn btn-lg btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
<div class="col-auto">
<input type="submit" class="btn btn-sm btn-primary" id="searchBtn" value="검색">
</div>
</div>
</form>
<div class="row justify-content-start" style="overflow: hidden; overflow-x: scroll">
<table class="table table-sm table-hover table-bordered ws-nowrap" style="max-width: none; width: auto;" id="prTable">
<thead class="align-middle text-center">
<tr>
<th>연번</th>
<th>사건번호</th>
<th>사건담당경찰서</th>
<th>피의자(선박명)</th>
<th>위반장소 및 내용</th>
<th>선고내용</th>
<th>선고법원</th>
<th>집행내용</th>
<th>환부일</th>
<th>위탁시작일</th>
<th>위탁종료일</th>
<th>몰수확정일</th>
<th>폐선일(인계한 날짜)</th>
<th>최종수정일</th>
</tr>
</thead>
<tbody class="table-group-divider align-middle text-center">
<th:block th:each="processResult:${processResultList}">
<tr class="tr" th:data-key="${processResult.prKey}">
<td th:text="${processResult.prKey}"></td>
<td th:text="${processResult.crackdownStatus.caseNum}"></td>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${processResult.crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(processResult.crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${processResult.crackdownStatus.crackdownPolice}"></td>
</th:block>
<td th:text="${processResult.boatNameKr}"></td>
<td>
<span th:text="${processResult.crackdownStatus.napoSeaPointLon}"></span>
<span th:if="${processResult.crackdownStatus.napoSeaPointLon ne null && processResult.crackdownStatus.napoSeaPointLon ne ''}" th:text="${' ~ '}"></span>
<span th:text="${processResult.crackdownStatus.napoSeaPointLat}"></span>
<div th:text="${processResult.crackdownStatus.napoSeaPointDetail}"></div>
<th:block th:if="${#lists.size(processResult.violationList) >= 1}">
<div>
<th:block th:each="violation, i:${processResult.violationList}">
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<span th:if="${violation.violation eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></span>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 overflow-auto">
<table class="table table-sm table-hover table-bordered text-nowrap" id="prTable">
<thead class="align-middle">
<tr class="table-secondary">
<!--<th>연번</th>-->
<th>사건번호</th>
<th>사건담당경찰서</th>
<th>피의자(선박명)</th>
<th>위반장소</th>
<th class="text-wrap min-width-300">위반내용</th>
<th>선고내용</th>
<th>선고법원</th>
<th>처리현황</th>
<th>환부일</th>
<th>위탁시작일</th>
<th>위탁종료일</th>
<th>몰수확정일</th>
<th>폐선일(인계한 날짜)</th>
<th>최종수정일</th>
</tr>
</thead>
<tbody class="table-group-divider align-middle">
<th:block th:each="processResult:${processResultList}">
<tr class="tr" th:data-key="${processResult.prKey}">
<!--<td th:text="${processResult.prKey}"></td>-->
<td th:text="${processResult.crackdownStatus.caseNum}"></td>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${processResult.crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(processResult.crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${processResult.crackdownStatus.crackdownPolice}"></td>
</th:block>
<td th:text="${processResult.boatNameKr}"></td>
<td>
<span th:text="${processResult.crackdownStatus.napoSeaPointLon}"></span>
<span th:if="${processResult.crackdownStatus.napoSeaPointLon ne null && processResult.crackdownStatus.napoSeaPointLon ne ''}" th:text="${' ~ '}"></span>
<span th:text="${processResult.crackdownStatus.napoSeaPointLat}"></span>
<div th:text="${processResult.crackdownStatus.napoSeaPointDetail}"></div>
</td>
<td class="text-wrap min-width-300">
<th:block th:if="${#lists.size(processResult.violationList) >= 1}">
<th:block th:each="violation, i:${processResult.violationList}">
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<th:block th:if="${violation.violation eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<th:block th:if="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" th:text="${violation.violation}"></th:block>
<th:block th:if="${#lists.size(processResult.violationList) >= 1 && i.index < #lists.size(processResult.violationList)-1}">
<th:block>, </th:block>
</th:block>
</th:block>
</th:block>
<span th:if="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" th:text="${violation.violation}"></span>
<th:block th:if="${#lists.size(processResult.violationList) >= 1 && i.index < #lists.size(processResult.violationList)-1}">
<span>, </span>
</td>
<td th:text="${processResult.sentencingCourt}"></td>
<td th:text="${processResult.sentencingDetail}"></td>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<th:block th:if="${processResult.executionDetail ne null && #strings.contains(processResult.executionDetail, 'PR')}">
<td th:if="${processResult.executionDetail eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
</div>
<td th:if="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}" th:text="${processResult.executionDetail}"></td>
<th:block th:if="${processResult.executionDetail eq null}">
<td></td>
</th:block>
<td th:text="${processResult.returnDt}"></td>
<td th:text="${processResult.consignmentStartDt}"></td>
<td th:text="${processResult.consignmentEndDt}"></td>
<td th:text="${processResult.confiscationDt}"></td>
<td th:text="${processResult.boatDisposalDt}"></td>
<td th:text="${#temporals.format(processResult.updDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</th:block>
</td>
<td th:text="${processResult.sentencingCourt}"></td>
<td th:text="${processResult.sentencingDetail}"></td>
<th:block th:each="commonCode:${session.commonCode.get('PR')}">
<th:block th:if="${processResult.executionDetail ne null && #strings.contains(processResult.executionDetail, 'PR')}">
<td th:if="${processResult.executionDetail eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<td th:if="${processResult.executionDetail ne null && !#strings.contains(processResult.executionDetail, 'PR')}" th:text="${processResult.executionDetail}"></td>
<th:block th:if="${processResult.executionDetail eq null}">
<td></td>
</th:block>
<td th:text="${processResult.returnDt}"></td>
<td th:text="${processResult.consignmentStartDt}"></td>
<td th:text="${processResult.consignmentEndDt}"></td>
<td th:text="${processResult.confiscationDt}"></td>
<td th:text="${processResult.boatDisposalDt}"></td>
<td th:text="${#temporals.format(processResult.updDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</th:block>
</tbody>
</table>
</div>
<div class="row justify-content">
<button class="btn btn-sm btn-primary col-auto" id="processResultDownExcel">엑셀 다운로드</button>
<button class="btn btn-sm btn-primary col-auto" id="processResultAddBtn">등록</button>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between pt-1">
<div class="col-auto">
<button class="btn btn-success" id="processResultDownExcel">엑셀 다운로드</button>
</div>
<div class="col-auto">
<button class="btn btn-primary" id="processResultAddBtn">등록</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,339 +1,361 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script th:inline="javascript">
const commonCode = [[${session.commonCode}]];
</script>
<script type="text/javascript" th:src="@{/js/faStatistics/sailor.js}"></script>
<script th:inline="javascript">
const commonCode = [[${session.commonCode}]];
</script>
<script type="text/javascript" th:src="@{/js/faStatistics/sailor.js}"></script>
</th:block>
<div layout:fragment="content">
<main>
<h4>선원 세부 현황</h4>
<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">
<form method="get" th:action="@{/faStatistics/sailor}" id="sailorSearchForm">
<div class="row justify-content-between py-1">
<div class="col-auto">
<div class="col-auto">
<select class="form-select form-select-sm" name="year">
<option value="">연도</option>
<th:block th:each="year : ${#numbers.sequence(2020, 2030)}">
<option th:value="${year + '-01-01'}" th:text="${year}" th:selected="${searchParams.year eq year}"></option>
</th:block>
</select>
</div>
</div>
<div class="col-10">
<div class="row justify-content-end">
<div class="col-auto">
<select class="form-select form-select-sm" name="crackdownPolice">
<option value="">단속경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.crackdownPolice}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="crackdownBoat">
<option value="">단속함정</option>
<th:block th:each="num : ${#numbers.sequence(1,#lists.size(session.commonCode.get('CPO')))}">
<th:block th:if="${'CPO'+num == searchParams.crackdownPolice}" th:each="commonCode:${session.commonCode.get('CPO'+num)}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${searchParams.crackdownBoat eq commonCode.itemCd}"></option>
</th:block>
</th:block>
</select>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="선원명(한글)" name="sailorNameKr" th:value="${searchParams.sailorNameKr}">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="residence">
<option value="">거주지</option>
<th:block th:each="commonCode:${session.commonCode.get('RSC')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.residence}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="education">
<option value="">학력</option>
<th:block th:each="commonCode:${session.commonCode.get('SED')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.education}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="position">
<option value="">선박 내 직책</option>
<th:block th:each="commonCode:${session.commonCode.get('POS')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.position}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="career">
<option value="">승선경력</option>
<th:block th:each="commonCode:${session.commonCode.get('BE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.career}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="similarCriminalHistory">
<option value="">동종 범죄경력</option>
<option value="1" th:selected="${searchParams.similarCriminalHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.similarCriminalHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.similarCriminalHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.similarCriminalHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.similarCriminalHistory == 0}">없음</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="heterogeneousCriminalHistory">
<option value="">이종 범죄경력</option>
<option value="1" th:selected="${searchParams.heterogeneousCriminalHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.heterogeneousCriminalHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.heterogeneousCriminalHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.heterogeneousCriminalHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.heterogeneousCriminalHistory == 0}">없음</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="arrestHistory">
<option value="">검거이력</option>
<option value="1" th:selected="${searchParams.arrestHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.arrestHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.arrestHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.arrestHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.arrestHistory == 0}">없음</option>
</select>
</div>
</div>
</div>
<div class="col-auto">
<input type="submit" class="btn btn-sm btn-primary" id="searchBtn" value="검색">
</div>
</div>
</form>
<div class="row justify-content-start" style="overflow: hidden; overflow-x: scroll">
<table class="table table-sm table-hover table-bordered ws-nowrap" style="max-width: none; width: auto;" id="sailorTable">
<thead class="align-middle text-center">
<tr>
<th rowspan="2">연번</th>
<th rowspan="2">선박명</th>
<th rowspan="2">나포일시</th>
<th rowspan="2">단속경찰서</th>
<th rowspan="2">단속함정</th>
<th rowspan="2">위반장소</th>
<th rowspan="2">위반내용</th>
<th colspan="2">선원명</th>
<th rowspan="2">생년월일</th>
<th colspan="17">거주지(성기준)</th>
<th colspan="9">학력</th>
<th colspan="5">선박 내 직책</th>
<th colspan="6">승선경력</th>
<th colspan="5">동종 범죄경력</th>
<th colspan="5">이종 범죄경력</th>
<th colspan="5">검거이력<br>(나포이력, 선원 포함)</th>
<th rowspan="2">범죄경력<br>세부내용</th>
<th rowspan="2">임금<br>(월급여)</th>
<th rowspan="2">비고</th>
<th rowspan="2">최종수정일</th>
</tr>
<tr>
<th>한글</th>
<th>중문</th>
<th>요녕성</th>
<th>산동성</th>
<th>흑룡강성</th>
<th>하남성</th>
<th>길림성</th>
<th>내몽고</th>
<th>하북성</th>
<th>호남성</th>
<th>안휘성</th>
<th>산서성</th>
<th>강소성</th>
<th>사천성</th>
<th>섬서성</th>
<th>절강성</th>
<th>강동성</th>
<th>기타</th>
<th>확인불가</th>
<th>초등<br>중퇴</th>
<th>초등<br>졸업</th>
<th>중등<br>중퇴</th>
<th>중등<br>졸업</th>
<th>고등<br>중퇴</th>
<th>고등<br>졸업</th>
<th>대학<br>중퇴</th>
<th>대졸<br>이상</th>
<th>확인<br>불가</th>
<th>선장</th>
<th>항해장</th>
<th>기관장</th>
<th>기타<br>간부선원</th>
<th>일반선원<br>또는<br>확인불가</th>
<th>1년미만</th>
<th>1년이상<br>~<br>3년미만</th>
<th>3년이상<br>~<br>5년미만</th>
<th>5년이상<br>~<br>10년미만</th>
<th>10년이상</th>
<th>확인불가</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
</tr>
</thead>
<tbody class="table-group-divider align-middle text-center">
<th:block th:each="sailor:${sailorList}">
<tr class="tr" th:data-key="${sailor.sailorKey}">
<td th:text="${sailor.sailorKey}"></td>
<td th:text="${sailor.fishingBoat.boatNameKr}"></td>
<td th:text="${#temporals.format(sailor.crackdownStatus.napoDt, 'yyyy-MM-dd HH:mm')}"></td>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${sailor.crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(sailor.crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${sailor.crackdownStatus.crackdownPolice}"></td>
</th:block>
<th:block th:each="num : ${#numbers.sequence(1,#lists.size(session.commonCode.get('CPO')))}">
<th:block th:if="${'CPO'+num == sailor.crackdownStatus.crackdownPolice}" th:each="commonCode:${session.commonCode.get('CPO'+num)}">
<td th:if="${sailor.crackdownStatus.crackdownBoat eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<th:block th:if="${!#strings.contains(sailor.crackdownStatus.crackdownBoat, 'CPO')}">
<td></td>
</th:block>
<td>
<span th:text="${sailor.crackdownStatus.napoSeaPointLon}"> ~ </span>
<span th:text="${sailor.crackdownStatus.napoSeaPointLat}"></span>
<div th:text="${sailor.crackdownStatus.napoSeaPointDetail}"></div>
</td>
<td>
<th:block th:if="${#lists.size(sailor.violationList) >= 1}">
<th:block th:each="violation:${sailor.violationList}">
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<div th:if="${violation.violation eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></div>
</th:block>
</th:block>
</th:block>
</td>
<td th:text="${sailor.sailorNameKr}"></td>
<td th:text="${sailor.sailorNameCn}"></td>
<td th:text="${sailor.birthdate}"></td>
<td th:text="${sailor.residence == 'RSC001' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC002' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC003' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC004' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC005' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC006' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC007' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC008' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC009' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC010' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC011' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC012' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC013' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC014' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC015' ? 1 : 0}"></td>
<td th:text="${sailor.residence ne '' && sailor.residence ne null && !#strings.contains(sailor.residence, 'RSC') ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC016' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED001' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED002' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED003' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED004' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED005' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED006' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED007' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED008' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED009' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS001' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS002' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS003' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS005' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS006' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE001' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE002' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE003' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE004' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE005' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE006' ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.criminalHistoryDetail}"></td>
<td th:text="${sailor.monthlyWages}"></td>
<td th:text="${sailor.note}"></td>
<td th:text="${#temporals.format(sailor.updDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</th:block>
</tbody>
</table>
<main>
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row justify-content-between">
<div class="col-auto"><h4>선원 세부 현황</h4></div>
<div class="col-auto"><p class="mb-0 mt-2">외사통계 > 불법조업 외국어선 > 선원 세부 현황</p></div>
</div>
<div class="row mx-0">
<div class="col-12 card bg-light text-center">
<div class="card-body">
<form method="get" th:action="@{/faStatistics/sailor}" id="sailorSearchForm">
<div class="row justify-content-between py-1">
<div class="col-auto">
<div class="col-auto">
<select class="form-select form-select-sm" name="year">
<option value="">연도</option>
<th:block th:each="year : ${#numbers.sequence(2020, 2030)}">
<option th:value="${year + '-01-01'}" th:text="${year}" th:selected="${searchParams.year eq year}"></option>
</th:block>
</select>
</div>
</div>
<div class="col-8">
<div class="row">
<div class="col-11">
<div class="row justify-content-end pb-1">
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownPolice">
<option value="">단속경찰서</option>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.crackdownPolice}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="crackdownBoat">
<option value="">단속함정</option>
<th:block th:each="num : ${#numbers.sequence(1,#lists.size(session.commonCode.get('CPO')))}">
<th:block th:if="${'CPO'+num == searchParams.crackdownPolice}" th:each="commonCode:${session.commonCode.get('CPO'+num)}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${searchParams.crackdownBoat eq commonCode.itemCd}"></option>
</th:block>
</th:block>
</select>
</div>
<div class="col-2">
<input type="text" class="form-control form-control-sm" placeholder="선원명(한글)" name="sailorNameKr" th:value="${searchParams.sailorNameKr}">
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="residence">
<option value="">거주지</option>
<th:block th:each="commonCode:${session.commonCode.get('RSC')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.residence}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="education">
<option value="">학력</option>
<th:block th:each="commonCode:${session.commonCode.get('SED')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.education}"></option>
</th:block>
</select>
</div>
</div>
<div class="row justify-content">
<button class="btn btn-sm btn-primary col-auto" id="sailorDownExcel">엑셀 다운로드</button>
<button class="btn btn-sm btn-primary col-auto" id="sailorAddBtn">등록</button>
<div class="row justify-content-end">
<div class="col-2">
<select class="form-select form-select-sm" name="position">
<option value="">선박 내 직책</option>
<th:block th:each="commonCode:${session.commonCode.get('POS')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.position}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="career">
<option value="">승선경력</option>
<th:block th:each="commonCode:${session.commonCode.get('BE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"
th:selected="${commonCode.itemCd eq searchParams.career}"></option>
</th:block>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="similarCriminalHistory">
<option value="">동종 범죄경력</option>
<option value="1" th:selected="${searchParams.similarCriminalHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.similarCriminalHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.similarCriminalHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.similarCriminalHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.similarCriminalHistory == 0}">없음</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="heterogeneousCriminalHistory">
<option value="">이종 범죄경력</option>
<option value="1" th:selected="${searchParams.heterogeneousCriminalHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.heterogeneousCriminalHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.heterogeneousCriminalHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.heterogeneousCriminalHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.heterogeneousCriminalHistory == 0}">없음</option>
</select>
</div>
<div class="col-2">
<select class="form-select form-select-sm" name="arrestHistory">
<option value="">검거이력</option>
<option value="1" th:selected="${searchParams.arrestHistory == 1}">1건</option>
<option value="2" th:selected="${searchParams.arrestHistory == 2}">2건</option>
<option value="3" th:selected="${searchParams.arrestHistory == 3}">3건</option>
<option value="4" th:selected="${searchParams.arrestHistory == 4}">4이상</option>
<option value="0" th:selected="${searchParams.arrestHistory == 0}">없음</option>
</select>
</div>
</div>
</div>
<div class="col-1 d-grid gap-2">
<input type="submit" class="btn btn-lg btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
</div>
</form>
<div class="card">
<div class="card-body">
<div class="row justify-content-start">
<div class="col-12 overflow-auto">
<table class="table table-sm table-hover table-bordered text-nowrap" id="sailorTable">
<thead class="align-middle">
<tr class="table-secondary">
<!--<th rowspan="2">연번</th>-->
<th rowspan="2">선박명</th>
<th rowspan="2">나포일시</th>
<th rowspan="2">단속경찰서</th>
<th rowspan="2">단속함정</th>
<th rowspan="2">위반장소</th>
<th rowspan="2" class="text-wrap min-width-300">위반내용</th>
<th colspan="2">선원명</th>
<th rowspan="2">생년월일</th>
<th colspan="17">거주지(성기준)</th>
<th colspan="9">학력</th>
<th colspan="5">선박 내 직책</th>
<th colspan="6">승선경력</th>
<th colspan="5">동종 범죄경력</th>
<th colspan="5">이종 범죄경력</th>
<th colspan="5">검거이력<br>(나포이력, 선원 포함)</th>
<th rowspan="2">범죄경력<br>세부내용</th>
<th rowspan="2">임금<br>(월급여)</th>
<th rowspan="2">비고</th>
<th rowspan="2">최종수정일</th>
</tr>
<tr class="table-secondary">
<th>한글</th>
<th>중문</th>
<th>요녕성</th>
<th>산동성</th>
<th>흑룡강성</th>
<th>하남성</th>
<th>길림성</th>
<th>내몽고</th>
<th>하북성</th>
<th>호남성</th>
<th>안휘성</th>
<th>산서성</th>
<th>강소성</th>
<th>사천성</th>
<th>섬서성</th>
<th>절강성</th>
<th>강동성</th>
<th>기타</th>
<th>확인불가</th>
<th>초등<br>중퇴</th>
<th>초등<br>졸업</th>
<th>중등<br>중퇴</th>
<th>중등<br>졸업</th>
<th>고등<br>중퇴</th>
<th>고등<br>졸업</th>
<th>대학<br>중퇴</th>
<th>대졸<br>이상</th>
<th>확인<br>불가</th>
<th>선장</th>
<th>항해장</th>
<th>기관장</th>
<th>기타<br>간부선원</th>
<th>일반선원<br>또는<br>확인불가</th>
<th>1년미만</th>
<th>1년이상<br>~<br>3년미만</th>
<th>3년이상<br>~<br>5년미만</th>
<th>5년이상<br>~<br>10년미만</th>
<th>10년이상</th>
<th>확인불가</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
<th>1건</th>
<th>2건</th>
<th>3건</th>
<th>4건<br>이상</th>
<th>없음</th>
</tr>
</thead>
<tbody class="table-group-divider align-middle">
<th:block th:each="sailor:${sailorList}">
<tr class="tr" th:data-key="${sailor.sailorKey}">
<!--<td th:text="${sailor.sailorKey}"></td>-->
<td th:text="${sailor.fishingBoat.boatNameKr}"></td>
<td th:text="${#temporals.format(sailor.crackdownStatus.napoDt, 'yyyy-MM-dd HH:mm')}"></td>
<th:block th:each="commonCode:${session.commonCode.get('CPO')}">
<td th:if="${sailor.crackdownStatus.crackdownPolice eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(sailor.crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${sailor.crackdownStatus.crackdownPolice}"></td>
</th:block>
<th:block th:each="num : ${#numbers.sequence(1,#lists.size(session.commonCode.get('CPO')))}">
<th:block th:if="${'CPO'+num == sailor.crackdownStatus.crackdownPolice}" th:each="commonCode:${session.commonCode.get('CPO'+num)}">
<td th:if="${sailor.crackdownStatus.crackdownBoat eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<th:block th:if="${!#strings.contains(sailor.crackdownStatus.crackdownBoat, 'CPO')}">
<td></td>
</th:block>
<td>
<span th:text="${sailor.crackdownStatus.napoSeaPointLon}"> ~ </span>
<span th:text="${sailor.crackdownStatus.napoSeaPointLat}"></span>
<div th:text="${sailor.crackdownStatus.napoSeaPointDetail}"></div>
</td>
<td class="text-wrap min-width-300">
<th:block th:if="${#lists.size(sailor.violationList) >= 1}">
<th:block th:each="violation, i:${sailor.violationList}">
<th:block th:each="commonCode:${session.commonCode.get('VT')}">
<th:block th:if="${violation.violation eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></th:block>
</th:block>
<th:block th:if="${violation.violation ne null && !#strings.contains(violation.violation, 'VT')}" th:text="${violation.violation}"></th:block>
<th:block th:if="${#lists.size(sailor.violationList) >= 1 && i.index < #lists.size(sailor.violationList)-1}">
<th:block>, </th:block>
</th:block>
</th:block>
</th:block>
</td>
<td th:text="${sailor.sailorNameKr}"></td>
<td th:text="${sailor.sailorNameCn}"></td>
<td th:text="${sailor.birthdate}"></td>
<td th:text="${sailor.residence == 'RSC001' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC002' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC003' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC004' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC005' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC006' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC007' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC008' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC009' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC010' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC011' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC012' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC013' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC014' ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC015' ? 1 : 0}"></td>
<td th:text="${sailor.residence ne '' && sailor.residence ne null && !#strings.contains(sailor.residence, 'RSC') ? 1 : 0}"></td>
<td th:text="${sailor.residence == 'RSC016' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED001' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED002' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED003' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED004' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED005' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED006' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED007' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED008' ? 1 : 0}"></td>
<td th:text="${sailor.education == 'SED009' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS001' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS002' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS003' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS005' ? 1 : 0}"></td>
<td th:text="${sailor.position eq 'POS006' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE001' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE002' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE003' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE004' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE005' ? 1 : 0}"></td>
<td th:text="${sailor.career == 'BE006' ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.similarCriminalHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.heterogeneousCriminalHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 1 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 2 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 3 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory > 3 ? 1 : 0}"></td>
<td th:text="${sailor.arrestHistory == 0 ? 1 : 0}"></td>
<td th:text="${sailor.criminalHistoryDetail}"></td>
<td th:text="${sailor.monthlyWages}"></td>
<td th:text="${sailor.note}"></td>
<td th:text="${#temporals.format(sailor.updDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr>
</th:block>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between pt-1">
<div class="col-auto">
<button class="btn btn-success" id="sailorDownExcel">엑셀 다운로드</button>
</div>
<div class="col-auto">
<button class="btn btn-primary" id="sailorAddBtn">등록</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="sailorAddModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorAddModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorAddModalContent">
</div>
</div>
<div class="modal fade" id="sailorAddModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorAddModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorAddModalContent">
</div>
</div>
</div>
<div class="modal fade" id="sailorEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorEditModalContent">
</div>
</div>
<div class="modal fade" id="sailorEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorEditModalContent">
</div>
</div>
</div>
<div class="modal fade" id="sailorViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorViewModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorViewBody">
</div>
</div>
<div class="modal fade" id="sailorViewModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="sailorViewModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content" id="sailorViewBody">
</div>
</div>
</div>
</main>
</div>
</div>
</main>
</div>
</html>

View File

@ -183,7 +183,7 @@
<input type="hidden" id="modalUrl" value="/modal/userModal">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="subModalBody">
<div class="modal-body text-nowrap" id="subModalBody">
<div class="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">

View File

@ -252,7 +252,7 @@
<input type="hidden" id="modalUrl" value="/modal/menuModal">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="subModalBody">
<div class="modal-body text-nowrap" id="subModalBody">
<div class="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">