초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,901 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : GnrlBbscttUpdtPopupU.jsp
Description : 일반 게시글 등록 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-08 김혜지 최초 생성
--%>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div id="board-list-update" class="modal" style="max-width: 1400px;">
<div class="modal-header">
<h4>게시글 수정</h4>
</div>
<%--게시판 설정--%>
<c:set value = "${resultMap.bbsInfo}" var = "bbsInfo"/>
<%--게시글 정보--%>
<c:set value = "${resultMap.bbscttInfo.bbscttInfo}" var = "bbscttInfo"/>
<%--게시글 VO--%>
<c:set value = "${resultMap.bbscttVO}" var = "bbscttVO"/>
<%--게시글 추가문항답변--%>
<c:set value = "${resultMap.bbscttInfo.qesitmAnswList}" var = "qesitmAnswList"/>
<%--게시글 첨부파일--%>
<c:set value = "${resultMap.bbscttInfo.fileInfoGson}" var = "fileInfoGson"/><%--드롭존 용--%>
<c:set value = "${resultMap.bbscttInfo.fileInfo}" var = "fileInfo"/><%--일반 파일 첨부 용--%>
<%--게시글 상품--%>
<c:set value = "${resultMap.bbscttInfo.goods}" var = "goods"/>
<%--게시글 분류--%>
<c:set value = "${resultMap.itmList}" var = "itmList"/>
<%--게시글 추가입력항목--%>
<c:set value = "${resultMap.qesitmList.qesitmList}" var = "qesitmList"/>
<%--게시글 추가입력항목 항목--%>
<c:set value = "${resultMap.qesitmList.itmCnList}" var = "itmCnList"/>
<div class="modal-content">
<div class="form-control-container mb-10">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<form id="bbsUpdtForm">
<input type="hidden" name="sknTyCd" value="<c:out value="${bbsInfo.sknTyCd}"/>">
<input type="hidden" name="bbsId" value="${bbsInfo.bbsId }"/>
<input type="hidden" id="btInnb" name="bbscttInnb" value="${ bbscttInfo.bbscttInnb }"/>
<input type="hidden" id="extFiles" name="extFiles" value=""/>
<input type="hidden" id="filesInfo" name="filesInfo"/>
<input type = "hidden" name = "sopmalCd" value = "${bbscttVO.sopmalCd}"/>
<div class="table-wrapper mb-40">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
</colgroup>
<tbody>
<tr>
<th>작성자</th>
<td colspan="3">
<div>
<c:choose>
<%--회원--%>
<c:when test="${bbscttInfo.regusrDvCd eq '01'}">
<button type="button"
class="crmBtn"
data-info="info01"
onclick="fn_select_crm_mini_info(this,
'<c:out value='${bbscttInfo.regusr}'/>'
,'<c:out value='${bbscttInfo.mbrDvCd}'/>'
,'#modalDiv');">
<span class="gray-12">
<c:out value="${bbscttInfo.regusrNm}"/>
</span><br>
(<c:choose>
<c:when test="${bbscttInfo.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test="${bbscttInfo.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge_naver"></i>
</c:when>
<c:when test="${bbscttInfo.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i>
<span class="fw-500 blue-7">
<c:out value="${bbscttInfo.regusrId}"/>
</span>
</c:when>
<c:otherwise>
<span class="fw-500 blue-7"><c:out
value="${bbscttInfo.regusrId}"/></span>
</c:otherwise>
</c:choose>/
<span class="fw-500 green-8">
<c:out value="${bbscttInfo.mbrGradNm}"/>
</span>)
</button>
</c:when>
<%--관리자--%>
<c:when test="${bbscttInfo.regusrDvCd eq '02'}">
<c:out value="${ bbscttInfo.mngrNm}"/>(<c:out
value="${bbscttInfo.maskingRegusrId}"/>)
</c:when>
<%--네이버페이--%>
<c:when test="${bbscttInfo.regusrDvCd eq '03'}">
naverpay
</c:when>
<%--입점사--%>
<c:when test="${bbscttInfo.regusrDvCd eq '04'}">
입점사
</c:when>
<%--비회원--%>
<c:when test="${bbscttInfo.regusrDvCd eq '99'}">
<c:out value="${bbscttInfo.maskingRegusrNm}"/>[비회원]
</c:when>
</c:choose>
</div>
</td>
</tr>
<tr class = "visibleAt">
<c:choose>
<c:when test = "${bbsInfo.bbsTyCd ne '04' && bbsInfo.bbsTyCd ne '10'}">
<th>노출 기간 제한<br><span class="fs-13">(노출 여부)</span></th>
</c:when>
<c:otherwise>
<th>노출 여부</th>
</c:otherwise>
</c:choose>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="expsrAt" id="expsrAt" value="Y"
onclick="fn_readOnly_set(this);"
<c:if test = "${bbscttInfo.expsrAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">노출여부</span>
</label>
</div>
<c:if test="${bbsInfo.bbsTyCd ne '04'&& bbsInfo.bbsTyCd ne '10'}">
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="ntcePdSetupAtYC" name="ntcePdSetupAt" value="Y"
onclick="fn_readOnly_ntcePd(this);"
<c:choose>
<c:when test="${bbscttInfo.expsrAt eq 'Y' && bbscttInfo.ntcePdSetupAt eq 'Y'}">
checked="checked"
</c:when>
<c:when test="${bbscttInfo.expsrAt eq 'N'}">
disabled="disabled"
</c:when>
</c:choose>>
<label for="ntcePdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" class="pdRadioN" id="ntcePdSetupAtNC"
name="ntcePdSetupAt" value="N"
onclick="fn_readOnly_ntcePd(this);"
<c:choose>
<c:when test="${bbscttInfo.expsrAt eq 'Y' && bbscttInfo.ntcePdSetupAt eq 'N'}">
checked="checked"
</c:when>
<c:when test="${bbscttInfo.expsrAt eq 'N'}">
disabled="disabled"
</c:when>
</c:choose>>
<label for="ntcePdSetupAtNC">상시</label>
</div>
</div>
</c:if>
</div>
<c:if test = "${bbsInfo.bbsTyCd ne '04' && bbsInfo.bbsTyCd ne '10'}">
<div class="input-container pdDate">
<input type="text" name="ntceBgnDe" class="datepicker ntceDate chkDate" title="시작 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.expsrAt eq 'Y' && bbscttInfo.ntcePdSetupAt eq 'Y'}">
value="<c:out value ='${bbscttInfo.ntceBgnDe}'/>"
</c:when>
<c:when test = "${bbscttInfo.expsrAt eq 'N'|| bbscttInfo.expsrAt eq 'Y'&& bbscttInfo.ntcePdSetupAt eq 'N'}">
disabled= "disabled"
</c:when>
</c:choose> id = "updtDate">
<span class="tilde">~</span>
<input type="text" name="ntceEndDe" class="datepicker ntceDate chkDate" title="종료 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.expsrAt eq 'Y' && bbscttInfo.ntcePdSetupAt eq 'Y'}">
value="${bbscttInfo.ntceEndDe}"
</c:when>
<c:when test = "${bbscttInfo.expsrAt eq 'N'||bbscttInfo.expsrAt eq 'Y'&& bbscttInfo.ntcePdSetupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
</div>
</c:if>
</div>
</td>
<c:if test = "${bbsInfo.notice eq 'Y'}">
<th>공지 기간 제한<br><span class="fs-13">(공지글 여부)</span></th>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="ntcAt" value="Y" onclick="fn_readOnly_set(this);"
<c:if test = "${bbscttInfo.ntcAt eq 'Y'}">checked = "checked"</c:if>>
<span class="check"></span>
<span class="control-label">공지글 등록</span>
</label>
</div>
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="ntcPdSetupAtYC" name="ntcPdSetupAt" value="Y" onclick="fn_readOnly_ntcPd(this)"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
checked = "checked"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<label for="ntcPdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" class="pdRadioN" id="ntcPdSetupAtNC" name="ntcPdSetupAt" value="N" onclick="fn_readOnly_ntcPd(this)"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'N'}">
checked = "checked"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<label for="ntcPdSetupAtNC">상시</label>
</div>
</div>
</div>
<div class="input-container pdDate">
<input type="text" name="ntcBgnDe" id = "ntcBgnDe" class="datepicker ntcDate chkDate" title="시작 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
value="${bbscttInfo.ntcBgnDe}"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'||bbscttInfo.ntcAt eq 'Y'&& bbscttInfo.ntcPdSetupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<span class="tilde">~</span>
<input type="text" name="ntcEndDe" id = "ntcEndDe" class="datepicker ntcDate chkDate" title="종료 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
value="${bbscttInfo.ntcEndDe}"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'||bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
</div>
</div>
</td>
</c:if>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.secretBbsctt eq 'Y'}">
<th>비밀글 여부</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container mr-10">
<label class="b-checkbox checkbox">
<input type="checkbox" name="secretBbscttAt" value="Y" onclick="fn_readOnly_secret(this);"
<c:if test = "${bbscttInfo.secretBbscttAt eq 'Y'}">
checked= "checked"
</c:if>>
<span class="check"></span>
<span class="control-label">비밀글입니다</span>
</label>
</div>
<%--해당 관리자가 쓴 게시글에만 비밀번호 재설정 가능1--%>
<c:choose>
<c:when test = "${bbscttInfo.regusrDvCd eq '02' && bbscttInfo.regusr eq user.userInnb}">
<input class="input-text md password" type="password" name="password" title="비밀번호" value = "<c:out value = "${bbscttInfo.password}"/>"
placeholder="비밀번호를 입력해주세요." maxlength="20" <c:if test = "${bbscttInfo.secretBbscttAt ne 'Y'}">disabled</c:if>>
<input type = "hidden" value = "N" name = "passwordChngAt" id = "passwordChngAt"/>
</c:when>
<c:otherwise>
<input type = "hidden" name = "password" value="<c:out value = "${bbscttInfo.password}"/>"
</c:otherwise>
</c:choose>
</div>
</td>
</c:if>
<c:if test = "${bbsInfo.reprsntImg eq 'Y'}">
<th>대표 이미지</th>
<td>
<div class="td-inner align-items-start">
<div class="input-file" id="fileBtn" <c:if test = "${not empty bbscttInfo.reprsntImgOrginlFilNm }">style="display:none"</c:if>>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<input type="file" id="fileUpload" name="files" title="대표이미지" multiple="multiple" accept="<c:out value="${ acceptFileExtensions }"/>">
<label for="fileUpload">첨부 파일</label>
</div>
<c:choose>
<c:when test="${empty bbscttInfo.reprsntImgOrginlFilNm }">
<div class="manage-btn-container" id="fileCnBtn">
<input type="hidden" id="represntFilAt" name="represntFilAt" value="N">
<input type="hidden" id="represntFilChangeAt" name="represntFilChangeAt" value="N">
<ul class="file-list" id="fileList">
</ul>
</div>
</c:when>
<c:otherwise>
<div class="manage-btn-container" id ="fileCnBtn">
<input type="hidden" id="represntFilAt" name="represntFilAt" value = "Y">
<input type="hidden" id="represntFilChangeAt" name="represntFilChangeAt" value="N">
<ul class="file-list" id="fileList">
<li id="<c:out value="${bbscttInfo.bbscttInnb}"/>">
<a href="#" id="<c:out value="${bbscttInfo.reprsntImgOrginlFilNm}"/>" onclick="downloadFile(this,'<c:out value='${bbscttVO.sopmalCd}'/>','BDIG',1);">
<i class="icon icon_file-list mr-2"></i>
<span class="file-list__item-title">
<c:out value="${bbscttInfo.reprsntImgOrginlFilNm}"/>
</span>
</a>
<button type="button" class="file-list__delete" onclick="deleteFile(this,'<c:out value='${bbscttVO.sopmalCd}'/>','BDIG',1,fn_execute_delete_represntImg);">
<span class="visually-hidden">파일 삭제</span>
</button>
</li>
</ul>
</div>
</c:otherwise>
</c:choose>
</div>
</td>
</c:if>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.itm eq 'Y'}">
<c:if test = "${not empty itmList}">
<th>분류<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="qesitmNmC" name = "itmInnbArr[]">
<option value="">분류 선택</option>
<c:forEach var="itm" items="${itmList}" varStatus ="status">
<option value="<c:out value="${itm.itmInnb}"/>" qesitm-innb="${itm.qesitmInnb}" answ-Cn="${itm.itmCn}" qesitm-nm="${itm.qesitmNm}"
<%--분류 답변 값 유지--%>
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
<c:if test = "${itm.itmInnb eq itmAnswList.itmInnb }">selected</c:if>
</c:if>
</c:forEach>>
<c:out value ="${itm.itmCn}"/>
</option>
</c:forEach>
</select>
</div>
<%--문항답변필수여부 --%>
<input type="hidden" name="qesitmEssntlAtArr[]" value="Y">
<%--문항명 --%>
<input type="hidden" name="qesitmNmArr[]" id = "qesitmNm" value ="분류"/>
<%--문항고유번호 --%>
<input type="hidden" name="qesitmInnbArr[]" id = "qesitmInnb"
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
value = <c:out value = "${itmAnswList.qesitmInnb}"/>
</c:if>
</c:forEach>/>
<%--답변내용 --%>
<input type="hidden" name="answCnArr[]" id = "answCn"
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
value = <c:out value = "${itmAnswList.answCn}"/>
</c:if>
</c:forEach>/>
<%--답변여부 --%>
<input type="hidden" name="qesitmAtArr[]"
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
<c:choose>
<c:when test = "${empty itmAnswList}">value = "N"</c:when>
<c:otherwise>value = "Y"</c:otherwise>
</c:choose>
</c:if>
</c:forEach>>
</div>
</td>
</c:if>
</c:if>
<c:if test = "${bbsInfo.mainExpsr eq 'Y'}">
<th>메인노출</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="mainExpsrAt" value="Y" <c:if test="${bbscttInfo.mainExpsrAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">노출</span>
</label>
</div>
</div>
</td>
</c:if>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.cmSetupUseAt eq 'Y'}">
<th>댓글 사용 여부</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="cmUseAtYC" name="cmUseAt" value="Y"<c:if test = "${bbscttInfo.cmUseAt eq 'Y'}">checked</c:if>>
<label for="cmUseAtYC">사용</label>
</div>
<div class="custom-radio">
<input type="radio" id="cmUseAtNC" name="cmUseAt" value="N"<c:if test = "${bbscttInfo.cmUseAt eq 'N'}">checked</c:if>>
<label for="cmUseAtNC">사용 안 함</label>
</div>
</div>
</div>
</td>
</c:if>
<th>순서 설정</th>
<td>
<div class="td-inner">
<div class="input-container">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="sortOrdrAt" value="Y" onclick="fn_readOnly_sortOrdr(this);" <c:if test = "${not empty bbscttInfo.sortOrdr}">checked</c:if>>
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<input class="input-text number right xsm" type="text" name="sortOrdr" maxlength="2" value = "<c:out value = '${bbscttInfo.sortOrdr}'/>"
<c:choose>
<c:when test = "${not empty bbscttInfo.sortOrdr}">checked</c:when>
<c:otherwise>disabled="disabled"</c:otherwise>
</c:choose>>
</div>
</div>
</td>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.onoffline eq 'Y'}">
<th>온/오프라인</th>
<td>
<div class="td-inner">
<div class="input-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="onlineAt" value="Y" <c:if test = "${bbscttInfo.onlineAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">온라인</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" name="oflneAt" value="Y" <c:if test = "${bbscttInfo.oflneAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">오프라인</span>
</label>
</div>
</div>
</td>
</c:if>
</tr>
<tr class ="visibleAt">
<c:if test = "${bbsInfo.goodsChoice eq 'Y'}">
<th>상품 정보
<c:choose>
<c:when test = "${not empty goods}">
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_search_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;">
검색
</button>
</c:when>
<c:otherwise>
<button type="button" class="btn xsm primary ml-5"
onclick="fn_open_modal('#modalDiv','#product-search','/mngr/goods/goodsmngr/selectGoodsSrchPopupForm',{'goodsKndCd':'01'}); return false;">
검색
</button>
</c:otherwise>
</c:choose>
</th>
<td colspan="3">
<div class="td-inner">
<div class="product-search-box__product parentGoodsContainer">
<c:if test = "${not empty goods}">
<c:forEach var = "goods" items = "${goods}">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="product-group__item">
<input type="hidden" id="relatedGoodsId" name="relatedGoodsId" value="<c:out value="${goods.goodsInnb}"/>">
<input type="hidden" name="relatedGoodsNm" value="<c:out value="${goods.goodsNm}"/>">
<input type="hidden" name="relatedGoodsImg" value="<c:out value="${cdnurl}${goods.img}"/>">
<input type="hidden" name="relatedGoodsPrice" value="<fmt:parseNumber value="${goods.slepric}"/>">
<input type="hidden" name="goodsSttusNm" value="<c:out value="${goods.goodsSttusNm}"/>">
<input type="hidden" name="expsrNm" value="<c:out value="${goods.expsrNm}"/>">
<button type="button" onclick = "fn_move_goods_dtl_common(<c:out value="${goods.goodsInnb}"/>,'sopmal')">
<img src="${cdnurl}${goods.img}"onerror="this.src='<c:url value="/mngr/images/image_placeholder.png"/>'"width="64" alt="상품이미지">
</button>
<div class="product-group__description">
<p><c:out value="${goods.goodsNm}"/></p>
<p class="product-group__description-price"><fmt:formatNumber value="${goods.slepric}" pattern="#,###"/>원</p>
</div>
<%--게시글 연관 상품--%>
<input type="hidden" name="goodsInnbArr[]" value="${goods.goodsInnb}"/>
</div>
</c:forEach>
</c:if>
</div>
</div>
</td>
</c:if>
</tr>
<c:if test="${not empty qesitmList}">
<tr>
<th>추가 입력 항목</th>
<td colspan="3">
<div class="td-inner table-wrapper mb-40" id="boardFormItmC">
<table class="table">
<colgroup>
<col style="width: 20%;">
<col style="width: 80%;">
</colgroup>
<tbody>
<c:forEach items="${ qesitmList }" var="qesitmList" varStatus="status">
<tr>
<td>
<c:out value="${ qesitmList.qesitmNm }"/><c:if
test="${ qesitmList.qesitmEssntlAt eq 'Y'}"><span class="red-7">*</span></c:if>
</td>
<td>
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt}">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm}">
<input type="hidden" name="qesitmAtArr[]"
class="answRadioAt" value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answRadio"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" name="answCnArr[]"
class="answRadio" disabled>
<input type="hidden" name="itmInnbArr[]"
class="answRadio" disabled>
<c:forEach items="${itmCnList}" var="itmCnList1"
varStatus="status">
<c:if test="${itmCnList1.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="radio" id="answCn${ status.index }"
class="answRadioC"
qesitm-innb='${itmCnList1.qesitmInnb}'
name="itmInnbArr${ qesitmList.qesitmInnb}[]"
value="${ itmCnList1.itmInnb}"
itm-cn="${ itmCnList1.itmCn }"
<c:forEach var="qesitmAnswList1"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList1.itmTyCd eq '01'}">
<c:if test="${qesitmAnswList1.itmInnb eq itmCnList1.itmInnb}">checked</c:if>
</c:if>
</c:forEach>>
<label for="answCn${ status.index }">${ itmCnList1.itmCn }</label>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<div class="select-box">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${qesitmList.qesitmEssntlAt}">
<input type="hidden" name="qesitmNmArr[]"
value="${qesitmList.qesitmNm}">
<input type="hidden" name="qesitmAtArr[]" class="answSelectAt"
value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answSelect"
value="${qesitmList.qesitmInnb}" disabled>
<input type="hidden" name="answCnArr[]" class="answSelect"
disabled>
<select class="md answSelectC" name="itmInnbArr[]">
<option value="">전체</option>
<c:forEach items="${itmCnList}" var="itmCnList2">
<c:if test="${itmCnList2.qesitmInnb eq qesitmList.qesitmInnb}">
<c:set var="selected" value=""/>
<c:forEach var="qesitmAnswList2"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList2.itmInnb eq itmCnList2.itmInnb}">
<c:set var="selected" value="selected"/>
</c:if>
</c:forEach>
<option value="${itmCnList2.itmInnb}"
itm-cn="${itmCnList2.itmCn}"
qesitm-innb="${itmCnList2.qesitmInnb}" ${selected}>
${itmCnList2.itmCn}
</option>
</c:if>
</c:forEach>
</select>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03' }">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answChkAt" value="N">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<label class="b-checkbox checkbox">
<input type="hidden" class="answChk"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }"
disabled>
<input type="hidden" class="answChk"
name="answCnArr[]"
value="${ itmCnList3.itmCn }" disabled>
<input type="checkbox" class="answChkC"
name="itmInnbArr[]"
value="${ itmCnList3.itmInnb }"
itm-cn="${ itmCnList3.itmCn }"
qesitm-innb="${itmCnList3.qesitmInnb}"
<c:forEach var="qesitmAnswList3"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList3.itmInnb eq itmCnList3.itmInnb}">checked</c:if>
</c:forEach>>
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</div>
</c:if>
</c:forEach>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04' }">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt"
value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="text" class="input-text mm answTxtC"
name="answCnArr[]"
title="추가문항답변"
placeholder="${ itmCnList4.itmCn }"
maxlength="666"
itm-cn="${ itmCnList4.itmCn }"
qesitm-innb="${itmCnList4.qesitmInnb}"
itm-innb="${itmCnList4.itmInnb}"
<c:forEach var="qesitmAnswList4"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList4.itmInnb eq itmCnList4.itmInnb}">
value="<c:out value = '${qesitmAnswList4.answCn}'/>"
</c:if>
</c:forEach>>
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
</div>
<br>
</c:if>
</c:forEach>
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</td>
</tr>
</c:if>
<c:if test="${bbsInfo.bbsTyCd ne '10'}">
<tr>
<th><c:out value ="${bbsInfo.questionSj}"/><span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" placeholder="제목을 입력해주세요." name="sj" maxlength="50" value = "${bbscttInfo.sj}">
</div>
</td>
</tr>
</c:if>
<tr>
<th><c:out value ="${bbsInfo.awswCn}"/><span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="에디터 입력" rows="10" id="cnBbsUpdt" ><c:out value="${bbscttInfo.cn}"/></textarea>
</div>
</td>
</tr>
<tr>
<th>스크립트 내용</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="에디터 입력" name="cnScript" rows="10"><c:out value="${bbscttInfo.cnScript}"/></textarea>
</div>
</td>
</tr>
<%--게시판설정(파일첨부사용여부)--%>
<c:if test="${bbsInfo.filAtch eq 'Y'}">
<tr>
<th>파일 첨부</th>
<td colspan="03">
<c:choose>
<c:when test="${bbscttInfo.regusrDvCd ne '02'}">
<div class="dropzone-wrapper">
<div class="dropzone" id="my-dropzone-bbsctt">
</div>
<p class="fyi gray-7 mt-15">사용자 게시글 사진 수정은 파일 첨부를 권장합니다.</p>
</div>
<input type = "hidden" name = "dropzoneAt" value="Y"/> <%--드롭존 존재 여부--%>
<input type = "hidden" name = "filDvCd" value="01"/> <%--파일 구분--%>
</c:when>
<c:otherwise>
<div class="uploadList">
<div class="uploadList__top">
<div>
<button type="button" class="uploadList__removeAll" id="removeAllBtn"
<c:if test="${empty fileInfo}">style="display: none"</c:if>>
전체 삭제
</button>
<button type="button" class="uploadList__uploadFiles" id="multiFilBtn">
파일 첨부
</button>
</div>
<span class="uploadList__allSize" id="allSize">0.00 KB</span>
</div>
<div style="display: none">
<input type="file" id="fileUploadM" name="files" title="파일첨부"
multiple="multiple"
accept="<c:out value='${bbsInfo.filPermFilExtsn}'/>"/>
<label for="fileUploadM"></label>
</div>
<div class="uploadList__body" id="fileUploadMDiv" <c:if test="${empty fileInfo}">style="display: none"</c:if>>
<ul class="uploadList__list" id="fileUploadMUl"><%--ul영역 (li)--%>
<c:if test="${not empty fileInfo}">
<c:forEach var="file" items="${fileInfo}">
<li class="uploadList__item" id="<c:out value="${file.bbscttAtchmnfilInnb}"/>">
<button type = "button" class="uploadList__itemText" onclick="deleteFile(this,'<c:out value="${bbscttVO.sopmalCd}"/>','BDFL',1,fn_execute_delete_file);">
<span class="uploadList__itemName">
<c:out value="${file.orginlFilNm}"/></span>
<span class="uploadList__itemSize">
(<c:out value="${file.filMg}"/>KB)</span>
</button>
<input type="hidden" class="filsSize"
value="<c:out value="${file.filMg}"/>"/>
<button type = "button" class="uploadList__removeBtn"
onclick="deleteFile(this,'<c:out value="${bbscttVO.sopmalCd}"/>','BDFL',1,fn_execute_delete_file);">
<span class="visually-hidden">삭제</span></button>
</li>
</c:forEach>
</c:if>
</ul>
</div>
<input type = "hidden" name = "filDvCd" value="02"/> <%--파일 구분--%>
<input type = "hidden" name = "dropzoneAt" value="N"/> <%--드롭존 존재 여부--%>
<input type = "hidden" name = "filPermFilExtsn" value="<c:out value="${bbsInfo.filPermFilExtsn}"/>"/> <%--드롭존 존재 여부--%>
</div>
</c:otherwise>
</c:choose>
</td>
</tr>
</c:if>
</tbody>
</table>
</div>
</form>
</div>
<div class="modal-footer">
<a href="#" id="btn_close_modal_bbsU" rel="modal:close" class="btn outline"><spring:message code="button.cancel"/></a>
<button class="btn primary" onclick="fn_update_bbsctt('<c:out value="${ bbsInfo.bbsId }"/>','<c:out value="${ bbscttInfo.bbscttInnb }"/>','<c:out value="${dtlPop}"/>');"><spring:message code="button.update"/></button>
</div>
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
</div>
<script>
// Dropzone 파일업로드
if ($("#my-dropzone-bbsctt").length > 0) {
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#my-dropzone-bbsctt", {
url: "/file-upload",
maxFilesize: 20,
autoProcessQueue: false,
addRemoveLinks: true,
dictDefaultMessage: "클릭하거나 파일을 여기로 드래그하세요",
dictRemoveFile: "삭제",
dictCancelUpload: "취소",
dictCancelUploadConfirmation: "업로드를 취소하시겠습니까?",
dictInvalidFileType: "이 파일은 업로드할 수 없습니다.",
dictFileTooBig: "파일이 너무 큽니다. ({{filesize}}MB). 최대 파일 크기: {{maxFilesize}}MB.",
dictMaxFilesExceeded: "파일을 더 이상 추가할 수 없습니다.",
dictResponseError: "서버에서 응답을 받지 못했습니다.",
acceptedFiles: "${acceptFileExtensions}",
init: function () {
let dropzoneInstance = this;
let imageData = '';
// 클릭 시 삭제 버튼 바인딩
dropzoneInstance.on("thumbnail", function (file) {
bindRemoveButton(file);
});
if (${fileInfoGson}) {
imageData = ${fileInfoGson};
// Dropzone에 이미지 추가
$.each(imageData, function (index, image) {
let mockFile = { name: image.orginlFilNm, size: image.filMg };
// Dropzone에 파일 추가
dropzoneInstance.emit("addedfile", mockFile);
// 이미지 경로 설정
const imagePath = `${cdnurl}${image.filCours}${image.sysFilNm}`;
dropzoneInstance.emit("thumbnail", mockFile, imagePath);
// 이미지 로딩 오류 처리
$(mockFile.previewElement).find("img").on("error", function () {
this.src = '/mngr/images/image_placeholder.png'; // 대체 이미지
});
// 사용자 정의 ID 추가
mockFile.customId = image.bbscttAtchmnfilInnb;
// Dropzone의 files 배열에 파일 추가
dropzoneInstance.files.push(mockFile);
// 삭제 버튼 클릭 시 처리
bindRemoveButton(mockFile);
});
}
// 파일 추가 시 처리
dropzoneInstance.on("addedfile", function (file) {
let fileLength = myDropzone.files.length;
let restoreAt = file.customData ? true : false;
if (restoreAt) {
file.customId = file.customData.customId;
} else {
file.customId = "temp" + fileLength;
}
});
// 파일 개수 초과 시 처리
dropzoneInstance.on("maxfilesexceeded", function (file) {
alert(this.options.dictMaxFilesExceeded);
this.removeFile(file);
});
}
});
// 삭제 버튼 바인딩 함수
function bindRemoveButton(file) {
if (file.previewElement) {
$(file.previewElement).find(".dz-remove").off("click").on("click", function () {
let fileId = ""+file.customId+"";
var result = dropzoneDeleteFiles(fileId, '<c:out value="${bbscttVO.sopmalCd}"/>', "BDFL", 1);
if (result === "N") {
// 파일 복원 처리
file.customData = {restored: true, customId: file.customId,name: file.name, size: file.size};
myDropzone.emit("addedfile", file);
// 이미지 src 추출
var imgElement = file.previewElement.querySelector("img");
if (imgElement) {
var imgSrc = imgElement.src;
if(imgSrc == ''){
imgSrc = '/mngr/images/image_placeholder.png';
}
// 썸네일 업데이트
myDropzone.emit("thumbnail", file, imgSrc);
}
// 삭제 버튼 다시 표시
file.previewElement.querySelector(".dz-remove").style.display = "block";
}
});
}
}
}
// name 및 id 속성을 설정하는 부분
var inputElement = $('input[type="file"].dz-hidden-input');
inputElement.attr('name', 'files');
inputElement.attr('id', 'fileUploadDrop');
</script>