초기소스

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,677 @@
<%@ 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 : NoticeListR.jsp
Description :모바일 샘플.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 최남식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function () {
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';
fn_set_header_title(title);
fn_collect_event();
//1.등록 버튼을 클릭한다
$("#regBtn").on("click", function () {
$("#closeModalTarget").val("confirm_reg_alert");
openConfirmModal(function (onSuccess) {
fn_regist_bbsctt(onSuccess);//등록함수
}, 'confirm_reg_alert'
, '#regCfrmBtn'
, 'success_reg_alert'
, '#regSuccessBtn'
, fn_move_list);
});
});
/*************************************************************
이벤트 함수
*************************************************************/
const fn_collect_event = () => {
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
/*휴대전화 포매팅 함수*/
fn_set_event("#answMbtlnb","input",fn_fmt_telno);
//내용 텍스트 <br>태그 엔터값으로 replace
const textarea = $("textarea[name=cn]");
let cn = textarea.attr("placeholder");
cn = fn_remove_tag(cn);
textarea.attr("placeholder", cn);
//분류 change시 hidden value값 set
$('#qesitmNmC').on('change', function () {
$("#qesitmInnb").val("");
$("#qesitmNm").val("");
$("#answCn").val("");
const option = $('option:selected', this);
console.log(option);
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");
} else {
$("#qesitmInnb").val("");
$("#answCn").val("");
$("#qesitmNm").val("");
$("#qesitmAt").val("N");
}
if(option.val() == '1022901') {
$('textarea[name="cn"]').val('회사명 or 판매자명 : \n웹사이트 주소(인스타그램,카페,홈페이지 등) : \n공동구매 희망 제품 : \n담당자 연락처 :');
} else {
$('textarea[name="cn"]').val('');
}
});
//추가입력 항목 라디오 'click' 이벤트
$('.answRadioC').on('click', function () {
const radio = $(this);
//추가입력 항목 내용 요소 get
const answ = radio.closest("div").find('[name="answCnArr[]"]');
//추가입력 항목 내용 요소 get
const qesitmInnb = radio.closest("div").find('[name="qesitmInnbArr[]"]');
//라디오 클릭으로 인한 제어 요소 get
const contrlTarget = radio.closest("div").find('.answRadio');
//항목 고유번호 내용 요소 get
const itmInnb = radio.closest("div").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("div").find(".answRadioAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
radio.closest("div").find(".answRadioAt").val("N");
});
}
});
//추가입력 항목 셀렉트 'change'이벤트
$(document).on('change', '.answSelectC', function () {
const select = $(this);
const answ = select.closest("div").find('[name="answCnArr[]"]');
const qesitmInnb = select.closest("div").find('[name="qesitmInnbArr[]"]');
const contrlTarget = select.closest("div").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("div").find(".answSelectAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
select.closest("div").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");
} else {
check.closest("td").find(".answChkAt").val("N");
}
});
});
//추가입력 항목 텍스트 '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);
});
/*sms알림요청 체크 시에만 휴대전화 입력폼 활성화*/
$("#answSmsRecptn").on('click', function() {
const target = $(this).closest(".userForm__inputBox__item").find("#answMbtlnb");
if(this.checked) {
target.prop("disabled", false);
} else {
target.prop("disabled", true);
}
});
}
/*textarea내 태그 제거 함수*/
const fn_remove_tag = (cn) => {
cn = cn.replaceAll(/<br>/ig, '\n');
cn = cn.replaceAll(/<\/br>/ig, '\n');
cn = cn.replaceAll(/<br \/>/ig, '\n');
//내용 내 태그 없애기
cn = cn.replace(/<\/?[^>]+(>|$)/g, "");
cn = decodeHTMLEntities(cn);
return cn;
}
// HTML 엔티티 디코딩 함수
const decodeHTMLEntities = (str) => {
const txt = document.createElement('textarea');
txt.innerHTML = str;
return txt.value;
}
//목록 조회에서 취소 누를 시 해당 게시판 목록으로 이동
const fn_move_list = () => {
const form = document.createElement("form");
form.id = "listForm";
form.action = "/sopmal/csc/selectSubPageListForm";
form.method = "POST";
fn_create_input("bbsId", $("#bbsId").val(), form);
document.body.appendChild(form);
form.submit();
}
//input 생성 함수
const fn_create_input = (name, value, tgtForm) => {
const input = document.createElement('input');
input.setAttribute("type", "hidden");
input.setAttribute("name", name);
input.setAttribute("value", value);
tgtForm.appendChild(input);
}
/*********************************************************
* 게시글 등록
*********************************************************/
const fn_regist_bbsctt = function (onsuccess) {
let url = '<c:url value="/sopmal/csc/insertBbscttRegist"/>';
let saveForm = $('#bbsRegForm');
let formData = new FormData();
//파일 업로드
if ($("#image-dropzone").length > 0) {
let myDropzone = Dropzone.forElement("#image-dropzone");
myDropzone.files.forEach(function (file) {
formData.append("files", file);
});
}
$('.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
formData.append("expsrAt", "Y");
disableButton("#regCfrmBtn");
$.ajax({
type: 'post',
url: url,
enctype: "multipart/form-data",
data: formData,
processData: false,
contentType: false,
success: function (result) {
onsuccess();
}
});
enableButton("#regCfrmBtn");
fn_ctrl_disable("", [".checkbox"]);
}
const fn_prevent_click = (event) => {
event.preventDefault(); // 체크박스 상태 변경 방지
}
</script>
<body>
<c:set value = "${resultMap.regusrInfo}" var = "regusrInfo"/>
<c:set value = "${resultMap.bbscttVO}" var = "bbscttVO"/>
<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"/>
<!-- 메인 컨텐츠 영역 -->
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<div class="myQnaEdit">
<div class="sub-box">
<form id="bbsRegForm">
<%--리스트에서 등록으로 왔는지 단순 등록인지 체크--%>
<input type = "hidden" id = "listAt" value = "<c:out value = '${bbscttVO.listAt}'/>" name = "listAt"/>
<input type = "hidden" id = "bbsId" value = "<c:out value = '${bbsInfo.bbsId}'/>" name = "bbsId"/>
<input type = "hidden" id = "bbsInfo" value = "<c:out value = '${bbsInfo.bbsInfo}'/>" name = "bbsInfo"/>
<input type = "hidden" id = "bbscttSndngMthCd" value = "<c:out value = '${bbsInfo.bbscttSndngMthCd}'/>" name = "bbscttSndngMthCd"/>
<input type = "hidden" id = "regusrDvCd" value = "<c:out value = '${bbscttVO.regusrDvCd}'/>" name = "regusrDvCd"/>
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">이름<span
class="required-asterisk">*</span>
</div>
<c:choose>
<c:when test="${regusrInfo.regusrDvCd eq '99'}">
<input type="text" class="input-text full" name="regusrNm"
placeholder="이름" title="이름">
</c:when>
<c:otherwise>
<div class="td-inner"><c:out value='${regusrInfo.regusrNm}'/></div>
<input type="hidden" name="regusrNm" value="tempNm">
</c:otherwise>
</c:choose>
</div>
<c:if test="${bbsInfo.answRegist eq 'Y' && bbsInfo.bbscttSndngMthCd ne '03'}"><%--답변사용여부와 게시글 문자사용여부 체크--%>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">답변받기</div>
<c:if test="${empty regusrInfo.answMbtlnb}">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명"
placeholder="'-'없이 입력" id="answMbtlnb" name="answMbtlnb"
maxlength="13">
</c:if>
<div class="b-checkbox-container">
<label class="b-checkbox is-medium checkbox">
<input class="termCheck" type="checkbox" name="answSmsRecptn"
value="Y" id="answSmsRecptn" checked>
<span class="check"></span>
<span class="control-label">SMS 알림요청</span>
</label>
</div>
</div>
</c:if>
<c:if test="${not empty itmList}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">문의 유형<span
class="required-asterisk">*</span></div>
<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"/>
<%--답변내용 --%>
<input type="hidden" name="answCnArr[]" id="answCn"/>
<%--답변여부 --%>
<input type="hidden" name="qesitmAtArr[]" id="qesitmAt" value="N">
<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:out value="${itm.itmCn}"/>
</option>
</c:forEach>
</select>
</div>
</div>
</c:if>
<c:if test="${not empty qesitmList}">
<div class="reviewRadio">
<c:forEach var="qesitmList" items="${qesitmList}">
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<%--라디오 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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"
name="itmInnbArr<c:out value="${ qesitmList.qesitmInnb }"/>[]"
id="answCn<c:out value="${ status.index }"/>"
class="answRadioC"
value="<c:out value="${ itmCnList1.itmInnb}"/>"
qesitm-innb='<c:out value="${itmCnList1.qesitmInnb}"/>'
itm-cn="<c:out value="${ itmCnList1.itmCn }"/>">
<label for="answCn<c:out value="${ status.index }"/>">
<c:out value="${ itmCnList1.itmCn }"/>
</label>
</div>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<%--셀렉트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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}">
<option value="${ itmCnList2.itmInnb }"
itm-cn="${ itmCnList2.itmCn}"
qesitm-innb='${itmCnList2.qesitmInnb}'>${ itmCnList2.itmCn }</option>
</c:if>
</c:forEach>
</select>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03'}">
<%--체크박스 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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">
<div class="b-checkbox-container">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<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 }">
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04'}">
<%--텍스트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<div class="reviewRadio__inputRow">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }"
class="essntlChk">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt qesitmAtChk" value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
<input class="input-text full answTxtC" type="text"
name="answCnArr[]" title="추가문항답변"
placeholder="${ itmCnList4.itmCn }"
maxlength="666">
</c:if>
</c:forEach>
</div>
</div>
</c:if>
</c:forEach>
</div>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">제목<span
class="required-asterisk">*</span></div>
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" name="sj"
maxlength='100'
placeholder="제목을 입력하세요." value="">
<c:if test="${bbsInfo.secretBbsctt eq 'Y'}">
<div class="b-checkbox-container">
<label class="b-checkbox is-medium checkbox">
<input type="checkbox" value="Y" name="secretBbscttAt" class="secretBbsctt" checked
<c:if test = "${bbsInfo.bbsTyCd eq '05'}">onclick ="fn_prevent_click(event)"</c:if>>
<span class="check"></span>
<span class="control-label">비밀글</span>
</label>
</div>
</c:if>
</div>
<c:if test="${regusrInfo.regusrDvCd eq '99'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">비밀번호<span class="required-asterisk">*</span></div>
<input class="input-text full" type="password" title="비밀번호 입력란"
name="password" maxlength='20' placeholder="비밀번호를 입력하세요."/>
</div>
</c:if><%--추가 문항 영역--%>
<c:if test="${not empty qesitmList}">
<c:forEach var="qesitmList" items="${qesitmList}">
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle"><c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}"><span class="required-asterisk">*</span></c:if>
</div>
</div>
</c:if>
</c:forEach>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">내용</div>
<textarea class="textarea" rows="9" name="cn" placeholder="<c:out value = "${bbsInfo.dftCn}"/>"></textarea>
</div>
<%--게시판설정(파일첨부사용여부)--%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<c:if test="${bbsInfo.filAtch eq 'Y'}">
<div class="fileUplaod">
<div class="fileUplaod__title">이미지 등록(3장)</div>
<div class="dropzone-wrapper">
<div class="dropzone" id="image-dropzone"></div>
</div>
<ul class="infoList">
<li>사진첨부는 최대 10MB 이하이며 3개까지 등록할 수 있습니다.</li>
<li>등록 가능 파일은 ${acceptFileExtensions} 파일만 가능합니다.</li>
<li>상품과 무관한 내용이거나 음란 불법적인 내용은 통보없이 삭제할 수 있습니다.</li>
</ul>
</div>
<input type = "hidden" name = "acceptFileExtensions" id = "acceptFileExtensions" value = "${acceptFileExtensions}"/>
<input type = "hidden" value = "<c:out value = '${bbsInfo.filAtch}'/>" name ="filAtch">
</c:if>
<div class="bottomBtnControls">
<button type="button" class="btn xl theme" id = "regBtn"><spring:message code="button.insert"/>하기</button>
<button type="button" style="display:none;" data-micromodal-trigger="successRegModal" id = "successBtn"></button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</main>
</div>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</body>
<%--등록 성공 모달--%>
<div class="microModal microAlert" id="successRegModal" aria-hidden="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
<spring:message code="success.common.insert"/>
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn microModal__btn-primary" id = "alertBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
// Dropzone 파일업로드
if ($("#image-dropzone").length > 0) {
const maxFiles = 3;
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#image-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: "서버에서 응답을 받지 못했습니다.",
});
var inputElement = $('input[type="file"].dz-hidden-input');
// name 부여
inputElement.attr('name', 'file');
// id 부여
inputElement.attr('id', 'fileUpload');
// 파일 추가 이벤트
myDropzone.on("addedfile", function(file) {
if (myDropzone.files.length >= maxFiles) {
$(".dz-message").hide();
}
});
myDropzone.on("removedfile", function(file) {
if (myDropzone.files.length < maxFiles) {
$(".dz-message").show();
}
});
myDropzone.on("maxfilesexceeded", function(file) {
const dictMaxFilesExceeded = myDropzone.options.dictMaxFilesExceeded;
alert(dictMaxFilesExceeded);
this.removeFile(file);
$(file.previewElement).find(".dz-remove").attr("disabled", true);
});
}
</script>
</html>

