fix : 1:1문의 사용자 조회/수정
This commit is contained in:
361
src/main/webapp/WEB-INF/views/sopmal/mpage/act/MyM2mQaR.jsp
Normal file
361
src/main/webapp/WEB-INF/views/sopmal/mpage/act/MyM2mQaR.jsp
Normal file
@@ -0,0 +1,361 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ 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 : MyM2mQaR.jsp
|
||||
Description : 마이페이지 1:1문의
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
//아코디언 클릭 시 폼 제출 방지
|
||||
$(".tr-foldable-trigger").click(function(event) {
|
||||
if($(this).next().hasClass("active")){
|
||||
const bbscttInnb = $(this).attr("bbsctt-innb");
|
||||
const idx = $(this).index();
|
||||
fn_select_fileInfo(bbscttInnb,idx);
|
||||
}
|
||||
event.preventDefault(); // 폼 제출 방지
|
||||
});
|
||||
|
||||
//삭제 모달 버튼
|
||||
$(document).on('click','.deleteBtn',function(){
|
||||
const bbscttInnb = $(this).closest('div').find("[name='bbscttInnb']").val();
|
||||
const goodsInnb = $(this).closest('div').find("[name='goodsInnb']").val();
|
||||
$('#qna-delete').modal();
|
||||
$('#alertDelBtn').attr('bbscttInnb', bbscttInnb);
|
||||
$('#alertDelBtn').attr('goodsInnb', goodsInnb);
|
||||
});
|
||||
//삭제 버튼
|
||||
$(document).on('click','#alertDelBtn',function(){
|
||||
const bbscttInnb = $(this).attr("bbscttInnb");
|
||||
const goodsInnb = $(this).attr("goodsInnb");
|
||||
const bbsId = $("#bbsId").val();
|
||||
const bbsTyCd = $("#bbsTyCd").val();
|
||||
fn_delete_bbsctt(bbscttInnb,bbsId,bbsTyCd,goodsInnb);
|
||||
});
|
||||
//수정 폼 이동 버튼
|
||||
$(document).on('click','.updateBtn',function(){
|
||||
const answAt = $(this).closest('div').find("[name='answAt']").val();
|
||||
const bbscttInnb = $(this).closest('div').find("[name='bbscttInnb']").val();
|
||||
const bbsId = $("#bbsId").val();
|
||||
fn_move_qaUpdt(bbscttInnb,answAt,bbsId);
|
||||
});
|
||||
});
|
||||
//해당 게시물 파일정보 get
|
||||
const fn_select_fileInfo = (bbscttInnb, idx) => {
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "/sopmal/mpage/act/selectFileInfo",
|
||||
data: {"bbscttInnb": bbscttInnb},
|
||||
success: function (data) {
|
||||
const resultData = JSON.parse(data.resBody.result);
|
||||
const fileInfo = resultData.fileInfo;
|
||||
let img = '';
|
||||
fileInfo.forEach(function (file) {
|
||||
img += `<img src="${cdnurl}\${file.filCours}\${file.sysFilNm}\" alt="\${file.orginlFilNm}\"
|
||||
onerror="this.src='/pc/images/image_placeholder.png'; this.style.width='150px'; this.style.height='150px';"/>`;
|
||||
});
|
||||
$(".tr-foldable").eq(idx).find(".file").html(img);
|
||||
}
|
||||
});
|
||||
}
|
||||
//게시글 삭제
|
||||
const fn_delete_bbsctt =(bbscttInnb,bbsId,bbsTyCd,goodsInnb)=>{
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "/sopmal/csc/deleteBbscttDel",
|
||||
data: {
|
||||
"delBbscttInnbArr": bbscttInnb,
|
||||
"bbsId": bbsId,
|
||||
"bbsTyCd": bbsTyCd,
|
||||
"goodsInnbArr": goodsInnb
|
||||
},
|
||||
success: function () {
|
||||
alert('<spring:message code="success.common.delete"/>');
|
||||
fn_close_modal('qna-delete');
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
//페이징 목록 조회
|
||||
const fn_select_List = (pageIndex) => {
|
||||
const form = $('<form>', {
|
||||
'action': '/sopmal/mpage/act/selectM2mQnaInqire',
|
||||
'method': 'post'
|
||||
}).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'bbsId',
|
||||
'value': $("#bbsId").val()
|
||||
})
|
||||
).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'pageIndex',
|
||||
'value': pageIndex
|
||||
})
|
||||
);
|
||||
$('body').append(form);
|
||||
form.submit();
|
||||
}
|
||||
//게시글 수정
|
||||
const fn_move_qaUpdt =(bbscttInnb,answAt,bbsId)=>{
|
||||
/* if(answAt == 'Y'){
|
||||
//1.1 답변이 있는지 확인 있으면 수정 불가 모달 호출
|
||||
$('#qna-edit').modal();
|
||||
}else{*/
|
||||
//1.2답변이 없는 경우 폼을 생성하고 전송
|
||||
const form = $('<form>', {
|
||||
'action': '/sopmal/mpage/act/selectM2mQnaDtlUpdtForm',
|
||||
'method': 'post'
|
||||
}).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'bbscttInnb',
|
||||
'value': bbscttInnb
|
||||
})
|
||||
).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'bbsId',
|
||||
'value': bbsId
|
||||
})
|
||||
).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'pageIndex',
|
||||
'value': $("#pageIndex").val()
|
||||
})
|
||||
);
|
||||
$('body').append(form);
|
||||
form.submit();
|
||||
}
|
||||
|
||||
//주문상세 이동
|
||||
const fn_move_ordr_dtl =(sopmalCd,ordrInnb)=>{
|
||||
const form = $('<form>', {
|
||||
'action': '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrDtlInqire"/>',
|
||||
'method': 'get',
|
||||
'target': '_self'
|
||||
}).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'sopmalCd',
|
||||
'value': sopmalCd
|
||||
})
|
||||
).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'ordrInnb',
|
||||
'value': ordrInnb
|
||||
})
|
||||
);
|
||||
$('body').append(form);
|
||||
form.submit();
|
||||
}
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="sub-rl">
|
||||
<%-- 마이페이지 Left 영역 --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageLeft.jsp"/>
|
||||
<div class="sub-right-content">
|
||||
<%-- 마이페이지 Right 영역 --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageRight.jsp"/>
|
||||
<c:set value="${resultMap.bbsInfo}" var = "bbsInfo"/>
|
||||
<input type = "hidden" value = "<c:out value="${bbsInfo.bbsId}"/>" id = "bbsId">
|
||||
<input type = "hidden" value = "<c:out value="${bbsInfo.bbsTyCd}"/>" id = "bbsTyCd">
|
||||
<input type="hidden" name="slangFlterUseAt" id = "slangFlterUseAt" value = "<c:out value="${bbsInfo.slangFlterUseAt}"/>">
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__title"><c:out value="${bbsInfo.bbsNm}"/></h3>
|
||||
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 10%;">
|
||||
<col style="width: 18%;">
|
||||
<col style="width: auto;">
|
||||
<col style="width: 15%;">
|
||||
<col style="width: 10%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>번호</th>
|
||||
<th>주문번호</th>
|
||||
<th>문의내용</th>
|
||||
<th>작성일</th>
|
||||
<th>답변유무</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test = "${ not empty resultMap.resultList.resultList }">
|
||||
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
|
||||
<tr class="tr-foldable-trigger" bbsctt-innb = "<c:out value = '${resultList.bbscttInnb}'/>">
|
||||
<td><span class="board-number"><c:out value="${resultMap.paginationInfo.totalRecordCount - resultList.rnum+1 }" /></span></td>
|
||||
<td class="text-left">
|
||||
<div class="board-inner-product">
|
||||
<div class="board-inner-product__right">
|
||||
<a class="board-inner-product__name" href="" onclick = "fn_move_ordr_dtl('<c:out value="${bbsInfo.sopmalCd}"/>', '<c:out value="${resultList.ordrInnb}"/>'); return false;">
|
||||
<c:out value="${resultList.ordrInnb}"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-left">
|
||||
<div class="board-inner-product">
|
||||
<div class="board-inner-product__right">
|
||||
<p class="board-inner-product__title">
|
||||
<span class="category"><c:if test = "${not empty resultList.answCn}">[<c:out value="${resultList.answCn}"/>]</c:if></span>
|
||||
<c:out value="${resultList.sj}"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td><span class="board-date"><c:out value="${resultList.sumRegistDt}"/></span></td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test = "${not empty resultList.answBbscttInnb}">
|
||||
<span class="text-complete">답변완료</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="text-waiting">답변대기</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tr-foldable">
|
||||
<td colspan="5">
|
||||
<div class="tr-foldable__content">
|
||||
<div class="tr-foldable__qna">
|
||||
<i class="icon icon_qna-q"></i>
|
||||
<div class="tr-foldable__qna-content">
|
||||
<p class="tr-foldable__qna-title"><c:out value="${resultList.sj}"/></p>
|
||||
<div class = "cn" style="white-space: pre-wrap;"><c:out value="${resultList.cn}" /></div>
|
||||
<br>
|
||||
<div class = "file"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tr-foldable__qna">
|
||||
<i class="icon icon_qna-a"></i>
|
||||
<div class="tr-foldable__qna-content">
|
||||
<p class="tr-foldable__qna-title answSj"><c:out value="${resultList.answSj}"/></p>
|
||||
<c:choose>
|
||||
<c:when test = "${not empty resultList.answBbscttInnb}">
|
||||
<div class = "cn ck-content"><c:out value="${resultList.answBbscttCn}" escapeXml="false"/></div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
답변 등록 중 입니다.
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tr-foldable__btn-container">
|
||||
<input type = "hidden" name = "answAt"
|
||||
value = <c:choose>
|
||||
<c:when test = "${not empty resultList.answBbscttInnb}">
|
||||
'Y'
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
'N'
|
||||
</c:otherwise>
|
||||
</c:choose>>
|
||||
<input type = "hidden" name = "bbscttInnb" value = <c:out value="${resultList.bbscttInnb}"/>>
|
||||
<input type = "hidden" name = "goodsInnb" value = <c:out value="${resultList.goodsInnb}"/>>
|
||||
<button type = "button" class="btn outline deleteBtn"><spring:message code="button.delete"/></button>
|
||||
<c:if test = "${empty resultList.answBbscttInnb}">
|
||||
<button type = "button" class="btn theme outline updateBtn"><spring:message code="button.update"/></button>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<div class="table__no-result">
|
||||
<img src="/pc/images/icon__no-result.png" alt="조회 내역 없음">
|
||||
<p class="table__no-result-text">
|
||||
<spring:message code="common.nodata"/>
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value = '${resultMap.bbsctt.pageIndex}'/>" />
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_List" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
<!-- 질문 삭제 모달 -->
|
||||
<div id="qna-delete" class="modal alert">
|
||||
<div class="alert-content">
|
||||
<p class="alert-content__text--sm">
|
||||
삭제된 게시글은 복구할 수 없습니다.
|
||||
<br>
|
||||
정말로 삭제 하시겠습니까?
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert-btn-container">
|
||||
<a href="#" rel="modal:close" class="alert-btn alert-btn--cancel">취소</a>
|
||||
<button type="button" class="alert-btn alert-btn--confirm" id = "alertDelBtn">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 질문 수정 모달 -->
|
||||
<%--<div id="qna-edit" class="modal alert">
|
||||
<div class="alert-content">
|
||||
<p class="alert-content__text--sm">
|
||||
답변이 등록된 상태입니다.
|
||||
<br>
|
||||
수정하실 수 없습니다.
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert-btn-container">
|
||||
<a href="#" rel="modal:close" class="alert-btn alert-btn--confirm">확인</a>
|
||||
</div>
|
||||
</div>--%>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,927 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ 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 : MyM2mQnaDtlUpdtU.jsp
|
||||
Description : 마이페이지 상품Q&A 수정
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04-11 김혜인 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
fn_collect_evt();
|
||||
});
|
||||
/*********************************************************
|
||||
* 이벤트 함수
|
||||
*********************************************************/
|
||||
const fn_collect_evt = () =>{
|
||||
//내용 set
|
||||
fn_select_cn();
|
||||
|
||||
//분류 change시 hidden value값 set
|
||||
$(document).on('change', '#qesitmNmC', function () {
|
||||
$("#qesitmInnb").val("");
|
||||
$("#qesitmNm").val("");
|
||||
$("#answCn").val("");
|
||||
const option = $('option:selected', this);
|
||||
const qesitmInnb = $(option).attr('qesitm-innb');
|
||||
const answCn = $(option).attr('answ-Cn');
|
||||
const qesitmNm = $(option).attr('qesitm-nm');
|
||||
if ($(this).val() !== "") {
|
||||
$("#qesitmInnb").val(qesitmInnb);
|
||||
$("#answCn").val(answCn);
|
||||
$("#qesitmNm").val(qesitmNm);
|
||||
$("#qesitmAt").val("Y");
|
||||
$(this).closest("td").find("input[name='qesitmAtArr[]']").val("Y");
|
||||
} else {
|
||||
$("#qesitmInnb").val("");
|
||||
$("#answCn").val("");
|
||||
$("#qesitmNm").val("");
|
||||
$("#qesitmAt").val("N");
|
||||
$(this).closest("td").find("input[name='qesitmAtArr[]']").val("N");
|
||||
}
|
||||
});
|
||||
//추가입력 항목 라디오 'click' 이벤트
|
||||
$(document).on('click', '.answRadioC', function () {
|
||||
const radio = $(this);
|
||||
//추가입력 항목 내용 요소 get
|
||||
const answ = radio.closest(".custom-radio-container").find('[name="answCnArr[]"]');
|
||||
//추가입력 항목 내용 요소 get
|
||||
const qesitmInnb = radio.closest(".custom-radio-container").find('[name="qesitmInnbArr[]"]');
|
||||
//라디오 클릭으로 인한 제어 요소 get
|
||||
const contrlTarget = radio.closest(".custom-radio-container").find('.answRadio');
|
||||
//항목 고유번호 내용 요소 get
|
||||
const itmInnb = radio.closest(".custom-radio-container").find('[name="itmInnbArr[]"]');
|
||||
//라디오 클릭 시 disabled 비활성
|
||||
if (radio.is(":checked")) {
|
||||
//답변 내용 초기화
|
||||
answ.val("");
|
||||
const radioVal = $(radio).attr('itm-cn');
|
||||
answ.val(radioVal);
|
||||
//항목 내용 set
|
||||
qesitmInnb.val("");
|
||||
const qesitmInnbVal = $(radio).attr('qesitm-innb');
|
||||
qesitmInnb.val(qesitmInnbVal);
|
||||
//항목고유번호 내용 set
|
||||
itmInnb.val("");
|
||||
const itmInnbVal = $(radio).val();
|
||||
itmInnb.val(itmInnbVal);
|
||||
//라디오 주위 input값 disable false처리
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", false);
|
||||
radio.closest(".custom-radio-container").find(".answRadioAt").val("Y");
|
||||
});
|
||||
} else {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", true);
|
||||
radio.closest(".custom-radio-container").find(".answRadioAt").val("N");
|
||||
});
|
||||
}
|
||||
});
|
||||
//추가입력 항목 셀렉트 'change'이벤트
|
||||
$(document).on('change', '.answSelectC', function () {
|
||||
const select = $(this);
|
||||
const answ = select.closest("td").find('[name="answCnArr[]"]');
|
||||
const qesitmInnb = select.closest("td").find('[name="qesitmInnbArr[]"]');
|
||||
const contrlTarget = select.closest("td").find('.answSelect');
|
||||
const option = $('option:selected', this);
|
||||
if (select.val() != "") {
|
||||
//답변 내용 초기화
|
||||
answ.val("");
|
||||
const selectVal = $(option).attr('itm-cn');
|
||||
answ.val(selectVal);
|
||||
//항목 내용 set
|
||||
qesitmInnb.val("");
|
||||
const qesitmInnbVal = $(option).attr('qesitm-innb');
|
||||
qesitmInnb.val(qesitmInnbVal);
|
||||
//셀렉트 주위 input값 disable false처리
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", false);
|
||||
select.closest("td").find(".answSelectAt").val("Y");
|
||||
});
|
||||
} else {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", true);
|
||||
select.closest("td").find(".answSelectAt").val("N");
|
||||
});
|
||||
}
|
||||
});
|
||||
//추가입력 항목 체크박스 'click'이벤트
|
||||
$(document).on('click', '.answChkC', function () {
|
||||
const check = $(this);
|
||||
const contrlTarget = check.closest("div").find('.answChk');
|
||||
var isChecked = $(this).is(":checked");
|
||||
//클릭한 체크박스 주위 input값 disable false처리
|
||||
contrlTarget.each(function () {
|
||||
if (isChecked) {
|
||||
$(this).prop("disabled", false);
|
||||
} else {
|
||||
$(this).prop("disabled", true);
|
||||
}
|
||||
});
|
||||
// 체크된 체크박스가 하나라도 있는지 확인
|
||||
let anyChecked = $('.answChkC:checked').length > 0;
|
||||
|
||||
contrlTarget.each(function () {
|
||||
if (anyChecked) {
|
||||
check.closest("td").find(".answChkAt").val("Y");
|
||||
check.closest("td").find(".answChkAt").prop("disabled", false);
|
||||
} else {
|
||||
check.closest("td").find(".answChkAt").val("N");
|
||||
check.closest("td").find(".answChkAt").prop("disabled", true);
|
||||
}
|
||||
});
|
||||
});
|
||||
//추가입력 항목 텍스트 'input'이벤트
|
||||
$(document).on('input', '.answTxtC', function () {
|
||||
const txt = $(this);
|
||||
const contrlTarget = txt.closest("div").find('.answTxt');
|
||||
const contrlAt = txt.closest("div").find('.answTxtAt');
|
||||
//클릭한 체크박스 주위 input값 disable false처리
|
||||
if (txt.val() != "") {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", false);
|
||||
contrlAt.val("Y");
|
||||
});
|
||||
} else {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", true);
|
||||
contrlAt.val("N");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//파일 업로드
|
||||
$(document).on("change", "#fileUpload", function () {
|
||||
addFiles(event, 0);
|
||||
});
|
||||
//수정 이벤트
|
||||
$("#updtBtn").on("click",function (){
|
||||
fn_update_bbsctt();
|
||||
});
|
||||
//취소시 목록 이동
|
||||
$("#canclBtn").on("click",function (){
|
||||
const pageIndex = $("#pageIndex").val();
|
||||
fn_select_List(pageIndex);
|
||||
});
|
||||
$("#updtComptBtn").on("click",function(){
|
||||
const updtAt = $("#updtAt").val();
|
||||
if(updtAt === 'Y'){
|
||||
$("#pageIndex").val("1");
|
||||
}
|
||||
const form = $("#bbsUpdtForm");
|
||||
form.attr("action","/sopmal/mpage/act/selectM2mQnaDtlUpdtForm");
|
||||
form.attr("method","post");
|
||||
form.submit();
|
||||
});
|
||||
}
|
||||
/*********************************************************
|
||||
* 게시글 내용 조회
|
||||
*********************************************************/
|
||||
const fn_select_cn = function () {
|
||||
let bbscttInnb = $("#bbscttInnb").val();
|
||||
let bbsId = $("#bbsId").val();
|
||||
let sopmalCd = $("#sopmalCd").val();
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: "<c:url value ='/sopmal/csc/selectBbscttCn'/>",
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify({
|
||||
bbsId: bbsId,
|
||||
bbscttInnb: bbscttInnb,
|
||||
sopmalCd: sopmalCd
|
||||
}),
|
||||
success: function (data) {
|
||||
let cn = JSON.parse(data.resBody.result).cn;
|
||||
$("#cnBbsUpdt").val(cn);
|
||||
}
|
||||
});
|
||||
}
|
||||
/*********************************************************
|
||||
* 게시글 수정
|
||||
*********************************************************/
|
||||
const fn_update_bbsctt = () => {
|
||||
let url = '<c:url value="/sopmal/csc/updateBbscttupdt"/>';
|
||||
let saveForm = $('#bbsUpdtForm');
|
||||
let formData = new FormData();
|
||||
|
||||
//파일 업로드
|
||||
if ($("#contact-dropzone").length > 0) {
|
||||
let myDropzone = Dropzone.forElement("#contact-dropzone");
|
||||
myDropzone.files.forEach(function (file) {
|
||||
formData.append("files", file);
|
||||
});
|
||||
}
|
||||
|
||||
//사용자 등록 시 노출 여부 Y
|
||||
formData.append("expsrAt", "Y");
|
||||
//입력항목 체크박스 disabled처리
|
||||
$('.checkbox input[type="checkbox"]').each(function () {
|
||||
if (!$(this).prop('checked')) {
|
||||
fn_ctrl_disable([".checkbox"],);
|
||||
}
|
||||
});
|
||||
//폼 내 input값 append
|
||||
saveForm.serializeArray().forEach(function (item) {
|
||||
formData.append(item.name, item.value);
|
||||
});
|
||||
|
||||
//사용자 등록 시 노출 여부 Y
|
||||
if (confirm('게시글을 <spring:message code="confirm.common.update"/>')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: url,
|
||||
enctype:"multipart/form-data",
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function (result) {
|
||||
$("#result-alert").modal();
|
||||
}
|
||||
});
|
||||
}else{
|
||||
fn_ctrl_disable("", [".checkbox"]);
|
||||
}
|
||||
}
|
||||
/*********************************************************
|
||||
* 목록 이동
|
||||
*********************************************************/
|
||||
const fn_select_List = (pageIndex) => {
|
||||
if(!pageIndex){
|
||||
pageIndex = 1;
|
||||
}
|
||||
const form = $('<form>', {
|
||||
'action': '/sopmal/mpage/act/selectM2mQnaInqire',
|
||||
'method': 'post'
|
||||
}).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'bbsId',
|
||||
'value': $("#bbsId").val()
|
||||
})
|
||||
).append(
|
||||
$('<input>', {
|
||||
'type': 'hidden',
|
||||
'name': 'pageIndex',
|
||||
'value': pageIndex
|
||||
})
|
||||
);
|
||||
$('body').append(form);
|
||||
form.submit();
|
||||
}
|
||||
function fn_update_hidden_value () {
|
||||
//분류 항목
|
||||
const option = $('option:selected', $("#qesitmNmC"));
|
||||
const qesitmInnb = $(option).attr('qesitm-innb');
|
||||
const answCn = $(option).attr('answ-Cn');
|
||||
const qesitmNm = $(option).attr('qesitm-nm');
|
||||
if($("#qesitmNmC").val()!= ""){
|
||||
$("#qesitmInnb").val(qesitmInnb);
|
||||
$("#answCn").val(answCn);
|
||||
$("#qesitmAt").val("Y");
|
||||
}else{
|
||||
$("#qesitmInnb").val("");
|
||||
$("#answCn").val("");
|
||||
$("#qesitmAt").val("N");
|
||||
}
|
||||
|
||||
// 추가평가항목 라디오
|
||||
const radio = $(".answRadioC:checked");
|
||||
|
||||
radio.each(function(idx) {
|
||||
if (radio.eq(idx).val()) {
|
||||
let radioAnsw = radio.eq(idx).closest("td").find('[name="answCnArr[]"]');
|
||||
let radioQesitmInnb = radio.eq(idx).closest("td").find('[name="qesitmInnbArr[]"]');
|
||||
let radioItmInnb = radio.eq(idx).closest("td").find('[name="itmInnbArr[]"]');
|
||||
let radioQesitmAt = radio.eq(idx).closest("td").find('[name="qesitmAtArr[]"]');
|
||||
let radioContrlTarget = radio.eq(idx).closest("td").find('.answRadio');
|
||||
|
||||
// 답변 내용 set
|
||||
radioAnsw.val(radio.eq(idx).attr('itm-cn'));
|
||||
// 항목 내용 set
|
||||
radioQesitmInnb.val(radio.eq(idx).attr('qesitm-innb'));
|
||||
// 항목고유번호 내용 set
|
||||
radioItmInnb.val(radio.eq(idx).val());
|
||||
// 답변 여부
|
||||
radioQesitmAt.val("Y");
|
||||
|
||||
// 라디오 주위 input값 disable false처리
|
||||
radioContrlTarget.each(function(idx){
|
||||
radioContrlTarget.eq(idx).prop("disabled", false);
|
||||
});
|
||||
|
||||
} else {
|
||||
let radioAnsw = radio.eq(idx).closest("td").find('[name="answCnArr[]"]');
|
||||
let radioQesitmInnb = radio.eq(idx).closest("td").find('[name="qesitmInnbArr[]"]');
|
||||
let radioItmInnb = radio.eq(idx).closest("td").find('[name="itmInnbArr[]"]');
|
||||
let radioQesitmAt = radio.eq(idx).closest("td").find('[name="qesitmAtArr[]"]');
|
||||
let radioContrlTarget = radio.eq(idx).closest("div").find('.answRadio');
|
||||
// 답변 내용 set
|
||||
radioAnsw.val("");
|
||||
// 항목 내용 set
|
||||
radioQesitmInnb.val("");
|
||||
// 항목고유번호 내용 set
|
||||
radioItmInnb.val("");
|
||||
// 답변 여부
|
||||
radioQesitmAt.val("N");
|
||||
// 라디오 주위 input값 disable false처리
|
||||
radioContrlTarget.each(function(idx){
|
||||
radioContrlTarget.eq(idx).prop("disabled", true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//추가입력 항목 셀렉트 'change'이벤트
|
||||
const select =$('select.answSelectC[name="itmInnbArr[]"]');
|
||||
select.each(function(idx) {
|
||||
let selectIndex = select.eq(idx).find('option:selected').index();
|
||||
if (selectIndex > 0) {
|
||||
let selectQesitmAt = select.eq(idx).closest("td").find('[name="qesitmAtArr[]"]');
|
||||
let selectQesitmInnb = select.eq(idx).closest("td").find('[name="qesitmInnbArr[]"]');
|
||||
let selectAnsw = select.eq(idx).closest("td").find('[name="answCnArr[]"]');
|
||||
let selectOption = $('option:selected', select.eq(idx));
|
||||
let selectContrlTarget = select.eq(idx).closest("td").find('.answSelect');
|
||||
// 답변 여부
|
||||
selectQesitmAt.val("Y");
|
||||
// 항목 내용 set
|
||||
selectQesitmInnb.val(selectOption.attr('qesitm-innb'));
|
||||
// 답변 내용 set
|
||||
selectAnsw.val(selectOption.attr('itm-cn'));
|
||||
// 라디오 주위 input값 disable false처리
|
||||
selectContrlTarget.each(function(idx){
|
||||
selectContrlTarget.eq(idx).prop("disabled", false);
|
||||
});
|
||||
} else {
|
||||
let selectQesitmAt = select.eq(idx).closest("td").find('[name="qesitmAtArr[]"]');
|
||||
let selectQesitmInnb = select.eq(idx).closest("td").find('[name="qesitmInnbArr[]"]');
|
||||
let selectAnsw = select.eq(idx).closest("td").find('[name="answCnArr[]"]');
|
||||
let selectContrlTarget = select.eq(idx).closest("td").find('.answSelect');
|
||||
// 답변 여부
|
||||
selectQesitmAt.val("N");
|
||||
// 항목 내용 set
|
||||
selectQesitmInnb.val("");
|
||||
// 답변 내용 set
|
||||
selectAnsw.val("");
|
||||
// 라디오 주위 input값 disable false처리
|
||||
selectContrlTarget.each(function(idx){
|
||||
selectContrlTarget.eq(idx).prop("disabled", true);
|
||||
});
|
||||
}
|
||||
});
|
||||
const check = $(".answChkC");
|
||||
//클릭한 체크박스 주위 input값 disable false처리
|
||||
check.each(function(idx){
|
||||
let checkContrlTarget = check.eq(idx).closest(".checkbox").find('.answChk');
|
||||
let isChecked = check.eq(idx).is(":checked");
|
||||
|
||||
checkContrlTarget.each(function (index) {
|
||||
if (isChecked) {
|
||||
checkContrlTarget.eq(index).prop("disabled", false);
|
||||
} else {
|
||||
checkContrlTarget.eq(index).prop("disabled", true);
|
||||
}
|
||||
});
|
||||
|
||||
// 체크된 체크박스가 하나라도 있는지 확인
|
||||
let anyChecked = check.eq(idx).closest("td").find(".answChkC:checked").length > 0;
|
||||
if (anyChecked) {
|
||||
check.eq(idx).closest("td").find(".answChkAt").val("Y");
|
||||
} else {
|
||||
check.eq(idx).closest("td").find(".answChkAt").val("N");
|
||||
}
|
||||
});
|
||||
|
||||
//추가입력 항목 텍스트 'input'이벤트
|
||||
const txt = $('.answTxtC');
|
||||
txt.each(function (idx) {
|
||||
let contrlTarget = txt.eq(idx).closest("div").find('.answTxt');
|
||||
let contrlAt = txt.eq(idx).closest("div").find('.answTxtAt');
|
||||
//클릭한 체크박스 주위 input값 disable false처리
|
||||
if (txt.val() != "") {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", false);
|
||||
contrlAt.val("Y");
|
||||
});
|
||||
} else {
|
||||
contrlTarget.each(function () {
|
||||
contrlTarget.prop("disabled", true);
|
||||
contrlAt.val("N");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
/*상품qna 버튼 클릭 제어*/
|
||||
function fn_prevent_click(event) {
|
||||
event.preventDefault(); // 체크박스 상태 변경 방지
|
||||
}
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<c:set value="${resultMap.bbscttInfo.bbscttInfo}" var="bbscttInfo"/>
|
||||
<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.wrter}" var="wrter"/>
|
||||
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
|
||||
<c:set value="${resultMap.qesitmList.qesitmList}" var="qesitmList"/>
|
||||
<c:set value="${resultMap.qesitmList.itmCnList}" var="itmCnList"/>
|
||||
<c:set value="${resultMap.itmList}" var="itmList"/>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<form id = "bbsUpdtForm">
|
||||
<input type="hidden" name="dftCnUseAt" value="<c:out value = '${bbsInfo.dftCnUseAt}'/>" id="dftCnUseAt">
|
||||
<input type="hidden" name="dftCn" value="<c:out value = '${bbsInfo.dftCn}'/>" id="dftCn">
|
||||
<input type="hidden" name="slangFlter" value="<c:out value = '${bbsInfo.slangFlter}'/>">
|
||||
<input type="hidden" name="password" value="<c:out value = '${bbscttInfo.password}'/>">
|
||||
<input type="hidden" name="cmUseAt" value="<c:out value = '${bbscttInfo.cmUseAt}'/>">
|
||||
<input type="hidden" name="sortOrdr" value="<c:out value = '${bbscttInfo.sortOrdr}'/>">
|
||||
<input type="hidden" name="bbscttInnb" value="<c:out value = '${bbscttInfo.bbscttInnb}'/>" id="bbscttInnb">
|
||||
<input type="hidden" name="bbsId" value="<c:out value = '${bbscttInfo.bbsId}'/>" id="bbsId">
|
||||
<input type="hidden" name="pageIndex" value="<c:out value = '${bbsctt.pageIndex}'/>" id="pageIndex">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/> <%--허용 확장자--%>
|
||||
<input type="hidden" name="acceptFileExtensions" value="<c:out value = '${acceptFileExtensions}'/>" id="acceptFileExtensions">
|
||||
<input type="hidden" name="filAtch" value="${bbsInfo.filAtch }"/>
|
||||
<input type="hidden" id="updtAt">
|
||||
<input type="hidden" id="sopmalCd" value="<c:out value="${bbsInfo.sopmalCd}"/>" name="sopmalCd"/>
|
||||
<input type="hidden" id="updtAt">
|
||||
|
||||
<%--존재 파일 여부 체크--%>
|
||||
<c:choose>
|
||||
<c:when test = "${not empty fileInfo}"><c:set var="filExtAt" value="Y"/></c:when>
|
||||
<c:otherwise><c:set var="filExtAt" value="N"/></c:otherwise>
|
||||
</c:choose>
|
||||
<input type="hidden" id="filExtAt" name="filExtAt" value="${filExtAt}"/>
|
||||
<input type="hidden" id="extFiles" name="extFiles" value=""/>
|
||||
<input type="hidden" id="filesInfo" name="filesInfo"/>
|
||||
<input type="hidden" id="extFilChangeAt" name="extFilChangeAt" value="N"/>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="sub-rl">
|
||||
<%-- 마이페이지 Left 영역 --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageLeft.jsp"/>
|
||||
<div class="sub-right-content">
|
||||
<%-- 마이페이지 Right 영역 --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/mpage/MypageRight.jsp"/>
|
||||
<div class="sub-right-content__section">
|
||||
<h3 class="sub-right-content__title"><c:out value="${bbsInfo.bbsNm}"/></h3>
|
||||
<div class="table-wrapper">
|
||||
<table class="table write">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 140px;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>작성자</th>
|
||||
<td>
|
||||
<div class="td-inner"><c:out value="${bbscttInfo.regusrNm}"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
<c:if test="${bbsInfo.answRegist eq 'Y'&& bbsInfo.bbscttSndngMthCd ne '03'}"><%--답변사용여부와 게시글 문자사용여부 체크--%>
|
||||
<tr>
|
||||
<th>답변받기</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text" type="text" title="해당 인풋에 대한 설명" name="answMbtlnb"
|
||||
id="answMbtlnb" maxlength="13" value = "<c:out value = '${bbscttInfo.answMbtlnb}'/>"
|
||||
placeholder="휴대폰번호'-'없이 입력">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" value="Y" name="answSmsRecptn" class="chkAt"
|
||||
<c:if test="${bbscttInfo.answSmsRecptn eq 'Y'}">checked</c:if>>
|
||||
<span class="check"></span>
|
||||
<span class="control-label">SMS 알림요청</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
<tr>
|
||||
<th>주문번호</th>
|
||||
<td class="text-left">
|
||||
<div class="board-inner-product">
|
||||
<c:out value="${bbscttInfo.ordrInnb}"/>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>문의유형<span class="required-asterisk">*</span></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="select-box">
|
||||
<%--문항답변필수여부 --%>
|
||||
<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[]" id="qesitmAt"
|
||||
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
|
||||
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
|
||||
<c:choose>
|
||||
<c:when test="${empty itmAnswList.answCn}">value="N"</c:when>
|
||||
<c:otherwise>value="Y"</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
</c:forEach>>
|
||||
<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>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<c:if test="${not empty qesitmList}">
|
||||
<c:forEach var="qesitmList" items="${qesitmList}">
|
||||
<tr>
|
||||
<c:if test="${ qesitmList.itmTyCd eq '01'}">
|
||||
<th><c:out value="${ qesitmList.qesitmNm }"/><c:if
|
||||
test="${qesitmList.qesitmEssntlAt eq 'Y'}"><span
|
||||
class="required-asterisk">*</span></c:if></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="custom-radio-container">
|
||||
<input type="hidden" name="qesitmEssntlAtArr[]"
|
||||
value="${ qesitmList.qesitmEssntlAt}"
|
||||
class="essntlChk">
|
||||
<input type="hidden" name="qesitmNmArr[]"
|
||||
value="${ qesitmList.qesitmNm}">
|
||||
<input type="hidden" name="qesitmAtArr[]"
|
||||
class="answRadioAt qesitmAtChk" 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}">
|
||||
<div class="custom-radio is-medium">
|
||||
<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>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</c:if>
|
||||
<c:if test="${ qesitmList.itmTyCd eq '02'}">
|
||||
<th><c:out value="${ qesitmList.qesitmNm }"/><c:if
|
||||
test="${qesitmList.qesitmEssntlAt eq 'Y'}"><span
|
||||
class="required-asterisk">*</span></c:if></th>
|
||||
<td>
|
||||
<input type="hidden" name="qesitmEssntlAtArr[]"
|
||||
value="${ qesitmList.qesitmEssntlAt }" class="essntlChk">
|
||||
<input type="hidden" name="qesitmNmArr[]"
|
||||
value="${ qesitmList.qesitmNm }">
|
||||
<input type="hidden" name="qesitmAtArr[]"
|
||||
class="answSelectAt qesitmAtChk" value="N">
|
||||
<input type="hidden" name="qesitmInnbArr[]" class="answSelect"
|
||||
value="${ qesitmList.qesitmInnb }" disabled>
|
||||
<input type="hidden" name="answCnArr[]" class="answSelect" disabled>
|
||||
<div class="select-box">
|
||||
<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>
|
||||
</td>
|
||||
</c:if>
|
||||
<c:if test="${ qesitmList.itmTyCd eq '03'}">
|
||||
<th><c:out value="${ qesitmList.qesitmNm }"/><c:if
|
||||
test="${qesitmList.qesitmEssntlAt eq 'Y'}"><span
|
||||
class="required-asterisk">*</span></c:if></th>
|
||||
<td>
|
||||
<input type="hidden" name="qesitmEssntlAtArr[]"
|
||||
value="${ qesitmList.qesitmEssntlAt }" class="essntlChk">
|
||||
<input type="hidden" name="qesitmNmArr[]"
|
||||
value="${ qesitmList.qesitmNm }">
|
||||
<input type="hidden" name="qesitmAtArr[]"
|
||||
class="answChkAt qesitmAtChk"
|
||||
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>
|
||||
</td>
|
||||
</c:if>
|
||||
<c:if test="${ qesitmList.itmTyCd eq '04'}">
|
||||
<th><c:out value="${ qesitmList.qesitmNm }"/><c:if
|
||||
test="${qesitmList.qesitmEssntlAt eq 'Y'}"><span
|
||||
class="required-asterisk">*</span></c:if></th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<div class="input-grow-container">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</c:if>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
<tr>
|
||||
<th>제목</th>
|
||||
<td>
|
||||
<div class="td-inner">
|
||||
<input class="input-text xl" type="text" title="해당 인풋에 대한 설명"
|
||||
name="sj"
|
||||
placeholder="제목을 입력하세요." maxlength="100"
|
||||
value="<c:out value = "${bbscttInfo.sj}"/>">
|
||||
<c:if test="${bbsInfo.secretBbsctt eq 'Y'}">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input type="checkbox" value="Y" name="secretBbscttAt"
|
||||
<c:if test="${bbscttInfo.secretBbscttAt eq 'Y'}">checked</c:if>
|
||||
onclick="fn_prevent_click(event);">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">비밀글</span>
|
||||
</label>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>내용</th>
|
||||
<td>
|
||||
<textarea class="textarea" rows="12" title="내용 입력란" name="cn"
|
||||
id="cnBbsUpdt"><c:out value="${bbscttInfo.cn}"/></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<%--게시판설정(파일첨부사용여부)--%>
|
||||
<c:if test="${bbsInfo.filAtch eq 'Y'}">
|
||||
<tr>
|
||||
<th>이미지 등록</th>
|
||||
<td>
|
||||
<div class="dropzone-wrapper">
|
||||
<div class="dropzone" id="contact-dropzone">
|
||||
</div>
|
||||
</div>
|
||||
<ul class="contact-upload-info">
|
||||
<li>사진 첨부는 최대 10MB 이하이며 3개까지 등록할 수 있습니다.</li>
|
||||
<li>등록 가능 파일은 ${acceptFileExtensions} 파일만 가능합니다.</li>
|
||||
<li>상품과 무관한 내용이거나 음란 불법적인 내용은 통보없이 삭제할 수 있습니다.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</c:if>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="sub-bottom-btn-container">
|
||||
<button type="button" class="btn xl outline" id="canclBtn"><spring:message code="button.close"/></button>
|
||||
<button type="button" class="btn xl theme" id="updtBtn"><spring:message code="button.update"/></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
<!-- 수정/등록 알림 -->
|
||||
<div id="result-alert" class="modal alert">
|
||||
<div class="alert-content">
|
||||
<p class="alert-content__text--sm">
|
||||
게시글을 수정하였습니다.
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert-btn-container">
|
||||
<a href="#" rel="modal:close" class="alert-btn alert-btn--confirm" id = "updtComptBtn">확인</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
// Dropzone 파일업로드
|
||||
if ($("#contact-dropzone").length > 0) {
|
||||
const maxFiles = 3;
|
||||
Dropzone.autoDiscover = false;
|
||||
var myDropzone = new Dropzone("#contact-dropzone", {
|
||||
url: "/file-upload",
|
||||
maxFilesize: 10,
|
||||
maxFiles: maxFiles,
|
||||
acceptedFiles: "${acceptFileExtensions}",
|
||||
autoProcessQueue: false,
|
||||
addRemoveLinks: true,
|
||||
dictDefaultMessage: "",
|
||||
dictRemoveFile: "삭제",
|
||||
dictCancelUpload: "취소",
|
||||
dictCancelUploadConfirmation: "업로드를 취소하시겠습니까?",
|
||||
dictInvalidFileType: "이 파일은 업로드할 수 없습니다.",
|
||||
dictFileTooBig: "파일이 너무 큽니다. ({{filesize}}MB). 최대 파일 크기: {{maxFilesize}}MB.",
|
||||
dictMaxFilesExceeded: "파일을 더 이상 추가할 수 없습니다.",
|
||||
dictResponseError: "서버에서 응답을 받지 못했습니다.",
|
||||
init: function () {
|
||||
let dropzoneInstance = this;
|
||||
let imageData = ${fileInfoGson};
|
||||
// 각 이미지를 Dropzone에 추가
|
||||
$.each(imageData, function (index, image) {
|
||||
// Dropzone 파일 객체 생성
|
||||
let mockFile = {name: image.orginlFilNm, size: image.filMg};
|
||||
|
||||
dropzoneInstance.emit("addedfile", mockFile);
|
||||
const cdnurl = '<c:out value="${cdnurl}"/>';
|
||||
const imagePath =cdnurl+image.filCours + image.sysFilNm;
|
||||
dropzoneInstance.emit("thumbnail", mockFile, imagePath);
|
||||
|
||||
// 이미지 오류 처리
|
||||
$(mockFile.previewElement).find("img").on("error", function () {
|
||||
this.src = '/pc/images/image_placeholder.png'; // 대체 이미지 경로로 설정
|
||||
});
|
||||
|
||||
// Dropzone에 파일 추가
|
||||
mockFile.customId = image.bbscttAtchmnfilInnb;
|
||||
dropzoneInstance.files.push(mockFile);
|
||||
});
|
||||
|
||||
// 파일이 삭제될 때마다 호출되는 이벤트 핸들러
|
||||
this.on("removedfile", function (file) {
|
||||
const customId = file.customId;
|
||||
const result = dropzoneDeleteFiles(customId, '<c:out value="${bbscttVO.sopmalCd}"/>', "BDFL", 1);
|
||||
if (result === "N") {//파일 삭제 안할 시 복원
|
||||
file.customData = {restored: true, customId: file.customId}; //삭제 취소에 의한 구분자 부여
|
||||
myDropzone.emit("addedfile", file); // 파일을 다시 추가하여 삭제 취소
|
||||
myDropzone.emit("thumbnail", file, file.dataURL); // 파일의 썸네일을 복원
|
||||
}
|
||||
if (myDropzone.files.length < maxFiles) {
|
||||
$(".dz-message").show();
|
||||
}
|
||||
});
|
||||
|
||||
//파일 추가
|
||||
this.on("addedfile", function (file) {
|
||||
let restoreAt = '';
|
||||
if (file.customData) { //파일 삭제 복구시
|
||||
restoreAt = true;
|
||||
} else {//새파일 추가시
|
||||
restoreAt = false;
|
||||
}
|
||||
if (restoreAt) {// 파일 삭제 복구시 해당 id 재부여
|
||||
file.customId = file.customData.customId;
|
||||
} else {//새파일 추가시 임시 id 부여
|
||||
let fileLength = myDropzone.files.length;
|
||||
file.customId = "temp" + fileLength;
|
||||
if (fileLength > maxFiles) {
|
||||
const dictMaxFilesExceeded = myDropzone.options.dictMaxFilesExceeded;
|
||||
alert(dictMaxFilesExceeded);
|
||||
this.removeFile(file);
|
||||
$(file.previewElement).find(".dz-remove").attr("disabled", true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// maxFiles 제한 관련 이벤트 핸들러
|
||||
this.on("maxfilesexceeded", function (file) {
|
||||
const dictMaxFilesExceeded = myDropzone.options.dictMaxFilesExceeded;
|
||||
alert(dictMaxFilesExceeded);
|
||||
this.removeFile(file);
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
var inputElement = $('input[type="file"].dz-hidden-input');
|
||||
|
||||
// name 부여
|
||||
inputElement.attr('name', 'file');
|
||||
|
||||
// id 부여
|
||||
inputElement.attr('id', 'fileUpload');
|
||||
|
||||
if (myDropzone.files.length < maxFiles) {
|
||||
$(".dz-message").show();
|
||||
} else {
|
||||
$(".dz-message").hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user