jiHyung 2022-11-08 09:31:02 +09:00
commit d4748f2e6b
21 changed files with 1363 additions and 129 deletions

View File

@ -1,6 +1,12 @@
package com.dbnt.faisp.config;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.model.CrackdownStatus;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.FishingBoatRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ProcessResultRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.SailorRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.repository.ViolationRepository;
import com.dbnt.faisp.main.faStatistics.crackdownsStatus.service.CrackdownStatusService;
import com.dbnt.faisp.main.menuMgt.model.MenuMgt;
import com.dbnt.faisp.main.menuMgt.service.MenuMgtService;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
@ -12,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@RestController
@RequiredArgsConstructor
@ -21,6 +29,11 @@ public class ModalController {
private final MenuMgtService menuMgtService;
private final UserInfoService userInfoService;
private final CodeMgtService codeMgtService;
private final CrackdownStatusService crackdownStatusService;
private final ViolationRepository violationRepository;
private final ProcessResultRepository processResultRepository;
private final FishingBoatRepository fishingBoatRepository;
private final SailorRepository sailorRepository;
@GetMapping("/menuModal")
public ModelAndView menuModalPage(@AuthenticationPrincipal UserInfo loginUser, MenuMgt menuMgt){
@ -49,4 +62,23 @@ public class ModalController {
mav.addObject("searchParams", userInfo);
return mav;
}
@GetMapping("/crackdownStatusModal")
public ModelAndView crackdownStatusModal(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){
ModelAndView mav = new ModelAndView("common/modal/crackdownStatusModal");
crackdownStatus.setQueryInfo();
List<CrackdownStatus> crackdownList = crackdownStatusService.selectCrackdownStatusList(crackdownStatus);
for (CrackdownStatus cds: crackdownList) {
cds.setViolationList(violationRepository.findByFbKey(cds.getFbKey()));
cds.setProcessResult(processResultRepository.findByCdsKey(cds.getCdsKey()).orElse(null));
cds.setFishingBoat(fishingBoatRepository.findByCdsKey(cds.getCdsKey()).orElse(null));
cds.setSailorList(sailorRepository.findByFbKey(cds.getFbKey()));
}
mav.addObject("crackdownList", crackdownList);
crackdownStatus.setContentCnt(crackdownStatusService.selectCrackdownStatusListCnt(crackdownStatus));
crackdownStatus.setPaginationInfo();
mav.addObject("searchParams", crackdownStatus);
return mav;
}
}

View File

@ -95,9 +95,13 @@ public class FishingBoatController {
}
@PostMapping("/saveFishingBoat")
public Integer saveFishingBoat(@AuthenticationPrincipal UserInfo loginUser,
FishingBoat fishingBoat){
public Integer saveFishingBoat(@AuthenticationPrincipal UserInfo loginUser, CrackdownStatus crackdownStatus){
return 0;
// return processResultService.saveProcessResult(processResult);
}
@GetMapping("/checkCaseNum")
public Integer checkCaseNum(String caseNum){
return fishingBoatService.checkCaseNum(caseNum);
}
}

View File

@ -61,8 +61,7 @@ public class CrackdownStatusBaseEntity extends BaseModel {
private String mmsi;
@Column(name = "field_ivsgt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate fieldIvsgt;
private String fieldIvsgt;
@Column(name = "obstr_exspd_cnt")
private Integer obstrExspdCnt;

View File

@ -7,4 +7,5 @@ import java.util.Optional;
public interface CrackdownStatusRepository extends JpaRepository<CrackdownStatus, Integer> {
Optional<CrackdownStatus> findByCdsKey(Integer cdsKey);
Optional<CrackdownStatus> findTop1ByCaseNum(String caseNum);
}

View File

@ -99,4 +99,8 @@ public class FishingBoatService extends BaseService {
return cdsKey;
}
public Integer checkCaseNum(String caseNum) {
return crackdownStatusRepository.findTop1ByCaseNum(caseNum).orElse(null)==null?0:1;
}
}

View File

@ -0,0 +1,65 @@
package com.dbnt.faisp.main.userInfo;
import com.dbnt.faisp.main.authMgt.service.AuthMgtService;
import com.dbnt.faisp.main.codeMgt.service.CodeMgtService;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
import com.dbnt.faisp.main.userInfo.service.UserInfoService;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@RestController
@RequiredArgsConstructor
@RequestMapping("/faisp")
public class FaispController {
private final AuthMgtService authMgtService;
private final CodeMgtService codeMgtService;
private final UserInfoService userInfoService;
@GetMapping("/policeList")
public ModelAndView partInfoList(@AuthenticationPrincipal UserInfo loginUser,UserInfo userInfo, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("faisp/policeList");
userInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
if(userInfo.getUserStatus() == null) {
userInfo.setUserStatus("USC003");
}
//메뉴권한 확인
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/faisp/policeList").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
userInfo.setQueryInfo();
mav.addObject("policeList", userInfoService.selectPoliceList(userInfo));
userInfo.setContentCnt(userInfoService.selectPoliceListCnt(userInfo));
userInfo.setPaginationInfo();
mav.addObject("mgtOrganList", loginUser.getDownOrganCdList());
mav.addObject("userSatus", userInfo.getUserStatus());
mav.addObject("searchParams", userInfo);
return mav;
}
@GetMapping("/policeEditModal")
public ModelAndView menuEditModal(UserInfo userInfo){
ModelAndView mav = new ModelAndView("/faisp/policeEditModal");
mav.addObject("ogList", codeMgtService.selectCodeMgtList("OG"));
mav.addObject("ofcList", codeMgtService.selectCodeMgtList("OFC"));
mav.addObject("titleList", codeMgtService.selectCodeMgtList("JT"));
mav.addObject("outturnList", codeMgtService.selectCodeMgtList("OTC"));
mav.addObject("seriesList", codeMgtService.selectCodeMgtList("SRC"));
mav.addObject("languageList", codeMgtService.selectCodeMgtList("LNG"));
mav.addObject("statusList", codeMgtService.selectCodeMgtList("USC"));
mav.addObject("userInfo", userInfoService.selectUserInfo(userInfo.getUserSeq()));
return mav;
}
}

View File

@ -17,4 +17,8 @@ public interface UserInfoMapper {
List<ParamMap> selectManagerList(ParamMap param);
List<DashboardConfig> selectDashboardConfigList(Integer userSeq);
List<UserInfo> selectPoliceList(UserInfo userInfo);
Integer selectPoliceListCnt(UserInfo userInfo);
}

View File

@ -0,0 +1,121 @@
package com.dbnt.faisp.main.userInfo.model;
import com.dbnt.faisp.config.BaseModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@IdClass(UserInfoHistory.UserInfoHistoryId.class)
@Table(name = "user_info_history")
public class UserInfoHistory extends BaseModel implements Serializable{
@Id
@Column(name = "user_seq")
private Integer userSeq;
@Id
@Column(name = "version_no")
private Integer versionNo;
@Column(name = "dic_code")
private String dicCode;
@Column(name = "user_id")
private String userId;
@Column(name = "user_nm")
private String userNm;
@Column(name = "birth_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
@Column(name = "sex")
private String sex;
@Column(name = "email")
private String email;
@Column(name = "phone_no")
private String phoneNo;
@Column(name = "area_cd")
private String areaCd;
@Column(name = "og_cd")
private String ogCd;
@Column(name = "ofc_cd")
private String ofcCd;
@Column(name = "title_cd")
private String titleCd;
@Column(name = "group_cd")
private String groupCd;
@Column(name = "series_cd")
private String seriesCd;
@Column(name = "ofc_head_yn")
private String ofcHeadYn;
@Column(name = "hiring_cd")
private String hiringCd;
@Column(name = "employ_cd")
private String employCd;
@Column(name = "outturn_cd")
private String outturnCd;
@Column(name = "work_cd")
private String workCd;
@Column(name = "job_in_cd")
private String jobInCd;
@Column(name = "language_cd")
private String languageCd;
@Column(name = "police_in_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate policeInDate;
@Column(name = "organ_in_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate organInDate;
@Column(name = "ofc_in_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate ofcInDate;
@Column(name = "title_in_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate titleInDate;
@Column(name = "user_status")
private String userStatus;
@Column(name = "wrt_organ")
private String wrtOrgan;
@Column(name = "wrt_part")
private String wrtPart;
@Column(name = "wrt_title")
private String wrtTitle;
@Column(name = "wrt_user_seq")
private Integer wrtUserSeq;
@Column(name = "wrt_nm")
private String wrtNm;
@Column(name = "wrt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class UserInfoHistoryId implements Serializable {
private Integer userSeq;
private Integer versionNo;
}
}

View File

@ -0,0 +1,15 @@
package com.dbnt.faisp.main.userInfo.repository;
import com.dbnt.faisp.main.userInfo.model.UserInfoHistory;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserInfoHistoryRepository extends JpaRepository<UserInfoHistory, UserInfoHistory.UserInfoHistoryId> {
UserInfoHistory findByUserSeq(Integer userSeq);
}

View File

@ -1,10 +1,13 @@
package com.dbnt.faisp.main.userInfo.service;
import com.dbnt.faisp.config.Role;
import com.dbnt.faisp.main.fipTarget.model.PartInfo;
import com.dbnt.faisp.main.userInfo.mapper.UserInfoMapper;
import com.dbnt.faisp.main.userInfo.model.DashboardConfig;
import com.dbnt.faisp.main.userInfo.model.UserInfo;
import com.dbnt.faisp.main.userInfo.model.UserInfoHistory;
import com.dbnt.faisp.main.userInfo.repository.DashboardConfigRepository;
import com.dbnt.faisp.main.userInfo.repository.UserInfoHistoryRepository;
import com.dbnt.faisp.main.userInfo.repository.UserInfoRepository;
import com.dbnt.faisp.util.ParamMap;
@ -24,6 +27,7 @@ import java.util.List;
public class UserInfoService implements UserDetailsService {
private final UserInfoRepository userInfoRepository;
private final UserInfoHistoryRepository userInfoHistoryRepository;
private final DashboardConfigRepository dashboardConfigRepository;
private final UserInfoMapper userInfoMapper;
@ -36,7 +40,46 @@ public class UserInfoService implements UserDetailsService {
userInfo.setUserStatus("USC002");
userInfo.setPassword(convertPassword(userInfo.getPassword()));
userInfo.setWrtDt(LocalDateTime.now());
return userInfoRepository.save(userInfo).getUserId();
UserInfo result = userInfoRepository.save(userInfo);
UserInfoHistory dbHis = userInfoHistoryRepository.findByUserSeq(result.getUserSeq());
if(dbHis == null) {
UserInfoHistory hisTmp = new UserInfoHistory();
hisTmp.setUserSeq(result.getUserSeq());
hisTmp.setVersionNo(1);
hisTmp.setDicCode(result.getDicCode());
hisTmp.setUserId(result.getUserId());
hisTmp.setUserNm(result.getUserNm());
hisTmp.setBirthDate(result.getBirthDate());
hisTmp.setSex(result.getSex());
hisTmp.setEmail(result.getEmail());
hisTmp.setPhoneNo(result.getPhoneNo());
hisTmp.setAreaCd(result.getAreaCd());
hisTmp.setOgCd(result.getOgCd());
hisTmp.setOfcCd(result.getOfcCd());
hisTmp.setTitleCd(result.getTitleCd());
hisTmp.setGroupCd(result.getGroupCd());
hisTmp.setSeriesCd(result.getSeriesCd());
hisTmp.setOfcHeadYn(result.getOfcHeadYn());
hisTmp.setHiringCd(result.getHiringCd());
hisTmp.setEmployCd(result.getEmployCd());
hisTmp.setOutturnCd(result.getOutturnCd());
hisTmp.setWorkCd(result.getWorkCd());
hisTmp.setJobInCd(result.getJobInCd());
hisTmp.setLanguageCd(result.getLanguageCd());
hisTmp.setPoliceInDate(result.getPoliceInDate());
hisTmp.setOrganInDate(result.getOrganInDate());
hisTmp.setOfcInDate(result.getOfcInDate());
hisTmp.setTitleInDate(result.getTitleInDate());
hisTmp.setUserStatus(result.getUserStatus());
hisTmp.setWrtOrgan(result.getOgCd());
hisTmp.setWrtPart(result.getOfcCd());
hisTmp.setWrtTitle(result.getTitleCd());
hisTmp.setWrtUserSeq(result.getUserSeq());
hisTmp.setWrtNm(result.getUserNm());
hisTmp.setWrtDt(result.getWrtDt());
userInfoHistoryRepository.save(hisTmp);
}
return result.getUserId();
}
@Transactional
public void updateUserInfo(UserInfo userInfo){
@ -48,7 +91,7 @@ public class UserInfoService implements UserDetailsService {
if(userInfo.getUserNm()!=null){
savedInfo.setUserNm(userInfo.getUserNm());
}
if(userInfo.getPassword()!=null){
if(userInfo.getPassword()!=null && userInfo.getPassword()!=null){
savedInfo.setPassword(convertPassword(userInfo.getPassword()));
}
if(userInfo.getPhoneNo()!=null){
@ -188,4 +231,11 @@ public class UserInfoService implements UserDetailsService {
}
dashboardConfigRepository.saveAll(configList);
}
public List<UserInfo> selectPoliceList(UserInfo userInfo) {
return userInfoMapper.selectPoliceList(userInfo);
}
public Integer selectPoliceListCnt(UserInfo userInfo) {
return userInfoMapper.selectPoliceListCnt(userInfo);
}
}

View File

@ -80,4 +80,58 @@
where b.user_seq = #{userSeq}
order by b.order_num
</select>
<sql id="selectPoliceListWhere">
<where>
user_status = #{userStatus}
and og_cd in
<foreach collection="downOrganCdList" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
</where>
</sql>
<select id="selectPoliceList" resultType="UserInfo" parameterType="UserInfo">
select user_seq,
(select item_value from code_mgt where item_cd = title_cd) as title_cd,
user_nm,
og_cd,
(select item_value from code_mgt where item_cd = og_cd) as organ_nm,
(select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd,
birth_date,
(select item_value from code_mgt where item_cd = sex) as sex,
police_in_date,
title_in_date,
ofc_in_date,
(select item_value from code_mgt where item_cd = outturn_cd) as outturn_cd,
(select item_value from code_mgt where item_cd = job_in_cd) as job_in_cd,
wrt_dt
from user_info
<include refid="selectPoliceListWhere"></include>
order by user_seq desc
limit #{rowCnt} offset #{firstIndex}
</select>
<select id="selectPoliceListCnt" resultType="Integer" parameterType="UserInfo">
select count(*)
from(
select user_seq,
(select item_value from code_mgt where item_cd = title_cd) as title_cd,
user_nm,
og_cd,
(select item_value from code_mgt where item_cd = og_cd) as organ_nm,
(select item_value from code_mgt where item_cd = ofc_cd) as ofc_cd,
birth_date,
(select item_value from code_mgt where item_cd = sex) as sex,
police_in_date,
title_in_date,
ofc_in_date,
(select item_value from code_mgt where item_cd = outturn_cd) as outturn_cd,
(select item_value from code_mgt where item_cd = job_in_cd) as job_in_cd,
wrt_dt
from user_info
<include refid="selectPoliceListWhere"></include>
order by user_seq desc
) a
</select>
</mapper>

View File

@ -90,3 +90,6 @@
.display-none{
display:none
}
#subModalBody{
white-space: nowrap;
}

View File

@ -1,16 +1,67 @@
let selectedList = [];
$(document).on('click', '#getFishingBoatEditModalBtn', function (){
getFishingBoatEditModal(null, null);
getFishingBoatEditModal(null);
})
$(document).on('change', '#caseNum', function (){
$.ajax({
url: '/faStatistics/checkCaseNum',
type: 'GET',
data: {caseNum: $("#caseNum").val()},
dataType:"json",
success: function(data){
if(data===1){
alert("일치하는 사건번호가 등록되어 있습니다.");
$("#caseNum").val("");
}
},
error:function(){
}
});
})
$(document).on('click', '#caseNumBtn', function (){
searchModalSubmit(1);
$("#crackdownSubModal").modal('show');
})
$(document).on('click', '.crackdownTr', function (){
$(".crackdownTr").prop("checked", false);
const chkbox = $(this).find('.crackdownChkbox')[0]
chkbox.checked = !chkbox.checked;
})
$(document).on('click', '#getCrackdownBtn', function (){
getFishingBoatEditModal($(".crackdownChkbox:checked").parents(".crackdownTr").attr("data-key"));
$("#crackdownSubModal").modal('hide');
})
$(document).on('change', '#crackdownPolice', function (){
getCrackdownBoatOption(this.value);
})
$(document).on('change', '#violationSelector', function (){
if(this.selectedOptions[0].value !== ""){
if($(".violationCd[value='"+this.selectedOptions[0].value+"']").length===0){
$("#violationDiv").append(
'<div class="col-6 violation">\n' +
' <div class="input-group w-auto">\n' +
' <input type="hidden" class="form-control form-control-sm fishingBoatInfo violationCd" value="'+this.selectedOptions[0].value+'">\n' +
' <input type="text" class="form-control form-control-sm" value="'+this.selectedOptions[0].innerText+'">\n' +
' <button type="button" class="btn btn-sm btn-outline-secondary opacity-75 violationRemoveBtn">\n' +
' <i class="bi bi-dash-square text-danger"></i>\n' +
' </button>\n' +
' </div>\n' +
'</div>'
)
}
}
})
$(document).on('click', '.violationRemoveBtn', function (){
$(this).parents(".violation").remove();
})
$(document).on('change', '.boatNameKr', function (){
$(".boatNameKr").val(this.value);
})
$(document).on('change', '#equalCaptain', function (){
if(this.checked){
$.each($("#captainDiv :input"), function (idx, input){
$("#shipOwnerDiv").find("[name='"+input.name+"']").val(input.value)
$("#shipOwnerDiv").find("#"+input.id+"2").val(input.value)
})
}else{
$("#shipOwnerDiv :input").val("");
@ -18,20 +69,25 @@ $(document).on('change', '#equalCaptain', function (){
})
$(document).on('change', '#captainDiv :input', function (){
if($("#equalCaptain").prop("checked")){
$("#shipOwnerDiv").find("[name='"+this.name+"']").val(this.value)
$("#shipOwnerDiv").find("#"+this.id+"2").val(this.value)
}
})
$(document).on('click', '#sailorAddBtn', function (){
$("#sailorRestrictionHome").append(
'<div class="col-4 sailorRestriction">\n' +
' <div class="input-group w-auto">\n' +
' <select class="form-select form-select-sm isRestriction" id="normalSailorRestriction">\n' +
' <option value="">선택</option>\n' +
' <option value="O">O</option>\n' +
' <option value="X">X</option>\n' +
' <div class="input-group">\n' +
' <select class="form-select form-select-sm isRestriction normalSailorPosition" style="width: 75px">\n' +
' <option value="">직책</option>\n' +
' <option value="POS005">기타 간부선원</option>\n' +
' <option value="POS006">일반선원 또는 확인불가</option>\n' +
' </select>\n' +
' <input type="text" class="form-control form-control-sm" id="normalSailor" placeholder="이름">\n' +
' <button type="button" class="btn btn-sm btn-outline-secondary opacity-50 sailorRemoveBtn">\n' +
' <select class="form-select form-select-sm isRestriction w-auto normalSailorRestriction">\n' +
' <option value="">선택</option>\n' +
' <option value="Y">O</option>\n' +
' <option value="N">X</option>\n' +
' </select>\n' +
' <input type="text" class="form-control form-control-sm sailorInfo normalSailorNm w-auto" placeholder="이름">\n' +
' <button type="button" class="btn btn-sm btn-outline-secondary w-auto opacity-75 sailorRemoveBtn">\n' +
' <i class="bi bi-dash-square text-danger"></i>\n' +
' </button>\n' +
' </div>\n' +
@ -41,6 +97,18 @@ $(document).on('click', '#sailorAddBtn', function (){
$(document).on('click', '.sailorRemoveBtn', function (){
$(this).parents(".sailorRestriction").remove();
})
$(document).on('click', '#saveTempBtn', function (){
saveFishingBoatInfo("N")
})
$(document).on('click', '#saveResultBtn', function (){
saveFishingBoatInfo("Y")
})
$(document).on('change', '.pressurizedTimeTaken', function (){
$("#pressurizedTimeTaken").val($("#pressurizedTimeTakenDate").val()+"일 "+$("#pressurizedTimeTakenTime").val())
})
$(document).on('change', '.warrantReqTake', function (){
$("#warrantReqTake").val($("#warrantReqTakeDate").val()+"일 "+$("#warrantReqTakeTime").val())
})
function getFishingBoatEditModal(cdsKey){
$.ajax({
@ -55,6 +123,10 @@ function getFishingBoatEditModal(cdsKey){
language: "ko",
autoclose: true
});
$(".dateTimeSelector").datetimepicker({
format:'Y-m-d H:i',
lang:'kr'
});
$(".timeSelector").datetimepicker({
datepicker:false,
format:'H:i',
@ -89,3 +161,82 @@ function getCrackdownBoatOption(categoryCd){
}
});
}
function saveFishingBoatInfo(saveYn){
if(confirm("저장하시겠습니까?")){
$("#saveYn").val(saveYn)
contentFade("in");
const formData = new FormData($("#fishingBoatEditForm")[0]);
$.each($(".violationCd"), function (idx, input){
formData.append('violationList['+idx+'].violation', $(input).val());
});
let sailorCnt=0;
// 선장 정보 입력
const sailorNameKr = $("#sailorNameKr").val();
if(sailorNameKr){
formData.append('sailorList['+sailorCnt+'].sailorNameKr', sailorNameKr);
formData.append('sailorList['+sailorCnt+'].sailorNameCn', $("#sailorNameCn").val());
formData.append('sailorList['+sailorCnt+'].sailorNamePinyin', $("#sailorNamePinyin").val());
formData.append('sailorList['+sailorCnt+'].birthdate', $("#birthdate").val());
formData.append('sailorList['+sailorCnt+'].sailorContact', $("#sailorContact").val());
formData.append('sailorList['+sailorCnt+'].residence', $("#residence").val());
formData.append('sailorList['+sailorCnt+'].arrestHistory', $("#arrestHistory").val());
formData.append('sailorList['+sailorCnt+'].note', $("#note").val());
formData.append('sailorList['+sailorCnt+'].isRestriction', $("#captainRestriction").val());
formData.append('sailorList['+sailorCnt+'].position', "POS001");
//선장 사진 파일 붙임 필요.
sailorCnt++;
}
// 선주 정보 입력
const sailorNameKr2 = $("#sailorNameKr2").val();
if(sailorNameKr) {
formData.append('sailorList[' + sailorCnt + '].sailorNameKr', sailorNameKr2);
formData.append('sailorList[' + sailorCnt + '].sailorNameCn', $("#sailorNameCn2").val());
formData.append('sailorList[' + sailorCnt + '].sailorNamePinyin', $("#sailorNamePinyin2").val());
formData.append('sailorList[' + sailorCnt + '].birthdate', $("#birthdate2").val());
formData.append('sailorList[' + sailorCnt + '].sailorContact', $("#sailorContact2").val());
formData.append('sailorList[' + sailorCnt + '].residence', $("#residence2").val());
formData.append('sailorList[' + sailorCnt + '].note', $("#note2").val());
formData.append('sailorList[' + sailorCnt + '].position', "POS004");
sailorCnt++;
}
const navigatingOfficerRestriction = $("#navigatingOfficerRestriction").val()
if(navigatingOfficerRestriction){
formData.append('sailorList['+sailorCnt+'].isRestriction', navigatingOfficerRestriction);
formData.append('sailorList['+sailorCnt+'].position', "POS002");
sailorCnt++;
}
const chiefEngineerRestriction = $("#chiefEngineerRestriction").val();
if(chiefEngineerRestriction){
formData.append('sailorList['+sailorCnt+'].isRestriction', chiefEngineerRestriction);
formData.append('sailorList['+sailorCnt+'].position', "POS003");
sailorCnt++;
}
$.each($(".sailorRestriction"), function (idx, div){
const position = $(div).find(".normalSailorPosition").val();
if(position===""){
alert("선원의 직책이 선택되지 않았습니다.")
return false
}
formData.append('sailorList['+(idx+sailorCnt)+'].isRestriction', $(div).find(".normalSailorRestriction").val());
formData.append('sailorList['+(idx+sailorCnt)+'].sailorNameKr', $(div).find(".normalSailorNm").val());
formData.append('sailorList['+(idx+sailorCnt)+'].position', position);
});
$.ajax({
type : 'POST',
data : formData,
url : "/faStatistics/saveFishingBoat",
processData: false,
contentType: false,
success : function() {
alert("저장되었습니다.");
contentFade("out");
// location.reload();
},
error : function(xhr, status) {
alert("저장에 실패하였습니다.");
contentFade("out");
}
})
}
}

View File

@ -0,0 +1,22 @@
$(document).on('click', '.policeTr', function (){
const userSeq = (Number($(this).find(".userSeq").val()));
console.log(userSeq);
showModal(userSeq);
});
function showModal(userSeq){
$.ajax({
url: '/faisp/policeEditModal',
data: {userSeq: userSeq},
type: 'GET',
dataType:"html",
success: function(html){
$("#policeEditModalContent").empty().append(html);
$("#policeEditModal").modal('show');
},
error:function(){
}
});
}

View File

@ -6,6 +6,8 @@
</div>
<div class="modal-body">
<form id="userInfoUpdate" action="#" method="post">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="userSeq" id="userSeq" class="userSeq" th:value="${userInfo.userSeq}">
<input type="hidden" name="userStatus" th:value="${userInfo.userStatus}">
<div class="mb-3 mt-3 row">

View File

@ -0,0 +1,364 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">
<input type="hidden" name="pageIndex" id="modalPageIndex" th:value="${searchParams.pageIndex}">
<input type="hidden" name="rowCnt" value="10">
<div class="row justify-content-end pe-3 py-1">
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">
<input type="text" class="form-control form-control-sm" name="caseNum" placeholder="사건번호" th:value="${searchParams.caseNum}">
</div>
<input type="button" class="btn btn-sm btn-primary col-auto" id="searchModalBtn" value="검색">
</div>
</div>
</div>
</form>
<div class="row justify-content-start">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12" style="overflow: hidden; overflow-x: scroll">
<table class="table table-striped table-bordered" style="max-width: none; width: auto;" id="cdsTable">
<thead>
<tr>
<th rowspan="4">연번</th>
<th rowspan="4">사건번호</th>
<th rowspan="4">나포일시</th>
<th rowspan="4">위반장소</th>
<th rowspan="4">위반내용</th>
<th colspan="4">침범유형</th>
<th rowspan="3">NLL</th>
<th colspan="7">특수공무집행방해</th>
<th rowspan="4">사건담당경찰서</th>
<th colspan="2">검거기관</th>
<th rowspan="4">MMSI.NO(AIS)</th>
<th colspan="6">선박제원</th>
<th rowspan="3" colspan="2">선장(출생년도)</th>
<th rowspan="4">선종</th>
<th rowspan="3" colspan="2">어획물 축소기재</th>
<th colspan="5">범칙물</th>
<th colspan="2">처리현황</th>
<th colspan="3">담보금납부(만원)</th>
<th colspan="2">담보금미납(만원)</th>
<th colspan="10">선박처리</th>
<th colspan="4">직접인계</th>
<th colspan="6">구속</th>
<th colspan="6">불구속</th>
<th rowspan="3" colspan="4">현장조사</th>
<th rowspan="3" colspan="2">압송</th>
<th rowspan="4">영장청구 소요시간</th>
<th colspan="5">압수어구</th>
</tr>
<tr>
<th rowspan="2">무허가 조업</th>
<th rowspan="2">
특정금지<br>
(무허가, 정선명령위반)
</th>
<th rowspan="2">
EEZ<br>
제한조건
</th>
<th rowspan="2">영해침범</th>
<th rowspan="2">발생건수</th>
<th colspan="3">인적피해</th>
<th colspan="3">물적피해</th>
<th rowspan="2" colspan="2">구분</th>
<th rowspan="3">선명</th>
<th rowspan="3">톤수(톤)</th>
<th rowspan="3">선원(명)</th>
<th rowspan="3">선질</th>
<th rowspan="2" colspan="2">선적</th>
<th rowspan="3">어종</th>
<th rowspan="2">어획량(kg)</th>
<th rowspan="2">폐기량(kg)</th>
<th rowspan="2">위판량(kg)</th>
<th rowspan="2">위판금액(원)</th>
<th rowspan="2">조사중</th>
<th rowspan="2">완료</th>
<th rowspan="2">척수</th>
<th rowspan="2">납부액</th>
<th rowspan="3">납부일시</th>
<th rowspan="2">미납</th>
<th rowspan="2">미납금액</th>
<th rowspan="2">위탁관리</th>
<th rowspan="3">위탁시작일</th>
<th rowspan="3">위탁종료일</th>
<th rowspan="2">퇴거</th>
<th rowspan="2">직접인계</th>
<th rowspan="2">공매</th>
<th colspan="2">폐선</th>
<th rowspan="2">침몰</th>
<th rowspan="2">환부</th>
<th rowspan="3">일시</th>
<th rowspan="3">해점</th>
<th rowspan="3">인계함정</th>
<th rowspan="3">중측인수함정</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 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 rowspan="2">폭(유망)</th>
<th rowspan="2">조(형망)</th>
<th rowspan="2">개(통발)</th>
<th rowspan="2">기타</th>
</tr>
<tr>
<th>피해인원</th>
<th>피해액(만원)</th>
<th rowspan="2">상세내용</th>
<th>발생건수</th>
<th>피해액(만원)</th>
<th rowspan="2">상세내용</th>
<th>단순폐선</th>
<th>폐선조건부공매</th>
</tr>
<tr>
<th th:text="${#aggregates.sum(crackdownList.?[invasionType == 'IST001'].![1]) ne null ? #aggregates.sum(crackdownList.?[invasionType == 'IST001'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[invasionType == 'IST002'].![1]) ne null ? #aggregates.sum(crackdownList.?[invasionType == 'IST002'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[invasionType == 'IST003'].![1]) ne null ? #aggregates.sum(crackdownList.?[invasionType == 'IST003'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[invasionType == 'IST004'].![1]) ne null ? #aggregates.sum(crackdownList.?[invasionType == 'IST004'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[nll == 'Y'].![1]) ne null ? #aggregates.sum(crackdownList.?[nll == 'Y'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[personDamageCnt > 0 || personDamageAmount > 0].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![personDamageCnt])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![personDamageAmount])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[materialDamageCnt > 0 || materialDamageAmount > 0].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![materialDamageAmount])}"></th>
<th>단속경찰서</th>
<th>단속함정</th>
<th></th>
<th></th>
<th>이름</th>
<th>출생년도</th>
<th>어종</th>
<th>수량</th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.offenseCatchCnt])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.offenseIllegalWasteQuantity])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.offenseQuantity])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.offenseAmount])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.processStatus == 'PR001'].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.processStatus == 'PR001'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.processStatus == 'PR009'].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.processStatus == 'PR009'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.damboPayment > 0].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.damboPayment])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.damboUnpaidAmount > 0].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![fishingBoat.damboUnpaidAmount])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.consignmentStartDt != null].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.evictionDt != null].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.directHandoverDt != null].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT001'].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT001'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT002'].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT002'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT003'].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.boatDisposalDt != null && processResult.boatDisposalType == 'BDT003'].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.confiscationDt != null].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.returnDt != null].![1]) ne null ? 1 : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![restrictionTotal])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![restrictionCaptin])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![restrictionMate])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![restrictionWarden])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![restrictionSailor])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.confiscationDt != null].![1]) ne null ? #aggregates.sum(crackdownList.?[processResult.confiscationDt != null].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.![notRestrictionTotal])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![notRestrictionCaptin])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![notRestrictionMate])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![notRestrictionWarden])}"></th>
<th th:text="${#aggregates.sum(crackdownList.![notRestrictionSailor])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[processResult.confiscationDt != null].![1]) ne null ? 0 : #aggregates.sum(crackdownList.?[processResult.confiscationDt != null].![1])}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fieldIvsgtNapoDt != null].![1]) ne null ? 1 : 0}"></th>
<th>나포일시</th>
<th>석방일시</th>
<th>소요시간</th>
<th>소요시간</th>
<th>거리(해리)</th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationFrame != ''].![1]) ne null ? #aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationFrame != ''].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationWidth != ''].![1]) ne null ? #aggregates.sum(crackdownList.?[fishingBoat.confiscationWidth != null && fishingBoat.confiscationWidth != ''].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationJo != ''].![1]) ne null ? #aggregates.sum(crackdownList.?[fishingBoat.confiscationJo != null && fishingBoat.confiscationJo != ''].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationGae != ''].![1]) ne null ? #aggregates.sum(crackdownList.?[fishingBoat.confiscationGae != null && fishingBoat.confiscationGae != ''].![1]) : 0}"></th>
<th th:text="${#aggregates.sum(crackdownList.?[fishingBoat.confiscationFrame != null && fishingBoat.confiscationEtc != ''].![1]) ne null ? #aggregates.sum(crackdownList.?[fishingBoat.confiscationEtc != null && fishingBoat.confiscationEtc != ''].![1]) : 0}"></th>
</tr>
</thead>
<tbody class="table-group-divider">
<th:block th:each="crackdownStatus:${crackdownList}">
<tr class="crackdownTr" th:data-key="${crackdownStatus.cdsKey}">
<td><input type="checkbox" class="crackdownChkbox"></td>
<td th:text="${crackdownStatus.cdsKey}"></td>
<td th:text="${crackdownStatus.caseNum}"></td>
<td th:text="${crackdownStatus.napoDt}"></td>
<td>
<th:block th:if="${#lists.size(crackdownStatus.violationList) >= 1}">
<th:block th:each="violation:${crackdownStatus.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>
<span th:text="${crackdownStatus.napoSeaPointLat}"> ~ </span>
<span th:text="${crackdownStatus.napoSeaPointLon}"></span>
<div th:text="${crackdownStatus.napoSeaPointDetail}"></div>
</td>
<th:block th:each="commonCode:${session.commonCode.get('IST')}">
<td th:if="${crackdownStatus.invasionType ne null && crackdownStatus.invasionType eq 'IST001' && crackdownStatus.invasionType eq commonCode.itemCd}" th:text="1"></td>
<td th:if="${crackdownStatus.invasionType ne commonCode.itemCd}" th:text="0"></td>
</th:block>
<td th:text="${crackdownStatus.nll eq 'Y' ? 1 : 0}"></td>
<td th:text="${crackdownStatus.personDamageCnt ne 0 && crackdownStatus.personDamageAmount ne 0 ? 1 : 0}"></td>
<td th:text="${crackdownStatus.personDamageCnt}"></td>
<td th:text="${crackdownStatus.personDamageAmount}"></td>
<td th:text="${crackdownStatus.personDamageDetail}"></td>
<td th:text="${crackdownStatus.materialDamageCnt ne 0 && crackdownStatus.materialDamageAmount ne 0 ? 1 : 0}"></td>
<td th:text="${crackdownStatus.materialDamageAmount}"></td>
<td th:text="${crackdownStatus.materialDamageDetail}"></td>
<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:if="${crackdownStatus.caseAgency eq null || crackdownStatus.caseAgency eq ''}">
<td></td>
</th:block>
<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 th:if="${!#strings.contains(crackdownStatus.crackdownPolice, 'CPO')}">
<td th:text="${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 == crackdownStatus.crackdownPolice}" th:each="commonCode:${session.commonCode.get('CPO'+num)}">
<td th:if="${crackdownStatus.crackdownBoat eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
</th:block>
<th:block th:if="${!#strings.contains(crackdownStatus.crackdownBoat, 'CPO')}">
<td></td>
</th:block>
<td th:text="${crackdownStatus.mmsi}"></td>
<td th:text="${crackdownStatus.fishingBoat.boatNameKr}"></td>
<td th:text="${crackdownStatus.fishingBoat.tonCnt}"></td>
<td th:text="${crackdownStatus.restrictionSailor + crackdownStatus.notRestrictionSailor}"></td>
<th:block th:each="commonCode:${session.commonCode.get('BM')}">
<td th:if="${crackdownStatus.fishingBoat.boatMaterial eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(crackdownStatus.fishingBoat.boatMaterial, 'BM')}">
<td th:text="${crackdownStatus.fishingBoat.boatMaterial}"></td>
</th:block>
<td th:text="${crackdownStatus.fishingBoat.boatNnySung}"></td>
<td th:text="${crackdownStatus.fishingBoat.boatNnySi}"></td>
<th:block th:each="sailor:${crackdownStatus.sailorList}">
<td th:if="${sailor.position eq 'POS001'}" th:text="${sailor.sailorNameKr}"></td>
<td th:if="${sailor.position eq 'POS001'}" th:text="${sailor.birthdate}"></td>
</th:block>
<th:block th:if="${#lists.size(crackdownStatus.sailorList) == 0}">
<td></td>
<td></td>
</th:block>
<th:block th:each="commonCode:${session.commonCode.get('FT')}">
<td th:if="${crackdownStatus.fishingBoat.fisheryType eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
</th:block>
<th:block th:if="${!#strings.contains(crackdownStatus.fishingBoat.fisheryType, 'FT')}">
<td th:text="${crackdownStatus.fishingBoat.fisheryType}"></td>
</th:block>
<td th:text="${crackdownStatus.fishingBoat.catchFishSpecies}"></td>
<td th:text="${crackdownStatus.fishingBoat.catchCnt}"></td>
<td th:text="${crackdownStatus.fishingBoat.offenseFishSpecies}"></td>
<td th:text="${crackdownStatus.fishingBoat.offenseCatchCnt}"></td>
<td th:text="${crackdownStatus.fishingBoat.offenseIllegalWasteQuantity}"></td>
<td th:text="${crackdownStatus.fishingBoat.offenseQuantity}"></td>
<td th:text="${crackdownStatus.fishingBoat.offenseAmount}"></td>
<td th:text="${crackdownStatus.processResult.processStatus eq 'PR001' ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.processStatus eq 'PR009' ? 1 : 0}"></td>
<td th:text="${crackdownStatus.fishingBoat.damboPayment ne 0 ? 1 : 0}"></td>
<td th:text="${crackdownStatus.fishingBoat.damboPayment}"></td>
<td th:text="${crackdownStatus.fishingBoat.paymentPaymentDt}"></td>
<td th:text="${crackdownStatus.fishingBoat.damboUnpaidAmount ne 0 ? 1 : 0}"></td>
<td th:text="${crackdownStatus.fishingBoat.damboUnpaidAmount}"></td>
<td th:text="${crackdownStatus.processResult.consignmentStartDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.consignmentStartDt}"></td>
<td th:text="${crackdownStatus.processResult.consignmentEndDt}"></td>
<td th:text="${crackdownStatus.processResult.evictionDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.directHandoverDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.boatDisposalDt ne null && crackdownStatus.processResult.boatDisposalType eq 'BDT001'? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.boatDisposalDt ne null && crackdownStatus.processResult.boatDisposalType eq 'BDT002'? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.boatDisposalDt ne null && crackdownStatus.processResult.boatDisposalType eq 'BDT003'? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.confiscationDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.returnDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.processResult.directHandoverDt}"></td>
<td>
<span th:text="${crackdownStatus.processResult.handoverSeaPointLat}"> ~ </span>
<span th:text="${crackdownStatus.processResult.handoverSeaPointLon}"></span>
</td>
<td th:text="${crackdownStatus.processResult.handoverBoat}"></td>
<td th:text="${crackdownStatus.processResult.middleTakeoverBoat}"></td>
<td th:text="${crackdownStatus.restrictionTotal}"></td>
<td th:text="${crackdownStatus.restrictionCaptin}"></td>
<td th:text="${crackdownStatus.restrictionMate}"></td>
<td th:text="${crackdownStatus.restrictionWarden}"></td>
<td th:text="${crackdownStatus.restrictionSailor}"></td>
<td th:text="${crackdownStatus.processResult.confiscationDt ne null ? 1 : 0}"></td>
<td th:text="${crackdownStatus.notRestrictionTotal}"></td>
<td th:text="${crackdownStatus.notRestrictionCaptin}"></td>
<td th:text="${crackdownStatus.notRestrictionMate}"></td>
<td th:text="${crackdownStatus.notRestrictionWarden}"></td>
<td th:text="${crackdownStatus.notRestrictionSailor}"></td>
<td th:text="${crackdownStatus.processResult.confiscationDt ne null ? 0 : 1}"></td>
<td th:text="${crackdownStatus.fieldIvsgtNapoDt ne null? 1 : 0}"></td>
<td th:text="${crackdownStatus.fieldIvsgtNapoDt }"></td>
<td th:text="${crackdownStatus.fieldIvsgtReleaseDt}"></td>
<td th:text="${crackdownStatus.fieldIvsgtTimeTaken}"></td>
<td th:text="${crackdownStatus.processResult.pressurizedTimeTaken}"></td>
<td th:text="${crackdownStatus.distance}"></td>
<td th:text="${crackdownStatus.processResult.warrantReqTakeTime}"></td>
<td th:text="${crackdownStatus.fishingBoat.confiscationFrame}"></td>
<td th:text="${crackdownStatus.fishingBoat.confiscationWidth}"></td>
<td th:text="${crackdownStatus.fishingBoat.confiscationJo}"></td>
<td th:text="${crackdownStatus.fishingBoat.confiscationGae}"></td>
<td th:text="${crackdownStatus.fishingBoat.confiscationEtc}"></td>
</tr>
</th:block>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-center">
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item modalPage" 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 modalPage" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex==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 modalPage" 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>
</div>
</div>
</div>
</div>
</div>
</div>
</html>

View File

@ -9,12 +9,13 @@
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="cdsKey" th:value="${crackdownStatus.cdsKey}">
<input type="hidden" name="fbKey" th:value="${crackdownStatus.fishingBoat.fbKey}">
<input type="hidden" name="saveYn" id="saveYn" th:value="${crackdownStatus.fishingBoat.saveYn}">
<input type="hidden" name="wrtOrgan" th:value="${crackdownStatus.wrtOrgan}">
<input type="hidden" name="wrtPart" th:value="${crackdownStatus.wrtPart}">
<input type="hidden" name="wrtUserSeq" th:value="${crackdownStatus.wrtUserSeq}">
<input type="hidden" name="wrtUserNm" th:value="${crackdownStatus.wrtUserNm}">
<input type="hidden" name="wrtUserGrd" th:value="${crackdownStatus.wrtUserGrd}">
<input type="hidden" name="wrtOrgan" th:value="${crackdownStatus.fishingBoat.wrtOrgan}">
<input type="hidden" name="wrtPart" th:value="${crackdownStatus.fishingBoat.wrtPart}">
<input type="hidden" name="wrtUserSeq" th:value="${crackdownStatus.fishingBoat.wrtUserSeq}">
<input type="hidden" name="wrtUserNm" th:value="${crackdownStatus.fishingBoat.wrtUserNm}">
<input type="hidden" name="wrtUserGrd" th:value="${crackdownStatus.fishingBoat.wrtUserGrd}">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="baseInfoTab" data-bs-toggle="tab" data-bs-target="#baseInfoTabPanel" type="button" role="tab" aria-controls="baseInfoTabPanel" aria-selected="true">기본정보</button>
@ -34,39 +35,42 @@
<div class="mb-3 row">
<label for="boatNameKr" class="col-sm-1 col-form-label col-form-label-sm text-center">선명</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm boatNameKr" id="boatNameKr" name="boatNameKr" placeholder="한글" th:value="${crackdownStatus.fishingBoat.boatNameKr}">
<input type="text" class="form-control form-control-sm fishingBoatInfo boatNameKr" id="boatNameKr" name="fishingBoat.boatNameKr" placeholder="한글" th:value="${crackdownStatus.fishingBoat.boatNameKr}">
</div>
<label for="caseNum" class="col-sm-1 col-form-label col-form-label-sm text-center">사건번호</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="caseNum" name="caseNum" th:value="${crackdownStatus.caseNum}">
<div class="input-group">
<input type="text" class="form-control form-control-sm crackdownStatusInfo" id="caseNum" name="caseNum" th:value="${crackdownStatus.caseNum}">
<input type="button" class="btn btn-sm btn-outline-primary w-auto" id="caseNumBtn" value="불러오기">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="caseAgency" 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" id="caseAgency" name="caseAgency">
<select class="form-select form-select-sm crackdownStatusInfo" id="caseAgency" name="caseAgency">
<option value="">선택</option>
<th:block th:each="code:${ataList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${crackdownStatus.caseAgency}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.caseAgency}"></option>
</th:block>
</select>
</div>
<label for="casePoliceOfficer" class="col-sm-1 col-form-label col-form-label-sm text-center fs-13">사건담당경찰관</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="casePoliceOfficer" name="casePoliceOfficer" th:value="${crackdownStatus.casePoliceOfficer}">
<input type="text" class="form-control form-control-sm crackdownStatusInfo" id="casePoliceOfficer" name="casePoliceOfficer" th:value="${crackdownStatus.casePoliceOfficer}">
</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" name="crackdownPolice" id="crackdownPolice">
<select class="form-select form-select-sm crackdownStatusInfo" name="crackdownPolice" id="crackdownPolice">
<option value="">선택</option>
<th:block th:each="code:${cpoList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${crackdownStatus.crackdownPolice}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.crackdownPolice}"></option>
</th:block>
</select>
</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" name="crackdownBoat" id="crackdownBoat" th:data-boatcode="${crackdownStatus.crackdownBoat}" disabled>
<select class="form-select form-select-sm crackdownStatusInfo" name="crackdownBoat" id="crackdownBoat" th:data-boatcode="${crackdownStatus.crackdownBoat}" disabled>
<option value="">단속경찰서를 선택해주세요.</option>
</select>
</div>
@ -74,22 +78,22 @@
<div class="mb-3 row">
<label for="napoDt" class="col-sm-1 col-form-label col-form-label-sm text-center">나포일시</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="napoDt" name="napoDt" placeholder="0000-00-00" th:value="${crackdownStatus.napoDt}">
<input type="text" class="form-control form-control-sm crackdownStatusInfo dateTimeSelector" id="napoDt" name="napoDt" placeholder="0000-00-00 00:00" th:value="${#temporals.format(crackdownStatus.napoDt, 'yyyy-MM-dd')}">
</div>
<label for="napoSeaPointLon" class="col-sm-1 col-form-label col-form-label-sm text-center">나포장소</label>
<div class="col-sm-5">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm w-25" id="napoSeaPointLon" name="napoSeaPointLon" placeholder="00 . 00 . 00N" th:value="${crackdownStatus.napoSeaPointLon}">
<input type="text" class="form-control form-control-sm w-25" id="napoSeaPointLat" name="napoSeaPointLat" placeholder="000-00.00E" th:value="${crackdownStatus.napoSeaPointLat}">
<input type="text" class="form-control form-control-sm w-50" id="napoSeaPointDetail" name="napoSeaPointDetail" placeholder="00도 00방 00해리, 어업협정선 내측 00해리" th:value="${crackdownStatus.napoSeaPointDetail}">
<input type="text" class="form-control form-control-sm w-25 crackdownStatusInfo" id="napoSeaPointLon" name="napoSeaPointLon" placeholder="00 . 00 . 00N" th:value="${crackdownStatus.napoSeaPointLon}">
<input type="text" class="form-control form-control-sm w-25 crackdownStatusInfo" id="napoSeaPointLat" name="napoSeaPointLat" placeholder="000-00.00E" th:value="${crackdownStatus.napoSeaPointLat}">
<input type="text" class="form-control form-control-sm w-50 crackdownStatusInfo" id="napoSeaPointDetail" name="napoSeaPointDetail" placeholder="00도 00방 00해리, 어업협정선 내측 00해리" th:value="${crackdownStatus.napoSeaPointDetail}">
</div>
</div>
<label for="fieldIvsgt" 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" name="fieldIvsgt" id="fieldIvsgt">
<select class="form-select form-select-sm crackdownStatusInfo" name="fieldIvsgt" id="fieldIvsgt">
<option value="">선택</option>
<option value="C">압송</option>
<option value="F">현장조사</option>
<option value="C" th:selected="${crackdownStatus.fieldIvsgt eq 'C'}">압송</option>
<option value="F" th:selected="${crackdownStatus.fieldIvsgt eq 'F'}">현장조사</option>
</select>
</div>
</div>
@ -104,36 +108,36 @@
<label for="sailorNameKr" class="col-sm-2 col-form-label col-form-label-sm text-center">선장명</label>
<div class="col-sm-10">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="sailorNameKr" name="sailorNameKr" placeholder="한글">
<input type="text" class="form-control form-control-sm" id="sailorNameCn" name="sailorNameCn" placeholder="중문">
<input type="text" class="form-control form-control-sm" id="sailorNamePinyin" name="sailorNamePinyin" placeholder="병음">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameKr" placeholder="한글">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameCn" placeholder="중문">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNamePinyin" placeholder="병음">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="birthdate" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="birthdate" name="birthdate" placeholder="0000-00-00">
<input type="text" class="form-control form-control-sm sailorInfo dateSelector" id="birthdate" placeholder="0000-00-00">
</div>
<label for="sailorContact" class="col-sm-2 col-form-label col-form-label-sm text-center">연락처</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="sailorContact" name="sailorContact">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorContact">
</div>
</div>
<div class="mb-3 row">
<label for="residence" class="col-sm-2 col-form-label col-form-label-sm text-center">주소</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="residence" name="residence" placeholder="성 기준">
<input type="text" class="form-control form-control-sm sailorInfo" id="residence" placeholder="성 기준">
</div>
<label for="arrestHistory" class="col-sm-2 col-form-label col-form-label-sm text-center">재범횟수</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="arrestHistory" name="arrestHistory">
<input type="text" class="form-control form-control-sm sailorInfo" id="arrestHistory">
</div>
</div>
<div class="mb-3 row">
<label for="note" class="col-sm-2 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm" id="note" name="note">
<input type="text" class="form-control form-control-sm sailorInfo" id="note">
</div>
</div>
<div class="row mb-3">
@ -154,7 +158,7 @@
-->
</div>
</div>
<input type="file" class="d-none" id="fileInputer" multiple>
<input type="file" class="d-none sailorInfo" id="fileInputer" multiple>
</div>
</div>
<div class="col-6 border-start" id="shipOwnerDiv">
@ -168,32 +172,32 @@
<label for="sailorNameKr2" class="col-sm-2 col-form-label col-form-label-sm text-center">선장명</label>
<div class="col-sm-10">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="sailorNameKr2" name="sailorNameKr" placeholder="한글">
<input type="text" class="form-control form-control-sm" id="sailorNameCn2" name="sailorNameCn" placeholder="중문">
<input type="text" class="form-control form-control-sm" id="sailorNamePinyin2" name="sailorNamePinyin" placeholder="병음">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameKr2" placeholder="한글">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNameCn2" placeholder="중문">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorNamePinyin2" placeholder="병음">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="birthdate2" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="birthdate2" name="birthdate" placeholder="0000-00-00">
<input type="text" class="form-control form-control-sm sailorInfo dateSelector" id="birthdate2" placeholder="0000-00-00">
</div>
<label for="sailorContact2" class="col-sm-2 col-form-label col-form-label-sm text-center">연락처</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="sailorContact2" name="sailorContact">
<input type="text" class="form-control form-control-sm sailorInfo" id="sailorContact2">
</div>
</div>
<div class="mb-3 row">
<label for="residence2" class="col-sm-2 col-form-label col-form-label-sm text-center">주소</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="residence2" name="residence" placeholder="성 기준">
<input type="text" class="form-control form-control-sm sailorInfo" id="residence2" placeholder="성 기준">
</div>
</div>
<div class="mb-3 row">
<label for="note2" class="col-sm-2 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-10">
<input type="text" class="form-control form-control-sm" id="note2" name="note">
<input type="text" class="form-control form-control-sm sailorInfo" id="note2">
</div>
</div>
</div>
@ -204,13 +208,13 @@
<label for="boatNameCn" class="col-sm-1 col-form-label col-form-label-sm text-center">선명</label>
<div class="col-sm-4">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm boatNameKr" placeholder="한글" th:value="${crackdownStatus.fishingBoat.boatNameKr}">
<input type="text" class="form-control form-control-sm" id="boatNameCn" name="boatNameCn" placeholder="중문" th:value="${crackdownStatus.fishingBoat.boatNameCn}">
<input type="text" class="form-control form-control-sm fishingBoatInfo boatNameKr" placeholder="한글" th:value="${crackdownStatus.fishingBoat.boatNameKr}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="boatNameCn" name="fishingBoat.boatNameCn" placeholder="중문" th:value="${crackdownStatus.fishingBoat.boatNameCn}">
</div>
</div>
<div class="col-sm-1"></div>
<label for="violationSelector" class="col-sm-1 col-form-label col-form-label-sm text-center">위반사항</label>
<div class="col-sm-2">
<div class="col-sm-1">
<select class="form-select form-select-sm" id="violationSelector">
<option value="">선택</option>
<th:block th:each="code:${vtList}">
@ -218,49 +222,54 @@
</th:block>
</select>
</div>
<div class="col-sm-4">
<div class="row" id="violationDiv">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="permitNum" class="col-sm-1 col-form-label col-form-label-sm text-center">허가번호</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="permitNum" name="permitNum" th:value="${crackdownStatus.fishingBoat.permitNum}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="permitNum" name="fishingBoat.permitNum" th:value="${crackdownStatus.fishingBoat.permitNum}">
</div>
<label for="nationality" class="col-sm-1 col-form-label col-form-label-sm text-center">국적</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="nationality" name="nationality" th:value="${crackdownStatus.fishingBoat.nationality}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="nationality" name="fishingBoat.nationality" th:value="${crackdownStatus.fishingBoat.nationality}">
</div>
<label for="sailorCnt" class="col-sm-1 col-form-label col-form-label-sm text-center">승선원</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="sailorCnt" name="sailorCnt" placeholder="0인" th:value="${crackdownStatus.fishingBoat.sailorCnt}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="sailorCnt" name="fishingBoat.sailorCnt" placeholder="0인" th:value="${crackdownStatus.fishingBoat.sailorCnt}">
</div>
<label for="tonCnt" class="col-sm-1 col-form-label col-form-label-sm text-center">톤수</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="tonCnt" name="tonCnt" placeholder="000.00t" th:value="${crackdownStatus.fishingBoat.tonCnt}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="tonCnt" name="fishingBoat.tonCnt" placeholder="000.00t" th:value="${crackdownStatus.fishingBoat.tonCnt}">
</div>
</div>
<div class="mb-3 row">
<label for="fisheryType" 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" id="fisheryType" name="fisheryType">
<select class="form-select form-select-sm fishingBoatInfo" id="fisheryType" name="fishingBoat.fisheryType">
<option value="">선택</option>
<th:block th:each="code:${ftList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${crackdownStatus.fishingBoat.fisheryType}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.fishingBoat.fisheryType}"></option>
</th:block>
</select>
</div>
<label for="boatMaterial" 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" id="boatMaterial" name="boatMaterial">
<select class="form-select form-select-sm fishingBoatInfo" id="boatMaterial" name="fishingBoat.boatMaterial">
<option value="">선택</option>
<th:block th:each="code:${bmList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${crackdownStatus.fishingBoat.boatMaterial}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.fishingBoat.boatMaterial}"></option>
</th:block>
</select>
</div>
<label for="boatNnySung" class="col-sm-1 col-form-label col-form-label-sm text-center">선적지</label>
<div class="col-sm-2">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="boatNnySung" name="boatNnySung" placeholder="성" th:value="${crackdownStatus.fishingBoat.boatNnySung}">
<input type="text" class="form-control form-control-sm" id="boatNnySi" name="boatNnySi" placeholder="시" th:value="${crackdownStatus.fishingBoat.boatNnySi}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="boatNnySung" name="fishingBoat.boatNnySung" placeholder="성" th:value="${crackdownStatus.fishingBoat.boatNnySung}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="boatNnySi" name="fishingBoat.boatNnySi" placeholder="시" th:value="${crackdownStatus.fishingBoat.boatNnySi}">
</div>
</div>
</div>
@ -268,50 +277,50 @@
<label for="offenseType" class="col-sm-1 col-form-label col-form-label-sm text-center">범칙물</label>
<div class="col-sm-3">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="offenseType" name="offenseType" placeholder="직접입력" th:value="${crackdownStatus.fishingBoat.offenseType}">
<input type="text" class="form-control form-control-sm" id="offenseWeight" name="offenseWeight" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseWeight}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseType" name="fishingBoat.offenseType" placeholder="직접입력" th:value="${crackdownStatus.fishingBoat.offenseType}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseWeight" name="fishingBoat.offenseWeight" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseWeight}">
</div>
</div>
<div class="col-sm-2"></div>
<label for="offenseQuantity" class="col-sm-1 col-form-label col-form-label-sm text-center">범칙물 위판량</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="offenseQuantity" name="offenseQuantity" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseQuantity}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseQuantity" name="fishingBoat.offenseQuantity" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseQuantity}">
</div>
<label for="offenseAmount" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">범칙물 위판금액</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="offenseAmount" name="offenseAmount" placeholder="0원" th:value="${crackdownStatus.fishingBoat.offenseAmount}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseAmount" name="fishingBoat.offenseAmount" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.offenseAmount}">
</div>
</div>
<div class="mb-3 row">
<label for="offenseIllegalWasteQuantity" class="col-sm-1 col-form-label col-form-label-sm text-center">범칙물 폐기량</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="offenseIllegalWasteQuantity" name="offenseIllegalWasteQuantity" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseIllegalWasteQuantity}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="offenseIllegalWasteQuantity" name="fishingBoat.offenseIllegalWasteQuantity" placeholder="000kg" th:value="${crackdownStatus.fishingBoat.offenseIllegalWasteQuantity}">
</div>
<label for="damboUnpaidAmount" class="col-sm-1 col-form-label col-form-label-sm text-center">담보금 미납액</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="damboUnpaidAmount" name="damboUnpaidAmount" placeholder="0원" th:value="${crackdownStatus.fishingBoat.damboUnpaidAmount}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="damboUnpaidAmount" name="fishingBoat.damboUnpaidAmount" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.damboUnpaidAmount}">
</div>
<label for="damboPayment" class="col-sm-1 col-form-label col-form-label-sm text-center">담보금 납부액</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="damboPayment" name="damboPayment" placeholder="0원" th:value="${crackdownStatus.fishingBoat.damboPayment}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="damboPayment" name="fishingBoat.damboPayment" placeholder="최대 9,999,999,999원" th:value="${crackdownStatus.fishingBoat.damboPayment}">
</div>
<label for="paymentPaymentDt" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">담보금 납부일시</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="paymentPaymentDt" name="paymentPaymentDt" placeholder="0000-00-00" th:value="${crackdownStatus.fishingBoat.paymentPaymentDt}">
<input type="text" class="form-control form-control-sm fishingBoatInfo dateTimeSelector" id="fishingBoat.paymentPaymentDt" name="paymentPaymentDt" placeholder="0000-00-00 00:00" th:value="${crackdownStatus.fishingBoat.paymentPaymentDt}">
</div>
</div>
<div class="mb-3 row">
<label for="confiscationFrame" class="col-sm-1 col-form-label col-form-label-sm text-center">압수어구</label>
<div class="col-sm-4">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="confiscationFrame" name="confiscationFrame" placeholder="틀" th:value="${crackdownStatus.fishingBoat.confiscationFrame}">
<input type="text" class="form-control form-control-sm" id="confiscationWidth" name="confiscationWidth" placeholder="폭" th:value="${crackdownStatus.fishingBoat.confiscationWidth}">
<input type="text" class="form-control form-control-sm" id="confiscationJo" name="confiscationJo" placeholder="조" th:value="${crackdownStatus.fishingBoat.confiscationJo}">
<input type="text" class="form-control form-control-sm" id="confiscationGae" name="confiscationGae" placeholder="개" th:value="${crackdownStatus.fishingBoat.confiscationGae}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="confiscationFrame" name="fishingBoat.confiscationFrame" placeholder="틀" th:value="${crackdownStatus.fishingBoat.confiscationFrame}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="confiscationWidth" name="fishingBoat.confiscationWidth" placeholder="폭" th:value="${crackdownStatus.fishingBoat.confiscationWidth}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="confiscationJo" name="fishingBoat.confiscationJo" placeholder="조" th:value="${crackdownStatus.fishingBoat.confiscationJo}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="confiscationGae" name="fishingBoat.confiscationGae" placeholder="개" th:value="${crackdownStatus.fishingBoat.confiscationGae}">
</div>
</div>
<div class="col-sm-3">
<input type="text" class="form-control form-control-sm" id="confiscationEtc" name="confiscationEtc" placeholder="기타" th:value="${crackdownStatus.fishingBoat.confiscationEtc}">
<input type="text" class="form-control form-control-sm fishingBoatInfo" id="confiscationEtc" name="fishingBoat.confiscationEtc" placeholder="기타" th:value="${crackdownStatus.fishingBoat.confiscationEtc}">
</div>
</div>
</div>
@ -319,10 +328,10 @@
<div class="mb-3 row">
<label for="processStatus" 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" id="processStatus" name="processStatus">
<select class="form-select form-select-sm processResultInfo" id="processStatus" name="processResult.processStatus">
<option value="">선택</option>
<th:block th:each="code:${prList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${crackdownStatus.processResult.processStatus}"></option>
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq crackdownStatus.processResult.processStatus}"></option>
</th:block>
</select>
</div>
@ -332,7 +341,7 @@
<input type="number" class="form-control form-control-sm pressurizedTimeTaken" id="pressurizedTimeTakenDate" placeholder="일" th:value="${crackdownStatus.processResult.pressurizedTimeTaken}">
<input type="text" class="form-control form-control-sm pressurizedTimeTaken timeSelector" id="pressurizedTimeTakenTime" placeholder="00:00" th:value="${crackdownStatus.processResult.pressurizedTimeTaken}">
</div>
<input type="hidden" name="pressurizedTimeTaken" id="pressurizedTimeTaken">
<input type="hidden" class="processResultInfo" name="processResult.pressurizedTimeTaken" id="pressurizedTimeTaken">
</div>
<label for="warrantReqTakeDate" class="col-sm-1 col-form-label col-form-label-sm text-center fs-11">영장청구 소요시간</label>
<div class="col-sm-2">
@ -340,42 +349,42 @@
<input type="number" class="form-control form-control-sm warrantReqTake" id="warrantReqTakeDate" placeholder="일" th:value="${crackdownStatus.processResult.warrantReqTakeTime}">
<input type="text" class="form-control form-control-sm warrantReqTake timeSelector" id="warrantReqTakeTime" placeholder="00:00" th:value="${crackdownStatus.processResult.warrantReqTakeTime}">
</div>
<input type="hidden" name="warrantReqTakeTime" id="warrantReqTake">
<input type="hidden" class="processResultInfo" name="processResult.warrantReqTakeTime" id="warrantReqTake">
</div>
<label for="isIvsgtStop" 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" id="isIvsgtStop" name="isIvsgtStop">
<select class="form-select form-select-sm processResultInfo" id="isIvsgtStop" name="processResult.isIvsgtStop">
<option value="">선택</option>
<option value="O">O</option>
<option value="X">X</option>
<option value="Y">O</option>
<option value="N">X</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="evictionDt" class="col-sm-1 col-form-label col-form-label-sm text-center">퇴거일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="evictionDt" name="evictionDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.evictionDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="evictionDt" name="processResult.evictionDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.evictionDt}">
</div>
<label for="directHandoverDt" class="col-sm-1 col-form-label col-form-label-sm text-center">직접인계일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateTimeSelector" id="directHandoverDt" name="directHandoverDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.directHandoverDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="directHandoverDt" name="processResult.directHandoverDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.directHandoverDt}">
</div>
<label for="handoverSeaPointLon" class="col-sm-1 col-form-label col-form-label-sm text-center">인계 해점</label>
<div class="col-sm-4">
<div class="col-sm-2">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="handoverSeaPointLon" name="handoverSeaPointLon" placeholder="00-00.00N" th:value="${crackdownStatus.processResult.handoverSeaPointLon}">
<input type="text" class="form-control form-control-sm" id="handoverSeaPointLat" name="handoverSeaPointLat" placeholder="000-00.00E" th:value="${crackdownStatus.processResult.handoverSeaPointLat}">
<input type="text" class="form-control form-control-sm processResultInfo" id="handoverSeaPointLon" name="processResult.handoverSeaPointLon" placeholder="00-00.00N" th:value="${crackdownStatus.processResult.handoverSeaPointLon}">
<input type="text" class="form-control form-control-sm processResultInfo" id="handoverSeaPointLat" name="processResult.handoverSeaPointLat" placeholder="000-00.00E" th:value="${crackdownStatus.processResult.handoverSeaPointLat}">
</div>
</div>
</div>
<div class="mb-3 row">
<label for="handoverBoat" class="col-sm-1 col-form-label col-form-label-sm text-center">인계 함정</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="handoverBoat" name="handoverBoat" th:value="${crackdownStatus.processResult.handoverBoat}">
<input type="text" class="form-control form-control-sm processResultInfo" id="handoverBoat" name="processResult.handoverBoat" th:value="${crackdownStatus.processResult.handoverBoat}">
</div>
<label for="middleTakeoverBoat" class="col-sm-1 col-form-label col-form-label-sm text-center">중측 인수함정</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="middleTakeoverBoat" name="middleTakeoverBoat" th:value="${crackdownStatus.processResult.middleTakeoverBoat}">
<input type="text" class="form-control form-control-sm processResultInfo" id="middleTakeoverBoat" name="processResult.middleTakeoverBoat" th:value="${crackdownStatus.processResult.middleTakeoverBoat}">
</div>
</div>
<hr>
@ -429,25 +438,25 @@
<div class="mb-3 row">
<label for="consignmentStartDt" class="col-sm-1 col-form-label col-form-label-sm text-center">위탁시작일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="consignmentStartDt" name="consignmentStartDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.consignmentStartDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="consignmentStartDt" name="processResult.consignmentStartDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.consignmentStartDt}">
</div>
<label for="consignmentEndDt" class="col-sm-1 col-form-label col-form-label-sm text-center">위탁종료일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="consignmentEndDt" name="consignmentEndDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.consignmentEndDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="consignmentEndDt" name="processResult.consignmentEndDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.consignmentEndDt}">
</div>
<label for="confiscationDt" class="col-sm-1 col-form-label col-form-label-sm text-center">몰수확정일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="confiscationDt" name="confiscationDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.confiscationDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="confiscationDt" name="processResult.confiscationDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.confiscationDt}">
</div>
</div>
<div class="mb-3 row">
<label for="boatDisposalDt" class="col-sm-1 col-form-label col-form-label-sm text-center">폐선일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="boatDisposalDt" name="boatDisposalDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.boatDisposalDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="boatDisposalDt" name="processResult.boatDisposalDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.boatDisposalDt}">
</div>
<label for="boatDisposalType" 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" id="boatDisposalType" name="boatDisposalType">
<select class="form-select form-select-sm processResultInfo" id="boatDisposalType" name="processResult.boatDisposalType">
<option value="">선택</option>
<th:block th:each="code:${bdtList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
@ -456,77 +465,65 @@
</div>
<label for="returnDt" class="col-sm-1 col-form-label col-form-label-sm text-center">환부일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="returnDt" name="returnDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.returnDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="returnDt" name="processResult.returnDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.returnDt}">
</div>
</div>
<div class="mb-3 row">
<label for="captainRestriction" 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" id="captainRestriction">
<select class="form-select form-select-sm sailorInfo" id="captainRestriction">
<option value="">선택</option>
<option value="O">O</option>
<option value="X">X</option>
<option value="Y">O</option>
<option value="N">X</option>
</select>
</div>
<label for="navigatingOfficerRestriction" 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" id="navigatingOfficerRestriction">
<select class="form-select form-select-sm sailorInfo" id="navigatingOfficerRestriction">
<option value="">선택</option>
<option value="O">O</option>
<option value="X">X</option>
<option value="Y">O</option>
<option value="N">X</option>
</select>
</div>
<label for="chiefEngineerRestriction" 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" id="chiefEngineerRestriction">
<select class="form-select form-select-sm sailorInfo" id="chiefEngineerRestriction">
<option value="">선택</option>
<option value="O">O</option>
<option value="X">X</option>
<option value="Y">O</option>
<option value="N">X</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="normalSailorRestriction" class="col-sm-1 col-form-label col-form-label-sm text-center">
<label for="sailorAddBtn" class="col-sm-1 col-form-label col-form-label-sm text-center">
선원구속
<i class="bi bi-plus-square text-primary" id="sailorAddBtn"></i>
</label>
<div class="col-sm-10 row" id="sailorRestrictionHome">
<div class="col-4 sailorRestriction">
<div class="input-group w-auto">
<select class="form-select form-select-sm isRestriction" id="normalSailorRestriction">
<option value="">선택</option>
<option value="O">O</option>
<option value="X">X</option>
</select>
<input type="text" class="form-control form-control-sm" id="normalSailor" placeholder="이름">
<button type="button" class="btn btn-sm btn-outline-secondary opacity-50 sailorRemoveBtn">
<i class="bi bi-dash-square text-danger"></i>
</button>
</div>
</div>
</div>
</div>
<div class="mb-3 row">
<label for="exileCnt" class="col-sm-1 col-form-label col-form-label-sm text-center">추방인원</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="exileCnt" name="exileCnt" placeholder="00명" th:value="${crackdownStatus.processResult.exileCnt}">
<input type="text" class="form-control form-control-sm processResultInfo" id="exileCnt" name="processResult.exileCnt" placeholder="00명" th:value="${crackdownStatus.processResult.exileCnt}">
</div>
<label for="exileDt" class="col-sm-1 col-form-label col-form-label-sm text-center">추방일</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm dateSelector" id="exileDt" name="exileDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.exileDt}">
<input type="text" class="form-control form-control-sm processResultInfo dateSelector" id="exileDt" name="processResult.exileDt" placeholder="0000-00-00" th:value="${crackdownStatus.processResult.exileDt}">
</div>
<label for="flight" class="col-sm-1 col-form-label col-form-label-sm text-center">항공편</label>
<div class="col-sm-2">
<input type="text" class="form-control form-control-sm" id="flight" name="flight" th:value="${crackdownStatus.processResult.flight}">
<input type="text" class="form-control form-control-sm processResultInfo" id="flight" name="processResult.flight" th:value="${crackdownStatus.processResult.flight}">
</div>
</div>
<div class="row mb-3">
<label for="immigrationOfficeName" class="col-sm-1 col-form-label col-form-label-sm text-center">출입국 담당자</label>
<div class="col-sm-4">
<div class="input-group w-auto">
<input type="text" class="form-control form-control-sm" id="immigrationOfficeName" name="immigrationOfficeName" placeholder="사무소명" th:value="${crackdownStatus.processResult.immigrationOfficeName}">
<input type="text" class="form-control form-control-sm" id="immigrationOfficeOfficerName" name="immigrationOfficeOfficerName" placeholder="이름" th:value="${crackdownStatus.processResult.immigrationOfficeOfficerName}">
<input type="text" class="form-control form-control-sm" id="immigrationOfficeOfficerContact" name="immigrationOfficeOfficerContact" placeholder="연락처" th:value="${crackdownStatus.processResult.immigrationOfficeOfficerContact}">
<input type="text" class="form-control form-control-sm processResultInfo" id="immigrationOfficeName" name="processResult.immigrationOfficeName" placeholder="사무소명" th:value="${crackdownStatus.processResult.immigrationOfficeName}">
<input type="text" class="form-control form-control-sm processResultInfo" id="immigrationOfficeOfficerName" name="processResult.immigrationOfficeOfficerName" placeholder="이름" th:value="${crackdownStatus.processResult.immigrationOfficeOfficerName}">
<input type="text" class="form-control form-control-sm processResultInfo" id="immigrationOfficeOfficerContact" name="processResult.immigrationOfficeOfficerContact" placeholder="연락처" th:value="${crackdownStatus.processResult.immigrationOfficeOfficerContact}">
</div>
</div>
</div>

