청산보고서 작업중.
parent
ef44c1564a
commit
5721054cd9
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue