초기소스
This commit is contained in:
@@ -0,0 +1,478 @@
|
||||
<%@ 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 : RelateGoodsPopupR.jsp
|
||||
Description : 장바구니 선택 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-07-23 유재현 최초 생성
|
||||
--%>
|
||||
<script defer>
|
||||
//상품 타이틀, 수량, 가격 저장하는 배열
|
||||
// 배열 순서 -> [상품명, 수량, 1개당 가격, 상품 총가격(=수량x개당가격), 추가정보(색상, 사이즈등)]
|
||||
// $(document).ready(function () {
|
||||
fn_set_niceSelect_datePicker('.select-box-addCart')
|
||||
// });
|
||||
//
|
||||
// /*************************************************************
|
||||
// 함께하면 좋은상품 이벤트 (모달)
|
||||
// **************************************************************/
|
||||
//
|
||||
|
||||
|
||||
$('#addCart-product-popUp').on('modal:open', function (event, modal) {
|
||||
//
|
||||
// $('.select-box-addCart').niceSelect();
|
||||
//
|
||||
// // false로 설정시 라디오만 선택해도 상품 추가 가능
|
||||
//
|
||||
// //일반옵션
|
||||
// // 라디오 버튼 클릭시, 상품 정보 배열에 추가 및 화면에 추가
|
||||
$(".modal .productDetailInfo__option__item").each(function () {
|
||||
$(this).find("input[type=radio]").on("change", function () { // 라디오 버튼 클릭 시
|
||||
if ($(this).prop('checked') == false) return; // 체크 해제시 리턴
|
||||
const $title = $(this).closest(".productDetailInfo__option__item").find("label").text();
|
||||
const $price = $(this).closest(".productDetailInfo__option__item").find(".productDetailInfo__option__price").text();
|
||||
const $goodsOptnInnb = $(this).closest(".productDetailInfo__option__item").find('input[name="goodsOptnInnb"]').val()
|
||||
const $goodsOptnTy = $(this).closest(".productDetailInfo__option__item").find('input[name="goodsOptnTy"]').val()
|
||||
const $optnInfo = $(this).closest(".productDetailInfo__option__item").find('.productDetailInfo__option__monthly-payment').text();
|
||||
|
||||
const $priceNum = parseInt($price.replace(/,/g, ""));
|
||||
|
||||
//이미 추가된 상품인지 확인
|
||||
var isItemAlreadyAdded = productArr.some(function (item) {
|
||||
return item[4] === $goodsOptnInnb;
|
||||
});
|
||||
if (isItemAlreadyAdded){
|
||||
fn_goods_duplicate_select_modal()
|
||||
return;
|
||||
}
|
||||
|
||||
productArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy]); // 배열에 상품 정보 추가
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">'+$optnInfo+'</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $price +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
});
|
||||
});
|
||||
|
||||
// 총 상품금액
|
||||
var $cartTotalPrice = $(".modal .product-total__price__totalPriceNum");
|
||||
|
||||
// 수량 "-", "+" 버튼 클릭 시, 수량 증감 및 가격 변경 및 총 상품금액 변경
|
||||
$("#cartCountContainer").on("click", ".productDetailInfo__count__amountBtn", function () { // 수량 버튼 클릭 시
|
||||
var $counter = $(this);
|
||||
var $index = $counter.closest(".productDetailInfo__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]; // 배열에서 해당 상품의 총 가격 변경
|
||||
}
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
})
|
||||
//
|
||||
// //배열 내용을 바탕으로 각 아이템 텍스트 변경
|
||||
function updateCartCounters() {
|
||||
$(".modal .productDetailInfo__count").each(function () {
|
||||
var $counter = $(this);
|
||||
var $index = $counter.index();
|
||||
var $number = $counter.find(".productDetailInfo__count__amountNumber");
|
||||
var $price = $counter.find(".productDetailInfo__count__priceNum");
|
||||
$number.text(productArr[$index][1]);
|
||||
$price.text(addComma(productArr[$index][3]) + "원");
|
||||
});
|
||||
updateCartTotalPrice(); // 총 상품금액 업데이트
|
||||
}
|
||||
|
||||
// 3자리마다 "," 추가
|
||||
function addComma(num) {
|
||||
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
// 총 상품금액 업데이트
|
||||
function updateCartTotalPrice() {
|
||||
var totalPrice = 0; // 총 상품금액
|
||||
for (var i = 0; i < productArr.length; i++) {
|
||||
totalPrice += productArr[i][3]; // 배열의 총 가격을 더함
|
||||
}
|
||||
$cartTotalPrice.text(addComma(totalPrice)); // 총 상품금액 텍스트 변경
|
||||
}
|
||||
|
||||
// x버튼 클릭 시 삭제
|
||||
$("#cartCountContainer").on("click", ".productDetailInfo__count__amountDelete", function () { // x 버튼 클릭 시
|
||||
var $index = $(this).closest(".productDetailInfo__count").index();
|
||||
productArr.splice($index, 1); // 배열에서 해당 상품 삭제
|
||||
$(this).closest(".productDetailInfo__count").remove(); // 화면에서 해당 상품 삭제
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
|
||||
//일반옵션이 하나일 경우 라디오 체크 해제(품절상품 제외) || 필수옵션 01이 상품 배열에 하나도 없을 경우
|
||||
if($('#productDetail .custom-radio:not(:has(span))').length ===1
|
||||
|| productArr.filter(item => item[5] === '01').length === 0){
|
||||
$("input[name='r-group01']").prop('checked', false)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// // // 마지막으로 생성된 상품에 각인 정보 추가
|
||||
// // $('#cartAddTextBtn').on('click', function () {
|
||||
// // var $index = $(".modal .productDetailInfo__count").length - 1;
|
||||
// // var $text = $('#cartAddTextInput').val();
|
||||
// // $(".modal .productDetailInfo__count").eq($index).find(".productDetailInfo__count__amountTop").append('<div class="productDetailInfo__count__additionalSelect">각인문구 : ' + $text + '</div>');
|
||||
// //
|
||||
// // });
|
||||
//
|
||||
|
||||
//재고옵션
|
||||
$('#cartAdditionalSelect').on("change", "select", function () { // 셀렉트 선택 시
|
||||
if ($('#cartAdditionalSelect').find('.option.selected.disabled').length > 0) return;
|
||||
if ($('#cartAdditionalSelect').find('.option.selected').length == $('#cartAdditionalSelect').find('.nice-select').length) { // 모든 셀렉트가 선택되면
|
||||
|
||||
var $title = $('#addCartGoodsNm').val();
|
||||
var $optInfo = $(this).closest(".productDetailInfo__additionalSelect__item").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 < $('#cartAdditionalSelect').find('.nice-select').length; i++) {
|
||||
arr.push($('#cartAdditionalSelect').find('.nice-select').eq(i).find('.option.selected').text());
|
||||
}
|
||||
//이미 추가된 상품인지 확인
|
||||
var isItemAlreadyAdded = productArr.some(function (item) {
|
||||
return item[4] === $goodsOptnInnb;
|
||||
});
|
||||
if (isItemAlreadyAdded) {
|
||||
fn_goods_duplicate_select_modal()
|
||||
return;
|
||||
}
|
||||
productArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy, arr]); // 배열에 상품 정보 추가
|
||||
let cartAdditionalSelectText = '옵션 : ' + arr.join(' / ').replace(/\(\+.*?\)/g, ''); // 추가정보 텍스트로 변환
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<div class="productDetailInfo__count__additionalSelect">' + cartAdditionalSelectText + '</div>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">' + $goodsOptnInfo + '</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $priceNum +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
});
|
||||
|
||||
// 추가구성옵션
|
||||
$("#cartMoreItemsSelect").on("change",'select', function () {
|
||||
var $moreItems = $('#cartMoreItemsSelect').find(".productDetailInfo__additionalSelect__item");
|
||||
const $optInfoOptn3 = $(this).closest(".productDetailInfo__additionalSelect__item").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(".productDetailInfo__additionalSelect__item").find('input[name="productDetailInfo__additionalSelect__otpnEssntlAt__relate__added"]').val();
|
||||
|
||||
// $moreItems.each(function () {
|
||||
// if ($(this).find('.option.selected.disabled').length > 0) return;
|
||||
var $title = $moreItems.find(".option.selected").text().replace(' ','').trim().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]); // 배열에 상품 정보 추가
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">'+$goodsOptnInfoOptn3+'</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $priceNum +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
$(this).val('').niceSelect('update')
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
// });
|
||||
});
|
||||
});
|
||||
// })
|
||||
|
||||
|
||||
// })
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<div id="addCart-product-popUp" class="modal option">
|
||||
<div class="option-header">
|
||||
<div class="option-header__title">옵션 선택</div>
|
||||
<input type="hidden" id="addCartGoodsInnb" value="${addCartResultMap.goodsDtl.goodsInnb}"/>
|
||||
<input type="hidden" id="sopmalCd" value="${addCartResultMap.goodsDtl.sopmalCd}"/>
|
||||
<input type="hidden" id="addCartGoodsNm" value="${addCartResultMap.goodsDtl.goodsNm}"/>
|
||||
<input type="hidden" id="slepricDscntAmt" value="${addCartResultMap.goodsDtl.slepric }"/>
|
||||
<c:forEach var="cardDv" items="${addCartResultMap.cartDvList}">
|
||||
<input type="hidden" value="${cardDv.cd}" id="cartDv-${cardDv.cdNm}"/>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="option-content">
|
||||
<div class="product-unit product-unit--relatedProduct">
|
||||
<div class="product-unit-image">
|
||||
<a href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${addCartResultMap.goodsDtl.goodsInnb}"/>');">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<img src="<c:out value="${cdnurl}${fn:split(addCartResultMap.goodsDtl.img, '|')[0]}"/> " onerror="this.src='/pc/images/image_placeholder.png'" alt="상품 이미지">
|
||||
</a>
|
||||
</div>
|
||||
<div class="product-unit-info">
|
||||
<div class="product-unit-info__inner">
|
||||
<div class="product-unit-title">
|
||||
<a href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${addCartResultMap.goodsDtl.goodsInnb}"/>');"><c:out value="${addCartResultMap.goodsDtl.goodsNm}"/></a>
|
||||
</div>
|
||||
<div class="product-unit-price">
|
||||
<div class="product-unit-price__price">
|
||||
<span class="product-unit-price__original">
|
||||
<span class="comma">
|
||||
<fmt:formatNumber value="${addCartResultMap.goodsDtl.cnsmrpric}"/></span>
|
||||
<span class="priceUnit"></span>
|
||||
</span>
|
||||
<span class="product-unit-price__current">
|
||||
<span class="comma"> <fmt:formatNumber value="${addCartResultMap.goodsDtl.dcSlepric}"/></span>
|
||||
<span class="priceUnit">원</span></span>
|
||||
</div>
|
||||
<div class="product-unit-price__sale">
|
||||
<span class="percent">
|
||||
<c:out value="${addCartResultMap.goodsDtl.dcPercent}"/>
|
||||
%
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${addCartResultMap.goodsDtl.goodsSttusCd ne '02' or addCartResultMap.goodsDtl.goodsSttusCd ne '03'}">
|
||||
<c:choose>
|
||||
<c:when test="${not empty addCartResultMap.optnList}">
|
||||
<c:if test="${not empty addCartResultMap.optnList.normalOptnList}">
|
||||
<div class="productDetailInfo__option">
|
||||
<div class="productDetailInfo__option__box">
|
||||
<c:forEach var="goodsOpt01" items="${addCartResultMap.optnList.normalOptnList}" varStatus="optList01">
|
||||
<c:if test="${goodsOpt01.optnExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt01.invntrySldoutExpsrAt eq 'Y'}">
|
||||
<div class="productDetailInfo__option__item">
|
||||
<c:if test="${not empty goodsOpt01.optnVal1}">
|
||||
<div class="custom-radio is-medium">
|
||||
<input type="radio" id="r-${goodsOpt01.optnOrdr}" value="${goodsOpt01.optnVal1}" 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="productDetailInfo__option__right">
|
||||
<span class="productDetailInfo__option__price"><span class="comma"><fmt:formatNumber value="${goodsOpt01.slepric}"/></span> <span class="priceUnit"> 원</span></span>
|
||||
<span class="productDetailInfo__option__monthly-payment"><c:out value="${goodsOpt01.optnInfo}"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${not empty addCartResultMap.optnList.invntryOptnList}">
|
||||
<div class="productDetailInfo__additionalSelect" id="cartAdditionalSelect">
|
||||
<span class="productDetailInfo__option__title">옵션선택(필수)</span>
|
||||
<div class="productDetailInfo__additionalSelect__inner">
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty addCartResultMap.optnList.invntryOptnList[0].optnNm1}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${addCartResultMap.optnList.invntryOptnList[0].optnNm1}"/> </span>
|
||||
<div class="select-box-addCart">
|
||||
<select id="selectAddCartInvntryOptn1" name="selectAddCartInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
<c:forEach var="goodsOpt02" items="${addCartResultMap.optnList.invntryOptnList}" varStatus="optList02">
|
||||
<c:if test="${goodsOpt02.optnExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt02.invntrySldoutExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt02.optnVal1 ne addCartResultMap.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>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty addCartResultMap.optnList.invntryOptnList[0].optnNm2}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${addCartResultMap.optnList.invntryOptnList[0].optnNm2}"/> </span>
|
||||
<div class="select-box-addCart">
|
||||
<select id="selectAddCartInvntryOptn2" name="selectAddCartInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty addCartResultMap.optnList.invntryOptnList[0].optnNm3}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${addCartResultMap.optnList.invntryOptnList[0].optnNm3}"/> </span>
|
||||
<div class="select-box-addCart">
|
||||
<select id="selectAddCartInvntryOptn3" name="selectAddCartInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty addCartResultMap.optnList.invntryOptnList[0].optnNm4}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${addCartResultMap.optnList.invntryOptnList[0].optnNm4}"/> </span>
|
||||
<div class="select-box-addCart">
|
||||
<select id="selectAddCartInvntryOptn4" name="selectAddCartInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${not empty addCartResultMap.optnList.addedOptnList}">
|
||||
<div class="productDetailInfo__additionalSelect" id="cartMoreItemsSelect">
|
||||
<span class="productDetailInfo__additionalSelect__title">추가구성</span>
|
||||
<div class="productDetailInfo__additionalSelect__inner">
|
||||
<c:forEach var="goodsOpt03" items="${addCartResultMap.optnList.addedOptnList}" varStatus="optList03">
|
||||
<c:if test="${not empty goodsOpt03.optnNm1}">
|
||||
<c:if test="${addCartResultMap.optnList.addedOptnList[optList03.index-1].optnNm1 ne goodsOpt03.optnNm1}">
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${goodsOpt03.optnNm1}"/> </span>
|
||||
<input type="hidden" name="productDetailInfo__additionalSelect__otpnEssntlAt__relate__added" <c:if test="${goodsOpt03.optnEssntlAt eq 'Y'}"> value="Y"</c:if>/>
|
||||
</c:if>
|
||||
<c:if test="${addCartResultMap.optnList.addedOptnList[optList03.index-1].optnNm1 ne goodsOpt03.optnNm1}">
|
||||
<div class="select-box-addCart">
|
||||
<select title="${goodsOpt03.OptnInfo}" name="selectRelateAddedOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
<c:forEach var="goodsOptVal03" items="${addCartResultMap.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>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<%-- <div class="productDetailInfo__confirmOption">--%>
|
||||
<%-- <button class="btn md outline" id="cartMoreItemsButton">입력한 정보 선택</button>--%>
|
||||
<%-- </div>--%>
|
||||
<%--TODO :: 입력옵션 --%>
|
||||
|
||||
<%-- <div class="productDetailInfo__option">--%>
|
||||
<%-- <span class="productDetailInfo__option__title">상품정보 입력</span>--%>
|
||||
<%-- <div class="productDetailInfo__additionalSelect__inner">--%>
|
||||
<%-- <div class="productDetailInfo__additionalSelect__item">--%>
|
||||
<%-- <span class="productDetailInfo__additionalSelect__category">각인 옵션</span>--%>
|
||||
<%-- <input id="cartAddTextInput" class="input-text full" type="text" title="해당 인풋에 대한 설명"--%>
|
||||
<%-- placeholder="각인 문구를 입력해주세요" value="">--%>
|
||||
<%-- <button id="cartAddTextBtn" class="btn outline">저장</button>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<div id="cartCountContainer">
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<%--옵션 없을 경우 빈값--%>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
<div class="product-total__container">
|
||||
<span class="product-total__text">총 상품금액</span>
|
||||
<span class="product-total__price">
|
||||
<span class="product-total__price__totalPriceNum">0</span>
|
||||
<span class="won">원</span>
|
||||
</span>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${addCartResultMap.goodsDtl.buttonRplcWordsUseAt ne 'Y'}">
|
||||
<div class="product-btn-container">
|
||||
<button type="button" class="btn theme large addCart">장바구니 담기</button>
|
||||
<button type="button" class="btn theme large purchsOrdr">구매하기</button>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="product-btn-container">
|
||||
<a href="${addCartResultMap.goodsDtl.pcButtonRplcLink}"
|
||||
<c:if test="${addCartResultMap.goodsDtl.buttonRplcLinkBrwsrDvCd eq '01'}"> target="_blank" </c:if> >
|
||||
<button class="btn theme large"><c:out value="${addCartResultMap.goodsDtl.buttonRplcWords}"/></button>
|
||||
</a>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
4829
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsDtlR.jsp
Normal file
4829
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsDtlR.jsp
Normal file
File diff suppressed because it is too large
Load Diff
168
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsListR.jsp
Normal file
168
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsListR.jsp
Normal file
@@ -0,0 +1,168 @@
|
||||
<%@ 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 : GoodsListR.jsp
|
||||
Description : 상품 목록 리스트
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 리브가
|
||||
--%>
|
||||
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out
|
||||
value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<div class="subList__content">
|
||||
<div class="product-list-type1">
|
||||
<div class="product-list-type1__list">
|
||||
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
|
||||
<div class="product-unit">
|
||||
<div class="product-unit-image">
|
||||
<c:if test="${(list.evtTmeExpsrAt eq 'Y' and list.remainTime ne 'N')
|
||||
or (list.rltmQyBannerExpsrAt eq 'Y' and list.remainQy > 0) }">
|
||||
<div class="time-sale__top">
|
||||
<c:if test="${list.evtTmeExpsrAt eq 'Y' and list.remainTime ne 'N'}">
|
||||
<span class="time" id="remainTime${status.index}" name="remainTime"><c:out
|
||||
value="${list.remainTime}"/> </span>
|
||||
<input type="hidden" id="evtTmeExpsrAt${status.index}" name="evtTmeExpsrAt"
|
||||
value="${list.evtTmeExpsrAt}">
|
||||
</c:if>
|
||||
<c:if test="${list.rltmQyBannerExpsrAt eq 'Y' and list.remainQy > 0 }">
|
||||
<span class="left">남은수량 <fmt:formatNumber value="${list.remainQy}"/> 개</span>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
<%-- 상품 상태에 따른 분기--%>
|
||||
<c:choose>
|
||||
<c:when test="${list.goodsSttusCd eq '02'}">
|
||||
<div class="sold-out">
|
||||
<span>SOLD OUT</span>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:when test="${list.goodsSttusCd eq '03'}">
|
||||
<div class="sold-out">
|
||||
<span>${list.goodsSttusNm}</span>
|
||||
</div>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
<form id="detailForm">
|
||||
<a class="product-detail" href="javascript:void(0);"
|
||||
onclick="fn_move_goods_dtl('<c:out value="${list.goodsInnb}"/>'); ">
|
||||
<spring:eval
|
||||
expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')"
|
||||
var="cdnurl"/>
|
||||
<img src="<c:out value="${cdnurl}${list.goodsImgCours}"/>"
|
||||
onerror="this.src='/pc/images/image_placeholder.png'"
|
||||
alt="${list.goodsNm}"/>
|
||||
</a>
|
||||
</form>
|
||||
<c:if test="${not empty list.pricRplcWordsUseAt and list.pricRplcWordsUseAt ne 'Y'}">
|
||||
<button type="button" class="product-unit-addToCart" onclick="fn_open_addCart_modal
|
||||
('#addGoodsCartDiv', '#addCart-product-popUp', '/sopmal/goods/selectAddCartGoodsPopup',
|
||||
JSON.stringify({'goodsInnb' : `${list.goodsInnb}`}))">
|
||||
<i class="icon icon_product-unit-addToCart"></i>
|
||||
<span class="visually-hidden">장바구니에 담기</span>
|
||||
</button>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="product-unit-info d-flex flex-column" style="flex-direction:column">
|
||||
<c:if test="${not empty list.iconCdNmList}">
|
||||
<c:if test="${list.iconExpsrAt eq 'Y'}">
|
||||
<div class="product-badge-container col order-${list.iconExpsrOrdr-1}" style="order: ${list.iconExpsrOrdr-1} ">
|
||||
<c:forEach items="${fn:split(list.iconCdNmList, ',')}" var="iconCdNm" varStatus="iconStatus">
|
||||
<c:choose>
|
||||
<c:when test="${fn:contains(iconCdNm, '-')}">
|
||||
<span class="product-badge ${fn:toLowerCase(iconCdNm)}">${fn:replace(fn:toUpperCase(iconCdNm), '-', ' ')}</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="product-badge ${fn:toLowerCase(iconCdNm)}">${fn:toUpperCase(iconCdNm)}</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
<%-- <div class="product-unit-info__inner">--%>
|
||||
<c:if test="${list.goodsNmExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-title col order-${list.goodsNmExpsrOrdr-1}" style="order:${list.goodsNmExpsrOrdr-1} ">
|
||||
<a href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${list.goodsInnb}"/>');"><c:out value="${list.goodsNm}"/></a>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${list.pricExpsrAt eq 'Y'}">
|
||||
<c:choose>
|
||||
<c:when test="${not empty list.pricRplcWordsUseAt and list.pricRplcWordsUseAt ne 'Y'}">
|
||||
<div class="product-unit-price col order-${list.pricExpsrOrdr-1}" style="order: ${list.pricExpsrOrdr-1}">
|
||||
<div class="product-unit-price__price">
|
||||
<span class="product-unit-price__original"><fmt:formatNumber
|
||||
value="${list.cnsmrpric}"/> 원</span>
|
||||
<span class="product-unit-price__current"><fmt:formatNumber
|
||||
value="${list.slepric}"/> 원</span>
|
||||
</div>
|
||||
<div class="product-unit-price__sale">
|
||||
<span class="percent"> <c:out value="${list.slePercent}"/> %</span>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="productDetailInfo__price">
|
||||
<a href="${list.pcPricRplcLink}" <c:if test="${list.pricRplcLinkBrwsrDvCd eq'01'}"> target="_blank" </c:if> >
|
||||
<span class="" style="font-size: 1rem;"> <c:out value="${list.pricRplcWords}"/></span>
|
||||
</a>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
<c:if test="${list.reprsntDcExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-price__monthly-payment col order-${list.reprsntDcExpsrOrdr-1}" style="order: ${list.reprsntDcExpsrOrdr-1}"><c:out value="${list.reprsntDc}"/></div>
|
||||
</c:if>
|
||||
<c:if test="${list.rvwEvlScreExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-rating col order-${list.rvwEvlScreExpsrOrdr-1}" style="order: ${list.rvwEvlScreExpsrOrdr-1}">
|
||||
<i class="icon icon_rating-star"></i>
|
||||
<span class="product-unit-rating__score"><c:out value="${list.avgEvlScore}" default="0.0"/> </span>
|
||||
<span class="product-unit-rating__count">(<fmt:formatNumber value="${list.cntEvlScor}" />) </span>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${list.dlvyExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-price__monthly-payment col order-${list.dlvyExpsrOrdr-1}" style="order: ${list.dlvyExpsrOrdr-1}"><c:out value="${list.dlvyGroupNm}"/></div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="subList__content">
|
||||
<div class="subList__no-result">
|
||||
<img src="/pc/images/icon__no-result.png" alt="">
|
||||
<p class="subList__no-result-text">
|
||||
등록된 상품이 없습니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<%--장바구니 목록과 선택한 상품 중복 모달 --%>
|
||||
<div id="modal-error-confirm-add-cart-duplicate-div"></div>
|
||||
<%--장바구니 버튼 선택 모달--%>
|
||||
<div id="addGoodsCartDiv"></div>
|
||||
<%--장바구니 담기 후 모달--%>
|
||||
<div id="addCartDiv"></div>
|
||||
<%--상품 중복선택 모달--%>
|
||||
<div id="goodsDuplicateDiv"></div>
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
<%--<script src="/admin/js/script.js" defer></script>--%>
|
||||
1071
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsListRForm.jsp
Normal file
1071
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsListRForm.jsp
Normal file
File diff suppressed because it is too large
Load Diff
197
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsSrchR.jsp
Normal file
197
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsSrchR.jsp
Normal 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 : GoodsSrchR.jsp
|
||||
Description : 상품 검색 리스트
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 리브가
|
||||
--%>
|
||||
<div class="left">
|
||||
<div class="search-number">
|
||||
<span class="search-number__text">총 <strong><c:out
|
||||
value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
|
||||
</div>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.list }">
|
||||
<div class="subList__content">
|
||||
<div class="product-list-type1">
|
||||
<div class="product-list-type1__list">
|
||||
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
|
||||
<div class="product-unit">
|
||||
<div class="product-unit-image">
|
||||
<c:if test="${(list.evtTmeExpsrAt eq 'Y' and list.remainTime ne 'N')
|
||||
or (list.rltmQyBannerExpsrAt eq 'Y' and list.remainQy > 0) }">
|
||||
<div class="time-sale__top">
|
||||
<c:if test="${list.evtTmeExpsrAt eq 'Y' and list.remainTime ne 'N'}">
|
||||
<span class="time" id="remainTime${status.index}" name="remainTime"><c:out value="${list.remainTime}"/> </span>
|
||||
<input type="hidden" id="evtTmeExpsrAt${status.index}" name="evtTmeExpsrAt" value="${list.evtTmeExpsrAt}">
|
||||
</c:if>
|
||||
<c:if test="${list.rltmQyBannerExpsrAt eq 'Y' and list.remainQy > 0 }">
|
||||
<span class="left">남은수량 <fmt:formatNumber value="${list.remainQy}"/> 개</span>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
<%-- 상품 상태에 따른 분기--%>
|
||||
<c:choose>
|
||||
<c:when test="${list.goodsSttusCd eq '02'}">
|
||||
<div class="sold-out">
|
||||
<span>SOLD OUT</span>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:when test="${list.goodsSttusCd eq '03'}">
|
||||
<div class="sold-out">
|
||||
<span>${list.goodsSttusNm}</span>
|
||||
</div>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
<form id="detailForm">
|
||||
<a class="product-detail" href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${list.goodsInnb}"/>'); ">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<img src="<c:out value="${cdnurl}${list.goodsImgCours}"/>"
|
||||
onerror="this.src='/pc/images/image_placeholder.png'"
|
||||
alt="${list.goodsNm}"/>
|
||||
</a>
|
||||
</form>
|
||||
<c:if test="${not empty list.pricRplcWordsUseAt and list.pricRplcWordsUseAt ne 'Y'}">
|
||||
<button type="button" class="product-unit-addToCart" onclick="fn_open_addCart_modal
|
||||
('#addGoodsCartDiv', '#addCart-product-popUp', '/sopmal/goods/selectAddCartGoodsPopup',
|
||||
JSON.stringify({'goodsInnb' : `${list.goodsInnb}`}))">
|
||||
<i class="icon icon_product-unit-addToCart"></i>
|
||||
<span class="visually-hidden">장바구니에 담기</span>
|
||||
</button>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="product-unit-info d-flex flex-column" style="flex-direction:column">
|
||||
<c:if test="${not empty list.iconCdNmList}">
|
||||
<c:if test="${list.iconExpsrAt eq 'Y'}">
|
||||
<div class="product-badge-container col order-${list.iconExpsrOrdr-1}" style="order: ${list.iconExpsrOrdr-1} ">
|
||||
<c:forEach items="${fn:split(list.iconCdNmList, ',')}" var="iconCdNm" varStatus="iconStatus">
|
||||
<c:choose>
|
||||
<c:when test="${fn:contains(iconCdNm, '-')}">
|
||||
<span class="product-badge ${fn:toLowerCase(iconCdNm)}">${fn:replace(fn:toUpperCase(iconCdNm), '-', ' ')}</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="product-badge ${fn:toLowerCase(iconCdNm)}">${fn:toUpperCase(iconCdNm)}</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
<%-- <div class="product-unit-info__inner">--%>
|
||||
<c:if test="${list.goodsNmExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-title col order-${list.goodsNmExpsrOrdr-1}" style="order:${list.goodsNmExpsrOrdr-1} ">
|
||||
<a href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${list.goodsInnb}"/>');"><c:out value="${list.goodsNm}"/></a>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${list.pricExpsrAt eq 'Y'}">
|
||||
<c:choose>
|
||||
<c:when test="${not empty list.pricRplcWordsUseAt and list.pricRplcWordsUseAt ne 'Y'}">
|
||||
<div class="product-unit-price col order-${list.pricExpsrOrdr-1}" style="order: ${list.pricExpsrOrdr-1}">
|
||||
<div class="product-unit-price__price">
|
||||
<span class="product-unit-price__original"><fmt:formatNumber
|
||||
value="${list.cnsmrpric}"/> 원</span>
|
||||
<span class="product-unit-price__current"><fmt:formatNumber
|
||||
value="${list.slepric}"/> 원</span>
|
||||
</div>
|
||||
<div class="product-unit-price__sale">
|
||||
<span class="percent"> <c:out value="${list.slePercent}"/> %</span>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="productDetailInfo__price">
|
||||
<a href="${list.pcPricRplcLink}" <c:if test="${list.pricRplcLinkBrwsrDvCd eq'01'}"> target="_blank" </c:if> >
|
||||
<span> <c:out value="${list.pricRplcWords}"/></span>
|
||||
</a>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
<c:if test="${list.reprsntDcExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-price__monthly-payment col order-${list.reprsntDcExpsrOrdr-1}" style="order: ${list.reprsntDcExpsrOrdr-1}"><c:out value="${list.reprsntDc}" /> </div>
|
||||
</c:if>
|
||||
<c:if test="${list.rvwEvlScreExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-rating col order-${list.rvwEvlScreExpsrOrdr-1}" style="order: ${list.rvwEvlScreExpsrOrdr-1}">
|
||||
<i class="icon icon_rating-star"></i>
|
||||
<span class="product-unit-rating__score"><c:out value="${list.avgEvlScore}" default="0.0"/> </span>
|
||||
<span class="product-unit-rating__count">(<fmt:formatNumber value="${list.cntEvlScor}"/>) </span>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${list.dlvyExpsrAt eq 'Y'}">
|
||||
<div class="product-unit-price__monthly-payment col order-${list.dlvyExpsrOrdr-1}" style="order: ${list.dlvyExpsrOrdr-1}"><c:out value="${list.dlvyGroupNm}"/></div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="subList__content">
|
||||
<div class="subList__no-result">
|
||||
<img src="/pc/images/icon__no-result.png" alt="">
|
||||
<p class="subList__no-result-text">
|
||||
일치하는 검색결과가 없습니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<%-- <div class="resultTrend">--%>
|
||||
<%-- <h5 class="resultTrend__title">인기검색어 //TODO?</h5>--%>
|
||||
<%-- <ul class="resultTrend__list">--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">1.</span>비타민비타민비타민비타민비타민비타민비타민비타민비타민</a>--%>
|
||||
<%-- <i class="icon icon_search-up"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">2.</span>글루타치온</a>--%>
|
||||
<%-- <i class="icon icon_search-down"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">3.</span>비타민</a>--%>
|
||||
<%-- <i class="icon icon_search-up"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">4.</span>글루타치온</a>--%>
|
||||
<%-- <i class="icon icon_search-up"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">5.</span>비타민</a>--%>
|
||||
<%-- <i class="icon icon_search-down"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">6.</span>글루타치온</a>--%>
|
||||
<%-- <i class="icon icon_search-default"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">7.</span>비타민</a>--%>
|
||||
<%-- <i class="icon icon_search-default"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">8.</span>글루타치온</a>--%>
|
||||
<%-- <i class="icon icon_search-down"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">9.</span>비타민</a>--%>
|
||||
<%-- <i class="icon icon_search-up"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- <li><a href=""><span class="resultTrend__num">10.</span>글루타치온</a>--%>
|
||||
<%-- <i class="icon icon_search-up"></i>--%>
|
||||
<%-- </li>--%>
|
||||
<%-- </ul>--%>
|
||||
<%-- </div>--%>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<%--장바구니 목록과 선택한 상품 중복 모달 --%>
|
||||
<div id="modal-error-confirm-add-cart-duplicate-div"></div>
|
||||
<%--장바구니 버튼 선택 모달--%>
|
||||
<div id="addGoodsCartDiv"></div>
|
||||
<%--장바구니 담기 후 모달--%>
|
||||
<div id="addCartDiv"></div>
|
||||
<%--상품 중복선택 모달--%>
|
||||
<div id="goodsDuplicateDiv"></div>
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
|
||||
</div>
|
||||
<%--<script src="/admin/js/script.js" defer=""></script>--%>
|
||||
1124
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsSrchRForm.jsp
Normal file
1124
src/main/webapp/WEB-INF/views/sopmal/goods/GoodsSrchRForm.jsp
Normal file
File diff suppressed because it is too large
Load Diff
139
src/main/webapp/WEB-INF/views/sopmal/goods/QnaListR.jsp
Normal file
139
src/main/webapp/WEB-INF/views/sopmal/goods/QnaListR.jsp
Normal file
@@ -0,0 +1,139 @@
|
||||
<%@ 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 : QnaListR.jsp
|
||||
Description : 상품qna 목록
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
let goodsQnaCnt = '<c:out value="${resultMap.paginationInfo.totalRecordCount}"/>';
|
||||
goodsQnaCnt = fn_format_comma(goodsQnaCnt);
|
||||
$("#goodsQnaCnt").text(goodsQnaCnt);
|
||||
});
|
||||
</script>
|
||||
<div class="userQnA">
|
||||
<h5 class="userQnA__title">상품문의</h5>
|
||||
<div class="userQnA__controls">
|
||||
<div class="select-box">
|
||||
<select class="lg" id = "srchitmInnb" title="문의유형" name="srchitmInnb">
|
||||
<option value="">문의 유형을 선택해 주세요.</option>
|
||||
<c:forEach var="itm" items="${resultMap.itmList}">
|
||||
<option value="<c:out value = '${itm.itmInnb}'/>"
|
||||
<c:if test="${resultMap.bbscttVO.srchitmInnb eq itm.itmInnb}">selected</c:if>>
|
||||
<c:out value='${itm.itmCn}'/>
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
<div class="userQnA__controls__btnContainer">
|
||||
<button type="button" class="btn md theme" id="registBtn">상품 Q&A 쓰기</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-wrapper">
|
||||
<table class="table vertical">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 80px;">
|
||||
<col style="width: 120px;">
|
||||
<col style="width: auto;">
|
||||
<col style="width: 140px;">
|
||||
<col style="width: 140px">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>번호</th>
|
||||
<th>답변상태</th>
|
||||
<th>문의내용</th>
|
||||
<th>작성자</th>
|
||||
<th>등록일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty resultMap.resultList.qnaList }">
|
||||
<c:forEach var="resultList" items="${ resultMap.resultList.qnaList}">
|
||||
<tr class="tr-foldable-trigger" bbsctt="<c:out value="${resultList.bbscttInnb}"/>" bbs-id = "<c:out value="${resultList.bbsId}"/>">
|
||||
<td><span class="board-number"><c:out value="${resultList.rnum}"/></span></td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultList.answBbscttInnb}">
|
||||
<span class="text-complete">답변완료</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="text-waiting">답변대기</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td class="text-left">
|
||||
<div class="board-inner-product">
|
||||
<div class="board-inner-product__right">
|
||||
<p class="board-inner-product__title">
|
||||
<span class="category"><c:if test="${not empty resultList.answCn}">
|
||||
[<c:out value="${resultList.answCn}"/>]</c:if></span>
|
||||
<c:out value="${ resultList.regusrNm}"/>님의 소중한 질문입니다.
|
||||
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
|
||||
<i class="icon icon_image-badge"></i>
|
||||
</c:if>
|
||||
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
|
||||
<i class="icon icon_new-post"></i>
|
||||
</c:if>
|
||||
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
|
||||
<i class="icon icon_lock"></i>
|
||||
</c:if>
|
||||
</p>
|
||||
<c:if test="${ resultList.secretBbscttAt eq 'Y' }"><%--비밀글여부--%>
|
||||
<p class="board-inner-product__title">
|
||||
비밀글입니다.
|
||||
</p>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="customer-name">
|
||||
<c:out value="${ resultList.regusrNm}"/>
|
||||
</span>
|
||||
</td>
|
||||
<td><span class="board-date"><c:out value="${resultList.registDt}"/></span></td>
|
||||
</tr>
|
||||
<tr class="tr-foldable qnaCn">
|
||||
<%--내용,답변--%>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<tr>
|
||||
<td colspan="100%">
|
||||
<div class="table__no-result">
|
||||
<img src="/pc/images/icon__no-result.png" alt="조회 내역 없음">
|
||||
<p class="table__no-result-text">
|
||||
<spring:message code="common.nodata"/>
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="qnaPageIndex" name="pageIndex" value="<c:out value = '${resultMap.bbscttVO.pageIndex}'/>"/>
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_qna"/>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
481
src/main/webapp/WEB-INF/views/sopmal/goods/RelateGoodsPopupR.jsp
Normal file
481
src/main/webapp/WEB-INF/views/sopmal/goods/RelateGoodsPopupR.jsp
Normal file
@@ -0,0 +1,481 @@
|
||||
<%@ 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 : RelateGoodsPopupR.jsp
|
||||
Description : 함께하면 좋은 상품(관련 상품) 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-07-23 유재현 최초 생성
|
||||
--%>
|
||||
<<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<script defer>
|
||||
|
||||
fn_set_niceSelect_datePicker('.select-box-relate')
|
||||
//
|
||||
// /*************************************************************
|
||||
// 함께하면 좋은상품 이벤트 (모달)
|
||||
// **************************************************************/
|
||||
//
|
||||
$('#related-product-popUp').on('modal:open', function (event, modal) {
|
||||
//
|
||||
// $('.select-box-relate').niceSelect();
|
||||
//
|
||||
// // false로 설정시 라디오만 선택해도 상품 추가 가능
|
||||
//
|
||||
// //일반옵션
|
||||
// // 라디오 버튼 클릭시, 상품 정보 배열에 추가 및 화면에 추가
|
||||
$(".modal .productDetailInfo__option__item").each(function () {
|
||||
$(this).find("input[type=radio]").on("change", function () { // 라디오 버튼 클릭 시
|
||||
if ($(this).prop('checked') == false) return; // 체크 해제시 리턴
|
||||
const $title = $(this).closest(".productDetailInfo__option__item").find("label").text();
|
||||
const $price = $(this).closest(".productDetailInfo__option__item").find(".productDetailInfo__option__price").text();
|
||||
const $goodsOptnInnb = $(this).closest(".productDetailInfo__option__item").find('input[name="goodsOptnInnb"]').val()
|
||||
const $goodsOptnTy = $(this).closest(".productDetailInfo__option__item").find('input[name="goodsOptnTy"]').val()
|
||||
const $optnInfo = $(this).closest(".productDetailInfo__option__item").find('.productDetailInfo__option__monthly-payment').text();
|
||||
|
||||
const $priceNum = parseInt($price.replace(/,/g, ""));
|
||||
|
||||
//이미 추가된 상품인지 확인
|
||||
|
||||
var isItemAlreadyAdded = cartProductArr.some(function (item) {
|
||||
|
||||
return item[4] === $goodsOptnInnb;
|
||||
});
|
||||
if (isItemAlreadyAdded){
|
||||
fn_goods_duplicate_select_modal()
|
||||
return;
|
||||
}
|
||||
|
||||
//이미 선택한 상품이 포함되었을 경우 alert
|
||||
let dupliChk = false;
|
||||
productArr.forEach(function(item) {
|
||||
if (item[4] === $goodsOptnInnb) {
|
||||
dupliChk = true;
|
||||
}
|
||||
});
|
||||
|
||||
if(dupliChk){
|
||||
$(this).prop('checked', false)
|
||||
alert('이미 선택하신 상품입니다.');
|
||||
return false;
|
||||
}
|
||||
|
||||
const $relateGoodsInnb = $('#relateGoodsInnb').val()
|
||||
|
||||
cartProductArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy, $relateGoodsInnb]); // 배열에 상품 정보 추가
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">'+$optnInfo+'</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $price +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
});
|
||||
});
|
||||
|
||||
// 총 상품금액
|
||||
var $cartTotalPrice = $(".modal .product-total__price__totalPriceNum");
|
||||
|
||||
// 수량 "-", "+" 버튼 클릭 시, 수량 증감 및 가격 변경 및 총 상품금액 변경
|
||||
$("#cartCountContainer").on("click", ".productDetailInfo__count__amountBtn", function () { // 수량 버튼 클릭 시
|
||||
var $counter = $(this);
|
||||
var $index = $counter.closest(".productDetailInfo__count").index(); // 해당 상품의 인덱스
|
||||
if ($(this).hasClass("minus")) { // "-" 버튼 클릭 시
|
||||
if (cartProductArr[$index][1] <= 1) return;
|
||||
cartProductArr[$index][1]--; // 배열에서 해당 상품의 수량 감소
|
||||
cartProductArr[$index][3] = cartProductArr[$index][1] * cartProductArr[$index][2]; // 배열에서 해당 상품의 총 가격 변경
|
||||
} else { // "+" 버튼 클릭 시
|
||||
cartProductArr[$index][1]++; // 배열에서 해당 상품의 수량 증가
|
||||
cartProductArr[$index][3] = cartProductArr[$index][1] * cartProductArr[$index][2]; // 배열에서 해당 상품의 총 가격 변경
|
||||
}
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
})
|
||||
//
|
||||
// //배열 내용을 바탕으로 각 아이템 텍스트 변경
|
||||
function updateCartCounters() {
|
||||
$(".modal .productDetailInfo__count").each(function () {
|
||||
var $counter = $(this);
|
||||
var $index = $counter.index();
|
||||
var $number = $counter.find(".productDetailInfo__count__amountNumber");
|
||||
var $price = $counter.find(".productDetailInfo__count__priceNum");
|
||||
$number.text(cartProductArr[$index][1]);
|
||||
$price.text(addComma(cartProductArr[$index][3]) + "원");
|
||||
});
|
||||
updateCartTotalPrice(); // 총 상품금액 업데이트
|
||||
|
||||
}
|
||||
|
||||
// 3자리마다 "," 추가
|
||||
function addComma(num) {
|
||||
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
}
|
||||
|
||||
// 총 상품금액 업데이트
|
||||
function updateCartTotalPrice() {
|
||||
var totalPrice = 0; // 총 상품금액
|
||||
for (var i = 0; i < cartProductArr.length; i++) {
|
||||
totalPrice += cartProductArr[i][3]; // 배열의 총 가격을 더함
|
||||
}
|
||||
$cartTotalPrice.text(addComma(totalPrice)); // 총 상품금액 텍스트 변경
|
||||
}
|
||||
|
||||
// x버튼 클릭 시 삭제
|
||||
$("#cartCountContainer").on("click", ".productDetailInfo__count__amountDelete", function () { // x 버튼 클릭 시
|
||||
var $index = $(this).closest(".productDetailInfo__count").index();
|
||||
cartProductArr.splice($index, 1); // 배열에서 해당 상품 삭제
|
||||
$(this).closest(".productDetailInfo__count").remove(); // 화면에서 해당 상품 삭제
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
|
||||
//일반옵션이 하나일 경우 라디오 체크 해제(품절상품 제외) || 필수옵션 01이 상품 배열에 하나도 없을 경우
|
||||
if($('#related-product-popUp .custom-radio:not(:has(span))').length ===1
|
||||
|| cartProductArr.filter(item => item[5] === '01'&& $('#goodsInnb').val() ===item[6]).length === 0){
|
||||
$("input[name='r-group01']").prop('checked', false)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//TODO :: 입력옵션
|
||||
// // // 마지막으로 생성된 상품에 각인 정보 추가
|
||||
// // $('#cartAddTextBtn').on('click', function () {
|
||||
// // var $index = $(".modal .productDetailInfo__count").length - 1;
|
||||
// // var $text = $('#cartAddTextInput').val();
|
||||
|
||||
// // $(".modal .productDetailInfo__count").eq($index).find(".productDetailInfo__count__amountTop").append('<div class="productDetailInfo__count__additionalSelect">각인문구 : ' + $text + '</div>');
|
||||
// //
|
||||
|
||||
// // });
|
||||
//
|
||||
|
||||
//재고옵션
|
||||
$('#cartAdditionalSelect').on("change", "select", function () { // 셀렉트 선택 시
|
||||
if ($('#cartAdditionalSelect').find('.option.selected.disabled').length > 0) return;
|
||||
if ($('#cartAdditionalSelect').find('.option.selected').length == $('#cartAdditionalSelect').find('.nice-select').length) { // 모든 셀렉트가 선택되면
|
||||
|
||||
var $title = $('#relateGoodsNm').val();
|
||||
var $optInfo = $(this).closest(".productDetailInfo__additionalSelect__item").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 < $('#cartAdditionalSelect').find('.nice-select').length; i++) {
|
||||
arr.push($('#cartAdditionalSelect').find('.nice-select').eq(i).find('.option.selected').text());
|
||||
}
|
||||
//이미 추가된 상품인지 확인
|
||||
var isItemAlreadyAdded = cartProductArr.some(function (item) {
|
||||
return item[4] === $goodsOptnInnb;
|
||||
});
|
||||
if (isItemAlreadyAdded) {
|
||||
fn_goods_duplicate_select_modal()
|
||||
return;
|
||||
}
|
||||
|
||||
const $relateGoodsInnb = $('#relateGoodsInnb').val()
|
||||
cartProductArr.push([$title, 1, $priceNum, $priceNum * 1, $goodsOptnInnb, $goodsOptnTy, $relateGoodsInnb, arr]); // 배열에 상품 정보 추가
|
||||
let cartAdditionalSelectText = '옵션 : ' + arr.join(' / ').replace(/\(\+.*?\)/g, ''); // 추가정보 텍스트로 변환
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<div class="productDetailInfo__count__additionalSelect">' + cartAdditionalSelectText + '</div>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">' + $goodsOptnInfo + '</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $priceNum +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
|
||||
});
|
||||
|
||||
// // 추가구성옵션
|
||||
$("#cartMoreItemsSelect").on("change",'select', function () {
|
||||
var $moreItems = $('#cartMoreItemsSelect').find(".productDetailInfo__additionalSelect__item");
|
||||
const $optInfoOptn3 = $(this).closest(".productDetailInfo__additionalSelect__item").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(".productDetailInfo__additionalSelect__item").children('.productDetailInfo__additionalSelect__otpnEssntlAt__relate').val();
|
||||
|
||||
// $moreItems.each(function () {
|
||||
// if ($(this).find('.option.selected.disabled').length > 0) return;
|
||||
var $title = $(this).closest(".productDetailInfo__additionalSelect__item").find(".option.selected").text().replace(' ', '').trim().replace('선택', ' ').replace(/\(\+.*?\)/g, '');
|
||||
var $priceNum = $(this).find(".option.selected").attr("data-value");
|
||||
|
||||
//이미 추가된 상품인지 확인
|
||||
var isItemAlreadyAdded = cartProductArr.some(function (item) {
|
||||
return item[4] === $goodsOptnInnbOptn3;
|
||||
});
|
||||
if (isItemAlreadyAdded){
|
||||
fn_goods_duplicate_select_modal()
|
||||
return;
|
||||
}
|
||||
const $relateGoodsInnb = $('#relateGoodsInnb').val()
|
||||
cartProductArr.push([$title, 1, $priceNumOptn3, $priceNumOptn3 * 1, $goodsOptnInnbOptn3, $goodsOptnTyOptn3,$relateGoodsInnb ,$optnEssnlAtOptn3 ]); // 배열에 상품 정보 추가
|
||||
$('#cartCountContainer').append( // 화면에 상품 정보 추가
|
||||
'<div class="productDetailInfo__count">' +
|
||||
'<div class="productDetailInfo__count__amountTop">' +
|
||||
'<span class="productDetailInfo__count__amountTitle">' + $title + '</span>' +
|
||||
'<button class="productDetailInfo__count__amountDelete"><span class="visually-hidden">삭제</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountBottom">' +
|
||||
'<div class="productDetailInfo__count__amountCounter">' +
|
||||
'<button class="productDetailInfo__count__amountBtn minus"><span class="visually-hidden">감소</span></button>' +
|
||||
'<span class="productDetailInfo__count__amountNumber">1</span>' +
|
||||
'<button class="productDetailInfo__count__amountBtn plus"><span class="visually-hidden">추가</span></button>' +
|
||||
'</div>' +
|
||||
'<div class="productDetailInfo__count__amountPriceBox">' +
|
||||
'<span class="productDetailInfo__count__amountMonthlyPrice">'+$goodsOptnInfoOptn3+'</span>' +
|
||||
'<span class="productDetailInfo__count__amountPrice"><span class="comma productDetailInfo__count__priceNum">' + $priceNum +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
$(this).val('').niceSelect('update')
|
||||
updateCartCounters(); // 화면에 상품 정보 업데이트
|
||||
// });
|
||||
});
|
||||
});
|
||||
// })
|
||||
|
||||
// })
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<body>
|
||||
<div id="related-product-popUp" class="modal option">
|
||||
<div class="option-header">
|
||||
<div class="option-header__title">옵션 선택</div>
|
||||
<input type="hidden" id="relateGoodsInnb" value="${relateResultMap.goodsDtl.goodsInnb}"/>
|
||||
<input type="hidden" id="relateGoodsNm" value="${relateResultMap.goodsDtl.goodsNm}"/>
|
||||
<input type="hidden" id="relateSlepricDscntAmt" value="${relateResultMap.goodsDtl.slepric }"/>
|
||||
</div>
|
||||
<div class="option-content">
|
||||
<div class="product-unit product-unit--relatedProduct">
|
||||
<div class="product-unit-image">
|
||||
<a href="javascript:void(0);">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<img src="<c:out value="${cdnurl}${fn:split(relateResultMap.goodsDtl.img, '|')[0]}"/> " onerror="this.src='/pc/images/image_placeholder.png'" alt="상품 이미지">
|
||||
</a>
|
||||
</div>
|
||||
<div class="product-unit-info">
|
||||
<div class="product-unit-info__inner">
|
||||
<div class="product-unit-title">
|
||||
<a href="javascript:void(0);" onclick="fn_move_goods_dtl('<c:out value="${relateResultMap.goodsDtl.goodsInnb}"/>');"><c:out value="${relateResultMap.goodsDtl.goodsNm}"/></a>
|
||||
</div>
|
||||
<div class="product-unit-price">
|
||||
<div class="product-unit-price__price">
|
||||
<span class="product-unit-price__original">
|
||||
<span class="comma">
|
||||
<fmt:formatNumber value="${relateResultMap.goodsDtl.cnsmrpric}"/></span>
|
||||
<span class="priceUnit"></span>
|
||||
</span>
|
||||
<span class="product-unit-price__current">
|
||||
<span class="comma"> <fmt:formatNumber value="${relateResultMap.goodsDtl.dcSlepric}"/></span>
|
||||
<span class="priceUnit">원</span></span>
|
||||
</div>
|
||||
<div class="product-unit-price__sale">
|
||||
<span class="percent"><c:out value="${relateResultMap.goodsDtl.dcPercent}"/>%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${relateResultMap.goodsDtl.goodsSttusCd eq '01'}">
|
||||
<c:choose>
|
||||
<c:when test="${not empty relateResultMap.optnList}">
|
||||
<c:if test="${not empty relateResultMap.optnList.normalOptnList}">
|
||||
<div class="productDetailInfo__option">
|
||||
<div class="productDetailInfo__option__box">
|
||||
<c:forEach var="goodsOpt01" items="${relateResultMap.optnList.normalOptnList}" varStatus="optList01">
|
||||
<c:if test="${goodsOpt01.optnExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt01.invntrySldoutExpsrAt eq 'Y'}">
|
||||
<div class="productDetailInfo__option__item">
|
||||
<c:if test="${not empty goodsOpt01.optnVal1}">
|
||||
<div class="custom-radio is-medium">
|
||||
<input type="radio" id="r-2${goodsOpt01.optnOrdr}" value="${goodsOpt01.optnVal1}" name="r-group01" <c:if test="${goodsOpt01.disableAt eq 'Y'}"> disabled</c:if>>
|
||||
<label for="r-2${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="productDetailInfo__option__right">
|
||||
<span class="productDetailInfo__option__price"><span class="comma"><fmt:formatNumber value="${goodsOpt01.slepric}"/></span> <span class="priceUnit"> 원</span></span>
|
||||
<span class="productDetailInfo__option__monthly-payment"><c:out value="${goodsOpt01.optnInfo}"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${not empty relateResultMap.optnList.invntryOptnList}">
|
||||
<div class="productDetailInfo__additionalSelect" id="cartAdditionalSelect">
|
||||
<span class="productDetailInfo__option__title">옵션선택(필수)</span>
|
||||
<div class="productDetailInfo__additionalSelect__inner">
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty relateResultMap.optnList.invntryOptnList[0].optnNm1}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${relateResultMap.optnList.invntryOptnList[0].optnNm1}"/> </span>
|
||||
<div class="select-box-relate">
|
||||
<select id="selectRelateInvntryOptn1" name="selectRelateInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
<c:forEach var="goodsOpt02" items="${relateResultMap.optnList.invntryOptnList}" varStatus="optList02">
|
||||
<c:if test="${goodsOpt02.optnExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt02.invntrySldoutExpsrAt eq 'Y'}">
|
||||
<c:if test="${goodsOpt02.optnVal1 ne relateResultMap.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>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty relateResultMap.optnList.invntryOptnList[0].optnNm2}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${relateResultMap.optnList.invntryOptnList[0].optnNm2}"/> </span>
|
||||
<div class="select-box-relate">
|
||||
<select id="selectRelateInvntryOptn2" name="selectRelateInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty relateResultMap.optnList.invntryOptnList[0].optnNm3}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${relateResultMap.optnList.invntryOptnList[0].optnNm3}"/> </span>
|
||||
<div class="select-box-relate">
|
||||
<select id="selectRelateInvntryOptn3" name="selectRelateInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<c:if test="${not empty relateResultMap.optnList.invntryOptnList[0].optnNm4}">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${relateResultMap.optnList.invntryOptnList[0].optnNm4}"/> </span>
|
||||
<div class="select-box-relate">
|
||||
<select id="selectRelateInvntryOptn4" name="selectRelateInvntryOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
</select>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${not empty relateResultMap.optnList.addedOptnList}">
|
||||
<div class="productDetailInfo__additionalSelect" id="cartMoreItemsSelect">
|
||||
<span class="productDetailInfo__additionalSelect__title">추가구성</span>
|
||||
<div class="productDetailInfo__additionalSelect__inner">
|
||||
<c:forEach var="goodsOpt03" items="${relateResultMap.optnList.addedOptnList}" varStatus="optList03">
|
||||
<c:if test="${not empty goodsOpt03.optnNm1}">
|
||||
<c:if test="${relateResultMap.optnList.addedOptnList[optList03.index-1].optnNm1 ne goodsOpt03.optnNm1}">
|
||||
<div class="productDetailInfo__additionalSelect__item">
|
||||
<span class="productDetailInfo__additionalSelect__category"><c:out value="${goodsOpt03.optnNm1}"/> </span>
|
||||
<input type="hidden" name="productDetailInfo__additionalSelect__otpnEssntlAt__relate__added" <c:if test="${goodsOpt03.optnEssntlAt eq 'Y'}"> value="Y"</c:if>/>
|
||||
</c:if>
|
||||
<c:if test="${relateResultMap.optnList.addedOptnList[optList03.index-1].optnNm1 ne goodsOpt03.optnNm1}">
|
||||
<div class="select-box-relate">
|
||||
<select title="${goodsOpt03.OptnInfo}" name="selectRelateAddedOptn">
|
||||
<option value="" disabled selected><c:out value="선택"/></option>
|
||||
<c:forEach var="goodsOptVal03" items="${relateResultMap.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>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<%-- <div class="productDetailInfo__confirmOption">--%>
|
||||
<%-- <button class="btn md outline" id="cartMoreItemsButton">입력한 정보 선택</button>--%>
|
||||
<%-- </div>--%>
|
||||
<%--TODO :: 입력옵션 --%>
|
||||
<%-- <div class="productDetailInfo__option">--%>
|
||||
<%-- <span class="productDetailInfo__option__title">상품정보 입력</span>--%>
|
||||
<%-- <div class="productDetailInfo__additionalSelect__inner">--%>
|
||||
<%-- <div class="productDetailInfo__additionalSelect__item">--%>
|
||||
<%-- <span class="productDetailInfo__additionalSelect__category">각인 옵션</span>--%>
|
||||
<%-- <input id="cartAddTextInput" class="input-text full" type="text" title="해당 인풋에 대한 설명"--%>
|
||||
<%-- placeholder="각인 문구를 입력해주세요" value="">--%>
|
||||
<%-- <button id="cartAddTextBtn" class="btn outline">저장</button>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<div id="cartCountContainer">
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<%--옵션 없을 경우 빈값--%>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
<div class="product-total__container">
|
||||
<span class="product-total__text">총 상품금액</span>
|
||||
<span class="product-total__price">
|
||||
<span class="product-total__price__totalPriceNum">0</span>
|
||||
<span class="won">원</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="product-btn-container">
|
||||
<button class="btn theme large" id="addGoodsDtl">함께 구매하기</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
32
src/main/webapp/WEB-INF/views/sopmal/goods/ReturnInfoR.jsp
Normal file
32
src/main/webapp/WEB-INF/views/sopmal/goods/ReturnInfoR.jsp
Normal file
@@ -0,0 +1,32 @@
|
||||
<%@ 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 : QnaListR.jsp
|
||||
Description : 상품qna 목록
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<div class="userRefund">
|
||||
<h5 class="userRefund__title">반품/교환정보</h5>
|
||||
<div class="userRefund__inner" id="infoCn">
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultMap.infoCn}">
|
||||
<c:out value = "${resultMap.infoCn}" escapeXml="false"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span><c:out value="반품/교환 정보가 없습니다."/></span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
155
src/main/webapp/WEB-INF/views/sopmal/goods/RvwListR.jsp
Normal file
155
src/main/webapp/WEB-INF/views/sopmal/goods/RvwListR.jsp
Normal file
@@ -0,0 +1,155 @@
|
||||
<%@ 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 : RvwListR.jsp
|
||||
Description : 리뷰 리스트
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div class="productReview__subTitle">
|
||||
<span class="productReview__subTitle__title">리뷰</span>
|
||||
<span class="productReview__subTitle__num">
|
||||
<span class="comma"></span>
|
||||
<span id = "totCnt"></span>
|
||||
<span class="unit">건</span>
|
||||
</span>
|
||||
<ul class="userReview__sort">
|
||||
<li>
|
||||
<button type="button" class="sortDv" value="rank">랭킹순</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="sortDv" value="recent">최신순</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="sortDv" value="evl">평점 높은순</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<%--리뷰 목록 ajax 호출 시 탭 명 + 건수 set 함--%>
|
||||
<div class="userReview__tab">
|
||||
<button type="button" class="userReview__tab__btn" value = "all">전체 <span id = "allCnt"></span></button>
|
||||
<button type="button" class="userReview__tab__btn" value = "photo">포토리뷰 <span id = "photoCnt"></span></button>
|
||||
<button type="button" class="userReview__tab__btn" value = "month" id = "mtBtn">한달리뷰 <span id = "mtCnt"></span></button>
|
||||
</div>
|
||||
<%--검색키워드 -> 문항명--%>
|
||||
<div class="userReview__hashtag">
|
||||
<c:forEach var = "srchKeyword" items="${resultMap.resultList.srchKewordList}">
|
||||
<button type="button" class="userReview__hashtag__btn" value = "<c:out value = "${srchKeyword.qesitmNm}"/>">#<c:out value = "${srchKeyword.qesitmNm}"/></button>
|
||||
</c:forEach>
|
||||
<input type = "hidden" id = "hiddenSrch" value = "<c:out value = '${resultMap.bbscttVO.srchKeywordArr}'/>"/>
|
||||
</div>
|
||||
<%--리뷰 리스트--%>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultMap.resultList.rvwList}">
|
||||
<c:forEach var="resultList" items="${resultMap.resultList.rvwList}">
|
||||
<div class="userReviewItem">
|
||||
<div class="userReviewItem__top">
|
||||
<div class="userReviewItem__userImage">
|
||||
<img src="/pc/images/icon_user-info.png" alt="">
|
||||
</div>
|
||||
<div class="userReviewItem__top__info">
|
||||
<c:if test = "${not empty resultList.evlScore}">
|
||||
<div class="reviewStars__wrapper--sm">
|
||||
<fmt:formatNumber value="${resultList.evlScore}" pattern="##" var="evlScore"/>
|
||||
<div class="reviewStars star-<c:out value="${evlScore}"/>"></div>
|
||||
<span class="reviewStars__num"><c:out value="${evlScore}"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="userReviewItem__misc">
|
||||
<span class="userReviewItem__misc__id"><c:out value = "${resultList.regusrId}"/></span>
|
||||
<span class="userReviewItem__misc__date"><c:out value = "${resultList.registDt}"/></span>
|
||||
<c:if test = "${resultList.bstAt eq 'Y'}">
|
||||
<span class="reviewBadge reviewBadge--red">BEST</span>
|
||||
</c:if>
|
||||
<c:if test = "${resultList.bbsTyCd eq '07'}">
|
||||
<span class="reviewBadge">한달사용기</span>
|
||||
</c:if>
|
||||
<c:if test = "${resultList.reOrderAt eq 'Y'}">
|
||||
<span class="reviewBadge">재구매</span>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userReviewItem__body listPage">
|
||||
<div class="userReviewItem__reviewText listCn" style="white-space: pre-wrap;">
|
||||
<c:out value="${resultList.cn}" escapeXml="false"/>
|
||||
</div>
|
||||
<c:forEach var="photoByBbsctt" items="${resultMap.resultList.photoByBbsctt}">
|
||||
<c:if test="${resultList.bbscttInnb eq photoByBbsctt.bbscttInnb}">
|
||||
<div class="userReviewItem__reviewImage listImage">
|
||||
<c:if test="${not empty resultList.filCours}">
|
||||
<img src="<c:out value = "${cdnurl}${resultList.filCours}"/><c:out value = "${resultList.sysFilNm}"/>"
|
||||
onerror='this.src = "/pc/images/image_placeholder.png"'
|
||||
alt="">
|
||||
</c:if>
|
||||
<c:if test="${resultList.fileCnt > 0}">
|
||||
<span class="userReviewItem__reviewImage__num listPageImg">
|
||||
<c:out value="${resultList.fileCnt}"/>
|
||||
</span>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
<c:if test="${resultList.bbscttEvlUseAt eq 'Y'}">
|
||||
<div class="userReviewItem__likeContainer">
|
||||
<button class="userReviewItem__like" onclick = "fn_update_bbsctt_recomend('recommend', '<c:out value = '${resultList.bbscttInnb}'/>', this);">
|
||||
도움이 돼요
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"/>
|
||||
</svg>
|
||||
<em class="recommendCnt">
|
||||
<c:out value="${resultList.recomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
<c:if test="${resultList.bbscttEvlRecomendStep eq '02'}">
|
||||
<button class="userReviewItem__like userReviewItem__like--dislike"
|
||||
onclick = "fn_update_bbsctt_recomend('nonrecommend', '<c:out value = '${resultList.bbscttInnb}'/>', this);">
|
||||
도움이 안돼요
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"/>
|
||||
</svg>
|
||||
<em class="nonrecommendCnt">
|
||||
<c:out value="${resultList.nonrecomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
<input type = "hidden" value = "<c:out value="${resultList.bbscttInnb}"/>"/>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="userReviewItem">
|
||||
<div class="orderList__no-result">
|
||||
<img src="/pc/images/icon__no-result.png" alt="">
|
||||
<p class="orderList__no-result-text">
|
||||
<spring:message code="common.nodata"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<input type="hidden" name="pageIndex" id="pageIndex" value="<c:out value = "${resultMap.bbscttVO.pageIndex}"/>">
|
||||
<div class="pagination__container">
|
||||
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_rvw"/>
|
||||
</div>
|
||||
</html>
|
||||
340
src/main/webapp/WEB-INF/views/sopmal/goods/RvwListRForm.jsp
Normal file
340
src/main/webapp/WEB-INF/views/sopmal/goods/RvwListRForm.jsp
Normal file
@@ -0,0 +1,340 @@
|
||||
<%@ 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 : RvwListRForm.jsp
|
||||
Description : 리뷰 목록 폼
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-04 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<%--데이터 set--%>
|
||||
<%--상품 리뷰 평가 정보--%>
|
||||
<c:set value = "${resultMap.rvwInfo.evlInfo}" var = "evlInfo"/>
|
||||
<%--상품 리뷰 추가 평가 통계--%>
|
||||
<c:set value = "${resultMap.rvwInfo.itmStats}" var = "itmStats"/>
|
||||
<%--상품 포토 리뷰 이미지 건수--%>
|
||||
<c:set value = "${resultMap.rvwInfo.photoTot}" var = "photoTot"/>
|
||||
<%--상품 포토 리뷰 이미지 리스트--%>
|
||||
<c:set value = "${resultMap.rvwInfo.photoList}" var = "photoList"/>
|
||||
<%--베스트 후기 건수--%>
|
||||
<c:set value = "${resultMap.rvwInfo.bstTotCnt}" var = "bstTotCnt"/>
|
||||
<%--베스트 후기 목록--%>
|
||||
<c:set value = "${resultMap.rvwInfo.bstRvwList}" var = "bstRvwList"/>
|
||||
<%--마일리지 적립 금액 조회--%>
|
||||
<c:set value = "${resultMap.rvwBnefInfo}" var = "rvwBnefInfo"/>
|
||||
|
||||
<%--상품 평가 정보--%>
|
||||
<div class="productReview">
|
||||
<h5 class="productReview__title">상품리뷰</h5>
|
||||
<div class="productReview__subBox">
|
||||
<p class="productReview__text">
|
||||
상품을 구매하신 분들이 작성하신 리뷰입니다. 리뷰 작성시 아래 금액만큼 포인트가 적립됩니다.
|
||||
</p>
|
||||
<div class="productReview__mileage">
|
||||
<dl>
|
||||
<dt>일반 리뷰 : </dt>
|
||||
<dd>
|
||||
<c:if test = "${rvwBnefInfo.writngChrCnt > 0}">(<fmt:formatNumber value="${rvwBnefInfo.writngChrCnt}" pattern="##"/>자이상)</c:if>
|
||||
<fmt:formatNumber value="${rvwBnefInfo.gnrlRvwMlgAccmlmnyAmt}" pattern="#,###"/>마일리지
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>포토 리뷰 :</dt>
|
||||
<dd>
|
||||
<c:if test = "${rvwBnefInfo.writngChrCnt > 0}">(<fmt:formatNumber value="${rvwBnefInfo.writngChrCnt}" pattern="##"/>자이상)</c:if>
|
||||
<fmt:formatNumber value="${rvwBnefInfo.photoRvwMlgAccmlmnyAmt}" pattern="#,###"/>마일리지
|
||||
</dd>
|
||||
</dl>
|
||||
<dl id = "mtDl"><%--한달리뷰 사용 안할 시 hide--%>
|
||||
<dt>한달 리뷰 :</dt>
|
||||
<dd>
|
||||
<c:if test = "${rvwBnefInfo.monthWritngChrCnt > 0}">(<fmt:formatNumber value="${rvwBnefInfo.monthWritngChrCnt}" pattern="#"/>자이상)</c:if>
|
||||
<fmt:formatNumber value="${rvwBnefInfo.monthPhotoRvwMlgAccmlmnyAmt}" pattern="#,###"/>마일리지
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__status">
|
||||
<div class="productReview__rating">
|
||||
<span class="productReview__status__title">사용자 총 평점</span>
|
||||
<div class="allReviewStars__wrapper">
|
||||
<div class="allReviewStars">
|
||||
<!-- width 설정한 만큼 별에 노란색 생김 -->
|
||||
<div style="width: <c:out value = "${evlInfo.starWidth}"/>%;" class="allReviewStars__fill"></div>
|
||||
</div>
|
||||
<span>
|
||||
<span class="allReviewStars__num"><c:out value = "${evlInfo.avgEvlScore}"/></span>
|
||||
<span class="allReviewStars__allNum">/ 5.0</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__reviewNum">
|
||||
<span class="productReview__status__title">전체 리뷰 수</span>
|
||||
<div class="productReview__reviewNum__inner">
|
||||
<i class="icon icon_review"></i>
|
||||
<span class="productReview__reviewNum__num">
|
||||
<span class="comma"><fmt:formatNumber value="${evlInfo.cntBbsctt}" pattern="#,###"/></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__ratingStats">
|
||||
<span class="productReview__status__title">평점 비율</span>
|
||||
<div class="productReview__ratingStats__inner">
|
||||
<div class="productReview__ratingStats__item productReview__ratingStats__topRating">
|
||||
<span class="productReview__ratingStats__star">5점</span>
|
||||
<div class="productReview__ratingStats__bar">
|
||||
<div style="width: <c:out value = "${evlInfo.fiveRate}"/>%;"
|
||||
class="productReview__ratingStats__fill"></div>
|
||||
</div>
|
||||
<span class="productReview__ratingStats__num"><fmt:formatNumber value="${evlInfo.fiveTot}" pattern="#,###"/></span>
|
||||
</div>
|
||||
<div class="productReview__ratingStats__item">
|
||||
<span class="productReview__ratingStats__star">4점</span>
|
||||
<div class="productReview__ratingStats__bar">
|
||||
<div style="width: <c:out value = "${evlInfo.fourRate}"/>%;"
|
||||
class="productReview__ratingStats__fill"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__ratingStats__item">
|
||||
<span class="productReview__ratingStats__star">3점</span>
|
||||
<div class="productReview__ratingStats__bar">
|
||||
<div style="width: <c:out value = "${evlInfo.threeRate}"/>%;"
|
||||
class="productReview__ratingStats__fill"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__ratingStats__item">
|
||||
<span class="productReview__ratingStats__star">2점</span>
|
||||
<div class="productReview__ratingStats__bar">
|
||||
<div style="width: <c:out value = "${evlInfo.twoRate}"/>%;"
|
||||
class="productReview__ratingStats__fill"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="productReview__ratingStats__item">
|
||||
<span class="productReview__ratingStats__star">1점</span>
|
||||
<div class="productReview__ratingStats__bar">
|
||||
<div style="width: <c:out value = "${evlInfo.oneRate}"/>%;"
|
||||
class="productReview__ratingStats__fill"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test = "${not empty itmStats}">
|
||||
<div class="productReview__reviewStats">
|
||||
<div class="productReview__reviewStats__item">
|
||||
<span class="productReview__status__title">다른 구매자들은 이렇게 평가했어요</span>
|
||||
<div class="otherReviews">
|
||||
<c:forEach var = "itmStat" items="${itmStats}">
|
||||
<div class="otherReviews__item">
|
||||
<span class="otherReviews__category"><c:out value = "${itmStat.key}"/></span>
|
||||
<span class="otherReviews__title"><c:out value = "${itmStat.value[0].itmCn}"/></span>
|
||||
<div class="otherReviews__line"></div>
|
||||
<span class="otherReviews__percent"><fmt:formatNumber value="${itmStat.value[0].rateAnsw}" pattern="#,###"/>%</span>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
<%--문항 별 항목 --%>
|
||||
<c:if test="${not empty itmStats}">
|
||||
<c:forEach var = "itmStat" items="${itmStats}">
|
||||
<div class="productReview__reviewStats__item">
|
||||
<span class="productReview__status__title"><c:out value = "${itmStat.key}"/> — "<c:out value = "${itmStat.value[0].itmCn}"/>"</span>
|
||||
<div class="otherReviewsDetail">
|
||||
<c:forEach var = "itm" items="${itmStat.value}">
|
||||
<div class="otherReviewsDetail__item">
|
||||
<span class="otherReviewsDetail__title"><c:out value = "${itm.itmCn}"/></span>
|
||||
<div class="otherReviewsDetail__bar">
|
||||
<div style="width: <fmt:formatNumber value="${itm.rateAnsw}" pattern="##"/>%;" class="otherReviewsDetail__fill">
|
||||
</div>
|
||||
</div>
|
||||
<span class="otherReviewsDetail__num"><fmt:formatNumber value="${itm.rateAnsw}" pattern="##"/>%</span>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<%--스토어 PICK 베스트 후기--%>
|
||||
<c:if test = "${not empty bstRvwList}">
|
||||
<div class="storePick">
|
||||
<div class="productReview__subTitle">
|
||||
<span class="productReview__subTitle__title">스토어 PICK</span>
|
||||
<span class="productReview__subTitle__subText">판매자가 직접 선정한 베스트리뷰입니다</span>
|
||||
</div>
|
||||
<div class="storePick__slick">
|
||||
<c:forEach var="bstRvwList" items="${resultMap.rvwInfo.bstRvwList}" varStatus="status">
|
||||
<c:if test="${status.index % 2 == 0}">
|
||||
<div class="storePick__item">
|
||||
<a class="storePick__box">
|
||||
<div class="storePick__top">
|
||||
<input type="hidden" value ="<c:out value="${bstRvwList.bbscttInnb}"/>" class="bbscttInnb"/>
|
||||
<div class="storePick__top__info">
|
||||
<c:if test = "${not empty bstRvwList.evlScore}">
|
||||
<div class="reviewStars__wrapper--sm">
|
||||
<div class="reviewStars star-<fmt:formatNumber value="${bstRvwList.evlScore}" pattern="##"/>"></div>
|
||||
<span class="reviewStars__num"><fmt:formatNumber value="${bstRvwList.evlScore}" pattern="##"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="storePick__misc">
|
||||
<span class="storePick__misc__id"><c:out value="${bstRvwList.regusrId}"/></span>
|
||||
<%--리뷰왕 여부--%>
|
||||
<c:if test="${bstRvwList.rvwKingAt eq 'Y'}">
|
||||
<span class="storePick__misc__badge">리뷰왕</span>
|
||||
</c:if>
|
||||
<span class="storePick__misc__date"><c:out value="${bstRvwList.registDt}"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="storePick__body">
|
||||
<%--포토 여부 판단 및 포토 건수--%>
|
||||
<c:if test="${not empty bstRvwList.filCours}">
|
||||
<div class="storePick__reviewImage storePickPageImg">
|
||||
<img src="<c:out value="${cdnurl}${bstRvwList.filCours}${bstRvwList.sysFilNm}"/>" alt="" style = "width:80px; height: 80px;"/>
|
||||
<span class="storePick__reviewImage__num"><c:out value="${bstRvwList.fileCnt}"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="storePick__reviewText storePickPage">
|
||||
<input type="hidden" value = "<c:out value="${bstRvwList.npayBbscttSnb}"/>" class="npayBbscttSnb"/>
|
||||
<c:if test="${bstRvwList.bstAt eq 'Y'}">
|
||||
<span class="reviewBadge reviewBadge--red">BEST</span>
|
||||
</c:if>
|
||||
<c:if test="${bstRvwList.bbsTyCd eq '07'}">
|
||||
<span class="reviewBadge">한달사용기</span>
|
||||
</c:if>
|
||||
<span class="bbscttCn">
|
||||
<c:out value="${bstRvwList.cn}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<c:choose>
|
||||
<c:when test="${status.index + 1 < resultMap.rvwInfo.bstRvwList.size()}">
|
||||
<a class="storePick__box">
|
||||
<input type="hidden" value ="<c:out value='${resultMap.rvwInfo.bstRvwList[status.index + 1].bbscttInnb}'/>" class="bbscttInnb"/>
|
||||
<div class="storePick__top">
|
||||
<div class="storePick__top__info">
|
||||
<c:if test = "${not empty resultMap.rvwInfo.bstRvwList[status.index + 1].evlScore}">
|
||||
<div class="reviewStars__wrapper--sm">
|
||||
<c:set value="${resultMap.rvwInfo.bstRvwList[status.index + 1].evlScore}" var="evlScore1"/>
|
||||
<div class="reviewStars star-<fmt:formatNumber value="${evlScore1}" pattern="##"/>"></div>
|
||||
<span class="reviewStars__num"><fmt:formatNumber value="${evlScore1}" pattern="##"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="storePick__misc">
|
||||
<span class="storePick__misc__id"><c:out value="${resultMap.rvwInfo.bstRvwList[status.index + 1].regusrId}"/></span>
|
||||
<%--리뷰왕 여부--%>
|
||||
<c:if test="${resultMap.rvwInfo.bstRvwList[status.index + 1].rvwKingAt eq 'Y'}">
|
||||
<span class="storePick__misc__badge">리뷰왕</span>
|
||||
</c:if>
|
||||
<span class="storePick__misc__date"><c:out value="${resultMap.rvwInfo.bstRvwList[status.index + 1].registDt}"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="storePick__body">
|
||||
<%--포토 여부 판단 및 포토 건수--%>
|
||||
<c:if test = "${not empty bstRvwList[status.index + 1].filCours}}">
|
||||
<div class="storePick__reviewImage storePickPageImg">
|
||||
<img src="<c:out value="${cdnurl}${resultMap.rvwInfo.bstRvwList[status.index + 1].filCours}${resultMap.rvwInfo.bstRvwList[status.index + 1].sysFilNm}"/>">
|
||||
<span class="storePick__reviewImage__num">
|
||||
<c:out value="${resultMap.rvwInfo.bstRvwList[status.index + 1].fileCnt}"/>
|
||||
</span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="storePick__reviewText storePickPage">
|
||||
<input type="hidden" value = "<c:out value="${resultMap.rvwInfo.bstRvwList[status.index + 1].npayBbscttSnb}"/>" class="npayBbscttSnb"/>
|
||||
<c:if test="${resultMap.rvwInfo.bstRvwList[status.index + 1].bstAt eq 'Y'}">
|
||||
<span class="reviewBadge reviewBadge--red">BEST</span>
|
||||
</c:if>
|
||||
<c:if test="${resultMap.rvwInfo.bstRvwList[status.index + 1].bbsTyCd eq '07'}">
|
||||
<span class="reviewBadge">한달사용기</span>
|
||||
</c:if>
|
||||
<span class="bbscttCn">
|
||||
<c:out value="${resultMap.rvwInfo.bstRvwList[status.index + 1].cn}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<a class="storePick__box" style="visibility: hidden;"></a>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="storePick__controls">
|
||||
<div class="storePick__controls__btnContainer">
|
||||
<button class="storePick__controls__btn prev">
|
||||
<span class="visually-hidden">이전</span>
|
||||
</button>
|
||||
<button class="storePick__controls__btn next">
|
||||
<span class="visually-hidden">다음</span>
|
||||
</button>
|
||||
</div>
|
||||
<span class="storePick__counter"></span>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test = "${not empty photoList}">
|
||||
<div class="photoReview">
|
||||
<div class="productReview__subTitle">
|
||||
<span class="productReview__subTitle__title">포토리뷰</span>
|
||||
<span class="productReview__subTitle__num"><span class="comma"><fmt:formatNumber value="${photoTot}" pattern="#,###"/></span><span class="unit">건</span></span>
|
||||
</div>
|
||||
<div class="photoReview__thumbs">
|
||||
<c:forEach var="photo" items="${photoList}" varStatus="status">
|
||||
<c:choose>
|
||||
<c:when test="${!status.last}">
|
||||
<button type="button" class="photoReview__thumbs__image" value="<c:out value='${photo.bbscttInnb}'/>">
|
||||
<c:if test = "${not empty photo.filCours}">
|
||||
<img src="<c:out value='${cdnurl}${photo.filCours}${photo.sysFilNm}'/>" onerror="this.src='/pc/images/image_placeholder.png'" alt="" >
|
||||
</c:if>
|
||||
<span class="photoReview__thumbs__num photoPageImg"><c:out value='${photo.fileCnt}'/></span>
|
||||
<div class = "photoPage" style = "display:none">
|
||||
<input type="hidden" value = "<c:out value="${photo.npayBbscttSnb}"/>" class = "npayBbscttSnb"/>
|
||||
<span class="bbscttCn">
|
||||
<c:out value="${photo.cn}"/>
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<button type="button" class="photoReview__thumbs__moreImage">
|
||||
<c:if test="${not empty photo.filCours}">
|
||||
<img src="<c:out value='${cdnurl}${photo.filCours}${photo.sysFilNm}'/>" onerror="this.src='/pc/images/image_placeholder.png'"/>
|
||||
</c:if>
|
||||
<div class="photoPage" style="display:none">
|
||||
<input type="hidden" value="<c:out value='${photo.npayBbscttSnb}'/>" class="npayBbscttSnb"/>
|
||||
<span class="bbscttCn">
|
||||
<c:out value="${photo.cn}"/>
|
||||
</span>
|
||||
</div>
|
||||
<span class="photoReview__thumbs__more">더보기</span>
|
||||
</button>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<%--전체 리뷰수, 포토 리뷰수, 한달 리뷰수 리뷰 jsp 삽입 시 값 set--%>
|
||||
<input type = "hidden" value = "<fmt:formatNumber value="${evlInfo.cntBbsctt}" pattern="#,###"/>" id = cntBbsctt>
|
||||
<input type = "hidden" value = "<fmt:formatNumber value="${photoTot}" pattern="#,###"/>" id = photoRvwCnt>
|
||||
<input type = "hidden" value = "<fmt:formatNumber value="${evlInfo.mtRvwCnt}" pattern="#,###"/>" id = mtRvwCnt>
|
||||
<div id="userReviewTarget" class="userReview">
|
||||
</div>
|
||||
</html>
|
||||
133
src/main/webapp/WEB-INF/views/sopmal/goods/RvwPhotoListR.jsp
Normal file
133
src/main/webapp/WEB-INF/views/sopmal/goods/RvwPhotoListR.jsp
Normal file
@@ -0,0 +1,133 @@
|
||||
<%@ 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 : RvwPhotoListR.jsp
|
||||
Description : 포토 리뷰 리스트 모달
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<div id="photoReview-pop" class="modal modal--photoReview" style="max-width: 1200px;">
|
||||
<input type = "hidden" id = "photoPageIndex" value = "<c:out value = "${resultMap.bbscttVO.pageIndex}"/>">
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<div class="modal-content">
|
||||
<div class="photoReviewDetail">
|
||||
<div class="photoReviewDetail__top">
|
||||
<span class="photoReviewDetail__top__text">
|
||||
포토/동영상 리뷰
|
||||
</span>
|
||||
<span class="photoReviewDetail__top__num">
|
||||
<span class="photoReviewDetail__currentIndex"></span>/<span
|
||||
class="photoReviewDetail__totalNum"><c:out value = "${ resultMap.paginationInfo.totalRecordCount }"/></span>
|
||||
</span>
|
||||
<button class="photoReviewDetail__top__seeAll">전체보기</button>
|
||||
</div>
|
||||
<%--상세보기--%>
|
||||
<div class="photoReviewDetail__slide">
|
||||
<c:forEach var = "photoList" items= "${resultMap.resultList.photoList}">
|
||||
<div class="photoReviewDetail__item">
|
||||
<div class="photoReviewDetail__mainImage">
|
||||
<img src="<c:out value = "${cdnurl}${photoList.filCours}${photoList.sysFilNm}"/>"
|
||||
onerror = "javascript:img=new Image();img.src='/pc/images/image_placeholder.png';
|
||||
if(img.complete){this.src='/pc/images/image_placeholder.png'}
|
||||
else{this.style.display='none';}" alt="">
|
||||
</div>
|
||||
<div class="photoReviewDetail__right">
|
||||
<div class="photoReviewDetail__rightTop">
|
||||
<div class="photoReviewDetail__userImage">
|
||||
<img src="/pc/images/icon_user-info.png" alt="">
|
||||
</div>
|
||||
<div class="photoReviewDetail__top__info">
|
||||
<c:if test = "${not empty photoList.evlScore}">
|
||||
<div class="reviewStars__wrapper--sm">
|
||||
<div class="reviewStars star-<fmt:formatNumber value="${photoList.evlScore}" pattern="##"/>"></div>
|
||||
<span class="reviewStars__num"><fmt:formatNumber value="${photoList.evlScore}" pattern="##"/></span>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="photoReviewDetail__misc">
|
||||
<span class="photoReviewDetail__misc__id"><c:out value = "${photoList.regusrId}"/></span>
|
||||
<span class="photoReviewDetail__misc__date"><c:out value = "${photoList.registDt}"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="photoReviewDetail__reviewText" style="white-space: pre-wrap;">
|
||||
<c:out value="${photoList.cn}"/>
|
||||
</div>
|
||||
<div class="photoReviewDetail__thumbs">
|
||||
<c:forEach var = "photoByBbsctt" items = "${resultMap.resultList.photoByBbsctt}">
|
||||
<c:if test = "${photoList.bbscttInnb eq photoByBbsctt.bbscttInnb}">
|
||||
<div class="photoReviewDetail__thumbs__item ">
|
||||
<img src="<c:out value = "${cdnurl}${photoByBbsctt.filCours}${photoByBbsctt.sysFilNm}"/>"
|
||||
onerror = "javascript:img=new Image();img.src='/pc/images/image_placeholder.png';
|
||||
if(img.complete){this.src='/pc/images/image_placeholder.png'}
|
||||
else{this.style.display='none';}" alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<c:if test = "${photoList.bbscttEvlUseAt eq 'Y'}">
|
||||
<div class="photoReviewDetail__rightBottom">
|
||||
<span class="photoReviewDetail__reviewAsk">리뷰가 도움이 되었나요?</span>
|
||||
<button class="userReviewItem__like"
|
||||
onclick="fn_update_bbsctt_recomend('recommend', '<c:out value="${photoList.bbscttInnb}"/>', this);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"
|
||||
fill="none">
|
||||
<path
|
||||
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"></path>
|
||||
</svg>
|
||||
<em class="recommendCnt">
|
||||
<c:out value = "${photoList.recomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
<c:if test = "${photoList.bbscttEvlRecomendStep eq '02'}">
|
||||
<button class="userReviewItem__like userReviewItem__like--dislike"
|
||||
onclick="fn_update_bbsctt_recomend('nonrecommend', '<c:out value="${photoList.bbscttInnb}"/>', this);" tabindex="0">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 20 20" fill="none">
|
||||
<path d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"></path>
|
||||
</svg>
|
||||
<em class="nonrecommendCnt">
|
||||
<c:out value = "${photoList.nonrecomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<%--전체보기--%>
|
||||
<div class="photoReviewGallery">
|
||||
<ul class="photoReviewGallery__list">
|
||||
<c:if test="${not empty resultMap.resultList.photoList}">
|
||||
<c:forEach var = "photoList1" items= "${resultMap.resultList.photoList}">
|
||||
<li class="photoReviewGallery__item">
|
||||
<button type="button" class="photoReviewGallery__image">
|
||||
<img src="<c:out value = "${cdnurl}${photoList1.filCours}${photoList1.sysFilNm}"/>"
|
||||
onerror = "javascript:img=new Image();img.src='/pc/images/image_placeholder.png';
|
||||
if(img.complete){this.src='/pc/images/image_placeholder.png'}
|
||||
else{this.style.display='none';}" alt="">
|
||||
<span class="photoReviewGallery__num"><c:out value = "${photoList1.fileCnt}"/></span>
|
||||
</button>
|
||||
</li>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
<li id = "last"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
124
src/main/webapp/WEB-INF/views/sopmal/goods/StorePickDtlR.jsp
Normal file
124
src/main/webapp/WEB-INF/views/sopmal/goods/StorePickDtlR.jsp
Normal 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 : StorePickDtlR.jsp
|
||||
Description : 리뷰 상세 모달
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
||||
<html lang="ko">
|
||||
<div id="storePick-pop" class="modal modal--photoReview" style="max-width: 1200px;">
|
||||
<div class="modal-content">
|
||||
<div class="storePickDetail">
|
||||
<div class="storePickDetail__top">
|
||||
<span class="storePickDetail__top__text">
|
||||
스토어 PICK 리뷰
|
||||
</span>
|
||||
<span class="storePickDetail__top__num">
|
||||
<span class="storePickDetail__currentIndex"></span>
|
||||
/<span class="storePickDetail__totalNum"><c:out value = "${resultMap.paginationInfo.totalRecordCount}"/></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="storePickDetail__slide">
|
||||
<c:forEach var="photoList" items="${resultMap.resultList.photoList}" varStatus="status">
|
||||
<c:set value="${photoList.sysFilNm}" var="sysFilNm"/>
|
||||
<div class="storePickDetail__item">
|
||||
<input type = "hidden" class= "bbscttInnb" value = "<c:out value="${photoList.bbscttInnb}"/>"/>
|
||||
<div class="storePickDetail__mainImage storePickMainImg">
|
||||
<c:if test = "${not empty photoList.filCours}">
|
||||
<img src="<c:out value="${cdnurl}${photoList.filCours}${photoList.sysFilNm}"/>"
|
||||
onerror = "javascript:img=new Image();img.src='/pc/images/image_placeholder.png';
|
||||
if(img.complete){this.src='/pc/images/image_placeholder.png'}
|
||||
else{this.style.display='none';}"/>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="storePickDetail__right storePickModal">
|
||||
<div class="storePickDetail__rightTop">
|
||||
<div class="storePickDetail__userImage">
|
||||
<img src="/pc/images/icon_user-info.png" alt="">
|
||||
</div>
|
||||
<div class="storePickDetail__top__info">
|
||||
<div class="reviewStars__wrapper--sm">
|
||||
<div class="reviewStars star-<fmt:formatNumber value="${photoList.evlScore}" pattern="##"/>"></div>
|
||||
<span class="reviewStars__num"><fmt:formatNumber value="${photoList.evlScore}" pattern="##"/></span>
|
||||
</div>
|
||||
<div class="storePickDetail__misc">
|
||||
<span class="storePick__misc__id"><c:out value="${photoList.regusrId}"/></span>
|
||||
<%--리뷰왕 여부--%>
|
||||
<c:if test="${photoList.rvwKingAt eq 'Y'}">
|
||||
<span class="storePick__misc__badge">리뷰왕</span>
|
||||
</c:if>
|
||||
<span class="storePick__misc__date"><c:out value="${photoList.registDt}"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="storePickDetail__reviewText storePickCn">
|
||||
<c:if test="${photoList.bstAt eq 'Y'}">
|
||||
<span class="reviewBadge reviewBadge--red">BEST</span>
|
||||
</c:if>
|
||||
<c:if test="${photoList.bbsTyCd eq '07'}">
|
||||
<span class="reviewBadge">한달사용기</span>
|
||||
</c:if>
|
||||
<c:out value="${photoList.cn}" escapeXml="false"/>
|
||||
</div>
|
||||
<div class="storePickDetail__thumbs storePickImage">
|
||||
<c:forEach var = "photoByBbsctt" items = "${resultMap.resultList.photoByBbsctt}">
|
||||
<c:if test = "${photoList.bbscttInnb eq photoByBbsctt.bbscttInnb}">
|
||||
<div class="storePickDetail__thumbs__item listImage <c:if test = "${sysFilNm eq photoByBbsctt.sysFilNm}">current</c:if>">
|
||||
<img src="<c:out value = "${cdnurl}${photoByBbsctt.filCours}"/><c:out value = "${photoByBbsctt.sysFilNm}"/>"
|
||||
onerror = "javascript:img=new Image();img.src='/pc/images/image_placeholder.png';if(img.complete){this.src='/pc/images/image_placeholder.png'} else{this.style.display='none';}"
|
||||
alt="">
|
||||
</div>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="storePickDetail__rightBottom">
|
||||
<c:if test = "${photoList.bbscttEvlUseAt eq 'Y'}">
|
||||
<span class="storePickDetail__reviewAsk">리뷰가 도움이 되었나요?</span>
|
||||
<button class="userReviewItem__like"
|
||||
onclick="fn_update_bbsctt_recomend('recommend', '<c:out value="${photoList.bbscttInnb}"/>', this);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"/>
|
||||
</svg>
|
||||
<em class="recommendCnt">
|
||||
<c:out value="${photoList.recomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
<c:if test = "${photoList.bbscttEvlRecomendStep eq '02'}">
|
||||
<button class="userReviewItem__like userReviewItem__like--dislike"
|
||||
onclick="fn_update_bbsctt_recomend('nonrecommend', '<c:out value="${photoList.bbscttInnb}"/>', this);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none">
|
||||
<path
|
||||
d="M14.7749 16.583H5.6756V7.41637L11.3711 1.75293L11.7012 1.8747C11.9266 2.03069 12.0992 2.22513 12.2188 2.45803C12.3385 2.69094 12.3705 2.93292 12.315 3.18399L12.2941 3.20803L11.5345 7.41637H17.2429C17.6115 7.41637 17.9269 7.54751 18.1892 7.8098C18.4515 8.07208 18.5826 8.38752 18.5826 8.75612V9.62308C18.5826 9.72351 18.5749 9.81351 18.5594 9.8931C18.5439 9.97269 18.5153 10.0558 18.4736 10.1423L16.1052 15.7185C15.9865 15.9829 15.8075 16.193 15.5682 16.349C15.3289 16.505 15.0645 16.583 14.7749 16.583ZM6.75891 15.4997H14.7749C14.8337 15.4997 14.8938 15.4837 14.9552 15.4516C15.0167 15.4195 15.0634 15.3661 15.0955 15.2913L17.4993 9.68718V8.75612C17.4993 8.68133 17.4753 8.61989 17.4272 8.5718C17.3791 8.52372 17.3177 8.49968 17.2429 8.49968H10.2461L11.1868 3.4532L6.75891 7.86508V15.4997ZM5.6756 7.41637V8.49968H2.49931V15.4997H5.6756V16.583H1.41602V7.41637H5.6756Z"
|
||||
fill="black"></path>
|
||||
</svg>
|
||||
<em class="nonrecommendCnt">
|
||||
<c:out value="${photoList.nonrecomendCnt}"/>
|
||||
</em>
|
||||
</button>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
160
src/main/webapp/WEB-INF/views/sopmal/goods/couponListPopupR.jsp
Normal file
160
src/main/webapp/WEB-INF/views/sopmal/goods/couponListPopupR.jsp
Normal file
@@ -0,0 +1,160 @@
|
||||
<%@ 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" %>
|
||||
|
||||
<script defer>
|
||||
|
||||
//쿠폰받기 가능한 쿠폰이 없을경우 버튼, 전체선택버튼 비활성화
|
||||
$(document).ready(function () {
|
||||
|
||||
let couponUsedChk = 0;
|
||||
$('div .couponSelect__item.used').each(() => {
|
||||
couponUsedChk++;
|
||||
});
|
||||
|
||||
if ($('div .couponSelect__item.coupon__used__chk').length === couponUsedChk) {
|
||||
$('#couponCheckAll').prop('disabled', true)
|
||||
$('#selectCouponBtn').prop('disabled', true)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
//쿠폰 선택 우측 텍스트 영역 클릭해도, 체크박스 체크되도록 2. 전체선택 클릭 시, 전체 체크박스 체크/해제
|
||||
$('.couponSelect__item__right').click(function () {
|
||||
var checkbox = $(this).prev().find('input[type="checkbox"]');
|
||||
checkbox.trigger('click');
|
||||
});
|
||||
|
||||
$('#couponCheckAll').click(function () {
|
||||
if ($('#couponCheckAll').is(':checked')) {
|
||||
$('.couponCheck').prop('checked', true);
|
||||
} else {
|
||||
$('.couponCheck').prop('checked', false);
|
||||
}
|
||||
|
||||
if ($('.couponCheck').closest('.couponSelect__item').hasClass('used')) {
|
||||
$('.couponCheck:checked').prop('checked', false);
|
||||
}
|
||||
});
|
||||
|
||||
$('.couponCheck').click(function () {
|
||||
if ($('.couponCheck').length == $('.couponCheck:checked').length) {
|
||||
$('#couponCheckAll').prop('checked', true);
|
||||
} else {
|
||||
$('#couponCheckAll').prop('checked', false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('')
|
||||
</script>
|
||||
|
||||
<!-- 쿠폰 받기 모달 -->
|
||||
<div id="coupon-select-popUp" class="modal default" style="max-width: 520px;">
|
||||
<div class="modal-header">
|
||||
<div class="modal-header__title">다운로드 가능한 쿠폰</div>
|
||||
</div>
|
||||
<div class="modal-content">
|
||||
<div class="couponSelect" id="dwldCouponDiv">
|
||||
<div class="couponSelect__item couponSelect__item--checkAll">
|
||||
<div class="couponSelect__item__left">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox">
|
||||
<input id="couponCheckAll" type="checkbox" value="">
|
||||
<span class="check"></span>
|
||||
<span class="control-label"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="couponSelect__item__right">
|
||||
<span class="couponSelect__item__checkAll">전체선택</span>
|
||||
</div>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultMap.couponList}">
|
||||
<c:forEach var="couponInfo" items="${resultMap.couponList}">
|
||||
<c:choose>
|
||||
<c:when test="${couponInfo.couponTrgetAt eq '1'}">
|
||||
<div class="couponSelect__item coupon__used__chk <c:if test="${couponInfo.couponDownAt eq 'Y' }"> used</c:if>"> <%--사용한 쿠폰이거나 이미 다운로드 하였을 경우 used 클래스 적용--%>
|
||||
<div class="couponSelect__item__left">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox is-medium">
|
||||
<input class="couponCheck dwldCheckBox" type="checkbox" value="">
|
||||
<span class="check"></span>
|
||||
<span class="control-label"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="couponSelect__item__right">
|
||||
<span class="couponSelect__item__price"><fmt:formatNumber value="${couponInfo.aditDscntAmt}" />원
|
||||
<c:if test="${couponInfo.couponDownAt eq 'Y'}"><span class="couponSelect__item__usedText">(이미 다운로드 한 쿠폰)</span></c:if>
|
||||
</span>
|
||||
<p class="couponSelect__item__detail"><c:out value="${couponInfo.couponSndngNm}"/> </p>
|
||||
<c:choose>
|
||||
<c:when test="${couponInfo.cvalidpdKndCd eq '01'}">
|
||||
<p class="couponSelect__item__date">~<c:out value="${couponInfo.validpdEndDt}"/> (<c:out value="${couponInfo.validpdDeCnt}"/> 일 남음)</p>
|
||||
<input type="hidden" name="couponInnb" value="<c:out value="${ couponInfo.couponInnb }"/>"/>
|
||||
<input type="hidden" name="couponSopmalCd" value="<c:out value="${ couponInfo.sopmalCd }"/>"/>
|
||||
<input type="hidden" name="couponSndngInnb" value="<c:out value="${ couponInfo.couponSndngInnb }"/>"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p class="couponSelect__item__date">~<c:out value="${couponInfo.dwldEndDt}"/> (발급(다운로드)일로 부터 <c:out value="${couponInfo.validpdDeCnt}"/> 일)</p>
|
||||
<input type="hidden" name="couponInnb" value="<c:out value="${ couponInfo.couponInnb }"/>"/>
|
||||
<input type="hidden" name="couponSopmalCd" value="<c:out value="${ couponInfo.sopmalCd }"/>"/>
|
||||
<input type="hidden" name="couponSndngInnb" value="<c:out value="${ couponInfo.couponSndngInnb }"/>"/>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<div class="couponSelect__item used">
|
||||
<div class="couponSelect__item__left">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox checkbox is-medium">
|
||||
<input class="couponCheck dwldCheckBox" type="checkbox" value="">
|
||||
<span class="check"></span>
|
||||
<span class="control-label"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="couponSelect__item__right">
|
||||
<span class="couponSelect__item__price"><fmt:formatNumber value="${couponInfo.aditDscntAmt}" />원
|
||||
<span class="couponSelect__item__usedText">쿠폰 대상이 아닙니다</span>
|
||||
</span>
|
||||
<p class="couponSelect__item__detail"><c:out value="${couponInfo.couponSndngNm}"/> </p>
|
||||
<c:choose>
|
||||
<c:when test="${couponInfo.cvalidpdKndCd eq '01'}">
|
||||
<p class="couponSelect__item__date">~<c:out value="${couponInfo.validpdEndDt}"/> (<c:out value="${couponInfo.validpdDeCnt}"/> 일 남음)</p>
|
||||
<input type="hidden" name="couponInnb" value="<c:out value="${ couponInfo.couponInnb }"/>"/>
|
||||
<input type="hidden" name="couponSopmalCd" value="<c:out value="${ couponInfo.sopmalCd }"/>"/>
|
||||
<input type="hidden" name="couponSndngInnb" value="<c:out value="${ couponInfo.couponSndngInnb }"/>"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p class="couponSelect__item__date">~<c:out value="${couponInfo.dwldEndDt}"/> (발급(다운로드)일로 부터 <c:out value="${couponInfo.validpdDeCnt}"/> 일)</p>
|
||||
<input type="hidden" name="couponInnb" value="<c:out value="${ couponInfo.couponInnb }"/>"/>
|
||||
<input type="hidden" name="couponSopmalCd" value="<c:out value="${ couponInfo.sopmalCd }"/>"/>
|
||||
<input type="hidden" name="couponSndngInnb" value="<c:out value="${ couponInfo.couponSndngInnb }"/>"/>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<c:out value="다운로드 가능한 쿠폰이 없습니다."/>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" rel="modal:close" class="btn large outline">닫기</a>
|
||||
<button class="btn theme large" id="selectCouponBtn" type="button" onclick="fn_coupon_dwld_regist();">선택한 쿠폰 받기</button>
|
||||
</div>
|
||||
</div>
|
||||
33
src/main/webapp/WEB-INF/views/sopmal/goods/loginPopR.jsp
Normal file
33
src/main/webapp/WEB-INF/views/sopmal/goods/loginPopR.jsp
Normal file
@@ -0,0 +1,33 @@
|
||||
<%@ 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 : StorePickDtlR.jsp
|
||||
Description : 리뷰 상세 모달
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-05 김혜인
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<!--권한 reject-->
|
||||
<div id="qna-pop-regist" class="modal alert">
|
||||
<div class="alert-content">
|
||||
<p class="alert-content__text--sm">
|
||||
이용하시려면 로그인이 필요합니다!
|
||||
<br>
|
||||
로그인하시겠습니까?
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert-btn-container">
|
||||
<a class="alert-btn alert-btn--confirm" onclick = "fn_move_login()" style="cursor:pointer"><spring:message code="button.yes"/></a>
|
||||
<a href="#" rel="modal:close" class="alert-btn"><spring:message code="button.no"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
Reference in New Issue
Block a user