View File

@@ -0,0 +1,620 @@
<%@ 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 : BbscttRegistPopupC.jsp
Description : 게시글 등록 팝업 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-05-09 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<script>
$(document).ready(function () {
/*파일 temp 배열 초기화*/
filesTempArr = [];
//내용 텍스트 <br>태그 엔터값으로 replace
const textarea = $("textarea[name=cn]");
let cn = textarea.attr("placeholder");
if (cn) {
cn = fn_remove_tag(cn);
textarea.attr("placeholder", cn);
}
fn_set_niceSelect_datePicker("#bbsRegForm");
/*휴대전화 포매팅*/
fn_set_event("#answMbtlnb", "keyup", fn_fmt_telno);
//분류 change시 hidden value값 set
$('#qesitmNmC').on('change', 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");
} else {
$("#qesitmInnb").val("");
$("#answCn").val("");
$("#qesitmNm").val("");
$("#qesitmAt").val("N");
}
});
//추가입력 항목 라디오 'click' 이벤트
$('.answRadioC').on('click', 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'이벤트
$('.answSelectC').on('change', function () {
const select = $(this);
const answ = select.closest("reviewRadio__item").find('[name="answCnArr[]"]');
const qesitmInnb = select.closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
const contrlTarget = select.closest("reviewRadio__item").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("reviewRadio__item").find(".answSelectAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
select.closest("reviewRadio__item").find(".answSelectAt").val("N");
});
}
});
//추가입력 항목 체크박스 'click'이벤트
$('.answChkC').on('click', 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("reviewRadio__item").find(".answChkAt").val("Y");
} else {
check.closest("reviewRadio__item").find(".answChkAt").val("N");
}
});
});
//추가입력 항목 텍스트 'input'이벤트
$('.answTxtC').on('input', function () {
const txt = $(this);
const contrlTarget = txt.closest(".reviewRadio__inputRow").find('.answTxt');
const contrlAt = txt.closest(".reviewRadio__inputRow").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");
});
}
});
//파일 업로드
$("#fileUpload").on("change", function () {
addFiles(event, 0);
});
//등록 버튼 이벤트
$("#regBtn").on("click", function () {
$("#closeModalTarget").val("confirm_reg_alert");
if($("#reqDv").val() === 'goodsDtl') {//상품 상세에서 등록 시
openConfirmModal(function (onSuccess) {
fn_regist_bbsctt(onSuccess);//등록함수
}, 'confirm_reg_alert'
, '#regCfrmBtn'
, 'success_reg_alert'
, '#regSuccessBtn'
, fn_select_qna, '1');
}else{
openConfirmModal(function (onSuccess) {
fn_regist_bbsctt(onSuccess);//등록함수
}, 'confirm_reg_alert'
, '#regCfrmBtn'
, 'success_reg_alert'
, '#regSuccessBtn');
}
});
});
/*********************************************************
* 게시글 등록
*********************************************************/
if (typeof fn_regist_bbsctt === 'undefined') {
function fn_regist_bbsctt(onsuccss) {
let url = '<c:url value="/sopmal/csc/insertBbscttRegist"/>';
let saveForm = $('#bbsRegForm');
let formData = new FormData();
//파일 업로드
if ($("#image-dropzone").length > 0) {
let myDropzone = Dropzone.forElement("#image-dropzone");
myDropzone.files.forEach(function (file) {
formData.append("files", file);
});
}
//여부 N처리
$('.chkAt').each(function () {
if (!$(this).prop('checked')) {
$(this).val("N");
}
});
//폼 내 input값 append
saveForm.serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
//사용자 등록 시 노출 여부 Y
formData.append("expsrAt", "Y");
disableButton("#regCfrmBtn");
$.ajax({
type: 'post',
url: url,
enctype: "multipart/form-data",
data: formData,
processData: false,
contentType: false,
success: function (result) {
closeModal("authPop");
onsuccss();
}
});
enableButton("#regCfrmBtn");
fn_ctrl_disable("", [".checkbox"]);
}
}
/*상품qna 버튼 클릭 제어*/
if (typeof fn_prevent_click === 'undefined') {
function fn_prevent_click(event){
event.preventDefault(); // 체크박스 상태 변경 방지
}
}
</script>
<body>
<c:set value = "${resultMap.regusrInfo}" var = "regusrInfo"/>
<c:set value = "${resultMap.bbscttVO}" var = "bbscttVO"/>
<c:set value = "${resultMap.bbsInfo}" var = "bbsInfo"/>
<c:set value = "${resultMap.qnaGoodsInfo}" var = "qnaGoodsInfo"/>
<c:set value = "${resultMap.qesitmList.qesitmList}" var = "qesitmList"/>
<c:set value = "${resultMap.qesitmList.itmCnList}" var = "itmCnList"/>
<c:set value = "${resultMap.itmList}" var = "itmList"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/><%--허용파일확장자--%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/><%--이미지경로--%>
<!--권한 조회 후 jsp 분기-->
<div class="microModal microFullScreen" id="authPop" aria-hidden="true" style="position: relative; z-index: 1000;">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
<c:out value="${bbsInfo.bbsNm}"/>
</h2>
<button class="microModal__close" onclick="closeModal('authPop');"></button>
</div>
<div class="microModal__content">
<div class="microModal__inner">
<form id="bbsRegForm">
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">이름<span class="required-asterisk">*</span></div>
<c:choose>
<c:when test = "${regusrInfo.regusrDvCd eq '99'}">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" name="regusrNm" title="작성자명">
</c:when>
<c:otherwise>
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" name="regusrNm" title="작성자명"
value="<c:out value='${regusrInfo.regusrNm}'/>" readonly>
</c:otherwise>
</c:choose>
</div>
<c:if test="${bbsInfo.answRegist eq 'Y'&& bbsInfo.bbscttSndngMthCd ne '03'}"><%--답변사용여부와 게시글 문자사용여부 체크--%>
<div class="userForm__inputBox__item">
<c:if test="${empty regusrInfo.answMbtlnb}">
<div class="userForm__inputBox__itemTitle">휴대전화
<span class="required-asterisk">*</span>
</div>
<input class="input-text full" type="text" id="answMbtlnb" name="answMbtlnb"
placeholder="핸드폰번호'-'없이" title="답변핸드폰번호" maxlength="13">
</c:if>
<div class="b-checkbox-container">
<label class="b-checkbox is-medium checkbox">
<input class="termCheck" type="checkbox" name="answSmsRecptn" value="Y" id="answSmsRecptn" checked>
<span class="check"></span>
<span class="control-label">SMS 알림요청</span>
</label>
</div>
</div>
</c:if>
<c:if test="${not empty itmList}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">문의 유형
</div>
<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"/>
<%--답변내용 --%>
<input type="hidden" name="answCnArr[]" id="answCn"/>
<%--답변여부 --%>
<input type="hidden" name="qesitmAtArr[]" id="qesitmAt" value="N">
<select class="lg" id="qesitmNmC" name="itmInnbArr[]">
<option value="" disabled="" selected="">문의 유형을 선택해 주세요.</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:out value="${itm.itmCn}"/>
</option>
</c:forEach>
</select>
</div>
</div>
</c:if>
</div>
<c:if test="${not empty qesitmList}">
<div class="reviewRadio">
<c:forEach var="qesitmList" items="${qesitmList}">
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<%--라디오 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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"
name="itmInnbArr<c:out value="${ qesitmList.qesitmInnb }"/>[]"
id="answCn<c:out value="${ status.index }"/>"
class="answRadioC"
value="<c:out value="${ itmCnList1.itmInnb}"/>"
qesitm-innb='<c:out value="${itmCnList1.qesitmInnb}"/>'
itm-cn="<c:out value="${ itmCnList1.itmCn }"/>">
<label for="answCn<c:out value="${ status.index }"/>">
<c:out value="${ itmCnList1.itmCn }"/>
</label>
</div>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<%--셀렉트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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}">
<option value="${ itmCnList2.itmInnb }"
itm-cn="${ itmCnList2.itmCn}"
qesitm-innb='${itmCnList2.qesitmInnb}'>${ itmCnList2.itmCn }</option>
</c:if>
</c:forEach>
</select>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03'}">
<%--체크박스 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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">
<div class="b-checkbox-container">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<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 }">
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04'}">
<%--텍스트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<div class="reviewRadio__inputRow">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }"
class="essntlChk">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt qesitmAtChk" value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
<input class="input-text full answTxtC" type="text"
name="answCnArr[]" title="추가문항답변"
placeholder="${ itmCnList4.itmCn }"
maxlength="666">
</c:if>
</c:forEach>
</div>
</div>
</c:if>
</c:forEach>
</div>
</c:if>
<div class="userForm__inputBox">
<c:if test ="${bbsInfo.bbsTyCd eq '05'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">문의상품</div>
<img src = "<c:out value = '${cdnurl}${qnaGoodsInfo.img}'/>" alt="qnaGoods">
<br>
<span><c:out value = '${qnaGoodsInfo.goodsNm}'/></span>
<input type = "hidden" name = "goodsInnbArr[]" value = "${qnaGoodsInfo.goodsInnb}"/>
</div>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">제목</div>
<input class="input-text full" type="text" title="제목 입력란" name="sj"
placeholder="제목을 입력하세요." maxlength="100">
<%--게시판설정(비밀글사용여부)--%>
<c:if test="${bbsInfo.secretBbsctt eq 'Y'}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="Y" name="secretBbscttAt" class="chkAt"
checked <c:if test = "${bbsInfo.bbsTyCd eq '05'}"> onclick ="fn_prevent_click(event)"</c:if>>
<span class="check"></span>
<span class="control-label">비밀글</span>
</label>
</div>
</c:if>
</div>
<c:if test="${regusrInfo.regusrDvCd eq '99'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">비밀번호<span class="required-asterisk">*</span></div>
<input class="input-text full" type="password"
title="비밀번호 입력란"
name="password" maxlength='20'
placeholder="비밀번호를 입력하세요." value="">
</div>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">내용
</div>
<textarea class="textarea" rows="12" title="내용 입력란" name = "cn"
placeholder="<c:out value = "${bbsInfo.dftCn}"/>"></textarea>
</div>
<%--게시판설정(파일첨부사용여부)--%>
<input type="hidden" value="<c:out value = '${bbsInfo.filAtch}'/>" name="filAtch">
<c:if test="${bbsInfo.filAtch eq 'Y'}">
<div class="fileUplaod">
<div class="fileUplaod__title">이미지 등록(3장)</div>
<div class="dropzone-wrapper">
<div class="dropzone" id="image-dropzone">
</div>
</div>
<ul class="infoList">
<li>사진첨부는 최대 10MB 이하이며 3개까지 등록할 수 있습니다.</li>
<li>등록 가능 파일은 <c:out value="${acceptFileExtensions}"/> 파일만 가능합니다.</li>
<li>상품과 무관한 내용이거나 음란 불법적인 내용은 통보없이 삭제할 수
있습니다.
</li>
</ul>
</div>
</c:if>
</div>
</div>
<input type = "hidden" id = "listAt" value = "<c:out value = '${bbscttVO.listAt}'/>" name = "listAt"/>
<input type = "hidden" id = "sopmalCd" value = "<c:out value = '${bbscttVO.sopmalCd}'/>" name = "sopmalCd"/>
<input type = "hidden" id = "bbsId" value = "<c:out value = '${bbsInfo.bbsId}'/>" name = "bbsId"/>
<input type = "hidden" id = "bbsNm" value = "<c:out value = '${bbsInfo.bbsNm}'/>" name = "bbsNm"/>
<input type = "hidden" id = "regusrDvCd" value = "<c:out value = '${regusrInfo.regusrDvCd}'/>" name = "regusrDvCd"/>
<input type = "hidden" id = "bbscttSndngMthCd" value = "<c:out value = '${bbsInfo.bbscttSndngMthCd}'/>" name = "bbscttSndngMthCd"/>
<input type = "hidden" id = "reqDv" value = "<c:out value = '${bbscttVO.reqDv}'/>"/>
<input type="hidden" name="acceptFileExtensions" id="acceptFileExtensions" value="${acceptFileExtensions}"/>
</form>
<div class="bottomBtnControls">
<button class="btn lg" data-micromodal-close="" aria-label="창 닫기"><spring:message code="button.cancel"/></button>
<button class="btn lg theme" id = "regBtn"><spring:message code="button.insert"/></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Dropzone 파일업로드
if ($("#image-dropzone").length > 0) {
const maxFiles = 3;
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#image-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: "서버에서 응답을 받지 못했습니다.",
});
var inputElement = $('input[type="file"].dz-hidden-input');
if(inputElement.length > 1){
inputElement.eq(0).remove();
}
// name 부여
inputElement.attr('name', 'file');
// id 부여
inputElement.attr('id', 'fileUpload');
// 파일 추가 이벤트
myDropzone.on("addedfile", function(file) {
if (myDropzone.files.length >= maxFiles) {
$(".dz-message").hide();
}
});
myDropzone.on("removedfile", function(file) {
if (myDropzone.files.length < maxFiles) {
$(".dz-message").show();
}
});
myDropzone.on("maxfilesexceeded", function(file) {
const dictMaxFilesExceeded = myDropzone.options.dictMaxFilesExceeded;
alert(dictMaxFilesExceeded);
this.removeFile(file);
$(file.previewElement).find(".dz-remove").attr("disabled", true);
});
}
</script>
</body>
</html>

View File

@@ -0,0 +1,901 @@
<%@ 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 : BbscttRegistPopupC.jsp
Description : 게시글 등록 팝업 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-05-09 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<script>
$(document).ready(function () {
filesTempArr = [];
/*폼 기본 세팅*/
fn_select_cn();
//2.내용 텍스트 <br>태그 엔터값으로 replace
const target = $("#cnBbsUpdt");
let str = target.text();
str = str.trim();
target.val(str);
//3.나이스셀렉터 적용
fn_set_niceSelect_datePicker("#bbsUpdtForm");
/*4.휴대전화 포매팅*/
if($("#answMbtlnb").length > 0){
$("#answMbtlnb").val(fn_format_mbtlnb($("#answMbtlnb").val()));
fn_set_event("#answMbtlnb", "keyup", fn_fmt_telno);
}
//6.hidden value set
fn_update_hidden_value();
//분류 change시 hidden value값 set
$('#qesitmNmC').on('change', 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");
} else {
$("#qesitmInnb").val("");
$("#answCn").val("");
$("#qesitmNm").val("");
$("#qesitmAt").val("N");
}
});
//추가입력 항목 라디오 'click' 이벤트
$('.answRadioC').on('click', 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'이벤트
$('.answSelectC').on('change', function () {
const select = $(this);
const answ = select.closest("reviewRadio__item").find('[name="answCnArr[]"]');
const qesitmInnb = select.closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
const contrlTarget = select.closest("reviewRadio__item").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("reviewRadio__item").find(".answSelectAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
select.closest("reviewRadio__item").find(".answSelectAt").val("N");
});
}
});
//추가입력 항목 체크박스 'click'이벤트
$('.answChkC').on('click', 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("reviewRadio__item").find(".answChkAt").val("Y");
} else {
check.closest("reviewRadio__item").find(".answChkAt").val("N");
}
});
});
//추가입력 항목 텍스트 'input'이벤트
$('.answTxtC').on('input', function () {
const txt = $(this);
const contrlTarget = txt.closest(".reviewRadio__inputRow").find('.answTxt');
const contrlAt = txt.closest(".reviewRadio__inputRow").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");
});
}
});
//파일 업로드
$("#fileUpload").on("change", function () {
addFiles(event, 0);
});
//수정 버튼 이벤트
$("#updtBtn").on("click", function () {
$("#closeModalTarget").val("confirm_updt_alert");
openConfirmModal(function (onSuccess) {
fn_update_bbsctt(onSuccess);//등록함수
}, 'confirm_updt_alert'
, '#updtCfrmBtn'
, 'success_updt_alert'
, '#updtSuccessBtn'
, fn_select_qna, '1');
});
});
/*********************************************************
* 게시글 내용 조회
*********************************************************/
if (typeof fn_select_cn === 'undefined') {
function fn_select_cn () {
let bbscttInnb = $("#bbscttInnb").val();
let bbsId = $("#bbsId").val();
let sopmalCd = $("#sopmalCd").val();
$.ajax({
type: "post",
url: "<c:url value ='/ajax/bbscttAjax/selectBOBbscttCnAjax'/>",
contentType: 'application/json',
data: JSON.stringify({
bbsId: bbsId,
bbscttInnb: bbscttInnb,
sopmalCd: sopmalCd
}),
success: function (data) {
let cn = data.result.cn;
$("#cnBbsUpdt").val(cn);
}
});
}
}
/*********************************************************
* 게시글 수정
*********************************************************/
if(typeof fn_update_hidden_value === 'undefined'){
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("reviewRadio__item").find('[name="answCnArr[]"]');
let radioQesitmInnb = radio.eq(idx).closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
let radioItmInnb = radio.eq(idx).closest("reviewRadio__item").find('[name="itmInnbArr[]"]');
let radioQesitmAt = radio.eq(idx).closest("reviewRadio__item").find('[name="qesitmAtArr[]"]');
let radioContrlTarget = radio.eq(idx).closest("reviewRadio__item").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("reviewRadio__item").find('[name="answCnArr[]"]');
let radioQesitmInnb = radio.eq(idx).closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
let radioItmInnb = radio.eq(idx).closest("reviewRadio__item").find('[name="itmInnbArr[]"]');
let radioQesitmAt = radio.eq(idx).closest("reviewRadio__item").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("reviewRadio__item").find('[name="qesitmAtArr[]"]');
let selectQesitmInnb = select.eq(idx).closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
let selectAnsw = select.eq(idx).closest("reviewRadio__item").find('[name="answCnArr[]"]');
let selectOption = $('option:selected', select.eq(idx));
let selectContrlTarget = select.eq(idx).closest("reviewRadio__item").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("reviewRadio__item").find('[name="qesitmAtArr[]"]');
let selectQesitmInnb = select.eq(idx).closest("reviewRadio__item").find('[name="qesitmInnbArr[]"]');
let selectAnsw = select.eq(idx).closest("reviewRadio__item").find('[name="answCnArr[]"]');
let selectContrlTarget = select.eq(idx).closest("reviewRadio__item").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("reviewRadio__inputRow").find(".answChkC:checked").length > 0;
if (anyChecked) {
check.eq(idx).closest("reviewRadio__inputRow").find(".answChkAt").val("Y");
} else {
check.eq(idx).closest("reviewRadio__inputRow").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");
});
}
});
}
}
/*********************************************************
* 게시글 수정
*********************************************************/
if (typeof fn_update_bbsctt === 'undefined') {
function fn_update_bbsctt(onSuccess) {
let url = '<c:url value="/sopmal/csc/updateBbscttupdt"/>';
let saveForm = $('#bbsUpdtForm');
let formData = new FormData();
//파일 업로드
if ($("#image-dropzone").length > 0) {
let myDropzone = Dropzone.forElement("#image-dropzone");
myDropzone.files.forEach(function (file) {
formData.append("files", file);
});
}
/*문항 답변 체크박스 disabled*/
$('.answChk').each(function () {
if (!$(this).prop('checked')) {
fn_ctrl_disable([".answChk"],);
}
});
//여부 N처리
$('.chkAt').each(function () {
if (!$(this).prop('checked')) {
$(this).val("N");
}
});
//사용자 등록 시 노출 여부 Y
formData.append("expsrAt", "Y");
//폼 내 input값 append
saveForm.serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
disableButton("#updtCfrmBtn");
$.ajax({
type: 'post',
url: url,
enctype: "multipart/form-data",
data: formData,
processData: false,
contentType: false,
success: function (result) {
disableButton("#updtCfrmBtn");
closeModal("updtPop");//등록모달 close
onSuccess();
}
});
disableButton("#updtCfrmBtn");
fn_ctrl_disable("", [".checkbox"]);
}
}
/*상품qna 버튼 클릭 제어*/
if (typeof fn_prevent_click === 'undefined') {
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.goods}" var="goods"/>
<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"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/><%--허용파일확장자--%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/><%--이미지경로--%>
<!--권한 조회 후 jsp 분기-->
<div class="microModal microFullScreen" id="updtPop" aria-hidden="true" style="position: relative; z-index: 1000;">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
<c:out value="${bbsInfo.bbsNm}"/>
</h2>
<button class="microModal__close" onclick="closeModal('updtPop');"></button>
</div>
<div class="microModal__content">
<div class="microModal__inner">
<form id="bbsUpdtForm">
<input type="hidden" name="setupInfoInnb" value="${bbsInfo.setupInfoInnb }"/>
<input type="hidden" name="sopmalCd" value="${bbscttVO.sopmalCd }" id="sopmalCd"/>
<input type="hidden" name="filAtch" value="${bbsInfo.filAtch }"/>
<input type="hidden" name="regusrNm" value="${bbscttInfo.regusrNm}"/>
<input type="hidden" id = "bbsId" name="bbsId" value="${bbsInfo.bbsId }"/>
<input type="hidden" id = "bbsTyCd" name="bbsTyCd" value="${bbsInfo.bbsTyCd }"/>
<input type="hidden" id="reqDv" value="<c:out value = '${bbsctt.reqDv}'/>" name="reqDv"/>
<input type="hidden" id="pgeVtcCnt" name="pgeVtcCnt" value="${ bbsInfo.pgeVtcCnt }"/>
<input type="hidden" id="pgeWthCnt" name="pgeWthCnt" value="${ bbsInfo.pgeWthCnt }"/>
<input type="hidden" id="bbscttInnb" name="bbscttInnb" value="${ bbscttInfo.bbscttInnb }"/>
<input type="hidden" id="listAt" name="listAt" value="${ bbscttVO.listAt }"/>
<input type="hidden" id="prevNext" name="prevNext" value="${ bbsInfo.prevNext }"/>
<input type="hidden" id="sknTyCd" name="sknTyCd" value="${ bbsInfo.sknTyCd }"/>
<input type="hidden" id="acceptFileExtensions" name="acceptFileExtensions" value="${acceptFileExtensions}"/>
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">이름</div>
<c:out value = "${bbscttInfo.regusrNm}"/>
</div>
<c:if test="${bbsInfo.answRegist eq 'Y'&& bbsInfo.bbscttSndngMthCd ne '03'}"><%--답변사용여부와 게시글 문자사용여부 체크--%>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">휴대전화
<span class="required-asterisk">*</span>
</div>
<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 is-medium checkbox">
<input class="termCheck" type="checkbox" name="answSmsRecptn" value="Y" id="answSmsRecptn"
<c:if test="${bbscttInfo.answSmsRecptn eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">SMS 알림요청</span>
</label>
</div>
</div>
</c:if>
<c:if test="${not empty itmList}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">문의 유형
</div>
<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="lg" id="qesitmNmC" name="itmInnbArr[]">
<option value="" disabled="" selected="">문의 유형을 선택해 주세요.</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>
</c:if>
</div>
<c:if test="${not empty qesitmList}">
<div class="reviewRadio">
<c:forEach var="qesitmList" items="${qesitmList}">
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<%--라디오 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<%--셀렉트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03'}">
<%--체크박스 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<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">
<div class="b-checkbox-container">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<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 }"
<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>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04'}">
<%--텍스트 유형--%>
<div class="reviewRadio__item">
<div class="reviewRadio__title">
<c:out value="${ qesitmList.qesitmNm }"/>
<c:if test="${qesitmList.qesitmEssntlAt eq 'Y'}">
<span class="required-asterisk">*</span>
</c:if>
</div>
<div class="reviewRadio__inputRow">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }"
class="essntlChk">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt qesitmAtChk" value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
<input class="input-text full answTxtC" type="text"
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>>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
</c:forEach>
</div>
</c:if>
<div class="userForm__inputBox">
<c:if test ="${bbsInfo.bbsTyCd eq '05'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">문의상품</div>
<c:forEach var = "goods" items="${goods}">
<img src="${cdnurl}<c:out value = '${goods.img}'/>" onerror = "this.src='/pc/images/image_placeholder.png'" alt="qnaGoods"
width="100px" height="100px">
<span><c:out value='${goods.goodsNm}'/></span>
<input type="hidden" name="goodsInnbArr[]" value="${goods.goodsInnb}"/>
</c:forEach>
<br>
</div>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">제목</div>
<input class="input-text full" 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" class="chkAt"
<c:if test="${bbscttInfo.secretBbscttAt eq 'Y'}">checked</c:if>
<c:if test="${bbsInfo.bbsTyCd eq '05'}"> onclick="fn_prevent_click(event);"</c:if>>
<span class="check"></span>
<span class="control-label">비밀글</span>
</label>
</div>
</c:if>
</div>
<c:if test="${regusrInfo.regusrDvCd eq '99'}">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">비밀번호<span class="required-asterisk">*</span></div>
<input class="input-text full" type="password"
title="비밀번호 입력란"
name="password" maxlength='20'
placeholder="비밀번호를 입력하세요." value="">
</div>
</c:if>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">내용
</div>
<textarea class="textarea" rows="12" title="내용 입력란" id="cnBbsUpdt" name = "cn">
<c:out value="${bbscttInfo.cn}"/>
</textarea>
</div>
<%--게시판설정(파일첨부사용여부)--%>
<c:if test="${bbsInfo.filAtch eq 'Y'}">
<div class="fileUplaod">
<div class="fileUplaod__title">이미지 등록(3장)</div>
<div class="dropzone-wrapper">
<div class="dropzone" id="image-dropzone">
</div>
</div>
<ul class="infoList">
<li>사진첨부는 최대 10MB 이하이며 3개까지 등록할 수 있습니다.</li>
<li>등록 가능 파일은 <c:out value="${acceptFileExtensions}"/> 파일만 가능합니다.</li>
<li>상품과 무관한 내용이거나 음란 불법적인 내용은 통보없이 삭제할 수
있습니다.
</li>
</ul>
</div>
</c:if>
</div>
</div>
</form>
<div class="bottomBtnControls">
<button class="btn lg" data-micromodal-close="" aria-label="창 닫기"><spring:message code="button.cancel"/></button>
<button class="btn lg theme" id = "updtBtn"><spring:message code="button.update"/></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Dropzone 파일업로드
$(".dz-hidden-input").remove();
if ($("#image-dropzone").length > 0) {
const maxFiles = 3;
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#image-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);
let cdnurl = '<c:out value="${cdnurl}"/>';
let filCours = `\${image.filCours}`;
let sysFilNm = `\${image.sysFilNm}`;
const imagePath = cdnurl + filCours + sysFilNm;
dropzoneInstance.emit("thumbnail", mockFile, imagePath);
// 이미지 오류 처리
$(mockFile.previewElement).find("img").on("error", function () {
this.src = '/mobile/images/image_placeholder.png'; // 대체 이미지 경로로 설정
});
// Dropzone에 파일 추가
mockFile.customId = image.bbscttAtchmnfilInnb;
dropzoneInstance.files.push(mockFile);
});
// 파일이 삭제될 때마다 호출되는 이벤트 핸들러
this.on("removedfile", function (file) {
const result = dropzoneDeleteFiles("" + file.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;
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);
});
}
});
if (myDropzone.files.length < maxFiles) {
$(".dz-message").show();
} else {
$(".dz-message").hide();
}
var inputElement = $('input[type="file"].dz-hidden-input');
// name 부여
inputElement.attr('name', 'file');
// id 부여
inputElement.attr('id', 'fileUpload');
}
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,326 @@
<%@ 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 : CmListR.jsp
Description : 댓글 조회
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-25 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<%--(DEPTH0)댓글 목록--%>
<c:set value = "${resultMap.cmList.cmList}" var = "cmList"/>
<%--작성자 정보 추출(댓글 목록)--%>
<c:set value = "${resultMap.cmList.wrterList}" var = "wrterList"/>
<%--작성자 정보 (답글 등록자 정보)--%>
<c:set value = "${resultMap.regusrInfo}" var = "regusrInfo"/>
<%--게시글 정보 --%>
<c:set value = "${resultMap.cmVO}" var = "cmVO"/>
<%--게시판 설정 --%>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<input type = "hidden" id = "cmCntInfo" value = "<c:out value = "${ resultMap.paginationInfo.totalRecordCount }"/>">
<p id="comment_container"></p>
<c:choose>
<c:when test="${not empty cmList}">
<c:forEach var="cmList" items="${cmList}" varStatus="status">
<div class="comment-body__item mainCmContent">
<div class="comment-body__info">
<div class="comment-body__info-left">
<i class="icon icon_comment-user"></i>
<span class="comment-body__user">
<c:choose>
<c:when test="${cmList.regusrDvCd eq '99'}">
<c:out value="${cmList.maskingRegusrNm}"/>[비회원]
</c:when>
<c:when test="${cmList.regusrDvCd eq '02'}">
<c:out value="${cmList.mngrNm}"/>
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '01' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrId}"/>(<c:out value="${ cmList.mbrGradNm}"/>)
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '02' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrId}"/>
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '03' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrNm}"/>(<c:out value="${ cmList.mbrGradNm}"/>)
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '04' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrNm}"/>
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '05' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrNm}"/><br>
(<c:out value="${ cmList.maskingRegusrId}"/>,<c:out value="${ cmList.mbrGradNm}"/>)
</c:when>
<c:when test="${cmList.wrterIndictTyCd eq '06' && cmList.regusrDvCd eq '01'}">
<c:out value="${ cmList.maskingRegusrNm}"/>(<c:out value="${ cmList.maskingRegusrId}"/>)
</c:when>
</c:choose>
</span>
<span class="comment-body__date"><c:out value="${cmList.registDt}"/></span>
<c:if test = "${cmList.newAt eq 'Y'}">
<i class="icon icon_new-post"></i>
</c:if>
</div>
<div class="comment-body__info-right">
<c:if test="${cmList.useAt eq 'Y'}">
<button type="button" class="comment-body__button cmUpdtBtn" value="<c:out value="${cmList.cmInnb}"/>">
<spring:message code="button.update"/>
</button>
<button type="button" class="comment-body__button cmDelBtn" value="<c:out value="${cmList.cmInnb}"/>">
<spring:message code="button.delete"/>
</button>
</c:if>
</div>
</div>
<div class="comment-body__content mainCmCn">
<%--1. 삭제된 글은 비밀 댓글이여도 삭제됐다고 보여준다--%>
<c:choose>
<c:when test="${cmList.useAt eq 'Y'}">
<%--2. 삭제 안된 글 중 비밀 댓글인지 확인한다.--%>
<c:choose>
<c:when test="${cmList.secretBbscttAt eq 'Y'}"><%--비밀댓글 적용 시--%>
<c:choose>
<c:when test="${cmList.regusr eq cmVO.mbrInnb}"><%--본인 꺼는 비밀 댓글 내용 보임--%>
<p class="cmCn" style="white-space: pre-wrap;"><i class="icon icon_lock"></i><c:out value="${fn:trim(cmList.cn)}"/></p>
</c:when>
<c:otherwise><%--비회원 댓글 조회--%>
<p class="cmCn" style="white-space: pre-wrap;"><i class="icon icon_lock"></i><button class="comment-body__privateComment comment-body__button secretCm" value="<c:out value="${cmList.cmInnb}"/>">비밀 댓글입니다.</button>
</p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p class="cmCn" style="white-space: pre-wrap;"><c:out value="${fn:trim(cmList.cn)}"/></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
삭제된 댓글 입니다.
</c:otherwise>
</c:choose>
<div class="dtlCmDiv"><%--영역확인--%>
<input type="hidden" name="secretBbscttAt" value="${cmList.secretBbscttAt}">
<input type="hidden" name="password" value="${cmList.password}">
</div>
</div>
<div class="comment-body__reply-container">
<button class="comment-body__reply-button">답글 <em class="commentCnt">0</em></button>
<c:if test="${bbsInfo.cmEvlUseAt eq 'Y'}">
<div class="comment-like">
<button class="comment-like__btn comment-like__btn--like" value = "<c:out value ='${cmList.cmInnb}'/>">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none">
<path
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
fill="black"></path>
</svg>
<span class="comment-like__number recomendCnt"><c:out value="${cmList.recomendCnt}"/></span>
</button>
<%--게시판설정(댓글평가추천단계-비추천사용)--%>
<c:if test="${bbsInfo.cmEvlRecomendStep eq '02'}">
<button class="comment-like__btn comment-like__btn--dislike" value = "<c:out value ='${cmList.cmInnb}'/>">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none">
<path
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
fill="black"></path>
</svg>
<span class="comment-like__number nonrecomendCnt"><c:out value="${cmList.nonrecomendCnt}"/></span>
</button>
</c:if>
</div>
</c:if>
</div>
<c:if test="${cmList.depth eq 0}">
<div class="comment-body__nested-container">
</c:if>
<c:if test = "${not empty resultMap.cmList.cmAnswList}">
<c:forEach var="item" items="${resultMap.cmList.cmAnswList}">
<c:if test="${cmList.cmInnb eq item.parntsCmInnb}">
<div class="comment-body__item commentDiv">
<div class="comment-body__info">
<div class="comment-body__info-left">
<i class="icon icon_comment-user"></i>
<span class="comment-body__user">
<c:choose>
<c:when test="${item.regusrDvCd eq '99'}">
<c:out value="${item.maskingRegusrNm}"/>[비회원]
</c:when>
<c:when test="${item.regusrDvCd eq '02'}">
<c:out value="${item.mngrNm}"/>
</c:when>
<c:when test="${item.wrterIndictTyCd eq '01' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrId}"/>(<c:out value="${ item.mbrGradNm}"/>)
</c:when>
<c:when test="${item.wrterIndictTyCd eq '02' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrId}"/>
</c:when>
<c:when test="${item.wrterIndictTyCd eq '03' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrNm}"/>(<c:out value="${ item.mbrGradNm}"/>)
</c:when>
<c:when test="${item.wrterIndictTyCd eq '04' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrNm}"/>
</c:when>
<c:when test="${item.wrterIndictTyCd eq '05' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrNm}"/><br>
(<c:out value="${ item.maskingRegusrId}"/>,<c:out value="${ item.mbrGradNm}"/>)
</c:when>
<c:when test="${item.wrterIndictTyCd eq '06' && item.regusrDvCd eq '01'}">
<c:out value="${ item.maskingRegusrNm}"/>(<c:out value="${ item.maskingRegusrId}"/>)
</c:when>
</c:choose>
</span>
<span class="comment-body__date"><c:out value="${item.registDt}"/></span>
<c:if test="${item.newAt eq 'Y'}">
<i class="icon icon_new-post"></i>
</c:if>
</div>
<div class="comment-body__info-right">
<button class="comment-body__button cmcmUpdtBtn" value="${item.cmInnb}" re-at="Y">수정
</button>
<button class="comment-body__button cmDelBtn" value="${item.cmInnb}" re-at="Y">삭제
</button>
</div>
</div>
<div class="comment-body__content replyCmDiv"> <%--답글--%>
<c:choose>
<c:when test="${item.secretBbscttAt eq 'Y'}">
<c:choose>
<c:when test="${item.regusr eq cmVO.mbrInnb}"><%--본인 꺼는 비밀 댓글 내용 보임--%>
<p class="cmcmCn" style="white-space: pre-wrap;"><i class="icon icon_lock"></i><c:out value="${item.cn}"/></p>
</c:when>
<c:otherwise>
<p class="cmcmCn" style="white-space: pre-wrap;"><i class="icon icon_lock"></i><button class="comment-body__privateComment secretCmCm cmcmCn" value="<c:out value = '${item.cmInnb}'/>">비밀 댓글입니다.</button></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p class="cmcmCn" style="white-space: pre-wrap;"><c:out value="${item.cn}"/></p>
</c:otherwise>
</c:choose>
</div>
<%--게시판설정(댓글평가사용여부)--%>
<c:if test="${bbsInfo.cmEvlUseAt eq 'Y'}">
<div class="comment-like">
<button class="comment-like__btn comment-like__btn--like" value = "<c:out value ='${item.cmInnb}'/>">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none">
<path
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
fill="black"></path>
</svg>
<span class="comment-like__number recomendCnt"><c:out value="${item.recomendCnt}"/></span>
</button>
<%--게시판설정(댓글평가추천단계-비추천사용)--%>
<c:if test="${bbsInfo.cmEvlRecomendStep eq '02'}">
<button class="comment-like__btn comment-like__btn--dislike" value = "<c:out value ='${item.cmInnb}'/>">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none">
<path
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
fill="black"></path>
</svg>
<span class="comment-like__number nonrecomendCnt"><c:out value="${item.nonrecomendCnt}"/></span>
</button>
</c:if>
</div>
</c:if>
</div>
<div class="dtlCmDiv">
<input type="hidden" name="secretBbscttAt" value="${item.secretBbscttAt}">
<input type="hidden" name="password" value="${item.password}">
</div>
</c:if>
</c:forEach>
</c:if>
<c:if test="${cmList.depth eq 0}">
<div class="comment-body__item cnWriteDiv">
<div class="comment-write">
<div class="comment-write__textarea-container">
<c:choose>
<c:when test = "${cmVO.authResult eq 'Y'}">
<textarea class="comment-write__textarea" rows="5"
placeholder="댓글을 입력하세요."
name="cn"
title="댓글 입력"></textarea>
</c:when>
<c:otherwise>
<textarea class="comment-write__textarea" rows="5"
placeholder="로그인 또는 댓글권한이 있을 경우 등록하실 수 있습니다." readonly></textarea>
</c:otherwise>
</c:choose>
</div>
<div class="comment-write__bottom">
<div class="comment-write__info">
<div class="comment-write__info-inner">
<c:if test = "${cmVO.authResult eq 'Y'}">
<div class="comment-write__info-item cmInputNm">
<input type="text" class="comment-write__info-input"
placeholder="이름"
name="regusrNm" maxlength="25"
value= "<c:out value="${cmVO.regusrNm}"/>"
title="이름 입력">
</div>
<c:if test="${cmVO.regusrDvCd eq '99'}">
<div class="comment-write__info-item cmInputPw">
<input type="password" class="comment-write__info-input"
name="password"
maxlength="25"
placeholder="비밀번호" title="비밀번호 입력">
</div>
</c:if>
</c:if>
</div>
</div>
<div class="comment-write__controls">
<c:choose>
<c:when test = "${cmVO.authResult eq 'Y'}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox secretBbscttAt">
<input type="checkbox" value="Y" name="secretBbscttAt"
id="secretChk">
<span class="check"></span>
<span class="control-label">비밀 댓글</span>
</label>
</div>
<button class="btn sm theme reCreBtn"><spring:message code="button.insert"/></button>
</c:when>
<c:otherwise>
<button class="btn sm theme" id="rejectAuthCmBtn" onclick = "openModal('login_alert')"><spring:message code="button.insert"/></button>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
</div>
<input type="hidden" name="bbscttInnb" value="<c:out value ='${cmList.bbscttInnb}'/>"/>
<input type="hidden" name="bbsId" value="<c:out value ='${cmList.bbsId}'/>"/>
<input type="hidden" name="cmInnb" value="<c:out value ='${cmList.cmInnb}'/>" class="cmInnb"/>
<div class="comment-body__item close" tabindex="0">
답글접기
</div>
</div>
</c:if>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="comment-body__content">
<div class="table__no-result" style="padding:0px 0 0px;">
<img src="/pc/images/icon__no-result.png" alt="댓글 없음">
<p class="table__no-result-text">
<spring:message code="common.nodata"/>
</p>
</div>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,129 @@
<%@ 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" %>
<c:set var="bbsInfo" value="${resultMap.bbsInfo}"/>
<c:set var="bbscttVO" value="${resultMap.bbsctt}"/>
<c:choose>
<c:when test="${not empty resultMap.resultList.resultList}">
<c:forEach var="resultList" items="${resultMap.resultList.resultList}">
<details class="myQnaList__item item"
password-at="<c:if test = "${resultList.secretBbscttAt eq 'Y' || not empty resultList.password}">Y</c:if>"
regusr="<c:out value="${ resultList.regusr}"/>"
bbsctt="<c:out value="${ resultList.bbscttInnb }"/>"
regusr-dv-cd="<c:out value="${ resultList.regusrDvCd }"/>">
<summary class="myQnaList__top">
<div class="myQnaList__right">
<div class="myQnaList__info">
<input type="hidden" name="bbscttInnb" value="${resultList.bbscttInnb}">
<p class="myQnaList__info__question">
<c:if test="${not empty resultList.answCn}">
[<c:out value="${resultList.answCn}"/>]
</c:if>
<c:out value="${resultList.sj}"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<fmt:formatNumber value="${resultList.cmtCnt}" pattern="#,###"/>)
</c:if>
</p>
<p class="myQnaList__info__status">
<c:if test = "${bbsInfo.answRegist eq 'Y'}">
<c:choose>
<c:when test="${not empty resultList.answBbscttInnb}">
<span class="myQnaList__info__date">답변완료</span>
</c:when>
<c:otherwise>
<span class="myQnaList__info__date">답변대기</span>
</c:otherwise>
</c:choose>
</c:if>
<c:if test="${bbsInfo.ntcDeYn eq 'Y'}">
<c:choose>
<c:when test="${resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'Y'}">
<span class="myQnaList__info__date"><c:out value="${ resultList.ntcBgnDe }"/> ~ <c:out value="${ resultList.ntcEndDe }"/></span>
</c:when>
<c:when test="${ resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'N'}">
<span class="myQnaList__info__date">상시공지</span>
</c:when>
</c:choose>
</c:if>
<c:if test="${bbsInfo.regusrNmYn eq 'Y'}">
<span class="myQnaList__info__date">
<c:choose>
<c:when test="${resultList.regusrDvCd eq '99'}">
<c:out value="${ resultList.maskingRegusrNm}"/>[비회원]
</c:when>
<c:when test="${resultList.regusrDvCd eq '03'&& not empty resultList.npayBbscttSnb}">
naverpay
</c:when>
<c:when test="${resultList.regusrDvCd eq '02'}">
<c:out value="${ resultList.mngrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '01' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
(<c:out value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '02' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '03' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '04' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '05' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
(<c:out value="${ resultList.regusrId}"/>,<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '06' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.regusrId}"/>)
</c:when>
</c:choose>
</span>
</c:if>
<c:if test="${bbsInfo.inqireCntYn eq 'Y'}">
<span class="myQnaList__info__date">조회수 : <fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,###"/></span>
</c:if>
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<span class="myQnaList__info__date"><c:out value="${ resultList.sumRegistDt}"/></span>
</c:if>
</p>
<span class="myQnaList__top__chevron"></span>
</div>
</div>
</summary>
<div class="myQnaList__answer">
</div>
</details>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png">
</div>
<p class="noResult__text"><spring:message code="common.nodata"/></p>
</div>
</c:otherwise>
</c:choose>
<input type = "hidden" id = "answAt" value = "Y"/>
<input type = "hidden" id = "regusr" value = "<c:out value="${bbscttVO.regusr}"/>"/>

View File

@@ -0,0 +1,149 @@
<%@ 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 : EvtListR.jsp
Description : 이벤트 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-30 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<c:set var = "bbscttVO" value = "${resultMap.bbsctt}"/>
<c:set var = "bbsInfo" value = "${resultMap.bbsInfo}"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<c:set var="rnumAt" value="false"/>
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<div class="progressEvents__item item">
<a class="dtlBtn" style="cursor:pointer">
<input type="hidden" class="passwordAt" value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<div class="progressEvents__image">
<input type = "hidden" value = "<c:out value="${resultList.reprsntImgSysFilNm}"/>"/>
<img src="<c:out value ="${cdnurl}${resultList.reprsntImgSysFilNm}"/>"
onerror= "this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</div>
<div class="progressEvents__text">
<h4 class="progressEvents__title">
<c:out value ="${resultList.sj}"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<fmt:formatNumber value="${resultList.cmtCnt}" pattern="#,###"/>)
</c:if>
</h4>
<div class="progressEvents__bottom">
<p class="progressEvents__date">
</p>
</div>
</div>
<ul class="eventList__list">
<c:if test="${bbsInfo.answRegist eq 'Y'}">
<c:choose>
<c:when test="${not empty resultList.answBbscttInnb}">
<li>답변완료</li>
</c:when>
<c:otherwise>
<li>답변대기</li>
</c:otherwise>
</c:choose>
</c:if>
<c:if test="${bbsInfo.ntcDeYn eq 'Y'}">
<c:choose>
<c:when test="${resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'Y'}">
<li><c:out value="${ resultList.ntcBgnDe }"/> ~ <c:out value="${ resultList.ntcEndDe }"/></li>
</c:when>
<c:when test="${ resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'N'}">
<li>상시공지</li>
</c:when>
</c:choose>
</c:if>
<c:if test="${bbsInfo.inqireCntYn eq 'Y'}">
<li>조회수 : <fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,###"/></li>
</c:if>
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<li><c:out value="${ resultList.sumRegistDt}"/></li>
</c:if>
<c:if test="${bbsInfo.regusrNmYn eq 'Y'}">
<li>
<c:choose>
<c:when test="${resultList.regusrDvCd eq '99'}">
<c:out value="${ resultList.maskingRegusrNm}"/>[비회원]
</c:when>
<c:when test="${resultList.regusrDvCd eq '03'&& not empty resultList.npayBbscttSnb}">
naverpay
</c:when>
<c:when test="${resultList.regusrDvCd eq '02'}">
<c:out value="${ resultList.mngrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '01' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
(<c:out value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '02' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '03' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '04' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '05' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
(<c:out value="${ resultList.regusrId}"/>,<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '06' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.regusrId}"/>)
</c:when>
</c:choose>
</li>
</c:if>
</ul>
</a>
</div>
<c:if test="${resultList.rnum > 0}">
<c:set var="rnumAt" value="true"/>
</c:if>
<c:if test="${not rnumAt}"><%--조회된 데이터 없을 시 데이터 없음 노출--%>
<div class="progressEvents__item item"><spring:message code="common.nodata"/></div>
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="progressEvents">
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<spring:message code="common.nodata"/>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,432 @@
<%@ 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 : NoticeListR.jsp
Description :모바일 샘플.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 최남식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function (){
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}"/>';/*게시판이름*/
fn_set_header_title(title);
//엔터 submit 방지
$('#srchForm').on('keydown', function (e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#srchBtn').trigger("click");
}
});
//분류 선택
$(".sub-tab__btn").on("click", function () {
let idx = $(this).index();
$(".sub-tab__btn").not($(this)).removeClass("current");
$(this).addClass("current");
fn_select_List(1, idx);
});
// 'sub-tab__trigger' 클래스를 가진 요소가 있는지 확인
if (!$(".sub-tab__trigger").length > 0) {
fn_select_List(1);
} else {
$(".sub-tab__btn").eq(0).click(); //클래스 부여 로직 필요
}
//검색
$(document).on("click", "#srchBtn", function () {
fn_select_List(1);
});
// 고객센터 메인 이동
$(document).on('click','.header__toBack__btn',function(){
location.href='/sopmal/csc/selectCscMainForm';
});
//상세보기
$(document).on("click", ".dtlBtn", function () {
const bbscttInnb = $(this).find(".bbscttInnb").val();
fn_select_crud_posbl_at(bbscttInnb, '', '', 'R');
});
});
//crud 가능 판단
const fn_select_crud_posbl_at = (bbsctt, idx, pwCnfirmAt, crudDv) => {
$.ajax({
type: 'post',
url: '<c:url value="/sopmal/csc/selectBbscttDtlMovePosblAt"/>',
data: {
"bbscttInnb": bbsctt,
"bbsId": $("#bbsId").val(),
"sknTyCd": $("#sknTyCd").val(),
"pwCnfirmAt": pwCnfirmAt,
"crudDv": crudDv
},
success: function (data) {
data = JSON.parse(data.resBody.result);
fn_branch_bbsctt_posble(data, idx);
}
});
}
//상세보기 가능 판단 여부에 따른 분기 처리
const fn_branch_bbsctt_posble = (data, idx) => {
const moveAt = data.result.moveAt;
const vo = data.vo;
if (moveAt === 'YES' || vo.pwCnfirmAt === 'Y') {//본인 o
if (vo.crudDv === 'R') {
fn_move_dtl(vo.bbscttInnb);
} else if (vo.crudDv === 'U') {
fn_move_qaUpdt(vo.bbscttInnb);
} else if (vo.crudDv === 'D') {
fn_delete_bbsctt(vo.bbscttInnb, vo.bbsId);
}
} else if (moveAt === 'OTHER') {//다른이용자 o
openModal("reject_modi_pop");
} else if (moveAt === 'LOGIN') {//로그인 o
openModal("login_alert");
} else {//비밀번호
$("#modalPw").val("");
openModal("confirm_pw_pop");
$("#modalBbscttInnb").val(vo.bbscttInnb);
$("#modalIdx").val(idx);
$("#modalCrudDv").val(vo.crudDv);
}
}
//리스트 조회
const fn_select_List = (pageIndex,idx) => {
const sknTyCd = $("#sknTyCd").val();
const bbsTyCd = $("#bbsTyCd").val();
let url;
if (!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
let pageUnit = 10;
if (bbsTyCd === '01') {
//일반게시글 스킨타입
if (sknTyCd === '01') {
url = '/sopmal/csc/selectCscListTy';//리스트
} else if (sknTyCd === '02') {
url = '/sopmal/csc/selectCscGalaryTy';//갤러리
} else {
url = '/sopmal/csc/selectCscAcordionTy';//아코디언
}
} else if (bbsTyCd === '02') {
url = '/sopmal/csc/selectNoticeListInqire'//공지사항
} else if (bbsTyCd === '04') {
url = '/sopmal/csc/selectFaqListInqire'//FAQ
}
let srchForm = $("#srchForm").serialize() + "&pageIndex=" + pageIndex + "&useAt=Y&expsrAt=Y";
let itmInnb;
//분류 조회
if (idx !== 0 && idx !== undefined) { //분류 클릭
itmInnb = $(".sub-tab__btn").eq(idx).val();
srchForm = srchForm + "&srchitmInnb=" + itmInnb;
} else {
if ($(".sub-tab__btn.current").index() > 0) { //검색어
srchForm = srchForm + "&srchitmInnb=" + $(".sub-tab__btn.current").val();
}
}
$.ajax({
type: "post",
data: srchForm,
url: url,
success: function (data) {
if ($(".content").html()) {
$(".content").remove();
}
$(".customerNotice").append(data);
//인피니티 스크롤 이벤트 감지 함수
fn_infinite_scroll(fn_add_list,'','footer');
}
});
}
//인피니티 스크롤 이벤트 콜백 함수
const fn_add_list = () => {
if ($("#evtOccrrncAt").val() === 'continue') {
/*다음 페이지로 이동*/
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(++pageIndex);
let idx = $(".sub-tab__btn.current").index();
/*검색 조건*/
let srchForm = $("#srchForm").serialize() + "&useAt=Y&expsrAt=Y&ntcAt=Y";
let itmInnb;
//분류 조회
if (idx >= 0) {
itmInnb = $(".sub-tab__btn").eq(idx).val();
srchForm = srchForm + "&srchitmInnb=" + itmInnb;
}
$.ajax({
type: "post",
data: srchForm,
url: "/sopmal/csc/selectAjaxListInqire",
success: function (data) {
data = JSON.parse(data.resBody.result);
fn_append_List(data);//DATA append 함수
}
});
}
}
// data append 함수
const fn_append_List = (data) => {
const result = data.resultList.resultList;
let list = ``;
const sknTyCd = $("#sknTyCd").val();
if(result.length > 0){
result.forEach(function (item) {
// 길이에 따른 span 태그 설정
let spanTop = item.sj.length > 35 ? `<span class="customerMain__boardDate">` : '';
let spanBottom = item.sj.length > 35 ? `</span>` : '';
// 아이콘 설정
let fileIcon = item.isfiles === 1 ? `<i class="icon icon_image-badge"></i>` : '';
let newIcon = item.newAt === 'Y' ? `<i class="icon icon_new-post"></i>` : '';
let hotIcon = item.popularAt === 'Y' ? `<i class="icon icon_hot-post"></i>` : '';
let lockIcon = item.secretBbscttAt === 'Y' ? `<i class="icon icon_lock"></i>` : '';
// 리스트 항목 추가
if(sknTyCd === '01'){
list += `<li>
<input type="hidden" name="bbscttInnb" value="\${item.bbscttInnb}\">
<details>
<summary>
\${item.sj}\
\${spanTop}\
\${fileIcon}\
\${newIcon}\
\${hotIcon}\
\${lockIcon}\
\${spanBottom}\
<span class="customerMain__boardDate">
\${item.sumRegistDt}\
</span>
</summary>
</details>
</li>`;
}else if(sknTyCd === '03'){
list += `<li>
<input type="hidden" name="bbscttInnb" value="\${item.bbscttInnb}\">
<details>
<summary>
\${item.sj}\
\${spanTop}\
\${fileIcon}\
\${newIcon}\
\${hotIcon}\
\${lockIcon}\
\${spanBottom}\
<span class="customerMain__boardDate">
\${item.sumRegistDt}\
</span>
</summary>
<div class="customerMain__boardContent">
\${item.cn}\
</div>
</details>
</li>`;
}
});
$("#evtOccrrncAt").val("continue");
// 리스트를 지정된 요소에 추가
$(".customerMain__boardList").append(list);
}else{
/*데이터 조회 null일시 그 전 페이지 인덱스로 변경*/
$("#evtOccrrncAt").val("stop");
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex-1);
}
};
//상세 이동
const fn_move_dtl = (bbscttInnb) => {
$("#bbscttInnb").val(bbscttInnb);
$("#dtlForm").submit();
}
</script>
<body>
<%--게시판 정보--%>
<c:set var="bbsInfo" value="${resultMap.bbsInfo}"/>
<%--vo--%>
<c:set var="bbscttVO" value="${resultMap.bbsctt}"/>
<%--분류 목록--%>
<c:set var="itmList" value="${resultMap.itmList}"/>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<%--게시판 정보--%>
<div class="customerNotice">
<div class="topSearchBox">
<c:if test = "${not empty itmList}">
<div class="sub-tab__trigger">
<button type = "button" class="sub-tab__btn current">전체</button>
<c:forEach var="item" items="${itmList}">
<button type = "button" class="sub-tab__btn" value="<c:out value="${item.itmInnb}"/>"><c:out value="${item.itmCn}"/></button>
</c:forEach>
</div>
</c:if>
<form id="srchForm">
<div class="innerSearch">
<input type="hidden" name="bbsId" id="bbsId" value="<c:out value="${bbsInfo.bbsId}"/>">
<input type="hidden" name="sknTyCd" id="sknTyCd" value="<c:out value="${bbsInfo.sknTyCd}"/>">
<input type="hidden" name="bbsTyCd" id="bbsTyCd" value="<c:out value="${bbsInfo.bbsTyCd}"/>">
<input type="hidden" name="srchDv" id="srchDv" value="any">
<input type="hidden" name="pgeVtcCnt" id="pgeVtcCnt" value="<c:out value="${bbsInfo.pgeVtcCnt}"/>">
<input type="hidden" name="pgeWthCnt" id="pgeWthCnt" value="<c:out value="${bbsInfo.pgeWthCnt}"/>">
<input type="hidden" name="prevNext" id="prevNext" value="<c:out value="${bbsInfo.prevNext}"/>">
<input type="hidden" name="regusrDvCd" id="regusrDvCd" value="<c:out value="${bbscttVO.regusrDvCd}"/>">
<input type="hidden" name="pageIndex" id="pageIndex" value="<c:out value="${ resultMap.bbsctt.pageIndex}"/>"/><%--페이지인덱스--%>
<input type="hidden" id="evtOccrrncAt" value="continue"/><%--인피니티스크롤 이벤트 발생 여부--%>
<input type="hidden" name="slangFlterUseAt" id = "slangFlterUseAt" value = "<c:out value="${bbsInfo.slangFlterUseAt}"/>">
<input type="search" name="srchKeyword" id="srchKeyword" placeholder="궁금하신 내용을 입력해 주세요" title="검색어 입력"><%--검색어--%>
<button type="button" id="srchBtn"><i class="icon icon_nav-search"></i></button>
</div>
</form>
<form id = "dtlForm" action="/sopmal/csc/selectBbscttDtlInqire" method="get">
<input type="hidden" name="bbscttInnb" id="bbscttInnb"><%--게시글 고유번호--%>
<input type="hidden" name="bbsId" value="<c:out value = "${bbsInfo.bbsId}"/>"/><%--게시판아이디--%>
<input type="hidden" name="bbsTyCd" value="<c:out value = "${bbsInfo.bbsTyCd}"/>"/><%--게시판타입--%>
<input type="hidden" name="recomendGoodsExpsrAt" value="<c:out value = "${bbsInfo.recomendGoodsExpsrAt}"/>"/><%--추천상품노출여부--%>
<input type="hidden" name="prevNext" value="<c:out value = "${bbsInfo.prevNext}"/>"/><%--이전글다음글노출여부--%>
<input type="hidden" name="useAt" value="Y"/><%--사용자 노출 조건--%>
<input type="hidden" name="expsrAt" value="Y"/><%--사용자 노출 조건--%>
<input type="hidden" name="reqUrl" value="csc"/><%--권한체크 요청 url--%>
<input type="hidden" name="authDv" value="CM"/><%--상세 권한체크--%>
</form>
</div>
</div>
</div>
<!-- Top 버튼 -->
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i>
<span class="visually-hidden">위로 가기</span>
</button>
</div>
</main>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
</body>
<%--비밀번호 미입력--%>
<div class="microModal microAlert" id="reject_modi_pop" aria-modal="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
글작성자만 이용가능합니다.
</h2>
<button type="button" data-micromodal-close aria-label="창 닫기"></button>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" data-micromodal-close aria-label="창 닫기"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--비밀번호 미입력--%>
<div class="microModal microAlert" id="alert_undefined_pw" aria-modal="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
비밀번호를 입력해주세요
</h2>
<button type="button" data-micromodal-close aria-label="창 닫기"></button>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" data-micromodal-close aria-label="창 닫기"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--비밀번호 불일치--%>
<div class="microModal microAlert" id="alert_reject_pw" aria-modal="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
비밀번호가 일치하지 않습니다.
</h2>
<button type="button" data-micromodal-close aria-label="창 닫기"></button>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" data-micromodal-close aria-label="창 닫기"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--비밀번호 확인 모달--%>
<div class="microModal microAlert" id="confirm_pw_pop" aria-modal="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title">
등록시에 입력했던<br> 비밀번호를 입력해 주세요
</h2>
</div>
<div class="microModal__content">
<p>
<input class="input-text full" type="password" title="비밀번호 입력" placeholder="비밀번호 입력" name="password" id = "modalPw">
</p>
</div>
<input type="hidden" name="bbscttInnb" id="modalBbscttInnb">
<input type="hidden" id="modalIdx">
<input type="hidden" id="modalAnswAt">
<input type="hidden" id="reqAction">
<input type="hidden" id="modalcrudDv">
</div>
<div class="microModal__btnContainer">
<button type="button" class="microModal__btn" data-micromodal-close aria-label="창 닫기">
<spring:message code="button.cancel"/>
</button>
<button type="button" class="microModal__btn microModal__btn-primary" id="pwChkBtn">
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
</html>