View File

@ -214,5 +214,31 @@
</div>
</div>
</div>
<div class="modal fade" id="crackdownSubModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="crackdownSubModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="crackdownSubModalLabel">단속현황 불러오기</h5>
<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="row">
<div class="col-12">
<form method="get" action="#" id="modalSearchForm">
<input type="hidden" name="pageIndex" id="modalPageIndex" value="1">
<input type="hidden" name="rowCnt" value="10">
</form>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="getCrackdownBtn">불러오기</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
</div>
</div>
</div>
</div>
</div>
</html>

View File

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header">
<h5 class="modal-title" id="menuEditModalLabel">외사경찰 수정</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="userInfoUpdate" action="#" method="post">
<input type="hidden" name="userSeq" id="userSeq" class="userSeq" th:value="${userInfo.userSeq}">
<input type="hidden" name="userStatus" th:value="${userInfo.userStatus}">
<div class="mb-3 mt-3 row">
<label for="dicCode" class="col-sm-2 col-form-label col-form-label-sm text-center ">공무원식별번호</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="dicCode" name="dicCode" autocomplete="off" th:value="${userInfo.dicCode}">
</div>
</div>
<div class="mb-3 row">
<label for="userId" class="col-sm-2 col-form-label col-form-label-sm text-center ">아이디</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm" id="userId" name="userId" autocomplete="off" th:value="${userInfo.userId}" readonly>
<label for="userId" style="font-size: 12px">아이디는 수정할 수 없습니다.</label>
</div>
<label for="userNm" class="col-sm-2 col-form-label col-form-label-sm text-center">이름</label>
<div class="col-sm-4">
<input type="text" class=" form-control form-control-sm" id="userNm" name="userNm" autocomplete="off" th:value="${userInfo.userNm}">
</div>
</div>
<div class="mb-3 row">
<label for="phoneNo" class="col-sm-2 col-form-label col-form-label-sm text-center">휴대전화</label>
<div class="col-sm-4">
<input type="tel" class="form-control form-control-sm" id="phoneNo" name="phoneNo" th:value="${userInfo.phoneNo}">
</div>
<label for="email" class="col-sm-2 col-form-label col-form-label-sm text-center">이메일</label>
<div class="col-sm-4">
<input type="email" class="form-control form-control-sm" id="email" name="email" th:value="${userInfo.email}">
</div>
</div>
<div class="mb-3 row">
<label for="sex" class="col-sm-2 col-form-label col-form-label-sm text-center">성별</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="sex" name="sex">
<option value="M" th:selected="${userInfo.sex eq 'M'}"></option>
<option value="F" th:selected="${userInfo.sex eq 'F'}"></option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="birthDate" class="col-sm-2 col-form-label col-form-label-sm text-center">생년월일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="birthDate" name="birthDate" th:value="${userInfo.birthDate}" readonly>
</div>
<label for="policeInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">해양경찰배명일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="policeInDate" name="policeInDate" th:value="${userInfo.policeInDate}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-2 col-form-label col-form-label-sm text-center">관서</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="ogCd" name="ogCd">
<option value="">--선택--</option>
<th:block th:each="code:${ogList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.ogCd}"></option>
</th:block>
</select>
</div>
<label for="organInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현관서전입일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="organInDate" name="organInDate" th:value="${userInfo.organInDate}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ofcCd" class="col-sm-2 col-form-label col-form-label-sm text-center">부서</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="ofcCd" name="ofcCd">
<option value="">--선택--</option>
<th:block th:each="code:${ofcList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.ofcCd}"></option>
</th:block>
</select>
</div>
<label for="ofcInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현부서임용일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="ofcInDate" name="ofcInDate" th:value="${userInfo.ofcInDate}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="ogCd" class="col-sm-2 col-form-label col-form-label-sm text-center">계급</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="titleCd" name="titleCd">
<option value="">--선택--</option>
<th:block th:each="code:${titleList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.titleCd}"></option>
</th:block>
</select>
</div>
<label for="titleInDate" class="col-sm-2 col-form-label col-form-label-sm text-center">현계급임용일</label>
<div class="col-sm-4">
<input type="text" class="form-control form-control-sm dateSelector" id="titleInDate" name="titleInDate" th:value="${userInfo.titleInDate}" readonly>
</div>
</div>
<div class="mb-3 row">
<label for="outturnCd" class="col-sm-2 col-form-label col-form-label-sm text-center">경과</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="outturnCd" name="outturnCd">
<option value="">--선택--</option>
<th:block th:each="code:${outturnList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.outturnCd}"></option>
</th:block>
</select>
</div>
<label for="seriesCd" class="col-sm-2 col-form-label col-form-label-sm text-center">직별</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="seriesCd" name="seriesCd">
<option value="">--선택--</option>
<th:block th:each="code:${seriesList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.seriesCd}"></option>
</th:block>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="languageCd" class="col-sm-2 col-form-label col-form-label-sm text-center">외국어특채</label>
<div class="col-sm-4">
<select class="form-select form-select-sm" id="languageCd" name="languageCd">
<option value="">--선택--</option>
<th:block th:each="code:${languageList}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq userInfo.languageCd}"></option>
</th:block>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer row justify-content-between">
<div class="col-auto">
<th:block th:if="${userInfo.userStatus eq 'USC003'}">
<button type="button" class="btn btn-info" id="syncToKwmsBtn" th:disabled="${#strings.isEmpty(userInfo.dicCode)}">인사시스템 정보 불러오기</button>
<th:block th:if="${#strings.isEmpty(userInfo.dicCode)}">
<label for="syncToKwmsBtn" style="font-size: 12px">공무원식별번호가 필요합니다.</label>
</th:block>
</th:block>
</div>
<div class="col-auto">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
<button type="button" class="btn btn-warning" id="updateBtn">수정</button>
</div>
</div>
</html>

