diff --git a/src/main/resources/mybatis/xml/mapper/gcone/goods/subsvc/BOSubsvcMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/goods/subsvc/BOSubsvcMapper.xml
index 7eca7582..c4c4b68d 100644
--- a/src/main/resources/mybatis/xml/mapper/gcone/goods/subsvc/BOSubsvcMapper.xml
+++ b/src/main/resources/mybatis/xml/mapper/gcone/goods/subsvc/BOSubsvcMapper.xml
@@ -74,60 +74,61 @@
, CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM
FROM (
SELECT COUNT(*) OVER() AS TOT_CNT
- , GC.SUBSVC_INNB
- , GC.SOPMAL_CD
- , GC.SUBSVC_NM
- , GC.SUBSVC_GNR
- , GC.SUBSVC_GNR_NM
- , GC.DLVY_CNT
- , GC.INVNTRY_QY
- , GC.INVNTRY_QY - GC.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
- , GC.SUBSVC_STTUS_CD
- , FN_GET_COMMCODE_NAME('GOODS_STTUS', GC.SUBSVC_STTUS_CD) AS SUBSVC_STTUS /*구독서비스 상태*/
- , FN_GET_COMMCODE_NAME('EXPSR_DV', GC.EXPSR_DV_CD) AS EXPSR_DV /*노출구분*/
- , GC.SUBSVC_CT /*구독료*/
- , GC.TME_DLVY_AMT /*1회배송비*/
- , GC.CNSMRPRIC /*소비자가*/
- , GC.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
- , GC.IMG /*섬네일 이미지*/
- , GC.LAST_PROCS_ODR /*최종차수*/
- FROM GC_SUBSVC GC
- WHERE GC.USE_AT = 'Y'
- AND GC.SOPMAL_CD = #{sopmalCd}
+ , GS.SUBSVC_INNB
+ , GS.SOPMAL_CD
+ , CONCAT(GS.SUBSVC_NM, ' (', GS.SUBSVC_GNR_NM, ')') AS SUBSVC_CONCAT_NM
+ , GS.SUBSVC_NM
+ , GS.SUBSVC_GNR
+ , GS.SUBSVC_GNR_NM
+ , GS.DLVY_CNT
+ , GS.INVNTRY_QY
+ , GS.INVNTRY_QY - GS.USEFUL_INVNTRY_QY AS AVAIL_QT /*가용제고*/
+ , GS.SUBSVC_STTUS_CD
+ , FN_GET_COMMCODE_NAME('GOODS_STTUS', GS.SUBSVC_STTUS_CD) AS SUBSVC_STTUS /*구독서비스 상태*/
+ , FN_GET_COMMCODE_NAME('EXPSR_DV', GS.EXPSR_DV_CD) AS EXPSR_DV /*노출구분*/
+ , GS.SUBSVC_CT /*구독료*/
+ , GS.TME_DLVY_AMT /*1회배송비*/
+ , GS.CNSMRPRIC /*소비자가*/
+ , GS.SUBSVC_CT + (TME_DLVY_AMT * DLVY_CNT) as SELPRIC /*실판매가=구독료+(1회배송비X배송횟수)*/
+ , GS.IMG /*섬네일 이미지*/
+ , GS.LAST_PROCS_ODR /*최종차수*/
+ FROM GC_SUBSVC GS
+ WHERE GS.USE_AT = 'Y'
+ AND GS.SOPMAL_CD = #{sopmalCd}
- AND GC.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
+ AND GS.SUBSVC_NM = #{srchSelSubsvcNm} /*구독서비스 명*/
- AND GC.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
+ AND GS.SUBSVC_GNR = #{srchSelSubsvcGnr} /*기수*/
- AND GC.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
+ AND GS.SUBSVC_NM LIKE CONCAT('%',#{srchSubsvcNm},'%') /*구독서비스 명*/
- AND GC.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
+ AND GS.SUBSVC_GNR_NM LIKE CONCAT('%',#{srchSubsvcGnrNm},'%') /*기수명*/
/*판매상태*/
- AND GC.SUBSVC_STTUS_CD IN
+ AND GS.SUBSVC_STTUS_CD IN
#{subsvcSttusCd}
- AND GC.EXPSR_DV_CD = #{srchExpsrDvCd} /*노출여부*/
+ AND GS.EXPSR_DV_CD = #{srchExpsrDvCd} /*노출여부*/
ORDER BY
- GC.SUBSVC_NM ASC, SUBSVC_GNR ASC,
+ GS.SUBSVC_NM ASC, SUBSVC_GNR ASC,
- GC.SUBSVC_NM DESC, SUBSVC_GNR DESC,
+ GS.SUBSVC_NM DESC, SUBSVC_GNR DESC,
- GC.SUBSVC_INNB ASC
+ GS.SUBSVC_INNB ASC
) TB
WHERE (@ROWNUM:=0)=0
) PV
diff --git a/src/main/webapp/WEB-INF/views/sopmal/main/SubscribeR.jsp b/src/main/webapp/WEB-INF/views/sopmal/main/SubscribeR.jsp
index 73827211..5515a442 100644
--- a/src/main/webapp/WEB-INF/views/sopmal/main/SubscribeR.jsp
+++ b/src/main/webapp/WEB-INF/views/sopmal/main/SubscribeR.jsp
@@ -16,6 +16,7 @@
+
@@ -23,12 +24,14 @@
$(document).ready(function() {
var subsvcInnb = $('#subsvcInnb').val();
fn_select_subsvcDetail(subsvcInnb);
+ fn_scroll_event();
});
/******************************************************
* 구독서비스 상세 조회
* ****************************************************/
const fn_select_subsvcDetail = function(subsvcInnb) {
+ var cdnurl = '${cdnurl}';
var curUnit = '${curUnit}';
$.ajax({
@@ -49,15 +52,23 @@
$('#dscntRaito').text(data.dscntRaito + '%');
$('#subsvcDc').html(data.subsvcDc);
+ $("#fixedImg").attr("src", cdnurl + data.img);
+ $('#fixedTitle').text(data.subsvcConcatNm);
+ $('#fixedPrice').text(fn_format_number(data.selpric));
+
switch (data.subsvcSttusCd) {
case '01':
$('#subscribeBtn').text('구독하기');
$('#subscribeBtn').prop('disabled', false);
+ $('#fixedButton').text('구독하기');
+ $('#fixedButton').prop('disabled', false);
break;
case '02':
case '03':
$('#subscribeBtn').text(data.subsvcSttus);
$('#subscribeBtn').prop('disabled', true);
+ $('#fixedButton').text(data.subsvcSttus);
+ $('#fixedButton').prop('disabled', true);
break;
default:
break;
@@ -69,6 +80,47 @@
const fn_format_number = function(number) {
return Number(number).toLocaleString();
}
+
+ /*************************************************************
+ 탭, 스크롤 이벤트
+ **************************************************************/
+ const fn_scroll_event = () => {
+ function handleTabScroll() {
+ var scrollTop = $(window).scrollTop();
+ var fixedTabHeight = 100;
+ var initialProductDetailTop = $('#subsvcDc').offset().top;
+
+ var threshold = initialProductDetailTop - fixedTabHeight;
+
+ if (scrollTop > threshold) {
+ if (!$(".productDetailTab").hasClass("fixed")) {
+ $(".productDetailTab").addClass("fixed");
+ $(".fixedProduct").addClass("fixed");
+ $('#subsvcDc').css("margin-top", 62 + "px");
+ }
+ } else {
+ if ($(".productDetailTab").hasClass("fixed")) {
+ $(".productDetailTab").removeClass("fixed");
+ $(".fixedProduct").removeClass("fixed");
+ $('#subsvcDc').css("margin-top", "");
+ }
+ }
+ }
+
+ var debounce = function (func, delay) {
+ var timer;
+ return function () {
+ var context = this,
+ args = arguments;
+ clearTimeout(timer);
+ timer = setTimeout(function () {
+ func.apply(context, args);
+ }, delay);
+ };
+ };
+
+ $(window).scroll(debounce(handleTabScroll, 20));
+ }
<%-- 공통 Header --%>
@@ -167,7 +223,25 @@
구독 서비스 상품 준비중
-
+
+
+
+
+
![상품이미지]()
+
+
+
상품명
+
+ 상품가격
+ ${curUnit}
+
+
+
+
+
+
+
+
구독 서비스 상품 설명