View File

@@ -0,0 +1,158 @@
<%@ 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" %>
<c:set var = "bbsInfo" value = "${resultMap.bbsInfo}"/>
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<div class="eventList">
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<a class="eventList__item dtlBtn item" style="cursor:pointer" >
<input type="hidden" class="passwordAt" value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<div class="eventList__top">
<c:choose>
<c:when test="${resultList.secretBbscttAt eq 'Y'}">
<c:choose>
<c:when test = "${resultList.regusrDvCd ne '02'}">
<c:if test="${not empty resultList.answCn}">
[<c:out value="${ resultList.answCn }"/>]
</c:if>
<span>${ resultList.maskingRegusrNm}</span>님의 ${resultMap.bbsInfo.bbsNm}
</c:when>
<c:otherwise>
비밀글입니다.
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:if test="${not empty resultList.answCn}">
[<c:out value="${ resultList.answCn }"/>]
</c:if>
<c:out value ="${resultList.sj}"/>
</c:otherwise>
</c:choose>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<fmt:formatNumber value="${resultList.cmtCnt}" pattern="#,###"/>)
</c:if>
</div>
<ul class="eventList__list">
<c:if test="${bbsInfo.answRegist eq 'Y'}">
<c:choose>
<c:when test="${not empty resultList.answBbscttInnb}">
<li>답변완료</li>
</c:when>
<c:otherwise>
<li>답변대기</li>
</c:otherwise>
</c:choose>
</c:if>
<c:if test="${bbsInfo.ntcDeYn eq 'Y'}">
<c:choose>
<c:when test="${resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'Y'}">
<li><c:out value="${ resultList.ntcBgnDe }"/> ~ <c:out value="${ resultList.ntcEndDe }"/></li>
</c:when>
<c:when test="${ resultList.ntcAt eq 'Y' && resultList.ntcPdSetupAt eq 'N'}">
<li>상시공지</li>
</c:when>
</c:choose>
</c:if>
<c:if test="${bbsInfo.inqireCntYn eq 'Y'}">
<li>조회수 : <fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,###"/></li>
</c:if>
<c:if test="${bbsInfo.registDtYn eq 'Y'}">
<li><c:out value="${ resultList.sumRegistDt}"/></li>
</c:if>
<c:if test="${bbsInfo.regusrNmYn eq 'Y'}">
<li>
<c:choose>
<c:when test="${resultList.regusrDvCd eq '99'}">
<c:out value="${ resultList.maskingRegusrNm}"/>[비회원]
</c:when>
<c:when test="${resultList.regusrDvCd eq '03'&& not empty resultList.npayBbscttSnb}">
naverpay
</c:when>
<c:when test="${resultList.regusrDvCd eq '02'}">
<c:out value="${ resultList.mngrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '01' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
(<c:out value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '02' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.regusrId}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '03' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '04' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '05' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>
(<c:out value="${ resultList.regusrId}"/>,<c:out
value="${ resultList.mbrGradNm}"/>)
</c:when>
<c:when test="${bbsInfo.wrterIndictTyCd eq '06' && resultList.regusrDvCd eq '01'}">
<c:out value="${ resultList.maskingRegusrNm}"/>(<c:out
value="${ resultList.regusrId}"/>)
</c:when>
</c:choose>
</li>
</c:if>
</ul>
</a>
<c:if test="${bbsInfo.answRegist eq 'Y'}">
<c:if test="${not empty resultList.answBbscttInnb}">
<a class="eventList__item dtlBtn item" style="cursor:pointer" >
<input type="hidden" class="passwordAt" value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<div class="eventList__top">
<i class="icon icon_reply"></i>
<c:out value="${ resultList.maskingRegusrNm}"/>님의 소중한 문의입니다.
<c:if test="${resultList.newAt eq 'Y'}">
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }">
<i class="icon icon_lock"></i>
</c:if>
</div>
<ul class="eventList__list">
<li><c:out value="${ resultList.mngrNm}"/></li>
<li><c:out value="${ resultList.sumAnswRegistDt}"/></li>
</ul>
</a>
</c:if>
</c:if>
</c:forEach>
</div>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text"><spring:message code="common.nodata"/></p>
</div>
</div>
</c:otherwise>
</c:choose>

