청산보고서 작업중.

강석 최 2022-10-07 18:38:06 +09:00
parent ef44c1564a
commit 5721054cd9
11 changed files with 478 additions and 79 deletions

View File

@ -3,6 +3,8 @@ package com.dbnt.faisp.fpiMgt.affairResult;
import com.dbnt.faisp.authMgt.service.AuthMgtService;
import com.dbnt.faisp.fpiMgt.affairResult.model.ResultApprv;
import com.dbnt.faisp.fpiMgt.affairResult.model.ResultBoard;
import com.dbnt.faisp.fpiMgt.affairResult.model.ClearInfo;
import com.dbnt.faisp.fpiMgt.affairResult.model.ResultInfo;
import com.dbnt.faisp.fpiMgt.affairResult.service.ResultService;
import com.dbnt.faisp.userInfo.model.UserInfo;
import lombok.RequiredArgsConstructor;
@ -178,12 +180,11 @@ public class ResultController { // 첩보수집활동 > 외사경찰 견문관
@PostMapping("/saveResult")
public Integer saveResult(ResultBoard resultBoard,
@RequestParam(value = "resultInfos", required = false) List<String> resultInfos,
@RequestParam(value = "detailResultInfos", required = false)List<String> detailResultInfos,
MultipartHttpServletRequest request,
@RequestParam(value = "fileSeq", required = false) List<Integer> deleteFileSeq){
resultBoard.setMultipartFileList(request.getMultiFileMap().get("uploadFiles"));
return resultService.saveResultBoard(resultBoard, resultInfos, detailResultInfos, deleteFileSeq);
return 0;
// return resultService.saveResultBoard(resultBoard, deleteFileSeq);
}
@ -194,4 +195,17 @@ public class ResultController { // 첩보수집활동 > 외사경찰 견문관
apprv.setSaveDt(LocalDateTime.now());
return resultService.resultStateChange(apprv);
}
@GetMapping("/getClearInfoRow")
public ModelAndView getClearInfoRow(ClearInfo info){
ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/clearInfoRow");
mav.addObject("info", info);
return mav;
}
@GetMapping("/getResultInfoRow")
public ModelAndView getResultInfoRow(ResultInfo info){
ModelAndView mav = new ModelAndView("igActivities/fpiMgt/affairResult/resultInfoRow");
mav.addObject("info", info);
return mav;
}
}

View File

@ -0,0 +1,41 @@
package com.dbnt.faisp.fpiMgt.affairResult.model;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "clear_info")
@IdClass(ClearInfo.ClearInfoId.class)
public class ClearInfo {
@Id
@Column(name = "result_key")
private Integer resultKey;
@Id
@Column(name = "info_seq")
private Integer infoSeq;
@Column(name = "use_catg")
private String useCatg;
@Column(name = "use_detail")
private String userDetail;
@Column(name = "price")
private Double price;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ClearInfoId implements Serializable {
private Integer resultKey;
private Integer infoSeq;
}
}

View File