View File

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script type="text/javascript" th:src="@{/js/faisp/police.js}"></script>
</th:block>
<div layout:fragment="content">
<main class="pt-3">
<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 text-center">
<div class="card-body">
<form id="searchFm" method="get" th:action="@{/faisp/policeList}">
<input type="hidden" name="excel">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between pe-3 py-1">
<div class="col-auto">
<select class="form-select" 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==num*10}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<button type="button" class="btn btn-success" id="goExcel">엑셀다운</button>
</div>
</div>
<div class="row justify-content-end pe-3 py-1">
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto" th:if="${accessAuth eq 'ACC003'}">
<select class="form-select form-select-sm" name="mgtOrgan">
<option value="">관서</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="detailType">
<option value="">성별</option>
<th:block th:each="commonCode:${session.commonCode.get('PVREUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<input type="text" class="form-control form-control-sm" placeholder="이름" name="useNo">
</div>
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div>
</div>
</div>
</form>
<div class="row justify-content-start">
<div class="col-12">
<ul class="nav nav-tabs" id="userTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="affairTab" data-bs-toggle="tab" type="button" role="tab">現외사경찰</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="stayTab" data-bs-toggle="tab" type="button" role="tab">前외사경찰</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="commitTab" data-bs-toggle="tab" type="button" role="tab">非외사경찰</button>
</li>
</ul>
<div class="card">
<div class="card-body">
<div class="row">
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>순번</th>
<th>계급</th>
<th>성명</th>
<th></th>
<th>현부서<br></th>
<th>생년월일</th>
<th>성별</th>
<th>최초<br>임용</th>
<th>현 계급<br>임용</th>
<th>현 부서<br>임용</th>
<th>수사경과<br>보유여부</th>
<th>외사경력</th>
<th>입직<br>경로</th>
<th>최종<br>수정일</th>
<th>전출<input type="checkbox"></th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr class="policeTr" th:each="list:${policeList}">
<th:block>
<input type="hidden" class="userSeq" th:value="${list.userSeq}">
</th:block>
<td th:text="${list.userSeq}"></td>
<td th:text="${list.titleCd}"></td>
<td th:text="${list.userNm}"></td>
<td th:text="${list.ogCd}"></td>
<td th:text="${list.ofcCd}"></td>
<td th:text="${list.birthDate}"></td>
<td th:text="${list.sex}"></td>
<td th:text="${list.policeInDate}"></td>
<td th:text="${list.titleInDate}"></td>
<td th:text="${list.ofcInDate}"></td>
<td th:text="${list.outturnCd}"></td>
<td></td>
<td th:text="${list.jobInCd}"></td>
<td th:text="${#temporals.format(list.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">
<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==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">
<button type="button" class="btn btn-success"id="addPvre" th:if="${accessAuth eq 'ACC003'}">전출</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<div class="modal fade" id="policeEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="userEditModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content" id="policeEditModalContent">
<div class="modal-header">
</div>
<div class="modal-body">
<div class="tab-content border border-top-0" id="configCellPhone">
</div>
</div>
</div>
</div>
</div>
</div>
</html>

View File

@ -124,8 +124,8 @@
<td th:text="${trInfo.trLang}"></td>
<td th:text="${trInfo.trCareer}"></td>
<td th:text="${trInfo.trName}"></td>
<td th:text="${trInfo.trAge}"></td>
<td th:text="${trInfo.trSex}"></td>
<td th:text="${trInfo.trAge}"></td>
<td th:text="${trInfo.trNny}"></td>
<td th:text="${trInfo.trEdu}"></td>
<td th:text="${trInfo.trCft}"></td>