초기소스

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

View File

@@ -0,0 +1,363 @@
<%@ 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>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<script>
$(document).ready(function (){
/*헤더에 타이틀 set*/
fn_set_header_title("상품Q&A내역");
/*마이크로모달 초기화 id 매핑*/
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
/*인피니트 스크롤 함수 호출*/
fn_infinite_scroll(fn_add_list,'','footer');
//아코디언 클릭 시 폼 제출 방지
$(".myQnaList__item").click(function (event) {
$target = $(this);
$details = $(this).closest('details');
if(!$details.attr("open")){ //open상태임
const bbscttInnb = $target.attr("bbsctt-innb");
const idx = $target.index(".myQnaList__item");
fn_select_fileInfo(bbscttInnb, idx);
}
});
//수정 폼 이동 버튼
$(document).on('click', '.updateBtn', function () {
const bbscttInnb = $(this).closest('div').find("[name='bbscttInnb']").val();
const bbsId = $("#bbsId").val();
fn_move_qaUpdt(bbscttInnb, bbsId);
});
//삭제 모달 버튼
$(document).on('click', '.deleteBtn', function () {
const bbscttInnb = $(this).closest('div').find("[name='bbscttInnb']").val();
const goodsInnb = $(this).closest('div').find("[name='goodsInnb']").val();
openModal("confirm_del_alert");
$('#delCfrmBtn').attr('bbsctt-innb', bbscttInnb);
$('#delCfrmBtn').attr('goods-innb', goodsInnb);
});
//삭제 버튼
$(document).on('click', '#delCfrmBtn', function () {
const bbscttInnb = $(this).attr("bbsctt-innb");
const goodsInnb = $(this).attr("goods-innb");
const bbsId = $("#bbsId").val();
const bbsTyCd = $("#bbsTyCd").val();
fn_delete_bbsctt(bbscttInnb, bbsId, bbsTyCd, goodsInnb);
});
//삭제 성공 모달 확인 버튼
$(document).on('click','#delSuccessBtn', function(){
closeModal("success_del_alert");
location.reload();
});
});
//게시글 수정
const fn_move_qaUpdt = (bbscttInnb, bbsId) => {
const form = $('<form>', {
'action': '/sopmal/mpage/act/selectGoodsQnaDtlUpdtForm',
'method': 'get'
}).append(
$('<input>', {
'type': 'hidden',
'name': 'bbscttInnb',
'value': bbscttInnb
})
).append(
$('<input>', {
'type': 'hidden',
'name': 'bbsId',
'value': bbsId
})
)
$('body').append(form);
form.submit();
}
//게시글 삭제
const fn_delete_bbsctt =(bbscttInnb,bbsId,bbsTyCd,goodsInnb)=>{
closeModal("confirm_del_alert");
$.ajax({
type: "post",
url: "/sopmal/csc/deleteBbscttDel",
data: {
"delBbscttInnbArr": bbscttInnb,
"bbsId": bbsId,
"bbsTyCd": bbsTyCd,
"goodsInnbArr": goodsInnb
},
success: function () {
openModal("success_del_alert");
$("#delCfrmBtn").removeAttr("bbscttInnb");
$("#delCfrmBtn").removeAttr("goodsInnb");
}
});
}
//해당 게시물 파일정보 get
const fn_select_fileInfo = (bbscttInnb, idx) => {
$.ajax({
type: "post",
url: "/sopmal/mpage/act/selectFileInfo",
data: {"bbscttInnb": bbscttInnb},
success: function (data) {
const resultData = JSON.parse(data.resBody.result);
const fileInfo = resultData.fileInfo;
let img = '';
const cdnurl = '<c:out value="${cdnurl}"/>';
fileInfo.forEach(function (file) {
img += `<img src="\${cdnurl}\${file.filCours}\/\${file.sysFilNm}\" onerror="this.src='/mobile/images/image_placeholder.png'" alt="\${file.orginlFilNm}\"/>`;
});
$(".myQnaList__item").eq(idx).find(".file").html(img);
}
});
}
//인피니티 스크롤 이벤트 콜백 함수
const fn_add_list = () => {
if($("#evtOccrrncAt").val() === 'continue'){
/*다음 페이지로 이동*/
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex+1);
$.ajax({
type: "post",
data: {
bbsId: $("#bbsId").val(),
pageIndex: $("#pageIndex").val()
},
url: "/sopmal/mpage/act/selectGoodsQnaInqireAjax",
success: function (data) {
fn_append_List(data);//DATA append 함수
},
});
}
}
// data append 함수
const fn_append_List = (data) => {
data = JSON.parse(data.resBody.result);
let resultData = data.resultList.resultList;
let list = ``;
if(resultData.length > 0){
$("#evtOccrrncAt").val("continue");
resultData.forEach(function (item) {
Object.keys(item).forEach(function (key) {
if (item[key] === null) {
item[key] = "";
}
});
});
// 리스트를 지정된 요소에 추가
resultData.forEach(function(item) {
//분류
let answCn = ``;
if (item.answCn !== null) {
answCn = `[\${item.answCn}]`
}
//답변여부
let answSttus = ``;
let answBbscttCn = ``;
let updtAt= `` ;
if (item.answBbscttInnb !== null) {
answSttus = `<span class="text-complete">답변완료</span>`;
answBbscttCn = `<div class="ck-content">\${item.answBbscttCn}</div>`;
updtAt = ``;
} else {
answSttus = `<span class="text-waiting">답변대기</span>`;
answBbscttCn = `답변 등록 중 입니다.`;
updtAt = `<button type="button" class="textBtns__btn updateBtn"><spring:message code="button.update"/></button>`;
}
list += `<details class="myQnaList__item" bbsctt-innb = "\${item.bbscttInnb}">
<summary class="myQnaList__top">
<div class="myQnaList__image">
<a href="" onclick = "fn_move_goods_dtl(\${item.goodsInnb}); return false;">
<img src="\${item.img}"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</a>
</div>
<div class="myQnaList__right">
<div class="myQnaList__info">
<p class="myQnaList__info__name">\${item.goodsNm}</p>
<p class="myQnaList__info__question">
<span class="category">\${answCn}</span>
\${item.sj}
</p>
<p class="myQnaList__info__status">
<span>
\${answSttus}
</span>
<span class="myQnaList__info__date">\${item.sumRegistDt}</span>
</p>
<span class="myQnaList__top__chevron"></span>
</div>
</div>
</summary>
<div class="myQnaList__answer">
<p class="myQnaList__answer__question">
\${item.cn}
</p>
<br>
<div class="file"></div>
<br>
<div class="myQnaList__answer__reply">
<p class="myQnaList__answer__reply__text">
<span class="myQnaList__answer__badge">답변</span>
\${answBbscttCn}
</p>
</div>
<div class="textBtns">
<input type = "hidden" name = "bbscttInnb" value = "\${item.bbscttInnb}">
<input type = "hidden" name = "goodsInnb" value = "\${item.goodsInnb}">
<button type="button" class="textBtns__btn deleteBtn"><spring:message code="button.delete"/></button>
\${updtAt}
</div>
</div>
</details>`;
});
$(".myQnaList__item").last().after(list);
} else {
/*데이터 조회 null일시 그 전 페이지 인덱스로 변경*/
$("#evtOccrrncAt").val("stop");
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex - 1);
}
};
</script>
<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="myQnaList">
<div class="sub-box">
<c:set value="${resultMap.bbsInfo}" var = "bbsInfo"/>
<input type = "hidden" value = "<c:out value="${bbsInfo.bbsId}"/>" id = "bbsId">
<input type = "hidden" value = "<c:out value="${bbsInfo.bbsTyCd}"/>" id = "bbsTyCd">
<input type = "hidden" name="slangFlterUseAt" id = "slangFlterUseAt" value = "<c:out value="${bbsInfo.slangFlterUseAt}"/>">
<input type = "hidden" value = "<c:out value="${resultMap.bbsctt.pageIndex}"/>" name = "pageIndx" id = "pageIndex">
<input type="hidden" id="evtOccrrncAt" value="continue"/><%--인피니티스크롤 이벤트 발생 여부--%>
<c:choose>
<c:when test = "${ not empty resultMap.resultList.resultList }">
<c:forEach var="resultList" items="${ resultMap.resultList.resultList}">
<details class="myQnaList__item" bbsctt-innb = "<c:out value = '${resultList.bbscttInnb}'/>">
<summary class="myQnaList__top">
<div class="myQnaList__image">
<a href="" onclick = "fn_move_goods_dtl(<c:out value = '${resultList.goodsInnb}'/>); return false;">
<img src="<c:out value = '${cdnurl}${resultList.img}'/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="해당 이미지에 대한 설명">
</a>
</div>
<div class="myQnaList__right">
<div class="myQnaList__info">
<p class="myQnaList__info__name"><c:out value="${resultList.goodsNm}"/></p>
<p class="myQnaList__info__question">
<span class="category"><c:if test = "${not empty resultList.answCn}">[<c:out value="${resultList.answCn}"/>]</c:if></span>
<c:out value="${resultList.sj}"/>
</p>
<p class="myQnaList__info__status">
<span>
<c:choose>
<c:when test = "${not empty resultList.answBbscttInnb}">
<span class="text-complete">답변완료</span>
</c:when>
<c:otherwise>
<span class="text-waiting">답변대기</span>
</c:otherwise>
</c:choose>
</span>
<span class="myQnaList__info__date"><c:out value="${resultList.sumRegistDt}"/></span>
</p>
<span class="myQnaList__top__chevron"></span>
</div>
</div>
</summary>
<div class="myQnaList__answer">
<p class="myQnaList__answer__question">
<c:out value="${resultList.cn}"/>
</p>
<br>
<div class="file"></div>
<br>
<div class="myQnaList__answer__reply">
<p class="myQnaList__answer__reply__text">
<span class="myQnaList__answer__badge">답변</span>
<c:choose>
<c:when test = "${not empty resultList.answBbscttInnb}">
<div class = "ck-content"><c:out value="${resultList.answBbscttCn}" escapeXml="false"/></div>
</c:when>
<c:otherwise>
답변 등록 중 입니다.
</c:otherwise>
</c:choose>
</p>
</div>
<div class="textBtns">
<input type = "hidden" name = "bbscttInnb" value = "<c:out value="${resultList.bbscttInnb}"/>">
<input type = "hidden" name = "goodsInnb" value = "<c:out value="${resultList.goodsInnb}"/>">
<button type="button" class="textBtns__btn deleteBtn"><spring:message code="button.delete"/></button>
<c:if test="${empty resultList.answBbscttInnb}">
<button type="button" class="textBtns__btn updateBtn"><spring:message code="button.update"/>
</button>
</c:if>
</div>
</div>
</details>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">등록된 상품 문의가 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</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,990 @@
<%@ 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 : BbscttUpdtU.jsp
Description :게시글 수정(모바일).jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-24 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function () {
//hidden value set
fn_update_hidden_value();
/*헤더에 타이틀 set*/
const title = '<c:out value="${resultMap.bbsInfo.bbsNm}" escapeXml="false"/>';
fn_set_header_title(title);
fn_collect_event();
});
/*************************************************************
이벤트 함수
*************************************************************/
const fn_collect_event = () => {
//내용 set
fn_select_cn();
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
/*휴대전화 포매팅 함수*/
fn_set_event("#answMbtlnb","input",fn_fmt_telno);
/*값 set*/
if($("#answMbtlnb").val()){
const fmtMbtlnb = fn_format_mbtlnb($("#answMbtlnb").val());
$("#answMbtlnb").val(fmtMbtlnb);
}
//내용 텍스트 <br>태그 엔터값으로 replace
const cn = $("#cnBbsUpdt");
let str = cn.text();
str = str.replaceAll(/<br>/ig, '\n');
str = str.replaceAll(/<\/br>/ig, '\n');
str = str.replaceAll(/<br \/>/ig, '\n');
//내용 내 태그 없애기
str = str.replace(/<\/?[^>]+(>|$)/g, "");
//내용 앞에 첫 문자열 앞 공백 지우기
str = str.trimStart();
cn.text(str);
//분류 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("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);
});
//수정 버튼 이벤트 (수정 컨펌 모달 호출)
$(document).on("click", "#updtBtn", function () {
$("#confirmBtn").click();
});
//수정 컨펌 이벤트(수정 함수 호출)
$("#confirmPopBtn").on("click",function(){
$("#clsConfirmPopBtn").click();//모달닫기
fn_update_bbsctt();//수정 함수 호출
});
//수정 완료 모달 > 확인 버튼 이벤트 (새로고침)
$(document).on("click", "#alertBtn", function () {
$('html').scrollTop(0);
location.reload();
});
/*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);
}
});
}
/*********************************************************
* 게시글 내용 조회
*********************************************************/
const fn_select_cn = function () {
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);
}
});
}
//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_update_bbsctt = function () {
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);
});
}
//사용자 등록 시 노출 여부 Y
formData.append("expsrAt", "Y");
//비밀번호 set
const password = "<c:out value = "${ resultMap.bbscttInfo.bbscttInfo.password }"/>";
if (password.length){
formData.append("password", password);
}
//입력항목 체크박스 disabled처리
$('.checkbox input[type="checkbox"]').each(function () {
if (!$(this).prop('checked')) {
fn_ctrl_disable([".checkbox"],);
}
});
let cn = $("#cnBbsUpdt").val();
cn = $.trim(cn);
$("#cnBbsUpdt").val(cn);
//폼 내 input값 append
saveForm.serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
$.ajax({
type: 'post',
url: url,
enctype:"multipart/form-data",
data: formData,
processData: false,
contentType: false,
success: function (result) {
$("#successBtn").click();
}
});
fn_ctrl_disable("", [".checkbox"]);
}
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");
});
}
});
}
/*상품qna 버튼 클릭 제어*/
function fn_prevent_click(event) {
event.preventDefault(); // 체크박스 상태 변경 방지
}
</script>
<body>
<c:set value="${resultMap.bbscttInfo.bbscttInfo}" var="bbscttInfo"/>
<c:set value="${resultMap.bbscttVO}" var="bbscttVO"/>
<c:set value="${resultMap.bbscttInfo.qesitmAnswList}" var="qesitmAnswList"/>
<c:set value="${resultMap.bbscttInfo.fileInfo}" var="fileInfo"/>
<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.cdnurl')" var="cdnurl"/>
<!-- 메인 컨텐츠 영역 -->
<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="bbsUpdtForm">
<%--게시판 설정--%>
<input type="hidden" name="filAtch" value="${bbsInfo.filAtch }"/>
<input type="hidden" name="slangFlterUseAt" value="${bbsInfo.slangFlterUseAt}"/>
<input type="hidden" id = "bbsId" name="bbsId" value="${bbsInfo.bbsId }"/>
<input type="hidden" id = "bbsTyCd" name="bbsTyCd" value="${bbsInfo.bbsTyCd }"/>
<input type="hidden" id="pgeVtcCnt" name="pgeVtcCnt" value="${ bbsInfo.pgeVtcCnt }"/>
<input type="hidden" id="pgeWthCnt" name="pgeWthCnt" value="${ bbsInfo.pgeWthCnt }"/>
<input type="hidden" id="prevNext" name="prevNext" value="${ bbsInfo.prevNext }"/>
<input type="hidden" id="sknTyCd" name="sknTyCd" value="${ bbsInfo.sknTyCd }"/>
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${ bbsInfo.sopmalCd }"/>
<%--vo 관련(요청 구분 등)--%>
<input type="hidden" id="reqDv" value="<c:out value = '${bbscttVO.reqDv}'/>" name="reqDv"/>
<input type="hidden" id="reqUrl" value="<c:out value = '${bbscttVO.reqUrl}'/>" name="reqUrl"/>
<input type="hidden" id="listAt" name="listAt" value="${ bbscttVO.listAt }"/>
<%--게시글 관련--%>
<input type="hidden" id="bbscttInnb" name="bbscttInnb" value="${ bbscttInfo.bbscttInnb }"/>
<%--파일 관련--%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<input type="hidden" id="acceptFileExtensions" name="acceptFileExtensions" value="${ acceptFileExtensions}"/>
<%--존재 파일 여부 체크--%>
<c:choose>
<c:when test = "${not empty fileInfo}"><c:set var="filExtAt" value="Y"/></c:when>
<c:otherwise><c:set var="filExtAt" value="N"/></c:otherwise>
</c:choose>
<input type="hidden" id="filExtAt" name="filExtAt" value="${filExtAt}"/>
<input type="hidden" id="extFiles" name="extFiles" value=""/>
<input type="hidden" id="filesInfo" name="filesInfo"/>
<input type="hidden" id="extFilChangeAt" name="extFilChangeAt" value="N"/>
<%--입력 폼 영역--%>
<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 = "${bbscttInfo.regusrDvCd eq '99'}">
<input type="text" class="input-text full" name="regusrNm"
placeholder="이름" title="이름" value = "<c:out value="${bbscttInfo.regusrNm}"/>">
</c:when>
<c:otherwise>
<input type="text" class="input-text full" name="regusrNm"
placeholder="이름" title="이름" value = "<c:out value="${bbscttInfo.regusrNm}"/>" readonly>
</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>
<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>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">상품</div>
<c:forEach var="goods" items="${goods}">
<div class="userForm__inputBox__itemTitle">
<img src="${cdnurl}${goods.img}" width="64" alt="상품이미지" onerror="this.src='/pc/images/image_placeholder.png'">
<c:out value="${goods.goodsNm}"/>
<input type="hidden" name="goodsInnbArr[]" value="${goods.goodsInnb}"/>
</div>
</c:forEach>
</div>
<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"
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
value = <c:out value="${itmAnswList.qesitmInnb}"/>
</c:if>
</c:forEach>/>
<%--답변내용 --%>
<input type="hidden" name="answCnArr[]" id="answCn"<c:forEach
var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
value = <c:out value="${itmAnswList.answCn}"/>
</c:if>
</c:forEach>/>
<%--답변여부 --%>
<input type="hidden" name="qesitmAtArr[]" id="qesitmAt"
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
<c:choose>
<c:when test="${empty itmAnswList.answCn}">value="N"</c:when>
<c:otherwise>value="Y"</c:otherwise>
</c:choose>
</c:if>
</c:forEach>>
<select class="md" id="qesitmNmC" name="itmInnbArr[]">
<option value="">분류 선택</option>
<c:forEach var="itm" items="${itmList}" varStatus="status">
<option value="<c:out value="${itm.itmInnb}"/>"
qesitm-innb="${itm.qesitmInnb}" answ-Cn="${itm.itmCn}"
qesitm-nm="${itm.qesitmNm}"
<%--분류 답변 값 유지--%>
<c:forEach var="itmAnswList" items="${qesitmAnswList}">
<c:if test="${itmAnswList.aditItmDvCd eq '03'}">
<c:if test="${itm.itmInnb eq itmAnswList.itmInnb }">selected</c:if>
</c:if>
</c:forEach>>
<c:out value="${itm.itmCn}"/>
</option>
</c:forEach>
</select>
</div>
</div>
</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" 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__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:out value = "${bbscttInfo.sj}"/>">
<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"
<c:if test="${bbscttInfo.secretBbscttAt eq 'Y'}">checked</c:if>
onclick="fn_prevent_click(event);">
<span class="check"></span>
<span class="control-label">비밀글</span>
</label>
</div>
</c:if>
</div>
<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>
<%--게시판설정(파일첨부사용여부)--%>
<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">이미지 등록</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}"/>
</c:if>
<div class="bottomBtnControls">
<button type="button" class="btn xl theme" id = "updtBtn"><spring:message code="button.update"/>하기</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</main>
</div>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</body>
<%--수정 성공 모달--%>
<button type="button" style="display:none;" data-micromodal-trigger="successUpdtModal" id = "successBtn"></button>
<div class="microModal microAlert" id="successUpdtModal" 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.update"/>
</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>
<%--수정 컨펌 모달--%>
<button type="button" style="display:none;" data-micromodal-trigger="confirmUpdtModal" id = "confirmBtn"></button>
<div class="microModal microAlert" id="confirmUpdtModal" 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="confirm.common.update"/>
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close aria-label="창 닫기" id = "clsConfirmPopBtn"><spring:message code="button.cancel"/></button>
<button class="microModal__btn microModal__btn-primary" id = "confirmPopBtn"><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: "서버에서 응답을 받지 못했습니다.",
init: function () {
let dropzoneInstance = this;
let imageData = ${fileInfoGson};
// 각 이미지를 Dropzone에 추가
$.each(imageData, function (index, image) {
// Dropzone 파일 객체 생성
let mockFile = {name: image.orginlFilNm, size: image.filMg};
dropzoneInstance.emit("addedfile", mockFile);
const cdnurl = '<c:out value="${cdnurl}"/>';
const imagePath = cdnurl + image.filCours + image.sysFilNm;
dropzoneInstance.emit("thumbnail", mockFile, imagePath);
// 이미지 오류 처리
$(mockFile.previewElement).find("img").on("error", function () {
this.src = '/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;
alert(dictMaxFilesExceeded);
this.removeFile(file);
$(file.previewElement).find(".dz-remove").attr("disabled", true);
}
}
});
// maxFiles 제한 관련 이벤트 핸들러
this.on("maxfilesexceeded", function (file) {
const dictMaxFilesExceeded = myDropzone.options.dictMaxFilesExceeded;
alert(dictMaxFilesExceeded);
this.removeFile(file);
});
}
});
var inputElement = $('input[type="file"].dz-hidden-input');
// name 부여
inputElement.attr('name', 'file');
// id 부여
inputElement.attr('id', 'fileUpload');
if (myDropzone.files.length < maxFiles) {
$(".dz-message").show();
} else {
$(".dz-message").hide();
}
}
//뒤로가기 이벤트 삭제 후 상품문의 페이지로 이동 (수정 후 바로 목록으로 이동)
$(".header__toBack__btn").off("click")
.on("click",function(){
window.location.href="/sopmal/mpage/act/selectGoodsQnaInqire?bbsId=goods_qna";
});
</script>
</html>

View File

@@ -0,0 +1,98 @@
<%@ 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 : MyRvwRForm.jsp
Description :나의리뷰 폼.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-25 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<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="sub-box">
<div class="myReviewItem">
<div class="myReviewItem__top">
<div class="myReviewItem__image">
<img onclick="fn_move_goods_dtl(<c:out value="${resultList.goodsInnb}"/>)"
style="cursor:pointer;"
src="<c:out value="${cdnurl}${resultList.img}"/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="리뷰 상품 사진">
</div>
<div class="myReviewItem__right">
<div class="myReviewItem__info">
<a onclick="fn_move_goods_dtl(<c:out value="${resultList.goodsInnb}"/>)"
style="cursor:pointer;"
class="myReviewItem__info__name"><c:out value="${resultList.goodsNm}"/></a>
<p class="myReviewItem__info__date"><c:out value="${resultList.registDt}"/></p>
</div>
</div>
</div>
<div class="myReviewItem__bottom">
<div class="reviewStars__wrapper">
<c:if test="${not empty resultList.evlScore}">
<div class="reviewStars star-<fmt:formatNumber value="${resultList.evlScore}" pattern="##"/>"></div>
<span class="reviewStars__num"><fmt:formatNumber value="${resultList.evlScore}"
pattern="##"/></span>
</c:if>
</div>
<div class="myReviewItem__reviewText" style="white-space: pre-wrap"><c:out value="${resultList.cn}"/></div>
<button class="myReviewItem__reviewMore" style="display:none;">
<span>더보기</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"
class="css-os8cwr" viewBox="0 0 24 24">
<path fill="#1A1A1A"
d="m11.994 14.487 7.35-7.35c.25-.25.546-.37.888-.362.341.008.637.137.887.387s.375.546.375.888c0 .341-.125.637-.375.887l-7.7 7.675c-.2.2-.425.35-.675.45-.25.1-.5.15-.75.15s-.5-.05-.75-.15c-.25-.1-.475-.25-.675-.45l-7.7-7.7c-.25-.25-.37-.541-.362-.875.008-.333.137-.625.387-.875s.546-.375.888-.375c.341 0 .637.125.887.375l7.325 7.325Z">
</path>
</svg>
</button>
<div class="myReviewItem__thumbs">
<c:if test="${not empty resultMap.resultList.fileList}">
<c:forEach var="fileList" items="${resultMap.resultList.fileList}">
<c:if test="${fileList.bbscttInnb eq resultList.bbscttInnb}">
<a class="fullscreen-trigger swiper-index" href="#"
data-micromodal-trigger="my-review-image">
<img src="<c:out value = '${cdnurl}${fileList.filCours}${fileList.sysFilNm}'/>"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="리뷰사진">
</a>
</c:if>
</c:forEach>
</c:if>
</div>
<div class="textBtns">
<button class="textBtns__btn deleteBtn"
bbsctt-innb="<c:out value = '${resultList.bbscttInnb}'/>"
bbs-id="<c:out value = '${resultList.bbsId}'/>"
bbs-ty-cd="<c:out value = '${resultList.bbsTyCd}'/>"
goods-innb="<c:out value = '${resultList.goodsInnb}'/>">
<spring:message code="button.delete"/>
</button>
</div>
</div>
</div>
</div>
</c:forEach>
<input type="hidden" id="myRvwpageIndex" name="pageIndex"
value="<c:out value='${resultMap.bbscttVO.pageIndex}'/>"/>
<input type="hidden" id="myRvwEvtOccrrncAt" value="continue"/>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">나의 리뷰가 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</html>

View File

@@ -0,0 +1,952 @@
<%@ 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 : MyRvwRForm.jsp
Description :나의리뷰 폼.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-25 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
</head>
<script>
let swiperThumbs;
let swiper;
$(document).ready(function (){
/*헤더에 타이틀 set*/
fn_set_header_title("리뷰내역");
/*버튼 active 상태로 인한 목록 조회*/
$(".boxTab__tabBtn").on("click", function () {
const id = $(this).attr("id");
if (id === 'posblRvw') {
fn_move_writngPosblRvw(1); //작성가능리뷰
} else {
fn_move_myRvw(1);//나의 리뷰
}
});
/*작성 가능 리뷰 조회*/
$(".boxTab__tabBtn").eq(0).click();
//작성 가능 리뷰 함수
fn_collect_posble_event();
fn_regist_rvw_event();
fn_collect_my_rvw_event();//이벤트 함수
});
// 작성 가능한 리뷰 이벤트
const fn_collect_posble_event = () =>{
//리뷰작성 클릭 시 모달 호출
$(document).on("click", ".rvwBtn", function () {
/*주문 상품 옵션 고유번호*/
const ordrGoodsOptnInnb = $(this).attr("ordr-goods-optn-innb");
/*게시판 타입*/
const bbsTyCd = $(this).attr("bbs-ty-cd");
/*주문 상품 옵션 고유번호*/
const goodsInnb = $(this).val();
fn_move_writeRvw(ordrGoodsOptnInnb, bbsTyCd, goodsInnb);
});
}
// 나의 리뷰 이벤트
const fn_collect_my_rvw_event = () => {
/*1.삭제 컨펌 모달 호출*/
$(document).on("click", ".deleteBtn", function () {
const bbscttInnb = $(this).attr("bbsctt-innb");
const bbsId = $(this).attr("bbs-id");
const bbsTyCd = $(this).attr("bbs-ty-cd");
const goodsInnb = $(this).attr("goods-innb");
$('#delCfrmBtn').attr('bbsctt-innb', bbscttInnb);
$('#delCfrmBtn').attr('bbs-id', bbsId);
$('#delCfrmBtn').attr('bbs-ty-cd', bbsTyCd);
$('#delCfrmBtn').attr('goods-innb', goodsInnb);
openModal("confirm_del_alert");
});
/*2.삭제 컨펌 확인 후 삭제 함수 호출*/
$(document).on("click", "#delCfrmBtn", function () {
closeModal("confirm_del_alert");
const bbscttInnb = $(this).attr("bbsctt-innb");
const goodsInnb = $(this).attr("goods-innb");
const bbsId = $(this).attr("bbs-id");
const bbsTyCd = $(this).attr("bbs-ty-cd");
fn_delete_bbsctt(bbscttInnb, bbsId, bbsTyCd, goodsInnb);//3.게시글 삭제 함수 호출
});
/*4.삭제 성공 모달 확인 버튼 클릭시 리스트 재조회*/
$(document).on("click", "#delSuccessBtn", function () {
closeModal("success_del_alert");
fn_move_myRvw(1);
});
// 리뷰 접기/펼치기
$(document).on("click", ".myReviewItem__reviewMore", function () {
if ($(this).hasClass("opened")) {
$(this).removeClass("opened");
$(this).find('span').text('더보기');
$(this).closest('.myReviewItem').find('.myReviewItem__reviewText').removeClass("opened");
} else {
$(this).addClass("opened");
$(this).find('span').text('접기');
$(this).closest('.myReviewItem').find('.myReviewItem__reviewText').addClass("opened");
}
});
// 모달 트리거 이벤트 리스너
$(document).on('click', '.fullscreen-trigger', function (e) {
imgList = $(this).closest(".myReviewItem__thumbs").find("a");
imgHtml = '';
imgList.each(function () {
let img = $(this).html();
imgHtml += `<div class="swiper-slide">\${img}</div> `;
});
$("#my-review-image").find(".swiper-wrapper").each(function () {
$(this).html(imgHtml);
});
if (swiperThumbs) {
swiperThumbs.destroy(true, true);
}
if (swiper) {
swiper.destroy(true, true);
}
// Swiper
swiperThumbs = new Swiper('.myReviewImageThumbs', {
loop: true,
spaceBetween: 4,
slidesPerView: 'auto',
freeMode: true,
watchSlidesProgress: true,
});
swiper = new Swiper('.myReviewImageSlide', {
loop: true,
slidesPerView: 1,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
thumbs: {
swiper: swiperThumbs
}
});
e.preventDefault();
var modalId = $(this).attr('data-micromodal-trigger');
openModal(modalId);
});
// 모달 닫기 이벤트 리스너
$(document).on('click', '.microModal .microModal__close', function () {
var modalId = $(this).closest('.microModal').attr('id');
closeModal(modalId);
});
// 리뷰에서 이미지 클릭시 해당 이미지 순서로 슬라이드 이동
var swiperIndex = document.querySelectorAll('.swiper-index');
$(document).on('click','.swiper-index', function () {
var $parent = $(this).parent();
var $siblings = $parent.find('.fullscreen-trigger');
var clickedIndex = $siblings.index(this);
if (swiper) {
swiper.slideTo(clickedIndex, 0);
}
});
}
//게시글 삭제
function fn_delete_bbsctt(bbscttInnb, bbsId, bbsTyCd, goodsInnb) {
$.ajax({
type: "post",
url: "/sopmal/csc/deleteBbscttDel",
data: {
"delBbscttInnbArr": bbscttInnb,
"bbsId": bbsId,
"bbsTyCd": bbsTyCd,
"goodsInnbArr": goodsInnb
},
success: function () {
openModal("success_del_alert");
$("#delCfrmBtn").removeAttr("bbscttInnb");
$("#delCfrmBtn").removeAttr("goodsInnb");
}
});
}
//인피니티 스크롤 이벤트 콜백 함수
function fn_add_list_my_rvw() {
if ($("#myRvwEvtOccrrncAt").val() === 'continue') {
/*다음 페이지로 이동*/
let pageIndex = parseInt($("#myRvwpageIndex").val(), 10);
$("#myRvwpageIndex").val(pageIndex + 1);
$.ajax({
type: "post",
data: {
pageIndex: $("#myRvwpageIndex").val()
},
url: "/sopmal/mpage/act/selectMyRvwInqireAjax",
success: function (data) {
fn_append_List_my_rvw(data);//DATA append 함수
}
});
}
}
// data append 함수
function fn_append_List_my_rvw(data) {
data = JSON.parse(data.resBody.result);
let resultData = data.resultList.resultList;
let fileData = data.resultList.fileList;
let list = ``;
const cdnurl = '<c:out value="${cdnurl}"/>';
if (resultData.length > 0) {
$("#myRvwEvtOccrrncAt").val("continue");
resultData.forEach(function (item) {
Object.keys(item).forEach(function (key) {
if (item[key] === null) {
item[key] = "";
}
});
let cdnurl = "<c:out value='${cdnurl}'/>";
list += `<div class="sub-box">
<div class="myReviewItem">
<div class="myReviewItem__top">
<div class="myReviewItem__image">
<img onclick="fn_move_goods_dtl(\${item.goodsInnb})"
style="cursor:pointer;"
src="\${cdnurl}\${item.img}"
onerror="this.src='/mobile/images/image_placeholder.png'" alt="리뷰 상품 사진">
</div>
<div class="myReviewItem__right">
<div class="myReviewItem__info">
<a onclick="fn_move_goods_dtl(\${item.goodsInnb})"
style="cursor:pointer;"
class="myReviewItem__info__name">\${item.goodsNm}</a>
<p class="myReviewItem__info__date">\${item.registDt}</p>
</div>
</div>
</div>
<div class="myReviewItem__bottom">
<div class="reviewStars__wrapper">`;
if (item.evlScore != null) {
list += ` <div class="reviewStars star-\${item.evlScore}"></div>
<span class="reviewStars__num">\${item.evlScore}</span>`;
}
list += ` </div>
<div class="myReviewItem__reviewText" style="white-space: pre-wrap">\${item.cn}</div>`;
let moreDv = ``;
if (item.cn.length > 150) {
moreDv = `<button class="myReviewItem__reviewMore" style="display:none;">
<span>더보기</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"
class="css-os8cwr" viewBox="0 0 24 24">
<path fill="#1A1A1A"
d="m11.994 14.487 7.35-7.35c.25-.25.546-.37.888-.362.341.008.637.137.887.387s.375.546.375.888c0 .341-.125.637-.375.887l-7.7 7.675c-.2.2-.425.35-.675.45-.25.1-.5.15-.75.15s-.5-.05-.75-.15c-.25-.1-.475-.25-.675-.45l-7.7-7.7c-.25-.25-.37-.541-.362-.875.008-.333.137-.625.387-.875s.546-.375.888-.375c.341 0 .637.125.887.375l7.325 7.325Z">
</path>
</svg>
</button>`;
}
list += ` \${moreDv}
<div class="myReviewItem__thumbs">`;
//각 게시글 별 파일 리스트
let fileList = ``;
if (fileData !== null) {
fileData.forEach(function (file) {
if (file.bbscttInnb === item.bbscttInnb) {
fileList += `<a class="fullscreen-trigger swiper-index" href="#" data-micromodal-trigger="my-review-image">
<img src="\${cdnurl}\${file.filCours}\${file.sysFilNm}" onerror="this.src='/mobile/images/image_placeholder.png'" alt="리뷰사진">
</a>`;
}
});
}
list += ` \${fileList}
</div>
<div class="textBtns">
<button class="textBtns__btn deleteBtn"
bbsctt-innb="\${item.bbscttInnb}"
bbs-id="\${item.bbsId}"
bbs-ty-cd="\${item.bbsTyCd}"
goods-innb="\${item.goodsInnb}">
<spring:message code="button.delete"/>
</button>
</div>
</div>
</div>
</div>`;
});
$(".sub-box").last().after(list);
//리스트를 지정된 요소에 추가
resultData.forEach(function (item) {
$(".myReviewItem__reviewText").each(function () {
$(this).text($(this).text().trim());
});
});
} else {
/*데이터 조회 null일시 그 전 페이지 인덱스로 변경*/
$("#myRvwEvtOccrrncAt").val("stop");
let pageIndex = parseInt($("#myRvwpageIndex").val(), 10);
$("#myRvwpageIndex").val(pageIndex - 1);
}
}
/*내용 안 이미지를 삭제하고 br 공백 처리하며, 글자가 150미만이면 더보기 버튼 제거*/
const fn_set_rvw_data = () => {
$(".myReviewItem__reviewText").each(function () {
if ($(this).text().length > 100) {
let idx = $(this).index(".myReviewItem__reviewText");
$(".myReviewItem__reviewMore").eq(idx).show();
}
let cn = $('<div>').html($(this).text());
$(this).text(cn.text().trim());
});
}
//분기에 따른 observer 함수 실행
let observer;
const fn_infinite_scroll_my_rvw = () => {
if (observer) {
observer.disconnect(); // Disconnect the existing observer if it exists
}
observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const sttus = $(".headerTab__item.active").attr("id");
if (sttus === 'posblRvwLi') {
fn_add_list_writng_posbl_rvw();
} else {
fn_add_list_my_rvw();
}
}
});
});
const target = document.querySelector('footer');
observer.observe(target);
};
//작성가능리뷰 조회
const fn_move_writngPosblRvw = (pageIndex) => {
const divZone = $(".availableReview");
//작성 가능 리뷰 조회 div
if (!pageIndex) {
$('#wringPosblpageIndex').val(1);
} else {
$('#wringPosblpageIndex').val(pageIndex);
}
$.ajax({
type: "post",
url: "/sopmal/mpage/act/selectWritngPosblRvwInqire",
data: {"pageIndex": pageIndex},
success: function (data) {
if (divZone.html()) {
divZone.empty();
}
divZone.html(data);
fn_change_active_class("#posblRvwLi", "#myRvwLi");
fn_infinite_scroll_my_rvw();//인피니트스크롤
}
});
}
//나의리뷰 조회
const fn_move_myRvw = (pageIndex) => {
const divZone = $(".availableReview");
if (!pageIndex) {
$('#myRvwpageIndex').val(1);
} else {
$('#myRvwpageIndex').val(pageIndex);
}
$.ajax({
type: "post",
url: "/sopmal/mpage/act/selectMyRvwInqire",
data: {"pageIndex": pageIndex},
success: function (data) {
if (divZone.html()) {
divZone.empty();
}
divZone.html(data);
MicroModal.init();
fn_change_active_class("#myRvwLi", "#posblRvwLi");
fn_set_rvw_data();
fn_infinite_scroll_my_rvw();//인피니트 스크롤
}
});
}
/*요청 페이지에 따른 헤더 nav 클래스 변경*/
const fn_change_active_class = (actTarget, removeTarget) => {
$(removeTarget).removeClass("active");
$(actTarget).addClass("active");
}
//등록버튼 debounce
function debounce(func, timeout = 300) {
console.log("debounce시작")
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, timeout);
};
}
const fn_debounce_regFn = debounce(() => fn_regist_bbsctt($("#bbsId").val()));
//리뷰작성 폼 호출
function fn_move_writeRvw(ordrGoodsOptnInnb, bbsTyCd, goodsInnb) {
$.ajax({
type: "post",
url: "/sopmal/mpage/act/selectRvwWritngPopupForm",
data: {
"ordrGoodsOptnInnb": ordrGoodsOptnInnb,
"bbsTyCd": bbsTyCd,
"goodsInnb": goodsInnb
},
success: function (data) {
$(".dz-hidden-input").remove();
$(".sheet__body").html(data);
$("#triggerBtn").click();
}
});
}
//인피니티 스크롤 이벤트 콜백 함수
function fn_add_list_writng_posbl_rvw() {
if ($("#writngPosbleEvtOccrrncAt").val() === 'continue') {
/*다음 페이지로 이동*/
let pageIndex = parseInt($("#writngPosblePageIndex").val(), 10);
$("#writngPosblePageIndex").val(pageIndex + 1);
$.ajax({
type: "post",
data: {
pageIndex: $("#writngPosblePageIndex").val()
},
url: "/sopmal/mpage/act/selectWritngPosblRvwInqireAjax",
success: function (data) {
fn_append_List_writng_posbl_rvw(data);//DATA append 함수
},
});
}
}
// data append 함수
function fn_append_List_writng_posbl_rvw(data) {
let resultData = JSON.parse(data.resBody.result);
resultData = resultData.resultList;
let list = ``;
if (resultData !== null) {
$("#writngPosbleEvtOccrrncAt").val("continue");
resultData.forEach(function (item) {
Object.keys(item).forEach(function (key) {
if (item[key] === null) {
item[key] = "";
}
});
});
// 리스트를 지정된 요소에 추가
resultData.forEach(function (item) {
//옵션명 있는지 확인
let optnNm = ``;
if (item.optnNm !== "") {
optnNm = `<p class="availableReviewItem__info__option">옵션: \${item.optnNm}</p>`;
}
//리뷰 작성 가능 분기
let rvwBtnDv = ``;
if (item.purchsDcsnQy > item.rvwCnt) {
rvwBtnDv = `<button type="button"
class="btn theme md outline open-sheet availableReviewItem__btn rvwBtn open-sheet"
ordr-goods-optn-innb="\${item.ordrGoodsOptnInnb}"
bbs-ty-cd="06"
value='\${item.goodsInnb}'>리뷰작성
</button>`
}
//한달 리뷰 작성 가능 분기
let mtRvwBtnDv = ``;
if (item.mtRvwAt === 'N') {
mtRvwBtnDv = `<button type="button"
class="btn theme md availableReviewItem__btn rvwBtn open-sheet"
ordr-goods-optn-innb="\${item.ordrGoodsOptnInnb}"
bbs-ty-cd="06"
value='\${item.goodsInnb}'>한달리뷰작성</button>`;
}
let cdnurl = '${cdnurl}';
list = `<div class="availableReviewItem">
<div class="availableReviewItem__top">
<div class="availableReviewItem__image">
<button type="button" class="orderList__image" value="\${item.goodsInnb}"
onclick = "fn_move_goods_dtl(\${item.goodsInnb})">
<img src="\${cdnurl}\${item.img}" alt="" onerror="this.src='/mobile/images/image_placeholder.png'">
</button>
</div>
<div class="availableReviewItem__info">
<p class="availableReviewItem__info__date">
<a onclick="" style="cursor:pointer;" class="orderList__orderNum">\${item.ordrInnb}
</a>
</p>
<a class = "availableReviewItem__info__name"
onclick = "fn_move_goods_dtl(\${item.goodsInnb})"
style = "cursor:pointer">\${item.goodsNm}</a>
\${optnNm}
</div>
</div>
<div class="availableReviewItem__bottom">
<div class="availableReviewItem__desc">
<p class="availableReviewItem__descText">작성리뷰수 <em>\${item.rvwCnt}</em></p>
<p class="availableReviewItem__descText">구매확정수 <em>\${item.purchsDcsnQy}</em></p>
</div>
<div class="availableReviewItem__linkContainer">
\${rvwBtnDv}
\${mtRvwBtnDv}
</div>
</div>
</div>`;
$(".availableReviewItem").last().after(list);
});
} else {
/*데이터 조회 null일시 그 전 페이지 인덱스로 변경*/
$("#writngPosbleEvtOccrrncAt").val("stop");
let pageIndex = parseInt($("#writngPosblePageIndex").val(), 10);
$("#writngPosblePageIndex").val(pageIndex - 1);
}
}
/*********************************************************
* 게시글 등록
*********************************************************/
function fn_regist_bbsctt(bbsId) {
disableButton('#regBtn');
let url = '<c:url value="/sopmal/csc/insertBbscttRegist"/>';
let saveForm = $('#bbsRegForm');
let formData = new FormData();
//파일 업로드
let myDropzone = Dropzone.forElement("#image-dropzone");
myDropzone.files.forEach(function (file) {
formData.append("files", file);
/*한달리뷰시 파일존재여부 체크(validation)*/
});
if (formData.get("files") == null) {
$("#filExtAt").val("N");
}
//내용 get해서 sj
$("[name='sj']").val("");
const cn = $("#cn").val();
const removeTag = cn.replace(/<[^>]+>/g, ''); // HTML 태그 제거
let truncatedSj = removeTag.slice(0, 28); // 28글자로 제한
if (truncatedSj.length > 28) {
truncatedSj += "..."; // 28글자가 넘으면 뒤에 ... 추가
}
//제목
formData.append('sj', truncatedSj);
//체크박스
$('.checkbox input[type="checkbox"]').each(function () {
if (!$(this).prop('checked')) {
fn_ctrl_disable([".checkbox"],);
}
});
//설정정보
formData.append('setupInfoInnb', $("setupInfoInnb").val());
//폼 내 input값 append
saveForm.serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
$("#regProccess").val("Y");
$.ajax({
type: 'post',
url: url,
data: formData,
processData: false,
contentType: false,
success: function (result) {
result = JSON.parse(result.resBody.result);
if (result.denyRvw == '0') {
$("#customAlertCn").text("해당 주문건은\n리뷰가 모두 작성되었습니다.");
openModal2("custom_alert");
} else {
if (result.result == '1') {
MicroModal.show('successRegModal');
$('#successOkBtn').off('click').on('click', function () {
$("#successClseBtn").click();
$('.reviewWriting').remove();
fn_move_writngPosblRvw(1);
});
} else {
$("#customAlertCn").text("<spring:message code="fail.common.insert"/>");
openModal2("custom_alert");
}
}
$(".close-sheet").click();
$("#regProccess").val("N");
},
error: function (data, status, error) {
fn_ajax_error(data, status, error); /*공통 처리 함수*/
$("#regProccess").val("N");
}
});
}
/*게시글 등록 함수*/
const fn_regist_rvw_event = () => {
/*리뷰 답변 항목 이벤트 제어*/
$(document).on('click','.rvwAnswRadioC',function () {
const radio = $(this);
//리뷰 항목 내용 요소 get
const score = radio.closest("div").find('[name="evlScoreArr[]"]')
//추가입력 항목 내용 요소 get
const qesitmInnb = radio.closest("div").find('[name="rvwQesitmInnbArr[]"]');
//항목 고유번호 내용 요소 get
const itmInnb = radio.closest("div").find('[name="rvwItmInnbArr[]"]');
//라디오 클릭으로 인한 제어 요소 get
const contrlTarget = radio.closest("div").find('.rvwAnswRadio');
//라디오 클릭 시 disabled 비활성
if (radio.is(":checked")) {
const radioVal = $(radio).attr('itm-cn');
//평가 내용 set
score.val("");
score.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(".rvwAnswRadioAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
radio.closest("div").find(".rvwAnswRadioAt").val("N");
});
}
});
//추가입력 항목 라디오 'click' 이벤트
$(document).on('click','.answRadioC',function () {
const radio = $(this);
//추가입력 항목 내용 요소 get
const answ = radio.closest(".custom-radio-container").find('[name="answCnArr[]"]');
//추가입력 항목 내용 요소 get
const qesitmInnb = radio.closest(".custom-radio-container").find('[name="qesitmInnbArr[]"]');
//라디오 클릭으로 인한 제어 요소 get
const contrlTarget = radio.closest(".custom-radio-container").find('.answRadio');
//항목 고유번호 내용 요소 get
const itmInnb = radio.closest(".custom-radio-container").find('[name="itmInnbArr[]"]');
//라디오 클릭 시 disabled 비활성
if (radio.is(":checked")) {
//답변 내용 초기화
answ.val("");
const radioVal = $(radio).attr('itm-cn');
answ.val(radioVal);
//항목 내용 set
qesitmInnb.val("");
const qesitmInnbVal = $(radio).attr('qesitm-innb');
qesitmInnb.val(qesitmInnbVal);
//항목고유번호 내용 set
itmInnb.val("");
const itmInnbVal = $(radio).val();
itmInnb.val(itmInnbVal);
//라디오 주위 input값 disable false처리
contrlTarget.each(function () {
contrlTarget.prop("disabled", false);
radio.closest(".custom-radio-container").find(".answRadioAt").val("Y");
});
} else {
contrlTarget.each(function () {
contrlTarget.prop("disabled", true);
radio.closest(".custom-radio-container").find(".answRadioAt").val("N");
});
}
});
//추가입력 항목 셀렉트 'change'이벤트
$(document).on('change','.answSelectC', function () {
const select = $(this);
const answ = select.closest(".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'이벤트
$(document).on('click','.answChkC', function () {
const check = $(this);
const contrlTarget = check.closest(".reviewRadio__item").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'이벤트
$(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);
});
$(document).on('change keyup', "#bbsRegForm", function () {
fn_validation_rvw();
});
}
function fn_validation_rvw() {
//등록 조건 충족시 버튼 활성화
const essntlChkCnt = $(".essntlChk[value='Y']").length;
const qesitmAtChkCnt = $(".qesitmAtChk[value='Y']").length;
let writngChrCnt = '';
let writngChrAt = false;
const cnLength = $("#cn").val().length;
if ($("#writngChrCntAt").val() === "Y") {
writngChrCnt = parseInt($("#writngChrCnt").val(), 0);
if (writngChrCnt > cnLength) {
writngChrAt = false;
} else {
writngChrAt = true;
}
} else {
if (cnLength >= 1) {
writngChrAt = true;
}
}
//한달리뷰는 포토리뷰만 허용
let photoAt = false;
if ($("#bbsTyCd").val() === '06' || ($("#bbsTyCd").val() === '07' && $("#filExtAt").val() === 'Y')) {
photoAt = true;
}
if (essntlChkCnt === qesitmAtChkCnt && writngChrAt && photoAt && $("#regProccess").val() === 'N') {
$("#regBtn").prop("disabled", false);
} else {
$("#regBtn").prop("disabled", true);
}
}
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
<nav class="headerTab">
<div class="headerTab__content">
<ul class="headerTab__list">
<li class="headerTab__item" id = 'posblRvwLi'>
<button class="boxTab__tabBtn" id ='posblRvw' >작성 가능한 리뷰</button>
</li>
<li class="headerTab__item" id = 'myRvwLi'>
<button class="boxTab__tabBtn" id='myRvw'>나의 리뷰</button>
</li>
</ul>
</div>
</nav>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<div class="infoSection">
<div class="infoSection__title">리뷰 안내</div>
<ul class="infoSection__list">
<li>리뷰는 구매 확정 후 6개월 이내 작성 하실 수 있습니다.</li>
<li>한달리뷰는 포토리뷰이므로 사진첨부는 필수 입니다.</li>
<c:if test = "${mlgAccmlNtc.goodsRvwMlgPymntAt eq 'Y'}">
<li>텍스트 리뷰 <fmt:formatNumber value="${mlgAccmlNtc.gnrlRvwMlgAccmlmnyAmt}" pattern="#,###"/>원/
포토 리뷰 <fmt:formatNumber value="${mlgAccmlNtc.photoRvwMlgAccmlmnyAmt}" pattern="#,###"/>원
<c:if test="${mlgAccmlNtc.monthBbsExpsrAt eq 'Y' && mlgAccmlNtc.goodsRvwMlgPymntMtAt eq 'Y'}"><%--공병리뷰 사용여부에 따른 분기처리--%>
/ 한달 리뷰 <fmt:formatNumber value="${mlgAccmlNtc.monthPhotoRvwMlgAccmlmnyAmt}" pattern="#,###"/>원
</c:if><br>
적립금이 적립되며
리뷰 작성 후 수정이 불가하니 참고 부탁드립니다.
</li>
<c:if test="${mlgAccmlNtc.aditPymntMlgAccmlmnyAmt > 0}">
<li>
텍스트 리뷰 / 포토 리뷰 작성시 추가 마일리지 <fmt:formatNumber
value="${mlgAccmlNtc.aditPymntMlgAccmlmnyAmt}" pattern="#,###"/> 적립됩니다.
(<c:out value="${mlgAccmlNtc.aditMlgPymntBgnDe}"/>~<c:out value="${mlgAccmlNtc.aditMlgPymntEndDe}"/>)
</li>
</c:if>
<c:if test="${mlgAccmlNtc.monthAditPymntMlgAccmlmnyAmt > 0 && mlgAccmlNtc.goodsRvwMlgPymntMtAt eq 'Y'}">
<li>
한달 리뷰 작성시 추가 마일리지
<fmt:formatNumber value="${mlgAccmlNtc.monthAditPymntMlgAccmlmnyAmt}" pattern="#,###"/> 적립됩니다.
(<c:out value="${mlgAccmlNtc.monthAditMlgPymntBgnDe}"/>~<c:out value="${mlgAccmlNtc.monthAditMlgPymntEndDe}"/>)
</li>
</c:if>
</c:if>
</ul>
</div>
<div class="availableReview">
<%--작성 가능 리뷰, 나의 리뷰 영역--%>
</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>
<footer></footer>
<!-- 리뷰작성 하단시트 -->
<!-- 버튼의 data-sheet-target과 id를 일치 시켜야함 -->
<button class="open-sheet availableReviewItem__btn" data-sheet-target="review-sheet" id="triggerBtn"></button>
<div id="review-sheet" class="sheet" aria-hidden="true" role="dialog">
<div class="overlay"></div>
<div class="contents">
<header class="sheet__controls">
<div class="draggable-area">
<div class="draggable-thumb"></div>
</div>
<button class="close-sheet" type="button" title="닫기">&times;</button>
</header>
<div class="sheet__body">
</div>
</div>
</div>
<!-- 나의 리뷰 이미지 -->
<div class="microModal microFullScreen myReviewImagePop" id="my-review-image" 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">
<span class="visually-hidden">
리뷰 이미지
</span>
</h2>
<button class="microModal__close" aria-label="창 닫기"></button>
</div>
<div class="microModal__content">
<div class="swiper myReviewImageSlide">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지01.jpg" alt="상품 이미지">
</div>
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지02.jpg" alt="상품 이미지">
</div>
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지03.jpg" alt="상품 이미지">
</div>
</div>
</div>
<div class="swiper myReviewImageThumbs">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지01.jpg" alt="상품 이미지">
</div>
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지02.jpg" alt="상품 이미지">
</div>
<div class="swiper-slide">
<img src="/mobile/images/나의리뷰이미지03.jpg" alt="상품 이미지">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// 뒤로가기 이벤트 리스너
window.addEventListener('popstate', function (event) {
var modalId = window.location.hash.replace('#', '');
if (modalId) {
closeModal(modalId);
} else {
$('.microModal').each(function () {
MicroModal.close($(this).attr('id'));
});
}
document.body.style.overflow = '';
});
if (window.location.hash) {
var modalId = window.location.hash.replace('#', '');
openModal(modalId);
}
</script>
</html>

View File

@@ -0,0 +1,318 @@
<%@ 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" %>
<!DOCTYPE html>
<html>
<script>
</script>
<!-- 리뷰작성 하단시트 -->
<c:set value="${resultMap.regusrInfo}" var="regusrInfo"/>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<c:set value="${resultMap.mlgInfo}" var="mlgInfo"/>
<c:set value="${resultMap.qesitmList.qesitmList}" var="qesitmList"/>
<c:set value="${resultMap.qesitmList.itmCnList}" var="itmCnList"/>
<c:set value="${resultMap.rvwQesitmList.starQesitmList}" var="starQesitmList"/>
<c:set value="${resultMap.rvwQesitmList.starItmCnList}" var="starItmCnList"/>
<c:set value="${resultMap.itmList}" var="itmList"/>
<c:set value="${resultMap.rvwGoodsInfo}" var="rvwGoodsInfo"/>
<div class="reviewWriting">
<form id="bbsRegForm">
<div class="reviewWritingItem">
<div class="reviewWritingItem__image">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div>
<img src="<c:out value = '${cdnurl}${rvwGoodsInfo.img}'/>" alt="상품이미지" id="goodsImg"
onerror="this.src='/pc/images/image_placeholder.png'">
</div>
</div>
<div class="reviewWritingItem__right">
<div class="reviewWritingItem__info">
<p class="reviewWritingItem__info__name"><c:out value='${rvwGoodsInfo.goodsNm}'/></p>
</div>
</div>
</div>
<input type="hidden" name="bbsId" value="${bbsInfo.bbsId}" id="bbsId"/>
<input type="hidden" name="bbsTyCd" value="${bbsInfo.bbsTyCd}" id="bbsTyCd"/>
<input type="hidden" name="sopmalCd" value="${bbsInfo.sopmalCd}" id="sopmalCd"/>
<input type="hidden" name="regusrDvCd" value="01"/>
<input type="hidden" name="ordrGoodsOptnInnb" value="<c:out value = '${rvwGoodsInfo.ordrGoodsOptnInnb}'/>"/>
<input type="hidden" name="filExtAt" id="filExtAt"/>
<input type="hidden" name="ordrInnb" id="ordrInnb" value="<c:out value = '${rvwGoodsInfo.ordrInnb}'/>"/>
<input type="hidden" name="goodsInnb" value="<c:out value = '${rvwGoodsInfo.goodsInnb}'/>"/>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.extensions.images')"
var="acceptFileExtensions"/>
<input type="hidden" name="acceptFileExtensions" id="acceptFileExtensions" value="${acceptFileExtensions}"/>
<input type="hidden" name="goodsInnbArr[]" value="<c:out value = '${rvwGoodsInfo.goodsInnb}'/>"/>
<c:if test="${not empty starQesitmList}">
<c:forEach items="${starQesitmList}" var="starQesitm" varStatus="status">
<c:choose>
<c:when test="${starQesitm.scoreIndictMthCd eq '01'}">
<div class="reviewRating">
<span class="reviewRating__title"><c:out value="${starQesitm.qesitmNm}"/></span>
<div class="reviewRating__inner">
<input type="hidden" name="rvwQesitmEssntlAtArr[]" value="${starQesitm.qesitmEssntlAt}"
class="essntlChk">
<input type="hidden" name="rvwQesitmNmArr[]" value="${starQesitm.qesitmNm}">
<input type="hidden" name="rvwQesitmAtArr[]" class="rvwAnswRadioAt qesitmAtChk"
value="N">
<input type="hidden" name="rvwQesitmInnbArr[]" class="rvwAnswRadio"
value="${starQesitm.qesitmInnb}" disabled>
<input type="hidden" name="evlScoreArr[]" class="rvwAnswRadio" disabled>
<input type="hidden" name="rvwItmInnbArr[]" class="rvwAnswRadio" disabled>
<c:forEach items="${resultMap.starItmList}" var="starItmCn" varStatus="status">
<c:if test="${starItmCn.qesitmInnb eq starQesitm.qesitmInnb}">
<input type="radio"
name="itmInnbArr<c:out value = '${starItmCn.qesitmInnb}'/>[]"
id="rvwCn<c:out value = '${status.index}'/>"
class="rvwAnswRadioC"
value="<c:out value='${starItmCn.itmInnb}'/>"
qesitm-innb='<c:out value = '${starItmCn.qesitmInnb}'/>'
itm-cn="<c:out value='${starItmCn.itmCn}'/>">
<label for="rvwCn${status.index}"></label>
</c:if>
</c:forEach>
</div>
</div>
</c:when>
<c:when test="${starQesitm.scoreIndictMthCd eq '02'}">
<div class="reviewRating">
<div class="reviewRating__title"><c:out value="${starQesitm.qesitmNm}"/></div>
<div class="custom-radio-container custom-radio-container--reviewRating">
<div class="custom-radio is-medium">
<input type="hidden" name="rvwQesitmEssntlAtArr[]"
value="${starQesitm.qesitmEssntlAt}"
class="essntlChk">
<input type="hidden" name="rvwQesitmNmArr[]" value="${starQesitm.qesitmNm}">
<input type="hidden" name="rvwQesitmAtArr[]" class="rvwAnswRadioAt qesitmAtChk"
value="N">
<input type="hidden" name="rvwQesitmInnbArr[]" class="rvwAnswRadio"
value="${starQesitm.qesitmInnb}" disabled>
<input type="hidden" name="evlScoreArr[]" class="rvwAnswRadio" disabled>
<input type="hidden" name="rvwItmInnbArr[]" class="rvwAnswRadio" disabled>
<c:forEach items="${starItmCnList}" var="starItmCn" varStatus="status">
<c:if test="${starItmCn.qesitmInnb eq starQesitm.qesitmInnb}">
<input type="radio"
name="itmInnbArr<c:out value = '${starItmCn.qesitmInnb}'/>[]"
id="rvwCn<c:out value = '${starItmCn.itmInnb}'/>"
class="rvwAnswRadioC"
value="<c:out value='${starItmCn.itmInnb}'/>"
qesitm-innb='<c:out value = '${starItmCn.qesitmInnb}'/>'
itm-cn="<c:out value='${starItmCn.itmCn}'/>">
<label for="rvwCn${starItmCn.itmInnb}"><c:out
value='${starItmCn.itmCn}'/>점&nbsp;</label>
</c:if>
</c:forEach>
</div>
</div>
</div>
</c:when>
</c:choose>
</c:forEach>
</c:if>
<c:if test="${not empty qesitmList}">
<div class="reviewRadio">
<c:forEach items="${ qesitmList }" var="qesitmList" varStatus="status">
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<div class="reviewRadio__item">
<div class="reviewRadio__title"><c:out value="${ qesitmList.qesitmNm }"/></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 }"/></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 }"/></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">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="hidden" class="answChk" name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" class="answChk" name="answCnArr[]"
value="${ itmCnList3.itmCn }" disabled>
<input type="checkbox" class="answChkC" name="itmInnbArr[]"
value="${ itmCnList3.itmInnb }">
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</div>
</c:if>
</c:forEach>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04' }">
<div class="reviewRadio__item">
<div class="reviewRadio__title"><c:out value="${ qesitmList.qesitmNm }"/></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="text" class="answTxtC input-text full" name="answCnArr[]"
title="추가문항답변" placeholder="${ itmCnList4.itmCn }" maxlength="666">
<input type="hidden" class="answTxt" name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
</c:forEach>
</div>
</c:if>
<div class="userText">
<div class="userText__item">
<div class="userText__itemTitle">상품 리뷰를 작성해주세요.</div>
<textarea class="textarea" rows="6" title="상품 리뷰" name="cn" id="cn"
<c:choose>
<c:when test="${bbsInfo.mblDftCnUseAt eq 'Y'}">
placeholder= "${bbsInfo.mblDftCn}"
</c:when>
<c:otherwise>
<c:if test="${not empty bbsInfo.writngChrCnt}">
placeholder="최소 <c:out value="${bbsInfo.writngChrCnt}"/>자 이상으로 입력해 주세요."
</c:if>
</c:otherwise>
</c:choose>></textarea>
<input type="hidden" id="writngChrCntAt"
value=<c:if test="${not empty bbsInfo.writngChrCnt}">"Y"</c:if>>
<input type="hidden" id="writngChrCnt" value="<c:out value = "${bbsInfo.writngChrCnt}"/>">
</div>
</div>
<c:if test="${bbsInfo.filAtch eq 'Y'}">
<div class="fileUplaod">
<div class="fileUplaod__title">이미지 등록(3장)<c:if test="${bbsInfo.bbsTyCd eq '07'}"><span
style="color:red">*</span></c:if></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="filAtch" id="filAtch" value="Y"/>
</c:if>
</form>
<div class="bottomBtnControls">
<button type="button" class="btn lg theme full" id="regBtn" onclick="fn_debounce_regFn();" disabled>등록하기
</button>
<input type="hidden" id="regProccess" value="N"/>
</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();
}
$("#filExtAt").val("Y");
fn_validation_rvw();
});
myDropzone.on("removedfile", function (file) {
if (myDropzone.files.length < maxFiles) {
$(".dz-message").show();
}
if (myDropzone.files.length == 0) {
$("#filExtAt").val("N");
fn_validation_rvw();
}
});
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,101 @@
<%@ 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 : MyRvwRForm.jsp
Description :나의리뷰 폼.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-25 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="sub-box">
<input type="hidden" value = "continue" id = "writngPosbleEvtOccrrncAt">
<input type="hidden" value = "<c:out value="${resultMap.bbscttVO.pageIndex}"/>" id = "writngPosblePageIndex">
<c:choose>
<c:when test = "${not empty resultMap.resultList}">
<c:forEach var = "resultList" items="${resultMap.resultList}">
<c:if test = "${resultList.purchsDcsnQy > resultList.rvwCnt || resultList.mtRvwAt eq 'Y'}">
<div class="availableReviewItem">
<div class="availableReviewItem__top">
<div class="availableReviewItem__image">
<button type="button" class="orderList__image" value="<c:out value ='${resultList.goodsInnb}'/>"
onclick = "fn_move_goods_dtl(<c:out value='${resultList.goodsInnb}'/>)">
<img src="<c:out value ='${cdnurl}${resultList.img}'/>" alt="" onerror="this.src='/mobile/images/image_placeholder.png'">
</button>
</div>
<div class="availableReviewItem__info">
<p class="availableReviewItem__info__date">
<a onclick="" style="cursor:pointer;" class="orderList__orderNum"><c:out value='${resultList.ordrInnb}'/>
</a>
</p>
<a href="" class="availableReviewItem__info__name"><c:out value='${resultList.goodsNm}'/></a>
<c:if test="${not empty resultList.optnNm}">
<p class="availableReviewItem__info__option">옵션: <c:out value='${resultList.optnNm}'/></p>
</c:if>
</div>
</div>
<div class="availableReviewItem__bottom">
<div class="availableReviewItem__desc">
<p class="availableReviewItem__descText">작성리뷰수 <em><c:out value ='${resultList.rvwCnt}'/></em></p>
<p class="availableReviewItem__descText">구매확정수 <em><c:out value ='${resultList.purchsDcsnQy}'/></em></p>
</div>
<div class="availableReviewItem__linkContainer">
<%--구매확정수량이 리뷰 작성 수 보다 클 때만 노출--%>
<c:if test = "${resultList.purchsDcsnQy > resultList.rvwCnt}">
<button type="button"
class="btn theme md outline open-sheet availableReviewItem__btn rvwBtn open-sheet"
ordr-goods-optn-innb="<c:out value ='${resultList.ordrGoodsOptnInnb}'/>"
bbs-ty-cd="06"
value='<c:out value ='${resultList.goodsInnb}'/>'>리뷰작성
</button>
</c:if>
<c:if test = "${resultList.mtRvwAt eq 'Y'}">
<button type = "button" class="btn theme md availableReviewItem__btn rvwBtn open-sheet"
ordr-goods-optn-innb = "<c:out value ='${resultList.ordrGoodsOptnInnb}'/>"
bbs-ty-cd = "07"
value='<c:out value ='${resultList.goodsInnb}'/>'>한달리뷰작성</button>
</c:if>
</div>
</div>
</div>
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">작성 가능한 리뷰가 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
<%--등록 성공 모달--%>
<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>
<button data-micromodal-close aria-label="창 닫기" id = "successClseBtn"></button>
<div class="microModal__btnContainer">
<button class="microModal__btn microModal__btn-primary" id = "successOkBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
</html>

View File

@@ -0,0 +1,62 @@
<%@ 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 : NkgDtlsR.jsp
Description :모바일_마일리지 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<c:choose>
<c:when test="${ not empty resultMap.cashList}">
<c:forEach var="list" items="${ resultMap.cashList }" varStatus="status">
<c:choose>
<c:when test="${list.mlgAccmlDvCd eq 'add'}">
<c:set var="upAt" value="mileageList__item--saveUp"/>
</c:when>
<c:otherwise>
<c:set var="upAt" value=""/>
</c:otherwise>
</c:choose>
<div class="mileageList__item ${upAt}">
<div class="mileageList__orderNum">
<c:if test="${ not empty list.ordrInnb}">
주문번호 <em><c:out value="${ list.ordrInnb }"/></em>
</c:if>
</div>
<div class="mileageList__itemHeader">
<div class="mileageList__itemHeaderMisc">
<span class="mileageList__itemDate"><c:out value="${ list.mpageRegistDt }"/></span>
<span class="mileageList__itemDot">·</span>
<span class="mileageList__itemBrand"><c:out value="${ list.sopmalNm }"/></span>
<br>
</div>
</div>
<div class="mileageList__itemBody">
<span class="mileageList__itemTitle"><c:out value="${ list.mlgAccmlDvNm }"/></span>
<span class="mileageList__itemDescription"><c:out value="${ list.mlgApplcDvNm }"/></span>
<span class="mileageList__itemNumber"><span class="comma"><fmt:formatNumber value="${list.accmlmnyAmt}" pattern="#,###"/></span></span>
</div>
<p class="mileageList__productName">잔여 : <fmt:formatNumber value="${list.blce}" pattern="#,###"/></p>
</div>
</c:forEach>
<div id="mlgInfiniteDiv">
<input type = "hidden" value = "ing" id = "scrollAt"/>
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">마일리지 내역이 존재하지 않습니다.</p>
</div>
</c:otherwise>
</c:choose>

View File

@@ -0,0 +1,435 @@
<%@ 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 : NkgDtlsR.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 () {
const title = 'GC 머니';
fn_set_header_title(title);
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
fn_select_mlg_list(1, pageUnit);
fn_start_display();
$(".mileageStatusCurrent").css({
"margin-bottom": "",
"margin-top": "24px"
});
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function () {
/* 검색조건 > 날짜 구간 버튼 클릭 이벤트 */
$('.dateRange-btn').on('click', function () {
const date = $(this).attr('id');
$(this).closest('div').find('#dateRange').val(date);
if ('allDays' === date) {
$('#bgnDt, #endDt').val('');
return false;
}
fn_set_date('bgnDt', 'endDt', 'endDt', date);
});
/* 검색 버튼 클릭 이벤트 */
$('#btnSearch').on('click', function () {
fn_select_mlg_list(1);
});
/*pin 번호 등록*/
$(document).on("click", "#pinAlertBtn", function () {
if ($("#pinAlertBtn").text() === "등록") {
fn_add_cash();
} else {
$("#closeBtn").click();
}
});
$(".sub-tab__btn").on("click", function () {
fn_add_class_current(this);
fn_select_mlg_list(1);
});
}
/**********************************************************
* 마일리지 목록 조회
* ********************************************************/
const fn_select_mlg_list = function(pageIndex, pageUnit) {
const url = '<c:url value="/sopmal/mpage/bnef/selectCashDtlsInqire"/>';
let data;
$('#pageIndex').val(pageIndex);
if(!pageUnit) {
data = $('#listForm').serialize();
} else {
if(!fn_is_empty($('#pageUnit'))){
$('#pageUnit').val(pageUnit);
data = $('#listForm').serialize();
} else {
data = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
//차감, 적립 구분 적용
if ($(".sub-tab__btn.current").val() !== 'all') {
data += '&srchMlgAccmlDvCd=' + $(".sub-tab__btn.current").val();
}
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (resultHtml) {
if ($('#mlgPageDiv').html()) {
$('#mlgPageDiv').empty();
}
$('#mlgPageDiv').html(resultHtml);
if (!fn_is_empty($('#mlgInfiniteDiv'))) {
fn_infinite_scroll(fn_add_mlg_list, '', '#mlgInfiniteDiv');
}
}
});
}
const fn_add_class_current = function(obj) {
// 현재 선택된 버튼에 'current' 클래스 추가
$(obj).addClass('current');
// 다른 버튼에서 'current' 클래스 제거
$(obj).siblings().removeClass('current');
}
/**********************************************************
* 인피니티 스크롤 마일리지 내역 추가
* ********************************************************/
const fn_add_mlg_list = function() {
if($('#scrollAt').val() === "stop") {
return false; // 스크롤이 멈춘 상태면 추가 작업을 하지 않음
}
const url = '<c:url value="/sopmal/mpage/bnef/selectCashDtlsScrolInqire"/>';
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex+1);
let data = $('#listForm').serialize();
//차감, 적립 탭에서 인피니트스크롤 적용
if($(".sub-tab__btn.current").val() !== 'all') {
data += '&srchMlgAccmlDvCd=' + $(".sub-tab__btn.current").val();
}
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (result) {
let parseResult = JSON.parse(result.resBody.result);
const resultList = parseResult.cashList;
let list = '';
if (!fn_is_empty(resultList)) {
resultList.forEach(function (item) {
let upAt = item.mlgAccmlDvCd === 'add' ? 'mileageList__item--saveUp' : '';
let ordrInnb = item.ordrInnb != null ? `주문번호 <em>\${item.ordrInnb}` : '';
let accmlmnyAmt = fn_format_comma(item.accmlmnyAmt);
let blce = fn_format_comma(item.blce);
list +=`<div class="mileageList__item \${upAt}">
<div class="mileageList__orderNum">\${ordrInnb}</div>
<div class="mileageList__itemHeader">
<div class="mileageList__itemHeaderMisc">
<span class="mileageList__itemDate">\${item.mpageRegistDt}</span>
<span class="mileageList__itemDot">·</span>
<span class="mileageList__itemBrand">\${item.sopmalNm}</span>
<br>
</div>
</div>
<div class="mileageList__itemBody">
<span class="mileageList__itemTitle">\${item.mlgAccmlDvNm}</span>
<span
class="mileageList__itemDescription">\${item.mlgApplcDvNm}</span>
<span class="mileageList__itemNumber"><span class="comma">\${accmlmnyAmt}</span></span>
</div>
<p class="mileageList__productName">잔여 : \${blce}</p>
</div>`;
});
$('#mlgInfiniteDiv').before(list);
if(resultList.length < 10){
$('#scrollAt').val("stop");
}
}else{
$('#scrollAt').val("stop");
}
}
});
}
/****************************************************************
상품권 충전 서비스 시작
****************************************************************/
const fn_select_crtnb = () => {
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/bnef/selectGiftCardCrtfcNb"/>',
data: {crtfcNb: $('#crtfcNb').val()},
success: function (result) {
result = JSON.parse(result.resBody.result);
$("#pinMsg").text(result.message);
const at = result.at;
if (at.possibleAt === 'Y') {
$("#pinAlertBtn").text("등록");
$('#pinNb').show();
$('#pinNb').val('');
$('#pinNb').focus();
$("#alertCrtnb").val(result.crtfcNb)
} else {
$("#pinAlertBtn").text("닫기");
$('#pinNb').hide();
}
openModal2("pinModal");
}
});
}
/****************************************************************
상품권 충전
****************************************************************/
const fn_add_cash = () => {
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/bnef/insertGiftCard"/>',
data: {
pinNb: $('#pinNb').val(),
crtfcNb: $('#alertCrtnb').val()
},
success: function (result) {
result = JSON.parse(result.resBody.result);
closeModal("pinModal");
$("#customAlertCn").text(result.message);
openModal2("custom_alert");
$("#calBlce").text(fn_format_comma(result.blce));
$("#crtfcNb").val("");
$("#customAlertBtn").on("click",function(){
fn_select_mlg_list(1);
}); // 목록 새로고침
}
});
}
</script>
<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="myMileage">
<form id="listForm">
<input type="hidden" id="pageIndex" name="pageIndex" value="${paramVO.pageIndex}"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${paramVO.pageUnit}"/>
<div class="sub-box">
<div class="mileageStatus">
<div class="mileageStatusCurrent">
<svg xmlns="http://www.w3.org/2000/svg" width="67" height="63" viewBox="0 0 67 63"
fill="none">
<g clip-path="url(#clip0_872_54192)">
<g style="mix-blend-mode:darken">
<path
d="M43.7905 51.5702C56.5262 51.5702 66.8505 41.2459 66.8505 28.5102C66.8505 15.7745 56.5262 5.4502 43.7905 5.4502C31.0548 5.4502 20.7305 15.7745 20.7305 28.5102C20.7305 41.2459 31.0548 51.5702 43.7905 51.5702Z"
fill="#DADBE1" />
</g>
<path d="M4.93945 15.2997V13.7197" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M2.58 17.6494H1" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M4.93945 20.0098V21.5898" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M7.28906 17.6494H8.86906" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M26.1895 2.42V1" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M24.0704 4.54004H22.6504" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M26.1895 6.66016V8.08016" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M28.3105 4.54004H29.7305" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M55.8999 13.9805H18.9199V21.8905H55.8999V13.9805Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M60.1909 21.8896H23.2109V29.8096H60.1909V21.8896Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M54.3804 29.8096H17.4004V37.7196H54.3804V29.8096Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M57.6909 37.7197H20.7109V45.6397H57.6909V37.7197Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M61.8804 45.6396H24.9004V53.5496H61.8804V45.6396Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M57.6909 53.5498H20.7109V61.4698H57.6909V53.5498Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<g style="mix-blend-mode:darken">
<path
d="M50.6004 42.0604C50.6004 43.2804 50.5104 44.4704 50.3404 45.6404C49.9204 48.4604 49.0204 51.1304 47.7204 53.5504C46.0604 56.6504 43.7504 59.3604 40.9604 61.4704H20.7104V53.5504H24.9004V45.6404H20.7104V37.7204H17.4004V29.8104H23.2104V21.8904H18.9204V18.7604C21.2204 18.0404 23.6604 17.6504 26.1904 17.6504C31.2704 17.6504 36.0004 19.2104 39.9104 21.8904C42.9204 23.9304 45.4504 26.6504 47.2904 29.8104C48.7004 32.2104 49.7004 34.8804 50.2004 37.7204C50.4704 39.1304 50.6004 40.5804 50.6004 42.0604Z"
fill="#DADBE1" />
</g>
<path
d="M2.54078 48.8405H38.8708C39.6608 46.7305 40.1108 44.4505 40.1108 42.0605H1.30078C1.30078 44.4505 1.75078 46.7305 2.54078 48.8405Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M20.7098 61.4709C26.1498 61.4709 31.0498 59.2309 34.5798 55.6309H6.83984C10.3598 59.2309 15.2698 61.4709 20.7098 61.4709Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M6.84102 55.6306H34.581C36.461 53.7106 37.921 51.4106 38.881 48.8506H2.54102C3.50102 51.4106 4.96102 53.7206 6.84102 55.6306Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M6.84102 28.4902C4.96102 30.4102 3.50102 32.7102 2.54102 35.2702H38.871C37.911 32.7102 36.451 30.4002 34.571 28.4902H6.84102Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M1.30078 42.0603H40.1208C40.1208 39.6703 39.6708 37.3903 38.8808 35.2803H2.54078C1.75078 37.3903 1.30078 39.6703 1.30078 42.0603Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M20.7098 22.6504C15.2698 22.6504 10.3698 24.8904 6.83984 28.4904H34.5798C31.0598 24.8904 26.1498 22.6504 20.7098 22.6504Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M26.1893 61.4704C36.9091 61.4704 45.5993 52.7802 45.5993 42.0604C45.5993 31.3405 36.9091 22.6504 26.1893 22.6504C15.4694 22.6504 6.7793 31.3405 6.7793 42.0604C6.7793 52.7802 15.4694 61.4704 26.1893 61.4704Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path class="svg-themeColor"
d="M19.3923 35.9873C19.5007 35.229 20.3132 34.3623 21.4507 34.3623C22.4798 34.3623 23.2923 35.1206 23.5632 35.879L26.0548 44.1665H26.109L28.6007 35.879C28.8173 35.1206 29.6298 34.3623 30.7132 34.3623C31.8507 34.3623 32.6632 35.229 32.7715 35.9873L34.6673 47.6873V48.0665C34.6673 48.9873 34.0173 49.5831 33.1507 49.5831C32.0673 49.5831 31.634 49.0956 31.5257 48.1206L30.334 39.5623H30.2798L27.7882 48.3373C27.6257 48.8248 27.2465 49.529 26.109 49.529C24.9715 49.529 24.5923 48.8248 24.4298 48.3373L21.8298 39.5081H21.7757L20.5298 48.0665C20.3673 49.0415 19.9882 49.529 18.9048 49.529C17.984 49.5831 17.334 48.9873 17.334 48.0665C17.334 47.9581 17.334 47.8498 17.334 47.6873L19.3923 35.9873Z"
fill="#3B3B3D" />
</g>
<defs>
<clipPath id="clip0_872_54192">
<rect width="66.86" height="62.47" fill="white" />
</clipPath>
</defs>
</svg>
<span class="mileageStatusCurrent__title">잔여 GC 머니</span>
<span class="mileageStatusCurrent__number"><span class="comma" id="calBlce"><fmt:formatNumber value="${not empty resultMap.blce ? resultMap.blce : 0}" pattern="#,###"/></span></span></span>
<span class="mileageStatusCurrent__unit">점</span>
</div>
<div class="mileageStatusMisc">
<div class="mileageStatusMisc__item">
<input class="input-text md" type="search" title="검색어 입력"
style="max-width: 200px; margin-right: 10px"
id="crtfcNb" name="crtfcNb" maxlength="50"
placeholder="상품권 번호 입력">
<button type="button" class="btn md theme" onclick="fn_select_crtnb();">
조회
</button>
</div>
</div>
</div>
<div class="dateSearch">
<div class="dateRange-btnContainer">
<input type="hidden" name="dateRange" id="dateRange" value="allDays">
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
<div class="datepicker-container">
<input type="text" name="srchStartDate" id="bgnDt" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="srchEndDate" id="endDt" class="datepicker" title="종료 날짜 선택" autocomplete="off">
</div>
<button class="btn full md theme" type="button" onclick="fn_select_mlg_list(1);">조회</button>
</div>
</div>
</form>
<div class="sub-box">
<h2 class="section-title">GC 머니 이용 내역</h2>
<div class="sub-tab__trigger">
<button class="sub-tab__btn current" value="all" type="button">전체</button>
<c:if test="${not empty resultMap.mlgAccmlDv}">
<c:forEach var="mlgAccmlDv" items="${resultMap.mlgAccmlDv}">
<c:if test="${mlgAccmlDv.cd eq 'add' || mlgAccmlDv.cd eq 'dn'}">
<button class="sub-tab__btn" type="button" value="<c:out value="${mlgAccmlDv.cd}"/>"><c:out value="${mlgAccmlDv.cdNm}"/></button>
</c:if>
</c:forEach>
</c:if>
</div>
<div class="" id="mlgPageDiv">
</div>
</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>
<%--cutom 확인 모달--%>
<div class="microModal microAlert" id="pinModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<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" id="pinMsg"></h2>
<br>
<input type="text" name="pinNb" id="pinNb" class="input-text full"
placeholder="상품권 PIN 번호를 입력해 주세요." maxlength="50">
<input type="hidden" name="crtfcNb" id="alertCrtnb"/>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" aria-label="창 닫기" onclick = "closeModal('pinModal')" id="pinAlertBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
</html>

View File

@@ -0,0 +1,624 @@
<%@ 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 : NkgDtlsR.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 (){
const title = '쿠폰';
fn_set_header_title(title);
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
fn_select_useposbl_coupon(1, pageUnit);
fn_start_display();
$('#oflinCouponValidBtn').on('click', function() {
closeModal('oflinCouponValidPop');
});
$('#dwldCouponAllValidBtn').on('click', function() {
closeModal('dwldCouponAllValidPop');
});
$('#unValidNumberBtn').on('click', function() {
closeModal('unValidNumberPop');
});
$('#phoneAuthBtn').on('click', function() {
if (fn_is_empty($('#oflneCouponCrtnb').val())) {
openModal('oflinCouponValidPop');
return false;
}
fn_regist_offline_coupon();
fn_select_useposbl_coupon('1')
});
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
}
/**********************************************************
* 사용 가능 쿠폰 목록 조회
* ********************************************************/
const fn_select_useposbl_coupon = function(pageIndex, pageUnit) {
const url = '<c:url value="/sopmal/mpage/bnef/selectCouponUsePosblDtlsInqire"/>';
let data;
$('#pageIndex').val(pageIndex);
if(!pageUnit) {
data = $('#holdListForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
data = $('#holdListForm').serialize();
} else {
data = $('#holdListForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (resultHtml) {
if ($('#pageDiv').html()) {
$('#pageDiv').empty();
}
$('#pageDiv').html(resultHtml);
fn_infinite_scroll(fn_add_useposbl_list, '', '#usePosblCouponInfinite');
}
});
}
/**********************************************************
* 인피니티 스크롤 사용 가능 쿠폰 목록 추가
* ********************************************************/
const fn_add_useposbl_list = function() {
const url = '<c:url value="/sopmal/mpage/bnef/selectCouponUsePosblDtlsScrolInqire"/>';
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex+1);
let data = $('#holdListForm').serialize();
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (result) {
let parseResult = JSON.parse(result.resBody.result);
const resultList = parseResult.resultList;
let list = '';
if (resultList != null && resultList.length > 0) {
resultList.forEach(function (item) {
list += '<div class="couponList__item">';
list += ' <div class="couponList__left">';
if (!fn_is_empty(item.cupnpkNm)) {
list += ' <p class="couponList__subTitle">' + item.cupnpkNm + '</p>';
}
list += ' <p class="couponList__title">' + item.coupNm + '</p>';
list += ' <p class="couponList__date">' + item.validpdBgnDt + '~' + item.validpdEndDt + '<span class="couponList__dayLeft">';
if (item.endDate >= item.now) {
list += ' (' + item.validpdDay + '일 남음)';
} else if (item.endDate < item.now) {
list += ' (' + item.validpdDay + '일 지남)';
} else if (item.endDate === item.now) {
list += ' (오늘까지)';
}
list += ' </span></p>';
list += ' <button class="btn sm gray2 couponList__checkBtn" type="button" onclick="fn_open_modal_dwldcoupon_dtl(\'#modalDiv\', \'#couponInfoPop\', \'<c:out value="/sopmal/mpage/bnef/selectCouponDtlInfoInqirePopup"/>\', \'' + item.dwldCouponInnb + '\', \'' + item.sopmalCd + '\');" >조회</button>';
list += ' </div>';
list += ' <div class="couponList__right">';
list += ' <div class="couponList__image">';
if (item.sopmalCd === 'NC') {
list += ' <img src="/pc/images/쿠폰이미지01.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'CH') {
list += ' <img src="/pc/images/쿠폰이미지02.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'TZ') {
list += ' <img src="/pc/images/쿠폰이미지03.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'DT') {
list += ' <img src="/pc/images/쿠폰이미지04.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'PL') {
list += ' <img src="/pc/images/쿠폰이미지05.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'LF') {
list += ' <img src="/pc/images/쿠폰이미지06.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'AF') {
list += ' <img src="/pc/images/쿠폰이미지07.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'DL') {
list += ' <img src="/pc/images/쿠폰이미지08.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'JM') {
list += ' <img src="/pc/images/쿠폰이미지09.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'NB') {
list += ' <img src="/pc/images/쿠폰이미지10.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'BD') {
list += ' <img src="/pc/images/쿠폰이미지11.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
}
list += ' </div>';
if (item.couponSttusCd === '사용함') {
list += ' <span class="couponList__date" style="color: blue"><strong>사용함</strong></span>';
} else if (item.couponSttusCd === '02' && item.endDate >= item.now) {
list += ' <span class="couponList__date" style="color: red"><strong>미사용</strong></span>';
} else if (item.couponSttusCd === '02' && item.endDate < item.now) {
list += ' <span class="couponList__date" style="color: gray"><strong>소멸함</strong></span>';
}
list += ' </div>';
list += '</div>';
});
$('#usePosblCouponInfinite').before(list);
}
}
});
}
/**********************************************************
* 다운로드 가능 쿠폰 목록 조회
* ********************************************************/
const fn_select_dwld_coupon = function(pageIndex, pageUnit) {
const url = '<c:url value="/sopmal/mpage/bnef/selectDwldCouponDtlsInqire"/>';
let data;
$('#pageIndexDwld').val(pageIndex);
if(!pageUnit) {
data = $('#dwldListForm').serialize();
} else {
if($('#pageUnitDwld').length){
$('#pageUnitDwld').val(pageUnit);
data = $('#dwldListForm').serialize();
} else {
data = $('#dwldListForm').serialize()+'&pageUnitDwld='+pageUnit;
}
}
$('#pageIndexDwld').val(pageIndex);
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (resultHtml) {
if ($('#pageDiv').html()) {
$('#pageDiv').empty();
}
$('#pageDiv').html(resultHtml);
fn_infinite_scroll(fn_add_dwld_list, '', '#DwldCouponInfinite');
}
});
}
/**********************************************************
* 인피니티 스크롤 다운로드 가능 쿠폰 목록 추가
* ********************************************************/
const fn_add_dwld_list = function() {
const url = '<c:url value="/sopmal/mpage/bnef/selectDwldCouponDtlsScrolInqire"/>';
let pageIndex = parseInt($("#pageIndexDwld").val(), 10);
$("#pageIndexDwld").val(pageIndex+1);
let data = $('#dwldListForm').serialize();
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (result) {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const day = now.getDate();
const hours = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
const date = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
const resultList = null;
if (!fn_is_empty(result.resBody)) {
let parseResult = JSON.parse(result.resBody.result);
resultList = parseResult.resultList;
}
let list = '';
if (resultList != null && resultList.length > 0) {
resultList.forEach(function (item) {
list += '<div class="couponList__item">';
list += ' <div class="couponList__left">';
list += ' <input type="hidden" name="couponArray" value=""/>';
list += ' <p class="couponList__subTitle">' + item.cupnpkNm + '</p>';
list += ' <p class="couponList__title">' + item.coupNm + '</p>';
list += ' <p class="couponList__date">' + item.cupnpkNm + '~' + item.cupnpkNm + '<span class="couponList__dayLeft">(12일 남음)</span></p>';
list += ' <button class="btn sm gray2 couponList__checkBtn" data-micromodal-trigger="couponInfoPop">조회</button>';
list += ' </div>';
list += ' <div class="couponList__right">';
list += ' <div class="couponList__image">';
if (item.sopmalCd === 'NC') {
list += ' <img src="/pc/images/쿠폰이미지01.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'CH') {
list += ' <img src="/pc/images/쿠폰이미지02.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'TZ') {
list += ' <img src="/pc/images/쿠폰이미지03.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'DT') {
list += ' <img src="/pc/images/쿠폰이미지04.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'PL') {
list += ' <img src="/pc/images/쿠폰이미지05.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'LF') {
list += ' <img src="/pc/images/쿠폰이미지06.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'AF') {
list += ' <img src="/pc/images/쿠폰이미지07.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'DL') {
list += ' <img src="/pc/images/쿠폰이미지08.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'JM') {
list += ' <img src="/pc/images/쿠폰이미지09.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'NB') {
list += ' <img src="/pc/images/쿠폰이미지10.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
} else if (item.sopmalCd === 'BD') {
list += ' <img src="/pc/images/쿠폰이미지11.png" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + item.coupNm + '">';
}
list += ' </div>';
list += ' <button type="button" class="btn sm theme outline" onclick="fn_regist_dwld_coupon(\'' + item.couponInnb + '\', \'' + item.sopmalCd + '\', \'' + item.couponSndngInnb + '\', \'' + item.cupnpkInnb + '\', \'' + item.cupnpkNm + '\', \'' + item.cupnpkDc + '\',);">쿠폰 다운로드</button>';
list += ' </div>';
list += '</div>';
});
$('#DwldCouponInfinite').before(list);
}
}
});
}
/************************************************
* 쿠폰 상세 정보 조회 팝업 : 다운로드 가능 쿠폰
*************************************************/
const fn_open_modal_coupon_dtl = function(modalDivSltr, modalSlrt, url, param, sopmalCd){
var couponInnb = param
$.ajax({
type: 'post',
url: url,
data: {
couponInnb : couponInnb,
sopmalCd : sopmalCd
},
success: function (data) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
openModal('couponInfoPop');
}
});
};
/************************************************
* 쿠폰 상세 정보 조회 팝업 : 사용가능 쿠폰
*************************************************/
const fn_open_modal_dwldcoupon_dtl = function(modalDivSltr, modalSlrt, url, param, sopmalCd){
var dwldCouponInnb = param
$.ajax({
type: 'post',
url: url,
data: {
dwldCouponInnb : dwldCouponInnb,
sopmalCd : sopmalCd
},
success: function (data) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
openModal('couponInfoPop');
}
});
};
/************************************************
* 인증번호 입력 쿠폰 등록
*************************************************/
const fn_regist_offline_coupon = function() {
const data = $('#couponCodeRegistForm').serialize();
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/bnef/insertCouponRegist"/>',
data: data,
success: function (result) {
const parseResult = JSON.parse(result.resBody.result);
if (parseResult.status === '0') {
location.reload();
$('#oflneCouponCrtnb').val('');
} else {
openModal('unValidNumberPop');
}
}
});
}
/************************************************
* 쿠폰 다운로드 단건
*************************************************/
const fn_regist_dwld_coupon = function(couponInnb, sopmalCd, couponSndngInnb, cupnpkInnb, cupnpkNm, cupnpkDc) {
fn_regist_dwld_coupon_m(couponInnb, sopmalCd, couponSndngInnb, cupnpkInnb, cupnpkNm, cupnpkDc);
fn_select_useposbl_coupon('1');
}
/************************************************
* 쿠폰 다운로드 단건
*************************************************/
const fn_regist_dwld_coupon_m = function(couponInnb, sopmalCd, couponSndngInnb, cupnpkInnb, cupnpkNm, cupnpkDc) {
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/bnef/insertDwldCouponAllRegist"/>',
data: {
couponInnb: couponInnb,
sopmalCd: sopmalCd,
couponSndngInnb : couponSndngInnb,
cupnpkInnb : cupnpkInnb,
cupnpkNm : cupnpkNm,
cupnpkDc : cupnpkDc
},
success: function (resultHtml) {
location.reload();
}
});
}
let alldwldCnt = '${ not empty resultMap.dwldPosblCouponCnt ? resultMap.dwldPosblCouponCnt : '0' }';
/************************************************
* (모든) 쿠폰 다운로드 다건
*************************************************/
const fn_regist_dwld_coupon_all = function() {
if (alldwldCnt > 0) {
fn_regist_dwld_coupon_all_m();
fn_select_useposbl_coupon('1')
} else {
openModal('dwldCouponAllValidPop');
}
}
/************************************************
* (모든) 쿠폰 다운로드 다건
*************************************************/
const fn_regist_dwld_coupon_all_m = function() {
const data = $('#dwldListForm').serialize();
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/bnef/insertDwldCouponAllRegist"/>',
data: data,
success: function (resultHtml) {
location.reload();
}
});
}
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
<nav class="headerTab">
<div class="headerTab__content">
<ul class="headerTab__list">
<li class="headerTab__item active">
<button class="boxTab__tabBtn current" id="useCouponListBtn" onclick="fn_select_useposbl_coupon(1); return false;">사용가능 쿠폰 (<c:out value="${ not empty resultMap.usePosblCouponCnt ? resultMap.usePosblCouponCnt : '0' }"/>)</button>
</li>
<li class="headerTab__item">
<button class="boxTab__tabBtn" onclick="fn_select_dwld_coupon(1); return false;">쿠폰 다운로드 (<c:out value="${ not empty resultMap.dwldPosblCouponCnt ? resultMap.dwldPosblCouponCnt : '0' }"/>)</button>
</li>
</ul>
</div>
</nav>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="main">
<div class="sub-page">
<form id="couponCodeRegistForm">
<div class="infoSection couponRegister">
<div class="inputWithBtn">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" id="oflneCouponCrtnb" name="oflneCouponCrtnb"
placeholder="등록하실 쿠폰 번호를 입력해 주세요." value="">
<button id="phoneAuthBtn" type="button" class="btn md theme outline">쿠폰 등록</button>
</div>
</div>
</form>
<div class="availableCoupon" id="pageDiv">
</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 id="modalDiv">
</div>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<!-- 쿠폰 정보 -->
<div id="modalDiv">
</div>
<%-- 쿠폰 등록 벨리데이션 체크 --%>
<div class="microModal microAlert" id="oflinCouponValidPop" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "oflinCouponValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--등록 성공 모달--%>
<div class="microModal microAlert" id="dwldCouponAllValidPop" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "dwldCouponAllValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--유효하지 않은 쿠폰 --%>
<div class="microModal microAlert" id="unValidNumberPop" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id ="unValidNumberBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
$('.headerTab__item').on('click', function (e) {
e.preventDefault(); // 링크 이동 방지
var index = $(this).index(); // 클릭한 탭의 인덱스
$(this).addClass('active'); // 클릭한 탭 활성화
$(this).siblings().removeClass('active'); // 클릭한 탭 활성화
$('.sub-page').eq(index).show(); // 클릭한 탭에 해당하는 페이지만 보이기
$('.sub-page').eq(index).siblings().hide(); // 클릭한 탭에 해당하는 페이지만 보이기
});
</script>
</body>
</html>

View File

@@ -0,0 +1,142 @@
<%@ 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 : NkgDtlsR.jsp
Description :모바일_마일리지 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<script>
$(document).ready(function (){
$('select').niceSelect();
});
</script>
<form id="dwldListForm">
<input type="hidden" id="sopmalCdDwld" name="sopmalCd" />
<input type="hidden" id="mbrInnbDwld" name="mbrInnb" />
<input type="hidden" id="mbrDvCdDwld" name="mbrDvCd" />
<input type="hidden" id="pageIndexDwld" name="pageIndex" value="<c:out value="${ resultMapDwld.paramVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnitDwld" name="pageUnit" value="${ resultMapDwld.paramVO.pageUnit} }"/>
<div class="sub-box">
<div class="couponList">
<%--
<div class="couponList__select select-box">
<select class="full" title="해당 셀렉트에 대한 설명">
<option value="" selected disabled>전체 쿠폰</option>
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
</select>
</div>
--%>
<c:if test="${ fn:length(resultMapDwld.resultList) > 0 }">
<button class="couponList__downloadAll btn theme full md" type="button" onclick="fn_regist_dwld_coupon_all();">모든 쿠폰 다운로드</button>
</c:if>
<c:choose>
<c:when test="${ not empty resultMapDwld.resultList && fn:length(resultMapDwld.resultList) > 0 }">
<c:forEach items="${ resultMapDwld.resultList }" var="couponList" varStatus="status">
<div class="couponList__item">
<div class="couponList__left">
<input type="hidden" name="couponArray" value="<c:out value="${ couponList.couponInnb }"/>" />
<p class="couponList__subTitle"><c:out value="${ couponList.cupnpkNm }"/></p>
<p class="couponList__title">
<c:out value="${ couponList.couponSndngNm }"/><br>
<span class="couponList__date"><c:out value="${ couponList.coupNm }"/></span>
</p>
<p class="couponList__date">
<c:choose>
<c:when test="${ 'Y' eq couponList.dwldPdLmttAt }">
<c:out value="${couponList.dwldBgnDt}" /> ~
<c:out value="${couponList.dwldEndDt}" />
<c:if test="${ 0 lt couponList.validpdDay }"><span class="couponList__dayLeft">(<c:out value="${ couponList.validpdDay }"/>일 남음)</span></c:if>
</c:when>
<c:otherwise>
제한없음
</c:otherwise>
</c:choose>
</p>
<button class="btn sm gray2 couponList__checkBtn" type="button" onclick="fn_open_modal_coupon_dtl('#modalDiv', '#couponInfoPop', '<c:out value="/sopmal/mpage/bnef/selectDwldYCouponDtlInfoInqirePopup"/>', '<c:out value="${ couponList.couponInnb }"/>', '<c:out value="${ couponList.sopmalCd }"/>'); return false;">조회</button>
</div>
<div class="couponList__right">
<div class="couponList__image">
<c:choose>
<c:when test="${ couponList.sopmalCd eq 'NC' }">
<img src="/pc/images/쿠폰이미지01.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'CH' }">
<img src="/pc/images/쿠폰이미지02.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'TZ' }">
<img src="/pc/images/쿠폰이미지03.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'DT' }">
<img src="/pc/images/쿠폰이미지04.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'PL' }">
<img src="/pc/images/쿠폰이미지05.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'LF' }">
<img src="/pc/images/쿠폰이미지06.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'AF' }">
<img src="/pc/images/쿠폰이미지07.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'DL' }">
<img src="/pc/images/쿠폰이미지08.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'JM' }">
<img src="/pc/images/쿠폰이미지09.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'NB' }">
<img src="/pc/images/쿠폰이미지10.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'BD' }">
<img src="/pc/images/쿠폰이미지11.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
</c:choose>
</div>
<button type="button" class="btn sm theme outline"
onclick="fn_regist_dwld_coupon(<c:out value="${ couponList.couponInnb }"/>,
'<c:out value="${ couponList.sopmalCd }"/>',
'<c:out value="${ couponList.couponSndngInnb }"/>',
'<c:out value="${ couponList.cupnpkInnb }"/>',
'<c:out value="${ couponList.cupnpkNm }"/>',
'<c:out value="${ couponList.cupnpkDc }"/>' );">
다운로드
</button>
</div>
</div>
</c:forEach>
<div id="DwldCouponInfinite">
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">다운 가능한 쿠폰이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</form>

View File

@@ -0,0 +1,134 @@
<%@ 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 : NkgDtlsR.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 (){
const title = '회원 등급 안내';
fn_set_header_title(title);
});
</script>
<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">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="myMemberRankInfo">
<h2 class="myMemberRankInfo__title"><em>
<c:forEach var="gradList" items="${ resultMap.resultList }" varStatus="status">
<c:if test="${ status.first }">
<c:out value="${ gradList.sopmalNm }"/>
</c:if>
</c:forEach>
</em> 회원 등급 안내</h2>
<ul class="myMemberRankInfo__list">
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach var="gradList" items="${ resultMap.resultList }" varStatus="status">
<li class="myMemberRankInfo__item">
<div class="myMemberRankInfo__top">
<c:if test = "${not empty gradList.mbrGradIconCours}"><%--이미지 없을시 노출x--%>
<img src="<c:out value="${ cdnurl }${ gradList.mbrGradIconCours }"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ gradList.mbrGradNm }">
</c:if>
<div class="myMemberRankInfo__topDescription">
<span class="myMemberRankInfo__topName"><c:out value="${ gradList.mbrGradNm }"/></span>
<p class="myMemberRankInfo__topText">
<c:choose>
<c:when test="${ gradList.mbrGradCndCd eq '01'}">
<c:out value="${ gradList.mbrGradCndCdNm }"/>
</c:when>
<c:when test="${ gradList.mbrGradCndCd eq '02'}">
구매금액 <c:out value="${ gradList.mbrGradAmtSop }"/> 이상인 경우
</c:when>
</c:choose>
</p>
</div>
</div>
<div class="myMemberRankInfo__body">
<c:if test="${ gradList.mbrGradCndCd eq '02' && not empty gradList.mlgAccmlAmt }">
<div class="myMemberRankInfo__box">
<img src="/pc/images/icon_member-mileage.png" alt="">
<span class="myMemberRankInfo__boxText">구매금액의 <em><c:out value="${ gradList.mlgAccmlAmt }"/><c:out value="${ gradList.mlgAccmlUnitDvCdNm }"/></em> 적립</span>
</div>
</c:if>
<c:if test="${gradList.couponAt > 0 }">
<div class="myMemberRankInfo__box">
<img src="/pc/images/icon_member-coupon.png" alt="">
<span class="myMemberRankInfo__boxText"><em><c:out value="${ gradList.cupnpkNm }"/></em> 쿠폰팩 지급</span>
</div>
</c:if>
</div>
</li>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%" ><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</ul>
<div class="infoBox">
<h6 class="infoBox__title">안내사항</h6>
<ol class="infoBox__list">
<li><c:out value="${resultMap.gradGroup.mbrGradInfo.calcPdMtCnt}"/>개월 동안 주문한 금액 기준이며, 혜택은 등업시 제공 합니다.</li>
</ol>
</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,80 @@
<%@ 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 : NkgDtlsR.jsp
Description :모바일_마일리지 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<script>
$(document).ready(function (){
});
</script>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<div class="mileageList__item
<c:if test="${ list.mlgAccmlDvCd eq 'add' || list.mlgAccmlDvCd eq 'up' }">
mileageList__item--saveUp
</c:if>"
>
<div class="mileageList__orderNum">
<c:if test="${ not empty list.ordrInnb && list.ordrInnb ne 0 }">
주문번호 <em><c:out value="${ list.ordrInnb }"/></em>
</c:if>
<input type="hidden" name="accmlmnyAmt" value="<c:out value="${ list.accmlmnyAmt }"/>"/>
</div>
<div class="mileageList__itemHeader">
<div class="mileageList__itemHeaderMisc">
<span class="mileageList__itemDate"><c:out value="${ list.mpageRegistDt }"/></span>
<span class="mileageList__itemDot">·</span>
<span class="mileageList__itemBrand"><c:out value="${ list.sopmalNm }"/></span>
<br>
<c:if test = "${list.mlgAccmlDvCd eq 'add' || list.mlgAccmlDvCd eq 'up'}"><%--적립 혹은 지급 일 때만 유효기간 노출--%>
<span class="mileageList__itemBrand"><c:out value="${ list.bgnDt }"/></span>
<span class="mileageList__itemDot">~</span>
<span class="mileageList__itemBrand"><c:out value="${ list.endDt }"/></span>
</c:if>
</div>
</div>
<div class="mileageList__itemBody">
<span class="mileageList__itemTitle"><c:out value="${ list.mlgAccmlDvNm }"/></span>
<span class="mileageList__itemDescription"><c:out value="${ list.mlgApplcDvNm }"/></span>
<span class="mileageList__itemNumber"><span class="comma"><fmt:formatNumber value="${list.accmlmnyAmt}" pattern="#,###"/></span></span>
</div>
</div>
</c:forEach>
<div id="mlgInfiniteDiv">
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">마일리지 내역이 존재하지 않습니다.</p>
</div>
</c:otherwise>
</c:choose>

View File

@@ -0,0 +1,355 @@
<%@ 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 : NkgDtlsR.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 (){
const title = '마일리지 내역';
fn_set_header_title(title);
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
fn_select_mlg_list(1, pageUnit);
fn_start_display();
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
/* 검색조건 > 날짜 구간 버튼 클릭 이벤트 */
$('.dateRange-btn').on('click', function() {
const date = $(this).attr('id');
$(this).closest('div').find('#dateRange').val(date);
if ('allDays' === date) {
$('#bgnDt, #endDt').val('');
return false;
}
fn_set_date('bgnDt', 'endDt', 'endDt', date);
});
/* 검색 버튼 클릭 이벤트 */
$('#btnSearch').on('click', function() {
fn_select_mlg_list(1);
});
}
/**********************************************************
* 마일리지 목록 조회
* ********************************************************/
const fn_select_mlg_list = function(pageIndex, pageUnit) {
const url = '<c:url value="/sopmal/mpage/bnef/selectMlgDtlsInqire"/>';
let data;
$('#pageIndex').val(pageIndex);
if(!pageUnit) {
data = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
data = $('#listForm').serialize();
} else {
data = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (resultHtml) {
if ($('#mlgPageDiv').html()) {
$('#mlgPageDiv').empty();
}
$('#mlgPageDiv').html(resultHtml);
fn_infinite_scroll(fn_add_mlg_list, '', '#mlgInfiniteDiv');
}
});
}
/******************************************************************
* 마일리지 목록 조회 지급구분
******************************************************************/
const fn_select_mlg_list_dv = function(srchMlgAccmlDvCd) {
$.ajax({
type: "post",
url : '<c:url value="/sopmal/mpage/bnef/selectMlgDtlsInqire"/>',
data : {
srchMlgAccmlDvCd : srchMlgAccmlDvCd
},
success:function(resultHtml) {
if ($('#mlgPageDiv').html()) {
$('#mlgPageDiv').empty();
}
$('#mlgPageDiv').html(resultHtml);
}
});
}
/**********************************************************
* 인피니티 스크롤 마일리지 내역 추가
* ********************************************************/
const fn_add_mlg_list = function() {
const url = '<c:url value="/sopmal/mpage/bnef/selectMlgDtlsScrolInqire"/>';
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex+1);
let data = $('#listForm').serialize();
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (result) {
let parseResult = JSON.parse(result.resBody.result);
const resultList = parseResult.resultList;
let list = '';
if (resultList != null && resultList.length > 0) {
resultList.forEach(function (item) {
list += '<div class="mileageList__item mileageList__item--saveUp">';
list += ' <div class="mileageList__orderNum">';
list += ' 주문번호 <em>' + item.ordrInnb + '</em>';
list += ' </div>';
list += ' <div class="mileageList__itemHeader">';
list += ' <div class="mileageList__itemHeaderMisc">';
list += ' <span class="mileageList__itemDate">' + item.mpageRegistDt + '</span>';
list += ' <span class="mileageList__itemDot">·</span>';
list += ' <span class="mileageList__itemBrand">' + item.sopmalNm + '</span>';
list += ' </div>';
list += ' </div>';
list += ' <div class="mileageList__itemBody">';
list += ' <span class="mileageList__itemTitle">' + item.mlgAccmlDvNm + '</span>';
list += ' <span class="mileageList__itemDescription">' + item.mlgApplcDvNm + '</span>';
let accmlmnyAmt = fn_format_comma(item.accmlmnyAmt);
list += ' <span class="mileageList__itemNumber"><span class="comma">' + accmlmnyAmt + '</span></span>';
list += ' </div>';
list += '</div>';
});
$('#mlgInfiniteDiv').before(list);
}
}
});
}
</script>
<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="myMileage">
<form id="listForm">
<input type="hidden" id="mlgInnb" name="mlgInnb" value=""/>
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex} }"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit} }"/>
<div class="sub-box">
<div class="mileageStatus">
<div class="mileageStatusCurrent">
<svg xmlns="http://www.w3.org/2000/svg" width="67" height="63" viewBox="0 0 67 63"
fill="none">
<g clip-path="url(#clip0_872_54192)">
<g style="mix-blend-mode:darken">
<path
d="M43.7905 51.5702C56.5262 51.5702 66.8505 41.2459 66.8505 28.5102C66.8505 15.7745 56.5262 5.4502 43.7905 5.4502C31.0548 5.4502 20.7305 15.7745 20.7305 28.5102C20.7305 41.2459 31.0548 51.5702 43.7905 51.5702Z"
fill="#DADBE1" />
</g>
<path d="M4.93945 15.2997V13.7197" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M2.58 17.6494H1" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M4.93945 20.0098V21.5898" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M7.28906 17.6494H8.86906" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M26.1895 2.42V1" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M24.0704 4.54004H22.6504" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M26.1895 6.66016V8.08016" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M28.3105 4.54004H29.7305" stroke="#3B3B3D" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" />
<path d="M55.8999 13.9805H18.9199V21.8905H55.8999V13.9805Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M60.1909 21.8896H23.2109V29.8096H60.1909V21.8896Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M54.3804 29.8096H17.4004V37.7196H54.3804V29.8096Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M57.6909 37.7197H20.7109V45.6397H57.6909V37.7197Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M61.8804 45.6396H24.9004V53.5496H61.8804V45.6396Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path d="M57.6909 53.5498H20.7109V61.4698H57.6909V53.5498Z" fill="white"
stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<g style="mix-blend-mode:darken">
<path
d="M50.6004 42.0604C50.6004 43.2804 50.5104 44.4704 50.3404 45.6404C49.9204 48.4604 49.0204 51.1304 47.7204 53.5504C46.0604 56.6504 43.7504 59.3604 40.9604 61.4704H20.7104V53.5504H24.9004V45.6404H20.7104V37.7204H17.4004V29.8104H23.2104V21.8904H18.9204V18.7604C21.2204 18.0404 23.6604 17.6504 26.1904 17.6504C31.2704 17.6504 36.0004 19.2104 39.9104 21.8904C42.9204 23.9304 45.4504 26.6504 47.2904 29.8104C48.7004 32.2104 49.7004 34.8804 50.2004 37.7204C50.4704 39.1304 50.6004 40.5804 50.6004 42.0604Z"
fill="#DADBE1" />
</g>
<path
d="M2.54078 48.8405H38.8708C39.6608 46.7305 40.1108 44.4505 40.1108 42.0605H1.30078C1.30078 44.4505 1.75078 46.7305 2.54078 48.8405Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M20.7098 61.4709C26.1498 61.4709 31.0498 59.2309 34.5798 55.6309H6.83984C10.3598 59.2309 15.2698 61.4709 20.7098 61.4709Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M6.84102 55.6306H34.581C36.461 53.7106 37.921 51.4106 38.881 48.8506H2.54102C3.50102 51.4106 4.96102 53.7206 6.84102 55.6306Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M6.84102 28.4902C4.96102 30.4102 3.50102 32.7102 2.54102 35.2702H38.871C37.911 32.7102 36.451 30.4002 34.571 28.4902H6.84102Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M1.30078 42.0603H40.1208C40.1208 39.6703 39.6708 37.3903 38.8808 35.2803H2.54078C1.75078 37.3903 1.30078 39.6703 1.30078 42.0603Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M20.7098 22.6504C15.2698 22.6504 10.3698 24.8904 6.83984 28.4904H34.5798C31.0598 24.8904 26.1498 22.6504 20.7098 22.6504Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path
d="M26.1893 61.4704C36.9091 61.4704 45.5993 52.7802 45.5993 42.0604C45.5993 31.3405 36.9091 22.6504 26.1893 22.6504C15.4694 22.6504 6.7793 31.3405 6.7793 42.0604C6.7793 52.7802 15.4694 61.4704 26.1893 61.4704Z"
fill="white" stroke="#3B3B3D" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round" />
<path class="svg-themeColor"
d="M19.3923 35.9873C19.5007 35.229 20.3132 34.3623 21.4507 34.3623C22.4798 34.3623 23.2923 35.1206 23.5632 35.879L26.0548 44.1665H26.109L28.6007 35.879C28.8173 35.1206 29.6298 34.3623 30.7132 34.3623C31.8507 34.3623 32.6632 35.229 32.7715 35.9873L34.6673 47.6873V48.0665C34.6673 48.9873 34.0173 49.5831 33.1507 49.5831C32.0673 49.5831 31.634 49.0956 31.5257 48.1206L30.334 39.5623H30.2798L27.7882 48.3373C27.6257 48.8248 27.2465 49.529 26.109 49.529C24.9715 49.529 24.5923 48.8248 24.4298 48.3373L21.8298 39.5081H21.7757L20.5298 48.0665C20.3673 49.0415 19.9882 49.529 18.9048 49.529C17.984 49.5831 17.334 48.9873 17.334 48.0665C17.334 47.9581 17.334 47.8498 17.334 47.6873L19.3923 35.9873Z"
fill="#3B3B3D" />
</g>
<defs>
<clipPath id="clip0_872_54192">
<rect width="66.86" height="62.47" fill="white" />
</clipPath>
</defs>
</svg>
<span class="mileageStatusCurrent__title">사용가능 마일리지</span>
<span class="mileageStatusCurrent__number"><span class="comma"><c:out value="${ resultMap.blceSum }"/></span></span>
<span class="mileageStatusCurrent__unit">점</span>
</div>
<div class="mileageStatusMisc">
<div class="mileageStatusMisc__item mileageStatusMisc__item--scheduled">
<span class="mileageStatusMisc__title">적립예정 마일리지</span>
<span class="mileageStatusMisc__number"><span class="comma"><c:out value="${ resultMap.accmlPrearngeSum }"/></span></span>
<span class="mileageStatusMisc__unit">점</span>
</div>
<div class="mileageStatusMisc__item">
<span class="mileageStatusMisc__title">소멸예정 마일리지</span>
<span class="mileageStatusMisc__number"><span class="comma"><c:out value="${ resultMap.endInMnthBlceSum }"/></span></span>
<span class="mileageStatusMisc__unit">점</span>
</div>
</div>
</div>
<div class="dateSearch">
<div class="dateRange-btnContainer">
<input type="hidden" name="dateRange" id="dateRange" value="allDays">
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
<div class="datepicker-container">
<input type="text" name="bgnDt" id="bgnDt" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="endDt" id="endDt" class="datepicker" title="종료 날짜 선택" autocomplete="off">
</div>
<button class="btn full md theme" type="button" onclick="fn_select_mlg_list(1);">조회</button>
</div>
</div>
</form>
<div class="sub-box">
<h2 class="section-title">마일리지 이용 내역</h2>
<div class="sub-tab__trigger">
<button class="sub-tab__btn current" type="button" onclick="fn_select_mlg_list(1);">전체</button>
<button class="sub-tab__btn" type="button" onclick="fn_select_mlg_list_dv('add');">적립</button>
<button class="sub-tab__btn" type="button" onclick="fn_select_mlg_list_dv('use');">사용</button>
<button class="sub-tab__btn" type="button" onclick="fn_select_mlg_list_dv('exp');">소멸</button>
</div>
<div class="" id="mlgPageDiv">
</div>
</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,173 @@
<%@ 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 : NkgDtlsR.jsp
Description :모바일_마일리지 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<!-- 쿠폰정보 -->
<div class="microModal microBottomSheet" id="couponInfoPop" 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">
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content">
<div class="modalInfo">
<h5 class="modalInfo__title">쿠폰 정보</h5>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%;">
<col style="width: 60%;">
</colgroup>
<tbody>
<tr>
<th>쿠폰명</th>
<td>
<c:out value="${ resultMap.dwldCouponVO.coupNm }"/>
</td>
</tr>
<tr>
<th>혜택</th>
<td>
<c:choose>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '01' || resultMap.dwldCouponVO.bnefDv eq '03' }">
<span class="fw-500">
<c:out value="${ resultMap.dwldCouponVO.aditDscntAmt }"/> <c:out value="${ resultMap.dwldCouponVO.goodsDscntDvNm }"/> 할인
</span><br/>
<c:if test="${ '01' eq resultMap.dwldCouponVO.goodsDscntDv }">
<span class="gray-8">최대 <c:out value="${ resultMap.dwldCouponVO.dscntMxmmAmt }"/>원 할인</span>
</c:if>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '02' }">
<span class="fw-500">
<c:if test="${ '01' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">기본배송비 무료,
</span>
<br>
<span class="gray-8">
최대 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtMxmmDscntAmt }"/>원 할인</c:if>
</span>
<span class="fw-500">
<c:if test="${ '02' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">배송비 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtDscntAmt }"/>원 할인</c:if>
</span>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>유효기간</th>
<td>
<c:choose>
<c:when test="${ resultMap.dwldCouponVO.validpdKndCd eq '01' }">
<c:out value="${ resultMap.dwldCouponVO.validpdBgnDt }"/> ~ <c:out value="${ resultMap.dwldCouponVO.validpdEndDt }"/><c:if test="${ 0 lt resultMap.dwldCouponVO.validpdDay }">(<c:out value="${ resultMap.dwldCouponVO.validpdDay }"/>일 남음)</c:if>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.validpdKndCd eq '02' }">
<c:out value="${ resultMap.dwldCouponVO.validpdKndCdNm }"/> <c:out value="${ resultMap.dwldCouponVO.validpdDeCnt }"/> 일
</c:when>
<c:otherwise>
<c:out value="${ resultMap.dwldCouponVO.validpdBgnDt }"/> ~ <c:out value="${ resultMap.dwldCouponVO.validpdEndDt }"/><c:if test="${ 0 lt resultMap.dwldCouponVO.validpdDay }">(<c:out value="${ resultMap.dwldCouponVO.validpdDay }"/>일 남음)</c:if>
</c:otherwise>
</c:choose>
</td>
</tbody>
</table>
</div>
<div class="infoText">
<ul class="infoText__list">
<%-- 사용환경 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.useEnvrnCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.useEnvrnCd eq '01' }">
<li class="fyi gray-7">온라인 쿠폰</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '02' }">
<li class="fyi gray-7">오프라인 쿠폰</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '03' }">
<li class="fyi gray-7">온/오프라인 쿠폰</li>
</c:when>
</c:choose>
</c:if>
<%-- 타 쿠폰 동시사용여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.otrCouponSmtmUseAt }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'Y' }">
<li class="fyi gray-7">다른 쿠폰과 동시 사용 불가</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'N' }">
<li class="fyi gray-7">다른 쿠폰과 동시 사용 가능</li>
</c:when>
</c:choose>
</c:if>
<%-- 사용가능금액 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.usePosblAmt || 0 ne resultMap.dwldCouponVO.usePosblAmt }">
<li class="fyi gray-7"><c:out value="${ resultMap.dwldCouponVO.usePosblAmt }"/>원 이상 구매 시</li>
</c:if>
<%-- 중복다운로드 여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDwldAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDwldAt eq 'N' }">
<li class="fyi gray-7">중복 다운로드 불가</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDwldAt eq 'Y' }">
<li class="fyi gray-7">중복 다운로드 가능</li>
</c:when>
</c:choose>
</c:if>
<%-- 중복할인여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDscntAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDscntAt eq 'N' }">
<li class="fyi gray-7">중복 할인 불가</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDscntAt eq 'Y' }">
<li class="fyi gray-7">중복 할인 가능</li>
</c:when>
</c:choose>
</c:if>
<%-- 적용상품선정기준 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.goodsApplcDvCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.goodsApplcDvCd eq '01' }">
<li class="fyi gray-7">모든 상품에 사용가능</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '02' }">
<li class="fyi gray-7">특정 카테고리에 사용가능</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '03' }">
<li class="fyi gray-7">특정 상품에 사용가능</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '04' }">
<li class="fyi gray-7">특정 카테고리 외 사용가능</li>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '05' }">
<li class="fyi gray-7">특정 상품 외 사용가능</li>
</c:when>
</c:choose>
</c:if>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,165 @@
<%@ 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 : NkgDtlsR.jsp
Description :모바일_마일리지 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<script>
$(document).ready(function (){
$('select').niceSelect();
});
</script>
<form id="holdListForm">
<input type="hidden" id="sopmalCd" name="sopmalCd" />
<input type="hidden" id="mbrInnb" name="mbrInnb" />
<input type="hidden" id="mbrDvCd" name="mbrDvCd" />
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.paramVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit}"/>
<div class="sub-box">
<div class="couponList">
<%--
<div class="couponList__select select-box">
<select class="full" title="해당 셀렉트에 대한 설명">
<option value="" selected disabled>전체 쿠폰</option>
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
</select>
</div>
--%>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach items="${ resultMap.resultList }" var="couponList" varStatus="status">
<div class="couponList__item">
<div class="couponList__left">
<p class="couponList__subTitle"><c:out value="${ couponList.cupnpkNm }"/></p>
<p class="couponList__title">
<c:out value="${ couponList.couponSndngNm }"/><br>
<span class="couponList__date"><c:out value="${ couponList.coupNm }"/></span>
</p>
<p class="couponList__date"><c:out value="${ couponList.validpdBgnDt }"/> <br/> ~ <c:out value="${ couponList.validpdEndDt }"/>
<span class="couponList__dayLeft">
<c:set var="today" value="<%=new java.util.Date()%>" />
<c:set var="date"><fmt:formatDate value="${today}" pattern="yyyy-MM-dd" /></c:set>
<c:choose>
<c:when test="${ couponList.validpdEndDt gt date }">
(<c:out value="${ couponList.validpdDay }"/>일 남음)
</c:when>
<c:when test="${ couponList.validpdEndDt lt date}">
(<c:out value="${ couponList.validpdDay }"/>일 지남)
</c:when>
<c:when test="${ couponList.validpdEndDt eq date}">
(오늘까지)
</c:when>
</c:choose>
</span>
</p>
<button class="btn sm gray2 couponList__checkBtn" type="button" onclick="fn_open_modal_dwldcoupon_dtl('#modalDiv', '#couponInfoPop', '<c:out value="/sopmal/mpage/bnef/selectCouponDtlInfoInqirePopup"/>', '<c:out value="${ couponList.dwldCouponInnb }"/>', '<c:out value="${ couponList.sopmalCd }"/>');" >조회</button>
</div>
<div class="couponList__right">
<div class="couponList__image">
<c:choose>
<c:when test="${ couponList.sopmalCd eq 'NC' }">
<img src="/pc/images/쿠폰이미지01.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'CH' }">
<img src="/pc/images/쿠폰이미지02.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'TZ' }">
<img src="/pc/images/쿠폰이미지03.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'DT' }">
<img src="/pc/images/쿠폰이미지04.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'PL' }">
<img src="/pc/images/쿠폰이미지05.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'LF' }">
<img src="/pc/images/쿠폰이미지06.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'AF' }">
<img src="/pc/images/쿠폰이미지07.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'DL' }">
<img src="/pc/images/쿠폰이미지08.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'JM' }">
<img src="/pc/images/쿠폰이미지09.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'NB' }">
<img src="/pc/images/쿠폰이미지10.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
<c:when test="${ couponList.sopmalCd eq 'BD' }">
<img src="/pc/images/쿠폰이미지11.png" onerror="this.src='/pc/images/image_placeholder.png'" alt="">
</c:when>
</c:choose>
</div>
<c:set var="today" value="<%=new java.util.Date()%>" />
<c:set var="date"><fmt:formatDate value="${today}" pattern="yyyy-MM-dd HH:mm" /></c:set>
<c:choose>
<c:when test="${ couponList.couponSttusCd eq '03' }">
<span class="couponList__date" style="color: blue"><strong>사용함</strong></span>
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt ge date }">
<span class="couponList__date" style="color: red"><strong>미사용</strong></span>
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt lt date }">
<span class="couponList__date" style="color: gray"><strong>소멸함</strong></span>
</c:when>
</c:choose>
</div>
</div>
</c:forEach>
<div id="usePosblCouponInfinite">
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">사용가능한 쿠폰이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</form>
<script>
// data-micromodal-trigger 속성을 가진 버튼을 클릭하면 해당 ID의 모달이 열림
// 모달 배경화면 스크롤 방지
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
</script>

View File

@@ -0,0 +1,304 @@
<%@ 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 : NkgDtlsR.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 (){
const title = '마이페이지';
fn_set_header_title(title);
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
}
</script>
<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="myPageMain">
<div class="sub-box">
<div class="member-rank-summary">
<div class="member-rank-summary__top">
<c:if test = "${not empty mpageResultMap.info.mbrGradIconCours}">
<div class="member-rank-summary__icon">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="${cdnurl}${ mpageResultMap.info.mbrGradIconCours }" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ mpageResultMap.info.mbrGradNm }">
</div>
</c:if>
<div class="member-rank-summary__user">
<span class="member-rank-summary__rank"><c:out value="${ mpageResultMap.info.mbrGradNm }"/></span>
<span class="member-rank-summary__name"><c:out value="${ mpageResultMap.info.mbrNm }"/><span class="append">님</span></span>
</div>
<a class="member-rank-summary__benefit-link" href="/sopmal/mpage/bnef/selectMbrGradInqire">등급별 혜택</a>
</div>
<c:if test = "${sopmallInfo.shopInfo.cashAt eq 'Y'}">
<div class="member-rank-summary__bottom">
<div class="member-rank-summary__summary">
<a href="/sopmal/mpage/bnef/selectCashDtlsInqireForm" class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-mileage.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">GC 머니</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma">
<c:out value="${mpageResultMap.info.mbrCashAmt}"/>
</span>
<span class="member-rank-summary__summary-numberUnit">점</span>
</p>
</div>
</a>
<a href="/sopmal/mpage/bnef/selectMlgDtlsInqireForm" class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-mileage.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">마일리지</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma">
<fmt:formatNumber value="${mpageResultMap.info.mbrMlgAmt}" pattern="#,###"/>
</span>
<span class="member-rank-summary__summary-numberUnit">점</span>
</p>
</div>
</a>
</div>
</div>
</c:if>
<div class="member-rank-summary__bottom">
<div class="member-rank-summary__summary">
<c:if test = "${sopmallInfo.shopInfo.cashAt ne 'Y'}">
<a href="/sopmal/mpage/bnef/selectMlgDtlsInqireForm"
class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-mileage.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">마일리지</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma">
<fmt:formatNumber value="${mpageResultMap.info.mbrMlgAmt}" pattern="#,###"/>
</span>
<span class="member-rank-summary__summary-numberUnit">점</span>
</p>
</div>
</a>
</c:if>
<a href="/sopmal/mpage/bnef/selectCouponDtlsForm"
class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-coupon.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">쿠폰</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma"><c:out
value="${ mpageResultMap.info.couponCnt }"/></span>
<span class="member-rank-summary__summary-numberUnit">장</span>
</p>
</div>
</a>
<a href="/sopmal/mpage/ordr/selectWslistInqireForm"
class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-wishlist.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">위시리스트</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma"><c:out
value="${ mpageResultMap.info.wishGoodsCnt }"/></span>
<span class="member-rank-summary__summary-numberUnit">개</span>
</p>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="sub-box">
<h3 class="myPageMain__innerTitle">주문/배송 조회</h3>
<div class="orderProgress">
<ol class="orderProgress__list">
<c:forEach var="ordrSttusList"
items="${ ordrSttusMap.resultList }"
varStatus="status">
<li <c:if test="${ ordrSttusList.ordrSttusCdCnt > 0 }">
class="current"
</c:if>>
<a href="/sopmal/mpage/ordr/selectMbrOrdrListInqire">
<span class="orderProgress__num"><c:out
value="${ ordrSttusList.ordrSttusCdCnt }"/></span>
<span class="orderProgress__text"><c:out
value="${ ordrSttusList.ordrSttusCdNm }"/></span>
</a>
</li>
</c:forEach>
</ol>
</div>
<a class="myPageMain__more"
href="/sopmal/mpage/ordr/selectMbrOrdrListInqire">전체보기</a>
</div>
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '05'}">
<c:if test="${topMenuList.rnum eq '2'}">
<div class="sub-box">
<h4 class="myPageMain__menuTitle"><c:out value="${topMenuList.ctgryNm}"/></h4>
<ul class="myPageMain__menuList">
</c:if>
<c:if test="${topMenuList.rnum eq '3'}">
<li><a href="<c:out value="${topMenuList.url}"/>"><c:out value="${topMenuList.ctgryNm}"/></a></li>
<c:if test="${'0' eq topMenuList.nextDepth3 && '0' eq topMenuList.nextDepth2}">
</ul>
</div>
</c:if>
</c:if>
</c:if>
</c:forEach>
</c:if>
<div class="sub-box">
<div class="mainNotice__wrapper">
<div class="mainNotice__customerContact">
<i class="icon icon_notice03"></i>
<div class="mainNotice__customerContact__right">
<h4 class="notice__title customer-service">고객센터</h4>
<span class="notice__number"><c:out value="${sopmallInfo.shopInfo.cscTelnb }"/></span>
<p class="notice__paragraph">
<span class="notice__text01"><c:out value="${ sopmallInfo.shopInfo.cscWkdayWorkTme }"/></span>
<span class="notice__text02">(<c:out value="${ sopmallInfo.shopInfo.cscLunchTme }"/>)</span>
<br>
<span class="notice__text03"><c:out value="${ sopmallInfo.shopInfo.cscRstde }"/></span>
</p>
</div>
</div>
<a class="myPageMain__logout" href="/logout">
<i class="icon icon_myLogout"></i>
로그아웃
</a>
</div>
</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>
<div id="modalDiv">
</div>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<!-- 쿠폰 정보 -->
<div id="modalDiv">
</div>
<%-- 쿠폰 등록 벨리데이션 체크 --%>
<div class="microModal microAlert" id="oflinCouponValidPop" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "oflinCouponValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%--등록 성공 모달--%>
<div class="microModal microAlert" id="dwldCouponAllValidPop" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "dwldCouponAllValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
$('.headerTab__item').on('click', function (e) {
e.preventDefault(); // 링크 이동 방지
var index = $(this).index(); // 클릭한 탭의 인덱스
$(this).addClass('active'); // 클릭한 탭 활성화
$(this).siblings().removeClass('active'); // 클릭한 탭 활성화
$('.sub-page').eq(index).show(); // 클릭한 탭에 해당하는 페이지만 보이기
$('.sub-page').eq(index).siblings().hide(); // 클릭한 탭에 해당하는 페이지만 보이기
});
</script>
</body>
</html>

View File

@@ -0,0 +1,279 @@
<%@ 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"%>
<!DOCTYPE html>
<%--
Class Name : DlvylcManagePopupR.jsp
Description : 배송지 관리 팝업(모바일).jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-09 김혜인 최초 생성
--%>
<html>
<script>
$(document).ready(function(){
fn_set_event(".telno", 'input', fn_fmt_telno);
// 배송지 관리 탭
$('.tabContent').hide();
$('.tabContent').eq(0).show();
/* 마이크로 모달 초기화 */
MicroModal.init({
disableScroll: true,
awaitCloseAnimation: true,
});
});
</script>
<!-- 배송지 변경 -->
<div class="microModal microFullScreen" id="address-management" 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">
배송지 관리
</h2>
<button class="microModal__close" onclick="closeModal('address-management')"></button>
</div>
<div class="microModal__content">
<div class="fullscreenBg">
<div class="addressManagePop">
<nav class="headerTab">
<div class="headerTab__content">
<ul class="headerTab__list">
<li class="headerTab__item active">
<button>배송지 목록</button>
</li>
<li class="headerTab__item">
<button id="regForm">배송지 추가</button>
</li>
</ul>
</div>
</nav>
<div class="tabContent">
<div class="sub-box">
<h2 class="section-title">배송지 목록</h2>
<div class="addressManage__list">
<c:choose>
<c:when test = "${not empty resultMap.resultList}">
<c:forEach var="dlvylc" items="${resultMap.resultList}" varStatus="status">
<div class="addressManage__item" onclick = "fn_select_mngrOrdr_postcode(${callbackNm},${status.index},'${formId}')">
<div class="addressManage__itemBody">
<div class="addressManage__itemName">
<div class="addressManage__itemRadio">
<div class="custom-radio no-text is-medium">
<input type="radio" id="<c:out value="${dlvylc.adbkInnb}"/>" name="r-group01" class="adbkInnb">
<label for="<c:out value="${dlvylc.adbkInnb}"/>"></label>
</div>
</div>
<div class="addressManage__itemPerson <c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}">current</c:if>">
<c:out value = "${dlvylc.dlvylcDcCn}"/>
<c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}">
<div class="addressManage__itemCheck">
<svg xmlns="http://www.w3.org/2000/svg" width="14"
height="14" viewBox="0 0 14 14" fill="none">
<g clip-path="url(#clip0_121_29551)">
<path
d="M5.36085 12.2297C5.22721 12.3641 5.04489 12.4391 4.85549 12.4391C4.66609 12.4391 4.48376 12.3641 4.35012 12.2297L0.314136 8.19308C-0.104712 7.77424 -0.104712 7.09505 0.314136 6.67699L0.819501 6.17149C1.23848 5.75264 1.91688 5.75264 2.33573 6.17149L4.85549 8.69138L11.6642 1.88249C12.0832 1.46365 12.7623 1.46365 13.1805 1.88249L13.6858 2.38799C14.1047 2.80684 14.1047 3.48589 13.6858 3.90409L5.36085 12.2297Z"
fill="black"></path>
</g>
<defs>
<clipPath id="clip0_121_29551">
<rect width="14" height="14"
fill="white">
</rect>
</clipPath>
</defs>
</svg>
</div>
</c:if>
</div>
<c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}"><span class="addressManage__itemBadge">기본배송지</span></c:if>
</div>
<span class="addressManage__itemPhone dlvyNm"><c:out value = "${dlvylc.recpntNm}"/></span>
<span class="addressManage__itemPhone mbtlnbPop"><c:out value = "${dlvylc.mbtlnb}"/></span>
<p class="addressManage__itemAddress dlvyAdres">
(<c:out value = "${dlvylc.zip}"/>)
<c:if test = "${dlvylc.adresDv eq '01'}">
<c:out value = "${dlvylc.rnmAdres}"/>
</c:if>
<c:if test = "${dlvylc.adresDv eq '02'}">
<c:out value = "${dlvylc.lnbAdres}"/>
</c:if>
<c:out value = "${dlvylc.dtlAdres}"/></p>
</div>
<div class="textBtns">
<button class="textBtns__btn"
onclick="fn_pop_dlvylc_upt_pop(
'<c:out value='${pageIndex}'/>',
'<c:out value='${dlvylc.adbkInnb}'/>');">
<spring:message code="button.update"/>
</button>
<c:if test="${dlvylc.dftDlvylcAt eq 'N'}">
<button class="textBtns__btn"
onclick="fn_delete_dlvylc('',<c:out value="${dlvylc.adbkInnb}"/>,'',true);">
<spring:message code="button.delete"/>
</button>
</c:if>
</div>
<input type="hidden" name="zip" class = "zip" value="<c:out value='${dlvylc.zip}'/>" />
<input type="hidden" name="adresDv" class = "adresDv" value="<c:out value='${dlvylc.adresDv}'/>" />
<input type="hidden" name="rnmAdres" class = "rnmAdres" value="<c:out value='${dlvylc.rnmAdres}'/>" />
<input type="hidden" name="lnbAdres" class = "lnbAdres"value="<c:out value='${dlvylc.lnbAdres}'/>" />
<input type="hidden" name="recpntNm" class = "recpntNmR" value="<c:out value='${dlvylc.recpntNm}'/>" />
<input type="hidden" name="dtlAdres" class = "dtlAdres" value="<c:out value='${dlvylc.dtlAdres}'/>" />
<input type="hidden" name="mbtlnb" class="mbtlnb" value="<c:out value='${dlvylc.mbtlnb}' />" />
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="addressManage" style="height: 300px;">
<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>
</div>
<div class="bottomBtnControls">
<button class="btn lg full theme outline" id="regFormBtn">배송지 추가</button>
</div>
</div>
<div class="bottomFixedControls">
<div class="bottomFixedControls__inner">
<button class="btn theme" id="selectAdres">선택하기</button>
</div>
</div>
</div>
<div class="tabContent">
<div class="sub-box">
<form id = "dlvylcRegistForm">
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
배송지 설명<span class="required-asterisk">*</span>
</div>
<input type="text" class="input-text full" name="dlvylcDcCn" title="배송지 설명" maxlength="67">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
받으시는 분<span class="required-asterisk">*</span>
</div>
<input type="text" class="input-text full" title="받으시는 분" name="recpntNm" maxlength="13">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
배송지 주소<span class="required-asterisk">*</span>
</div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input type="text" class="input-text" id="zip" name="zip" title="우편번호" maxlength="5" readonly>
<button type="button" class="btn md theme outline"
data-micromodal-trigger="modalDiv"
onclick="fn_select_post_mobile(fn_select_dlvylc_postcode); return false;">우편번호
찾기
</button>
</div>
<input type="text" class="input-text full" id="adres" name="adres"
maxlength="66" readonly title="주소">
<input type="text" class="input-text full" id="dtlAdres" name="dtlAdres"
title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
휴대전화번호<span class="required-asterisk">*</span>
</div>
<div class="inputWithBtn">
<input name="mbtlnb" type="text" class="input-text full telno" title="휴대전화번호"
maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="b-checkbox-container userForm__inputBox__checks">
<label class="b-checkbox checkbox">
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y">
<span class="check"></span>
<span class="control-label">기본 배송지로 설정</span>
</label>
</div>
</div>
</div>
</div>
<input type="hidden" id="adresDv" name="adresDv">
</form>
</div>
<div class="bottomFixedControls">
<div class="bottomFixedControls__inner" >
<button class="btn theme" data-micromodal-trigger="dlvyConfirmModal">등록하기</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<%--------------------------------------모달 모음------------------------------------------------%>
<%--배송지 등록 확인 마이크로 모달 div--%>
<div class="microModal microAlert" id="dlvyConfirmModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"
id="confirmClose"><spring:message code="button.cancel"/>
</button>
<button class="microModal__btn microModal__btn-primary"
onclick="fn_insert_dlvylc('',null,true); return false;">
<spring:message code="button.insert"/>
</button>
</div>
</div>
</div>
</div>
<%--배송지 등록 완료 마이크로 모달 div--%>
<div class="microModal microAlert" id="successModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<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>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id="successClose"><%--추후 시큐리티--%>
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
</html>

View File

@@ -0,0 +1,116 @@
<%@ 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 : DlvylcManageR.jsp
Description : 배송지 관리.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-15 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<div class="addressManage__list">
<form id="dlvylcList">
<div class="addressManage__list">
<c:choose>
<c:when test = "${not empty resultMap.resultList}">
<c:forEach var="dlvylc" items="${resultMap.resultList}">
<div class="addressManage__item">
<div class="addressManage__itemBody">
<div class="addressManage__itemName">
<div class="addressManage__itemPerson <c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}">current</c:if>"><c:out value = "${dlvylc.dlvylcDcCn}"/>
<c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}">
<div class="addressManage__itemCheck">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"
viewBox="0 0 14 14" fill="none">
<g clip-path="url(#clip0_121_29551)">
<path
d="M5.36085 12.2297C5.22721 12.3641 5.04489 12.4391 4.85549 12.4391C4.66609 12.4391 4.48376 12.3641 4.35012 12.2297L0.314136 8.19308C-0.104712 7.77424 -0.104712 7.09505 0.314136 6.67699L0.819501 6.17149C1.23848 5.75264 1.91688 5.75264 2.33573 6.17149L4.85549 8.69138L11.6642 1.88249C12.0832 1.46365 12.7623 1.46365 13.1805 1.88249L13.6858 2.38799C14.1047 2.80684 14.1047 3.48589 13.6858 3.90409L5.36085 12.2297Z"
fill="black"></path>
</g>
<defs>
<clipPath id="clip0_121_29551">
<rect width="14" height="14" fill="white"></rect>
</clipPath>
</defs>
</svg>
</div>
</c:if>
</div>
<c:if test = "${dlvylc.dftDlvylcAt eq 'Y'}"><span class="addressManage__itemBadge">기본배송지</span></c:if>
</div>
<span class="addressManage__itemPhone"><c:out value="${dlvylc.recpntNm}"/></span>
<span class="addressManage__itemPhone mbtlnb"><c:out value = "${dlvylc.mbtlnb}"/></span>
<p class="addressManage__itemAddress">(<c:out value = "${dlvylc.zip}"/>)
<c:if test = "${dlvylc.adresDv eq '01'}">
<c:out value = "${dlvylc.rnmAdres}"/>
</c:if>
<c:if test = "${dlvylc.adresDv eq '02'}">
<c:out value = "${dlvylc.lnbAdres}"/>
</c:if>
<c:out value = "${dlvylc.dtlAdres}"/>
</p>
</div>
<div class="textBtns">
<c:if test = "${dlvylc.dftDlvylcAt eq 'N'}">
<button type="button" class="textBtns__btn" id="deleteDlvylcDel"
onclick="fn_delete_dlvylc('<spring:message code="success.common.delete"/>',
'<c:out value="${dlvylc.adbkInnb}"/>',
'N',
'Y',true)">
<spring:message code="button.delete"/>
</button>
</c:if>
<button type="button" class="textBtns__btn" id="selectDlvylcUpdtPopupForm"
onclick="fn_move_dlvylc_uptpage('<c:out value="${pageIndex}"/>',
'<c:out value="${dlvylc.adbkInnb}"/>',
'N')">
<spring:message code="button.update"/>
</button>
</div>
</div>
</c:forEach>
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/mobile/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">등록된 배송지가 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
<c:set var="shouldBreak" value="false" />
<c:set var="dftDlvylcAt" value = "N"/>
<c:forEach var="item" items="${resultMap.resultList}">
<c:choose>
<c:when test="${shouldBreak}">
</c:when>
<c:otherwise>
<c:if test="${item.dftDlvylcAt == 'Y'}">
<c:set var="dftDlvylcAt" value = "Y"/>
<c:set var="shouldBreak" value="true" />
</c:if>
</c:otherwise>
</c:choose>
</c:forEach>
</form>
</div>
<div class="bottomBtnControls">
<form id = "hiddenForm" action="/sopmal/mpage/mbr/selectDlvylcRegistForm" method="post">
<input type ="hidden" value = "<c:out value="${dftDlvylcAt}"/>" id = "dftDlvylcAt"/>
</form>
<button type="button" class="btn lg full theme outline" id="insertDlvylcBtn"
onclick="fn_move_dlvylc_regpage(); return false;">배송지 추가
</button>
</div>
</html>

View File

@@ -0,0 +1,87 @@
<%@ 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"/>
<%-- 배송지 관리js --%>
<script src="<c:url value='/js/dlvylc/dlvylc.js'/>"></script>
</head>
<script>
$(document).ready(function () {
/*헤더에 타이틀 set*/
fn_set_header_title("배송지 관리");
fn_select_dlvylcList(1);
$("#delCfrmBtn").on("click", function () {
let adbkInnb = $(this).attr("adbk-innb");
$.ajax({
type: 'post',
url: '/sopmal/mpage/mbr/deleteDlvylcDel',
data: {
adbkInnb: adbkInnb,
},
success: function (data) {
closeModal("confirm_del_alert");
openModal("success_del_alert");
}
});
});
$("#delSuccessBtn").on("click", function () {
closeModal("success_del_alert");
fn_select_dlvylcList(1);
});
});
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<%@include file="/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="addressManage">
<h2 class="section-title">배송지 목록</h2>
<!-- </div> -->
<div id="content">
</div>
</div>
</div>
<!-- Top 버튼 -->
<div class="dlvylcList">
<input type="hidden" value="Y" name="isMobile"/>
</div>
<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,169 @@
<%@ 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 : DlvylcUpdtPopupC.jsp
Description :모바일 배송지 수정 페이지.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<%-- 배송지 관리js --%>
<script src="<c:url value='/js/dlvylc/dlvylc.js'/>"></script>
</head>
<script>
$(document).ready(function () {
/*헤더에 타이틀 set*/
fn_set_header_title("배송지 추가");
fn_set_event(".telno", 'input', fn_fmt_telno);
$("#successClose").on("click", function () {
MicroModal.close("successModal");
location.href = '/sopmal/mpage/mbr/selectDlvylcManagePopupForm';
});
});
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<%@include file="/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">
<form id="dlvylcRegistForm">
<div class="sub-page">
<div class="addressManage">
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지명<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" name="dlvylcDcCn" title="배송지명"
maxlength="67">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">받으시는 분<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" title="받으시는 분" name="recpntNm" maxlength="13">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지 주소<span
class="required-asterisk">*</span></div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input type="text" class="input-text" id="zip" name="zip" title="우편번호"
maxlength="5" readonly>
<button type="button" class="btn md theme outline"
data-micromodal-trigger="modalDiv"
onclick="fn_select_post_mobile(fn_select_dlvylc_postcode, '#postCodeCn', '#modalDiv'); return false;">
우편번호 찾기
</button>
</div>
<input type="text" class="input-text full" id="adres" name="adres"
maxlength="66" title="주소" readonly>
<input type="text" class="input-text full" id="dtlAdres" name="dtlAdres"
title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">휴대전화번호<span
class="required-asterisk">*</span></div>
<div class="inputWithBtn">
<input name="mbtlnb" type="text" class="input-text full telno" title="휴대전화번호"
id="mbtlnb"
maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="b-checkbox-container userForm__inputBox__checks">
<label class="b-checkbox checkbox">
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y">
<span class="check"></span>
<span class="control-label">기본 배송지로 설정</span>
</label>
</div>
</div>
</div>
</div>
<div class="bottomBtnControls">
<button type="button" class="btn lg full theme" onclick="openModal('dlvyConfirmModal');">
<spring:message code="button.insert"/>하기
</button>
</div>
</div>
<input type="hidden" id="adresDv" name="adresDv">
</div>
</form>
<!-- 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>
<%--------------------------------------모달 모음------------------------------------------------%>
<%--배송지 등록 확인 마이크로 모달 div--%>
<div class="microModal microAlert" id="dlvyConfirmModal" 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='confirm.common.insert'/>
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"
id="confirmClose"><spring:message code="button.cancel"/>하기
</button>
<button class="microModal__btn microModal__btn-primary"
onclick="fn_insert_dlvylc('',null,true); return false;">
<spring:message code="button.insert"/>하기
</button>
</div>
</div>
</div>
</div>
<div id = "modalDiv"></div>
<%--배송지 등록 완료 마이크로 모달 div--%>
<div class="microModal microAlert" id="successModal" 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" id="successClose"><%--추후 시큐리티--%>
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,165 @@
<%@ 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" %>
<!DOCTYPE html>
<html lang="ko">
<script>
$(document).ready(function () {
/*휴대폰번호 포매팅하여 set*/
if($(".telno").eq(0).val() !== undefined){
$(".telno").eq(0).val(fn_format_mbtlnb($(".telno").eq(0).val()));
}
});
</script>
<!-- 풀 스크린 모달 -->
<div class="microModal microFullScreen" id="dlvylcUpdtFormPop" 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">
배송지 수정
</h2>
<button class="microModal__close" id = "dlvylcUpdtClose"></button>
</div>
<div class="microModal__content">
<div class="fullscreenBg">
<div class="addressManagePop">
<div class="tabContent">
<div class="sub-box">
<form id = "dlvylcUpdtForm">
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지명<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" name="dlvylcDcCn" title="배송지명"
value="<c:out value = "${dtlDlvylc.resultVO.dlvylcDcCn}" />" maxlength="67">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">받으시는 분<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" title="받으시는 분" name="recpntNm"
title="받으시는 분" value="<c:out value="${dtlDlvylc.resultVO.recpntNm}" />" maxlength="13">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지 주소<span
class="required-asterisk">*</span></div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input type="text" class="input-text" id="zip" name="zip" title="우편번호"
maxlength="5" value="<c:out value = "${dtlDlvylc.resultVO.zip}"/>" readonly>
<button type="button" class="btn md theme outline"
data-micromodal-trigger="modalDiv"
onclick="fn_select_post_mobile(fn_select_dlvylc_postcode, '#postCodeCn', '#modalDiv'); return false;">
우편번호 찾기
</button>
</div>
<input type="text" class="input-text full" id="adres" name="adres"
maxlength="66" title="주소" readonly value=<c:choose>
<c:when test = "${dtlDlvylc.resultVO.adresDv eq '01'}">"<c:out value = '${dtlDlvylc.resultVO.rnmAdres}'/>"</c:when>
<c:otherwise>"<c:out value = '${dtlDlvylc.resultVO.lnbAdres}'/>"</c:otherwise>
</c:choose>>
<input type="text" class="input-text full" id="dtlAdres" name="dtlAdres" value="<c:out value = '${dtlDlvylc.resultVO.dtlAdres}'/>"
title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">휴대전화번호<span
class="required-asterisk">*</span></div>
<div class="inputWithBtn">
<input name="mbtlnb" type="text" class="input-text full telno" title="휴대전화번호" id = "mbtlnb"
value="<c:out value ='${dtlDlvylc.resultVO.mbtlnb}'/>" maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="b-checkbox-container userForm__inputBox__checks">
<label class="b-checkbox checkbox">
<c:choose>
<c:when test="${dtlDlvylc.resultVO.dftDlvylcAt eq 'Y'}">
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y"
checked>
</c:when>
<c:otherwise>
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt"
value="Y">
</c:otherwise>
</c:choose>
<span class="check"></span>
<span class="control-label">기본 배송지로 설정</span>
</label>
</div>
</div>
</div>
</div>
<input type="hidden" id="adbkInnb" name="adbkInnb"
value="<c:out value = "${dtlDlvylc.resultVO.adbkInnb}" />">
<input type="hidden" id="adresDv" name="adresDv"
value="<c:out value = "${dtlDlvylc.resultVO.adresDv}"/>">
<input type="hidden" id="isPop">
</form>
</div>
<div class="bottomFixedControls">
<div class="bottomFixedControls__inner">
<button class="btn theme" onclick="openModal('updtConfirmModal')"><spring:message code="button.update"/>하기</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<%--배송지 등록 확인 마이크로 모달 div--%>
<div class="microModal microAlert" id="updtConfirmModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<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="button.update"/>하시겠습니까?
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"
id="confirmClose"><spring:message code="button.cancel"/>
</button>
<button class="microModal__btn microModal__btn-primary"
onclick="fn_update_dlvylc('1','',true); return false;">
<spring:message code="button.update"/>
</button>
</div>
</div>
</div>
</div>
<%--배송지 등록 완료 마이크로 모달 div--%>
<div class="microModal microAlert" id="updtsuccessModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<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.update"/>
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id="successUpdtClose">
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
</html>

View File

@@ -0,0 +1,197 @@
<%@ 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 : DlvylcUpdtPopupC.jsp
Description :모바일 배송지 수정 페이지.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<%-- 배송지 관리js --%>
<script src="<c:url value='/js/dlvylc/dlvylc.js'/>"></script>
</head>
<script>
$(document).ready(function () {
/*헤더에 타이틀 set*/
fn_set_header_title("배송지 수정");
/* 마이크로 모달 초기화 */
MicroModal.init({
disableScroll: true,
awaitCloseAnimation: true,
});
$(".header__toBack__btn").on("click",function(){
location.href='/sopmal/mpage/mbr/selectDlvylcManagePopupForm';
});
fn_set_event(".telno",'input',fn_fmt_telno);
$("#successClose").on("click", function () {
MicroModal.close("successModal");
location.href = '/sopmal/mpage/mbr/selectDlvylcManagePopupForm';
});
/*휴대폰번호 포매팅하여 set*/
if($("#mbtlnb").val() !== undefined){
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
}
});
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<%@include file="/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">
<form id="dlvylcUpdtForm">
<div class="sub-page">
<div class="addressManage">
<div class="userForm">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지명<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" name="dlvylcDcCn" title="배송지명"
value="<c:out value = "${dtlDlvylc.resultVO.dlvylcDcCn}" />" maxlength="67">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">받으시는 분<span
class="required-asterisk">*</span></div>
<input type="text" class="input-text full" title="받으시는 분" name="recpntNm"
title="받으시는 분" value="<c:out value="${dtlDlvylc.resultVO.recpntNm}" />" maxlength="13">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지 주소<span
class="required-asterisk">*</span></div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input type="text" class="input-text" id="zip" name="zip" title="우편번호"
maxlength="5" value="<c:out value = "${dtlDlvylc.resultVO.zip}"/>" readonly>
<button type="button" class="btn md theme outline"
data-micromodal-trigger="modalDiv"
onclick="fn_select_post_mobile(fn_select_dlvylc_postcode, '#postCodeCn', '#modalDiv'); return false;">
우편번호 찾기
</button>
</div>
<input type="text" class="input-text full" id="adres" name="adres"
maxlength="66" title="주소" readonly value=<c:choose>
<c:when test = "${dtlDlvylc.resultVO.adresDv eq '01'}">"<c:out value = '${dtlDlvylc.resultVO.rnmAdres}'/>"</c:when>
<c:otherwise>"<c:out value = '${dtlDlvylc.resultVO.lnbAdres}'/>"</c:otherwise>
</c:choose>>
<input type="text" class="input-text full" id="dtlAdres" name="dtlAdres" value="<c:out value = '${dtlDlvylc.resultVO.dtlAdres}'/>"
title="상세주소" maxlength="66" placeholder="나머지 주소를 입력해 주세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">휴대전화번호<span
class="required-asterisk">*</span></div>
<div class="inputWithBtn">
<input name="mbtlnb" type="text" class="input-text full telno" title="휴대전화번호" id = "mbtlnb"
value="<c:out value ='${dtlDlvylc.resultVO.mbtlnb}'/>" maxlength="13" placeholder="휴대폰번호'-'없이 입력하세요">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="b-checkbox-container userForm__inputBox__checks">
<label class="b-checkbox checkbox">
<c:choose>
<c:when test="${dtlDlvylc.resultVO.dftDlvylcAt eq 'Y'}">
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt" value="Y"
checked>
</c:when>
<c:otherwise>
<input type="checkbox" id="dftDlvylcAt" name="dftDlvylcAt"
value="Y">
</c:otherwise>
</c:choose>
<span class="check"></span>
<span class="control-label">기본 배송지로 설정</span>
</label>
</div>
</div>
</div>
</div>
<div class="bottomBtnControls">
<button type="button" class="btn lg full theme" data-micromodal-trigger="updtConfirmModal">
<spring:message code="button.update"/>하기
</button>
</div>
</div>
<input type="hidden" id="adbkInnb" name="adbkInnb"
value="<c:out value = "${dtlDlvylc.resultVO.adbkInnb}" />">
<input type="hidden" id="adresDv" name="adresDv"
value="<c:out value = "${dtlDlvylc.resultVO.adresDv}"/>">
<input type="hidden" id="isPop">
</div>
</form>
<!-- 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>
<%--배송지 등록 확인 마이크로 모달 div--%>
<div class="microModal microAlert" id="updtConfirmModal" 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="button.update"/>하시겠습니까?
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"
id="confirmClose"><spring:message code="button.cancel"/>하기
</button>
<button class="microModal__btn microModal__btn-primary"
onclick="fn_update_dlvylc('1','<spring:message code="success.common.update"/>',true); return false;">
<spring:message code="button.update"/>하기
</button>
</div>
</div>
</div>
</div>
<%--배송지 등록 완료 마이크로 모달 div--%>
<div class="microModal microAlert" id="updtsuccessModal" 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.update"/>
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id="successClose"><%--추후 시큐리티--%>
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,114 @@
<%@ 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 : RtngudCanclRefndListFromR.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 () {
$("#mbrPassword").on("keydown", function (e) {
if (e.keyCode === 13) {
e.preventDefault();
}
});
});
/******************************************************
* 회원 비밀번호 확인
*******************************************************/
const fn_select_password = function () {
const data = $('#listForm').serialize();
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/mbr/selectMbrInfoUpdtPasswordCnfirm"/>',
data: data,
success: function (data) {
const resBody = data.resBody;
const parsedResult = JSON.parse(resBody.result);
let result = parsedResult.result;
if (result === 1) {
fn_move_target(); // 클릭한 메뉴로 이동
} else {
openModal("failPwMatch");
}
}
});
}
/******************************************************
* CRM 회원 검색 조회
*******************************************************/
const fn_move_target = function(goUrl) {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/mbr/selectMbrInfoUpdtForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
</script>
<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="editUserInfo">
<form id="listForm" name="listForm" action="">
<input type="hidden" id="mbrInnb" name="mbrInnb" value="1275059"/>
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="GC"/>
<div class="editUserPwCheck">
<h2 class="section-title">비밀번호 확인</h2>
<p class="editUserPwCheck__subTitle">회원정보 수정을 위해 현재 비밀번호를 확인해 주세요.</p>
<input class="input-text full" type="password" title="해당 인풋에 대한 설명" name="mbrPassword" id="mbrPassword" value="" placeholder="비밀번호 입력">
<div class="bottomBtnControls">
<button class="btn theme lg full" type="button" onclick="fn_select_password(); return false;">확인</button>
</div>
</div>
</form>
</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>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,182 @@
<%@ 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 : RtngudCanclRefndListFromR.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 (){
fn_display_ctrl();
});
/* ********************************************************
* 회원 탈퇴 함수
******************************************************** */
const fn_display_ctrl = function() {
$('.termCheck').on('change', function() {
const isChecked = $('.termCheck').is(':checked');
});
};
/* ********************************************************
* 회원 탈퇴 함수
******************************************************** */
const fn_regist_mbr_secsn_2 = function () {
let secsnResn = $("select[name='secsnResn']").val();
const isChecked = $('.termCheck').is(':checked');
$("#closeModalTarget").val("custom_confirm_alert");
if (isChecked) {
$.ajax({
type: "post",
url: '<c:url value="/sopmal/mpage/mbr/updateMbrSecsn"/>',
data: {secsnResn: secsnResn},
success: function (data) {
$("#customAlertCn").text("정상적으로 탈퇴 되었습니다.");
openModal('custom_alert');
$("#custom_alert").off();
$("#custom_alert").on("click",function(){
closeModal("custom_alert");
location.href ="/logout";
});
}
});
}else{
$("#customAlertCn").text("정보 삭제 동의에 체크해야합니다.");
openModal("custom_alert");
$('.termCheck').focus();
}
};
/* ********************************************************
* 회원 탈퇴 모달
******************************************************** */
const fn_regist_mbr_secsn = function () {
$("#customConfirmAlertCn").text("회원 탈퇴하시겠습니까?");
openModal('custom_confirm_alert');
$("#customConfirmBtn").off();
$("#customConfirmBtn").on("click",function(){
fn_regist_mbr_secsn_2();
closeModal("custom_confirm_alert");
});
};
</script>
<%--alertModal--%>
<div class="microModal microBottomSheet" id="postModal" aria-hidden="true" style="position: relative; z-index: 1010;">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content">
<div id="postCodeCn" style="height: 120vh;"></div>
</div>
</div>
</div>
</div>
</div>
<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="editUserInfo">
<div class="deleteAccount">
<h2 class="section-title" style="text-align: center;">탈퇴하시면 혜택이 모두 사라져요</h2>
<div class="deleteAccount__image signUp-promotion__col-3 ck-content">
<c:out value='${resultMap.sopmalInfo.joinBnef}' escapeXml='false'/>
</div>
<h2 class="section-title">탈퇴 신청</h2>
<form id="registForm">
<div class="deleteAccount__inner">
<div class="infoBox">
<p class="textInfo"><i class="icon icon_textInfo--sm"></i>회원탈퇴 시 회원님의 개인정보, 주문내역,
마일리지, 쿠폰 등 모든 정보가 바로 삭제됩니다. 회원님의 모든 SNS계정 정보가 쇼핑몰에서 삭제 됩니다.
</p>
</div>
<div class="deleteAccount__item">
<div class="deleteAccount__itemTitle">탈퇴 사유</div>
<div class="select-box">
<select class="lg" title="탈퇴 사유" name="secsnResn">
<option value="" disabled selected>탈퇴 사유를 선택해 주세요.</option>
<option value="배송 주문 불만족">배송 주문 불만족</option>
<option value="사이트 이용 불편">사이트 이용 불편</option>
<option value="상품품질 불만족">상품품질 불만족</option>
<option value="서비스 불만족">서비스 불만족</option>
<option value="기타">기타</option>
</select>
</div>
</div>
<div class="deleteAccount__item">
<div class="deleteAccount__itemTitle">내용</div>
<textarea class="textarea" rows="9" title="해당 텍스트 에어리어에 대한 설명" placeholder="최소 10자 이상으로 입력해 주세요." id="memo" name="memo"></textarea>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox is-medium checkbox">
<input class="termCheck" type="checkbox" value="">
<span class="check"></span>
<span class="control-label">예, 정보 삭제에 동의합니다.</span>
</label>
</div>
</div>
</form>
<div class="bottomBtnControls">
<button class="btn lg full outline">취소</button>
<button type="button" class="btn lg full gray" onclick="fn_regist_mbr_secsn();">탈퇴하기</button>
</div>
</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,134 @@
<%@ 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 : WslistInqireR.jsp
Description : 배송 추적
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-27 추지훈 최초 생성
--%>
<!-- 모달 -->
<!-- 배송 정보 -->
<div class="microModal microBottomSheet" id="deliveryInfoPop" 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">
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content">
<div class="modalInfo modalInfo--deliveryInfo">
<h5 class="modalInfo__title">배송 조회</h5>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 30%;">
<col style="width: 70%;">
</colgroup>
<tbody>
<tr>
<th>주문자</th>
<td>
<c:out value="${ resultMap.result.ordrrNm }"/>
</td>
</tr>
<tr>
<th>수령인</th>
<td>
<c:out value="${ list.recpntNm }"/>
</td>
</tr>
<tr>
<th>배송지</th>
<td>
<c:if test="${ not empty list.dlvylcZip }">(<c:out value="${ list.dlvylcZip }"/>)</c:if>
<c:choose>
<c:when test="${ list.dlvylcAdresDvCd eq '01'}">
<c:out value="${ list.dlvylcRnmAdres }"/>
</c:when>
<c:when test="${ list.dlvylcAdresDvCd eq '02'}">
<c:out value="${ list.dlvylcLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ list.dlvylcAdresDtl }"/>
</td>
</tr>
<tr>
<th>택배사</th>
<td>
<c:out value="${ list.hdrycpnNm }"/>
</td>
</tr>
<tr>
<th>송장번호</th>
<td>
<c:out value="${ list.invcnb }"/>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<table class="table vertical tight modalInfo__deliveryTable">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%;">
<col style="width: 34%;">
<col style="width: 26%;">
</colgroup>
<thead>
<tr>
<th>처리일시</th>
<th>상품위치</th>
<th>배송상태</th>
</tr>
</thead>
<tbody>
<c:forEach var="trackingList" items="${ list.trackingDetails }" varStatus="status">
<tr
<c:if test="${ trackingList.kind eq '배송완료'}">
class="deliveryCompleted"
</c:if>
>
<td><c:out value="${ trackingList.time }"/></td>
<td>
<c:out value="${ trackingList.where }"/>
</td>
<td><c:out value="${ trackingList.kind }"/></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="상품 이미지"/>
</div>
<p class="noResult__text">배송 조회 내역이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,803 @@
<%@ 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"%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<script src="<c:url value='/js/dlvylc/dlvylc.js'/>"></script>
<script>
$(document).ready(function() {
fn_set_param();
fn_init();
fn_event();
fn_dlvy_event();
});
/* ********************************************************
* 초기 설정
**********************************************************/
const fn_init = function() {
$('.header').find('h1.header__title').text('선물함');
fn_get_ordr_dlvy_list(1);
}
/* ********************************************************
* 이벤트 설정
**********************************************************/
const fn_event = function() {
/* 필터 버튼 선택 이벤트 */
$('#btnFilter').on('click', function () {
const modalId = $(this).attr('data-micromodal-trigger');
MicroModal.show(modalId, {
onShow: function (modal) {
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
},
});
});
/* 검색조건 > 날짜 구간 버튼 클릭 이벤트 */
$('.dateRange-btn').on('click', function () {
const date = $(this).attr('id');
$(this).closest('div').find('#dateRange').val(date);
if ('allDays' === date) {
$('#bgnDt, #endDt').val('');
return false;
}
fn_set_date('bgnDt', 'endDt', 'endDt', date);
});
/* 검색 버튼 선택 이벤트 */
$('#btnSearch').on('click', function () {
fn_get_ordr_dlvy_list(1);
$(this).closest('.microModal').find('.microModal__close').trigger('click');
});
/* 이전내역 더보기 버튼 선택 이벤트 */
$('#btnNextPage').on('click', function () {
let index = $('#pageIndex').val();
if (!fn_is_empty(index)) {
index = parseInt(index) + 1;
}
fn_get_ordr_dlvy_list(index);
});
}
/* ********************************************************
* function
**********************************************************/
/* 주문/배송 목록 조회 */
const fn_get_ordr_dlvy_list = function (index) {
const loading = fn_set_load_more();
if (!fn_is_empty(index)) {
$('#pageIndex').val(index);
}
let data = $('#condForm').serialize();
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectMbrGfitListInqireScrollAjax"/>',
data:data,
success:function (data) {
if (data.resBody != null) {
const result = JSON.parse(data.resBody.result);
fn_set_ordr_dlvy_list(result, index);
}
loading.remove();
},
error:function (request) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
loading.remove();
}
});
}
/* 주문/배송 목록 세팅 */
const fn_set_ordr_dlvy_list = function (data, index) {
let rowCnt = 0;
let div = '';
const ordrDlvyList = data.resultList;
const cdnurl = '${cdnurl}';
if (!fn_is_empty(ordrDlvyList)) {
rowCnt = data.paginationInfo.totalRecordCount;
for (let i=0; i < ordrDlvyList.length; i++) {
let row = ordrDlvyList[i];
div += '<div class="sub-box">';
div += ' <div class="orderListItem">';
div += ' <div class="orderListItem__top">';
div += ' <span class="orderListItem__top__date"><span class="misc">'+ row.ordrDt +'(' + row.ordrInnb +')</span></span>';
div += ' <a href="javascript:void(0);" onclick="fn_go_ordr_dtl(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\');" class="orderListItem__top__more">상세보기</a>';
div += ' </div>';
div += ' <div class="orderListItem__body">';
div += ' <div class="orderListItem__image">';
div += ' <a href="/sopmal/goods/selectGoodsDtl?sopmalCd=' + row.sopmalCd + '&goodsInnb=' + row.goodsInnb + '">';
div += ' <img src="' + cdnurl + row.goodsImageUrl + '" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + row.goodsNm + '">';
div += ' </a>';
div += ' </div>';
div += ' <div class="orderListItem__right">';
div += ' <div class="orderListItem__info">';
div += ' <p class="orderListItem__info__status">' + row.ordrSttusNm + '</p>';
div += ' <a href="javascript:void(0);" onclick="fn_go_ordr_dtl(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\');" class="orderListItem__info__name">' + row.goodsNm + '</a>';
div += ' <p class="orderListItem__info__option">' + row.optnNm + '</p>';
div += ' <p class="orderListItem__info__quantity">' + row.orderCnt + '개<span class="orderListItem__info__dot">·</span><span class="comma">' + (row.setleAmt).toLocaleString() + '</span>원';
div += ' </p>';
div += ' </div>';
div += ' </div>';
div += ' </div>';
div += ' <div class="orderListItem__btnControls">';
const ordrSttusCd = parseInt(row.ordrSttusCd);
div += '<a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop(\'' + row.ordrInnb + '\');" class="btn outline">선물 조회</a>';
div += ' </div>';
div += ' </div>';
div += '</div>';
}
if (1 === index) {
$('#ordrDlvyList').empty();
}
$('#ordrDlvyList').append(div);
$('.fullBtnSection').show();
} else {
const rowCnt = $('#ordrDlvyList').find('.sub-box').length;
if (0 !== rowCnt) {
fn_call_alert_modal('<spring:message code="common.nodata"/>');
return false;
}
div += '<div class="sub-box">';
div += ' <div class="noResult">';
div += ' <div class="noResult__image">';
div += ' <img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="상품 이미지"/>';
div += ' </div>';
div += ' <p class="noResult__text">선물내역이 없습니다.</p>';
div += ' </div>';
div += '</div>';
$('#ordrDlvyList').empty().append(div);
$('.fullBtnSection').hide();
}
$('#rowCnt').text(rowCnt);
}
/* 주문 무효 상태 수정 확인창 */
const fn_post_cancl_ordr_confirm = function (sopmalCd, ordrInnb) {
const modalId = 'confirmModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text('주문을 취소하시겠습니까?')
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
// 기존 이벤트 제거 (중복 방지)
$(modal).find('#btnConsfirm').off('click');
$(modal).find('#btnConsfirm').on('click', function () {
$(modal).find('#btnCancel').trigger('click');
fn_post_cancl_ordr(sopmalCd, ordrInnb);
});
}
});
}
/* 주문 무효 상태 수정 */
const fn_post_cancl_ordr = function (sopmalCd, ordrInnb) {
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/updateCanclOrdr"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb
},
success:function (data) {
if (data.resBody != null) {
fn_call_alert_modal('주문이 취소되었습니다.');
fn_get_ordr_dlvy_list(1);
}
},
error:function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/* 구매확정 수정 확인창 */
const fn_post_purchs_dcsn_by_ordr_confirm = function (sopmalCd, ordrInnb) {
const modalId = 'confirmModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text('구매확정 하시겠습니까?')
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
// 기존 이벤트 제거 (중복 방지)
$(modal).find('#btnConsfirm').off('click');
$(modal).find('#btnConsfirm').on('click', function () {
$(modal).find('#btnCancel').trigger('click');
fn_post_purchs_dcsn_by_ordr(sopmalCd, ordrInnb);
});
}
});
}
/* 구매확정 수정 */
const fn_post_purchs_dcsn_by_ordr = function (sopmalCd, ordrInnb) {
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/updatePurchsDcsnByOrdr"/>',
data:{
'sopmalCd':sopmalCd,
'ordrInnb':ordrInnb
},
success:function (data) {
if (data.resBody != null) {
alert('정상적으로 구매확정 되었습니다.');
fn_get_ordr_dlvy_list(1);
}
},
error:function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/* 결제취소 팝업 화면 호출 */
const fn_call_setle_cancl_pop = function (sopmalCd, ordrInnb, ordrDlvyInnb, setleDt) {
const setleDate = new Date(setleDt);
const stdDate = new Date('2024-11-21 20:00:00');
if (setleDate < stdDate) {
alert("고객센터로 문의해주세요.");
return;
}
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>');
$(form).submit();
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
},
success:function (html) {
$('#refund-pop').remove();
$('#refundPopupDiv').html(html);
const popup = $('#refund-pop');
$(popup).find('.orderRefundPop .select-box select').niceSelect();
$(popup).find('#refundAcntnb').on("input", function () {
this.value = this.value.replace(/[^0-9]/g, "");
});
$(popup).modal();
}
});
*/
}
/* 반품/환불 신청 팝업 화면 호출 */
const fn_call_refund_pop = function (sopmalCd, ordrInnb, setleDt) {
const setleDate = new Date(setleDt);
const stdDate = new Date('2024-11-21 20:00:00');
if (setleDate < stdDate) {
alert("고객센터로 문의해주세요.");
return;
}
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectRetrunRegistPopupForm"/>');
$(form).submit();
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
},
success:function (html) {
$('#refund-pop').remove();
$('#refundPopupDiv').html(html);
const popup = $('#refund-pop');
$(popup).find('.orderRefundPop .select-box select').niceSelect();
$(popup).find('#refundAcntnb').on("input", function () {
this.value = this.value.replace(/[^0-9]/g, "");
});
$(popup).modal();
}
});
*/
}
/* 배송조회 팝업 화면 호출 */
const fn_call_dlvy_sweettracker_pop = function (ordrInnb) {
$.ajax({
type: 'post',
url: '/sopmal/mpage/ordr/selectDlvyInqire',
data: {
ordrInnb : ordrInnb
},
success: function (data) {
$('#deliveryInfoPop').remove();
$('#modalDiv').html(data);
openModal('deliveryInfoPop');
}
});
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectDlvyInqire"/>',
data:{
ordrInnb:ordrInnb
},
success:function (data) {
$('#modalDiv').html(data);
$('#delivery-check-pop').remove().modal();
}
});
*/
}
/* 나의 리뷰 화면 이동 */
const fn_go_my_rvw = function (sopmalCd) {
let form = $('<form></form>');
form.attr('name', 'newForm');
form.attr('method', 'post');
form.attr('action', '<c:url value="/sopmal/mpage/act/selectMyRvwInqireForm"/>');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
form.appendTo('body');
form.submit();
}
/* 주문상세 이동 */
const fn_go_ordr_dtl = function (sopmalCd, ordrInnb) {
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'get');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrDtlInqire"/>');
$(form).submit();
}
/* 검색조건 세팅 */
const fn_set_param = function () {
const params = ${paramVO};
const keys = Object.keys(params);
console.log("params : ", params);
console.log("keys : ", keys);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let data = params[key];
if ('bgnDt' === key || 'endDt' === key) {
if (!fn_is_empty(data)) {
for (let i = 0; i < data.length; i++) {
$('#' + key).val(data);
}
}
}
if ('dateRange' === key) {
$('#' + data).trigger('click');
}
if ('srchwrd' === key) {
$('#' + key).val(data);
}
}
}
/* 알림 창 */
const fn_call_alert_modal = function (message) {
const modalId = 'alertModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text(message)
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({modal: 'open'}, '', '#' + modalId);
}
}
});
}
/* 로딩 */
const fn_set_load_more = function () {
let loadingImg = document.createElement('img'); // 로딩 중임을 알리는 이미지 생성
loadingImg.src = '/mobile/images/loading.svg'; // 로딩 중임을 알리는 이미지 설정
loadingImg.classList.add('loadingImg'); // 클래스 추가
document.body.appendChild(loadingImg); // 리스트에 추가
return loadingImg;
}
/*배송지 팝업 이벤트*/
const fn_dlvy_event = () => {
//삭제확인
$(document).on("click","#delCfrmBtn", function () {
let adbkInnb = $(this).attr("adbk-innb");
//let mbrInnb = $("#mbrInnb").val();
//let mbrDvCd = $("#mbrDvCd").val();
$.ajax({
type: 'post',
url: '/sopmal/mpage/mbr/deleteDlvylcDel',
data: {
adbkInnb: adbkInnb
},
success: function (data) {
closeModal("confirm_del_alert");
openModal("success_del_alert");
}
});
});
/*삭제성공*/
$(document).on("click","#delSuccessBtn", function () {
closeModal("success_del_alert");
closeModal("address-management");
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
$(document).on('click','.headerTab__item', function () {
var idx = $(this).index();
$('.headerTab__item').removeClass('active');
$(this).addClass('active');
$('.tabContent').hide();
$('.tabContent').eq(idx).show();
});
$(document).on("click","#regFormBtn", function () {
// 배송지 관리 탭
$('.headerTab__item').removeClass('active');
$('.headerTab__item').eq(1).addClass('active');
$('.tabContent').hide();
$('.tabContent').eq(1).show();
document.getElementById("regForm").scrollIntoView();
});
//등록성공
$(document).on("click","#successClose", function () {
closeModal('successModal');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
/*수정 모달 삭제 시 관리 팝업으로 이동*/
$(document).on("click", '#dlvylcUpdtClose',function () {
closeModal('dlvylcUpdtForm');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
/*수정성공*/
$(document).on("click","#successUpdtClose", function () {
closeModal('dlvylcUpdtFormPop');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
$(document).on("click", "#selectAdres", function () {
const dlvylc = JSON.parse(localStorage.getItem('dlvylc'));
let checkCnt = 0;
$(".adbkInnb").each(function (index) {
if ($(this).is(":checked")) {
idx = index;
checkCnt += 1;
}
});
if (checkCnt <= 0) {
alert("배송지를 선택해 주세요.");
return false;
}
openConfirmModal(function (onSuccess) {
fn_set_dlvylc_2(onSuccess, dlvylc);//수정 함수
}, 'confirm_updt_alert'
, '#updtCfrmBtn'
, 'success_updt_alert'
, '#updtSuccessBtn'
, fn_set_dlvylc_3);
});
}
/* 배송지 수정 팝업 화면 호출 */
const fn_dlvylc_manage_pop = function (sopmalCd, ordrInnb, ordrDlvyInnb) {
localStorage.removeItem('dlvylc');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
const dlvylc = {
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
};
localStorage.setItem('dlvylc', JSON.stringify(dlvylc));
}
/* 배송지정보 > 배송지 정보 세팅 */
const fn_set_dlvylc = function (data) {
const dlvylc = JSON.parse(localStorage.getItem('dlvylc'));
dlvylc['recpntNm'] = data.recpntNm;
dlvylc['recpntMbtlnb'] = data.mbtlnb;
dlvylc['dlvylcZip'] = data.postcode;
dlvylc['dlvylcAdresDvCd'] = data.addressType;
dlvylc['dlvylcLnbAdres'] = data.jibunAddress;
dlvylc['dlvylcRnmAdres'] = data.roadAddress;
dlvylc['dlvylcAdresDtl'] = data.dtlAdres;
localStorage.setItem('dlvylc', JSON.stringify(dlvylc));
}
/*배송지 수정*/
const fn_set_dlvylc_2 = (onSuccess,dlvylc) => {
$.ajax({
type: 'post',
contentType: 'application/json',
url: '<c:url value="/sopmal/mpage/ordr/updateDlvylc"/>',
data: JSON.stringify(dlvylc),
dataType: 'json',
success:function (data) {
onSuccess();
},
error: function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/*배송지 수정 성공시 리로드*/
const fn_set_dlvylc_3 = () => {
location.reload();
}
</script>
</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="orderList">
<div class="listTop">
<span class="listTop__data">총 <em id="rowCnt">0</em>건</span>
<button type="button" id="btnFilter" class="listTop__filterBtn" data-micromodal-trigger="searchInfoPop">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g clip-path="url(#clip0_516_33716)">
<path d="M0.625 3.52566H10.1408C10.4276 4.83109 11.5934 5.81113 12.9837 5.81113C14.374 5.81113 15.5398 4.83113 15.8266 3.52566H19.375C19.7202 3.52566 20 3.24582 20 2.90066C20 2.55551 19.7202 2.27566 19.375 2.27566H15.8263C15.5389 0.970898 14.3716 -0.00976562 12.9837 -0.00976562C11.5951 -0.00976562 10.4283 0.970742 10.1411 2.27566H0.625C0.279844 2.27566 0 2.55551 0 2.90066C0 3.24582 0.279844 3.52566 0.625 3.52566ZM11.3233 2.9023C11.3233 2.90008 11.3234 2.89781 11.3234 2.89559C11.3261 1.98281 12.0709 1.24027 12.9837 1.24027C13.8952 1.24027 14.6401 1.9818 14.644 2.89414L14.6441 2.90332C14.6427 3.81766 13.8984 4.56117 12.9837 4.56117C12.0694 4.56117 11.3254 3.8184 11.3233 2.90461L11.3233 2.9023ZM19.375 16.4741H15.8263C15.5389 15.1694 14.3716 14.1887 12.9837 14.1887C11.5951 14.1887 10.4283 15.1693 10.1411 16.4741H0.625C0.279844 16.4741 0 16.7539 0 17.0991C0 17.4443 0.279844 17.7241 0.625 17.7241H10.1408C10.4276 19.0296 11.5934 20.0096 12.9837 20.0096C14.374 20.0096 15.5398 19.0296 15.8266 17.7241H19.375C19.7202 17.7241 20 17.4443 20 17.0991C20 16.7539 19.7202 16.4741 19.375 16.4741ZM12.9837 18.7596C12.0694 18.7596 11.3254 18.0168 11.3233 17.103L11.3233 17.1008C11.3233 17.0985 11.3234 17.0963 11.3234 17.0941C11.3261 16.1813 12.0709 15.4387 12.9837 15.4387C13.8952 15.4387 14.6401 16.1802 14.644 17.0925L14.6441 17.1017C14.6428 18.0162 13.8985 18.7596 12.9837 18.7596ZM19.375 9.37492H9.85918C9.57238 8.06949 8.4066 7.08949 7.01629 7.08949C5.62598 7.08949 4.4602 8.06949 4.1734 9.37492H0.625C0.279844 9.37492 0 9.65477 0 9.99992C0 10.3451 0.279844 10.6249 0.625 10.6249H4.17371C4.46109 11.9296 5.62844 12.9104 7.01629 12.9104C8.40488 12.9104 9.57172 11.9298 9.85895 10.6249H19.375C19.7202 10.6249 20 10.3451 20 9.99992C20 9.65477 19.7202 9.37492 19.375 9.37492ZM8.67668 9.99828C8.67668 10.0005 8.67664 10.0028 8.67664 10.005C8.67391 10.9178 7.9291 11.6603 7.01629 11.6603C6.10477 11.6603 5.35992 10.9188 5.35598 10.0065L5.35586 9.99734C5.35723 9.08289 6.10156 8.33949 7.01629 8.33949C7.93059 8.33949 8.67465 9.08223 8.67672 9.99605L8.67668 9.99828Z" fill="black" />
</g>
<defs>
<clipPath id="clip0_516_33716">
<rect width="20" height="20" fill="white"></rect>
</clipPath>
</defs>
</svg>
<span class="visually-hidden">검색 필터</span>
</button>
</div>
<div style="margin-bottom: 10px;" id="ordrDlvyList"></div>
<div class="fullBtnSection">
<button type="button" id="btnNextPage" class="btn md outline full">
<span class="fullBtnSection__more">이전내역 더보기</span>
</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>
</div>
</div>
<!-- 검색 필터 -->
<div class="microModal microBottomSheet" id="searchInfoPop" 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">
<button type="button" class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<form id="condForm">
<input type="hidden" name="pageIndex" id="pageIndex" value="1">
<input type="hidden" name="pageUnit" id="pageUnit" value="2">
<div class="microModal__content">
<div class="dateSearch">
<div class="dateRange-btnContainer">
<input type="hidden" name="dateRange" id="dateRange" value="allDays">
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
<div class="datepicker-container">
<input type="text" name="bgnDt" id="bgnDt" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="endDt" id="endDt" class="datepicker" title="종료 날짜 선택" autocomplete="off">
</div>
<%--
<div class="nativeSelect">
<select class="full" title="해당 셀렉트에 대한 설명">
<option value="" selected disabled>전체</option>
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
</select>
</div>
--%>
<div class="input">
<input type="text" name="srchwrd" id="srchwrd" class="input-text full" title="검색어 입력" placeholder="주문번호, 상품명 검색">
</div>
<button type="button" id="btnSearch" class="btn full lg theme">조회</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<%-- 마이크로 모달 DIV 시작--%>
<div id="modalDiv"></div>
<div id="dlvyDiv"></div>
<div class="microModal microAlert" id="alertModal" 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"></h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close>
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
<div class="microModal microAlert" id="confirmModal" 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"></h2>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" id="btnCancel" class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"><spring:message code="button.cancel"/></button>
<button type="button" id="btnConsfirm" class="microModal__btn microModal__btn-primary"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%-- 마이크로 모달 DIV 종료--%>
</body>
</html>

View File

@@ -0,0 +1,67 @@
<%@ 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 : RtngudCanclRefndListR.jsp
Description : 마이페이지 반품/환불 내역
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-27 추지훈 최초 생성
--%>
<!--<div class="sub-tab__content current">-->
<div class="orderList">
<c:choose>
<c:when test="${ not empty resultMap.allOrdrList && fn:length(resultMap.allOrdrList) > 0 }">
<c:forEach var="list" items="${ resultMap.allOrdrList }" varStatus="status">
<div class="orderList__item">
<div class="orderList__item__inner">
<a href="" class="orderList__image">
<img src="<c:out value="${ list.goodsImageUrl }"/>" alt="상품 이미지">
</a>
<div class="orderList__description">
<div class="orderList__description__first">
<div class="orderList__item__top">
<a href="" class="orderList__orderNum"><c:out value="${ list.ordrInnb }"/>
</a>
<span class="orderList__dot">·</span>
<span class="orderList__date"><c:out value="${ list.ordrDt }"/> 주문</span>
</div>
<a href="" class="orderList__productTitle"><c:out value="${ list.goodsNm }"/></a>
<span class="orderList__option"><c:out value="${ not empty list.optnNm ? '옵션 : ' += list.optnNm : '' }"/></span>
</div>
<div class="orderList__description__second">
<span class="orderList__price"><span class="comma"><c:out value="${ list.setleAmt }"/></span>원</span>
</div>
<div class="orderList__description__third">
<span class="orderList__mileage"><span class="comma">예상적립 <fmt:formatNumber value="${ list.mlgAmt }" pattern="#,###"/></span>원</span>
</div>
<div class="orderList__btnControls">
<button type="button" class="btn outline sm full" onclick="fn_select_gift_current_situation( '#modalDiv', '#gift-sittn-pop', '<c:out value="${ list.ordrInnb }"/>' );" >선물 조회</button>
</div>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="orderList__no-result">
<img src="/pc/images/icon__no-result.png" alt="">
<p class="orderList__no-result-text">
선물내역이 없습니다.
</p>
</div>
</c:otherwise>
</c:choose>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_gift_list" />
</div>
<!--</div>-->

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 : GiftOrdrSittnPopupR.jsp
Description : 마이페이지 선물함 선물현황 조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-27 추지훈 최초 생성
--%>
<!-- 모달 -->
<!-- 선물 조회 -->
<div id="gift-sittn-pop" class="modal default" style="max-width: 640px;">
<div class="modal-header">
<div class="modal-header__title">선물 조회</div>
</div>
<div class="modal-content">
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<div class="table-wrapper">
<table class="table deliveryInfo">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>
수령인
</th>
<td><c:out value="${ list.recpntNm }"/></td>
</tr>
<tr>
<th>
선물상태
</th>
<td>
<c:out value="${ list.giftSttusCdNm }"/>
</td>
</tr>
<tr>
<th>
배송지
</th>
<td>
<c:if test="${ not empty list.dlvylcZip }">(<c:out value="${ list.dlvylcZip }"/>)</c:if>
<c:choose>
<c:when test="${ list.dlvylcAdresDvCd eq '01'}">
<c:out value="${ list.dlvylcRnmAdres }"/>
</c:when>
<c:when test="${ list.dlvylcAdresDvCd eq '02'}">
<c:out value="${ list.dlvylcLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ list. dlvylcAdresDtl }"/>
</td>
</tr>
</tbody>
</table>
</div>
<hr>
<br>
</c:forEach>
<div class="table-wrapper">
<table class="table deliveryInfo">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>
수령인
</th>
<td>홍길동</td>
</tr>
<tr>
<th>
선물상태
</th>
<td>
선물수락
</td>
</tr>
<tr>
<th>
배송지
</th>
<td>
배송지배송지배송지
</td>
</tr>
</tbody>
</table>
</div>
<hr>
<br>
<div class="table-wrapper">
<table class="table deliveryInfo">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>
수령인
</th>
<td>김준식</td>
</tr>
<tr>
<th>
선물상태
</th>
<td>
선물수락
</td>
</tr>
<tr>
<th>
배송지
</th>
<td>
배송지배송지배송지
</td>
</tr>
</tbody>
</table>
</div>
<hr>
<br>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn large outline">닫기</a>
</div>
</div>

View File

@@ -0,0 +1,436 @@
<%@ 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 : WslistInqireRForm.jsp
Description : 마이페이지 위시리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-27 추지훈 최초 생성
--%>
<script defer>
fn_set_niceSelect_datePicker('.select-box')
/*************************************************************
장바구니 버튼 이벤트 (바텀시트)
**************************************************************/
// 일반옵션
// 라디오 버튼 클릭시, 상품 정보 배열에 추가 및 화면에 추가
$(".productOption .product-option__item").each(function () {
$(this).find("input[type=radio]").on("change", function () { // 라디오 버튼 클릭 시
if ($(this).prop('checked') == false) return; // 체크 해제시 리턴
const $title = $(this).closest(".product-option__item").find("label").text();
const $price = $(this).closest(".product-option__item").find(".product-option__price").text();
const $goodsOptnInnb = $(this).closest(".product-option__item").find('input[name="goodsOptnInnb"]').val()
const $goodsOptnTy = $(this).closest(".product-option__item").find('input[name="goodsOptnTy"]').val()
const $optnInfo = $(this).closest(".product-option__item").find('.product-option__monthly-payment').text();
const $priceNum = parseInt($price.replace(/,/g, ""));
//이미 추가된 상품인지 확인
var isItemAlreadyAdded = productArr.some(function (item) {
return item[0] === $title;
});
if (isItemAlreadyAdded){
fn_goods_duplicate_select_modal()
return;
}
productArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy]); // 배열에 상품 정보 추가
$('#countContainer').append( // 화면에 상품 정보 추가
'<div class="product-count">' +
'<div class="product-count__amount-top">' +
'<span class="product-count__amount-title">' + $title + '</span>' +
'<button type="button" class="product-count__amount-delete"><span class="visually-hidden">삭제</span></button>' +
'</div>' +
'<div class="product-count__amount-bottom">' +
'<div class="product-count__amount-counter">' +
'<button type="button" class="product-count__amount-btn minus"><span class="visually-hidden">감소</span></button>' +
'<span class="product-count__amount-number">1</span>' +
'<button type="button" class="product-count__amount-btn plus"><span class="visually-hidden">추가</span></button>' +
'</div>' +
'<div class="product-count__amount-price-box">' +
'<span class="product-count__amount-monthly-price">'+$optnInfo+'</span>' +
'<span class="product-count__amount-price"><span class="comma product-count__priceNum">' + $price +
'</div>' +
'</div>' +
'</div>'
);
updateCounters(); // 화면에 상품 정보 업데이트
});
});
//재고옵션
$('#additionalSelect').on("change", "select", function () { // 셀렉트 선택 시
if ($('#additionalSelect').find('.option.selected.disabled').length > 0) return;
if ($('#additionalSelect').find('.option.selected').length == $('#additionalSelect').find('.nice-select').length) { // 모든 셀렉트가 선택되면
var $title = $('#addCartGoodsNm').val();
var $optInfo = $(this).closest('.select-box').find(".option.selected").attr("data-value").split('|');
var $priceNum = $optInfo[0];
var $goodsOptnInnb = $optInfo[1];
var $goodsOptnInfo = $optInfo[2];
var $goodsOptnTy = $optInfo[3];
var arr = [];
for (var i = 0; i < $('#additionalSelect').find('.nice-select').length; i++) {
arr.push($('#additionalSelect').find('.nice-select').eq(i).find('.option.selected').text());
}
//이미 추가된 상품인지 확인
var isItemAlreadyAdded = productArr.some(function (item) {
return item[0] === $title && item[6].join('') === arr.join('') || item[4] === $goodsOptnInnb;
});
if (isItemAlreadyAdded){
fn_goods_duplicate_select_modal()
return;
}
productArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy, arr]); // 배열에 상품 정보 추가
let additionalSelectText = '옵션 : ' + arr.join(' / ').replace(/\(\+.*?\)/g, ''); // 추가정보 텍스트로 변환
$('#countContainer').append( // 화면에 상품 정보 추가
'<div class="product-count">' +
'<div class="product-count__amount-top">' +
'<span class="product-count__amount-title">' + $title + '</span>' +
'<div class="productDetailInfo__count__additionalSelect">' + additionalSelectText + '</div>' +
'<button type="button" class="product-count__amount-delete"><span class="visually-hidden">삭제</span></button>' +
'</div>' +
'<div class="product-count__amount-bottom">' +
'<div class="product-count__amount-counter">' +
'<button type="button" class="product-count__amount-btn minus"><span class="visually-hidden">감소</span></button>' +
'<span class="product-count__amount-number">1</span>' +
'<button type="button" class="product-count__amount-btn plus"><span class="visually-hidden">추가</span></button>' +
'</div>' +
'<div class="product-count__amount-price-box">' +
'<span class="product-count__amount-monthly-price">'+$goodsOptnInfo+'</span>' +
'<span class="product-count__amount-price"><span class="comma product-count__priceNum">' + $priceNum +
'</div>' +
'</div>' +
'</div>'
);
}
updateCounters(); // 화면에 상품 정보 업데이트
});
// 추가구성옵션
$("#moreItemsSelect").on("change",'select', function () {
const $moreItems = $('#moreItemsSelect').find(".select-box");
const $optInfoOptn3 = $(this).closest(".select-box").find(".option.selected").attr('data-value').split('|');
const $priceNumOptn3 = $optInfoOptn3[0];
const $goodsOptnInnbOptn3 = $optInfoOptn3[1];
const $goodsOptnInfoOptn3 = $optInfoOptn3[2];
const $goodsOptnTyOptn3 = $optInfoOptn3[3];
const $optnEssnlAtOptn3 = $(this).closest(".select-box").find('input[name="selectOptionItem__otpnEssntlAt__added"]').val();
var $title = $(this).closest(".select-box").find(".option.selected").text().replace('선택', ' ').replace(/\(\+.*?\)/g, '');
var $priceNum = $(this).find(".option.selected").attr("data-value");
//이미 추가된 상품인지 확인
var isItemAlreadyAdded = productArr.some(function (item) {
return item[4] === $goodsOptnInnbOptn3;
});
if (isItemAlreadyAdded){
fn_goods_duplicate_select_modal()
return;
}
productArr.push([$title, 1, $priceNumOptn3, $priceNumOptn3 * 1, $goodsOptnInnbOptn3, $goodsOptnTyOptn3, $optnEssnlAtOptn3]); // 배열에 상품 정보 추가
$('#countContainer').append( // 화면에 상품 정보 추가
'<div class="product-count">' +
'<div class="product-count__amount-top">' +
'<span class="product-count__amount-title">' + $title + '</span>' +
'<button type="button" class="product-count__amount-delete"><span class="visually-hidden">삭제</span></button>' +
'</div>' +
'<div class="product-count__amount-bottom">' +
'<div class="product-count__amount-counter">' +
'<button type="button" class="product-count__amount-btn minus"><span class="visually-hidden">감소</span></button>' +
'<span class="product-count__amount-number">1</span>' +
'<button type="button" class="product-count__amount-btn plus"><span class="visually-hidden">추가</span></button>' +
'</div>' +
'<div class="product-count__amount-price-box">' +
'<span class="product-count__amount-monthly-price">'+$goodsOptnInfoOptn3+'</span>' +
'<span class="product-count__amount-price"><span class="comma product-count__priceNum">' + $priceNum +
'</div>' +
'</div>' +
'</div>'
);
$(this).val('').niceSelect('update')
updateCounters(); // 화면에 상품 정보 업데이트
});
// 총 상품금액
var $totalPrice = $(".productDetailInfo__priceTotal__totalPriceNum");
// 수량 "-", "+" 버튼 클릭 시, 수량 증감 및 가격 변경 및 총 상품금액 변경
$("#countContainer").on("click", ".product-count__amount-btn", function () { // 수량 버튼 클릭 시
var $counter = $(this);
var $index = $counter.closest(".product-count").index(); // 해당 상품의 인덱스
if ($(this).hasClass("minus")) { // "-" 버튼 클릭 시
if (productArr[$index][1] <= 1) return;
productArr[$index][1]--; // 배열에서 해당 상품의 수량 감소
productArr[$index][3] = productArr[$index][1] * productArr[$index][2]; // 배열에서 해당 상품의 총 가격 변경
} else { // "+" 버튼 클릭 시
productArr[$index][1]++; // 배열에서 해당 상품의 수량 증가
productArr[$index][3] = productArr[$index][1] * productArr[$index][2]; // 배열에서 해당 상품의 총 가격 변경
}
updateCounters(); // 화면에 상품 정보 업데이트
})
//배열 내용을 바탕으로 각 아이템 텍스트 변경
function updateCounters() {
$(".productOption .product-count").each(function () {
var $counter = $(this);
var $index = $counter.index();
var $number = $counter.find(".product-count__amount-number");
var $price = $counter.find(".product-count__priceNum");
$number.text(productArr[$index][1]);
$price.text(addComma(productArr[$index][3]) + "원");
});
updateTotalPrice(); // 총 상품금액 업데이트
}
// 3자리마다 "," 추가
function addComma(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
// 총 상품금액 업데이트
function updateTotalPrice() {
var totalPrice = 0; // 총 상품금액
for (var i = 0; i < productArr.length; i++) {
totalPrice += productArr[i][3]; // 배열의 총 가격을 더함
}
$totalPrice.text(addComma(totalPrice)); // 총 상품금액 텍스트 변경
}
// x버튼 클릭 시 삭제
$("#countContainer").on("click", ".product-count__amount-delete", function () { // x 버튼 클릭 시
var $index = $(this).closest(".product-count").index();
productArr.splice($index, 1); // 배열에서 해당 상품 삭제
$(this).closest(".product-count").remove(); // 화면에서 해당 상품 삭제
updateCounters(); // 화면에 상품 정보 업데이트
//일반옵션이 하나일 경우 라디오 체크 해제
if($('#option-change-popUp .custom-radio:not(:has(span))').length ===1
|| productArr.filter(item => item[5] === '01'&& $('#goodsInnb').val() ===item[6]).length === 0){
$("input[name='r-group01']").prop('checked', false)
}
});
// 마지막으로 생성된 상품에 각인 정보 추가 TODO :: 입력옵션
// $('#addTextBtn').on('click', function () {
// var $index = $(".productOption .product-count").length - 1;
// var $text = $('#addTextInput').val();
// console.log(productArr[$index]); // 인덱스 확인
// $(".productOption .product-count").eq($index).find(".product-count__amount-top").append('<div class="productDetailInfo__count__additionalSelect">각인문구 : ' + $text + '</div>');
//
// console.log(productArr); // 배열 정보확인
// });
</script>
<!-- 상품옵션 선택 -->
<div class="microModal microBottomSheet" id="option-change-popUp" 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">
<button type="button" class="microModal__close" aria-label="창 닫기" onclick="closeModal('option-change-popUp')"></button>
</div>
<div class="microModal__content">
<c:if test="${resultMap.goodsDtl.goodsSttusCd eq '01'}">
<input type="hidden" id="addCartGoodsInnb" value="${resultMap.goodsDtl.goodsInnb}"/>
<input type="hidden" id="sopmalCd" value="${resultMap.goodsDtl.sopmalCd}"/>
<input type="hidden" id="addCartGoodsNm" value="${resultMap.goodsDtl.goodsNm}"/>
<input type="hidden" id="slepricDscntAmt" value="${resultMap.goodsDtl.slepric }"/>
<c:forEach var="cardDv" items="${resultMap.cartDvList}">
<input type="hidden" value="${cardDv.cd}" id="cartDv-${cardDv.cdNm}"/>
</c:forEach>
<c:choose>
<c:when test="${not empty resultMap.optnList}">
<div class="productOption">
<c:if test="${not empty resultMap.optnList.normalOptnList}">
<p class="productOption__title">옵션 선택</p>
<div class="product-option">
<c:forEach var="goodsOpt01" items="${resultMap.optnList.normalOptnList}" varStatus="optList01">
<c:if test="${goodsOpt01.optnExpsrAt eq 'Y'}">
<c:if test="${goodsOpt01.invntrySldoutExpsrAt eq 'Y'}">
<div class="product-option__item">
<c:if test="${not empty goodsOpt01.optnVal1}">
<div class="custom-radio is-medium">
<input type="radio" id="r-${goodsOpt01.optnOrdr}" name="r-group01" <c:if test="${goodsOpt01.disableAt eq 'Y'}"> disabled</c:if> >
<label for="r-${goodsOpt01.optnOrdr}">${goodsOpt01.optnVal1}</label>
<input type="hidden" name="optnCd" value="${goodsOpt01.optnCd1}">
<input type="hidden" name="goodsOptnInnb" value="${goodsOpt01.goodsOptnInnb}"/>
<input type="hidden" name="goodsOptnTy" value="${goodsOpt01.optnTy}"/>
<input type="hidden" name="goodsSopmalCd" value="${goodsOpt01.sopmalCd}"/>
<c:if test="${goodsOpt01.disableAt eq 'Y'}"> <span>(품절)</span></c:if>
</div>
<div class="product-option__right">
<span class="product-option__price"><fmt:formatNumber value="${goodsOpt01.slepric}"/>원</span>
<span class="product-option__monthly-payment">${goodsOpt01.optnInfo}</span>
</div>
</c:if>
</div>
</c:if>
</c:if>
</c:forEach>
</div>
</c:if>
<c:if test="${not empty resultMap.optnList.invntryOptnList}">
<p class="productOption__title">옵션 선택</p>
<div class="selectOptionItem" id="additionalSelect">
<c:if test="${not empty resultMap.optnList.invntryOptnList[0].optnNm1}">
<div class="select-box">
<select class="full" title="해당 셀렉트에 대한 설명" id="selectAddCartInvntryOptn1" name="selectAddCartInvntryOptn">
<option value="" selected>선택</option>
<c:forEach var="goodsOpt02" items="${resultMap.optnList.invntryOptnList}" varStatus="optList02">
<c:if test="${goodsOpt02.optnExpsrAt eq 'Y'}">
<c:if test="${goodsOpt02.invntrySldoutExpsrAt eq 'Y'}">
<c:if test="${goodsOpt02.optnVal1 ne resultMap.optnList.invntryOptnList[optList02.index-1].optnVal1}">
<option value="${goodsOpt02.slepric}|${goodsOpt02.goodsOptnInnb}|${goodsOpt02.optnInfo}|${goodsOpt02.optnTy}" <c:if test="${goodsOpt02.disableAt eq 'Y'}"> disabled </c:if> >
<c:out value="${goodsOpt02.optnVal1}"/>
</option>
</c:if>
</c:if>
</c:if>
</c:forEach>
</select>
</div>
</c:if>
<c:if test="${not empty resultMap.optnList.invntryOptnList[0].optnNm2}">
<div class="select-box">
<select class="full" title="해당 셀렉트에 대한 설명" id="selectAddCartInvntryOptn2" name="selectAddCartInvntryOptn">
<option value="" disabled selected>선택</option>
</select>
</div>
</c:if>
<c:if test="${not empty resultMap.optnList.invntryOptnList[0].optnNm3}">
<div class="select-box">
<select class="full" title="해당 셀렉트에 대한 설명" id="selectAddCartInvntryOptn3" name="selectAddCartInvntryOptn">
<option value="" disabled selected>선택</option>
</select>
</div>
</c:if>
<c:if test="${not empty resultMap.optnList.invntryOptnList[0].optnNm4}">
<div class="select-box">
<select class="full" title="해당 셀렉트에 대한 설명" id="selectAddCartInvntryOptn4" name="selectAddCartInvntryOptn">
<option value="" disabled selected>선택</option>
</select>
</div>
</c:if>
</div>
</c:if>
<c:if test="${not empty resultMap.optnList.addedOptnList}">
<p class="productOption__title">추가구성</p>
<div class="selectOptionItem" id="moreItemsSelect">
<c:forEach var="goodsOpt03" items="${resultMap.optnList.addedOptnList}" varStatus="optList03">
<c:if test="${not empty goodsOpt03.optnNm1}">
<c:if test="${resultMap.optnList.addedOptnList[optList03.index-1].optnNm1 ne goodsOpt03.optnNm1}">
<div class="select-box">
<input type="hidden" name="selectOptionItem__otpnEssntlAt__added" <c:if test="${goodsOpt03.optnEssntlAt eq 'Y'}"> value="Y"</c:if>/>
<select class="full" title="해당 셀렉트에 대한 설명" name="selectAddedOptn">
<option value="" disabled selected>${goodsOpt03.optnNm1} 선택</option>
<c:forEach var="goodsOptVal03" items="${resultMap.optnList.addedOptnList}" varStatus="optVal03">
<c:if test="${goodsOptVal03.optnNm1 eq goodsOpt03.optnNm1}">
<c:if test="${goodsOptVal03.optnExpsrAt eq 'Y'}">
<c:if test="${goodsOptVal03.invntrySldoutExpsrAt eq 'Y'}">
<option value="${goodsOptVal03.slepric}|${goodsOptVal03.goodsOptnInnb}|${goodsOptVal03.optnInfo}|${goodsOptVal03.optnTy} " <c:if test="${goodsOptVal03.disableAt eq 'Y'}"> disabled</c:if> ><c:out value="${goodsOptVal03.optnVal1}"/> (+ <fmt:formatNumber value="${goodsOptVal03.slepric}"/>) <c:if test="${goodsOptVal03.disableAt eq 'Y'}"> <c:out value="(품절)"/> </c:if> </option>
</c:if>
</c:if>
</c:if>
</c:forEach>
</select>
</div>
</c:if>
</c:if>
</c:forEach>
</div>
</c:if>
<%-- <p class="productOption__title">상품정보 입력</p> TODO :: 입력옵션--%>
<%-- <div class="inputOptionItem">--%>
<%-- <input id="addTextInput" class="input-text full" type="text" title="해당 인풋에 대한 설명"--%>
<%-- placeholder="각인 문구를 입력해주세요" value="">--%>
<%-- <button type="button" id="addTextBtn" class="btn outline md">저장</button>--%>
<%-- </div>--%>
<div id="countContainer">
</div>
</div>
</c:when>
<c:otherwise>
<%--옵션없음--%>
</c:otherwise>
</c:choose>
</c:if>
<div class="productOption__bottom">
<div class="product-total__container">
<span class="product-total__text">총 상품금액</span>
<span class="product-total__price">
<span class="productDetailInfo__priceTotal__totalPriceNum">0</span><span
class="won">원</span></span>
</div>
<c:choose>
<c:when test="${resultMap.goodsDtl.buttonRplcWordsUseAt ne 'Y'}">
<div class="product-btn-container">
<%-- <button type="button" class="gift-btn">선물</button> TODO :: 선물하기 추후--%>
<button type="button" class="btn theme outline addCart">장바구니</button>
<%-- <button type="button" class="btn theme purchsOrdr">구매하기</button>--%>
</div>
</c:when>
<c:otherwise>
<div class="product-btn-container">
<a href="${resultMap.goodsDtl.pcButtonRplcLink}"
<c:if test="${resultMap.goodsDtl.buttonRplcLinkBrwsrDvCd eq '01'}"> target="_blank" </c:if> >
<span> <c:out value="${resultMap.goodsDtl.buttonRplcWords}"/> </span>
</a>
</div>
</c:otherwise>
</c:choose>
<!-- 변경의 경우 -->
<!-- <div class="product-btn-container">
<button class="btn theme">변경하기</button>
</div> -->
</div>
</div>
</div>
</div>
</div>
</div>
<%--상품 중복담기 모달--%>
<div class="microModal microAlert" id="modal-error-confirm-add-cart-duplicate" 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" id="modal-error-content-add-cart-duplicate">
장바구니에 선택한 상품이 있습니다. <br/> 장바구니에 추가하시겠습니까?
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" class="microModal__btn microModal__btn-primary" id="modal-error-confirm-yesButton" onclick="closeModal('modal-error-confirm-add-cart-duplicate');">예</button>
<button type="button" class="microModal__btn" id="modal-error-confirm-noButton" onclick="closeModal('modal-error-confirm-add-cart-duplicate');">아니오</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,238 @@
<%@ 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"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<script>
$(document).ready(function() {
fn_init();
fn_event();
});
/* ********************************************************
* 초기 설정
**********************************************************/
const fn_init = function() {
$('.header').find('h1.header__title').text('개인결제내역');
fn_get_indvdi_setle_list();
}
/* ********************************************************
* 이벤트 설정
**********************************************************/
const fn_event = function() {
}
/* ********************************************************
* function
**********************************************************/
/* 개인결제 목록 조회 */
const fn_get_indvdi_setle_list = function() {
const loading = fn_set_load_more();
$.ajax({
type: 'post',
url: '<c:url value="/sopmal/mpage/ordr/selectIndvdlSetleInqireAjax"/>',
data: $('#condForm').serialize(),
success: function (html) {
$('#listDiv').html(html);
fn_scroll(fn_add_indvdi_setle_list, '');
loading.remove();
},
error: function (request) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
loading.remove();
}
});
}
/* 개인결제 스크롤 목록 조회 */
const fn_add_indvdi_setle_list = function() {
const loading = fn_set_load_more();
let index = $('#pageIndex').val();
if (!fn_is_empty(index)) {
$('#pageIndex').val(parseInt(index) + 1);
}
let data = $('#condForm').serialize();
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectMbrOrdrListInqireScrollAjax"/>',
data:data,
success:function (data) {
if (data.resBody != null) {
const result = JSON.parse(data.resBody.result);
fn_set_indvdi_setle_list(result);
fn_scroll(fn_add_indvdi_setle_list, '');
}
loading.remove();
},
error:function (request) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
loading.remove();
}
});
}
/* 개인결제 스크롤 목록 세팅 */
const fn_set_indvdi_setle_list = function (data) {
const indvdiSetleList = data.resultList;
const isCountinue = !fn_is_empty(indvdiSetleList) && indvdiSetleList.length > 0;
if (isCountinue) {
let div = '';
for (let i = 0; i < indvdiSetleList.length; i++) {
const indvdiSetle = indvdiSetleList[i];
div += '<div class="product-unit">';
div += ' <div class="product-unit-image">';
div += ' <a href="javascript:void(0);" onclick="fn_go_indvdl_setle_form(\'' + indvdiSetle.sopmalCd + '\', \'' + indvdiSetle.ordrInnb + '\', \'' + indvdiSetle.mbrInnb + '\', \'' + indvdiSetle.mbrId + '\', \'' + indvdiSetle.mbrDvCd + '\');">';
div += ' <img src="<c:url value="/pc/images/개인결제이미지.png"/>" alt="개인결제">';
div += ' </a>';
div += ' </div>';
div += ' <div class="product-unit-info">';
div += ' <div class="product-unit-info__inner">';
div += ' <span class="product-unit-price__current">' + indvdiSetle.indvdlSetleSj + '</span>';
div += ' <div class="product-unit-price">';
div += ' <div class="product-unit-price__price">';
div += ' <span class="product-unit-price__current">' + (indvdiSetle.setleAmt).toLocaleString() + '원</span>';
div += ' </div>';
div += ' </div>';
div += ' <div class="personalPayment__period">' + indvdiSetle.indvdlSetleValidDe + '</div>';
div += ' </div>';
div += ' </div>';
div += '</div>';
}
$('#infinite-list').append(div);
}
$('#evtOccrrncAt').val(isCountinue ? 'continue' : 'stop');
}
/* 개인결제 등록 화면 이동 */
const fn_go_indvdl_setle_form = function(sopmalCd, ordrInnb, mbrInnb, mbrId, mbrDvCd) {
const form = $('<form></form>');
$(form).append($('<input/>', {type:'hidden', name:'sopmalCd', value:sopmalCd}));
$(form).append($('<input/>', {type:'hidden', name:'ordrInnb', value:ordrInnb}));
$(form).append($('<input/>', {type:'hidden', name:'mbrInnb', value:mbrInnb}));
$(form).append($('<input/>', {type:'hidden', name:'mbrId', value:mbrId}));
$(form).append($('<input/>', {type:'hidden', name:'mbrDvCd', value:mbrDvCd}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/ordr/selectIndvdlSetleForm"/>');
$(form).appendTo('body');
$(form).submit();
}
/* 스크롤 */
const fn_scroll = (callBackFnNm, callBackFnParam) => {
let listElm = $('#infinite-list');
let observer; // Intersection Observer를 이용해 특정 요소 감지
const observeLastItem = () => {
// 이전 observer가 있으면 해제
if (observer) {
observer.disconnect();
}
const listItems = listElm.find('.product-unit'); // 마지막 아이템 감지
if (listItems.length >= 6) { // 리스트 아이템이 6 이상이면
const lastItem = listItems[listItems.length - 1]; // 마지막 아이템
observer = new IntersectionObserver((entries) => { // IntersectionObserver 생성
if (entries[0].isIntersecting && $('#evtOccrrncAt').val() === 'continue') { // 1.마지막 아이템이 화면에 보이고 2.로딩 중이 아니며 3.데이터가 더 있는 경우
callBackFnNm(callBackFnParam);
}
},
{
root: null,
threshold: 0.5
});
observer.observe(lastItem);
}
};
observeLastItem(); // 실행
}
/* 로딩 */
const fn_set_load_more = function () {
let loadingImg = document.createElement('img'); // 로딩 중임을 알리는 이미지 생성
loadingImg.src = '/mobile/images/loading.svg'; // 로딩 중임을 알리는 이미지 설정
loadingImg.classList.add('loadingImg'); // 클래스 추가
document.body.appendChild(loadingImg); // 리스트에 추가
return loadingImg;
}
</script>
</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">
<form id="condForm">
<input type="hidden" name="pageIndex" id="pageIndex" value="1">
<input type="hidden" name="pageUnit" id="pageUnit" value="6"/>
<input type="hidden" name="evtOccrrncAt" id="evtOccrrncAt" value="continue">
</form>
<div id="listDiv"></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>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,44 @@
<%@ 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:choose>
<c:when test="${not empty data.resultList}">
<div id="infinite-list" class="personalPayment">
<c:forEach var="setle" items="${data.resultList}" varStatus="status">
<div class="product-unit">
<div class="product-unit-image">
<a href="javascript:void(0);" onclick="fn_go_indvdl_setle_form('<c:out value="${setle.sopmalCd}"/>', '<c:out value="${setle.ordrInnb}"/>', '<c:out value="${setle.mbrInnb}"/>', '<c:out value="${setle.mbrId}"/>', '<c:out value="${setle.mbrDvCd}"/>');">
<img src="<c:url value="/pc/images/개인결제이미지.png"/>" alt="개인결제">
</a>
</div>
<div class="product-unit-info">
<div class="product-unit-info__inner">
<span class="product-unit-price__current"><c:out value="${setle.indvdlSetleSj}"/></span>
<div class="product-unit-price">
<div class="product-unit-price__price">
<span class="product-unit-price__current"><c:out value="${setle.setleAmt}"/>원</span>
</div>
</div>
<div class="personalPayment__period"><c:out value="${setle.indvdlSetleValidDe}"/>까지</div>
</div>
</div>
</div>
</c:forEach>
</div>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="noResult">
<div class="noResult__image">
<img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="상품 이미지"/>
</div>
<p class="noResult__text">개인결제내역이 없습니다.</p>
</div>
</div>
</c:otherwise>
</c:choose>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,604 @@
<%@ 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 : RtngudCanclRefndDtlR.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 (){
const title = '반품/환불 상세';
fn_set_header_title(title);
fn_start_display();
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
}
/*********************************************************************
* 반품 주소 변경
* *******************************************************************/
const fn_update_dlvy_info = function () {
openConfirmModal(function (onSuccess) {
fn_update_dlvy_info_m(onSuccess);
}, 'confirm_updt_alert', '#updtCfrmBtn', 'success_updt_alert', '#updtSuccessBtn', fn_location_reload);
}
/*********************************************************************
* 반품 주소 변경
* *******************************************************************/
const fn_update_dlvy_info_m = function (onSuccess) {
const data = $('#returnDlvyUpdtForm').serializeArray();
$.ajax({
type: 'POST',
url: '<c:url value="/sopmal/nmbr/ordr/updateRtngudCanclRefndUpdt"/>',
data: data,
success: function (result) {
onSuccess();
}
});
}
const fn_location_reload = function() {
location.reload();
}
/*********************************************************************
* 환불 계좌 정보 변경
* *******************************************************************/
const fn_update_acnt_info = function () {
const data = $('#refundAcntUpdtForm').serialize();
if (confirm('환불 계좌 정보를 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'POST',
url: '<c:url value="/sopmal/nmbr/ordr/updateRtngudCanclRefndUpdt"/>',
data: data,
success: function (result) {
alert('<spring:message code="success.common.update"/>');
location.reload();
}
});
}
}
/* ********************************************************
* 우편번호 찾기
******************************************************** */
const fn_set_postcode = function(data) {
$('#postcode').val(data.postcode);
$('#adresDvCd').val(data.addressType);
if (data.addressType == '02') {
$('#address').val(data.jibunAddress);
} else if (data.addressType == '01') {
$('#address').val(data.roadAddress);
}
closeModal('postModal');
}
/**
* 반품 상품 QNA 문의 팝업
* @param goodsInnb
*/
const fn_pop_regist = (goodsInnb) => {
$.ajax({
type: "post",
data: {
authDv: "REGIST",
reqUrl: "modal",
bbsId: "goods_qna",
goodsInnb: goodsInnb,
},
url: "/sopmal/csc/selectBbscttAuth",
success: function (data) {
$("#modalDiv").html(data);
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
openModal("authPop");
}
});
}
</script>
<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">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="orderDetail">
<c:if test="${ not empty resultMap.result.refnd.refundComptDt }">
<div class="detailTop">
<p class="detailTop__title"><em>반품/환불 완료</em> <c:out value="${ resultMap.result.refnd.refundComptDt }"/></p>
</div>
</c:if>
<div class="orderDetailTop">
<span class="orderDetailTop__date">
<span class="misc">반품/환불 접수</span><c:out value="${ resultMap.result.refnd.registDt }"/>
</span>
<span class="orderDetailTop__num">주문번호 <c:out value="${ resultMap.result.refnd.ordrInnb }"/></span>
</div>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">반품/환불 상품</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetailProduct__content">
<c:set var="rePreOrdrDlvyInnb" value="0"/>
<c:set var="reDlvyCnt" value="1"/>
<c:choose>
<c:when test="${ not empty resultMap.result.itemsList }">
<c:forEach var="refundList" items="${ resultMap.result.itemsList }" varStatus="status">
<div class="orderDetailProduct__item">
<div class="orderDetailProduct__image">
<button type="button">
<img src="<c:out value="${ cdnurl }${ refundList.img }"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ refundList.goodsNm }">
</button>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<p class="orderDetailProduct__info__status">
(<c:out value="${ refundList.dlvylcZip }"/>)
<c:choose>
<c:when test="${ refundList.dlvylcAdresDvCd eq '01' }">
<c:out value="${ refundList.dlvylcRnmAdres }"/>
</c:when>
<c:when test="${ refundList.dlvylcAdresDvCd eq '02' }">
<c:out value="${ refundList.dlvylcLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ refundList.dlvylAdresDtl }"/>
</p>
<button type="button" class="orderDetailProduct__info__name">
<c:out value="${ refundList.goodsNm }"/>
</button>
<c:if test="${ not empty refundList.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${ refundList.optnNm }"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${ refundList.ordrQy }"/>개
<span class="orderDetailProduct__info__dot">·</span>
<span class="comma"><c:out value="${ refundList.applyDscntAmt }"/></span>원
<button type="button" class="btn sm gray2 sub-right-content__innerTitleBtn" onclick="fn_pop_regist('<c:out value="${ refundList.goodsInnb }"/>')" style="float: right;" >문의</button>
</p>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">반품/환불 상품이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">반품/환불 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>반품/환불 상태</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.result.refnd.returnProcsSttusCd }">
<c:out value="${ resultMap.result.refnd.returnProcsSttusCdNm }"/>
</c:when>
<c:otherwise>
<c:out value="${ resultMap.result.refnd.refundProcsSttusCdNm }"/>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>반품/환불 번호</th>
<td>
<c:out value="${ resultMap.result.refnd.orderRefundInnb }"/>
</td>
</tr>
<tr>
<th>환불 종류</th>
<td><c:out value="${ resultMap.result.refnd.refundTyCdNm }"/></td>
</tr>
<tr>
<th>반품 접수일</th>
<td><c:out value="${ resultMap.result.refnd.returnRceptDt }"/></td>
</tr>
<tr>
<th>반품 완료일</th>
<td><c:out value="${ resultMap.result.refnd.returnComptDt }"/></td>
</tr>
<tr>
<th>환불 접수일</th>
<td><c:out value="${ resultMap.result.refnd.refundReqstDt }"/></td>
</tr>
<tr>
<th>환불 완료일</th>
<td><c:out value="${ resultMap.result.refnd.refundComptDt }"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<c:if test="${ not empty resultMap.result.refnd.returnRceptDt }">
<c:choose>
<c:when test="${ resultMap.result.refnd.returnProcsSttusCd eq '01' }">
<form id="returnDlvyUpdtForm">
<input type="hidden" name="orderReInnb" value="<c:out value="${ resultMap.result.refnd.orderRefundInnb }"/>"/>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">회수지 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="userForm userForm--returnBox">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item select-box">
<select class="lg" title="해당 셀렉트에 대한 설명" name="returnMthCd">
<option value="" disabled selected>선택</option>
<c:forEach var="cdList" items="${ resultMap.returnMthCdList }" varStatus="status">
<c:choose>
<c:when test="${ resultMap.result.refnd.returnMthCd eq cdList.cd }">
<option value="<c:out value="${ cdList.cd }"/>" selected="selected"><c:out value="${ cdList.cdNm }"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ cdList.cd }"/>"><c:out value="${ cdList.cdNm }"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지 주소
</div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input class="input-text" type="text" id="postcode" name="zip" title="우편번호" value="<c:out value="${ resultMap.result.refnd.senderZip }"/>" placeholder="우편번호" readonly>
<button type="button" class="btn md theme outline" onclick="fn_select_post_mobile(fn_set_postcode); return false;">우편번호 찾기</button>
<input type="hidden" id="adresDvCd" name="adresDvCd" value="<c:out value="${ resultMap.result.refnd.senderAdresDvCd }"/>"/>
</div>
<input class="input-text full" type="text" id="address" name="lnbOrRnmAdres"
<c:choose>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '01' }">
value="<c:out value="${ resultMap.result.refnd.senderRnmAdres }"/>"
</c:when>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '02' }">
value="<c:out value="${ resultMap.result.refnd.senderLnbAdres }"/>"
</c:when>
</c:choose>
readonly title="지번 주소" placeholder="지번 주소">
<input class="input-text full" type="text" id="detailAddress" name="dtlAdres" value="<c:out value="${ resultMap.result.refnd.senderAdresDtl }"/>" title="상세 주소" placeholder="상세 주소">
</div>
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">휴대전화
</div>
<div class="inputWithBtn">
<input class="input-text full number" type="text"
title="해당 인풋에 대한 설명" placeholder="휴대폰번호 입력 (’-’ 없이)" name="returnCstmrMbtlnb" oninput="fn_fmt_telno($(this));" maxlength="13"
value="<c:out value="${ resultMap.result.refnd.returnCstmrMbtlnb }"/>">
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">취소사유</div>
<div class="select-box">
<select class="lg" title="해당 셀렉트에 대한 설명" name="returnResnCd">
<c:forEach var="returnResn" items="${resultMap.returnResnList}">
<c:choose>
<c:when test="${ returnResn.cd eq resultMap.result.refnd.returnResnCd }">
<option value="<c:out value="${returnResn.cd}"/>" selected="selected"><c:out value="${returnResn.cdNm}"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${returnResn.cd}"/>"><c:out value="${returnResn.cdNm}"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">상세사유</div>
<textarea name="returnResnCn" id="returnResnCn" class="textarea" rows="6" title="해당 텍스트 에어리어에 대한 설명"
placeholder="최소 10자 이상으로 입력해 주세요."><c:out value="${ resultMap.result.refnd.returnResnCn }"/></textarea>
</div>
<div class="bottomBtnControls">
<button class="btn lg full theme" type="button" onclick="fn_update_dlvy_info();" >수정하기</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">회수지 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>회수방법</th>
<td>
<c:out value="${ resultMap.result.refnd.returnMthCdNm }"/>
</td>
</tr>
<tr>
<th>주소</th>
<td>
<c:if test="${ not empty resultMap.result.refnd.senderZip }">
(<c:out value="${ resultMap.result.refnd.senderZip }"/>)
</c:if>
<c:choose>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '01'}">
<c:out value="${ resultMap.result.refnd.senderRnmAdres }"/>
</c:when>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '02'}">
<c:out value="${ resultMap.result.refnd.senderLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ resultMap.result.refnd.senderAdresDtl }"/>
</td>
</tr>
<tr>
<th>휴대폰 번호</th>
<td>
<c:out value="${ resultMap.result.refnd.returnCstmrMbtlnb }"/>
</td>
</tr>
<tr>
<th>반품 사유</th>
<td>
<c:out value="${ resultMap.result.refnd.returnResnCdNm }"/>
</td>
</tr>
<tr>
<th>상세 사유</th>
<td>
<c:out value="${ resultMap.result.refnd.returnResnCn }"/>
</td>
</tr>
<tr>
<th>배송비 입금</th>
<td>
<c:if test="${ not empty resultMap.result.refnd.returnDlvyRcpmnyAcntnb }">
<c:out value="${ resultMap.result.refnd.returnDlvyRcpmnyAcntnb }"/><br>(예금주: <c:out value="${ resultMap.result.refnd.returnDlvyRcpmnyNm }"/>)
</c:if>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</c:if>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">환불정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>환불은행</th>
<td><c:out value="${ resultMap.result.refnd.refundAcntBnnkNm }"/></td>
</tr>
<tr>
<th>예금주</th>
<td><c:out value="${ resultMap.result.refnd.refundAcntDpstrNm }"/></td>
</tr>
<tr>
<th>계좌번호</th>
<td><c:out value="${ resultMap.result.refnd.refundAcntnb }"/></td>
</tr>
<tr>
<th>환불사유내용</th>
<td><c:out value="${ resultMap.result.refnd.refundResnCn }"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">환불 금액</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<c:set var="reTotAmt" value="${ resultMap.result.totRefundDscntAmt }"/>
<div class="table-wrapper orderDetail__table orderDetail__table--price">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>총 상품금액</th>
<td>
<span class="orderDetail__table__productPrice">
<span class="comma"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>원
</span>
</td>
</tr>
<tr>
<th>총 배송비</th>
<td><span class="comma"><c:out value="${ reTotAmt.rlDlvyAmt }"/></span>원</td>
</tr>
</tbody>
<tfoot class="orderDetail__table__sum">
<tr>
<th>총 환불금액</th>
<td>
<span class="comma"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>원
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
</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>
<form id="listForm">
<input type="text" id="orderRefundInnb" name ="orderRefundInnb" value=""/>
<input type="hidden" id="pageIndex" name="pageIndex" value="${ paramVO.pageIndex }"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="${ paramVO.recordCountPerPage }"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${ paramVO.pageUnit }"/>
</form>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<div id = "modalDiv"></div>
<script>
// 주문상세내역 각 섹션 접기/펼치기
$('.orderDetailProduct__top').on('click', function (e) {
e.preventDefault();
var thisParent = $(this).closest('.orderDetailProduct');
var thisChevron = $(this).find('.orderDetailProduct__top__chevron');
if (thisParent.hasClass('closed')) {
thisParent.removeClass('closed');
thisChevron.removeClass('closed');
} else {
thisParent.addClass('closed');
thisChevron.addClass('closed');
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,853 @@
<%@ 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"%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
<script src="<c:url value='/js/dlvylc/dlvylc.js'/>"></script>
<script>
$(document).ready(function() {
fn_set_param();
fn_init();
fn_event();
fn_dlvy_event();
});
/* ********************************************************
* 초기 설정
**********************************************************/
const fn_init = function() {
$('.header').find('h1.header__title').text('주문/배송');
fn_get_ordr_dlvy_list(1);
}
/* ********************************************************
* 이벤트 설정
**********************************************************/
const fn_event = function() {
/* 필터 버튼 선택 이벤트 */
$('#btnFilter').on('click', function () {
const modalId = $(this).attr('data-micromodal-trigger');
MicroModal.show(modalId, {
onShow: function (modal) {
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
},
});
});
/* 검색조건 > 날짜 구간 버튼 클릭 이벤트 */
$('.dateRange-btn').on('click', function () {
const date = $(this).attr('id');
$(this).closest('div').find('#dateRange').val(date);
if ('allDays' === date) {
$('#bgnDt, #endDt').val('');
return false;
}
fn_set_date('bgnDt', 'endDt', 'endDt', date);
});
/* 검색 버튼 선택 이벤트 */
$('#btnSearch').on('click', function () {
fn_get_ordr_dlvy_list(1);
$(this).closest('.microModal').find('.microModal__close').trigger('click');
});
/* 이전내역 더보기 버튼 선택 이벤트 */
$('#btnNextPage').on('click', function () {
let index = $('#pageIndex').val();
if (!fn_is_empty(index)) {
index = parseInt(index) + 1;
}
fn_get_ordr_dlvy_list(index);
});
}
/* ********************************************************
* function
**********************************************************/
/* 주문/배송 목록 조회 */
const fn_get_ordr_dlvy_list = function (index) {
const loading = fn_set_load_more();
if (!fn_is_empty(index)) {
$('#pageIndex').val(index);
}
let data = $('#condForm').serialize();
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectMbrOrdrListInqireScrollAjax"/>',
data:data,
success:function (data) {
if (data.resBody != null) {
const result = JSON.parse(data.resBody.result);
fn_set_ordr_dlvy_list(result, index);
}
loading.remove();
},
error:function (request) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
loading.remove();
}
});
}
/* 주문/배송 목록 세팅 */
const fn_set_ordr_dlvy_list = function (data, index) {
let rowCnt = 0;
let div = '';
const ordrDlvyList = data.resultList;
const cdnurl = '${cdnurl}';
if (!fn_is_empty(ordrDlvyList)) {
rowCnt = data.paginationInfo.totalRecordCount;
for (let i=0; i < ordrDlvyList.length; i++) {
let row = ordrDlvyList[i];
div += '<div class="sub-box">';
div += ' <div class="orderListItem">';
div += ' <div class="orderListItem__top">';
div += ' <span class="orderListItem__top__date"><span class="misc">'+ row.ordrDt +'(' + row.ordrInnb +') ';
div += ' <span className="orderList__dot">·</span> ' + row.ordrTyCdNm;
div += ' </span></span>';
div += ' <a href="javascript:void(0);" onclick="fn_go_ordr_dtl(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\');" class="orderListItem__top__more">상세보기</a>';
div += ' </div>';
div += ' <div class="orderListItem__body">';
div += ' <div class="orderListItem__image">';
div += ' <a href="/sopmal/goods/selectGoodsDtl?sopmalCd=' + row.sopmalCd + '&goodsInnb=' + row.goodsInnb + '">';
div += ' <img src="' + cdnurl + row.goodsImageUrl + '" onerror="this.src=\'/pc/images/image_placeholder.png\'" alt="' + row.goodsNm + '">';
div += ' </a>';
div += ' </div>';
div += ' <div class="orderListItem__right">';
div += ' <div class="orderListItem__info">';
div += ' <p class="orderListItem__info__status">' + row.ordrSttusNm;
if (!fn_is_empty(row.giftSttusCd)) {
div += ' (' + row.giftSttusCdNm + ')';
}
div += ' </p>';
div += ' <a href="javascript:void(0);" onclick="fn_go_ordr_dtl(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\');" class="orderListItem__info__name">' + row.goodsNm + '</a>';
if (row.optnNm != null) {
div += ' <p class="orderListItem__info__option">' + row.optnNm + '</p>';
}
div += ' <p class="orderListItem__info__quantity">' + row.orderCnt + '개<span class="orderListItem__info__dot">·</span><span class="comma">' + (row.setleAmt).toLocaleString() + '</span>원';
div += ' </p>';
div += ' </div>';
div += ' </div>';
div += ' </div>';
div += ' <div class="orderListItem__btnControls">';
const ordrSttusCd = parseInt(row.ordrSttusCd);
const ordrTyCd = parseInt(row.ordrTyCd);
if (15 === ordrSttusCd) {
div += '<a href="javascript:void(0);" onclick="fn_post_cancl_ordr_confirm(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + ordrSttusCd + '\');" class="btn-ordr-sttus btn gray">주문취소</a>';
if ('05' != ordrTyCd) {
div += '<a href="javascript:void(0);" onclick="fn_dlvylc_manage_pop(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + row.ordrDlvyInnb + '\');" class="btn-ordr-sttus btn outline">배송지 변경</a>';
}
}
if (ordrSttusCd > 24 && ordrSttusCd < 34) {
div += '<a href="javascript:void(0);" onclick="fn_call_setle_cancl_pop(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + row.ordrDlvyInnb + '\', \'' + row.ordrRceptDt + '\');" class="btn-ordr-sttus btn gray">결제취소</a>';
if ('05' != ordrTyCd) {
div += '<a href="javascript:void(0);" onclick="fn_dlvylc_manage_pop(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + row.ordrDlvyInnb + '\');" class="btn-ordr-sttus btn outline">배송지 변경</a>';
}
}
if (ordrSttusCd > 34 && ordrSttusCd < 55) {
div += '<a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop(\'' + row.ordrInnb + '\');" class="btn outline">배송조회</a>';
div += '<a href="javascript:void(0);" onclick="fn_call_setle_cancl_pop(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + row.ordrDlvyInnb + '\', \'' + row.ordrRceptDt + '\', \'' + row.ordrSttusCd + '\');" class="btn-ordr-sttus btn gray">결제취소</a>';
}
if (ordrSttusCd > 54 && ordrSttusCd < 76 && row.sknEnvrnCd != 'POS') {
div += '<a href="javascript:void(0);" onclick="fn_call_dlvy_sweettracker_pop(\'' + row.ordrInnb + '\');" class="btn outline">배송조회</a>';
if ('Y' === row.purchsDcsnAt) {
div += '<a href="javascript:void(0);" onclick="fn_call_refund_pop(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\', \'' + row.ordrRceptDt + '\', \'' + row.setleTyCd + '\', \'' + row.ordrSttusCd + '\');" class="btn-ordr-sttus btn gray">반품신청</a>';
div += '<a href="javascript:void(0);" onclick="fn_post_purchs_dcsn_by_ordr_confirm(\'' + row.sopmalCd + '\', \'' + row.ordrInnb + '\');" class="btn-ordr-sttus btn theme">구매확정</a>';
} else {
<%--div += '<a href="javascript:void(0);" class="btn-ordr-sttus btn gray">구매확정</a>';--%>
}
if (row.reviewAt === 'Y') {
div += '<a href="javascript:void(0);" onclick="fn_go_my_rvw(\'' + row.sopmalCd + '\');" class="btn-ordr-sttus btn outline">리뷰작성</a>';
}
}
div += ' </div>';
div += ' </div>';
div += '</div>';
}
if (1 === index) {
$('#ordrDlvyList').empty();
}
$('#ordrDlvyList').append(div);
$('.fullBtnSection').show();
} else {
const rowCnt = $('#ordrDlvyList').find('.sub-box').length;
if (0 !== rowCnt) {
fn_call_alert_modal('<spring:message code="common.nodata"/>');
return false;
}
div += '<div class="sub-box">';
div += ' <div class="noResult">';
div += ' <div class="noResult__image">';
div += ' <img src="<c:url value="/pc/images/icon__no-result.png"/>" alt="상품 이미지"/>';
div += ' </div>';
div += ' <p class="noResult__text">주문내역이 없습니다.</p>';
div += ' </div>';
div += '</div>';
$('#ordrDlvyList').empty().append(div);
$('.fullBtnSection').hide();
}
$('#rowCnt').text(rowCnt);
}
/* 주문 무효 상태 수정 확인창 */
const fn_post_cancl_ordr_confirm = function (sopmalCd, ordrInnb, currOrdrSttusCd) {
const modalId = 'confirmModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text('주문을 취소하시겠습니까?')
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
// 기존 이벤트 제거 (중복 방지)
$(modal).find('#btnConsfirm').off('click');
$(modal).find('#btnConsfirm').on('click', function () {
$(modal).find('#btnCancel').trigger('click');
fn_post_cancl_ordr(sopmalCd, ordrInnb, currOrdrSttusCd);
});
}
});
}
/* 주문 무효 상태 수정 */
const fn_post_cancl_ordr = function (sopmalCd, ordrInnb, currOrdrSttusCd) {
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/updateCanclOrdr"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'currOrdrSttusCd':currOrdrSttusCd
},
success:function (data) {
if (data.resBody != null) {
fn_call_alert_modal('주문이 취소되었습니다.');
fn_get_ordr_dlvy_list(1);
}
},
error:function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/* 구매확정 수정 확인창 */
const fn_post_purchs_dcsn_by_ordr_confirm = function (sopmalCd, ordrInnb) {
const modalId = 'confirmModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text('구매확정 하시겠습니까?')
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({ modal: 'open' }, '', '#' + modalId);
}
// 기존 이벤트 제거 (중복 방지)
$(modal).find('#btnConsfirm').off('click');
$(modal).find('#btnConsfirm').on('click', function () {
$(modal).find('#btnCancel').trigger('click');
fn_post_purchs_dcsn_by_ordr(sopmalCd, ordrInnb);
});
}
});
}
/* 구매확정 수정 */
const fn_post_purchs_dcsn_by_ordr = function (sopmalCd, ordrInnb) {
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/updatePurchsDcsnByOrdr"/>',
data:{
'sopmalCd':sopmalCd,
'ordrInnb':ordrInnb
},
success:function (data) {
let sucessText = '<spring:message code="success.common.save"/>';
if (data.resBody != null) {
sucessText = JSON.parse(data.resBody.result).message;
}
alert(sucessText);
fn_get_ordr_dlvy_list(1);
},
error:function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/* 결제취소 팝업 화면 호출 */
const fn_call_setle_cancl_pop = function (sopmalCd, ordrInnb, ordrDlvyInnb, setleDt, ordrSttusCd) {
const setleDate = new Date(setleDt);
const stdDate = new Date('2025-02-12 00:00:00');
if (setleDate < stdDate && (sopmalCd == 'BD' || sopmalCd == 'DL' || sopmalCd == 'LF')) {
alert("고객센터로 문의해주세요.");
return;
}
if (ordrSttusCd === '35') { // 상품준비중일 경우 CS에서 판단 후 환불 처리
alert("'상품준비' 상태에서는 취소할 수 없습니다. \n고객센터로 문의해주세요.");
return;
}
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>');
$(form).submit();
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
},
success:function (html) {
$('#refund-pop').remove();
$('#refundPopupDiv').html(html);
const popup = $('#refund-pop');
$(popup).find('.orderRefundPop .select-box select').niceSelect();
$(popup).find('#refundAcntnb').on("input", function () {
this.value = this.value.replace(/[^0-9]/g, "");
});
$(popup).modal();
}
});
*/
}
/* 반품/환불 신청 팝업 화면 호출 */
const fn_call_refund_pop = function (sopmalCd, ordrInnb, setleDt, setleTy, ordrSttusCd) {
const setleDate = new Date(setleDt);
const stdDate = new Date('2025-02-12 00:00:00');
if (setleDate < stdDate && (sopmalCd == 'BD' || sopmalCd == 'DL' || sopmalCd == 'LF')) {
alert("고객센터로 문의해주세요.");
return;
}
if ((setleTy === '05' || setleTy === '06') && ordrSttusCd !== '75') { // 에스크로 결제건은 배송완료가 된 후 반품신청이 가능.
alert("에스크로 결제건은 배송완료 후 반품신청이 가능합니다. \n고객센터로 문의해주세요.");
return;
}
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectRetrunRegistPopupForm"/>');
$(form).submit();
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectSetleCanclPopupForm"/>',
data:{
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
},
success:function (html) {
$('#refund-pop').remove();
$('#refundPopupDiv').html(html);
const popup = $('#refund-pop');
$(popup).find('.orderRefundPop .select-box select').niceSelect();
$(popup).find('#refundAcntnb').on("input", function () {
this.value = this.value.replace(/[^0-9]/g, "");
});
$(popup).modal();
}
});
*/
}
/* 배송조회 팝업 화면 호출 */
const fn_call_dlvy_sweettracker_pop = function (ordrInnb) {
$.ajax({
type: 'post',
url: '/sopmal/mpage/ordr/selectDlvyInqire',
data: {
ordrInnb : ordrInnb
},
success: function (data) {
$('#deliveryInfoPop').remove();
$('#modalDiv').html(data);
openModal('deliveryInfoPop');
}
});
/*
$.ajax({
type:'post',
url:'<c:url value="/sopmal/mpage/ordr/selectDlvyInqire"/>',
data:{
ordrInnb:ordrInnb
},
success:function (data) {
$('#modalDiv').html(data);
$('#delivery-check-pop').remove().modal();
}
});
*/
}
/* 나의 리뷰 화면 이동 */
const fn_go_my_rvw = function (sopmalCd) {
let form = $('<form></form>');
form.attr('name', 'newForm');
form.attr('method', 'post');
form.attr('action', '<c:url value="/sopmal/mpage/act/selectMyRvwInqireForm"/>');
$(form).append($('<input/>', {type: 'hidden', name: 'sopmalCd', id: 'sopmalCd', value: sopmalCd}));
form.appendTo('body');
form.submit();
}
/* 주문상세 이동 */
const fn_go_ordr_dtl = function (sopmalCd, ordrInnb) {
const form = $('#condForm');
$(form).append($('<input/>', {type: 'hidden', name: 'ordrInnb', id: 'ordrInnb', value: ordrInnb}));
$(form).attr('method', 'get');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrDtlInqire"/>');
$(form).submit();
}
/* 검색조건 세팅 */
const fn_set_param = function () {
const params = ${paramVO};
const keys = Object.keys(params);
for (let i = 0; i < keys.length; i++) {
let key = keys[i];
let data = params[key];
if ('bgnDt' === key || 'endDt' === key) {
if (!fn_is_empty(data)) {
for (let i = 0; i < data.length; i++) {
$('#' + key).val(data);
}
}
}
if ('dateRange' === key) {
$('#' + data).trigger('click');
}
if ('srchwrd' === key) {
$('#' + key).val(data);
}
}
}
/* 알림 창 */
const fn_call_alert_modal = function (message) {
const modalId = 'alertModal';
MicroModal.show(modalId, {
onShow: function (modal) {
$(modal).find('.microModal__title').text(message)
// 이미 존재하지 않는 경우에만 Hash 추가
if (window.location.hash !== '#' + modalId) {
window.history.replaceState({modal: 'open'}, '', '#' + modalId);
}
}
});
}
/* 로딩 */
const fn_set_load_more = function () {
let loadingImg = document.createElement('img'); // 로딩 중임을 알리는 이미지 생성
loadingImg.src = '/mobile/images/loading.svg'; // 로딩 중임을 알리는 이미지 설정
loadingImg.classList.add('loadingImg'); // 클래스 추가
document.body.appendChild(loadingImg); // 리스트에 추가
return loadingImg;
}
/*배송지 팝업 이벤트*/
const fn_dlvy_event = () => {
//삭제확인
$(document).on("click","#delCfrmBtn", function () {
let adbkInnb = $(this).attr("adbk-innb");
//let mbrInnb = $("#mbrInnb").val();
//let mbrDvCd = $("#mbrDvCd").val();
$.ajax({
type: 'post',
url: '/sopmal/mpage/mbr/deleteDlvylcDel',
data: {
adbkInnb: adbkInnb
},
success: function (data) {
closeModal("confirm_del_alert");
openModal("success_del_alert");
}
});
});
/*삭제성공*/
$(document).on("click","#delSuccessBtn", function () {
closeModal("success_del_alert");
closeModal("address-management");
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
$(document).on('click','.headerTab__item', function () {
var idx = $(this).index();
$('.headerTab__item').removeClass('active');
$(this).addClass('active');
$('.tabContent').hide();
$('.tabContent').eq(idx).show();
});
$(document).on("click","#regFormBtn", function () {
// 배송지 관리 탭
$('.headerTab__item').removeClass('active');
$('.headerTab__item').eq(1).addClass('active');
$('.tabContent').hide();
$('.tabContent').eq(1).show();
document.getElementById("regForm").scrollIntoView();
});
//등록성공
$(document).on("click","#successClose", function () {
closeModal('successModal');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
/*수정 모달 삭제 시 관리 팝업으로 이동*/
$(document).on("click", '#dlvylcUpdtClose',function () {
closeModal('dlvylcUpdtForm');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
/*수정성공*/
$(document).on("click","#successUpdtClose", function () {
closeModal('dlvylcUpdtFormPop');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
});
$(document).on("click", "#selectAdres", function () {
const dlvylc = JSON.parse(localStorage.getItem('dlvylc'));
let checkCnt = 0;
$(".adbkInnb").each(function (index) {
if ($(this).is(":checked")) {
checkCnt += 1;
}
});
if (checkCnt <= 0) {
alert("배송지를 선택해 주세요.");
return false;
}
openConfirmModal(function (onSuccess) {
fn_set_dlvylc_2(onSuccess, dlvylc);//수정 함수
}, 'confirm_updt_alert'
, '#updtCfrmBtn'
, 'success_updt_alert'
, '#updtSuccessBtn'
, fn_set_dlvylc_3);
});
}
/* 배송지 수정 팝업 화면 호출 */
const fn_dlvylc_manage_pop = function (sopmalCd, ordrInnb, ordrDlvyInnb) {
localStorage.removeItem('dlvylc');
fn_move_dlvylc_manage_full(1, 'fn_set_dlvylc');
const dlvylc = {
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb
};
localStorage.setItem('dlvylc', JSON.stringify(dlvylc));
}
/* 배송지정보 > 배송지 정보 세팅 */
const fn_set_dlvylc = function (data) {
const dlvylc = JSON.parse(localStorage.getItem('dlvylc'));
dlvylc['recpntNm'] = data.recpntNm;
dlvylc['recpntMbtlnb'] = data.mbtlnb;
dlvylc['dlvylcZip'] = data.postcode;
dlvylc['dlvylcAdresDvCd'] = data.addressType;
dlvylc['dlvylcLnbAdres'] = data.jibunAddress;
dlvylc['dlvylcRnmAdres'] = data.roadAddress;
dlvylc['dlvylcAdresDtl'] = data.dtlAdres;
localStorage.setItem('dlvylc', JSON.stringify(dlvylc));
}
/*배송지 수정*/
const fn_set_dlvylc_2 = (onSuccess,dlvylc) => {
$.ajax({
type: 'post',
contentType: 'application/json',
url: '<c:url value="/sopmal/mpage/ordr/updateDlvylc"/>',
data: JSON.stringify(dlvylc),
dataType: 'json',
success:function (data) {
onSuccess();
},
error: function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
}
});
}
/*배송지 수정 성공시 리로드*/
const fn_set_dlvylc_3 = () => {
location.reload();
}
</script>
</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="orderList">
<div class="listTop">
<span class="listTop__data">총 <em id="rowCnt">0</em>건</span>
<button type="button" id="btnFilter" class="listTop__filterBtn" data-micromodal-trigger="searchInfoPop">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g clip-path="url(#clip0_516_33716)">
<path d="M0.625 3.52566H10.1408C10.4276 4.83109 11.5934 5.81113 12.9837 5.81113C14.374 5.81113 15.5398 4.83113 15.8266 3.52566H19.375C19.7202 3.52566 20 3.24582 20 2.90066C20 2.55551 19.7202 2.27566 19.375 2.27566H15.8263C15.5389 0.970898 14.3716 -0.00976562 12.9837 -0.00976562C11.5951 -0.00976562 10.4283 0.970742 10.1411 2.27566H0.625C0.279844 2.27566 0 2.55551 0 2.90066C0 3.24582 0.279844 3.52566 0.625 3.52566ZM11.3233 2.9023C11.3233 2.90008 11.3234 2.89781 11.3234 2.89559C11.3261 1.98281 12.0709 1.24027 12.9837 1.24027C13.8952 1.24027 14.6401 1.9818 14.644 2.89414L14.6441 2.90332C14.6427 3.81766 13.8984 4.56117 12.9837 4.56117C12.0694 4.56117 11.3254 3.8184 11.3233 2.90461L11.3233 2.9023ZM19.375 16.4741H15.8263C15.5389 15.1694 14.3716 14.1887 12.9837 14.1887C11.5951 14.1887 10.4283 15.1693 10.1411 16.4741H0.625C0.279844 16.4741 0 16.7539 0 17.0991C0 17.4443 0.279844 17.7241 0.625 17.7241H10.1408C10.4276 19.0296 11.5934 20.0096 12.9837 20.0096C14.374 20.0096 15.5398 19.0296 15.8266 17.7241H19.375C19.7202 17.7241 20 17.4443 20 17.0991C20 16.7539 19.7202 16.4741 19.375 16.4741ZM12.9837 18.7596C12.0694 18.7596 11.3254 18.0168 11.3233 17.103L11.3233 17.1008C11.3233 17.0985 11.3234 17.0963 11.3234 17.0941C11.3261 16.1813 12.0709 15.4387 12.9837 15.4387C13.8952 15.4387 14.6401 16.1802 14.644 17.0925L14.6441 17.1017C14.6428 18.0162 13.8985 18.7596 12.9837 18.7596ZM19.375 9.37492H9.85918C9.57238 8.06949 8.4066 7.08949 7.01629 7.08949C5.62598 7.08949 4.4602 8.06949 4.1734 9.37492H0.625C0.279844 9.37492 0 9.65477 0 9.99992C0 10.3451 0.279844 10.6249 0.625 10.6249H4.17371C4.46109 11.9296 5.62844 12.9104 7.01629 12.9104C8.40488 12.9104 9.57172 11.9298 9.85895 10.6249H19.375C19.7202 10.6249 20 10.3451 20 9.99992C20 9.65477 19.7202 9.37492 19.375 9.37492ZM8.67668 9.99828C8.67668 10.0005 8.67664 10.0028 8.67664 10.005C8.67391 10.9178 7.9291 11.6603 7.01629 11.6603C6.10477 11.6603 5.35992 10.9188 5.35598 10.0065L5.35586 9.99734C5.35723 9.08289 6.10156 8.33949 7.01629 8.33949C7.93059 8.33949 8.67465 9.08223 8.67672 9.99605L8.67668 9.99828Z" fill="black" />
</g>
<defs>
<clipPath id="clip0_516_33716">
<rect width="20" height="20" fill="white"></rect>
</clipPath>
</defs>
</svg>
<span class="visually-hidden">검색 필터</span>
</button>
</div>
<div style="margin-bottom: 10px;" id="ordrDlvyList"></div>
<div class="fullBtnSection">
<button type="button" id="btnNextPage" class="btn md outline full">
<span class="fullBtnSection__more">이전내역 더보기</span>
</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>
</div>
</div>
<!-- 검색 필터 -->
<div class="microModal microBottomSheet" id="searchInfoPop" 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">
<button type="button" class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<form id="condForm">
<input type="hidden" name="pageIndex" id="pageIndex" value="1">
<input type="hidden" name="pageUnit" id="pageUnit" value="2">
<div class="microModal__content">
<div class="dateSearch">
<div class="dateRange-btnContainer">
<input type="hidden" name="dateRange" id="dateRange" value="allDays">
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
<div class="datepicker-container">
<input type="text" name="bgnDt" id="bgnDt" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="endDt" id="endDt" class="datepicker" title="종료 날짜 선택" autocomplete="off">
</div>
<%--
<div class="nativeSelect">
<select class="full" title="해당 셀렉트에 대한 설명">
<option value="" selected disabled>전체</option>
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
</select>
</div>
--%>
<div class="input">
<input type="text" name="srchwrd" id="srchwrd" class="input-text full" title="검색어 입력" placeholder="주문번호, 상품명 검색">
</div>
<button type="button" id="btnSearch" class="btn full lg theme">조회</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<%-- 마이크로 모달 DIV 시작--%>
<div id="modalDiv"></div>
<div id="dlvyDiv"></div>
<div class="microModal microAlert" id="alertModal" 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"></h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" data-micromodal-close>
<spring:message code="button.ok"/>
</button>
</div>
</div>
</div>
</div>
<div class="microModal microAlert" id="confirmModal" 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"></h2>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" id="btnCancel" class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"><spring:message code="button.cancel"/></button>
<button type="button" id="btnConsfirm" class="microModal__btn microModal__btn-primary"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<%-- 마이크로 모달 DIV 종료--%>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,652 @@
<%@ 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 : RtngudCanclRefndDtlR.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 (){
const title = '결제 취소';
fn_set_header_title(title);
const mbrInnb = '<c:out value="${ data.mbrInnb }"/>';
fn_start_display();
/* 결제취소 팝업 > 결제취소 버튼 클릭 이벤트 */
$(document).on('click', '#btnSetleCancl', function () {
const popup = $('#refund-pop');
const row = $(popup).find('.cancl-goods');
const checkLength = $(row).find('input[name="goodsCheck"]:checked').length;
if (checkLength === 0) {
openModal_message('confirm_return_valid_alert', '결제취소/환불 하실 상품을 선택해 주십시요.');
// alert('결제취소/환불 하실 상품을 선택해 주십시요.');
return false;
}
let goodsList = [];
let isContinue = true;
$(row).find('input[name="goodsCheck"]:checked').each(function () {
const tr = $(this).closest('div').parent().closest('div');
const sopmalCd = $(tr).find('.sopmalCd').val();
const ordrInnb = $(tr).find('.ordrInnb').val();
const ordrDlvyInnb = $(tr).find('.ordrDlvyInnb').val();
const ordrGoodsInnb = $(tr).find('.ordrGoodsInnb').val();
const ordrGoodsOptnInnb = $(tr).find('.ordrGoodsOptnInnb').val();
const ordrQy = $(tr).find('.ordrQy').val();
const canclQy = $(tr).find('.canclQy option:selected').val();
const subscrptWthdrawPosblAt = $(tr).find('.subscrptWthdrawPosblAt').val();
const indvdlzCanclPosblAt = $(tr).find('.indvdlzCanclPosblAt').val();
if (fn_is_empty(canclQy)) {
openModal_message('confirm_return_valid_alert', '취소수량을 선택해 주십시요.');
// alert('취소수량을 선택해 주십시요.');
isContinue = false;
return false;
}
if ('N' === subscrptWthdrawPosblAt) {
openModal_message('confirm_return_valid_alert', '청약철회불가 상품이 선택 되었습니다.');
// alert('청약철회불가 상품이 선택 되었습니다.');
isContinue = false;
return false;
}
if ('N' === indvdlzCanclPosblAt && (parseInt(ordrQy) > parseInt(canclQy))) {
openModal_message('confirm_return_valid_alert', '개별취소가 불가능한 상품이 선택 되었습니다.');
// alert('개별취소가 불가능한 상품이 선택 되었습니다.');
isContinue = false;
return false;
}
let goods = {
'sopmalCd':sopmalCd,
'ordrInnb':ordrInnb,
'ordrDlvyInnb':ordrDlvyInnb,
'ordrGoodsInnb':ordrGoodsInnb,
'ordrGoodsOptnInnb':ordrGoodsOptnInnb,
'ordrQy':parseInt(ordrQy),
'canclQy':parseInt(canclQy)
};
goodsList.push(goods);
});
const sopmalCd = $(popup).find('#sopmalCd').val();
const ordrInnb = $(popup).find('#ordrInnb').val();
const ordrTyCd = $(popup).find('#ordrTyCd').val();
const ordrSttusCd = $(popup).find('#ordrSttusCd').val();
const returnResnCd = $(popup).find('#returnResnCd option:selected').val();
const returnResnCn = $(popup).find('#returnResnCn').val();
let refundAcntBnnkNm = $(popup).find('#refundAcntBnnkNm').val();
let refundAcntBnnkCd = '';
const refundAcntDpstrNm = $(popup).find('#refundAcntDpstrNm').val();
const refundAcntnb = $(popup).find('#refundAcntnb').val();
const isFdrmDlvyTrmnat = $(popup).find('input[name="isFdrmDlvyTrmnat"]:checked').val();
const isBank = $(popup).find('#isBank').val();
const setleTyCd = $(popup).find('#setleTyCd').val();
if (fn_is_empty(returnResnCd)) {
openModal_message('confirm_return_valid_alert', '반품/환불 사유를 선택해 주십시요.');
// alert('반품/환불 사유를 선택해 주십시요.');
$(popup).find('#returnResnCd').focus();
return false;
}
if (fn_is_empty(returnResnCn)) {
openModal_message('confirm_return_valid_alert', '반품/환불 상세 사유를 입력해 주십시요.');
// alert('반품/환불 상세 사유를 입력해 주십시요.');
$(popup).find('#returnResnCn').focus();
return false;
}
// 무통장 결제했을 경우
if (!fn_is_empty(setleTyCd) && ( setleTyCd === '02' || setleTyCd === '04' || setleTyCd === '05' || setleTyCd === '06') ) {
const bankCdAndNm = refundAcntBnnkNm;
const bankValue = bankCdAndNm.split(',');
refundAcntBnnkNm = bankValue[1];
refundAcntBnnkCd = bankValue[0];
if (fn_is_empty(refundAcntBnnkNm)) {
openModal_message('confirm_return_valid_alert', '반품/환불 상세 사유를 입력해 주십시요.');
// alert('반품/환불 상세 사유를 입력해 주십시요.');
$(popup).find('#refundAcntBnnkNm').focus();
return false;
}
if (fn_is_empty(refundAcntDpstrNm)) {
openModal_message('confirm_return_valid_alert', '예금주를 입력해 주십시요.');
// alert('예금주를 입력해 주십시요.');
$(popup).find('#refundAcntDpstrNm').focus();
return false;
}
if (fn_is_empty(refundAcntnb)) {
openModal_message('confirm_return_valid_alert', '계좌번호를 입력해 주십시요.');
// alert('계좌번호를 입력해 주십시요.');
$(popup).find('#refundAcntnb').focus();
return false;
}
}
if (!isContinue) {
return false;
}
let cancel = {
'sopmalCd':sopmalCd,
'ordrInnb':ordrInnb,
'ordrTyCd':ordrTyCd,
'ordrSttusCd':ordrSttusCd,
'returnResnCd':returnResnCd,
'returnResnCn':returnResnCn,
'refundAcntBnnkNm':refundAcntBnnkNm,
'refundAcntBnnkCd':refundAcntBnnkCd,
'refundAcntDpstrNm':refundAcntDpstrNm,
'refundAcntnb':refundAcntnb,
'isBank':isBank,
'isFdrmDlvyTrmnat':isFdrmDlvyTrmnat,
'goodsList':goodsList,
'setleTyCd':setleTyCd // 환불 방법 코드
};
// openModal("ordrCanclAlert");
openConfirmModal(function (onSuccess) {
fn_post_setle_cancl(cancel, onSuccess);
}, 'confirm_reg_alert', '#regCfrmBtn', 'success_reg_alert', '#regSuccessBtn', fn_go_ordr_dtl);
// fn_post_setle_cancl(cancel);
});
/*
* 취소수량 변경 이벤트
*/
$(document).on('change', '.canclQy', function() {
let selectedIndex = $(this).prop('selectedIndex');
if (selectedIndex > 0) { // 첫 번째 이외에 체크했을 경우만 실행
let currTr = $(this).closest('.cancl-goods');
let currTrCheckBox = currTr.find('input[name="goodsCheck"]');
currTrCheckBox.prop('checked', true);
}
});
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
$('#returnValidBtn').on('click', function() {
closeModal('confirm_return_valid_alert');
});
}
/*********************************************************************
* 반품/환불 목록 이동
* *******************************************************************/
const fn_order_refund_list = function() {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/* 결제취소 등록 */
const fn_post_setle_cancl = function (data, onSuccess) {
$("#btnSetleCancl").prop('disabled',true);
$.ajax({
type:'post',
contentType:'application/json',
<c:choose>
<c:when test="${ data.mbrInnb > 0}">
url:'<c:url value="/sopmal/mpage/ordr/insertSetleCanclRegist"/>',
</c:when>
<c:otherwise>
url:'<c:url value="/sopmal/nmbr/ordr/insertSetleCanclRegist"/>',
</c:otherwise>
</c:choose>
data:JSON.stringify(data),
dataType:'json',
success:function (data) {
if (data.resBody != null) {
let parseResult = JSON.parse(data.resBody.result);
if (parseResult.status === '0') {
onSuccess();
fn_go_ordr_dtl();
} else {
alert(parseResult.reason);
fn_go_ordr_dtl();
}
}
$("#btnSetleCancl").prop('disabled',false);
},
error:function (request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
$("#btnSetleCancl").prop('disabled',false);
}
}).done( function (data) {
adscript_btnReturnRegist(JSON.parse(data.resBody.result).adcript)
if (data.resBody != null) {
let parseResult = JSON.parse(data.resBody.result);
if (parseResult.status === '0') {
onSuccess();
}
}
});
}
/* 주문상세 이동 */
const fn_go_ordr_dtl = function () {
const form = $('#condForm');
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrDtlInqire"/>');
$(form).submit();
}
</script>
<body>
<div id="refund-pop" 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">
<c:set var="order" value="${data.order}"/>
<div class="sub-page">
<div class="orderDetail">
<div class="orderDetailTop">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<span class="orderDetailTop__date">
<c:out value="${ order.ordrRceptDtM}"/>
</span>
<span class="orderDetailTop__num">주문번호 <c:out value="${order.ordrInnb}"/></span>
<input type="hidden" id="sopmalCd" value="${order.sopmalCd}"/>
<input type="hidden" id="ordrInnb" value="${order.ordrInnb}"/>
<input type="hidden" id="ordrTyCd" value="${order.ordrTyCd}"/>
<input type="hidden" id="ordrSttusCd" value="${order.ordrSttusCd}"/>
<input type="hidden" id="isBank" value="${not empty order.bnnkNm ? 'Y' : 'N'}"/>
<input type="hidden" id="setleTyCd" value="${order.setleTyCd}"/> <!-- 결제유형 -->
</div>
<c:choose>
<c:when test="${'04' == order.ordrTyCd || '05' == order.ordrTyCd}">
<c:choose>
<c:when test="${not empty data.shippingList}">
<c:forEach var="shipping" items="${data.shippingList}" varStatus="status">
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<div class="orderDetailProduct__multiple__top">
<span class="orderDetailProduct__top__title"><c:out value="${status.count > 1 ? status.count += '. ': ''}"/>배송지</span>
<p class="orderDetailProduct__top__address"><span
class="orderDetailProduct__top__name"><c:out value="${shipping.recpntNm}"/></span><c:out value="${not empty shipping.dlvylcZip ? '(' += shipping.dlvylcZip += ')' : ''}"/>
<c:out value="${shipping.adres}"/>
<c:out value="${shipping.dlvylcAdresDtl}"/></p>
</div>
</div>
<c:forEach var="goods" items="${shipping.goodsList}">
<div class="orderDetail__content cancl-goods">
<div class="orderDetailProduct">
<div class="orderDetailProduct__content">
<div class="orderDetailProduct__item">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input class="cartCheck" type="checkbox" name="goodsCheck" value="" checked onclick="return false;">
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<div class="orderDetailProduct__image">
<a href="javascript:void(0);">
<img src="<c:out value="${ cdnurl }${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
</a>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<a href="javascript:void(0);" class="orderDetailProduct__info__name"><c:out value="${goods.goodsNm}"/></a>
<c:if test="${ not empty goods.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${goods.optnNm}"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>
<input type="hidden" class="ordrInnb" value="${goods.ordrInnb}"/>
<input type="hidden" class="ordrDlvyInnb" value="${goods.ordrDlvyInnb}"/>
<input type="hidden" class="ordrGoodsInnb" value="${goods.ordrGoodsInnb}"/>
<input type="hidden" class="ordrGoodsOptnInnb" value="${goods.ordrGoodsOptnInnb}"/>
<input type="hidden" class="ordrQy" value="${goods.ordrQy}"/>
<input type="hidden" class="subscrptWthdrawPosblAt" value="${goods.subscrptWthdrawPosblAt}"/>
<input type="hidden" class="indvdlzCanclPosblAt" value="${goods.indvdlzCanclPosblAt}"/>
<input type="hidden" class="indvdlzReturnExchngPosblAt" value="${goods.indvdlzReturnExchngPosblAt}"/>
<span class="orderDetailProduct__cancel__num">
취소가능 수량: <c:out value="${goods.ordrQy - goods.setleCanclQy}"/>개
</span>
<div class="nativeSelect">
<select class="canclQy" title="취소 수량" disabled>
<c:forEach var="item" begin="1" end="${goods.ordrQy - goods.setleCanclQy}" step="1" varStatus="status">
<option value="<c:out value="${status.count}"/>" <c:if test="${status.last}">selected</c:if>><c:out value="${status.count}"/></option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</c:forEach>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="orderDetailProduct">
<c:choose>
<c:when test="${not empty data.goodsList}">
<c:forEach var="goods" items="${data.goodsList}">
<div class="orderDetail__content cancl-goods">
<div class="orderDetailProduct">
<div class="orderDetailProduct__content">
<div class="orderDetailProduct__item">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input class="cartCheck" type="checkbox" name="goodsCheck" value="" checked onclick="return false;">
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<div class="orderDetailProduct__image">
<a href="javascript:void(0);">
<img src="<c:out value="${ cdnurl }${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
</a>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<a href="javascript:void(0);" class="orderDetailProduct__info__name"><c:out value="${goods.goodsNm}"/></a>
<c:if test="${ not empty goods.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${goods.optnNm}"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>
<input type="hidden" class="ordrInnb" value="${goods.ordrInnb}"/>
<input type="hidden" class="ordrDlvyInnb" value="${goods.ordrDlvyInnb}"/>
<input type="hidden" class="ordrGoodsInnb" value="${goods.ordrGoodsInnb}"/>
<input type="hidden" class="ordrGoodsOptnInnb" value="${goods.ordrGoodsOptnInnb}"/>
<input type="hidden" class="ordrQy" value="${goods.ordrQy}"/>
<input type="hidden" class="subscrptWthdrawPosblAt" value="${goods.subscrptWthdrawPosblAt}"/>
<input type="hidden" class="indvdlzCanclPosblAt" value="${goods.indvdlzCanclPosblAt}"/>
<input type="hidden" class="indvdlzReturnExchngPosblAt" value="${goods.indvdlzReturnExchngPosblAt}"/>
<span class="orderDetailProduct__cancel__num">
취소가능 수량: <c:out value="${goods.ordrQy - goods.setleCanclQy}"/>개
</span>
<div class="nativeSelect">
<select class="canclQy" title="취소 수량" disabled>
<c:forEach var="item" begin="1" end="${goods.ordrQy - goods.setleCanclQy}" step="1" varStatus="status">
<option value="<c:out value="${status.count}"/>" <c:if test="${status.last}">selected</c:if>><c:out value="${status.count}"/></option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
</c:otherwise>
</c:choose>
</div>
</div>
</c:otherwise>
</c:choose>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="orderRefundReason">
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">취소사유</div>
<div class="select-box">
<select name="returnResnCd" id="returnResnCd" class="lg" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>취소사유를 선택해 주세요.</option>
<c:forEach var="returnResn" items="${data.returnResnList}">
<option value="<c:out value="${returnResn.cd}"/>"><c:out value="${returnResn.cdNm}"/></option>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">상세사유</div>
<textarea name="returnResnCn" id="returnResnCn" class="textarea" rows="6" title="해당 텍스트 에어리어에 대한 설명"
placeholder="최소 10자 이상으로 입력해 주세요."></textarea>
</div>
</div>
<c:if test="${not empty order.setleTyCd && ( order.setleTyCd eq '02' || order.setleTyCd eq '04' || order.setleTyCd eq '05' || order.setleTyCd eq '06' )}">
<p class="orderRefundReason__title">환불방법을 입력해 주세요</p>
<div class="orderRefundReason">
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">은행</div>
<div class="select-box">
<select class="sm" title="해당 셀렉트에 대한 설명" name="refundAcntBnnkNm" id="refundAcntBnnkNm">
<c:forEach var="cdList" items="${ data.bankCdList }" varStatus="status">
<option value="<c:out value="${ cdList.cd }"/>,<c:out value="${ cdList.cdNm }"/>" ><c:out value="${ cdList.cdNm }"/></option>
</c:forEach>
</select>
</div>
<div class="orderRefundReason__itemTitle">예금주</div>
<input type="text" name="refundAcntDpstrNm" id="refundAcntDpstrNm" class="input-text lg" title="예금주" placeholder="예금주 이름을 입력해 주세요." maxlength="20">
<div class="orderRefundReason__itemTitle">계좌번호</div>
<input type="text" name="refundAcntnb" id="refundAcntnb" class="input-text lg" value="" title="계좌번호" placeholder="계좌번호를 입력해 주세요." maxlength="50">
</div>
</div>
</c:if>
</div>
</div>
</div>
</div>
<div class="fullBtnSection">
<button class="btn md gray full" id="btnSetleCancl">
결제 취소
</button>
</div>
<div class="orderRefundReason">
<div class="infoBox">
<h6 class="infoBox__title">최초 배송비</h6>
<p class="infoBox__paragraph">부분 결제 취소 시 추가 배송비가 발생할 수 있으며, 이 때 추가 배송비를 결제해 주셔야만 결제취소 처리완료가 가능합니다.
</p>
<h6 class="infoBox__title">[추가 배송비가 발생하는 경우]</h6>
<ol class="infoBox__list">
<li>① ‘묶음배송비’ 상품의 배송비 무료(금액별 차등) 조건을 충족하여 배송비 무료</li>
<li>② 부분 결제취소로 배송비 무료 조건을 불충족하는 경우 추가 배송비 부과</li>
<li>③ 추가 배송비는 카드 또는 마일리지로 결제 가능</li>
</ol>
<h6 class="infoBox__title">유의사항</h6>
<ol class="infoBox__list">
<li>① 결제확인 상태에서는 전체 취소만 가능합니다.</li>
</ol>
</div>
</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>
<%--등록 성공 모달--%>
<div class="microModal microAlert" id="ordrCanclAlert" 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">
결제 취소 하시겠습니까?
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "ordrCanclBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<form id="condForm">
<input type="hidden" id="ordrInnb" name ="ordrInnb" value="${ order.ordrInnb }"/>
<input type="hidden" id="sopmalCd" name ="sopmalCd" value="${ order.sopmalCd }"/>
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="1"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="10"/>
</form>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<%-- 환불 신청 벨리데이션 _ 상품 --%>
<div class="microModal microAlert" id="confirm_return_valid_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
<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 message">
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "returnValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
// 주문상세내역 각 섹션 접기/펼치기
$('.orderDetailProduct__top').on('click', function (e) {
e.preventDefault();
var thisParent = $(this).closest('.orderDetailProduct');
var thisChevron = $(this).find('.orderDetailProduct__top__chevron');
if (thisParent.hasClass('closed')) {
thisParent.removeClass('closed');
thisChevron.removeClass('closed');
} else {
thisParent.addClass('closed');
thisChevron.addClass('closed');
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,922 @@
<%@ 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 : RtngudCanclRefndDtlR.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 (){
fn_start_display();
/* 반품/환불 팝업 > 반품/환불 버튼 클릭 이벤트 */
$(document).on('click', '#btnReturnRegist', function() {
const popup = $('#return-pop');
const row = $(popup).find('.cancl-goods');
const checkLength = $(row).find('input[name="goodsCheck"]:checked').length;
if (checkLength === 0) {
openModal_message('confirm_return_valid_alert', '반품/환불 하실 상품을 선택해 주십시요.');
// alert('반품/환불 하실 상품을 선택해 주십시요.');
return false;
}
let goodsList = [];
let isContinue = true;
$(row).find('input[name="goodsCheck"]:checked').each(function () {
const tr = $(this).closest('div').parent().closest('div');
const sopmalCd = $(tr).find('.sopmalCd').val();
const ordrInnb = $(tr).find('.ordrInnb').val();
const ordrDlvyInnb = $(tr).find('.ordrDlvyInnb').val();
const ordrGoodsInnb = $(tr).find('.ordrGoodsInnb').val();
const ordrGoodsOptnInnb = $(tr).find('.ordrGoodsOptnInnb').val();
const ordrQy = $(tr).find('.ordrQy').val();
const canclQy = $(tr).find('.canclQy option:selected').val();
const goodsDwldCouponInnb = $(tr).find('.goodsDwldCouponInnb').val();
const subscrptWthdrawPosblAt = $(tr).find('.subscrptWthdrawPosblAt').val();
const indvdlzCanclPosblAt = $(tr).find('.indvdlzCanclPosblAt').val();
const indvdlzReturnExchngPosblAt = $(tr).find('.indvdlzReturnExchngPosblAt').val();
if (fn_is_empty(canclQy)) {
openModal_message('confirm_return_valid_alert', '취소수량을 선택해 주십시요.');
// alert('취소수량을 선택해 주십시요.');
isContinue = false;
return false;
}
if ('N' === subscrptWthdrawPosblAt) {
// alert('청약철회불가 상품이 선택 되었습니다.');
isContinue = false;
return false;
}
if ('N' === indvdlzReturnExchngPosblAt && (parseInt(ordrQy) > parseInt(canclQy))) {
openModal_message('confirm_return_valid_alert', '개별반품이 불가능한 상품이 선택 되었습니다.');
// alert('개별반품이 불가능한 상품이 선택 되었습니다.');
isContinue = false;
return false;
}
let goods = {
'sopmalCd': sopmalCd,
'ordrInnb': ordrInnb,
'ordrDlvyInnb': ordrDlvyInnb,
'ordrGoodsInnb': ordrGoodsInnb,
'ordrGoodsOptnInnb': ordrGoodsOptnInnb,
'ordrQy': parseInt(ordrQy),
'canclQy': parseInt(canclQy),
'dwldCouponInnb' : goodsDwldCouponInnb
};
goodsList.push(goods);
});
// 결제 취소/ 환불
const sopmalCd = $(popup).find('#sopmalCd').val();
const ordrInnb = $(popup).find('#ordrInnb').val();
const ordrTyCd = $(popup).find('#ordrTyCd').val();
const ordrSttusCd = $(popup).find('#ordrSttusCd').val();
const returnResnCd = $(popup).find('#returnResnCd option:selected').val();
const returnResnCn = $(popup).find('#returnResnCn').val();
let refundAcntBnnkNm = $(popup).find('#refundAcntBnnkNm').val();
let refundAcntBnnkCd = '';
const refundAcntDpstrNm = $(popup).find('#refundAcntDpstrNm').val(); // 환불 입금자 명
const refundAcntnb = $(popup).find('#refundAcntnb').val();
const isFdrmDlvyTrmnat = $(popup).find('input[name="isFdrmDlvyTrmnat"]:checked').val();
const isBank = $(popup).find('#isBank').val();
const setleTyCd = $(popup).find('#setleTyCd').val();
// 반품
const returnDlvyPymntTyCd = $(popup).find('#returnDlvyPymntTyCd option:selected').val();
const returnMthCd = $(popup).find('input[name="returnMthCd"]:checked').val();
const senderZip = $(popup).find('#senderZip').val();
const senderAdresDvCd = $(popup).find('#senderAdresDvCd').val();
const senderRnmAdres = $(popup).find('#senderRnmAdres').val();
const senderLnbAdres = $(popup).find('#senderLnbAdres').val();
const senderAdresDtl = $(popup).find('#senderAdresDtl').val();
const returnAcntBnnkNm = $(popup).find('#returnAcntBnnkNm option:selected').val(); // 반품 배송지 입금 은행
const returnAcntDpstrNm = $(popup).find('#returnAcntDpstrNm').val(); // 반품 배송비 입금자 명
// const firstPart = $(popup).find('select[name="returnCstmrMbtlnb"]').val();
// const middlePart = $(popup).find('input[name="returnCstmrMbtlnb"]').eq(0).val();
const lastPart = $(popup).find('input[name="returnCstmrMbtlnb"]').val();
const returnCstmrMbtlnb = lastPart;
const rlDlvyAmt = $(popup).find('#totalRlDlvyAmt').val(); // 단일 배송지 배송비
if (fn_is_empty(returnResnCd)) {
openModal_message('confirm_return_valid_alert', '반품/환불 사유를 선택해 주십시요.');
// alert('반품/환불 사유를 선택해 주십시요.');
$(popup).find('#returnResnCd').focus();
return false;
}
if (fn_is_empty(returnResnCn)) {
openModal_message('confirm_return_valid_alert', '반품/환불 상세 사유를 입력해 주십시요.');
// alert('반품/환불 상세 사유를 입력해 주십시요.');
$(popup).find('#returnResnCn').focus();
return false;
}
// 쇼핑몰 반품 택배를 통해 물품을 반송하는 경우
if (!fn_is_empty(returnMthCd) && returnMthCd === '02') {
if (fn_is_empty(senderZip)) {
openModal_message('confirm_return_valid_alert', '우편번호를 입력해 주십시요.');
// alert('우편번호를 입력해 주십시요.');
$(popup).find('#senderZip').focus();
return false;
}
if (fn_is_empty(senderAdresDtl)) {
openModal_message('confirm_return_valid_alert', '상세주소를 입력해 주십시요.');
// alert('상세주소를 입력해 주십시요.');
$(popup).find('#senderAdresDtl').focus();
return false;
}
}
// 무통장 결제했을 경우
if (!fn_is_empty(setleTyCd) && ( setleTyCd === '02' || setleTyCd === '04' || setleTyCd === '05' || setleTyCd === '06' ) ) {
const bankCdAndNm = refundAcntBnnkNm;
const bankValue = bankCdAndNm.split(',');
refundAcntBnnkNm = bankValue[1];
refundAcntBnnkCd = bankValue[0];
if (fn_is_empty(refundAcntBnnkNm)) {
openModal_message('confirm_return_valid_alert', '환불 은행을 입력해 주십시요.');
// alert('환불 은행을 입력해 주십시요.');
$(popup).find('#refundAcntBnnkNm').focus();
return false;
}
if (fn_is_empty(refundAcntDpstrNm)) {
openModal_message('confirm_return_valid_alert', '예금주를 입력해 주십시요.');
// alert('예금주를 입력해 주십시요.');
$(popup).find('#refundAcntDpstrNm').focus();
return false;
}
if (fn_is_empty(refundAcntnb)) {
openModal_message('confirm_return_valid_alert', '계좌번호를 입력해 주십시요.');
// alert('계좌번호를 입력해 주십시요.');
$(popup).find('#refundAcntnb').focus();
return false;
}
}
let selectedOption = $('#returnResnCd option:selected');
let cdDvData = selectedOption.data('cddv');
if (fn_is_empty(returnDlvyPymntTyCd) && cdDvData === '01') {
openModal_message('confirm_return_valid_alert', '배송비 결제방법을 선택해 주십시오.');
// alert('배송비 결제방법을 선택해 주십시오.');
$(popup).find('#returnDlvyPymntTyCd').focus();
return false;
}
// 배송비 직접 송금할 경우
if (!fn_is_empty(returnDlvyPymntTyCd) && returnDlvyPymntTyCd === '01' && cdDvData === '01') {
if (fn_is_empty(returnAcntBnnkNm)) {
openModal_message('confirm_return_valid_alert', '배송비를 송금할 은행을 선택해 주십시요.');
// alert('배송비를 송금할 은행을 선택해 주십시요.');
$(popup).find('#returnAcntBnnkNm').focus();
return false;
}
if (fn_is_empty(returnAcntDpstrNm)) {
openModal_message('confirm_return_valid_alert', '배송비를 송금할 예금주를 입력해 주십시요.');
// alert('배송비를 송금할 예금주를 입력해 주십시요.');
$(popup).find('#returnAcntDpstrNm').focus();
return false;
}
} else if (fn_is_empty(returnDlvyPymntTyCd) && cdDvData === '01') {
openModal_message('confirm_return_valid_alert', '배송비 결제 방법을 선택해 주십시오.');
// alert('배송비 결제 방법을 선택해 주십시오.');
return false;
}
if (!isContinue) {
return false;
}
let cancel = {
'sopmalCd':sopmalCd, // 쇼핑몰코드
'ordrInnb':ordrInnb, // 주문고유번호
'ordrTyCd':ordrTyCd, // 주문유형콛,
'ordrSttusCd':ordrSttusCd, // 주문상태,
'returnResnCd':returnResnCd, // 반품사유코드
'returnResnCn':returnResnCn, // 반품사유내용
'refundAcntBnnkNm':refundAcntBnnkNm, // 환불 은행
'refundAcntBnnkCd':refundAcntBnnkCd,
'refundAcntDpstrNm':refundAcntDpstrNm, // 환불 입금자
'returnAcntBnnkNm':returnAcntBnnkNm, // 입금은행 + 계좌번호 반품 배송비
'returnAcntDpstrNm':returnAcntDpstrNm, // 입금자명 반품 배송비
'refundAcntnb':refundAcntnb, //
'isBank':isBank, // 은행명인데 이거 어떤거 말하는거지
'isFdrmDlvyTrmnat':isFdrmDlvyTrmnat, // ?
'goodsList':goodsList, // 반품 상품 배열
'setleTyCd':setleTyCd, // 환불 방법 코드
// 반품
'returnDlvyPymntTyCd':returnDlvyPymntTyCd, // 배송비결제 방법코드 ( 직접송금, 환불금액 차감, 택배상자 동봉 )
'returnCstmrMbtlnb':returnCstmrMbtlnb, // 반품 연락처
'returnMthCd':returnMthCd, // 반품 방법 ( 구매자 반송, 상점 회수 )
'senderZip':senderZip, // 우편번호
'senderAdresDvCd':senderAdresDvCd, // 주소 구분 코드
'senderRnmAdres':senderRnmAdres, // 도로명 주소
'senderLnbAdres':senderLnbAdres, // 지번 주소
'senderAdresDtl':senderAdresDtl, // 상세 주소
'returnDlvyAmt':rlDlvyAmt // 반품환불 배송비 금액
};
openConfirmModal(function (onSuccess) {
fn_post_return_regist(cancel, onSuccess);
}, 'confirm_reg_alert', '#regCfrmBtn', 'success_reg_alert', '#regSuccessBtn', fn_go_ordr_dtl);
// fn_post_return_regist(cancel);
});
$('#returnResnCd').on('change', function() {
fn_ctrl_refund_resn_cd();
});
/*
* 취소수량 변경 이벤트
*/
$(document).on('change', '.canclQy', function() {
let selectedIndex = $(this).prop('selectedIndex');
if (selectedIndex > 0) { // 첫 번째 이외에 체크했을 경우만 실행
let currTr = $(this).closest('.cancl-goods');
let currTrCheckBox = currTr.find('input[name="goodsCheck"]');
currTrCheckBox.prop('checked', true);
}
});
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
$('#returnValidBtn').on('click', function() {
closeModal('confirm_return_valid_alert');
});
const title = '반품 신청';
fn_set_header_title(title);
fn_ctrl_retrun_mth();
fn_ctrl_return_dlvy_mth();
MicroModal.init({
disableScroll: true,
awaitCloseAnimation: true,
});
}
/*********************************************************************
* 반품/환불 목록 이동
* *******************************************************************/
const fn_order_refund_list = function() {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/* 반품/환불 신청 */
const fn_post_return_regist = function(data, onSuccess) {
$("#btnReturnRegist").prop("disabled",true);
$.ajax({
type : 'post',
contentType: 'application/json',
url : '<c:url value="/sopmal/mpage/ordr/insertSetleCanclRegist"/>',
data : JSON.stringify(data),
dataType: 'json',
success : function(data) {
if (data.resBody != null) {
let parseResult = JSON.parse(data.resBody.result);
if (parseResult.status === '0') {
onSuccess();
fn_go_ordr_dtl();
} else {
alert(parseResult.reason);
fn_go_ordr_dtl();
}
}
$("#btnReturnRegist").prop("disabled",false);
},
error : function(request, status, error) {
let message = JSON.parse(JSON.parse(request.responseText).resBody.message);
alert(message.errorMsg);
$("#btnReturnRegist").prop("disabled",false);
}
});
}
/**
* 배송비 결제방법 영역 제어
*/
const fn_ctrl_return_dlvy_mth = function() {
// let radioVal = $('input[name="returnDlvyPymntTyCd"]').val();
let radioVal = $('#returnDlvyPymntTyCd').val();
if (radioVal === '01') {
$('.returnMtcDiv').show();
$('.returnMtcDiv').prop('disabled', false);
} else if (radioVal === '02') {
$('.returnMtcDiv').hide();
$('.returnMtcDiv').prop('disabled', true);
} else if (radioVal === '03') {
$('.returnMtcDiv').hide();
$('.returnMtcDiv').prop('disabled', true);
} else {
$('.returnMtcDiv').hide();
$('.returnMtcDiv').prop('disabled', true);
}
}
/**
* 배송지 주소 영역 제어
*/
const fn_ctrl_retrun_mth = function() {
let radioVal = $('input[name="returnMthCd"]:checked').val();
if (radioVal === '01') {
$('.addressSelectDiv').hide();
$('.addressSelectDiv').prop('disabled', true);
} else if (radioVal === '02') {
$('.addressSelectDiv').show();
$('.addressSelectDiv').prop('disabled', false);
}
}
/* 주문상세 이동 */
const fn_go_ordr_dtl = function () {
const form = $('#condForm');
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/sopmal/mpage/ordr/selectMbrOrdrDtlInqire"/>');
$(form).submit();
}
/**********************************************
팝업 배송지 등록 시 도로명, 지번 주소 구분 value값 넣기 ok
***********************************************/
const fn_set_postcode_popup = function (data) {
$('#senderZip').val(data.postcode);
$('#adresDv').val(data.addressType);
if (data.addressType == '01') {
$('#senderLnbAdres').val(null);
$('#senderRnmAdres').val(null);
$('#senderLnbAdres').val(data.jibunAddress);
$('#senderAdresDvCd').val('02');
} else {
$('#senderLnbAdres').val(null);
$('#senderRnmAdres').val(null);
$('#senderRnmAdres').val(data.roadAddress);
$('#senderAdresDvCd').val('01');
}
closeModal('postModal');
}
/**
* 쉬소 사유에 따른 반품 배송비 영역 제어
*/
const fn_ctrl_refund_resn_cd = function() {
console.log("셀렉트 박스 변경 ");
let cdDv = $('#returnResnCd').val();
let selectedOption = $('#returnResnCd option:selected');
let cdDvData = selectedOption.data('cddv');
console.log("선택된 값 (value): " + cdDv);
console.log("선택된 data-cddv 값: " + cdDvData);
if (cdDvData === '01') {
$('input[name="returnDlvyRspnsblCd"][value="01"]').click();
$('.returnDlvyAcntnbArea').show();
$('.returnDlvyAcntnbArea').find('input, select').prop('disabled', false);
setTimeout(function() {
$(document).click(); // 일정 시간 후 클릭 이벤트 발생
}, 10);
} else if (cdDvData === '02') {
$('input[name="returnDlvyRspnsblCd"][value="02"]').click();
$('.returnDlvyAcntnbArea').hide();
$('.returnDlvyAcntnbArea').find('input, select').prop('disabled', true);
setTimeout(function() {
$(document).click(); // 일정 시간 후 클릭 이벤트 발생
}, 10);
}
}
</script>
<body>
<div id="return-pop" 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">
<c:set var="order" value="${data.order}"/>
<div class="sub-page">
<div class="orderDetail">
<div class="orderDetailTop">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<span class="orderDetailTop__date">
<c:out value="${ order.ordrRceptDtM}"/>
</span>
<span class="orderDetailTop__num">주문번호 <c:out value="${order.ordrInnb}"/></span>
<input type="hidden" id="sopmalCd" value="${order.sopmalCd}"/>
<input type="hidden" id="ordrInnb" value="${order.ordrInnb}"/>
<input type="hidden" id="ordrTyCd" value="${order.ordrTyCd}"/>
<input type="hidden" id="ordrSttusCd" value="${order.ordrSttusCd}"/>
<input type="hidden" id="isBank" value="${not empty order.bnnkNm ? 'Y' : 'N'}"/>
<input type="hidden" id="setleTyCd" value="${order.setleTyCd}"/> <!-- 결제유형 -->
</div>
<c:forEach var="shipping" items="${data.shippingList}" varStatus="status">
<c:if test="${ status.first }">
<c:set var="defaultReturnAdress" value="${ shipping }"/>
</c:if>
</c:forEach>
<c:choose>
<c:when test="${'04' == order.ordrTyCd || '05' == order.ordrTyCd}">
<c:choose>
<c:when test="${not empty data.shippingList}">
<c:forEach var="shipping" items="${data.shippingList}" varStatus="status">
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<div class="orderDetailProduct__multiple__top">
<span class="orderDetailProduct__top__title"><c:out value="${status.count > 1 ? status.count += '. ': ''}"/>배송지</span>
<p class="orderDetailProduct__top__address"><span
class="orderDetailProduct__top__name"><c:out value="${shipping.recpntNm}"/></span><c:out value="${not empty shipping.dlvylcZip ? '(' += shipping.dlvylcZip += ')' : ''}"/>
<c:out value="${shipping.adres}"/>
<c:out value="${shipping.dlvylcAdresDtl}"/></p>
</div>
</div>
<c:forEach var="goods" items="${shipping.goodsList}">
<div class="orderDetail__content cancl-goods">
<div class="orderDetailProduct">
<div class="orderDetailProduct__content">
<div class="orderDetailProduct__item">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input class="cartCheck" type="checkbox" name="goodsCheck" value="">
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<div class="orderDetailProduct__image">
<a href="javascript:void(0);">
<img src="<c:out value="${ cdnurl }${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
</a>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<a href="javascript:void(0);" class="orderDetailProduct__info__name"><c:out value="${goods.goodsNm}"/></a>
<c:if test="${ not empty goods.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${goods.optnNm}"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>
<input type="hidden" class="ordrInnb" value="${goods.ordrInnb}"/>
<input type="hidden" class="ordrDlvyInnb" value="${goods.ordrDlvyInnb}"/>
<input type="hidden" class="ordrGoodsInnb" value="${goods.ordrGoodsInnb}"/>
<input type="hidden" class="ordrGoodsOptnInnb" value="${goods.ordrGoodsOptnInnb}"/>
<input type="hidden" class="ordrQy" value="${goods.ordrQy}"/>
<input type="hidden" class="subscrptWthdrawPosblAt" value="${goods.subscrptWthdrawPosblAt}"/>
<input type="hidden" class="indvdlzCanclPosblAt" value="${goods.indvdlzCanclPosblAt}"/>
<input type="hidden" class="indvdlzReturnExchngPosblAt" value="${goods.indvdlzReturnExchngPosblAt}"/>
<span class="orderDetailProduct__cancel__num">
취소가능 수량: <c:out value="${goods.ordrQy - goods.setleCanclQy}"/>개
</span>
<div class="nativeSelect">
<select class="canclQy" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>수량</option>
<c:forEach var="item" begin="1" end="${goods.ordrQy - goods.setleCanclQy}" step="1" varStatus="status">
<option value="<c:out value="${status.count}"/>"><c:out value="${status.count}"/></option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</c:forEach>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="orderDetailProduct">
<c:choose>
<c:when test="${not empty data.goodsList}">
<c:forEach var="goods" items="${data.goodsList}">
<div class="orderDetail__content cancl-goods">
<div class="orderDetailProduct">
<div class="orderDetailProduct__content">
<div class="orderDetailProduct__item">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input class="cartCheck" type="checkbox" name="goodsCheck" value="">
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<div class="orderDetailProduct__image">
<a>
<img src="<c:out value="${ cdnurl }${goods.goodsImgCours}"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${goods.goodsNm}"/>">
</a>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<a href="javascript:void(0);" class="orderDetailProduct__info__name"><c:out value="${goods.goodsNm}"/></a>
<c:if test="${ not empty goods.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${goods.optnNm}"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${goods.ordrQy}"/>개<span
class="orderDetailProduct__info__dot">·</span><span
class="comma"><c:out value="${goods.applyDscntAmt}"/></span>원
</p>
<div class="orderDetailProduct__cancel">
<input type="hidden" class="sopmalCd" value="${goods.sopmalCd}"/>
<input type="hidden" class="ordrInnb" value="${goods.ordrInnb}"/>
<input type="hidden" class="ordrDlvyInnb" value="${goods.ordrDlvyInnb}"/>
<input type="hidden" class="ordrGoodsInnb" value="${goods.ordrGoodsInnb}"/>
<input type="hidden" class="ordrGoodsOptnInnb" value="${goods.ordrGoodsOptnInnb}"/>
<input type="hidden" class="ordrQy" value="${goods.ordrQy}"/>
<input type="hidden" class="subscrptWthdrawPosblAt" value="${goods.subscrptWthdrawPosblAt}"/>
<input type="hidden" class="indvdlzCanclPosblAt" value="${goods.indvdlzCanclPosblAt}"/>
<input type="hidden" class="indvdlzReturnExchngPosblAt" value="${goods.indvdlzReturnExchngPosblAt}"/>
<span class="orderDetailProduct__cancel__num">
취소가능 수량: <c:out value="${goods.ordrQy - goods.setleCanclQy}"/>개
</span>
<div class="nativeSelect">
<select class="canclQy" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>수량</option>
<c:forEach var="item" begin="1" end="${goods.ordrQy - goods.setleCanclQy}" step="1" varStatus="status">
<option value="<c:out value="${status.count}"/>"><c:out value="${status.count}"/></option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr><td colspan="100%" ><spring:message code="common.nodata"/></td></tr>
</c:otherwise>
</c:choose>
</div>
</div>
</c:otherwise>
</c:choose>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="orderRefundReason">
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">취소사유</div>
<div class="select-box">
<select name="returnResnCd" id="returnResnCd" class="lg" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>취소사유를 선택해 주세요.</option>
<c:forEach var="returnResn" items="${data.returnResnList}">
<option value="<c:out value="${returnResn.cd}"/>" data-cddv="<c:out value="${ returnResn.cdDv }"/>" ><c:out value="${returnResn.cdNm}"/></option>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">상세사유</div>
<textarea name="returnResnCn" id="returnResnCn" class="textarea" rows="6" title="해당 텍스트 에어리어에 대한 설명"
placeholder="최소 10자 이상으로 입력해 주세요."></textarea>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">연락처</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
</div>
<input class="input-text full" type="text" title="구매자" readonly
placeholder="구매자" value="<c:out value="${ order.mbrNm }"/>">
</div>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">
</div>
<input class="input-text full number" type="text" name="returnCstmrMbtlnb"
title="해당 인풋에 대한 설명" placeholder="휴대폰번호 입력 (’-’ 없이)"
value="<c:out value="${ order.ordrrMbtlnb }"/>">
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">반품 방법 (반송주소 : <c:out value="${ data.returnAddress }"/>)</div>
<div class="custom-radio-container">
<c:forEach var="cdList" items="${ data.returnMthCdList }" varStatus="status">
<div class="custom-radio is-medium">
<input type="radio" id="${ cdList.cdNm }${cdList.cd}" name="returnMthCd" value="${ cdList.cd }" <c:if test="${ cdList.cd eq '02' }">checked="checked"</c:if> onclick="fn_ctrl_retrun_mth();">
<label for="${ cdList.cdNm }${cdList.cd}">${ cdList.cdNm }</label>
</div>
</c:forEach>
</div>
</div>
</div>
<div class="userForm userForm--returnBox addressSelectDiv">
<div class="userForm__inputBox">
<h3 class="section-title">회수지 정보</h3>
<div class="userForm__inputBox__item">
<div class="userForm__inputBox__itemTitle">배송지 주소
</div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input class="input-text" type="text" title="해당 인풋에 대한 설명" id="senderZip" name="senderZip" readonly
placeholder="">
<input type="hidden" id="senderAdresDvCd" name="senderAdresDvCd" value=""/>
<button type="button" class="btn md theme outline" onclick="fn_select_post_mobile(fn_set_postcode_popup); return false;" >우편번호
찾기</button>
</div>
<input type="text" id="senderRnmAdres" name="senderRnmAdres" class="input-text lg" title="도로명 주소" placeholder="도로명 주소" maxlength="20" readonly>
<input type="text" name="senderLnbAdres" id="senderLnbAdres" class="input-text lg" title="지번주소" placeholder="지번주소" maxlength="20" readonly>
<input type="text" name="senderAdresDtl" id="senderAdresDtl" class="input-text lg" value="" title="상세 주소" placeholder="상세 주소" maxlength="50">
</div>
</div>
</div>
</div>
<c:if test="${not empty order.setleTyCd && ( order.setleTyCd eq '02' || order.setleTyCd eq '04' || order.setleTyCd eq '05' || order.setleTyCd eq '06' )}">
<p class="orderRefundReason__title">환불방법을 입력해 주세요</p>
<div class="orderRefundReason">
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">은행</div>
<div class="select-box">
<select class="short2" title="해당 셀렉트에 대한 설명" name="refundAcntBnnkNm" id="refundAcntBnnkNm">
<c:forEach var="cdList" items="${ data.bankCdList }" varStatus="status">
<option value="<c:out value="${ cdList.cd }"/>,<c:out value="${ cdList.cdNm }"/>" ><c:out value="${ cdList.cdNm }"/></option>
</c:forEach>
</select>
</div>
<div class="orderRefundReason__itemTitle">입금자명</div>
<input type="text" name="refundAcntDpstrNm" id="refundAcntDpstrNm" class="input-text lg" title="입금자명" placeholder="입금자명 이름을 입력해 주세요." maxlength="20">
<div class="orderRefundReason__itemTitle">계좌번호</div>
<input type="text" name="refundAcntnb" id="refundAcntnb" class="input-text lg" value="" title="계좌번호" placeholder="계좌번호를 입력해 주세요." maxlength="50">
</div>
</div>
</c:if>
<div class="orderRefundReason returnDlvyAcntnbArea">
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">배송비 결제방법</div>
<div class="select-box">
<select class="full" title="반품 배송비 결제방법" id="returnDlvyPymntTyCd" name="returnDlvyPymntTyCd" onchange="fn_ctrl_return_dlvy_mth();">
<option value="" disabled selected>반품 배송비 결제방법을 선택
</option>
<c:forEach var="cdList" items="${data.returnMtcCdList}">
<option value="<c:out value="${cdList.cd}"/>" ><c:out value="${cdList.cdNm}"/></option>
</c:forEach>
</select>
</div>
<div class="select-box returnMtcDiv">
<select class="full" title="은행선택" name="returnAcntBnnkNm" id="returnAcntBnnkNm">
<option value="" selected disabled>선택</option>
<c:forEach items="${ data.bankAccount }" var="bankAccount" varStatus="status">
<option value="<c:out value="${ bankAccount.acntnb }"/>"><c:out value="${ bankAccount.dpstrNm }"/> <c:out value="${ bankAccount.acntnb }"/></option>
</c:forEach>
</select>
</div>
<div class="returnMtcDiv">
<input type="text" class="input-text full" value="" name="returnAcntDpstrNm" id="returnAcntDpstrNm" title="입금자명" placeholder="입금자명">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="fullBtnSection">
<button class="btn md gray full" id="btnReturnRegist">
반품 신청
</button>
</div>
<div class="orderRefundReason">
<div class="infoBox">
<h6 class="infoBox__title">최초 배송비</h6>
<p class="infoBox__paragraph">부분 결제 취소 시 추가 배송비가 발생할 수 있으며, 이 때 추가 배송비를 결제해 주셔야만 결제취소 처리완료가 가능합니다.
</p>
<h6 class="infoBox__title">[추가 배송비가 발생하는 경우]</h6>
<ol class="infoBox__list">
<li>① ‘묶음배송비’ 상품의 배송비 무료(금액별 차등) 조건을 충족하여 배송비 무료</li>
<li>② 부분 결제취소로 배송비 무료 조건을 불충족하는 경우 추가 배송비 부과</li>
<li>③ 추가 배송비는 카드 또는 마일리지로 결제 가능</li>
</ol>
<h6 class="infoBox__title">유의사항</h6>
<ol class="infoBox__list">
<li>① 결제확인 상태에서는 전체 취소만 가능합니다.</li>
</ol>
</div>
</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>
<form id="condForm">
<input type="hidden" id="ordrInnb" name ="ordrInnb" value="${ order.ordrInnb }"/>
<input type="hidden" id="sopmalCd" name ="sopmalCd" value="${ order.sopmalCd }"/>
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="1"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="10"/>
</form>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<%-- 환불 신청 벨리데이션 _ 상품 --%>
<div class="microModal microAlert" id="confirm_return_valid_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
<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 message">
</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button class="microModal__btn" id = "returnValidBtn"><spring:message code="button.ok"/></button>
</div>
</div>
</div>
</div>
<script>
// 주문상세내역 각 섹션 접기/펼치기
$('.orderDetailProduct__top').on('click', function (e) {
e.preventDefault();
var thisParent = $(this).closest('.orderDetailProduct');
var thisChevron = $(this).find('.orderDetailProduct__top__chevron');
if (thisParent.hasClass('closed')) {
thisParent.removeClass('closed');
thisChevron.removeClass('closed');
} else {
thisParent.addClass('closed');
thisChevron.addClass('closed');
}
});
let dlvylcZip = '${ defaultReturnAdress.dlvylcZip }';
let dlvylcAdresDvCd = '${ defaultReturnAdress.dlvylcAdresDvCd }';
let dlvylcRnmAdres = '${ defaultReturnAdress.dlvylcRnmAdres }';
let dlvylcLnbAdres = '${ defaultReturnAdress.dlvylcLnbAdres }';
let dlvylcAdresDtl = '${ defaultReturnAdress.dlvylcAdresDtl }';
$(document).ready(function() {
$('input[name="senderZip"]').val(dlvylcZip);
$('input[name="senderAdresDvCd"]').val(dlvylcAdresDvCd);
$('input[name="senderRnmAdres"]').val(dlvylcRnmAdres);
$('input[name="senderLnbAdres"]').val(dlvylcLnbAdres);
$('input[name="senderAdresDtl"]').val(dlvylcAdresDtl);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,743 @@
<%@ 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 : RtngudCanclRefndDtlR.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 (){
const title = '반품/환불 상세';
fn_set_header_title(title);
fn_start_display();
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
}
/*********************************************************************
* 반품/환불 목록 이동
* *******************************************************************/
const fn_order_refund_list = function() {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/**********************************************************
* 반품/환불 목록 상세 이동
* ********************************************************/
const fn_move_refund_dtl = function() {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndDtlInqire"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/*********************************************************************
* 반품 주소 변경
* *******************************************************************/
const fn_update_dlvy_info = function () {
openConfirmModal(function (onSuccess) {
fn_update_dlvy_info_m(onSuccess);
}, 'confirm_updt_alert', '#updtCfrmBtn', 'success_updt_alert', '#updtSuccessBtn', fn_location_reload);
}
/*********************************************************************
* 반품 주소 변경
* *******************************************************************/
const fn_update_dlvy_info_m = function (onSuccess) {
const data = $('#returnDlvyUpdtForm').serializeArray();
$.ajax({
type: 'POST',
url: '<c:url value="/sopmal/mpage/ordr/updateRtngudCanclRefndUpdt"/>',
data: data,
success: function (result) {
result = JSON.parse(result.resBody.result);
if (result.result === 'success') {
onSuccess();
} else {
$("#customConfirmAlertCn").text(`<spring:message code="fail.common.update"/> 고객센터에 문의해주세요.`);
openModal("custom_confirm_alert");
}
}
});
}
const fn_location_reload = function() {
location.reload();
}
/*********************************************************************
* 환불 계좌 정보 변경
* *******************************************************************/
const fn_update_acnt_info = function () {
openConfirmModal(function (onSuccess) {
fn_update_acnt_info_m(onSuccess);
}, 'confirm_updt_alert', '#updtCfrmBtn', 'success_updt_alert', '#updtSuccessBtn', fn_location_reload);
}
const fn_update_acnt_info_m = function (onSuccess) {
const data = $('#refundAcntUpdtForm').serialize();
$.ajax({
type: 'POST',
url: '<c:url value="/sopmal/mpage/ordr/updateRtngudCanclRefndUpdt"/>',
data: data,
success: function (result) {
result = JSON.parse(result.resBody.result);
if(result.result === 'success'){
onSuccess();
}else{
$("#customConfirmAlertCn").text(`<spring:message code="fail.common.update"/> 고객센터에 문의해주세요.`);
openModal("custom_confirm_alert");
}
}
});
}
/* ********************************************************
* 우편번호 찾기
******************************************************** */
const fn_set_postcode = function(data) {
$('#postcode').val(data.postcode);
$('#adresDvCd').val(data.addressType);
if (data.addressType == '02') {
$('#address').val(data.jibunAddress);
} else if (data.addressType == '01') {
$('#address').val(data.roadAddress);
}
closeModal('postModal');
}
/**
* 반품 상품 QNA 문의 팝업
* @param goodsInnb
*/
const fn_pop_regist = (goodsInnb) => {
$.ajax({
type: "post",
data: {
authDv: "REGIST",
reqUrl: "modal",
bbsId: "goods_qna",
goodsInnb: goodsInnb,
},
url: "/sopmal/csc/selectBbscttAuth",
success: function (data) {
$("#modalDiv").html(data);
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
openModal("authPop");
}
});
}
</script>
<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">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="orderDetail">
<c:if test="${ not empty resultMap.result.refnd.refundComptDt }">
<div class="detailTop">
<p class="detailTop__title"><em>반품/환불 완료</em> <c:out value="${ resultMap.result.refnd.refundComptDt }"/></p>
</div>
</c:if>
<div class="orderDetailTop">
<span class="orderDetailTop__date">
<span class="misc">접수일 : </span><c:out value="${ resultMap.result.refnd.registDt }"/>
</span>
<span class="orderDetailTop__num">주문번호 <c:out value="${ resultMap.result.refnd.ordrInnb }"/></span>
</div>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">반품/환불 상품</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetailProduct__content">
<c:set var="rePreOrdrDlvyInnb" value="0"/>
<c:set var="reDlvyCnt" value="1"/>
<c:choose>
<c:when test="${ not empty resultMap.result.itemsList }">
<c:forEach var="refundList" items="${ resultMap.result.itemsList }" varStatus="status">
<div class="orderDetailProduct__item">
<div class="orderDetailProduct__image">
<button type="button">
<img src="<c:out value="${ cdnurl }${ refundList.img }"/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ refundList.goodsNm }">
</button>
</div>
<div class="orderDetailProduct__right">
<div class="orderDetailProduct__info">
<p class="orderDetailProduct__info__status">
(<c:out value="${ refundList.dlvylcZip }"/>)
<c:choose>
<c:when test="${ refundList.dlvylcAdresDvCd eq '01' }">
<c:out value="${ refundList.dlvylcRnmAdres }"/>
</c:when>
<c:when test="${ refundList.dlvylcAdresDvCd eq '02' }">
<c:out value="${ refundList.dlvylcLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ refundList.dlvylAdresDtl }"/>
</p>
<button type="button" class="orderDetailProduct__info__name">
<c:out value="${ refundList.goodsNm }"/>
</button>
<c:if test="${ not empty refundList.optnNm }">
<p class="orderDetailProduct__info__option">
옵션: <c:out value="${ refundList.optnNm }"/>
</p>
</c:if>
<p class="orderDetailProduct__info__quantity"><c:out value="${ refundList.ordrQy }"/>개
<span class="orderDetailProduct__info__dot">·</span>
<span class="comma"><c:out value="${ refundList.applyDscntAmt }"/></span>원
<button type="button" class="btn sm gray2 sub-right-content__innerTitleBtn" onclick="fn_pop_regist('<c:out value="${ refundList.goodsInnb }"/>')" style="float: right;" >문의</button>
</p>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">반품/환불 상품이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title"><c:if test="${ not empty resultMap.result.refnd.returnProcsSttusCd }">반품/</c:if>환불 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th><c:if test="${ not empty resultMap.result.refnd.returnProcsSttusCd }">반품/</c:if>환불 상태</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.result.refnd.returnProcsSttusCd }">
<c:out value="${ resultMap.result.refnd.returnProcsSttusCdNm }"/>
</c:when>
<c:otherwise>
<c:out value="${ resultMap.result.refnd.refundProcsSttusCdNm }"/>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>반품/환불 번호</th>
<td>
<c:out value="${ resultMap.result.refnd.orderRefundInnb }"/>
</td>
</tr>
<tr>
<th>환불 종류</th>
<td><c:out value="${ resultMap.result.refnd.refundTyCdNm }"/></td>
</tr>
<c:if test="${ not empty resultMap.result.refnd.returnRceptDt}">
<tr>
<th>반품 접수일</th>
<td><c:out value="${ resultMap.result.refnd.returnRceptDt }"/></td>
</tr>
</c:if>
<tr>
<th>환불 접수일</th>
<td><c:out value="${ resultMap.result.refnd.refundReqstDt }"/></td>
</tr>
<c:if test="${ not empty resultMap.result.refnd.returnComptDt}">
<tr>
<th>반품 완료일</th>
<td><c:out value="${ resultMap.result.refnd.returnComptDt }"/></td>
</tr>
</c:if>
<c:if test = "${not empty resultMap.result.refnd.refundComptDt }">
<tr>
<th>환불 완료일</th>
<td><c:out value="${ resultMap.result.refnd.refundComptDt }"/></td>
</tr>
</c:if>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<c:if test="${ not empty resultMap.result.refnd.returnRceptDt }">
<c:choose>
<c:when test="${ resultMap.result.refnd.returnProcsSttusCd eq '01' }">
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">회수지 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="userForm userForm--returnBox">
<div class="userForm__inputBox">
<form id="returnDlvyUpdtForm">
<input type="hidden" name="orderReInnb" value="<c:out value="${ resultMap.result.refnd.orderRefundInnb }"/>"/>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">회수방법</div>
<div class="select-box">
<select class="lg" title="해당 셀렉트에 대한 설명" name="returnMthCd">
<option value="" disabled selected>선택</option>
<c:forEach var="cdList" items="${ resultMap.returnMthCdList }" varStatus="status">
<c:choose>
<c:when test="${ resultMap.result.refnd.returnMthCd eq cdList.cd }">
<option value="<c:out value="${ cdList.cd }"/>" selected="selected"><c:out value="${ cdList.cdNm }"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ cdList.cd }"/>"><c:out value="${ cdList.cdNm }"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">배송지 주소
</div>
<div class="inputAddress">
<div class="inputAddress__postalCode">
<input class="input-text xl" type="text" id="postcode" name="zip" title="우편번호" value="<c:out value="${ resultMap.result.refnd.senderZip }"/>" placeholder="우편번호" readonly>
<button type="button" class="btn md theme outline" onclick="fn_select_post_mobile(fn_set_postcode); return false;">우편번호 찾기</button>
<input type="hidden" id="adresDvCd" name="adresDvCd" value="<c:out value="${ resultMap.result.refnd.senderAdresDvCd }"/>"/>
</div>
<input class="input-text full" type="text" id="address" name="lnbOrRnmAdres"
<c:choose>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '01' }">
value="<c:out value="${ resultMap.result.refnd.senderRnmAdres }"/>"
</c:when>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '02' }">
value="<c:out value="${ resultMap.result.refnd.senderLnbAdres }"/>"
</c:when>
</c:choose>
readonly title="지번 주소" placeholder="지번 주소">
<input class="input-text full" type="text" id="detailAddress" name="dtlAdres" value="<c:out value="${ resultMap.result.refnd.senderAdresDtl }"/>" title="상세 주소" placeholder="상세 주소">
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">휴대전화</div>
<div class="inputWithBtn">
<input class="input-text full number" type="text"
title="해당 인풋에 대한 설명" placeholder="휴대폰번호 입력 (’-’ 없이)" name="returnCstmrMbtlnb" oninput="fn_fmt_telno($(this));" maxlength="13"
value="<c:out value="${ resultMap.result.refnd.returnCstmrMbtlnb }"/>">
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">취소사유</div>
<div class="select-box">
<select class="lg" title="해당 셀렉트에 대한 설명" name="returnResnCd">
<c:forEach var="returnResn" items="${resultMap.returnResnList}">
<c:choose>
<c:when test="${ returnResn.cd eq resultMap.result.refnd.returnResnCd }">
<option value="<c:out value="${returnResn.cd}"/>" selected="selected"><c:out value="${returnResn.cdNm}"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${returnResn.cd}"/>"><c:out value="${returnResn.cdNm}"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">상세사유</div>
<textarea name="returnResnCn" id="returnResnCn" class="textarea" rows="4" title="해당 텍스트 에어리어에 대한 설명"
placeholder="최소 10자 이상으로 입력해 주세요."><c:out value="${ resultMap.result.refnd.returnResnCn }"/></textarea>
</div>
<div class="bottomBtnControls">
<button class="btn lg full theme" type="button" onclick="fn_update_dlvy_info();" >수정하기</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">회수지 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>회수방법</th>
<td>
<c:out value="${ resultMap.result.refnd.returnMthCdNm }"/>
</td>
</tr>
<tr>
<th>주소</th>
<td>
<c:if test="${ not empty resultMap.result.refnd.senderZip }">
(<c:out value="${ resultMap.result.refnd.senderZip }"/>)
</c:if>
<c:choose>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '01'}">
<c:out value="${ resultMap.result.refnd.senderRnmAdres }"/>
</c:when>
<c:when test="${ resultMap.result.refnd.senderAdresDvCd eq '02'}">
<c:out value="${ resultMap.result.refnd.senderLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ resultMap.result.refnd.senderAdresDtl }"/>
</td>
</tr>
<tr>
<th>휴대폰 번호</th>
<td>
<c:out value="${ resultMap.result.refnd.returnCstmrMbtlnb }"/>
</td>
</tr>
<tr>
<th>반품 사유</th>
<td>
<c:out value="${ resultMap.result.refnd.returnResnCdNm }"/>
</td>
</tr>
<tr>
<th>상세 사유</th>
<td>
<c:out value="${ resultMap.result.refnd.returnResnCn }"/>
</td>
</tr>
<tr>
<th>배송비 입금</th>
<td>
<c:if test="${ not empty resultMap.result.refnd.returnDlvyRcpmnyAcntnb }">
<c:out value="${ resultMap.result.refnd.returnDlvyRcpmnyAcntnb }"/><br>(예금주: <c:out value="${ resultMap.result.refnd.returnDlvyRcpmnyNm }"/>)
</c:if>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</c:if>
<c:choose>
<c:when test = "${resultMap.result.refnd.refundProcsSttusCd ne '03'}">
<form id = "refundAcntUpdtForm">
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">환불 정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="userForm userForm--returnBox">
<div class="userForm__inputBox">
<div class="userForm__inputBox__item">
<div class="orderRefundReason__itemTitle">환불은행</div>
<div class="select-box">
<select class="lg" title="해당 셀렉트에 대한 설명" name="refundAcntBnnkNm" id="refundAcntBnnkNm">
<c:forEach var="cdList" items="${ resultMap.bankCdList }" varStatus="status">
<c:choose>
<c:when test="${ cdList.cd eq resultMap.result.refnd.refundAcntBnnkCd }">
<option value="<c:out value="${ cdList.cd }"/>,<c:out value="${ cdList.cdNm }"/>" selected="selected" ><c:out value="${ cdList.cdNm }"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ cdList.cd }"/>,<c:out value="${ cdList.cdNm }"/>" ><c:out value="${ cdList.cdNm }"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">예금주</div>
<input class="input-text full" type="text" title="예금주명" value="<c:out value="${ resultMap.result.refnd.refundAcntDpstrNm }"/>" name="refundAcntDpstrNm"
placeholder="예금주명">
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">계좌번호</div>
<input class="input-text full" type="text" title="계좌번호" value="<c:out value="${ resultMap.result.refnd.refundAcntnb }"/>" name="refundAcntnb"
placeholder="계좌번호 '-' 포함 or 숫자만 확인 필요">
</div>
<div class="orderRefundReason__item">
<div class="orderRefundReason__itemTitle">환불사유내용</div>
<input class="input-text full" type="text" title="계좌번호" value="<c:out value="${ resultMap.result.refnd.refundResnCn }"/>" readonly>
</div>
<input type = "hidden" name = "orderReInnb" value = "<c:out value = "${resultMap.result.refnd.orderRefundInnb}"/>"/>
<div class="bottomBtnControls">
<button class="btn lg full theme" type="button" onclick="fn_update_acnt_info();" >수정하기</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</c:when>
<c:otherwise>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">환불정보</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<div class="table-wrapper orderDetail__table">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>환불은행</th>
<td><c:out
value="${ resultMap.result.refnd.refundAcntBnnkNm }"/></td>
</tr>
<tr>
<th>예금주</th>
<td><c:out
value="${ resultMap.result.refnd.refundAcntDpstrNm }"/></td>
</tr>
<tr>
<th>계좌번호</th>
<td><c:out
value="${ resultMap.result.refnd.refundAcntnb }"/></td>
</tr>
<tr>
<th>환불사유내용</th>
<td><c:out
value="${ resultMap.result.refnd.refundResnCn }"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
<div class="sub-box">
<div class="orderDetailProduct">
<div class="orderDetailProduct__top" role="button" tabindex="0">
<span class="orderDetailProduct__top__title">환불 금액</span>
<span class="orderDetailProduct__top__chevron"></span>
</div>
<div class="orderDetail__content">
<div class="orderDetail__body">
<c:set var="reTotAmt" value="${ resultMap.result.totRefundDscntAmt }"/>
<div class="table-wrapper orderDetail__table orderDetail__table--price">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 40%">
<col style="width: 60%">
</colgroup>
<tbody>
<tr>
<th>총 상품금액</th>
<td>
<span class="orderDetail__table__productPrice">
<span class="comma"><c:out value="${ reTotAmt.refundAmtQySum }"/></span>원
</span>
</td>
</tr>
<tr>
<th>총 배송비</th>
<td><span class="comma"><c:out value="${ reTotAmt.rlDlvyAmt }"/></span>원</td>
</tr>
<tr>
<th>마일리지</th>
<td><span class="comma"><c:out value="${ reTotAmt.totRefundMlgAmt }"/></span>원</td>
</tr>
<tr>
<th>쿠폰</th>
<td><span class="comma"><c:out value="${ reTotAmt.totRefundCouponAmt }"/></span>원</td>
</tr>
<c:if test="${ reTotAmt.totReturnDlvyAmt > 0}">
<tr>
<th>환불배송비</th>
<td><span class="comma"><c:out value="${ reTotAmt.totReturnDlvyAmt }"/></span>원</td>
</tr>
</c:if>
<%-- <tr class="orderDetail__table__discountSub">--%>
<%-- <th><span>마일리지</span>--%>
<%-- </th>--%>
<%-- <td>-<c:out value="${ reTotAmt.totRefundMlgAmt }"/>원</td>--%>
<%-- </tr>--%>
<%-- <tr class="orderDetail__table__discountSub">--%>
<%-- <th><span>쿠폰</span></th>--%>
<%-- <td>-<c:out value="${ reTotAmt.totRefundCouponAmt }"/>원</td>--%>
<%-- </tr>--%>
<tr>
<th>총 차감금액</th>
<td>-<c:out value="${ reTotAmt.rlDlvyAmtRefundAmt }"/>원</td>
</tr>
<c:if test="${ reTotAmt.rlDlvyAmtRefundAmt > 0}">
<tr class="orderDetail__table__discountSub">
<th><span>반품배송비</span></th>
<td>-<c:out value="${ reTotAmt.rlDlvyAmtRefundAmt }"/>원</td>
</tr>
</c:if>
</tbody>
<tfoot class="orderDetail__table__sum">
<tr>
<th>총 환불금액</th>
<td>
<span class="comma"><c:out value="${ reTotAmt.rlRefundAmt }"/></span>원
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="fullBtnSection">
<button class="btn md outline full" type="button"
onclick="fn_order_refund_list();">
목록
</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>
<form id="listForm">
<input type="text" id="orderRefundInnb" name ="orderRefundInnb" value=""/>
<input type="hidden" id="pageIndex" name="pageIndex" value="${ paramVO.pageIndex }"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="${ paramVO.recordCountPerPage }"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${ paramVO.pageUnit }"/>
</form>
<!-- 푸터 -->
<jsp:include page="/WEB-INF/views/comm/mobile/Footer.jsp"/>
</div>
</div>
<div id = "modalDiv"></div>
<script>
// 주문상세내역 각 섹션 접기/펼치기
$('.orderDetailProduct__top').on('click', function (e) {
e.preventDefault();
var thisParent = $(this).closest('.orderDetailProduct');
var thisChevron = $(this).find('.orderDetailProduct__top__chevron');
if (thisParent.hasClass('closed')) {
thisParent.removeClass('closed');
thisChevron.removeClass('closed');
} else {
thisParent.addClass('closed');
thisChevron.addClass('closed');
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,324 @@
<%@ 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" %>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<%--
Class Name : RtngudCanclRefndListFromR.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 (){
const title = '반품/환불 내역';
fn_set_header_title(title);
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
fn_select_refund_list(1, pageUnit);
fn_start_display();
let rowCnt = '<c:out value="${ resultMap.resultList }"/>';
});
/******************************************************************
* 시작 화면 제어
******************************************************************/
const fn_start_display = function() {
/* 검색조건 > 날짜 구간 버튼 클릭 이벤트 */
$('.dateRange-btn').on('click', function() {
const date = $(this).attr('id');
$(this).closest('div').find('#dateRange').val(date);
if ('allDays' === date) {
$('#bgnDt, #endDt').val('');
return false;
}
fn_set_date('bgnDt', 'endDt', 'endDt', date);
});
/* 검색 버튼 클릭 이벤트 */
$('#btnSearch').on('click', function() {
fn_select_mlg_list(1);
});
}
/**********************************************************
* 반품/환불 목록 조회
* ********************************************************/
const fn_select_refund_list = function(pageIndex, pageUnit) {
const url = '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndInqire"/>';
let data;
$('#pageIndex').val(pageIndex);
if(!pageUnit) {
data = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
data = $('#listForm').serialize();
} else {
data = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (resultHtml) {
if ($('#pageDiv').html()) {
$('#pageDiv').empty();
}
$('#pageDiv').html(resultHtml);
$('#rowCnt').text(return_cnt());
fn_infinite_scroll(fn_add_refund_list, '', '#refundInfiniteListDiv');
}
});
}
/**********************************************************
* 인피니티 스크롤 반품/환불 내역 추가
* ********************************************************/
const fn_add_refund_list = function() {
const url = '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndScrolInqire"/>';
let pageIndex = parseInt($("#pageIndex").val(), 10);
$("#pageIndex").val(pageIndex+1);
let data = $('#listForm').serialize();
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (result) {
const resultList = result.resultList;
let list = '';
const cdnurl = '${cdnurl}';
if (resultList != null && resultList.length > 0) {
resultList.forEach(function (item) {
list += '<div class="sub-box">';
list += ' <div class="orderListItem">';
list += ' <div class="orderListItem__top">';
list += ' <span class="orderListItem__top__date">' + item.refundReqstDt;
list += ' <br><span class="misc">(주문번호 : ' + item.ordrInnb + ')</span>';
list += ' </span>';
list += ' <button type="button" className="orderListItem__top__more">상세보기</button>';
list += ' </div>';
list += ' <div class="orderListItem__body">';
list += ' <div class="orderListItem__image">';
list += ' <a href="">';
list += ' <img src="' + cdnurl + item.img + '" alt="상품 이미지">';
list += ' </a>';
list += ' </div>';
list += ' <div class="orderListItem__right">';
list += ' <div class="orderListItem__info">';
list += ' <p class="orderListItem__info__status">반품완료</p>';
list += ' <a href="" class="orderListItem__info__name">' + item.goodsNm + '</a>';
list += ' <p className="orderListItem__info__quantity">1개';
list += ' <span className="orderListItem__info__dot">·</span>';
list += ' <span className="comma">' + item.refundAmt + '</span>원';
list += ' </p>';
list += ' </div>';
list += ' </div>';
list += ' </div>';
list += ' </div>';
list += '</div>';
});
$('#refundInfiniteListDiv').before(list);
}
}
});
}
/**********************************************************
* 반품/환불 목록 상세 이동
* ********************************************************/
const fn_move_refund_dtl = function(orderReInnb, ordrInnb) {
$('#listForm').attr('action', '<c:url value="/sopmal/mpage/ordr/selectRtngudCanclRefndDtlInqire"/>');
$('#listForm').attr('method', 'get');
$('#orderReInnb').val(orderReInnb);
$('#ordrInnb').val(ordrInnb);
$('#listForm').submit();
}
/* ************************************************************
* 인피니티 스크롤 공통 처리
* callBackFnNm : 스크롤 밑으로 끝까지 내려갈 시 발생할 함수 이름
* callBackFnParam : 그 함수의 파라미터
* evtOccrrncAt : 끝까지 검색 후 이벤트 발생 방지 파라미터 => N이면 이벤트 발생 안함
*************************************************************
const fn_infinite_scroll = (callBackFnNm, callBackFnParam) => {
$(window).on('scroll', function () {
// 페이지의 전체 높이와 스크롤된 높이
var documentHeight = $(document).height();
var scrollTop = $(window).scrollTop();
var windowHeight = $(window).height();
// const evtOccrrncAt = $("#evtOccrrncAt").val()
if (scrollTop + windowHeight >= documentHeight) {
// if (evtOccrrncAt === 'Y') {
callBackFnNm(callBackFnParam);
// }
}
});
}
*/
</script>
<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="orderList">
<div class="listTop">
<span class="listTop__data">총
<em id="rowCnt">0</em>건
</span>
<button class="listTop__filterBtn" data-micromodal-trigger="couponInfoPop">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"
fill="none">
<g clip-path="url(#clip0_516_33716)">
<path d="M0.625 3.52566H10.1408C10.4276 4.83109 11.5934 5.81113 12.9837 5.81113C14.374 5.81113 15.5398 4.83113 15.8266 3.52566H19.375C19.7202 3.52566 20 3.24582 20 2.90066C20 2.55551 19.7202 2.27566 19.375 2.27566H15.8263C15.5389 0.970898 14.3716 -0.00976562 12.9837 -0.00976562C11.5951 -0.00976562 10.4283 0.970742 10.1411 2.27566H0.625C0.279844 2.27566 0 2.55551 0 2.90066C0 3.24582 0.279844 3.52566 0.625 3.52566ZM11.3233 2.9023C11.3233 2.90008 11.3234 2.89781 11.3234 2.89559C11.3261 1.98281 12.0709 1.24027 12.9837 1.24027C13.8952 1.24027 14.6401 1.9818 14.644 2.89414L14.6441 2.90332C14.6427 3.81766 13.8984 4.56117 12.9837 4.56117C12.0694 4.56117 11.3254 3.8184 11.3233 2.90461L11.3233 2.9023ZM19.375 16.4741H15.8263C15.5389 15.1694 14.3716 14.1887 12.9837 14.1887C11.5951 14.1887 10.4283 15.1693 10.1411 16.4741H0.625C0.279844 16.4741 0 16.7539 0 17.0991C0 17.4443 0.279844 17.7241 0.625 17.7241H10.1408C10.4276 19.0296 11.5934 20.0096 12.9837 20.0096C14.374 20.0096 15.5398 19.0296 15.8266 17.7241H19.375C19.7202 17.7241 20 17.4443 20 17.0991C20 16.7539 19.7202 16.4741 19.375 16.4741ZM12.9837 18.7596C12.0694 18.7596 11.3254 18.0168 11.3233 17.103L11.3233 17.1008C11.3233 17.0985 11.3234 17.0963 11.3234 17.0941C11.3261 16.1813 12.0709 15.4387 12.9837 15.4387C13.8952 15.4387 14.6401 16.1802 14.644 17.0925L14.6441 17.1017C14.6428 18.0162 13.8985 18.7596 12.9837 18.7596ZM19.375 9.37492H9.85918C9.57238 8.06949 8.4066 7.08949 7.01629 7.08949C5.62598 7.08949 4.4602 8.06949 4.1734 9.37492H0.625C0.279844 9.37492 0 9.65477 0 9.99992C0 10.3451 0.279844 10.6249 0.625 10.6249H4.17371C4.46109 11.9296 5.62844 12.9104 7.01629 12.9104C8.40488 12.9104 9.57172 11.9298 9.85895 10.6249H19.375C19.7202 10.6249 20 10.3451 20 9.99992C20 9.65477 19.7202 9.37492 19.375 9.37492ZM8.67668 9.99828C8.67668 10.0005 8.67664 10.0028 8.67664 10.005C8.67391 10.9178 7.9291 11.6603 7.01629 11.6603C6.10477 11.6603 5.35992 10.9188 5.35598 10.0065L5.35586 9.99734C5.35723 9.08289 6.10156 8.33949 7.01629 8.33949C7.93059 8.33949 8.67465 9.08223 8.67672 9.99605L8.67668 9.99828Z"
fill="black" />
</g>
<defs>
<clipPath id="clip0_516_33716">
<rect width="20" height="20" fill="white" />
</clipPath>
</defs>
</svg>
<span class="visually-hidden">검색 필터</span>
</button>
</div>
<div id="pageDiv">
</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>
<!-- 검색 필터 -->
<div class="microModal microBottomSheet" id="couponInfoPop" 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">
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content">
<form id="listForm">
<input type="hidden" id="orderReInnb" name="orderReInnb" value=""/>
<input type="hidden" id="ordrInnb" name="ordrInnb" value=""/>
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.paramVO.pageIndex} }"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="${ resultMap.paramVO.pageUnit} }"/>
<input type="hidden" id="evtOccrrncAt" name="evtOccrrncAt" value="Y"/>
<div class="dateSearch">
<div class="dateRange-btnContainer">
<input type="hidden" name="dateRange" id="dateRange" value="allDays">
<button type="button" class="dateRange-btn" id="7D">일주일</button>
<button type="button" class="dateRange-btn" id="1M">1개월</button>
<button type="button" class="dateRange-btn" id="3M">3개월</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
<div class="datepicker-container">
<input type="text" name="bgnDt" id="bgnDt" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="endDt" id="endDt" class="datepicker" title="종료 날짜 선택" autocomplete="off">
</div>
<div class="inputWithBtn">
<input type="text" class="input-text full" name="srchwrd" id="srchwrd" value="" placeholder="주문번호, 상품명 검색"/>
</div>
<button class="btn full lg theme" type="button" onclick="fn_select_refund_list(1);" >조회</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
// data-micromodal-trigger 속성을 가진 버튼을 클릭하면 해당 ID의 모달이 열림
// 모달 배경화면 스크롤 방지
MicroModal.init(
{
disableScroll: true,
awaitCloseAnimation: true,
});
</script>
</body>
</html>

View File

@@ -0,0 +1,95 @@
<%@ 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 : TrngudCanclRefndListR.jsp
Description :모바일_반품/환불 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<script>
$(document).ready(function (){
});
function return_cnt() {
let listCnt = '<c:out value="${ fn:length(resultMap.resultList) }"/>';
return listCnt
}
</script>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<div class="sub-box">
<div class="orderListItem">
<div class="orderListItem__top">
<span class="orderListItem__top__date"><c:out value="${ list.refundReqstDt }"/><br><span class="misc">주문번호 : <c:out value="${ list.ordrInnb }"/></span>
</span>
<button type="button" class="orderListItem__top__more" onclick="fn_move_refund_dtl('<c:out value="${ list.orderRefundInnb }"/>', '<c:out value="${ list.ordrInnb }"/>');">상세보기</button>
</div>
<div class="orderListItem__body">
<div class="orderListItem__image">
<button type="button">
<img src="${ cdnurl }${ list.img }" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ list.goodsNm }">
</button>
</div>
<div class="orderListItem__right">
<div class="orderListItem__info">
<p class="orderListItem__info__status">
<c:choose>
<c:when test="${ not empty list.returnProcsSttusCd }">
<c:out value="${ list.returnProcsSttusCdNm }"/>
</c:when>
<c:otherwise>
<c:out value="${ list.refundProcsSttusCdNm }"/>
</c:otherwise>
</c:choose>
</p>
<button type="button" class="orderListItem__info__name"><c:out value="${ list.goodsNm }"/></button>
<p class="orderListItem__info__quantity">1개
<span class="orderListItem__info__dot">·</span>
<span class="comma"><c:out value="${ list.refundAmt }"/></span>원
</p>
</div>
</div>
</div>
<%--
<div class="orderListItem__btnControls">
<a href="" class="btn outline">문의</a>
</div>
--%>
</div>
</div>
</c:forEach>
<div id="refundInfiniteListDiv">
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">반품/환불 내역이 없습니다.</p>
</div>
</c:otherwise>
</c:choose>

View File

@@ -0,0 +1,124 @@
<%@ 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 : WslistInqireR.jsp
Description :모바일_위시리스트 내역.jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-02 추지훈 최초 생성
--%>
<script>
$(document).ready(function (){
//해당 클래스를 가진 요소 3자리 마다 콤마
$(".comma").each(function () {
var text = $(this).text();
$(this).text(text.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, "$1,"));
});
});
</script>
<style>
.cartItem__beforePrice {
display: block;
font-size: 13px;
color: #979b9d;
text-decoration: line-through;
margin-top: -18px;
letter-spacing: -0.03em;
font-size: 14px;
margin-top: 1px;
}
</style>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<div class="sub-box">
<div class="cartItem">
<input type="hidden" name="wslistInnb" value="${ list.wslistInnb }"/>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input class="cartCheck" type="checkbox" value="" onclick="fn_ctr_pCheckbox('#cartCheckAll', '.cartCheck');">
<span class="check"></span>
<span class="control-label"></span>
</label>
</div>
<div class="cartItem__image">
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?sopmalCd=${list.sopmalCd}&goodsInnb=${list.goodsInnb}"/>">
<img src="${cdnurl}${ list.img }" onerror="this.src='/pc/images/image_placeholder.png'" alt="<c:out value="${ list.goodsNm }"/>">
</a>
</div>
<div class="cartItem__productInfo">
<a href="<c:url value="/sopmal/goods/selectGoodsDtl?sopmalCd=${list.sopmalCd}&goodsInnb=${list.goodsInnb}"/>" class="cartItem__productTitle">
<c:out value="${ list.goodsNm }"/>
</a>
<span class="cartItem__beforePrice"><span
class="comma"><fmt:parseNumber value="${ list.cnsmrpric }"/></span> 원</span>
<span class="cartItem__productPrice"><span class="comma"><fmt:parseNumber value="${ list.slepric }"/></span><span
class="priceUnit">원</span></span>
</div>
<%--<button class="btn sm outline" data-micromodal-trigger="product-option-sheet">옵션변경</button>--%>
<c:choose>
<c:when test="${list.goodsSttusCd eq '01'}">
<button class="btn theme md sm" type="button" onclick="fn_open_option_select_modal('goodsOptionDiv', 'option-change-popUp', JSON.stringify({'goodsInnb':${list.goodsInnb}}));">담기</button>
</c:when>
<c:otherwise>
<button class="btn theme md sm" type="button" disabled >${list.goodsSttusNm}</button>
</c:otherwise>
</c:choose>
<%-- <button class="btn theme md sm" type="button" data-micromodal-trigger="product-option-sheet" >장바구니 담기</button>--%>
</div>
<%--
<div class="cartItem__miscControls">
<div class="product-count__amount-counter">
<button class="product-count__amount-btn minus"><span
class="visually-hidden">감소</span></button>
<span class="product-count__amount-number">1</span>
<button class="product-count__amount-btn plus"><span
class="visually-hidden">추가</span></button>
</div>
<button class="btn sm outline" data-micromodal-trigger="product-option-sheet">옵션변경</button>
</div>
--%>
</div>
</c:forEach>
<div id="wishInfiniteDiv">
</div>
</c:when>
<c:otherwise>
<div class="noResult">
<div class="noResult__image">
<img src="/pc/images/icon__no-result.png" alt="상품 이미지">
</div>
<p class="noResult__text">위시리스트가 존재하지 않습니다.</p>
</div>
</c:otherwise>
</c:choose>

File diff suppressed because it is too large Load Diff