View File

@@ -0,0 +1,222 @@
<%@ 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 : NoticeListR.jsp
Description :모바일 샘플.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 최남식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function (){
/*헤더에 타이틀 set*/
fn_set_header_title("고객센터");
/*게시판 이동*/
$(".moveBbsBtn").on("click",function(){
const bbsId = $(this).val();
const authDv = $(this).attr("auth-dv");
const reqUrl = $(this).attr("req-url");
fn_move_bbs(bbsId,authDv,reqUrl);
});
//상세보기
$(".dtlBtn").on("click", function () {
const bbscttInnb = $(this).find(".bbscttInnb").val();
fn_move_dtl(bbscttInnb);
});
});
/*********************************************************
* 목록 조회 혹은 등록 폼 이동
* bbsId : 해당 게시판 아이디
* authDv : subpage인지 csc인지 (csc:이용안내, 공지사항, faq, 제안하기)
*********************************************************/
const fn_move_bbs = (bbsId, authDv, reqUrl) => {
const hiddenForm = $("#hiddenForm");
if (hiddenForm.length > 0) {
hiddenForm.remove();
}
const form = document.createElement("form");
form.id = "hiddenForm";
form.action = "/sopmal/csc/selectBbscttAuth";
form.method = "POST";
fn_create_input("bbsId", bbsId, form);
fn_create_input("authDv", authDv, form);
fn_create_input("reqUrl", reqUrl, form);
document.body.appendChild(form);
form.submit();
}
//input 생성 함수
const fn_create_input = (name, value, tgtForm) => {
const input = document.createElement('input');
input.setAttribute("type", "hidden");
input.setAttribute("name", name);
input.setAttribute("value", value);
tgtForm.appendChild(input);
}
//공지사항 상세 이동
const fn_move_dtl = (bbscttInnb) => {
$("#noticeBbscttInnb").val(bbscttInnb);
$("#noticeDtlForm").submit();
}
</script>
<body>
<%--쇼핑몰정보--%>
<c:set var = "sopmalInfo" value="${resultMap.sopmalInfo[0]}"/>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<div class="customerMain">
<div class="btnTabLinks">
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '04'}">
<button class = "btnTabLinks__link" onclick="location.href='<c:out value="${topMenuList.url}"/>'" id = "<c:out value="${topMenuList.bbsId}"/>"><c:out value="${topMenuList.ctgryNm}"/></button>
</c:if>
</c:forEach>
</c:if>
</div>
<div class="sub-box">
<h3 class="customerMain__innerTitle">자주묻는질문</h3>
<ul class="customerMain__boardList">
<c:forEach var = "faqList" items="${resultMap.cscBbsctt.faqList}">
<li>
<details>
<summary>
<c:if test = "${not empty faqList.answCn}">
<span class="customerMain__boardCategory">[<c:out value="${faqList.answCn}"/>]</span>
</c:if>
<c:out value = "${faqList.sj}" escapeXml="false"/>
</summary>
<div class="customerMain__boardContent ck-content">
<c:out value = "${faqList.cn}" escapeXml="false"/>
</div>
</details>
</li>
</c:forEach>
</ul>
<button class="customerMain__more moveBbsBtn" value ="faq" auth-dv="REDNG" req-url = "csc">전체보기</button>
</div>
<div class="sub-box">
<h3 class="customerMain__innerTitle">공지사항</h3>
<c:set var = "noticeBbsInfo" value = "${resultMap.noticeBbsInfo}"/>
<form id = "noticeDtlForm" action="/sopmal/csc/selectBbscttDtlInqire" method="post">
<input type = "hidden" name = "bbsId" value = "<c:out value = "${noticeBbsInfo.bbsId}"/>"/><%--게시판아이디--%>
<input type = "hidden" name = "bbsTyCd" value = "<c:out value = "${noticeBbsInfo.bbsTyCd}"/>"/><%--게시판타입--%>
<input type = "hidden" name = "recomendGoodsExpsrAt" value = "<c:out value = "${noticeBbsInfo.recomendGoodsExpsrAt}"/>"/><%--추천상품노출여부--%>
<input type = "hidden" name = "prevNext" value = "<c:out value = "${noticeBbsInfo.prevNext}"/>"/><%--이전글다음글노출여부--%>
<input type = "hidden" name = "bbscttInnb" id = "noticeBbscttInnb" value = ""/><%--타겟 게시글 고유번호--%>
<input type = "hidden" name = "useAt" value = "Y"/><%--사용자 노출 조건--%>
<input type = "hidden" name = "expsrAt" value = "Y"/><%--사용자 노출 조건--%>
<input type = "hidden" name = "reqUrl" value = "csc"/><%--권한체크 요청 url--%>
<input type = "hidden" name = "authDv" value = "CM"/><%--상세 권한체크--%>
</form>
<ul class="customerMain__boardList">
<%--반복문 시작--%>
<c:forEach var = "noticeList" items="${resultMap.cscBbsctt.noticeList}">
<li class="dtlBtn">
<input type="hidden" class="bbscttInnb" value="<c:out value="${noticeList.bbscttInnb}"/>">
<a>
<c:out value="${noticeList.sj}" escapeXml="false"/>
<span class="customerMain__boardDate">
<c:out value="${noticeList.sumRegistDt}"/>
</span>
</a>
</li>
</c:forEach>
<%--반복문 종료--%>
</ul>
<button class="customerMain__more moveBbsBtn" value="notice" auth-dv="REDNG" req-url = "csc">전체보기</button><%--TODO::공지사항 목록 조회 이동--%>
</div>
<c:if test = "${sopmalInfo.cscTelnbOrdrPosblAt eq 'Y'}">
<div class="sub-box">
<div class="mainNotice__customerContact mainNotice__customerContact--moreInfo">
<i class="icon icon_notice03"></i>
<div class="mainNotice__customerContact__right">
<h4 class="notice__title customer-service">고객센터</h4>
<c:if test = "${not empty sopmalInfo.cscTelnb}">
<span class="notice__number"><c:out value="${sopmalInfo.cscTelnb}"/></span>
</c:if>
<p class="notice__paragraph">
<c:if test = "${not empty sopmalInfo.cscWkdayWorkTme}">
<span class="notice__text01"><c:out value = "${sopmalInfo.cscWkdayWorkTme}"/></span>
</c:if>
<c:if test = "${not empty sopmalInfo.cscLunchTme}">
<span class="notice__text02">(<c:out value = "${sopmalInfo.cscLunchTme}"/>)</span>
</c:if>
<c:if test = "${not empty sopmalInfo.cscRstde}">
<br><span class="notice__text03"><c:out value = "${sopmalInfo.cscRstde}"/></span>
</c:if>
</p>
<div class="notice__moreInfo">
<dl>
<dt>메일문의</dt>
<dd><c:out value = "${sopmalInfo.emailAtmcSndngDsptchAdres}"/></dd>
</dl>
<c:if test="${not empty resultMap.nbkkList.acntSetup}">
<c:set var="loopBreak" value="false"/>
<c:forEach var="acntSetup" items="${resultMap.nbkkList.acntSetup}">
<c:if test="${not loopBreak}">
<c:if test="${acntSetup.acntDtlDvCd eq '01'}">
<dl>
<dt>입금계좌</dt>
<dd><c:out value="${acntSetup.bankNm}"/> <c:out value="${acntSetup.acntnb}"/></dd>
</dl>
<dl>
<dt>예금주</dt>
<dd><c:out value="${acntSetup.dpstrNm}"/></dd>
</dl>
<c:set var="loopBreak" value="true"/>
</c:if>
</c:if>
</c:forEach>
</c:if>
</div>
</div>
</div>
</div>
</c:if>
<div class="fullBtnSection">
<button class="btn md gray2 full moveBbsBtn" value = "use_guidance" auth-dv="REDNG" req-url = "useGuidance">
사이트 이용안내
</button>
</div>
</div>
</div>
<!-- Top 버튼 -->
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i>
<span class="visually-hidden">위로 가기</span>
</button>
</div>
</main>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,108 @@
<%@ 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 : EvtListR.jsp
Description : 이벤트 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-30 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<c:set var = "bbscttVO" value = "${resultMap.bbsctt}"/>
<c:set var = "bbsInfo" value = "${resultMap.bbsInfo}"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<div class="progressEvents__item item">
<a class="dtlBtn" style="cursor:pointer">
<input type="hidden" class="passwordAt" value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<div class="progressEvents__image">
<img src="<c:out value ="${cdnurl}${resultList.reprsntImgSysFilNm}"/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</div>
<div class="progressEvents__text">
<h4 class="progressEvents__title">
<c:out value ="${resultList.sj}" escapeXml="false"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<fmt:formatNumber value="${resultList.cmtCnt}" pattern="#,###"/>)
</c:if>
</h4>
<div class="progressEvents__bottom">
<span class="progressEvents__dDay">
<c:choose>
<c:when test="${resultList.ntcePdSetupAt eq 'Y'}">
<c:choose>
<c:when test="${ resultList.dDay < 0}">종료</c:when>
<c:otherwise>D-<c:out value="${ resultList.dDay }"/></c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
상시
</c:otherwise>
</c:choose>
</span>
<p class="progressEvents__date">
<c:choose>
<c:when test="${resultList.ntcePdSetupAt eq 'Y'}"><%--노출기간이 있는경우--%>
<c:out value="${ resultList.ntceBgnDe }"/>~<c:out value="${ resultList.ntceEndDe }"/>
</c:when>
<c:otherwise>
<c:out value="${ resultList.sumRegistDt }"/>~상시진행
</c:otherwise>
</c:choose>
</p>
</div>
<ul class="eventList__list">
<li><c:out value="${resultList.sumRegistDt}"/></li>
<li>조회 <fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,###"/></li>
<c:if test = "${bbsInfo.bbscttEvlUseAt eq 'Y'}">
<li>
추천 <c:if test = "${bbsInfo.bbscttEvlRecomendStep eq '02'}">/비추천</c:if>
<fmt:formatNumber value="${resultList.recommendCnt}" pattern="#,###"/><c:if test = "${bbsInfo.bbscttEvlRecomendStep eq '02'}">/<fmt:formatNumber value="${resultList.nonrecommendCnt}" pattern="#,###"/></c:if>
</li>
</c:if>
<li><c:out value="${resultList.mngrNm}"/></li>
</ul>
</div>
</a>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="progressEvents">
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">진행중인 이벤트 내역이 없습니다.</p>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,73 @@
<%@ 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 : EvtListR.jsp
Description : 이벤트 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-30 김혜인 최초 생성
--%>
<!DOCTYPE html>
<c:set var = "bbscttVO" value = "${resultMap.bbsctt}"/>
<html lang="ko">
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<div class="eventList">
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<a class="eventList__item dtlBtn item" style="cursor:pointer" >
<input type="hidden" class="passwordAt"
value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<!-- 이벤트 결과 썸네일 추가-->
<div class="progressEvents__image">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="<c:out value ="${cdnurl}${resultList.reprsntImgSysFilNm}"/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</div>
<div class="eventList__top">
<span class="eventList__badge eventList__badge--closed">이벤트 종료</span>
<p class="eventList__date"><c:out value="${resultList.sumRegistDt}"/></p>
</div>
<p class="eventList__title">
<c:out value="${resultList.sj}" escapeXml="false"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<c:out value="${resultList.cmtCnt}"/>)
</c:if>
</p>
</a>
</c:forEach>
</div>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">당첨자 발표 내역이 없습니다.</p>
</div>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,55 @@
<%@ 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" %>
<div class="listTop content">
<span class="listTop__data">검색 <em><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></em> 건</span>
</div>
<div class="sub-box content">
<c:choose>
<c:when test="${not empty resultMap.resultList.resultList}">
<ul class="customerMain__boardList" id = "infinite-list">
<c:forEach var="resultList" items="${resultMap.resultList.resultList}">
<li>
<input type="hidden" name="bbscttInnb" value="${resultList.bbscttInnb}">
<details>
<summary>
<c:if test = "${not empty resultList.answCn}">
[<c:out value="${resultList.answCn}"/>]
</c:if>
<c:out value="${resultList.sj}" escapeXml="false"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<span class="customerMain__boardDate"><c:out value="${resultList.sumRegistDt}"/></span>
</summary>
<div class="customerMain__boardContent ck-content">
<c:out value="${resultList.cn}" escapeXml="false"/>
</div>
</details>
</li>
</c:forEach>
</ul>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png">
</div>
<p class="noResult__text"><spring:message code="common.nodata"/></p>
</div>
</c:otherwise>
</c:choose>
</div>

