907 lines
44 KiB
Plaintext
907 lines
44 KiB
Plaintext
<%@ 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>
|
|
<c:if test="${bbsInfo.bbsTyCd eq '12'}">
|
|
<tr>
|
|
<th>주문번호</th>
|
|
<td colspan="3"><a style="cursor:pointer; text-decoration: underline;" onclick="fn_comm_go_ordr_dtl('<c:out value="${bbscttInfo.ordrInnb}" />');return false;"><c:out value="${bbscttInfo.ordrInnb}"/></a></td>
|
|
</tr>
|
|
</c:if>
|
|
<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> |