사용대장 페이지 리팩토링

master
강석 최 2023-03-31 14:06:46 +09:00
parent f6c4914d77
commit 776212f497
8 changed files with 269 additions and 296 deletions

View File

@ -322,8 +322,8 @@ public class EquipController {
mav.addObject("useList", equipService.selectUseInfoList(useInfo)); mav.addObject("useList", equipService.selectUseInfoList(useInfo));
useInfo.setContentCnt(equipService.selectUseInfoListCnt(useInfo)); useInfo.setContentCnt(equipService.selectUseInfoListCnt(useInfo));
useInfo.setPaginationInfo(); useInfo.setPaginationInfo();
mav.addObject("organList", equipService.selectOrganList(useInfo));
mav.addObject("searchParams", useInfo); mav.addObject("searchParams", useInfo);
mav.addObject("downOrganList", loginUser.getDownOrganCdList());
return mav; return mav;
} }
@ -333,15 +333,20 @@ public class EquipController {
useInfo.setDownOrganCdList(loginUser.getDownOrganCdList()); useInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
mav.addObject("downOrganList", loginUser.getDownOrganCdList()); mav.addObject("downOrganList", loginUser.getDownOrganCdList());
mav.addObject("useType", useInfo.getUseType()); mav.addObject("useType", useInfo.getUseType());
if(useInfo.getUseKey()!=null){
mav.addObject("useInfo", equipService.selectUseInfo(useInfo));
}else{
mav.addObject("useInfo", new UseInfo());
}
mav.addObject("historyInfo", useInfo.getUseKey()==null?null:equipService.selectUseHistoryList(useInfo));
//메뉴권한 확인 //메뉴권한 확인
String accessAuth; String accessAuth = null;
if(useInfo.getUseType().equals("PVRE")) { if(useInfo.getUseType().equals("PVRE")) {
accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/pvreUseList").get(0).getAccessAuth(); accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/pvreUseList").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
}else if(useInfo.getUseType().equals("QIR")) { }else if(useInfo.getUseType().equals("QIR")) {
accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/qirUseList").get(0).getAccessAuth(); accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/qirUseList").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
} }
mav.addObject("accessAuth", accessAuth);
return mav; return mav;
} }
@ -357,50 +362,6 @@ public class EquipController {
equipService.saveUseInfo(useInfo); equipService.saveUseInfo(useInfo);
} }
@GetMapping("/useModifyModal")
public ModelAndView useModifyModal(@AuthenticationPrincipal UserInfo loginUser, UseInfo useInfo) {
ModelAndView mav = new ModelAndView("equip/useModifyModal");
useInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
mav.addObject("organList", equipService.selectOrganList(useInfo));
mav.addObject("info", equipService.selectUseInfo(useInfo));
mav.addObject("userSeq", loginUser.getUserSeq());
//메뉴권한 확인
String accessAuth;
if(useInfo.getUseType().equals("PVRE")) {
accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/pvreUseList").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
}else if(useInfo.getUseType().equals("QIR")) {
accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/equip/qirUseList").get(0).getAccessAuth();
mav.addObject("accessAuth", accessAuth);
}
return mav;
}
@PostMapping("/updateUse")
public UseInfo uadateUse(@AuthenticationPrincipal UserInfo loginUser, UseInfo useInfo){
useInfo.setWrtOrgan(loginUser.getOgCd());
useInfo.setWrtPart(loginUser.getOfcCd());
useInfo.setWrtUserGrd(loginUser.getTitleCd());
useInfo.setWrtUserSeq(loginUser.getUserSeq());
useInfo.setWrtUserNm(loginUser.getUserNm());
useInfo.setWrtDt(LocalDateTime.now());
return equipService.updateUse(useInfo);
}
@GetMapping("/useHistory")
public ModelAndView useHistory(@AuthenticationPrincipal UserInfo loginUser, UseInfo useInfo) {
ModelAndView mav = new ModelAndView("equip/useHistory");
mav.addObject("infoList", equipService.selectUseHistoryList(useInfo));
return mav;
}
@GetMapping("/HistoryView")
@ResponseBody
public UseInfo HistoryView(UseInfo useInfo){
return equipService.selectUseInfo(useInfo);
}
@PostMapping("/useDelete") @PostMapping("/useDelete")
public void useDelete(@RequestBody List<UseInfo> useInfo){ public void useDelete(@RequestBody List<UseInfo> useInfo){
equipService.useDelete(useInfo); equipService.useDelete(useInfo);

View File

@ -3,10 +3,13 @@ package com.dbnt.faisp.main.equip.repository;
import com.dbnt.faisp.main.equip.model.UseInfoVersion; import com.dbnt.faisp.main.equip.model.UseInfoVersion;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface UseInfoVersionRepository extends JpaRepository<UseInfoVersion, UseInfoVersion.UseInfoVersionId> { public interface UseInfoVersionRepository extends JpaRepository<UseInfoVersion, UseInfoVersion.UseInfoVersionId> {
Optional<UseInfoVersion> findByUseKey(Integer useKey); Optional<UseInfoVersion> findTop1ByUseKeyOrderByVersionNoDesc(Integer useKey);
List<UseInfoVersion> findByUseKey(Integer useKey);
} }

View File

@ -303,6 +303,7 @@ public class EquipService extends BaseService {
@Transactional @Transactional
public void saveUseInfo(UseInfo useInfo) { public void saveUseInfo(UseInfo useInfo) {
if(useInfo.getUseKey()==null){
String year = ((Integer) useInfo.getUseDt().getYear()).toString(); String year = ((Integer) useInfo.getUseDt().getYear()).toString();
useInfo.setYear(year); useInfo.setYear(year);
Integer useNo = equipMapper.selectLastUseNo(useInfo); Integer useNo = equipMapper.selectLastUseNo(useInfo);
@ -311,19 +312,13 @@ public class EquipService extends BaseService {
} else { } else {
useInfo.setUseNo(year+"-"+String.format("%03d", useNo+1)); useInfo.setUseNo(year+"-"+String.format("%03d", useNo+1));
} }
useInfoRepository.save(useInfo);
saveUseInfoVersion(useInfo);
} }
@Transactional
public UseInfo updateUse(UseInfo useInfo) {
useInfoRepository.save(useInfo); useInfoRepository.save(useInfo);
saveUseInfoVersion(useInfo); saveUseInfoVersion(useInfo);
return useInfo;
} }
private void saveUseInfoVersion(UseInfo useInfo){ private void saveUseInfoVersion(UseInfo useInfo){
UseInfoVersion savedInfo = useInfoVersionRepository.findByUseKey(useInfo.getUseKey()).orElse(null); UseInfoVersion savedInfo = useInfoVersionRepository.findTop1ByUseKeyOrderByVersionNoDesc(useInfo.getUseKey()).orElse(null);
UseInfoVersion versionInfo = new UseInfoVersion(); UseInfoVersion versionInfo = new UseInfoVersion();
BeanUtils.copyProperties(useInfo, versionInfo); BeanUtils.copyProperties(useInfo, versionInfo);
versionInfo.setVersionNo(savedInfo==null?1:(savedInfo.getVersionNo()+1)); versionInfo.setVersionNo(savedInfo==null?1:(savedInfo.getVersionNo()+1));
@ -343,8 +338,8 @@ public class EquipService extends BaseService {
} }
public List<UseInfo> selectUseHistoryList(UseInfo useInfo) { public List<UseInfoVersion> selectUseHistoryList(UseInfo useInfo) {
return equipMapper.selectUseHistoryList(useInfo); return useInfoVersionRepository.findByUseKey(useInfo.getUseKey());
} }
@Transactional @Transactional

View File

@ -8,12 +8,12 @@ $(function(){
$(document).on('click', '#addPvre', function (){ $(document).on('click', '#addPvre', function (){
const useType = "PVRE"; const useType = "PVRE";
showEditModal(useType); showEditModal(null, useType);
}) })
$(document).on('click', '#addQir', function (){ $(document).on('click', '#addQir', function (){
const useType = "QIR"; const useType = "QIR";
showEditModal(useType); showEditModal(null, useType);
}) })
$(document).on('change', '#mgtOrgan', function (){ $(document).on('change', '#mgtOrgan', function (){
@ -22,10 +22,10 @@ $(document).on('change', '#mgtOrgan', function (){
partSelector.find('.'+this.value).show(); partSelector.find('.'+this.value).show();
}) })
function showEditModal(useType){ function showEditModal(useKey, useType){
$.ajax({ $.ajax({
url: '/equip/useEditModal', url: '/equip/useEditModal',
data: {useType: useType}, data: {useKey: useKey, useType: useType},
type: 'GET', type: 'GET',
dataType:"html", dataType:"html",
success: function(html){ success: function(html){
@ -36,7 +36,6 @@ function showEditModal(useType){
language: "ko", language: "ko",
autoclose: true autoclose: true
}); });
$('#detailSelf').hide();
}, },
error:function(e){ error:function(e){
ajaxErrorAction(e); ajaxErrorAction(e);
@ -85,36 +84,11 @@ $(document).on('change', '#detailType', function (){
$(document).on('click', '.useTr', function (event){ $(document).on('click', '.useTr', function (event){
const target = event.target; const target = event.target;
if(!(target.className === "useChk" ||$(target).parents("td").length>0)){ if(!(target.className === "useChk" ||$(target).parents("td").length>0)){
showModifyModal($(target).parent('tr').attr("data-usekey")); const tr = $(target).parent('tr')
showEditModal(tr.attr("data-usekey"), tr.attr("data-usetype"));
} }
}); });
function showModifyModal(useKey){
$.ajax({
url: '/equip/useModifyModal',
data: {useKey: useKey},
type: 'GET',
dataType:"html",
success: function(html){
$("#useEditModalContent").empty().append(html);
$("#useEditModal").modal('show');
$("#mUseDt").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
if($('#mDetailType').val() != 'PVREUSE007' && $('#mDetailType').val() != 'QIRUSE006'){
$('#mDetailSelf').hide();
}else{
$('#mDetailSelf').show();
}
},
error:function(e){
ajaxErrorAction(e);
}
});
}
$(document).on('change', '#mDetailType', function (){ $(document).on('change', '#mDetailType', function (){
if($(this).val() == 'PVREUSE007' || $(this).val() == 'QIRUSE006'){ if($(this).val() == 'PVREUSE007' || $(this).val() == 'QIRUSE006'){
$('#mDetailSelf').show(); $('#mDetailSelf').show();
@ -139,7 +113,7 @@ $(document).on('click', '#updateUse', function (){
success : function(data) { success : function(data) {
alert("수정되었습니다."); alert("수정되었습니다.");
contentFade("out"); contentFade("out");
showModifyModal(data.useNo,data.useType,data.mgtOrgan); showEditModal(data.useKey,data.useType);
}, },
error : function(xhr, status) { error : function(xhr, status) {
alert("수정에 실패하였습니다.") alert("수정에 실패하였습니다.")
@ -180,41 +154,28 @@ $(document).on('click', '#historyBtn', function (){
}); });
}) })
$(document).on('click', '.historyTr', function (event){ $(document).on('click', '.historyTr', function (){
const target = event.target; $(".historyCheckBox").prop('checked', false);
$(this).find('.hisChk').prop('checked',true) const selectedTr = $(this);
if($(this).find('.hisChk').prop('checked')){ selectedTr.find(".historyCheckBox").prop('checked', true);
$('.hisChk').prop('checked',false);
$(this).find('.hisChk').prop('checked',true) const historyDiv = $('#historyDiv');
} historyDiv.find('input,select').removeAttr('disabled')
$.ajax({
url: '/equip/HistoryView', $("#historyMgtOrgan").val(selectedTr.find(".mgtOrgan").val());
data: { $("#historyMgtPart").val(selectedTr.find(".mgtPart").val());
useNo: $(target).parents('tr').data("useno"), $("#historyUseDt").val(selectedTr.find(".useDt").val());
versionNo : Number($(target).parents('tr').data("verno")), const detailTypeVal = selectedTr.find(".detailType").val()
useType : $(target).parents('tr').data("usetype"), $("#historyDetailType").val(detailTypeVal);
mgtOrgan : $(target).parents('tr').data("mgtorgan") if(detailTypeVal === "PVREUSE007" || detailTypeVal === "QIRUSE006"){
}, $("#historyDetailSelf").show().val(selectedTr.find(".detailSelf").val());
type: 'GET',
dataType:"json",
success: function(data){
$('#vSosok').val(data.sosok);
$('#vUseDt').val(data.useDt);
$('#vDetailType').val(data.detailTypeName);
if(data.detailType != 'PVREUSE007' && data.detailType != 'QIRUSE006'){
$('#vDetailSelf').hide();
$('#vDetailSelf').val('');
}else{ }else{
$('#vDetailSelf').show(); $("#historyDetailSelf").hide();
$('#vDetailSelf').val(data.detailSelf);
} }
$('#vCnt').val(data.peopleCnt); $("#historyPeopleCnt").val(selectedTr.find(".peopleCnt").val());
$('#vDescription').val(data.description); $("#historyDescription").val(selectedTr.find(".description").val());
},
error:function(e){ historyDiv.find('input,select').attr('disabled', 'disabled')
ajaxErrorAction(e);
}
});
}) })
$(document).on('click', '#deleteUse', function (){ $(document).on('click', '#deleteUse', function (){
@ -227,9 +188,7 @@ $(document).on('click', '#deleteUse', function (){
$('input:checkbox[name=useChk]:checked').each(function (idx, el){ $('input:checkbox[name=useChk]:checked').each(function (idx, el){
checkArr.push({}); checkArr.push({});
const target = $(el); const target = $(el);
checkArr[idx].useNo = target.parents('tr').data("useno"); checkArr[idx].useKey = target.parents('tr').attr("data-usekey");
checkArr[idx].mgtOrgan = target.parents('tr').data("mgtorgan");
checkArr[idx].useType = target.parents('tr').data("usetype");
}) })
deleteUse(checkArr); deleteUse(checkArr);
} }

View File

@ -39,8 +39,10 @@
<div class="col-1" th:if="${accessAuth eq 'ACC003'}"> <div class="col-1" th:if="${accessAuth eq 'ACC003'}">
<select class="form-select form-select-sm" name="mgtOrgan"> <select class="form-select form-select-sm" name="mgtOrgan">
<option value="">경찰서</option> <option value="">경찰서</option>
<th:block th:each="organList:${organList}"> <th:block th:each="organ:${session.commonCode.get('OG')}">
<option th:value="${organList.item_cd}" th:text="${organList.item_value}" th:selected="${organList.item_cd eq searchParams.mgtOrgan}"></option> <th:block th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}">
<option th:value="${organ.itemCd}" th:text="${organ.itemValue}" th:selected="${organ.itemCd eq searchParams.mgtOrgan}"></option>
</th:block>
</th:block> </th:block>
</select> </select>
</div> </div>
@ -50,8 +52,8 @@
<div class="col-1"> <div class="col-1">
<select class="form-select form-select-sm" name="detailType"> <select class="form-select form-select-sm" name="detailType">
<option value="">사용사유</option> <option value="">사용사유</option>
<th:block th:each="commonCode:${session.commonCode.get('PVREUSE')}"> <th:block th:each="code:${session.commonCode.get('PVREUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq searchParams.detailType}"></option> <option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq searchParams.detailType}"></option>
</th:block> </th:block>
</select> </select>
</div> </div>
@ -78,7 +80,7 @@
<table class="table table-sm table-hover table-bordered"> <table class="table table-sm table-hover table-bordered">
<thead> <thead>
<tr class="table-secondary"> <tr class="table-secondary">
<th> <input type="checkbox" id="chk-all" class="useCheckBox"></th> <th th:if="${accessAuth eq 'ACC003'}"> <input type="checkbox" id="chk-all" class="useCheckBox"></th>
<th>연번</th> <th>연번</th>
<th>경찰서</th> <th>경찰서</th>
<th>사용일시</th> <th>사용일시</th>
@ -89,16 +91,18 @@
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider"> <tbody class="table-group-divider">
<tr class="useTr" th:each="list:${useInfo}" th:data-useNo="${list.useNo}" th:data-mgtOrgan="${list.mgtOrgan}" th:data-useType="${list.useType}"> <tr class="useTr" th:each="info:${useList}" th:data-usekey="${info.useKey}" th:data-useType="${info.useType}">
<td class="useChk"><input type="checkbox" name="useChk" class="useCheckBox"></td> <td th:if="${accessAuth eq 'ACC003'}" class="useChk"><input type="checkbox" name="useChk" class="useCheckBox"></td>
<td th:text="${list.useNo}"></td> <td th:text="${info.useNo}"></td>
<td th:text="${list.sosok}"></td> <td th:text="${info.sosok}"></td>
<td th:text="${list.useDt}"></td> <td th:text="${info.useDt}"></td>
<td th:text="${list.detailTypeName}" th:if="${list.detailType != 'PVREUSE007'}"></td> <td>
<td th:text="${list.detailSelf}" th:unless="${list.detailType != 'PVREUSE007'}"></td> <th:block th:if="${info.detailType != 'PVREUSE007'}" th:text="${info.detailTypeName}"></th:block>
<td th:text="${list.peopleCnt}"></td> <th:block th:unless="${info.detailType != 'PVREUSE007'}" th:text="${info.detailSelf}"></th:block>
<td th:text="${list.description}"></td> </td>
<td th:text="${#temporals.format(list.wrtDt, 'yyyy-MM-dd HH:mm')}"></td> <td th:text="${info.peopleCnt}"></td>
<td th:text="${info.description}"></td>
<td th:text="${#temporals.format(info.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -106,7 +110,6 @@
</div> </div>
<div class="row justify-content-between"> <div class="row justify-content-between">
<div class="col-auto"> <div class="col-auto">
<button type="button" class="btn btn-warning" id="historyBtn">수정이력</button>
<button type="button" class="btn btn-danger" id="deleteUse" th:if="${accessAuth eq 'ACC003'}">삭제</button> <button type="button" class="btn btn-danger" id="deleteUse" th:if="${accessAuth eq 'ACC003'}">삭제</button>
</div> </div>
<div class="col-auto"> <div class="col-auto">

View File

@ -40,7 +40,9 @@
<select class="form-select form-select-sm" name="mgtOrgan"> <select class="form-select form-select-sm" name="mgtOrgan">
<option value="">경찰서</option> <option value="">경찰서</option>
<th:block th:each="organ:${session.commonCode.get('OG')}"> <th:block th:each="organ:${session.commonCode.get('OG')}">
<option th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}" th:value="${organ.itemCd}" th:text="${organ.itemValue}" th:selected="${organ.itemCd eq searchParams.mgtOrgan}"></option> <th:block th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}">
<option th:value="${organ.itemCd}" th:text="${organ.itemValue}" th:selected="${organ.itemCd eq searchParams.mgtOrgan}"></option>
</th:block>
</th:block> </th:block>
</select> </select>
</div> </div>
@ -90,7 +92,7 @@
</tr> </tr>
</thead> </thead>
<tbody class="table-group-divider"> <tbody class="table-group-divider">
<tr class="useTr" th:each="info:${useList}" th:data-usekey="${info.useKey}"> <tr class="useTr" th:each="info:${useList}" th:data-usekey="${info.useKey}" th:data-usetype="${info.useType}">
<td th:if="${accessAuth eq 'ACC003'}" class="useChk"><input type="checkbox" name="useChk" class="useCheckBox"></td> <td th:if="${accessAuth eq 'ACC003'}" class="useChk"><input type="checkbox" name="useChk" class="useCheckBox"></td>
<td th:text="${info.useNo}"></td> <td th:text="${info.useNo}"></td>
<td th:text="${info.sosok}"></td> <td th:text="${info.sosok}"></td>

View File

@ -2,33 +2,157 @@
<html lang="ko" xmlns:th="http://www.thymeleaf.org"> <html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header bg-dark"> <div class="modal-header bg-dark">
<h5 class="modal-title text-white" id="menuEditModalLabel" th:text="${useType eq 'PVRE'?'휴대용 녹화장비 사용대장 등록':'방역조사실 사용대장 등록'}"></h5> <h5 class="modal-title text-white" id="menuEditModalLabel">
<th:block th:text="${useType eq 'PVRE'?'휴대용 녹화장비 사용대장':'방역조사실 사용대장'}"></th:block>
<th:block th:text="${useInfo.useKey eq null?' 등록':' 수정'}"></th:block>
</h5>
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<ul class="nav nav-tabs" id="useTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="useInfoTab" data-bs-toggle="tab" data-bs-target="#useInfoTabPanel" type="button"
role="tab" aria-controls="useInfoTabPanel" aria-selected="true">사용대장
</button>
</li>
<li class="nav-item" role="presentation" th:if="${historyInfo ne null}">
<button class="nav-link" id="historyTab" data-bs-toggle="tab" data-bs-target="#historyTabPanel" type="button" role="tab"
aria-controls="historyTabPanel" aria-selected="false">수정이력
</button>
</li>
</ul>
<div class="tab-content bg-white border border-top-0 p-2">
<div class="tab-pane fade p-2 show active" id="useInfoTabPanel" role="tabpanel" tabindex="0">
<form id="useFm" method="post"> <form id="useFm" method="post">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/> <input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/> <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="useKey" th:value="${useInfo.useKey}">
<input type="hidden" name="useType" th:value="${useType}"> <input type="hidden" name="useType" th:value="${useType}">
<div class="row mb-1"> <input type="hidden" name="useNo" th:value="${useInfo.useNo}">
<label for="mgtOrgan" class="col-sm-4 col-form-label col-form-label-sm text-center">관서</label> <div class="row mb-1 justify-content-center">
<div class="col-sm-6"> <label for="mgtOrgan" 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="mgtOrgan" name="mgtOrgan"> <select class="form-select form-select-sm" id="mgtOrgan" name="mgtOrgan">
<option value="">선택</option> <option value="">선택</option>
<th:block th:each="organ:${session.commonCode.get('OG')}"> <th:block th:each="organ:${session.commonCode.get('OG')}">
<option th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}" th:value="${organ.itemCd}" th:text="${organ.itemValue}"></option> <th:block th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}">
<option th:value="${organ.itemCd}" th:text="${organ.itemValue}" th:selected="${organ.itemCd eq useInfo.mgtOrgan}"></option>
</th:block>
</th:block>
</select>
</div>
</div>
<div class="row mb-1 justify-content-center">
<label for="mgtOrgan" 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="mgtPart" name="mgtPart">
<option value="">선택</option>
<th:block th:each="organ:${session.commonCode.get('OG')}">
<th:block th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}">
<th:block th:each="part:${session.commonCode.get(organ.itemCd)}">
<option th:if="${part.useChk eq 'T'}" class="partOption" th:classappend="${organ.itemCd}"
th:value="${part.itemCd}" th:text="${part.itemValue}" th:selected="${part.itemCd eq useInfo.mgtPart}"
th:style="${organ.itemCd eq useInfo.mgtOrgan?'':'display: none;'}"></option>
</th:block>
</th:block>
</th:block>
</select>
</div>
</div>
<div class="row mb-1 justify-content-center">
<label for="useDt" 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="useDt" name="useDt" readonly th:value="${useInfo.useDt}">
</div>
</div>
<div class="row mb-1 justify-content-center">
<label for="detailType" 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="detailType" name="detailType">
<option value="">선택</option>
<th:block th:if="${useType eq 'PVRE'}">
<th:block th:each="code:${session.commonCode.get('PVREUSE')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq useInfo.detailType}"></option>
</th:block>
</th:block>
<th:block th:if="${useType eq 'QIR'}">
<th:block th:each="code:${session.commonCode.get('QIRUSE')}">
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq useInfo.detailType}"></option>
</th:block>
</th:block>
</select>
<input type="text" class="form-control form-control-sm" id="detailSelf" name="detailSelf"
th:style="${useInfo.detailType eq 'PVREUSE007' or useInfo.detailType eq 'QIRUSE006'?'':'display: none;'}"
th:value="${useInfo.detailSelf}">
</div>
</div>
<div class="row mb-1 justify-content-center">
<label for="peopleCnt" class="col-sm-2 col-form-label col-form-label-sm text-center">사용인원</label>
<div class="col-sm-4">
<input type="number" class="form-control form-control-sm" id="peopleCnt" name="peopleCnt" th:value="${useInfo.peopleCnt}">
</div>
</div>
<div class="row mb-1 justify-content-center">
<label for="description" 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="description" name="description" th:value="${useInfo.description}">
</div>
</div>
</form>
</div>
<div class="tab-pane fade p-2" id="historyTabPanel" role="tabpanel" tabindex="0">
<div class="row">
<div class="col-5">
<table class="table table-hover">
<thead>
<tr>
<th></th>
<th>수정자</th>
<th>수정일시</th>
</tr>
</thead>
<tbody>
<tr class="historyTr" th:each="useInfo:${historyInfo}">
<input type="hidden" class="mgtOrgan" th:value="${useInfo.mgtOrgan}">
<input type="hidden" class="mgtPart" th:value="${useInfo.mgtPart}">
<input type="hidden" class="useDt" th:value="${useInfo.useDt}">
<input type="hidden" class="detailType" th:value="${useInfo.detailType}">
<input type="hidden" class="detailSelf" th:value="${useInfo.detailSelf}">
<input type="hidden" class="peopleCnt" th:value="${useInfo.peopleCnt}">
<input type="hidden" class="description" th:value="${useInfo.description}">
<td><input type="checkbox" class="historyCheckBox"></td>
<td>
<th:block th:each="code:${session.commonCode.get('JT')}">
<th:block th:if="${code.itemCd eq useInfo.wrtUserGrd}" th:text="${code.itemValue}"></th:block>
</th:block>
<th:block th:text="${useInfo.wrtUserNm}"></th:block>
</td>
<td th:text="${#temporals.format(useInfo.wrtDt, 'yyyy-MM-dd')}"></td>
</tr>
</tbody>
</table>
</div>
<div class="col-7" id="historyDiv">
<div class="row mb-1">
<label for="mgtOrgan" class="col-sm-4 col-form-label col-form-label-sm text-center">관서</label>
<div class="col-sm-8">
<select class="form-select form-select-sm" id="historyMgtOrgan" disabled>
<option value="">선택</option>
<th:block th:each="organ:${session.commonCode.get('OG')}">
<option th:value="${organ.itemCd}" th:text="${organ.itemValue}"></option>
</th:block> </th:block>
</select> </select>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="mgtOrgan" class="col-sm-4 col-form-label col-form-label-sm text-center">부서</label> <label for="mgtOrgan" class="col-sm-4 col-form-label col-form-label-sm text-center">부서</label>
<div class="col-sm-6"> <div class="col-sm-8">
<select class="form-select form-select-sm" id="mgtPart" name="mgtPart"> <select class="form-select form-select-sm" id="historyMgtPart" disabled>
<option value="">선택</option> <option value="">선택</option>
<th:block th:each="organ:${session.commonCode.get('OG')}"> <th:block th:each="organ:${session.commonCode.get('OG')}">
<th:block th:if="${organ.useChk eq 'T' and #lists.contains(downOrganList, organ.itemCd)}" th:each="part:${session.commonCode.get(organ.itemCd)}"> <th:block th:each="part:${session.commonCode.get(organ.itemCd)}">
<option th:if="${part.useChk eq 'T'}" class="partOption" th:classappend="${organ.itemCd}" th:value="${part.itemCd}" th:text="${part.itemValue}" style="display: none"></option> <option class="partOption" th:classappend="${organ.itemCd}"
th:value="${part.itemCd}" th:text="${part.itemValue}" style="display: none"></option>
</th:block> </th:block>
</th:block> </th:block>
</select> </select>
@ -36,42 +160,45 @@
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="useDt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용일시</label> <label for="useDt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용일시</label>
<div class="col-sm-6"> <div class="col-sm-8">
<input type="text" class="form-control form-control-sm" id="useDt" name="useDt" readonly> <input type="text" class="form-control form-control-sm" id="historyUseDt" disabled>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="detailType" class="col-sm-4 col-form-label col-form-label-sm text-center">사용사유</label> <label for="detailType" class="col-sm-4 col-form-label col-form-label-sm text-center">사용사유</label>
<div class="col-sm-6"> <div class="col-sm-8">
<select class="form-select form-select-sm" id="detailType" name="detailType"> <select class="form-select form-select-sm" id="historyDetailType" disabled>
<option value="">선택</option> <option value="">선택</option>
<th:block th:if="${useType eq 'PVRE'}"> <th:block th:if="${useType eq 'PVRE'}">
<th:block th:each="commonCode:${session.commonCode.get('PVREUSE')}"> <th:block th:each="code:${session.commonCode.get('PVREUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option> <option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block> </th:block>
</th:block> </th:block>
<th:block th:if="${useType eq 'QIR'}"> <th:block th:if="${useType eq 'QIR'}">
<th:block th:each="commonCode:${session.commonCode.get('QIRUSE')}"> <th:block th:each="code:${session.commonCode.get('QIRUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option> <option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
</th:block> </th:block>
</th:block> </th:block>
</select> </select>
<input type="text" class="form-control form-control-sm" id="detailSelf" name="detailSelf"> <input type="text" class="form-control form-control-sm" id="historyDetailSelf" style="display: none" disabled>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="peopleCnt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용인원</label> <label for="peopleCnt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용인원</label>
<div class="col-sm-6"> <div class="col-sm-8">
<input type="number" class="form-control form-control-sm" id="peopleCnt" name="peopleCnt"> <input type="number" class="form-control form-control-sm" id="historyPeopleCnt" disabled>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="description" class="col-sm-4 col-form-label col-form-label-sm text-center">비고</label> <label for="description" class="col-sm-4 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-6"> <div class="col-sm-8">
<input type="text" class="form-control form-control-sm" id="description" name="description"> <input type="text" class="form-control form-control-sm" id="historyDescription" disabled>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</form>
</div> </div>
<div class="modal-footer justify-content-between bg-light"> <div class="modal-footer justify-content-between bg-light">
<div class="col-auto"> <div class="col-auto">

View File

@ -1,77 +0,0 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="modal-header bg-dark">
<h5 class="modal-title text-white" id="menuEditModalLabel">
<th:block th:if="${info.useType eq 'PVRE'}">휴대용 녹화장비 사용대장 수정</th:block>
<th:block th:if="${info.useType eq 'QIR'}">방역조사실 사용대장 수정</th:block>
</h5>
<button type="button" class="btn-close f-invert" id="closeModal" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="useUpdateFm" 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="useNo" th:value="${info.useNo}">
<input type="hidden" name="useType" th:value="${info.useType}">
<input type="hidden" name="versionNo" th:value="${info.versionNo}">
<div class="row mb-1">
<label for="mMgtOrgan" class="col-sm-4 col-form-label col-form-label-sm text-center">관서</label>
<div class="col-sm-6 ">
<select class="form-select form-select-sm" id="mMgtOrgan" name="mgtOrgan" disabled>
<option value="">선택</option>
<th:block th:each="organList:${organList}">
<option th:value="${organList.item_cd}" th:text="${organList.item_value}" th:selected="${organList.item_cd eq info.mgtOrgan}"></option>
</th:block>
</select>
</div>
</div>
<div class="row mb-1">
<label for="mUseDt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용일시</label>
<div class="col-sm-6 ">
<input type="text" class="form-control form-control-sm" id="mUseDt" name="useDt" th:value="${info.useDt}" readonly>
</div>
</div>
<div class="row mb-1">
<label for="mDetailType" class="col-sm-4 col-form-label col-form-label-sm text-center">사용사유</label>
<div class="col-sm-6 ">
<select class="form-select form-select-sm" id="mDetailType" name="detailType">
<option value="">선택</option>
<th:block th:if="${info.useType eq 'PVRE'}">
<th:block th:each="commonCode:${session.commonCode.get('PVREUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq info.detailType}"></option>
</th:block>
</th:block>
<th:block th:if="${info.useType eq 'QIR'}">
<th:block th:each="commonCode:${session.commonCode.get('QIRUSE')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}" th:selected="${commonCode.itemCd eq info.detailType}"></option>
</th:block>
</th:block>
</select>
<input type="text" class="form-control form-control-sm" id="mDetailSelf" name="detailSelf" th:value="${info.detailSelf}">
</div>
</div>
<div class="row mb-1">
<label for="mPeopleCnt" class="col-sm-4 col-form-label col-form-label-sm text-center">사용인원</label>
<div class="col-sm-6 ">
<input type="number" class="form-control form-control-sm" id="mPeopleCnt" name="peopleCnt" th:value="${info.peopleCnt}">
</div>
</div>
<div class="row mb-1">
<label for="mDescription" class="col-sm-4 col-form-label col-form-label-sm text-center">비고</label>
<div class="col-sm-6 ">
<input type="text" class="form-control form-control-sm" id="mDescription" name="description" th:value="${info.description}">
</div>
</div>
</form>
</div>
<div class="modal-footer justify-content-between bg-light">
<div class="col-auto">
<!--
<button type="button" class="btn btn-secondary" id="closeModal" data-bs-dismiss="modal">닫기</button>
-->
</div>
<div class="col-auto">
<button type="button" class="btn btn-warning" id="updateUse" th:if="${accessAuth eq 'ACC003'} or ${info.wrtUserSeq eq userSeq}">수정</button>
</div>
</div>
</html>