View File

@@ -0,0 +1,88 @@
<%@ 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 : EvtListR.jsp
Description : 이벤트 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-30 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<c:set var = "bbscttVO" value = "${resultMap.bbsctt}"/>
<c:set var = "bbsInfo" value = "${resultMap.bbsInfo}"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<c:set var="rnumAt" value="false"/>
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<div class="progressEvents__item item">
<a class="dtlBtn" style="cursor:pointer">
<input type="hidden" class="passwordAt" value="<c:if test = "${resultList.secretBbscttAt eq 'Y'}">Y</c:if>">
<input type="hidden" class="regusr" value="<c:out value="${ resultList.regusr}"/>">
<input type="hidden" class="bbscttInnb" value="<c:out value="${ resultList.bbscttInnb }"/>">
<div class="progressEvents__image">
<img src="<c:out value ="${cdnurl}${resultList.reprsntImgSysFilNm}"/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</div>
<div class="progressEvents__text">
<h4 class="progressEvents__title">
<c:out value ="${resultList.sj}" escapeXml="false"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<fmt:formatNumber value="${resultList.cmtCnt}" pattern="#,###"/>)
</c:if>
</h4>
<div class="progressEvents__bottom">
<p class="progressEvents__date">
</p>
</div>
</div>
<ul class="eventList__list">
<li><c:out value="${resultList.sumRegistDt}"/></li>
<li>조회 <fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,###"/></li>
<c:if test = "${bbsInfo.bbscttEvlUseAt eq 'Y'}">
<li>
추천 <c:if test = "${bbsInfo.bbscttEvlRecomendStep eq '02'}">/비추천</c:if>
<fmt:formatNumber value="${resultList.recommendCnt}" pattern="#,###"/><c:if test = "${bbsInfo.bbscttEvlRecomendStep eq '02'}">/<fmt:formatNumber value="${resultList.nonrecommendCnt}" pattern="#,###"/></c:if>
</li>
</c:if>
<li><c:out value="${resultList.mngrNm}"/></li>
</ul>
</a>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="progressEvents">
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<spring:message code="common.nodata"/>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,84 @@
<%@ 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" %>
<div class="listTop content">
<span class="listTop__data">검색 <em><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></em> 건</span>
</div>
<div class="sub-box content">
<c:choose>
<c:when test="${not empty resultMap.resultList.resultList}">
<ul class="customerMain__boardList">
<script>
</script>
<c:forEach var="resultList" items="${resultMap.resultList.resultList}">
<c:choose>
<c:when test="${resultList.rnum eq 0}">
<li class="customerMain__boardFixed dtlBtn">
<input type="hidden" class="bbscttInnb" value="${resultList.bbscttInnb}">
<a>
<i class="icon icon_notice-speaker"></i>
<c:out value="${resultList.sj}" escapeXml="false"/>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<span class="customerMain__boardDate"><c:out value="${resultList.sumRegistDt}"/></span>
</a>
</li>
</c:when>
<c:otherwise>
<li class="dtlBtn">
<input type="hidden" class="bbscttInnb" value="${resultList.bbscttInnb}">
<a>
<c:out value="${resultList.sj}" escapeXml="false"/>
<c:if test="${fn:length(resultList.sj) > 35}"><%--글자수가 35 넘어가면 아이콘 줄바꿈 시작--%>
<span class="customerMain__boardDate">
</c:if>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-post"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-post"></i>
</c:if>
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
<i class="icon icon_lock"></i>
</c:if>
<c:if test="${fn:length(resultList.sj) > 35}"><%--글자수가 35 넘어가면 아이콘 줄바꿈 종료--%>
</span>
</c:if>
<span class="customerMain__boardDate">
<c:out value="${resultList.sumRegistDt}"/>
</span>
</a>
</li>
</c:otherwise>
</c:choose>
</c:forEach>
</ul>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png">
</div>
<p class="noResult__text"><spring:message code="common.nodata"/></p>
</div>
</c:otherwise>
</c:choose>
</div>

View File

@@ -0,0 +1,109 @@
<%@ 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 : RejectAuthR.jsp
Description : 게시글 사용 권한 없을 시 권한 거부 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-05-29 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<c:if test = "${bbscttVO.reqDv ne 'goodsDtl'}">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<div class="sub-box">
</div>
</div>
<!-- Top 버튼 -->
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i>
<span class="visually-hidden">위로 가기</span>
</button>
</div>
</main>
</div>
</div>
</body>
</c:if>
<div class="microModal microAlert" id="authPop" aria-hidden="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<c:choose>
<c:when test = "${bbscttVO.authResult eq 'N'}">
<c:choose>
<c:when test = "${bbscttVO.authDv eq 'REDNG'}">
<c:out value="${bbscttVO.bbsNm}"/>을(를) 읽을 권한이 없습니다.
<br>고객센터에 문의해주세요.
</c:when>
<c:otherwise>
<c:out value="${bbscttVO.bbsNm}"/>을(를) 등록할 권한이 없습니다.
<br>고객센터에 문의해주세요.
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:choose>
<c:when test = "${bbscttVO.authDv eq 'REDNG'}">
<c:choose>
<c:when test = "${fn:length(bbscttVO.bbsNm) > 0}">
<c:out value="${bbscttVO.bbsNm}"/>은(는) 현재 사용하지 않는 게시판입니다.
</c:when>
<c:otherwise>
현재 사용하지 않는 게시판입니다.
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:out value="${bbscttVO.bbsNm}"/>등록 기능은 현재 사용하지 않습니다.
<br>고객센터에 문의해주세요.
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "closeBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
//goodsDtl 상품 등록 팝업 아닐 시 모달 오픈
if($("#reqDv").val() !== 'goodsDtl'){
openModal("authPop");
}
//모달 닫으면서 뒤로가기
$("#closeBtn").on("click",function(){
closeModal("authPop");
});
</script>
<input type="hidden" value = "<c:out value="${bbscttVO.reqDv}"/>" id = 'reqDv'/>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,145 @@
<%@ 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 : NoticeListR.jsp
Description :모바일 샘플.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 최남식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function (){
/*헤더에 타이틀 set*/
fn_set_header_title("이용안내");
let listItem = $(".userGuideList__item");
listItem.on("click", function () {
let idx = $(this).index();
let itmInnb = $(this).attr("itm-innb");
fn_select_cn(idx, itmInnb);
});
// 고객센터 메인 이동
$(document).on('click', '.header__toBack__btn', function () {
location.href = '/sopmal/csc/selectCscMainForm';
});
});
//내용 조회
const fn_select_cn = (idx, itmInnb) => {
const bbsId = $("[name='bbsId']").val();
$.ajax({
type: "post",
data: {
itmInnb: itmInnb,
bbsId: bbsId
},
url: "/sopmal/csc/selectUseGuidanceInqire",
success: function (data) {
//내용 set
$(".userGuideList__item").eq(idx).find(".use-guide").empty();
fn_set_cn(idx, data);
}
});
}
// 내용 set
const fn_set_cn = (idx, data) => {
let cn = '';
data = JSON.parse(data.resBody.result);
if (data.resultList.length > 0) {
data.resultList.forEach(function (item) {
if (item !== null && item.cn !== null) {
cn += item.cn;
}
});
} else {
cn = `<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png">
</div>
<p class="noResult__text">이용안내가 없습니다</p>
</div>`;
}
$(".userGuideList__content").eq(idx).find(".use-guide").html(cn);
}
</script>
<body>
<%--게시판 정보--%>
<c:set var="bbsInfo" value="${resultMap.bbsInfo}"/>
<%--분류 목록--%>
<c:set var="itmList" value="${resultMap.itmList}"/>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<div class="userGuide">
<div class="sub-box">
<form id="hiddenForm">
<input type="hidden" id = "bbsId" name="bbsId" value="<c:out value='${bbsInfo.bbsId}'/>">
<div class="userGuideList">
<c:choose>
<c:when test = "${not empty itmList}">
<c:forEach var="itm" items="${itmList}">
<details class="userGuideList__item" itm-innb ="<c:out value='${itm.itmInnb}'/>">
<summary class="userGuideList__top">
<div class="userGuideList__topInner">
<div class="userGuideList__info">
<p class="userGuideList__info__title"><c:out value = "${itm.itmCn}"/></p>
<span class="userGuideList__top__chevron"></span>
</div>
</div>
</summary>
<div class="userGuideList__content">
<h5 class="userGuideList__innerTitle"><c:out value = "${itm.itmCn}"/></h5>
<div class="use-guide"></div>
</div>
</details>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png">
</div>
<p class="noResult__text"><spring:message code="common.nodata"/></p>
</div>
</c:otherwise>
</c:choose>
</div>
</form>
</div>
</div>
</div>
<!-- Top 버튼 -->
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i>
<span class="visually-hidden">위로 가기</span>
</button>
</div>
</main>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
</body>
</html>