@ -32,16 +32,26 @@ public class ResultBoard extends BaseModel {
private String clearTitle;
@Column(name = "result_title")
private String resultTitle;
@Column(name = "start_dt")
@Column(name = "use_start_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate startDt;
@Column(name = "end_dt")
private LocalDate useStartDt;
@Column(name = "use_end_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate endDt;
private LocalDate useEndDt;
@Column(name = "work_start_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate workStartDt;
@Column(name = "work_end_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate workEndDt;
@Column(name = "plan_price")
private Double planPrice;
@Column(name = "use_price")
private Double usePrice;
@Column(name="result_etc")
private String resultEtc;
@Column(name="clear_etc")
private String clearEtc;
@Column(name = "wrt_organ")
private String wrtOrgan;
@Column(name = "wrt_part")
@ -56,6 +66,7 @@ public class ResultBoard extends BaseModel {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt;
@Transient
private String userType;
@Transient
@ -66,5 +77,8 @@ public class ResultBoard extends BaseModel {
private List<ResultFile> fileList;
@Transient
private List<MultipartFile> multipartFileList;
@Transient
private List<ClearInfo> clearInfoList;
@Transient
private List<ResultInfo> resultInfoList;
}

View File

@ -0,0 +1,38 @@
package com.dbnt.faisp.fpiMgt.affairResult.model;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "result_info")
@IdClass(ResultInfo.ResultInfoId.class)
public class ResultInfo {
@Id
@Column(name = "result_key")
private Integer resultKey;
@Id
@Column(name = "info_seq")
private Integer infoSeq;
@Column(name = "contact_target")
private String contactTarget;
@Column(name = "contact_info")
private String contactInfo;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ResultInfoId implements Serializable {
private Integer resultKey;
private Integer infoSeq;
}
}

View File

@ -0,0 +1,34 @@
package com.dbnt.faisp.fpiMgt.affairResult.model;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "result_to_affair")
@IdClass(ResultToAffair.ResultToAffairId.class)
public class ResultToAffair {
@Id
@Column(name = "result_key")
private Integer resultKey;
@Id
@Column(name = "affair_key")
private Integer affairKey;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ResultToAffairId implements Serializable {
private Integer resultKey;
private Integer affairKey;
}
}

View File

@ -0,0 +1,34 @@
package com.dbnt.faisp.fpiMgt.affairResult.model;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;
import java.io.Serializable;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "result_info")
@IdClass(ResultToPlan.ResultToPlanId.class)
public class ResultToPlan {
@Id
@Column(name = "plan_key")
private Integer planKey;
@Id
@Column(name = "result_key")
private Integer resultKey;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ResultToPlanId implements Serializable {
private Integer planKey;
private Integer resultKey;
}
}

View File

@ -45,7 +45,7 @@ public class ResultService extends BaseService { // 월간계획
}
@Transactional
public Integer saveResultBoard(ResultBoard resultBoard, List<String> resultInfos, List<String> detailResultInfos, List<Integer> deleteFileSeq) {
public Integer saveResultBoard(ResultBoard resultBoard, List<Integer> deleteFileSeq) {
Integer resultKey = resultBoardRepository.save(resultBoard).getResultKey();
if(deleteFileSeq != null && deleteFileSeq.size()>0){
deleteResultFile(resultKey, deleteFileSeq);

View File

@ -29,21 +29,58 @@ $(document).on('click', '#resultAddBtn', function (){
$("#resultDiv").append("<input type='text' class='form-control' name='resultInfos'>")
})
$(document).on('click', '#detailResultAddBtn', function (){
const detailResultDiv = $("#detailResultDiv");
detailResultDiv.append("<textarea type='text' name='detailResultInfos'></textarea>");
const lastAppendTextarea = detailResultDiv.children()[detailResultDiv.children().length-1];
$(lastAppendTextarea).summernote({
lang:'ko-KR',
height: 120,
disableDragAndDrop: true,
toolbar: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']]
]
$(document).on('click', '.rowDeleteBtn', function (){
const isClearInfo = $(this).parents("#clearInfoRow").length !== 0;
const infoSeq = $(this).parents(".infoRow").find(".infoSeq").val();
$(this).parents(".infoRow").remove();
if(isClearInfo){
setInfoSeq($("#clearInfoRow"), infoSeq);
}else{
setInfoSeq($("#resultInfoRow"), infoSeq);
}
})
$(document).on('click', '#clearInfoAddBtn', function (){
const infoRow = $("#clearInfoRow");
$.ajax({
url: '/affairResult/getClearInfoRow',
data: {infoSeq: $(".clearInfoSeq").length},
type: 'GET',
dataType:"html",
success: function(html){
infoRow.append(html);
},
error:function(){
}
});
})
$(document).on('click', '#resultInfoAddBtn', function (){
const infoRow = $("#resultInfoRow");
const infoSeq = $(".resultInfoSeq").length;
$.ajax({
url: '/affairResult/getResultInfoRow',
data: {infoSeq: infoSeq},
type: 'GET',
dataType:"html",
success: function(html){
infoRow.append(html);
$("#contactInfo"+infoSeq).summernote({
lang:'ko-KR',
height: 60,
disableDragAndDrop: true,
toolbar: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']]
]
});
},
error:function(){
}
});
})
@ -118,18 +155,6 @@ function getResultEditModal(resultKey){
format: "yyyy-mm-dd",
language: "ko"
});
$("[name='detailResultInfos']").summernote({
lang:'ko-KR',
height: 120,
disableDragAndDrop: true,
toolbar: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']]
]
});
setUploadDiv();
},
error:function(){
@ -138,7 +163,7 @@ function getResultEditModal(resultKey){
});
}
function saveResult(resultState){
if(contentCheck()){
if(resultState === "DST001" || contentCheck()){
if(confirm("저장하시겠습니까?")){
$("#resultState").val(resultState);
contentFade("in");
@ -171,6 +196,17 @@ function saveResult(resultState){
}
}
function setInfoSeq(target, infoSeq){
$.each(target.find("div.infoSeq"), function (idx, child) {
let childInfoSeq = Number(child.innerText);
if(childInfoSeq-->Number(infoSeq)){
const infoRow = $(child).parent(".infoRow")
child.innerText = childInfoSeq;
infoRow[0].id = "row"+childInfoSeq;
debugger
}
})
}
function contentCheck(){
let flag = true;
@ -184,4 +220,4 @@ function contentCheck(){
}
flag = fileCheck(flag, files);
return flag;
}
}

View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="row my-1 infoRow" th:id="|row${info.infoSeq}|">
<input type="hidden" class="infoSeq clearInfoSeq" th:name="${#strings.concat('clearInfoList[', info.infoSeq,'].infoSeq')}" th:value="${info.infoSeq}">
<div class="col-1 infoSeq" th:text="${info.infoSeq+1}"></div>
<div class="col-3">
<select class="form-select form-select-sm" th:name="${#strings.concat('clearInfoList[', info.infoSeq,'].useCatg')}">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('RIC')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
</div>
<div class="col-3">
<select class="form-select form-select-sm" th:name="${#strings.concat('clearInfoList[', info.infoSeq,'].userDetail')}">
<option value="">선택</option>
<th:block th:each="commonCode:${session.commonCode.get('RID')}">
<option th:value="${commonCode.itemCd}" th:text="${commonCode.itemValue}"></option>
</th:block>
</select>
</div>
<div class="col-5">
<div class="row">
<div class="col-7 pe-0">
<input type="text" class="form-control form-control-sm" th:name="${#strings.concat('clearInfoList[', info.infoSeq,'].price')}">
</div>
<label class="col-auto"></label>
<div class="col-auto">
<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn"><i class="bi bi-x"></i></button>
</div>
</div>
</div>
</div>

View File

@ -27,59 +27,205 @@
<div class="tab-content border border-top-0" id="configInfo">
<div class="tab-pane fade p-2 show active" id="clearReportTabPanel" role="tabpanel" aria-labelledby="clearReportTab" tabindex="0">
<div class="mb-3 row">
<label for="wrtUserNm" class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label>
<div class="col-sm-2">
<label for="wrtUserNm" 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="wrtUserNm" name="wrtUserNm" th:value="${result.wrtUserNm}" readonly>
</div>
<label for="wrtDt" class="col-sm-1 col-form-label col-form-label-sm text-center">작성일시</label>
<div class="col-sm-2">
<label for="wrtDt" 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="wrtDt" name="wrtDt" th:value="${#temporals.format(result.wrtDt, 'yyyy-MM-dd HH:mm')}" readonly>
</div>
<label for="wrtDt" 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-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="wrtDt" name="wrtDt" th:value="${#temporals.format(result.wrtDt, 'yyyy-MM-dd')}" readonly>
<input type="text" class="form-control form-control-sm" id="wrtDt" name="wrtDt" th:value="${#temporals.format(result.wrtDt, 'yyyy-MM-dd')}" readonly>
</div>
</div>
</div>
<div class="mb-3 row">
<label for="contentTitle" class="col-sm-1 col-form-label col-form-label-sm text-center">목적(제목)</label>
<div class="col-sm-11">
<label for="contentTitle" 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="contentTitle" name="clearTitle" th:value="${result.clearTitle}">
</div>
</div>
<div class="mb-3 row">
<label for="wrtUserNm" 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-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="wrtDt" name="wrtDt" th:value="${#temporals.format(result.wrtDt, 'yyyy-MM-dd')}" readonly>
<input type="text" class="form-control form-control-sm" id="wrtDt" name="wrtDt" th:value="${#temporals.format(result.wrtDt, 'yyyy-MM-dd')}" readonly>
<label for="useDateSelectorDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">사용기간</label>
<div class="col-sm-4">
<div class="input-group w-auto input-daterange" id="useDateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="useStartDt" name="useStartDt" th:value="${#temporals.format(result.useStartDt, 'yyyy-MM-dd')}" readonly>
<input type="text" class="form-control form-control-sm" id="useEndDt" name="useEndDt" th:value="${#temporals.format(result.useEndDt, 'yyyy-MM-dd')}" readonly>
</div>
</div>
<label for="wrtDt" 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="planPrice" name="wrtDt">
<label for="workDateSelectorDiv" class="col-sm-2 col-form-label col-form-label-sm text-center">사업기간</label>
<div class="col-sm-4">
<div class="input-group w-auto input-daterange" id="workDateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="workStartDt" name="workStartDt" th:value="${#temporals.format(result.workStartDt, 'yyyy-MM-dd')}" readonly>
<input type="text" class="form-control form-control-sm" id="workEndDt" name="workEndDt" th:value="${#temporals.format(result.workEndDt, 'yyyy-MM-dd')}" readonly>
</div>
</div>
<label for="wrtDt" 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="usePrice" name="wrtDt">
</div>
<div class="mb-3 row">
<label for="planPrice" class="col-sm-2 col-form-label col-form-label-sm text-center">계획금액</label>
<div class="col-sm-4">
<div class="row">
<div class="col-auto me-0">
<input type="text" class="form-control form-control-sm" id="planPrice" name="planPrice">
</div>
<label for="planPrice" class="col-sm-auto col-form-label col-form-label-sm"></label>
</div>
</div>
<label for="usePrice" class="col-sm-2 col-form-label col-form-label-sm text-center">집행액</label>
<div class="col-sm-4">
<div class="row">
<div class="col-auto me-0">
<input type="text" class="form-control form-control-sm" id="usePrice" name="usePrice">
</div>
<label for="usePrice" class="col-sm-auto col-form-label col-form-label-sm"></label>
</div>
</div>
</div>
<div class="mb-3 row justify-content-center">
<label for="detailResultDiv" class="col-sm-1 col-form-label col-form-label-sm text-center">세부<br>집행내역</label>
<div class="col-sm-11" id="detailResultDiv">
<th:block th:if="${result.resultKey eq null}">
<textarea type='text' name='detailResultInfos'></textarea>
</th:block>
</div>
<div class="col-sm-auto">
<button type="button" class="btn btn-sm btn-outline-primary" id="detailResultAddBtn"><i class="bi bi-plus-lg"></i></button>
<label for="clearInfoAddBtn" class="col-sm-2 col-form-label col-form-label-sm text-center">세부<br>집행내역</label>
<div class="col-sm-10">
<div class="row">
<div class="col-1">no</div>
<div class="col-3">구분</div>
<div class="col-3">상세</div>
<div class="col-5">금액</div>
</div>
<hr class="my-1">
<div class="row">
<div class="col-12" id="clearInfoRow">
</div>
</div>
<div class="row justify-content-center">
<div class="col-auto">
<button type="button" class="btn btn-sm btn-outline-primary" id="clearInfoAddBtn"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
<div class="row mb-3">
<label for="fileInputer" class="col-sm-1 col-form-label col-form-label-sm text-center">업로드<br>자료</label>
<div class="col-sm-11" style="min-height: 70px;">
<div class="mb-3 row">
<label for="fileInputer" class="col-sm-2 col-form-label col-form-label-sm text-center">증빙서류</label>
<div class="col-sm-10" style="min-height: 70px;">
<div class="w-100 h-100 border border-info rounded text-center" id="uploadDiv">
<th:block th:if="${#arrays.isEmpty(result.fileList)}">
<br>파일을 업로드 해주세요.
</th:block>
<th:block th:unless="${#arrays.isEmpty(result.fileList)}">
<div class='row-col-6' th:each="resultFile:${result.fileList}">
<span th:data-fileseq="${resultFile.fileSeq}" th:text="|${resultFile.origNm}.${resultFile.fileExtn} ${resultFile.fileSize}|"></span>
<a href='#' class='uploadedFileDelete text-danger text-decoration-none'>삭제</a>
</div>
</th:block>
</div>
</div>
<input type="file" class="d-none" id="fileInputer" multiple>
</div>
<div class="mb-3 row">
<label for="clearEtc" 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="clearEtc" name="clearEtc" th:value="${result.clearEtc}">
</div>
</div>
</div>
<div class="tab-pane fade p-2" id="resultReportTabPanel" role="tabpanel" aria-labelledby="resultReportTab" tabindex="0">
<div class="mb-3 row">
<label for="resultTitle" 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="resultTitle" name="resultTitle" th:value="${result.clearTitle}">
</div>
</div>
<div class="mb-3 row">
<label class="col-sm-2 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 workStartDtCopy" readonly>
<input type="text" class="form-control form-control-sm workEndDtCopy" readonly>
</div>
</div>
<label for="usePriceCopy" class="col-sm-2 col-form-label col-form-label-sm text-center">집행액</label>
<div class="col-sm-4">
<div class="row">
<div class="col-auto me-0">
<input type="text" class="form-control form-control-sm" id="usePriceCopy">
</div>
<label for="usePriceCopy" class="col-sm-auto col-form-label col-form-label-sm"></label>
</div>
</div>
</div>
<div class="mb-3 row justify-content-center">
<label for="resultInfoRow" class="col-sm-2 col-form-label col-form-label-sm text-center">세부<br>집행내역</label>
<div class="col-sm-10">
<div class="row">
<div class="col-1">no</div>
<div class="col-4">접촉 대상자</div>
<div class="col-7">접촉 내용</div>
</div>
<hr class="my-1">
<div class="row">
<div class="col-12" id="resultInfoRow">
</div>
</div>
<div class="row justify-content-center">
<div class="col-auto">
<button type="button" class="btn btn-sm btn-outline-primary" id="resultInfoAddBtn"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
<!--<div class="mb-3 row">
<label for="fileInputer" class="col-sm-2 col-form-label col-form-label-sm text-center">증빙서류</label>
<div class="col-sm-10" style="min-height: 70px;">
<div class="w-100 h-100 border border-info rounded text-center" id="uploadDiv">
<th:block th:if="${#arrays.isEmpty(result.fileList)}">
<br>파일을 업로드 해주세요.
</th:block>
<th:block th:unless="${#arrays.isEmpty(result.fileList)}">
<div class='row-col-6' th:each="resultFile:${result.fileList}">
<span th:data-fileseq="${resultFile.fileSeq}" th:text="|${resultFile.origNm}.${resultFile.fileExtn} ${resultFile.fileSize}|"></span>
<a href='#' class='uploadedFileDelete text-danger text-decoration-none'>삭제</a>
</div>
</th:block>
</div>
</div>
<input type="file" class="d-none" id="fileInputer" multiple>
</div>-->
<div class="mb-3 row">
<label for="resultEtc" 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="resultEtc" name="resultEtc" th:value="${result.clearEtc}">
</div>
</div>
</div>
<div class="tab-pane fade p-2" id="affairListTabPanel" role="tabpanel" aria-labelledby="affairListTab" tabindex="0">
<div class="mb-3 row">
<label class="col-sm-2 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 workStartDtCopy" readonly>
<input type="text" class="form-control form-control-sm workEndDtCopy" readonly>
</div>
</div>
<div class="col-auto">
<input type="button" class="btn btn-sm btn-outline-primary" id="getAffairBtn" value="불러오기">
</div>
</div>
<div class="mb-3 row justify-content-center">
<div class="col-11" id="affairListDiv">
<table class="table table-hover">
<thead>
<tr>
<th>작성일자</th>
<th>제목</th>
<th>활용</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="mb-3 row">
<label for="fileInputer" class="col-sm-2 col-form-label col-form-label-sm text-center">증빙자료</label>
<div class="col-sm-9" style="min-height: 70px;">
<div class="w-100 h-100 border border-info rounded text-center" id="uploadDiv">
<th:block th:if="${#arrays.isEmpty(result.fileList)}">
<br>파일을 업로드 해주세요.
@ -95,12 +241,6 @@
<input type="file" class="d-none" id="fileInputer" multiple>
</div>
</div>
<div class="tab-pane fade p-2" id="resultReportTabPanel" role="tabpanel" aria-labelledby="resultReportTab" tabindex="0">
</div>
<div class="tab-pane fade p-2" id="affairListTabPanel" role="tabpanel" aria-labelledby="affairListTab" tabindex="0">
</div>
</div>
</form>
</div>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<div class="row my-1 infoRow" th:id="|row${info.infoSeq}|">
<input type="hidden" class="infoSeq resultInfoSeq" th:name="${#strings.concat('resultInfoList[', info.infoSeq,'].infoSeq')}" th:value="${info.infoSeq}">
<div class="col-1">
<button type="button" class="btn btn-sm btn-outline-danger rowDeleteBtn"><i class="bi bi-x"></i></button>
<span class="infoSeq" th:text="${info.infoSeq+1}"></span>
</div>
<div class="col-4">
<input type="text" class="form-control form-control-sm" th:name="${#strings.concat('resultInfoList[', info.infoSeq,'].contactTarget')}">
</div>
<div class="col-7">
<textarea th:id="|contactInfo${info.infoSeq}|" th:name="${#strings.concat('resultInfoList[', info.infoSeq,'].contactInfo')}"></textarea>
</div>
</div>