Merge branch 'master' of https://dev.azure.com/DBNTech/ForeignAffairs/_git/ForeignAffairs
commit
6b3a6ffa37
|
|
@ -20,7 +20,7 @@ import java.util.List;
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@DynamicInsert
|
@DynamicInsert
|
||||||
@DynamicUpdate
|
@DynamicUpdate
|
||||||
@Table(name = "monitoring_result_file")
|
@Table(name = "monitoring_report")
|
||||||
@IdClass(MonitoringReport.MonitoringReportId.class)
|
@IdClass(MonitoringReport.MonitoringReportId.class)
|
||||||
public class MonitoringReport extends FileInfo {
|
public class MonitoringReport extends FileInfo {
|
||||||
@Id
|
@Id
|
||||||
|
|
@ -49,7 +49,7 @@ public class MonitoringReport extends FileInfo {
|
||||||
private String savePath;
|
private String savePath;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private File file;
|
private MultipartFile file;
|
||||||
|
|
||||||
|
|
||||||
@Embeddable
|
@Embeddable
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ public interface MonitoringReportRepository extends JpaRepository<MonitoringRepo
|
||||||
|
|
||||||
void deleteByMrKey(Integer mrKey);
|
void deleteByMrKey(Integer mrKey);
|
||||||
|
|
||||||
|
List<MonitoringReport> findByMrKey(Integer mrKey);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.dbnt.faisp.main.fpiMgt.monitoring.repository;
|
||||||
|
|
||||||
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultClearInfo;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
|
||||||
|
public interface MonitoringResultClearInfoRepository extends JpaRepository<MonitoringResultClearInfo, MonitoringResultClearInfo.MonitoringResultClearInfoId> {
|
||||||
|
|
||||||
|
void deleteByMrKey(Integer mrKey);
|
||||||
|
|
||||||
|
List<MonitoringResultClearInfo> findByMrKey(Integer mrKey);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringDesignationFile.mon
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringReport;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringReport;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResult;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultApprv;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultApprv;
|
||||||
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultClearInfo;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile.MonitoringResultFileId;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultFile.MonitoringResultFileId;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultInfo;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.model.MonitoringResultInfo;
|
||||||
|
|
@ -30,19 +31,22 @@ import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationFil
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringDesignationRepository;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringReportRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringReportRepository;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultApprvRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultApprvRepository;
|
||||||
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultClearInfoRepository;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultFileRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultFileRepository;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultInfoRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultInfoRepository;
|
||||||
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultRepository;
|
import com.dbnt.faisp.main.fpiMgt.monitoring.repository.MonitoringResultRepository;
|
||||||
import com.dbnt.faisp.main.userInfo.model.UserAlarm;
|
import com.dbnt.faisp.main.userInfo.model.UserAlarm;
|
||||||
import com.dbnt.faisp.main.userInfo.service.UserAlarmService;
|
import com.dbnt.faisp.main.userInfo.service.UserAlarmService;
|
||||||
import lombok.RequiredArgsConstructor;
|
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.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -58,6 +62,7 @@ public class MonitoringService extends BaseService {
|
||||||
private final MonitoringResultFileRepository monitoringResultFileRepository;
|
private final MonitoringResultFileRepository monitoringResultFileRepository;
|
||||||
private final MonitoringResultInfoRepository monitoringResultInfoRepository;
|
private final MonitoringResultInfoRepository monitoringResultInfoRepository;
|
||||||
private final MonitoringReportRepository monitoringReportRepository;
|
private final MonitoringReportRepository monitoringReportRepository;
|
||||||
|
private final MonitoringResultClearInfoRepository monitoringResultClearInfoRepository;
|
||||||
private final MonitoringMapper monitoringMapper;
|
private final MonitoringMapper monitoringMapper;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -166,6 +171,9 @@ public class MonitoringService extends BaseService {
|
||||||
if(mr.getMultipartFileList()!=null){
|
if(mr.getMultipartFileList()!=null){
|
||||||
saveResultUploadFiles(mrKey, mr.getMultipartFileList());
|
saveResultUploadFiles(mrKey, mr.getMultipartFileList());
|
||||||
}
|
}
|
||||||
|
if (mr.getClearInfoList() != null){
|
||||||
|
saveClearInfoList(mrKey, mr.getClearInfoList());
|
||||||
|
}
|
||||||
if (mr.getResultInfoList() != null){
|
if (mr.getResultInfoList() != null){
|
||||||
saveResultInfoList(mrKey, mr.getResultInfoList());
|
saveResultInfoList(mrKey, mr.getResultInfoList());
|
||||||
}
|
}
|
||||||
|
|
@ -212,6 +220,14 @@ public class MonitoringService extends BaseService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveClearInfoList(Integer mrKey, List<MonitoringResultClearInfo> clearInfoList){
|
||||||
|
monitoringResultClearInfoRepository.deleteByMrKey(mrKey);
|
||||||
|
for(MonitoringResultClearInfo info: clearInfoList){
|
||||||
|
info.setMrKey(mrKey);
|
||||||
|
}
|
||||||
|
monitoringResultClearInfoRepository.saveAll(clearInfoList);
|
||||||
|
}
|
||||||
|
|
||||||
private void saveResultInfoList(Integer mrKey, List<MonitoringResultInfo> resultInfoList){
|
private void saveResultInfoList(Integer mrKey, List<MonitoringResultInfo> resultInfoList){
|
||||||
monitoringResultInfoRepository.deleteByMrKey(mrKey);
|
monitoringResultInfoRepository.deleteByMrKey(mrKey);
|
||||||
for(MonitoringResultInfo info: resultInfoList){
|
for(MonitoringResultInfo info: resultInfoList){
|
||||||
|
|
@ -221,23 +237,25 @@ public class MonitoringService extends BaseService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveReportList(Integer mrKey, List<MonitoringReport> reportList){
|
private void saveReportList(Integer mrKey, List<MonitoringReport> reportList){
|
||||||
//monitoringReportRepository.deleteByMrKey(mrKey);
|
monitoringReportRepository.deleteByMrKey(mrKey);
|
||||||
for(MonitoringReport info: reportList){
|
for(MonitoringReport info: reportList){
|
||||||
MultipartFile file = (MultipartFile) info.getFile();
|
if(info.getFile() != null) {
|
||||||
String saveName = UUID.randomUUID().toString();
|
MultipartFile file = info.getFile();
|
||||||
String path = locationPath+monitoringPath;
|
String saveName = UUID.randomUUID().toString();
|
||||||
saveFile(file, new File(path+File.separator+saveName));
|
String path = locationPath+monitoringPath;
|
||||||
String originalFilename = file.getOriginalFilename();
|
saveFile(file, new File(path+File.separator+saveName));
|
||||||
int extnIdx = originalFilename.lastIndexOf(".");
|
String originalFilename = file.getOriginalFilename();
|
||||||
info.setMrKey(mrKey);
|
int extnIdx = originalFilename.lastIndexOf(".");
|
||||||
info.setOrigNm(originalFilename.substring(0, extnIdx));
|
info.setOrigNm(originalFilename.substring(0, extnIdx));
|
||||||
info.setFileExtn(originalFilename.substring(extnIdx+1));
|
info.setFileExtn(originalFilename.substring(extnIdx+1));
|
||||||
info.setConvNm(saveName);
|
info.setConvNm(saveName);
|
||||||
info.setFileSize(calculationSize(file.getSize()));
|
info.setFileSize(calculationSize(file.getSize()));
|
||||||
info.setSavePath(path);
|
info.setSavePath(path);
|
||||||
|
}
|
||||||
|
info.setMrKey(mrKey);
|
||||||
monitoringReportRepository.save(info);
|
monitoringReportRepository.save(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MonitoringResult> selectResultList(MonitoringResult mr) {
|
public List<MonitoringResult> selectResultList(MonitoringResult mr) {
|
||||||
return monitoringMapper.selectResultList(mr);
|
return monitoringMapper.selectResultList(mr);
|
||||||
|
|
@ -251,8 +269,10 @@ public class MonitoringService extends BaseService {
|
||||||
MonitoringResult savedReslut = monitoringResultRepository.findById(mrKey).orElse(null);
|
MonitoringResult savedReslut = monitoringResultRepository.findById(mrKey).orElse(null);
|
||||||
if (savedReslut != null) {
|
if (savedReslut != null) {
|
||||||
savedReslut.setMd(monitoringDesignationRepository.findById(savedReslut.getMdKey()).orElse(null));
|
savedReslut.setMd(monitoringDesignationRepository.findById(savedReslut.getMdKey()).orElse(null));
|
||||||
|
savedReslut.setClearInfoList(monitoringResultClearInfoRepository.findByMrKey(mrKey));
|
||||||
savedReslut.setResultInfoList(monitoringResultInfoRepository.findByMrKey(mrKey));
|
savedReslut.setResultInfoList(monitoringResultInfoRepository.findByMrKey(mrKey));
|
||||||
savedReslut.setFileList(monitoringResultFileRepository.findByMrKey(mrKey));
|
savedReslut.setFileList(monitoringResultFileRepository.findByMrKey(mrKey));
|
||||||
|
savedReslut.setReportList(monitoringReportRepository.findByMrKey(mrKey));
|
||||||
savedReslut.setApprvList(monitoringResultApprvRepository.findByMrKey(mrKey));
|
savedReslut.setApprvList(monitoringResultApprvRepository.findByMrKey(mrKey));
|
||||||
}
|
}
|
||||||
return savedReslut;
|
return savedReslut;
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,13 @@ function saveResult(mrState){
|
||||||
formData.append('fileSeq', $(el).attr("data-fileseq"));
|
formData.append('fileSeq', $(el).attr("data-fileseq"));
|
||||||
})
|
})
|
||||||
formData.append('mrState', mrState);
|
formData.append('mrState', mrState);
|
||||||
|
|
||||||
|
$.each($("#clearInfoRow").find(".infoRow"), function (idx, div){
|
||||||
|
formData.append('clearInfoList['+(idx)+'].infoSeq', idx+1);
|
||||||
|
formData.append('clearInfoList['+(idx)+'].useCatg', $(div).find(".useCatg").val());
|
||||||
|
formData.append('clearInfoList['+(idx)+'].useDetail', $(div).find(".useDetail").val());
|
||||||
|
formData.append('clearInfoList['+(idx)+'].price', $(div).find(".price").val());
|
||||||
|
});
|
||||||
|
|
||||||
$.each($("#resultInfoRow").find(".infoRow"), function (idx, div){
|
$.each($("#resultInfoRow").find(".infoRow"), function (idx, div){
|
||||||
formData.append('resultInfoList['+(idx)+'].infoSeq', idx+1);
|
formData.append('resultInfoList['+(idx)+'].infoSeq', idx+1);
|
||||||
|
|
@ -174,7 +181,9 @@ function saveResult(mrState){
|
||||||
formData.append('reportList['+(idx)+'].contactDate', $(div).find(".contactDate").val());
|
formData.append('reportList['+(idx)+'].contactDate', $(div).find(".contactDate").val());
|
||||||
formData.append('reportList['+(idx)+'].writeDate', $(div).find(".writeDate").val());
|
formData.append('reportList['+(idx)+'].writeDate', $(div).find(".writeDate").val());
|
||||||
formData.append('reportList['+(idx)+'].reportTitle', $(div).find(".reportTitle").val());
|
formData.append('reportList['+(idx)+'].reportTitle', $(div).find(".reportTitle").val());
|
||||||
formData.append('reportList['+(idx)+'].file', $(div).find(".file").val());
|
if($(div).find(".file").val() != ""){
|
||||||
|
formData.append('reportList['+(idx)+'].file', $(div).find(".file")[0].files[0]);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|
@ -248,9 +257,13 @@ $(document).on('click', '.rowDeleteBtn', function (){
|
||||||
})
|
})
|
||||||
|
|
||||||
$(document).on('click', '.rowDeleteBtn2', function (){
|
$(document).on('click', '.rowDeleteBtn2', function (){
|
||||||
$(this).parents(".clearInfoRow").remove();
|
$(this).parents(".infoRow").remove();
|
||||||
})
|
})
|
||||||
|
|
||||||
$(document).on('click', '.rowDeleteBtn3', function (){
|
$(document).on('click', '.rowDeleteBtn3', function (){
|
||||||
$(this).parents(".monitoringInfoRow").remove();
|
$(this).parents(".infoRow").remove();
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#addImgBtn', function (){
|
||||||
|
$("#upload").remove();
|
||||||
})
|
})
|
||||||
|
|
@ -44,15 +44,15 @@
|
||||||
<label for="workDateSelectorDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">사업기간</label>
|
<label for="workDateSelectorDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">사업기간</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<div class="input-group w-auto input-daterange" id="workDateSelectorDiv">
|
<div class="input-group w-auto input-daterange" id="workDateSelectorDiv">
|
||||||
<input type="text" class="form-control form-control-sm" id="mrSdate" name="mrSdate" readonly>
|
<input type="text" class="form-control form-control-sm" id="mrSdate" name="mrSdate" th:value="${mr.mrSdate}" readonly>
|
||||||
<input type="text" class="form-control form-control-sm" id="mrEdate" name="mrEdate" readonly>
|
<input type="text" class="form-control form-control-sm" id="mrEdate" name="mrEdate" th:value="${mr.mrEdate}" readonly>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<label for="clearTitle" class="col-sm-2 col-form-label col-form-label-sm text-center">제목</label>
|
<label for="clearTitle" class="col-sm-2 col-form-label col-form-label-sm text-center">제목</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control form-control-sm" id="clearTitle" name="clearTitle">
|
<input type="text" class="form-control form-control-sm" id="clearTitle" name="clearTitle" th:value="${mr.clearTitle}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
|
|
@ -106,7 +106,7 @@
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-auto me-0">
|
<div class="col-auto me-0">
|
||||||
<input type="number" class="form-control form-control-sm" id="mrPrice" name="mrPrice">
|
<input type="number" class="form-control form-control-sm" id="mrPrice" name="mrPrice" th:value="${mr.mrPrice}">
|
||||||
</div>
|
</div>
|
||||||
<label for="usePrice" class="col-sm-auto col-form-label col-form-label-sm">원</label>
|
<label for="usePrice" class="col-sm-auto col-form-label col-form-label-sm">원</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -124,12 +124,12 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12" id="clearInfoRow">
|
<div class="col-12" id="clearInfoRow">
|
||||||
<th:block th:each="info:${mr.clearInfoList}">
|
<th:block th:each="info:${mr.clearInfoList}">
|
||||||
<div class="row my-1 clearInfoRow">
|
<div class="row my-1 infoRow">
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<select class="form-select form-select-sm useCatg">
|
<select class="form-select form-select-sm useCatg">
|
||||||
<option value="">선택</option>
|
<option value="">선택</option>
|
||||||
<th:block th:each="category:${categoryList}">
|
<th:block th:each="category:${categoryList}">
|
||||||
<option th:value="${category.itemCd}" th:text="${category.itemValue}"></option>
|
<option th:value="${category.itemCd}" th:text="${category.itemValue}" th:selected="${category.itemCd eq info.useCatg}"></option>
|
||||||
</th:block>
|
</th:block>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -137,14 +137,14 @@
|
||||||
<select class="form-select form-select-sm useDetail">
|
<select class="form-select form-select-sm useDetail">
|
||||||
<option value="">선택</option>
|
<option value="">선택</option>
|
||||||
<th:block th:each="code:${codeList}">
|
<th:block th:each="code:${codeList}">
|
||||||
<option th:value="${code.itemCd}" th:text="${code.itemValue}"></option>
|
<option th:value="${code.itemCd}" th:text="${code.itemValue}" th:selected="${code.itemCd eq info.useDetail}"></option>
|
||||||
</th:block>
|
</th:block>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5">
|
<div class="col-5">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-7 pe-0">
|
<div class="col-7 pe-0">
|
||||||
<input type="number" class="form-control form-control-sm price">
|
<input type="number" class="form-control form-control-sm price" th:value="${info.price}">
|
||||||
</div>
|
</div>
|
||||||
<label class="col-auto">원</label>
|
<label class="col-auto">원</label>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
|
|
@ -294,17 +294,37 @@
|
||||||
<th:block th:each="info:${mr.reportList}">
|
<th:block th:each="info:${mr.reportList}">
|
||||||
<div class="row my-1 infoRow">
|
<div class="row my-1 infoRow">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<input type="text" class="form-control form-control-sm contactDate" placeholder="YYYY-MM-DD" readonly>
|
<input type="text" class="form-control form-control-sm contactDate" placeholder="YYYY-MM-DD" th:value="${info.contactDate}" readonly>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<input type="text" class="form-control form-control-sm writeDate" placeholder="YYYY-MM-DD" readonly>
|
<input type="text" class="form-control form-control-sm writeDate" placeholder="YYYY-MM-DD" th:value="${info.writeDate}" readonly>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<input type="text" class="form-control form-control-sm reportTitle">
|
<input type="text" class="form-control form-control-sm reportTitle" th:value="${info.reportTitle}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<th:block th:if="${not #strings.isEmpty(info.origNm)}">
|
||||||
|
<div class="col-3">
|
||||||
|
<div class="input-group">
|
||||||
|
<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="deleteImgBtn">
|
||||||
|
<i class="bi bi-x"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:unless="${not #strings.isEmpty(info.origNm)}">
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<input class="file" type="file">
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control form-control-sm" value="등록된 파일이 없습니다." readonly>
|
||||||
|
<button type="button" class="btn btn-sm btn-primary" id="addImgBtn">
|
||||||
|
<i class="bi bi-plus"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- <input class="file" type="file" th:unless="${not #strings.isEmpty(info.origNm)}"> -->
|
||||||
|
</th:block>
|
||||||
|
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn3"><i class="bi bi-x"></i></button>
|
<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn3"><i class="bi bi-x"></i></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -361,7 +381,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-none" id="clearIinfoFmOrigin">
|
<div class="d-none" id="clearIinfoFmOrigin">
|
||||||
<div class="row my-1 clearInfoRow" id="clearInfoFm">
|
<div class="row my-1 infoRow" id="clearInfoFm">
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<select class="form-select form-select-sm useCatg">
|
<select class="form-select form-select-sm useCatg">
|
||||||
<option value="">선택</option>
|
<option value="">선택</option>
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,90 @@
|
||||||
<input type="hidden" name="affairKey" id="viewModalAffairKey">
|
<input type="hidden" name="affairKey" id="viewModalAffairKey">
|
||||||
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
<button class="nav-link active" id="boardTab" data-bs-toggle="tab" data-bs-target="#boardTabPanel" type="button" role="tab" aria-controls="boardTabPanel" aria-selected="true">본문</button>
|
<button class="nav-link active" id="clearReportViewTab" data-bs-toggle="tab" data-bs-target="#clearReportViewTabPanel" type="button" role="tab" aria-controls="clearReportViewTabPanel" aria-selected="true">청산보고서</button>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item" role="presentation" th:if="${#lists.size(mr.fileList)>0}">
|
<li class="nav-item" role="presentation">
|
||||||
<button class="nav-link" id="fileTab" data-bs-toggle="tab" data-bs-target="#fileTabPanel" type="button" role="tab" aria-controls="fileTabPanel" aria-selected="false" th:text="${#strings.concat('첨부파일(', #lists.size(mr.fileList), ')')}"></button>
|
<button class="nav-link" id="resultReportViewTab" data-bs-toggle="tab" data-bs-target="#resultReportViewTabPanel" type="button" role="tab" aria-controls="resultReportViewTabPanel" aria-selected="false">결과보고서</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="affairListViewTab" data-bs-toggle="tab" data-bs-target="#affairListViewTabPanel" type="button" role="tab" aria-controls="affairListViewTabPanel" aria-selected="false">견문목록&증빙자료</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content bg-white border border-top-0 p-2">
|
<div class="tab-content bg-white border border-top-0 p-2">
|
||||||
<div class="tab-pane fade p-2 show active" id="boardTabPanel" role="tabpanel" tabindex="0">
|
<div class="tab-pane fade p-2 show active" id="clearReportViewTabPanel" role="tabpanel" aria-labelledby="clearReportViewTab" tabindex="0">
|
||||||
|
<div class="row mb-1">
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label>
|
||||||
|
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq mr.wrtUserGrd}" th:text="|${commonCode.itemValue} ${mr.wrtUserNm}|"></label>
|
||||||
|
</th:block>
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성일</label>
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${#temporals.format(mr.wrtDt, 'yyyy-MM-dd HH:mm')}"></label>
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">상태</label>
|
||||||
|
<th:block th:each="commonCode:${session.commonCode.get('DST')}">
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq mr.mrState}" th:text="${commonCode.itemValue}"></label>
|
||||||
|
</th:block>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row mb-1">
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">제목</label>
|
||||||
|
<label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${mr.mrTitle}"></label>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row mb-1"><h6 class="text-center">모니터링 대상자</h6></div>
|
||||||
|
<br>
|
||||||
|
<div class="row">
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">대상지정일</label>
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${mr.md.mdDt}"></label>
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">성명</label>
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${mr.md.mdName}"></label>
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">국적</label>
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${mr.md.mdNationality}"></label>
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">소속/계급<br>(직위)</label>
|
||||||
|
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${mr.md.mdRank}"></label>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row mb-1">
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">사업기간</label>
|
||||||
|
<div class="col-sm-11 form-control-sm" id="contentDiv">
|
||||||
|
<div th:text="|${mr.mrSdate} ~ ${mr.mrEdate}|"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row mb-1">
|
||||||
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">집행액</label>
|
||||||
|
<div class="col-sm-11 form-control-sm" id="contentDiv">
|
||||||
|
<div th:text="|${mr.mrPrice}원|"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row mb-1">
|
||||||
|
<label for="clearTitle" class="col-sm-1 border-end border-secondary col-form-label col-form-label-sm text-center fw-bold">세부<br>집행내역</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<table class="table table-sm table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>구분</th>
|
||||||
|
<th>상세</th>
|
||||||
|
<th>금액</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr th:each="clearInfo:${mr.clearInfoList}">
|
||||||
|
<th:block th:each="commonCode:${session.commonCode.get('RIC')}">
|
||||||
|
<td th:if="${clearInfo.useCatg eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:each="commonCode:${session.commonCode.get('RID')}">
|
||||||
|
<td th:if="${clearInfo.useDetail eq commonCode.itemCd}" th:text="${commonCode.itemValue}"></td>
|
||||||
|
</th:block>
|
||||||
|
<td th:text="${#strings.concat(#numbers.formatInteger(clearInfo.price, 1, 'COMMA'), '원')}"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-pane fade p-2" id="resultReportViewTabPanel" role="tabpanel" aria-labelledby="resultReportViewTab" tabindex="0">
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label>
|
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label>
|
||||||
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
|
<th:block th:each="commonCode:${session.commonCode.get('JT')}">
|
||||||
|
|
@ -80,7 +156,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane fade p-2" id="fileTabPanel" role="tabpanel" tabindex="0">
|
<div class="tab-pane fade p-2" id="affairListViewTabPanel" role="tabpanel" aria-labelledby="affairListViewTab" tabindex="0">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue