parent
9f810d14bb
commit
684848e43e
|
|
@ -43,9 +43,8 @@ public class AuthMgtController {
|
|||
}
|
||||
|
||||
@PostMapping("/saveAuth")
|
||||
public String saveAuth(@RequestBody AuthMgt authMgt){
|
||||
public void saveAuth(@RequestBody AuthMgt authMgt){
|
||||
authMgtService.saveAuth(authMgt);
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,10 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관
|
|||
}else {
|
||||
affairBoard.setRatingOrgan(loginUser.getOgCd());
|
||||
switch (apprvAuth) {
|
||||
case "APC004APC001": // 계장대행+부장
|
||||
case "APC003APC002": // 계장+부장대행
|
||||
affairBoard.setQueryType("normalStayList");
|
||||
break;
|
||||
case "APC004": // 계장대행
|
||||
case "APC003": // 계장 // 결재대기 문서 조회
|
||||
affairBoard.setAffairStatus("DST002");
|
||||
|
|
@ -75,6 +79,10 @@ public class AffairController { // 첩보수집활동 > 외사경찰 견문관
|
|||
}else{
|
||||
affairBoard.setRatingOrgan(loginUser.getOgCd());
|
||||
switch (apprvAuth) {
|
||||
case "APC004APC001": // 계장대행+부장
|
||||
case "APC003APC002": // 계장+부장대행
|
||||
affairBoard.setQueryType("normalCommitList");
|
||||
break;
|
||||
case "APC004": // 계장대행
|
||||
case "APC003": // 계장 // 계장반려, 계장승인 문서 조회
|
||||
affairBoard.setQueryType("sectionCommitList");
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ public class MonitoringReport extends FileInfo {
|
|||
|
||||
@Transient
|
||||
private MultipartFile file;
|
||||
@Transient
|
||||
private Boolean saveFlag;
|
||||
|
||||
|
||||
@Embeddable
|
||||
|
|
|
|||
|
|
@ -38,11 +38,13 @@ import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultInfoRepo
|
|||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultRepository;
|
||||
import com.dbnt.faisp.main.userInfo.model.UserAlarm;
|
||||
import com.dbnt.faisp.main.userInfo.service.UserAlarmService;
|
||||
import com.dbnt.faisp.util.Utils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.apache.commons.fileupload.FileItem;
|
||||
import org.apache.commons.fileupload.disk.DiskFileItem;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
|
@ -240,32 +242,44 @@ public class MonitoringService extends BaseService {
|
|||
private void saveReportList(Integer mrKey, List<MonitoringReport> reportList){
|
||||
//파일삭제
|
||||
List<MonitoringReport> fileList = monitoringReportRepository.findByMrKey(mrKey);
|
||||
if(fileList != null) {
|
||||
for(MonitoringReport file: fileList){
|
||||
if(file.getOrigNm() != null) {
|
||||
deleteStoredFile(new File(file.getSavePath(), file.getConvNm()));
|
||||
for(MonitoringReport savedReport : fileList){
|
||||
for(MonitoringReport editReport: reportList){
|
||||
if(!Utils.isEmpty(editReport.getConvNm()) && editReport.getConvNm().equals(savedReport.getConvNm())){
|
||||
savedReport.setSaveFlag(false);
|
||||
int temp = editReport.getInfoSeq();
|
||||
BeanUtils.copyProperties(savedReport, editReport);
|
||||
editReport.setInfoSeq(temp);
|
||||
break;
|
||||
}else{
|
||||
savedReport.setSaveFlag(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
monitoringReportRepository.deleteByMrKey(mrKey);
|
||||
for(MonitoringReport info: reportList){
|
||||
if(info.getFile() != null) {
|
||||
MultipartFile file = info.getFile();
|
||||
String saveName = UUID.randomUUID().toString();
|
||||
for(MonitoringReport savedReport: fileList){
|
||||
if(savedReport.getOrigNm() != null && savedReport.getSaveFlag()) {
|
||||
deleteStoredFile(new File(savedReport.getSavePath(), savedReport.getConvNm()));
|
||||
}
|
||||
if(savedReport.getSaveFlag()){
|
||||
monitoringReportRepository.deleteById(new MonitoringReportId(savedReport.getMrKey(), savedReport.getInfoSeq()));
|
||||
}
|
||||
}
|
||||
String path = locationPath+monitoringPath;
|
||||
for(MonitoringReport report: reportList){
|
||||
if(report.getFile() != null && report.getMrKey()==null) {
|
||||
MultipartFile file = report.getFile();
|
||||
String saveName = UUID.randomUUID().toString();
|
||||
saveFile(file, new File(path+File.separator+saveName));
|
||||
report.setConvNm(saveName);
|
||||
String originalFilename = file.getOriginalFilename();
|
||||
int extnIdx = originalFilename.lastIndexOf(".");
|
||||
info.setOrigNm(originalFilename.substring(0, extnIdx));
|
||||
info.setFileExtn(originalFilename.substring(extnIdx+1));
|
||||
info.setConvNm(saveName);
|
||||
info.setFileSize(calculationSize(file.getSize()));
|
||||
info.setSavePath(path);
|
||||
report.setOrigNm(originalFilename.substring(0, extnIdx));
|
||||
report.setFileExtn(originalFilename.substring(extnIdx+1));
|
||||
report.setFileSize(calculationSize(file.getSize()));
|
||||
report.setSavePath(path);
|
||||
}
|
||||
info.setMrKey(mrKey);
|
||||
monitoringReportRepository.save(info);
|
||||
report.setMrKey(mrKey);
|
||||
}
|
||||
monitoringReportRepository.saveAll(reportList);
|
||||
}
|
||||
|
||||
public List<MonitoringResult> selectResultList(MonitoringResult mr) {
|
||||
|
|
|
|||
|
|
@ -2,11 +2,14 @@
|
|||
$(document).on('click', '.userInfoTr', function (){
|
||||
$.ajax({
|
||||
url: '/authMgt/authEditModal',
|
||||
data: {userSeq: Number($(this).find(".userSeq").val())},
|
||||
data: {
|
||||
userSeq: Number($(this).find(".userSeq").val()),
|
||||
userNm: $(this).find(".userNm").val()
|
||||
},
|
||||
type: 'GET',
|
||||
dataType:"html",
|
||||
success: function(html){
|
||||
$("#configInfo").empty().append(html)
|
||||
$("#authEditModalContent").empty().append(html)
|
||||
$("#accessTab").click();
|
||||
$("#authEditModal").modal('show');
|
||||
},
|
||||
|
|
@ -16,42 +19,104 @@ $(document).on('click', '.userInfoTr', function (){
|
|||
});
|
||||
})
|
||||
|
||||
$(document).on('click', '.radioTd', function (){
|
||||
$(this).find('input').prop('checked', true);
|
||||
})
|
||||
$(document).on('click', '.selectTh', function (){
|
||||
const type = $(this).attr("data-type");
|
||||
const target = $(this).attr("data-target");
|
||||
if(target){
|
||||
$("."+type+"RadioEmpty").prop("checked", false)
|
||||
$("."+type+"Radio"+target).prop("checked", true)
|
||||
switch (target) {
|
||||
case "APC004":
|
||||
$(".approvalRadioAPC003").prop("checked", false);
|
||||
$(".approvalRadioAPC002").prop("checked", false);
|
||||
break;
|
||||
case "APC003":
|
||||
$(".approvalRadioAPC004").prop("checked", false);
|
||||
$(".approvalRadioAPC001").prop("checked", false);
|
||||
break;
|
||||
case "APC002":
|
||||
$(".approvalRadioAPC004").prop("checked", false);
|
||||
$(".approvalRadioAPC001").prop("checked", false);
|
||||
break;
|
||||
case "APC001":
|
||||
$(".approvalRadioAPC003").prop("checked", false);
|
||||
$(".approvalRadioAPC002").prop("checked", false);
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
$(".approvalRadio").prop("checked", false)
|
||||
$("."+type+"RadioEmpty").prop("checked", true)
|
||||
}
|
||||
})
|
||||
|
||||
$(document).on('click', '.radioTd', function (event){
|
||||
const chkbox = $(this).find('input');
|
||||
if(event.target.type !== "checkbox"){
|
||||
chkbox.prop('checked', !chkbox[0].checked);
|
||||
}
|
||||
apprvChkboxControl(chkbox[0]);
|
||||
})
|
||||
$(document).on('change', '.approvalRadioEmpty', function (){
|
||||
apprvChkboxControl(this);
|
||||
})
|
||||
$(document).on('change', '.approvalRadio', function (){
|
||||
apprvChkboxControl(this);
|
||||
})
|
||||
|
||||
function apprvChkboxControl(target){
|
||||
if(target.className === "approvalRadioEmpty"){
|
||||
if(target.checked){
|
||||
$(target).parents('tr').find('.approvalRadio').prop("checked", false);
|
||||
}
|
||||
}else{
|
||||
if(target.checked){
|
||||
const tr = $(target).parents('tr');
|
||||
tr.find('.approvalRadioEmpty').prop("checked", false);
|
||||
switch ($(target).val()) {
|
||||
case "APC004":
|
||||
tr.find(".approvalRadioAPC003").prop("checked", false);
|
||||
tr.find(".approvalRadioAPC002").prop("checked", false);
|
||||
break;
|
||||
case "APC003":
|
||||
tr.find(".approvalRadioAPC004").prop("checked", false);
|
||||
tr.find(".approvalRadioAPC001").prop("checked", false);
|
||||
break;
|
||||
case "APC002":
|
||||
tr.find(".approvalRadioAPC004").prop("checked", false);
|
||||
tr.find(".approvalRadioAPC001").prop("checked", false);
|
||||
break;
|
||||
case "APC001":
|
||||
tr.find(".approvalRadioAPC003").prop("checked", false);
|
||||
tr.find(".approvalRadioAPC002").prop("checked", false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on('click', '#saveAuthBtn', function (){
|
||||
if(confirm("저장하시겠습니까?")){
|
||||
contentFade("in");
|
||||
const userSeq = Number($("#userSeq").val());
|
||||
const accessConfigList = []
|
||||
$("#accessEditTable").find('tbody').children().each(function (idx, tr){
|
||||
accessConfigList.push(
|
||||
{
|
||||
accessConfigList.push({
|
||||
userSeq: userSeq,
|
||||
menuKey: Number($(this).find('.menuKey').val()),
|
||||
accessAuth: $(this).find('input:checked').val()
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
const approvalConfigList = []
|
||||
$("#approvalEditTable").find('input:checked').each(function (idx, tr){
|
||||
approvalConfigList.push(
|
||||
{
|
||||
$("#approvalEditTable").find('tbody').children().each(function (idx, tr){
|
||||
let apprvAuth = "";
|
||||
$.each($(this).find("input:checked"), function (idx, input){
|
||||
apprvAuth+=input.value;
|
||||
})
|
||||
approvalConfigList.push({
|
||||
userSeq: userSeq,
|
||||
menuKey: Number($(this).parents('tr').find('.menuKey').val()),
|
||||
approvalAuth: $(this).val()
|
||||
}
|
||||
)
|
||||
menuKey: Number($(this).find('.menuKey').val()),
|
||||
approvalAuth: apprvAuth
|
||||
})
|
||||
})
|
||||
const authList = {};
|
||||
authList.accessConfigList = accessConfigList;
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ function saveResult(mrState){
|
|||
formData.append('reportList['+(idx)+'].contactDate', $(div).find(".contactDate").val());
|
||||
formData.append('reportList['+(idx)+'].writeDate', $(div).find(".writeDate").val());
|
||||
formData.append('reportList['+(idx)+'].reportTitle', $(div).find(".reportTitle").val());
|
||||
formData.append('reportList['+(idx)+'].convNm', $(div).find(".convNm").val());
|
||||
if($(div).find(".file").val() != ""){
|
||||
formData.append('reportList['+(idx)+'].file', $(div).find(".file")[0].files[0]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||
<input type="hidden" id="userSeq" th:value="${userInfo.userSeq}">
|
||||
<div class="tab-pane fade p-2 show active" id="accessTabPanel" role="tabpanel" aria-labelledby="accessTab" tabindex="0">
|
||||
<div class="modal-header bg-dark">
|
||||
<h5 class="modal-title text-white" id="menuEditModalLabel" th:text="|${userInfo.userNm} 권한 편집|"></h5>
|
||||
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="userSeq" th:value="${userInfo.userSeq}">
|
||||
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="accessTab" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">메뉴</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="approvalTab" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">결재</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content bg-white border border-top-0" id="configInfo">
|
||||
<div class="tab-pane fade p-2 show active" id="accessTabPanel" role="tabpanel" aria-labelledby="accessTab" tabindex="0">
|
||||
<table class="table table-sm table-hover text-center" id="accessEditTable">
|
||||
<thead>
|
||||
<tr class="table-secondary">
|
||||
|
|
@ -46,8 +60,8 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="tab-pane fade p-2" id="approvalTabPanel" role="tabpanel" aria-labelledby="approvalTab" tabindex="0">
|
||||
</div>
|
||||
<div class="tab-pane fade p-2" id="approvalTabPanel" role="tabpanel" aria-labelledby="approvalTab" tabindex="0">
|
||||
<table class="table table-sm table-hover text-center" id="approvalEditTable">
|
||||
<thead>
|
||||
<tr class="table-secondary">
|
||||
|
|
@ -56,41 +70,41 @@
|
|||
<th>소분류</th>
|
||||
<th class="selectTh mouse-hover-clickable" data-type="approval">해제</th>
|
||||
<th:block th:each="code:${session.commonCode.get('APC')}">
|
||||
<th class="selectTh mouse-hover-clickable" data-type="approval" th:data-target="${code.itemCd}" th:text="${code.itemValue}"></th>
|
||||
<th class="selectTh mouse-hover-clickable" data-type="approval" th:data-target="${code.itemCd}" th:utext="${#strings.replace(code.itemValue, '+', ',<br>')}"></th>
|
||||
</th:block>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="approvalConfig:${userInfo.approvalConfigList}">
|
||||
<input type="hidden" class="menuKey" th:value="${approvalConfig.menuKey}">
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('CAT1')}">
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat1Cd}">
|
||||
<td th:text="${commonCode.itemValue}">.</td>
|
||||
</th:block>
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat1Cd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</td>
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('CAT2')}">
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat2Cd}">
|
||||
<td th:text="${commonCode.itemValue}">.</td>
|
||||
</th:block>
|
||||
</th:block>
|
||||
<th:block th:if="${#strings.isEmpty(approvalConfig.cat3Cd)}">
|
||||
<td></td>
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat2Cd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</td>
|
||||
<td>
|
||||
<th:block th:unless="${#strings.isEmpty(approvalConfig.cat3Cd)}" th:each="commonCode:${session.commonCode.get('CAT3')}">
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat3Cd}">
|
||||
<td th:text="${commonCode.itemValue}"></td>
|
||||
<th:block th:if="${commonCode.itemCd eq approvalConfig.cat3Cd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
</th:block>
|
||||
</th:block>
|
||||
<td class="radioTd">
|
||||
<input type="radio" class="approvalRadioEmpty" th:name="${#strings.concat('approvalAuth',approvalConfig.menuKey)}" value="">
|
||||
</td>
|
||||
<th:block th:each="code:${session.commonCode.get('APC')}">
|
||||
<td class="radioTd">
|
||||
<input type="radio" th:class="${#strings.concat('approvalRadio', code.itemCd)}" th:name="${#strings.concat('approvalAuth',approvalConfig.menuKey)}" th:value="${code.itemCd}" th:checked="${code.itemCd eq approvalConfig.approvalAuth}">
|
||||
<input type="checkbox" class="approvalRadioEmpty" th:name="${#strings.concat('approvalAuth',approvalConfig.menuKey)}" value="">
|
||||
</td>
|
||||
<td class="radioTd" th:each="code:${session.commonCode.get('APC')}">
|
||||
<input type="checkbox" class="approvalRadio" th:classappend="${#strings.concat('approvalRadio', code.itemCd)}" th:name="${#strings.concat('approvalAuth',approvalConfig.menuKey)}" th:value="${code.itemCd}" th:checked="${approvalConfig.approvalAuth ne null && #strings.contains(approvalConfig.approvalAuth, code.itemCd)}">
|
||||
</td>
|
||||
</th:block>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer bg-light">
|
||||
<button type="button" class="btn btn-primary" id="saveAuthBtn">저장</button>
|
||||
</div>
|
||||
</html>
|
||||
|
|
@ -67,7 +67,6 @@
|
|||
<table class="table table-sm table-hover table-bordered">
|
||||
<thead>
|
||||
<tr class="table-secondary">
|
||||
<th></th>
|
||||
<th>소속</th>
|
||||
<th>부서</th>
|
||||
<th>계급</th>
|
||||
|
|
@ -79,9 +78,7 @@
|
|||
<tbody class="table-group-divider">
|
||||
<tr class="userInfoTr" th:each="userInfo:${userInfoList}">
|
||||
<input type="hidden" class="userSeq" th:value="${userInfo.userSeq}">
|
||||
<td>
|
||||
<input type="checkbox" class="userInfoCheckBox" th:value="${userInfo.userSeq}">
|
||||
</td>
|
||||
<input type="hidden" class="userNm" th:value="${userInfo.userNm}">
|
||||
<td>
|
||||
<th:block th:each="commonCode:${session.commonCode.get('OG')}">
|
||||
<th:block th:if="${commonCode.itemCd == userInfo.ogCd}" th:text="${commonCode.itemValue}"></th:block>
|
||||
|
|
@ -139,29 +136,9 @@
|
|||
<div class="modal fade" id="authEditModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="authEditModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-scrollable">
|
||||
<div class="modal-content" id="authEditModalContent">
|
||||
<div class="modal-header bg-dark">
|
||||
<h5 class="modal-title text-white" id="menuEditModalLabel">권한 편집</h5>
|
||||
<button type="button" class="btn-close f-invert" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="accessTab" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">메뉴</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="approvalTab" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">결재</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content bg-white border border-top-0" id="configInfo">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer bg-light">
|
||||
<!-- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>-->
|
||||
<button type="button" class="btn btn-primary" id="saveAuthBtn">저장</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
|
|
@ -221,8 +221,7 @@
|
|||
<div class="px-2">
|
||||
<form action="#" method="post" id="apprvForm">
|
||||
<input type="hidden" name="affairKey" th:value="${affair.affairKey}">
|
||||
<th:block
|
||||
th:if="${(apprvAuth eq 'APC003' or apprvAuth eq 'APC004') and affair.affairStatus eq 'DST002' and affair.rateList.get(0).ratingOrgan eq userOrgan}">
|
||||
<th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and affair.affairStatus eq 'DST002' and affair.rateList.get(0).ratingOrgan eq userOrgan}">
|
||||
<input type="hidden" name="sectionApprv" id="sectionApprv">
|
||||
<div class="row border-top-0 border-secondary">
|
||||
<div class="col-10">
|
||||
|
|
@ -241,12 +240,11 @@
|
|||
</div>
|
||||
</th:block>
|
||||
<th:block
|
||||
th:if="${(apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and affair.affairStatus eq 'DST004' and affair.rateList.get(0).ratingOrgan eq userOrgan}">
|
||||
th:if="${(#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and affair.affairStatus eq 'DST004' and affair.rateList.get(0).ratingOrgan eq userOrgan}">
|
||||
<input type="hidden" name="headApprv" id="headApprv">
|
||||
<div class="row border-top-0 border-secondary">
|
||||
<div class="col-8">
|
||||
<input type="text" class="form-control form-control-sm etc" name="headEtc"
|
||||
placeholder="추가의견, 반려사유 기입">
|
||||
<input type="text" class="form-control form-control-sm etc" name="headEtc" placeholder="추가의견, 반려사유 기입">
|
||||
<input type="text" class="d-none" id="submitPrevention">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
|
|
|
|||
|
|
@ -320,10 +320,10 @@
|
|||
<div class="col-3">
|
||||
<input type="text" class="form-control form-control-sm reportTitle" th:value="${info.reportTitle}">
|
||||
</div>
|
||||
|
||||
<th:block th:if="${not #strings.isEmpty(info.origNm)}">
|
||||
<th:block th:unless="${#strings.isEmpty(info.origNm)}">
|
||||
<div class="col-3" id="deleteFile">
|
||||
<div class="input-group" id="fileDelete">
|
||||
<input type="hidden" class="convNm" th:value="${info.convNm}">
|
||||
<input type="text" class="form-control form-control-sm" th:value="|${info.origNm}.${info.fileExtn}|" readonly>
|
||||
<button type="button" class="btn btn-sm btn-danger" id="deleteFileBtn">
|
||||
<i class="bi bi-x"></i>
|
||||
|
|
@ -332,9 +332,10 @@
|
|||
<input class="file d-none" id="updateFile" type="file">
|
||||
</div>
|
||||
</th:block>
|
||||
<th:block th:unless="${not #strings.isEmpty(info.origNm)}">
|
||||
<th:block th:if="${#strings.isEmpty(info.origNm)}">
|
||||
<div class="col-3" id="addFile">
|
||||
<div class="input-group" id="fileAdd">
|
||||
<input type="hidden" class="origNm" value="">
|
||||
<input type="text" class="form-control form-control-sm" value="등록된 파일이 없습니다." readonly>
|
||||
<button type="button" class="btn btn-sm btn-primary" id="addFileBtn">
|
||||
<i class="bi bi-plus"></i>
|
||||
|
|
|
|||
Loading…
Reference in New Issue