GoodsDetailFormWeb.html 93 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org"
  4. xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  5. layout:decorator="web/common/layout/DefaultLayoutWeb">
  6. <!--
  7. *******************************************************************************
  8. * @source : GoodsDetailFormWeb.html
  9. * @desc : 상품상세 Page
  10. *============================================================================
  11. * STYLE24
  12. * Copyright(C) 2020 TSIT, All rights reserved.
  13. *============================================================================
  14. * VER DATE AUTHOR DESCRIPTION
  15. * === =========== ========== =============================================
  16. * 1.0 2021.03.02 eskim 최초 작성
  17. *******************************************************************************
  18. -->
  19. <body>
  20. <th:block layout:fragment="content">
  21. <div id="container" class="container pd" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
  22. <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
  23. <!-- <th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsNaviForm}"></th:block> -->
  24. <div class="wrap">
  25. <!-- 상품 대표설명 -->
  26. <div class="content pd_detail">
  27. <div class="cont_head">
  28. <h3 class="sr-only">상품 대표설명</h3>
  29. </div>
  30. <div class="cont_body">
  31. <!-- CONT-BODY -->
  32. <div class="item_detail">
  33. <div class="area_pic" th:if="${(goodsImgList != null and !goodsImgList.empty) or (goodsVideoList != null and !goodsVideoList.empty)}"
  34. th:with="videoYn=${(goodsVideoList != null and !goodsVideoList.empty)? 'Y' :'N'}">
  35. <div class="thumb_nav_wrap" >
  36. <div class="thumbnav">
  37. <div class="swiper-container" >
  38. <div class="swiper-wrapper">
  39. <th:block th:each="goodsVideo, status : ${goodsVideoList}">
  40. <div class="swiper-slide" th:classappend="${status.first}? 'on' : ''" >
  41. <a th:href="${'#navLocate'+ status.count}">
  42. <span class="thumb mov">
  43. <th:block th:if="${goodsVideo.videoGb == 'Y'}">
  44. <img th:src="${'https://img.youtube.com/vi/'+goodsVideo.kmcKey+'/default.jpg'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  45. </th:block>
  46. <th:block th:unless="${goodsVideo.videoGb == 'Y'}">
  47. <iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
  48. </th:block>
  49. </span>
  50. </a>
  51. </div>
  52. </th:block>
  53. <th:block th:each="goodsImg, status : ${goodsImgList}">
  54. <div class="swiper-slide" th:classappend="${status.first and videoYn == 'N'}? 'on' : ''" th:with="count=${(videoYn == 'Y')? (status.count +1): status.count }"
  55. th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1')
  56. or #strings.contains(goodsImg.sysImgNm,'_L1')
  57. or #strings.contains(goodsImg.sysImgNm,'_L2'))}">
  58. <a th:href="${'#navLocate'+ count}">
  59. <span class="thumb">
  60. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=48'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  61. </span>
  62. </a>
  63. </div>
  64. </th:block>
  65. </div>
  66. </div>
  67. <div class="swiper-button-next"></div>
  68. <div class="swiper-button-prev"></div>
  69. </div>
  70. </div>
  71. <div class="thumb_list_wrap">
  72. <ul>
  73. <th:block th:each="goodsVideo, status : ${goodsVideoList}">
  74. <li th:id="${'navLocate'+ status.count}" th:classappend="${status.first}? 'on' : ''">
  75. <div class="movbox">
  76. <th:block th:if="${goodsVideo.videoGb == 'Y'}">
  77. <iframe id="prodctThumbVideo" class="pd_mov" width="100%" height="100%" th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0&autoplay=1&mute=1'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
  78. </th:block>
  79. <th:block th:unless="${goodsVideo.videoGb == 'Y'}">
  80. <iframe id="prodctThumbVideo" class="pd_mov" width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?enable_initialize_focus=false&autoplay&mute&controls_activation=none'}" frameborder="0" allowfullscreen></iframe>
  81. </th:block>
  82. </div>
  83. </li>
  84. </th:block>
  85. <th:block th:each="goodsImg, status : ${goodsImgList}" >
  86. <th:block th:with="count=${(videoYn == 'Y')? (status.count +1): status.count }">
  87. <li th:id="${'navLocate'+ count}" th:classappend="${status.first and videoYn == 'N'}? 'on' : ''"
  88. th:if="${ not (#strings.contains(goodsImg.sysImgNm,'_S1')
  89. or #strings.contains(goodsImg.sysImgNm,'_L1')
  90. or #strings.contains(goodsImg.sysImgNm,'_L2'))}">
  91. <a href="javascript:void(0);">
  92. <span class="thumb">
  93. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=1080'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  94. </span>
  95. </a>
  96. </li>
  97. </th:block>
  98. </th:block>
  99. </ul>
  100. </div>
  101. </div>
  102. <form name="cartForm" id="cartForm" method="post">
  103. <input type="hidden" name="mode">
  104. <input type="hidden" name="goodsCd" th:value="${params.goodsCd}" />
  105. <input type="hidden" name="contentsLoc" th:value="${params.contentsLoc}" />
  106. <input type="hidden" name="ithrCd" th:value="${params.ithrCd}" />
  107. <input type="hidden" name="planDtlSq" th:value="${params.planDtlSq}" />
  108. <input type="hidden" name="adminYn" th:value="${params.adminYn}" />
  109. <input type="hidden" name="optCd" />
  110. <input type="hidden" name="optCd1" />
  111. <input type="hidden" name="optCd2" />
  112. <input type="hidden" name="addPrice" />
  113. <input type="hidden" name="ordQty" />
  114. <input type="hidden" name="stock" />
  115. <input type="hidden" name="minOrdQty"/>
  116. <input type="hidden" name="maxOrdQty"/>
  117. <input type="hidden" name="goodsType" th:value="${goodsInfo.goodsType}"/>
  118. <input type="hidden" name="selfGoodsYn" th:value="${goodsInfo.selfGoodsYn}"/>
  119. <div class="area_desc">
  120. <div class="desc_wrap">
  121. <div class="timer_box" style="display:none;">
  122. <p>
  123. <span class="tit">남은시간</span>
  124. <span class="timer">
  125. <em id="d-hours">0</em>
  126. <em id="d-minutes">0</em>
  127. <em id="d-seconds">0</em>
  128. </span>
  129. </p>
  130. </div>
  131. <div class="descript_box">
  132. <div class="desc_top">
  133. <a href="javascript:void(0);" class="btn_brand" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" th:text="${goodsInfo.brandGroupNm}">NBA 키즈</a>
  134. <div class="shareSet">
  135. <button class="btn_share" data-name="openShare">공유하기</button>
  136. <th:block th:include="~{web/goods/GoodsIncludeFormWeb :: goodsSnsForm}"></th:block>
  137. </div>
  138. <button type="button" class="itemLike" th:classappend="${goodsInfo.wishYn == 'Y'}? 'likeit' : ''" onclick="cfnPutWishList(this);" th:attr="goodsCd=${params.goodsCd}, ithrCd=${params.ithrCd}, contentsLoc=${params.contentsLoc}, planDtlSq=${params.planDtlSq}">관심상품 추가</button>
  139. </div>
  140. <div class="desc_info">
  141. <div class="title_blk">
  142. <span class="codenumber" th:text="${goodsInfo.goodsCd}">
  143. N204TJ112P
  144. </span>
  145. <span class="comment" th:text="${goodsInfo.goodsTnm}">
  146. #가을 느낌 물씬!
  147. </span>
  148. <span class="name" th:text="${goodsInfo.goodsFullNm}">
  149. 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업 유니 삼단블록 플리스 집업
  150. </span>
  151. </div>
  152. <div class="price_blk">
  153. <span class="sale_percent" th:if="${goodsInfo.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsInfo.dcRate,0,0)}%|">
  154. 5%
  155. </span>
  156. <span class="sale_price" >
  157. <em th:text="${#numbers.formatInteger(goodsInfo.currPrice, 0,'COMMA')}">134,100</em>원
  158. </span>
  159. <del class="org_price" th:if="${goodsInfo.listPrice > goodsInfo.currPrice}" >
  160. <em th:text="${#numbers.formatInteger(goodsInfo.listPrice, 0,'COMMA')}">149,000</em>원
  161. </del>
  162. <span class="save_point" th:if="${goodsInfo.pntAmt > 0}">
  163. 스타일포인트 <th:block th:text="${#numbers.formatInteger(goodsInfo.pntAmt, 0,'COMMA')}"></th:block>P 적립예정
  164. </span>
  165. <button type="button" id="btn_saleCoupon_pop" class="btn btn_primary btn_sm btn_coupon" th:if="${goodsCouponList != null and !goodsCouponList.empty}" th:onclick="cfGoodsCouponInfo([[${goodsInfo.goodsCd}]],[[${goodsInfo.goodsType}]])"><span>쿠폰받기</span></button>
  166. </div>
  167. </div>
  168. <div class="desc_status" th:if="${not #strings.isEmpty(goodsInfo.delvResDt) }">
  169. <p>예약판매 상품 - <th:block th:text="${goodsInfo.delvResDt}"></th:block> 출고예정</p>
  170. </div>
  171. </div>
  172. <div class="benefit_box" th:if="${(cardInfoList != null and !cardInfoList.empty) or
  173. (goodsCouponList != null and !goodsCouponList.empty) or
  174. (tmtbList != null and !tmtbList.empty) or
  175. (freeGoodsList != null and !freeGoodsList.empty)}" >
  176. <dl>
  177. <div class="bnf_shopping" th:if="${(goodsCouponList != null and !goodsCouponList.empty) or
  178. (tmtbList != null and !tmtbList.empty) or
  179. (freeGoodsList != null and !freeGoodsList.empty)}" >
  180. <dt>쇼핑혜택</dt>
  181. <dd>
  182. <span th:if="${goodsCouponList != null and !goodsCouponList.empty}">
  183. <th:block th:each="goodsCoupon, status : ${goodsCouponList}" th:if="${status.first}">
  184. 최대 <em class="c_primary" >
  185. <th:block th:if="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${#numbers.formatInteger(goodsCoupon.dcVal, 0,'COMMA')}원|"></th:block>
  186. <th:block th:unless="${goodsCoupon.dcWay == 'G240_10'}" th:text="|${goodsCoupon.dcVal}%|"></th:block>
  187. </em> 쿠폰 할인
  188. </th:block>
  189. </span>
  190. <span th:if="${tmtbList != null and !tmtbList.empty}">
  191. <th:block th:each="tmtb, status : ${tmtbList}" th:if="${status.first}">
  192. <em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.sectionVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.sectionGb == 'G810_10')? '개':'금액'}"></th:block></em> 이상 구매 시
  193. <em class="c_primary"><th:block th:text="${#numbers.formatInteger(tmtb.dcVal, 0,'COMMA')}"></th:block><th:block th:text="${(tmtb.dcWay == 'G240_10')? '원':'%'}"></th:block></em></em> 할인
  194. </th:block>
  195. </span>
  196. <span th:if="${freeGoodsList != null and !freeGoodsList.empty}">
  197. <th:block th:each="freeGoods, status : ${freeGoodsList}" th:if="${status.first}">
  198. <th:block th:text="${freeGoods.goodsNm}"></th:block> 증정 <th:block th:if="${freeGoods.allYn == 'N'}" th:text="${'외 택1'}"></th:block></span>
  199. <button type="button" id="btn_bnfShopping_pop" class="btn_popup" th:onclick="cfGoodsShopBenefitInfo([[${goodsInfo.goodsCd}]])"><span>자세히</span></button>
  200. </dd>
  201. </div>
  202. <div class="bnf_card" th:if="${cardInfoList != null and !cardInfoList.empty}">
  203. <dt>카드혜택</dt>
  204. <dd>
  205. <th:block th:each="cardInfo, status : ${cardInfoList}">
  206. <span th:if="${cardInfo.prmtGb == 'A' and cardInfo.dcGb != '3'}"><th:block th:text="${cardInfo.prmtTargetNm}"></th:block> <em class="c_primary"><th:block th:text="${#numbers.formatInteger(cardInfo.dcVal, 0,'COMMA')+ cardInfo.dcWayNm}"></th:block></em> <th:block th:text="${cardInfo.prmtGbNm}"></span>
  207. <span th:if="${cardInfo.prmtGb == 'A' and cardInfo.dcGb == '3'}" th:text="${cardInfo.prmtNm}">프로모션명</span>
  208. <span th:if="${cardInfo.prmtGb == 'B'}">신용카드 무이자 혜택</span>
  209. </th:block>
  210. <button type="button" id="btn_bnfCard_pop" class="btn_popup" onclick="cfCardInfo();return false;"><span>자세히</span></button>
  211. </dd>
  212. </div>
  213. </dl>
  214. </div>
  215. <div class="option_box">
  216. <th:block th:if="${goodsInfo.selfGoodsYn =='Y' }"> <!-- 자사상품 -->
  217. <th:block th:if="${goodsInfo.goodsType =='G056_N' }"> <!-- 일반상품 -->
  218. <div class="opt_color" th:if="${goodsOption1List != null and !goodsOption1List.empty}" >
  219. <div class="opt_header">
  220. <span class="title">컬러</span>
  221. <span class="color" th:text="${goodsInfo.colorNm}">그레이</span>
  222. </div>
  223. <ul >
  224. <li th:each="goodsOption1, status : ${goodsOption1List}">
  225. <a href="javascript:void(0);" th:class="${params.colorCd == goodsOption1.optCd1}? 'on':''" th:onclick="cfnGoToGoodsDetail([[${goodsInfo.goodsCd}]], [[${goodsOption1.optCd1}]])"> <!-- 해당 컬러 상품페이지로 이동 -->
  226. <img th:src="${imgGoodsUrl+'/'+goodsOption1.sysImgNm +'?RS=64'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  227. </a>
  228. </li>
  229. </ul>
  230. </div>
  231. <div class="opt_size" th:if="${goodsOption2List != null and !goodsOption2List.empty}" >
  232. <div class="opt_header">
  233. <span class="title">사이즈</span>
  234. <span class="size">
  235. <em class="selectOptCd1"></em>
  236. <em class="selectOptCd1addPrice"></em>
  237. </span>
  238. <button type="button" id="btn_infoSize_pop" class="btn_popup" th:onclick="cfGoodsSizeInfo([[${goodsInfo.goodsCd}]],[[${goodsInfo.colorCd}]] )"><span>사이즈정보</span></button>
  239. </div>
  240. <div class="form_field">
  241. <div th:each="goodsOption2, status : ${goodsOption2List}">
  242. <input type="radio" name="opt" th:id="${goodsOption2.optCd}" th:disabled="${goodsOption2.soldoutYn == 'Y' or goodsOption2.stockQty <= 0}"
  243. th:attr="addPrice=${goodsOption2.addPrice}, optCd1=${goodsOption2.optCd1}, optCd2=${goodsOption2.optCd2}, optCd=${goodsOption2.optCd}"
  244. th:onclick="fnViewStock(this, [[${goodsInfo.goodsCd}]],[[${goodsOption2.optCd}]],[[${goodsOption2.optCd1}]],[[${goodsOption2.optCd2}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]] )" />
  245. <label th:for="${goodsOption2.optCd}"><span th:text="${goodsOption2.optCd2}" >100</span></label>
  246. </div>
  247. </div>
  248. </div>
  249. </th:block>
  250. <th:block th:if="${goodsInfo.goodsType =='G056_S' }"> <!-- 세트상품 -->
  251. <div class="opt_set_select" th:if="${goodsComposeList != null and !goodsComposeList.empty}" >
  252. <th:block th:each="goodsCompose, status : ${goodsComposeList}">
  253. <div class="set_option">
  254. <div class="opt_header">
  255. <span class="title" th:text="${goodsCompose.compsGoodsFullNm}">옵션</span>
  256. <button type="button" id="btn_infoSize_pop" class="btn_popup" th:onclick="cfGoodsSizeInfo([[${goodsCompose.compsGoodsCd}]],[[${goodsCompose.colorCd}]] )"><span>사이즈정보</span></button>
  257. </div>
  258. <div class="form_field">
  259. <div class="select_custom item_opt1" th:classappend="${'item_opt1_'+status.count +' '+goodsCompose.compsGoodsCd}"
  260. th:if="${goodsCompose.goodsOption1List != null and !goodsCompose.goodsOption1List.empty}" >
  261. <div class="combo">
  262. <div class="select">옵션1선택</div>
  263. <ul class="list">
  264. <th:block th:each="goodsOption, optionStatus : ${goodsCompose.goodsOption1List}" >
  265. <li th:onclick="fnOption2([[${status.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],[[${goodsCompose.qty}]],[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])"
  266. th:attr="aria-disabled=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}, data-soldout=${(goodsCompose.goodsStat != 'G008_90')? 'true':''}"
  267. >
  268. <div th:text="${goodsOption.optCd1Nm}">상품옵션</div>
  269. <div th:if="${goodsOption.addPrice > 0}" th:text="|+${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
  270. <input type="hidden" name="opt" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
  271. </li>
  272. </th:block>
  273. </ul>
  274. </div>
  275. </div>
  276. </div>
  277. <div class="form_field" th:id="${'form_field2_'+goodsCompose.compsGoodsCd}">
  278. <div class="select_custom item_opt2" th:classappend="${'item_opt2_'+status.count +' '+goodsCompose.compsGoodsCd}" disabled>
  279. <div class="combo">
  280. <div class="select">옵션2선택</div>
  281. <ul class="list" th:id="|goodsOpt2${goodsCompose.compsGoodsCd}|" >
  282. <!-- 옵션2 -->
  283. </ul>
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. </th:block>
  289. </div>
  290. </th:block>
  291. </th:block>
  292. <th:block th:if="${goodsInfo.selfGoodsYn =='N' }"> <!-- 입점상품 -->
  293. <div class="opt_select" th:if="${goodsOption1List != null and !goodsOption1List.empty}">
  294. <div class="opt_header">
  295. <span class="title">옵션</span>
  296. <button type="button" id="btn_infoSize_pop" class="btn_popup" th:onclick="cfGoodsSizeInfo([[${goodsInfo.goodsCd}]],[[${goodsInfo.colorCd}]] )"><span>사이즈정보</span></button>
  297. </div>
  298. <div class="form_field">
  299. <div class="select_custom item_opt1 item_opt1_1" th:classappend="${goodsInfo.goodsCd}" >
  300. <div class="combo">
  301. <div class="select">옵션1선택</div>
  302. <ul class="list">
  303. <th:block th:each="goodsOption, optionStatus : ${goodsOption1List}" >
  304. <li th:onclick="fnOption2([[${optionStatus.count}]], [[${goodsOption.goodsCd}]],[[${goodsOption.optCd1}]],1,[[${goodsInfo.minOrdQty}]], [[${goodsInfo.maxOrdQty}]])">
  305. <div th:text="${goodsOption.optCd1}">상품옵션</div>
  306. <div th:if="${goodsOption.addPrice > 0}" th:text="|+${#numbers.formatInteger(goodsOption.addPrice, 0,'COMMA')}원|">0원</div>
  307. <input type="hidden" name="opt" th:attr="addPrice=${goodsOption.addPrice}, optCd1=${goodsOption.optCd1},optCd2=${goodsOption.optCd2}, optCd=${goodsOption.optCd}"/>
  308. </li>
  309. </th:block>
  310. </ul>
  311. </div>
  312. </div>
  313. </div>
  314. <div class="form_field" th:id="${'form_field2_'+goodsInfo.goodsCd}">
  315. <div class="select_custom item_opt2 item_opt2_1" th:classappend="${goodsInfo.goodsCd}" disabled>
  316. <div class="combo">
  317. <div class="select">옵션2선택</div>
  318. <ul class="list" th:id="|goodsOpt2${goodsInfo.goodsCd}|" >
  319. <!-- 옵션2 -->
  320. </ul>
  321. </div>
  322. </div>
  323. </div>
  324. </div>
  325. </th:block>
  326. <!-- 해당 상품 품절시 노출 -->
  327. <div class="info_restock" style="display:none;">
  328. <a href="javascript:void(0);" id="btn_pushRestock_pop" class="btn_popup" th:onclick="cfGoodsInstockAlarmInfo([[${goodsInfo.goodsCd}]], [[${goodsInfo.colorCd}]])">재입고 시 알림을 받아보세요</a>
  329. </div>
  330. <!-- //해당 상품 품절시 노출 -->
  331. <div class="opt_count">
  332. <div class="opt_header">
  333. <span class="title">수량</span>
  334. </div>
  335. <div class="number_count">
  336. <span class="minus min_val" onclick="fnAdjustOrderEa(this);" adjust="-"><em class="sr-only">감소</em></span>
  337. <input type="text" name="cea" maxlength="3" style="ime-mode:disabled" th:value="${goodsInfo.minOrdQty}" readonly >
  338. <input type="hidden" name="coption" value="" th:attr="price=${goodsInfo.currPrice}">
  339. <span class="plus" onclick="fnAdjustOrderEa(this);" adjust="+"><em class="sr-only">추가</em></span>
  340. </div>
  341. </div>
  342. </div>
  343. <div class="price_box" style="display:none;">
  344. <p class="number">
  345. 총&nbsp;<span id="goodsTotalQty">0</span>개
  346. </p>
  347. <p class="price">
  348. <span>
  349. <b id="goodsTotalPrice">0</b><em>원</em>
  350. </span>
  351. </p>
  352. </div>
  353. <div class="btn_box">
  354. <div class="btn_group_block ui_row">
  355. <th:block th:if="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
  356. <div class="ui_col_6">
  357. <button type="button" class="btn btn_dark btn_block" id="btnGoodsWish" onclick="fnAddCart('C');"><span>쇼핑백</span></button>
  358. </div>
  359. <div class="ui_col_6">
  360. <button type="button" class="btn btn_primary btn_block" id="btnGoodsCart" onclick="fnAddCart('O');"><span>바로구매</span></button>
  361. </div>
  362. </th:block>
  363. <th:block th:unless="${goodsInfo.stockQty > 0 and goodsInfo.goodsStat == 'G008_90'}">
  364. <div class="ui_col_12">
  365. <button type="button" class="btn btn_dark btn_block" disabled=""><span>SOLD OUT</span></button>
  366. </div>
  367. </th:block>
  368. </div>
  369. </div>
  370. <div style="margin-top:10px;">
  371. <th:block th:with="buttonKey=${@environment.getProperty('naverPay.button.key')}">
  372. <script type="text/javascript" src="http://pay.naver.com/customer/js/naverPayButton.js" charset="UTF-8"></script>
  373. <script type="text/javascript" >
  374. /*버튼설정*/
  375. naver.NaverPayButton.apply({
  376. BUTTON_KEY : "[[${buttonKey}]]", // 네이버페이에서 제공받은 버튼 인증 키 입력
  377. TYPE : "C", // 버튼 모음 종류 설정
  378. COLOR : 1, // 버튼 모음의 색 설정
  379. COUNT : 1, // 버튼 개수 설정. 구매하기 버튼만 있으면(장바구니 페이지) 1, 찜하기 버튼도 있으면(상품 상세 페이지) 2를 입력.
  380. ENABLE : "Y", // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
  381. BUY_BUTTON_HANDLER : buy_nc, // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
  382. "":""
  383. });
  384. /*네이버구매하기*/
  385. function buy_nc(url) {
  386. let goodsCd = "[[${goodsInfo.goodsCd}]]";
  387. let optCd = $(".opt_size .form_field input[type=radio]:checked").attr("optcd");
  388. let goodsQty = $(".opt_count .number_count input[name=cea]").val();
  389. let goodsType = "[[${goodsInfo.goodsType}]]";
  390. if(goodsType == "G056_N") {
  391. if (!goodsCd) {
  392. mcxDialog.alert("상품정보가 존재하지 않습니다. 새로고침 후 다시 시도해주세요.");
  393. return false;
  394. }
  395. if (!optCd) {
  396. mcxDialog.alert("상품 옵션을 확인 할 수 없습니다. 새로고침 후 다시 시도해주세요."); /*옵션*/
  397. return false;
  398. }
  399. if (!goodsQty || goodsQty < 1) {
  400. mcxDialog.alert("구매 수량을 확인해주세요."); /*수량*/
  401. return false;
  402. }
  403. let compsList = [];
  404. let obj = new Object();
  405. obj.goodsCd = goodsCd;
  406. obj.optCd = optCd;
  407. obj.goodsQty = goodsQty;
  408. obj.goodsType = goodsType;
  409. obj.cartGb = "N";
  410. obj.afLinkCd =$("#cartForm input[name=afLinkCd]").val();
  411. obj.ithrCd =$("#cartForm input[name=ithrCd]").val();
  412. obj.contentsLoc =$("#cartForm input[name=contentsLoc]").val();
  413. obj.planDtlSq = $("#cartForm input[name=planDtlSq]").val();
  414. compsList.push(obj);
  415. // 장바구니담기
  416. cfnAddCart(compsList);
  417. } else {
  418. // TODO 세트상품 추가 예정
  419. alert("개발 중");
  420. }
  421. /*$.ajax( {
  422. type : "POST",
  423. url : "/pg/nPayReq",
  424. dataType : 'json',
  425. contentType : 'application/json',
  426. data : JSON.stringify(param),
  427. async : false,
  428. error: function(xhr, status, error) {
  429. alert("!! " + status + '; ' + error);
  430. },
  431. success : function(result) {
  432. if (result.state == "sucess") {
  433. window.open('about:blank', 'popupView');
  434. document.nPayForm.target = 'popupView';
  435. document.nPayForm.action = "$!{NPAY_ORDER_URL}" + result.orderKey + "/" + result.resultNo;
  436. document.nPayForm.submit();
  437. } else {
  438. alert(result.message);
  439. }
  440. }
  441. });*/
  442. //해당 페이지에서 주문 정보 등록 후 네이버페이 주문서 페이지로 이동.
  443. //네이버페이로 주문 정보를 등록하는 가맹점 페이지로 이동.
  444. //해당 페이지에서 주문 정보 등록 후 네이버페이 주문서 페이지로 이동.
  445. return false;
  446. }
  447. function buy_nc_req(cartSqArr) {
  448. let data = { cartSqArr : cartSqArr
  449. , backUrl : location.href
  450. , goodsUrl : _PAGE_GOODS_DETAIL
  451. };
  452. let jsonData = JSON.stringify(data);
  453. $.ajax( {
  454. type : "POST",
  455. url : "/pg/nPayReq",
  456. dataType : 'json',
  457. data : jsonData,
  458. beforeSend : function(xhr, settings) {
  459. xhr.setRequestHeader("AJAX" , "true");
  460. xhr.setRequestHeader('Accept' , 'application/json');
  461. xhr.setRequestHeader('Content-Type' , 'application/json');
  462. },
  463. error: function(xhr, status, error) {
  464. mcxDialog.alert(status + '; ' + error);
  465. },
  466. success : function(result) {
  467. if (result.state == "sucess") {
  468. window.open('about:blank', 'popupView');
  469. document.nPayForm.target = 'popupView';
  470. document.nPayForm.action = result.npayOrderUrl + "/" + result.orderKey + "/" + result.resultNo;
  471. document.nPayForm.submit();
  472. } else {
  473. mcxDialog.alert(result.message);
  474. }
  475. }
  476. });
  477. }
  478. /*네이버찜*/
  479. /*function wishlist_nc(url) {
  480. // 네이버페이로 찜 정보를 등록하는 가맹점 페이지 팝업 창 생성.
  481. // 해당 페이지에서 찜 정보 등록 후 네이버페이 찜 페이지로 이동.
  482. var params = new Object();
  483. params.ITEM_CD = $('#goods_code').val();
  484. params.ITEM_URL = location.href;
  485. var nPayWishUrl = "/order/nPayWish.do";
  486. /!*네이버페이 ajax*!/
  487. jQuery.ajax({
  488. type : 'POST',
  489. url : '/order/nPayWish.do',
  490. cache : false,
  491. data : params,
  492. async : false,
  493. error : function() {
  494. },
  495. success : function(result) {
  496. url = url + "?SHOP_ID=interview_sisun&ITEM_ID=" + result.wishList;
  497. window.open(url,"","scrollbars=yes,width=400,height=267");
  498. }
  499. });
  500. }*/
  501. <!-- 구매불가 -->
  502. function not_buy_nc() {
  503. mcxDialog.alert("죄송합니다. 네이버페이로 구매가 불가한 상품입니다.");
  504. return false;
  505. }
  506. //]]>
  507. </script>
  508. </th:block>
  509. </div>
  510. <div class="exinfo_box">
  511. <ul>
  512. <li th:if="${reviewDisplayYn == 'Y'}">
  513. <div class="ex_review">
  514. <a href="javascript:void(0);" id="btn_pdReview_pop" th:onclick="cfGoodsReview([[${goodsInfo.goodsCd}]])">
  515. <span class="tit">리뷰<em class="number">(<th:block th:text="${(goodsInfo.reviewRegCnt <= 9999) ? #numbers.formatInteger(goodsInfo.reviewRegCnt, 0,'COMMA') : '9,999+'}"></th:block>)</em></span>
  516. <div class="star_score" th:if="${goodsInfo.reviewRegCnt > 0 }">
  517. <span class="star" th:with="starScore=${#numbers.formatDecimal((goodsInfo.score*100/5), 0,0)}">
  518. <em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
  519. </span>
  520. <span class="score"><em th:text="${goodsInfo.score}">4.3</em>점</span>
  521. </div>
  522. </a>
  523. </div>
  524. <!-- 베스트 리뷰 등록시 노출 -->
  525. <div class="best_review" th:if="${bestReviewList != null and !bestReviewList.empty}">
  526. <th:block th:each="bestReview, status : ${bestReviewList}" th:if="${status.first}">
  527. <a href="javascript:void(0);" id="btn_pdBestReview_pop" th:onclick="cfGoodsReviewDetail([[${goodsInfo.goodsCd}]],'Y', '',[[${bestReview.reviewSq}]])" >
  528. <div class="pic" th:if="${bestReview.reviewAttachList != null and !bestReview.reviewAttachList.empty}">
  529. <th:block th:each="reviewAttach, attachStatus : ${bestReview.reviewAttachList}" th:if="${attachStatus.first}">
  530. <span class="thumb" th:classAppend="${(reviewAttach.fileGb == 'M') ? 'mov' :''}" th:style="${'background-image:url('+imgUrl+ reviewAttach.sysFileNm+');'}"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
  531. </th:block>
  532. </div>
  533. <div class="star_score" th:with="starScore=${#numbers.formatDecimal((bestReview.iscore*100/5), 0,0)}">
  534. <span class="star">
  535. <em class="progbar" th:style="${'width:'+starScore+'%;' }"></em> <!-- 평점 style로 표기 -->
  536. </span>
  537. <em class="ico ico_besttag"></em>
  538. </div>
  539. <div class="txt_best_review">
  540. <p th:text="${bestReview.reviewContent}">옷</p>
  541. </div>
  542. </a>
  543. </th:block>
  544. </div>
  545. <!-- //베스트 리뷰 등록시 노출 -->
  546. </li>
  547. <li>
  548. <div class="ex_qna">
  549. <a href="javascript:void(0);" id="btn_pdQnaList_pop" th:onclick="cfGoodsQng([[${goodsInfo.goodsCd}]])" >
  550. <span class="tit">문의<em class="number">(<th:block th:text="${(goodsInfo.goodsQnaCnt <= 9999) ? #numbers.formatInteger(goodsInfo.goodsQnaCnt, 0,'COMMA') : '9,999+'}"></th:block>)</em></span>
  551. </a>
  552. </div>
  553. </li>
  554. <li>
  555. <div class="ex_shipping">
  556. <a href="javascript:void(0);" id="btn_pdDeliveryPop" th:onclick="cfGoodsDelivery([[${goodsInfo.goodsCd}]])">
  557. <span class="tit">배송/교환/반품</span>
  558. <!-- 해당 배송정보 선택노출 -->
  559. <span class="txt_shippingfee" th:if="${goodsInfo.delvFee > 0}">배송비 <th:block th:text="${#numbers.formatInteger(goodsInfo.delvFee, 0,'COMMA')}" ></th:block>원
  560. <th:block th:if="${goodsInfo.minOrdAmt > 0}">(<th:block th:text="${#numbers.formatInteger(goodsInfo.minOrdAmt, 0,'COMMA')}" ></th:block>원 이상 무료배송)</th:block>
  561. </span>
  562. <span class="txt_shippingfee" th:if="${goodsInfo.delvFee <= 0}">무료배송</span>
  563. <span class="txt_shippingfee" th:if="${goodsInfo.quikDelvYn = 'Y'}">총알배송(오전 10시까지 주문 시)</span>
  564. <!-- //해당 배송정보 선택노출 -->
  565. </a>
  566. </div>
  567. </li>
  568. </ul>
  569. </div>
  570. </div>
  571. </div>
  572. </form>
  573. </div>
  574. </div>
  575. </div>
  576. <!-- 상품 대표설명 -->
  577. <!-- 함께하면 할인되는 다다익선 상품 -->
  578. <div class="content pd_together" id="goodsTmtbArea">
  579. </div>
  580. <!-- // 함께하면 할인되는 다다익선 상품 -->
  581. <!-- 상품상세정보 -->
  582. <div class="content pd_descrp">
  583. <div class="cont_head">
  584. <h3 class="sr-only">상품상세정보</h3>
  585. </div>
  586. <div class="cont_body">
  587. <!-- 상품설명 노출 -->
  588. <div class="descrp_box" th:if="${goodsInfo.tobeFormYn == 'Y'}">
  589. <div class="desc_simple"> <!-- 상품 간략설명-->
  590. <span class="tit_desc" th:if="${goodsInfo.goodsTitle != null and !goodsInfo.goodsTitle.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitle))}">사이드 밴딩으로 편안한 만능 슬랙스!</span>
  591. <p class="ptxt01"th:if="${goodsInfo.goodsTitleDesc}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTitleDesc))}">
  592. 슬림핏에 사이드 밴딩으로 편안함을 더해준 슬랙스입니다.
  593. </p>
  594. </div>
  595. <div class="desc_character" th:if="${goodsInfo.goodsSpecialDesc != null and !goodsInfo.goodsSpecialDesc.empty}"> <!-- 상품특징 -->
  596. <span class="tit_desc">상품특징</span>
  597. <p class="ptxt01">
  598. <th:block th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsSpecialDesc))}"></th:block>
  599. </p>
  600. </div>
  601. </div>
  602. <!-- //상품설명 노출 -->
  603. <!-- 관리자 에디터입력 내용 공지 html -->
  604. <div class="mdhtml_box">
  605. <th:block th:if="${goodsNoticeList != null and !goodsNoticeList.empty}" >
  606. <th:block th:each="goodsNotice, status : ${goodsNoticeList}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsNotice.noticeContent))}"></th:block >
  607. </th:block>
  608. <!-- 관리자 에디터입력 내용 공지 html -->
  609. <th:block th:each="goodsVideo, status : ${goodsVideoList}">
  610. <div class="movblock">
  611. <th:block th:if="${goodsVideo.videoGb == 'Y'}">
  612. <iframe th:src="${'https://www.youtube.com/embed/'+goodsVideo.kmcKey+'?rel=0'}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
  613. </th:block>
  614. <th:block th:unless="${goodsVideo.videoGb == 'Y'}">
  615. <iframe width="100%" height="100%" th:src="${kollusMediaUrl+'/'+goodsVideo.kmcKey +'?player_version=html5'}" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>
  616. </th:block>
  617. </div>
  618. </th:block>
  619. <!-- 공통상품베너 -->
  620. <th:block th:if="${goodsBannerList != null and !goodsBannerList.empty}">
  621. <th:block th:each="goodsBanner, status : ${goodsBannerList}" >
  622. <th:block th:if="${goodsBanner.strVar1 != null and not #strings.equals(goodsBanner.strVar1, '#')}">
  623. <a th:href="${goodsBanner.strVar1}" target="_blank">
  624. <img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
  625. </a>
  626. </th:block>
  627. <th:block th:unless="${goodsBanner.strVar1 != null and not #strings.equals(goodsBanner.strVar1, '#')}">
  628. <img th:src="${imgUrl+goodsBanner.imgPath1}" alt="">
  629. </th:block>
  630. </th:block>
  631. </th:block>
  632. <!-- 관리자 에디터입력 내용 노출 상단 html -->
  633. <th:block th:if="${goodsInfo.goodsTopDesc != null and !goodsInfo.goodsTopDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsTopDesc))}"></th:block >
  634. <th:block th:if="${goodsInfo.goodsDesc != null and !goodsInfo.goodsDesc.empty}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDesc))}"></th:block>
  635. </div>
  636. <th:block th:if="${goodsInfo.tobeFormYn == 'Y'}">
  637. <!-- 착용컷 노출 -->
  638. <div class="view_outfit_box" th:if="${#strings.contains(goodsImgList,'_M1')
  639. or #strings.contains(goodsImgList,'_M2')
  640. or #strings.contains(goodsImgList,'_M3')
  641. or #strings.contains(goodsImgList,'_M4')
  642. or #strings.contains(goodsImgList,'_M5')}">
  643. <span class="tit_view">OUTFIT VIEW</span>
  644. <th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${status.first}">
  645. <span class="model_info" th:text="${goodsImg.modelInfo}">(모델정보 : 185cm / 78kg / XL 착용)</span>
  646. </th:block>
  647. <div class="view">
  648. <th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_M1')
  649. or #strings.contains(goodsImg.sysImgNm,'_M2')
  650. or #strings.contains(goodsImg.sysImgNm,'_M3')
  651. or #strings.contains(goodsImg.sysImgNm,'_M4')
  652. or #strings.contains(goodsImg.sysImgNm,'_M5')}">
  653. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  654. </th:block>
  655. </div>
  656. </div>
  657. <!-- //착용컷 노출 -->
  658. <!-- 상품컷 노출 -->
  659. <div class="view_detail_box" th:if="${#strings.contains(goodsImgList,'_01')
  660. or #strings.contains(goodsImgList,'_02')
  661. or #strings.contains(goodsImgList,'_D1')
  662. or #strings.contains(goodsImgList,'_D2')
  663. or #strings.contains(goodsImgList,'_D3')
  664. or #strings.contains(goodsImgList,'_D4')
  665. or #strings.contains(goodsImgList,'_D5')}">
  666. <span class="tit_view">PRODUCT VIEW</span>
  667. <div class="view">
  668. <th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_01.')
  669. or #strings.contains(goodsImg.sysImgNm,'_02.')
  670. or #strings.contains(goodsImg.sysImgNm,'_D1.')
  671. or #strings.contains(goodsImg.sysImgNm,'_D2.')
  672. or #strings.contains(goodsImg.sysImgNm,'_D3.')
  673. or #strings.contains(goodsImg.sysImgNm,'_D4.')
  674. or #strings.contains(goodsImg.sysImgNm,'_D5.')}">
  675. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  676. </th:block>
  677. </div>
  678. </div>
  679. <!-- //상품컷 노출 -->
  680. <!-- 원단 노출 -->
  681. <div class="view_fabric_box" th:if="${#strings.contains(goodsImgList,'_S1')}">
  682. <span class="tit_view">FABRIC</span>
  683. <div class="view">
  684. <th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_S1')}">
  685. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=720'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  686. </th:block>
  687. </div>
  688. </div>
  689. <!-- //원단 노출 -->
  690. <!-- 라벨 노출 -->
  691. <div class="view_label_box" th:if="${#strings.contains(goodsImgList,'_L1')
  692. or #strings.contains(goodsImgList,'_L2')}">
  693. <span class="tit_view">LABEL INFO</span>
  694. <div class="view">
  695. <span>
  696. <th:block th:each="goodsImg, status : ${goodsImgList}" th:if="${#strings.contains(goodsImg.sysImgNm,'_L1')
  697. or #strings.contains(goodsImg.sysImgNm,'_L2')}">
  698. <img th:src="${imgGoodsUrl+'/'+goodsImg.sysImgNm+'?RS=250'}" alt="" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  699. </th:block>
  700. </span>
  701. </div>
  702. </div>
  703. <!-- //라벨 노출 -->
  704. </th:block>
  705. <!-- 관리자 에디터입력 내용 노출 하다단 html -->
  706. <div class="mdhtml_box" th:if="${goodsInfo.goodsDownDesc != null and !goodsInfo.goodsDownDesc.empty and goodsInfo.selfGoodsYn =='Y'}" th:utext="${#strings.unescapeJava(#strings.escapeJava(goodsInfo.goodsDownDesc))}"></div>
  707. <!-- 브랜드 노출 -->
  708. <div class="brand_box">
  709. <p class="name" th:text="${goodsInfo.brandGroupNm}">TBJ 티비제이</p>
  710. <a href="javascript:void(0);" class="btn btn_default" th:onclick="cfnGoToBrandMain([[${goodsInfo.brandGroupNo}]])" ><span>브랜드 홈 바로가기</span></a>
  711. </div>
  712. <!-- //브랜드 노출 -->
  713. <!-- 상품필수정보 노출 -->
  714. <div class="required_box" >
  715. <div class="area_infotbl" th:if="${goodsInfo.goodsType == 'G056_N' and goodsNotiList != null and !goodsNotiList.empty}">
  716. <span class="title">상품고시정보</span>
  717. <div class="tbl type1 mt30">
  718. <table>
  719. <tbody>
  720. <tr th:each="goodsNoti, status : ${goodsNotiList}" >
  721. <th th:text="${goodsNoti.niItemNm}">스타일</th>
  722. <td th:text="${goodsNoti.niContent}">F94U-MD01XA60F0</td>
  723. </tr>
  724. </tbody>
  725. </table>
  726. </div>
  727. </div>
  728. <div class="area_infotbl" th:if="${goodsInfo.goodsType == 'G056_S' and goodsComposeList != null and !goodsComposeList.empty}">
  729. <span class="title">상품고시정보</span>
  730. <th:block th:each="goodsCompose, status : ${goodsComposeList}">
  731. <div class="tbl type1 mt30">
  732. <table>
  733. <tbody>
  734. <tr th:each="goodsNoti, status : ${goodsCompose.goodsNotiList}" >
  735. <th th:text="${goodsNoti.niItemNm}">스타일</th>
  736. <td th:text="${goodsNoti.niContent}">F94U-MD01XA60F0</td>
  737. </tr>
  738. </tbody>
  739. </table>
  740. </div>
  741. </th:block>
  742. </div>
  743. <th:block th:if="${goodsInfo.goodsType == 'G056_N' and goodsSafeNo != null}" >
  744. <th:block th:if="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 상세별도표시 -->
  745. <div class="area_kcl no-mark">
  746. <p class="tit normal"><th:block th:if="${goodsSafeNo.certFormNm}" th:text="${goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
  747. <p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
  748. <p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
  749. </div>
  750. </th:block>
  751. <th:block th:unless="${goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
  752. <th:block th:if="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
  753. <div class="area_kcl">
  754. <i class="ico ico_kcl"></i>
  755. <p class="tit normal"><th:block th:text="${goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
  756. <p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
  757. <p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
  758. </div>
  759. </th:block>
  760. <th:block th:unless="${goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
  761. <div class="area_kcl" >
  762. <i class="ico ico_kcl"></i>
  763. <th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and goodsSafeNo.certFormGb != 'G084_5' }">
  764. <p class="tit normal" th:text="${goodsSafeNo.certDiv + ' / ' + goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
  765. </th:block>
  766. <th:block th:unless="${goodsSafeNo.certFormGb != 'G084_4' and goodsSafeNo.certFormGb != 'G084_5' }">
  767. <p class="tit normal" th:text="${goodsSafeNo.certFormNm + ' 안전인증'}"></p>
  768. </th:block>
  769. <p class="normal" >
  770. <th:block th:if="${goodsSafeNo.certNum}" th:text="${'인증번호: ' + goodsSafeNo.certNum}"></th:block>
  771. <th:block th:if="${goodsSafeNo.certFormGb != 'G084_4' and goodsSafeNo.certFormGb != 'G084_5' }">
  772. <a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
  773. </th:block>
  774. </p>
  775. <p class="t_info dot_info">
  776. 해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
  777. </p>
  778. </div>
  779. </th:block>
  780. </th:block>
  781. </th:block>
  782. <th:block th:if="${goodsInfo.goodsType == 'G056_S'}">
  783. <th:block th:each="goodsCompose, status : ${goodsComposeList}">
  784. <th:block th:if="${goodsCompose.goodsSafeNo != null}">
  785. <th:block th:if="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 상세별도표시 -->
  786. <div class="area_kcl no-mark">
  787. <p class="tit normal"><th:block th:if="${goodsCompose.goodsSafeNo.certFormNm}" th:text="${goodsCompose.goodsSafeNo.certFormNm + '/'}"></th:block> 제품 상세정보 내 별도 표기</p>
  788. <p class="normal">제품 상세정보 내 표기되어 있습니다. 상품 정보를 확인해주세요.</p>
  789. <p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
  790. </div>
  791. </th:block>
  792. <th:block th:unless="${goodsCompose.goodsSafeNo.certTargetGb == 'G083_3'}" > <!-- 인증 -->
  793. <th:block th:if="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 -->
  794. <div class="area_kcl">
  795. <i class="ico ico_kcl"></i>
  796. <p class="tit normal"><th:block th:text="${goodsCompose.goodsSafeNo.certFormNm}"></th:block> / 공급자적합성확인</p>
  797. <p class="normal">공급자 적합성 확인 품목으로 국가통합인증을 필함</p>
  798. <p class="t_info dot_info">해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.</p>
  799. </div>
  800. </th:block>
  801. <th:block th:unless="${goodsCompose.goodsSafeNo.certType == 'G081_3'}" > <!-- 공급자적합성 외 -->
  802. <div class="area_kcl" >
  803. <i class="ico ico_kcl"></i>
  804. <th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
  805. <p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certDiv + ' / ' + goodsCompose.goodsSafeNo.certOrganName}">어린이제품 안전인증 / 한국건설생활시험연구원(KCL)</p>
  806. </th:block>
  807. <th:block th:unless="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
  808. <p class="tit normal" th:text="${goodsCompose.goodsSafeNo.certFormNm + ' 안전인증'}"></p>
  809. </th:block>
  810. <p class="normal" >
  811. <th:block th:if="${goodsCompose.goodsSafeNo.certNum}" th:text="${'인goodsCompose.증번호: ' + goodsSafeNo.certNum}"></th:block>
  812. <th:block th:if="${goodsCompose.goodsSafeNo.certFormGb != 'G084_4' and goodsCompose.goodsSafeNo.certFormGb != 'G084_5' }">
  813. <a th:href="@{http://www.safetykorea.kr/search/searchPop(certNum=${goodsCompose.goodsSafeNo.certNum})}" target="_blank" class="linktxt3">상세보기</a>
  814. </th:block>
  815. </p>
  816. <p class="t_info dot_info">
  817. 해당 인증정보는 판매자가 등록한 것으로 등록정보에 대한 일체의 책임은 판매자에게 있습니다.
  818. </p>
  819. </div>
  820. </th:block>
  821. </th:block>
  822. </th:block>
  823. </th:block>
  824. </th:block>
  825. <div class="area_infotbl">
  826. <span class="title">상품기본정보</span>
  827. <th:block th:if="${goodsInfo.goodsType == 'G056_N'} ">
  828. <div class="tbl type1 mt30">
  829. <table>
  830. <tbody>
  831. <tr>
  832. <th>상품코드</th>
  833. <td th:text="${goodsInfo.goodsCd}">14443216</td>
  834. </tr>
  835. <tr>
  836. <th>상품구분</th>
  837. <td th:text="${goodsInfo.goodsGbNm}">병행수입</td>
  838. </tr>
  839. <tr>
  840. <th>브랜드</th>
  841. <td th:text="${goodsInfo.brandGroupNm}">TBJ</td>
  842. </tr>
  843. <tr>
  844. <th>상품명</th>
  845. <td th:text="${goodsInfo.goodsNm}">남성 테이퍼드 핏 겨울 기모면 스판 올 밴딩 팬츠</td>
  846. </tr>
  847. <th:block th:if="${goodsNotiList != null and !goodsNotiList.empty}">
  848. <th:block th:each="goodsNoti, status : ${goodsNotiList}" th:if="${goodsNoti.niItemCd == 'G005_005'}">
  849. <tr>
  850. <th th:text="${goodsNoti.niItemNm}">제조사</th>
  851. <td th:text="${goodsNoti.niContent}"></td>
  852. </tr>
  853. </th:block>
  854. </th:block>
  855. <tr>
  856. <th>제조국</th>
  857. <td th:text="${goodsInfo.originNm}">베트남</td>
  858. </tr>
  859. </tbody>
  860. </table>
  861. </div>
  862. </th:block>
  863. <th:block th:unless="${goodsInfo.goodsType == 'G056_N'} ">
  864. <th:block th:if="${goodsComposeList != null and !goodsComposeList.empty}">
  865. <th:block th:each="goodsCompose, status : ${goodsComposeList}">
  866. <div class="tbl type1 mt30">
  867. <table>
  868. <tbody>
  869. <tr>
  870. <th>상품코드</th>
  871. <td th:text="${goodsCompose.compsGoodsCd}">14443216</td>
  872. </tr>
  873. <tr>
  874. <th>상품구분</th>
  875. <td th:text="${goodsCompose.goodsGbNm}">병행수입</td>
  876. </tr>
  877. <tr>
  878. <th>브랜드</th>
  879. <td th:text="${goodsCompose.brandGroupNm}">TBJ</td>
  880. </tr>
  881. <tr>
  882. <th>상품명</th>
  883. <td th:text="${goodsCompose.compsGoodsNm}">남성 테이퍼드 핏 겨울 기모면 스판 올 밴딩 팬츠</td>
  884. </tr>
  885. <th:block th:if="${goodsCompose.goodsNotiList != null and !goodsCompose.goodsNotiList.empty}">
  886. <th:block th:each="goodsNoti, status : ${goodsCompose.goodsNotiList}" th:if="${goodsNoti.niItemCd == 'G005_005'}">
  887. <tr>
  888. <th th:text="${goodsNoti.niItemNm}">제조사</th>
  889. <td th:text="${goodsNoti.niContent}"></td>
  890. </tr>
  891. </th:block>
  892. </th:block>
  893. <tr>
  894. <th>제조국</th>
  895. <td th:text="${goodsCompose.originNm}">베트남</td>
  896. </tr>
  897. </tbody>
  898. </table>
  899. </div>
  900. </th:block>
  901. </th:block>
  902. </th:block>
  903. <p class="t_info dot_info mt20">
  904. 주문제작 상품의 경우 주문 후 제작되어 판매되는 상품으로 제작 시점부터 반품/교환이 어려울 수 있습니다.
  905. </p>
  906. </div>
  907. </div>
  908. <!-- //상품필수정보 노출 -->
  909. </div>
  910. <div class="btn_more_box covered">
  911. <button type="button" class="btn btn_default btn_md">
  912. <span>상세정보 더보기</span>
  913. </button>
  914. </div>
  915. </div>
  916. <!-- //상품상세정보 -->
  917. <!-- 이 상품과 함께 본 상품 -->
  918. <div class="content wide pd_clickother" id="goodsTogetherbArea">
  919. </div>
  920. <!-- // 이 상품과 함께 본 상품 -->
  921. <!-- STYLE24의 스타일링 추천 -->
  922. <div class="content wide pd_recommend" th:if="${lookbookList != null and !lookbookList.empty}">
  923. <div class="cont_head">
  924. <h3 class="subH1 t_c mb40">STYLE24의 스타일링 추천</h3>
  925. </div>
  926. <div class="cont_body" th:with="ithrCd=aa , contentsLoc=bb ">
  927. <!-- CONT-BODY -->
  928. <div class="area_slider">
  929. <div class="swiper-container">
  930. <div class="swiper-wrapper" >
  931. <div class="swiper-slide" th:each="lookbook, status : ${lookbookList}">
  932. <div class="page">
  933. <div class="pic">
  934. <span class="thumb" th:style="${'background-image:url(' + imgUrl+ lookbook.sysFileNm+');'}"></span>
  935. <!-- 상품피커 -->
  936. <th:block th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}"
  937. th:each="lookbookGoods, goodsStatus : ${lookbook.lookbookGoodsList}">
  938. <div class="item_picker" th:style="${'left:'+lookbookGoods.xlim+'%; top:'+lookbookGoods.ylim+'%;'}">
  939. <button type="button" th:onclick="fnLookbookPicker(this,[[${lookbookGoods.goodsCd}]]);"><span class="ico ico_picker"></span></button>
  940. <div class="pick_descr" >
  941. <a href="javascript:void(0);" >
  942. </a>
  943. </div>
  944. </div>
  945. </th:block>
  946. <!-- //상품피커 -->
  947. </div>
  948. <div class="item_wrap">
  949. <div class="item_area" th:if="${lookbook.lookbookGoodsList != null and !lookbook.lookbookGoodsList.empty}">
  950. <h5>
  951. 룩북 속 상품
  952. <span data-font="lato">(<th:block th:text="${#lists.size(lookbook.lookbookGoodsList)}"></th:block>)</span>
  953. </h5>
  954. <div class="li_item">
  955. <ul >
  956. <li th:each="lookbookGoods, status : ${lookbook.lookbookGoodsList}">
  957. <div class="item_prod" th:classappend="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}? 'unable' : ''"
  958. th:attr="goodsCd=${lookbookGoods.goodsCd}, optCdInfo=${lookbookGoods.optCdInfo},
  959. minOrdQty=${lookbookGoods.minOrdQty}, goodsType=${lookbookGoods.goodsType},
  960. ithrCd=${ithrCd}, contentsLoc=${contentsLoc}"> <!-- 판매불가 상품에 unable 추가 -->
  961. <div class="item_state">
  962. <th:block th:each="optCd : ${#strings.arraySplit(lookbookGoods.optCdInfo,',')}">
  963. <input type="hidden" name="lookbookGoodsOptCd" th:value="${optCd}"/>
  964. </th:block>
  965. <th:block th:if="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}">
  966. <a href="javascript:void(0);" class="itemLink" >
  967. </th:block>
  968. <th:block th:unless="${(lookbookGoods.stockQty <= 0 or lookbookGoods.soldoutYn == 'Y')}">
  969. <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${lookbookGoods.goodsCd}]], '',[[${ithrCd}]],[[${contentsLoc}]] )">
  970. </th:block>
  971. <div class="itemPic">
  972. <img alt="" class="vLHTC pd_img" th:src="${imgGoodsUrl+'/'+lookbookGoods.sysImgNm+'?RS=100'}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/images/pc/thumb/bg_item_none.png'}+'\';'">
  973. </div>
  974. <p class="itemBrand" th:text="${lookbookGoods.brandGroupNm}">CURLYSUE 컬리수</p>
  975. <div class="itemName" th:text="${lookbookGoods.goodsFullNm}">[★2020 겨울신상★] 리버시블 경량점퍼 CPW0XQJM51 [겨울]</div>
  976. <p class="itemPrice">
  977. <span id="itemCurrprice" th:text="${#numbers.formatInteger(lookbookGoods.currPrice, 0,'COMMA')}">1,000,000</span>
  978. <span class="itemPrice_original" th:if="${lookbookGoods.listPrice > lookbookGoods.currPrice}" th:text="${#numbers.formatInteger(lookbookGoods.listPrice, 0,'COMMA')}">1,000,000</span>
  979. <span class="itemPercent" th:if="${lookbookGoods.dcRate > 0}" th:text="|${#numbers.formatDecimal(lookbookGoods.dcRate,0,0)}%|">30%</span>
  980. </p>
  981. </a>
  982. </div>
  983. </div>
  984. </li>
  985. </ul>
  986. </div>
  987. <button type="button" class="btn btn_block btn_md" onclick="fnAddCartLookBookGoods(this);"><span>모두 쇼핑백 담기</span></button>
  988. </div>
  989. </div>
  990. </div>
  991. </div>
  992. </div>
  993. </div>
  994. <!-- Add Pagination -->
  995. <div class="swiper-pagination"></div>
  996. <!-- Add Arrows -->
  997. <div class="swiper-button-next"></div>
  998. <div class="swiper-button-prev"></div>
  999. </div>
  1000. <!-- // CONT-BODY -->
  1001. </div>
  1002. </div>
  1003. <!-- // STYLE24의 스타일링 추천 -->
  1004. <!-- 브랜드 추천상품 -->
  1005. <div class="content wide pd_brand" id="goodsRecommendbArea">
  1006. </div>
  1007. <!-- // 브랜드 추천상품 -->
  1008. <!-- 이 상품과 비슷한 상품 -->
  1009. <div class="content wide pd_relate" id="goodsLikebArea">
  1010. </div>
  1011. <!-- // 이 상품과 비슷한 상품 -->
  1012. </div>
  1013. <!-- 상품썸네일 크게보기 팝업 -->
  1014. <div class="pd_pop full_pop pd_itemthumb_pop" id="pdItemThumbPop">
  1015. <div class="full_popup_wrap">
  1016. <h5 class="sr-only">상품썸네일 크게보기</h5>
  1017. <div class="btn_close">
  1018. <a href="" id="btn_close_itemThumbPop">닫기버튼</a>
  1019. </div>
  1020. <div class="full_pop_container">
  1021. <!-- 배송교환반품안내 리스트 내용 -->
  1022. </div>
  1023. </div>
  1024. </div>
  1025. <!-- //상품썸네일 크게보기 팝업 -->
  1026. </div>
  1027. <!-- 바로구매 장바구니 등록 정보 저장을 위한 form -->
  1028. <form id="directOrderForm" method="POST" action="/order/noMember"></form>
  1029. <script th:src="@{'/biz/goods.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/biz/goods.js"></script>
  1030. <script th:inline="javascript">
  1031. /*<![CDATA[*/
  1032. var cateNm = "";
  1033. // 다다익선 상품
  1034. var fnGoodsTmtbSearch = function(params) {
  1035. gagajf.ajaxSubmit("/goods/detail/tmtb/frame", "html", "goodsTmtbArea", params);
  1036. }
  1037. //세트 사이즈 클릭시
  1038. function fnViewStockSet(obj, goodsCd, optCd1, optCd2, minOrdQty, maxOrdQty) {
  1039. let target=$('.select_custom.item_opt2');
  1040. let targetSize = target.length; //구성품 갯수
  1041. let cnt = 0;
  1042. let itemSize = 0;
  1043. target.each(function(){
  1044. if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
  1045. if (goodsCd != $(this).find('.select').find('input[name=opt2]').attr('goodscd')){
  1046. itemSize ++;
  1047. }
  1048. }
  1049. });
  1050. //내가 선택한 상품
  1051. if (typeof ($(obj).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(obj).find('input[name=opt2]').val())){
  1052. itemSize ++;
  1053. }
  1054. let mGoodsCd = $("#cartForm input[name=goodsCd]").val();
  1055. let selfGoodsYn = $("#cartForm input[name=selfGoodsYn]").val();
  1056. let goodsOption = [];
  1057. if (targetSize == itemSize){
  1058. target.each(function() {
  1059. if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
  1060. if (goodsCd != $(this).find('.select').find('input[name=opt2]').val()){
  1061. goodsOption.push($(this).find('input[name=opt2]').val());
  1062. }
  1063. }
  1064. });
  1065. //내가 선택하 옵션
  1066. goodsOption.push($(obj).find('input[name=opt2]').val()); //goodsCd|optCd|qty
  1067. var maxCnt = maxOrdQty;
  1068. var data = {arrGoodsOption : goodsOption
  1069. ,minOrdQty : minOrdQty
  1070. ,maxOrdQty : maxOrdQty
  1071. ,goodsCd : mGoodsCd
  1072. ,selfGoodsYn : selfGoodsYn
  1073. };
  1074. var jsonData = JSON.stringify(data);
  1075. gagajf.ajaxJsonSubmit('/goods/detail/ajaxGoodsSetStockQty', jsonData, function(result) {
  1076. var itemCnt = eval(result); //해당 아이템에 선택되어진 사이즈의 수량
  1077. //console.log("itemCnt : "+itemCnt);
  1078. if (maxCnt > itemCnt) {
  1079. maxCnt = itemCnt;
  1080. }
  1081. if (minOrdQty > itemCnt) {
  1082. //alert("무슨작업을 해야할가요?");
  1083. return false; //무슨작업을 해야하나?
  1084. }
  1085. $("#cartForm input[name=ordQty]").val(minOrdQty);
  1086. $("#cartForm input[name=maxOrdQty]").val(maxCnt);
  1087. $("#cartForm input[name=minOrdQty]").val(minOrdQty);
  1088. $("#cartForm input[name=cea]").val(minOrdQty);
  1089. $("#cartForm input[name=cea]").attr("readonly",false);
  1090. $("#cartForm input[name=stock]").val(itemCnt);
  1091. fnSetTotalPrice();
  1092. });
  1093. }
  1094. }
  1095. // 수량 변경 클릭
  1096. var fnAdjustOrderEa = function(obj) {
  1097. if("G056_N" == $("#cartForm input[name=goodsType]").val() && "Y" == $("#cartForm input[name=selfGoodsYn]").val()){
  1098. if(gagajf.isNull($("#cartForm input[name=optCd2]").val())){
  1099. mcxDialog.alert("사이즈를 선택해 주세요.");
  1100. return false;
  1101. }
  1102. }else{
  1103. let target=$('.select_custom.item_opt2');
  1104. let targetSize = target.length; //구성품 갯수
  1105. let itemSize = 0;
  1106. target.each(function(){
  1107. if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
  1108. itemSize ++;
  1109. }
  1110. });
  1111. if (targetSize != itemSize){
  1112. mcxDialog.alert("옵션을 선택해 주세요.");
  1113. return false;
  1114. }
  1115. }
  1116. let $obj = $(obj);
  1117. let $target = $obj.parent().children('input[name="cea"]');
  1118. let minOrdQty = parseInt($("#cartForm input[name=minOrdQty]").val());
  1119. let ea =parseInt($target.val());
  1120. if ($obj.attr('adjust') == '-') --ea;
  1121. else ++ea;
  1122. //var maxOrdQty = $("#cartForm input[name=maxOrdQty]").val();
  1123. //if (maxOrdQty && ea > maxOrdQty) ea = maxOrdQty;
  1124. if (ea.toString().length > parseInt($target.attr('maxlength'))) --ea;
  1125. if (ea < 1) ea = minOrdQty;
  1126. $target.val(ea);
  1127. fnChangeOrderEa();
  1128. }
  1129. //옵션 갯수 변경
  1130. var fnChangeOrderEa = function() {
  1131. if("G056_N" == $("#cartForm input[name=goodsType]").val() && "Y" == $("#cartForm input[name=selfGoodsYn]").val()){
  1132. if(gagajf.isNull($("#cartForm input[name=optCd2]").val())){
  1133. mcxDialog.alert("사이즈를 선택해 주세요.");
  1134. return false;
  1135. }
  1136. }else{
  1137. let target=$('.select_custom.item_opt2');
  1138. let targetSize = target.length; //구성품 갯수
  1139. let itemSize = 0;
  1140. target.each(function(){
  1141. if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
  1142. itemSize ++;
  1143. }
  1144. });
  1145. if (targetSize != itemSize){
  1146. mcxDialog.alert("옵션을 선택해 주세요.");
  1147. return false;
  1148. }
  1149. }
  1150. //let f = document.cartForm;
  1151. let ea = parseInt($("#cartForm input[name=cea]").val());
  1152. let buymin = parseInt($("#cartForm input[name=minOrdQty]").val());
  1153. let buymax = parseInt($("#cartForm input[name=maxOrdQty]").val());
  1154. let alertMsg = '';
  1155. if (ea < buymin) {
  1156. alertMsg = buymin+"개 부터 구매 가능합니다.";
  1157. ea = buymin;
  1158. }
  1159. if (ea > buymax) {
  1160. alertMsg = buymax+"개 까지만 구매 가능합니다.";
  1161. ea = buymax;
  1162. }
  1163. $("#cartForm input[name=cea]").val(ea);
  1164. $("#cartForm input[name=ordQty]").val(ea);
  1165. if (alertMsg != ''){
  1166. mcxDialog.alert(alertMsg);
  1167. //return;
  1168. }
  1169. if (ea <= 1){
  1170. $('.number_count').find('.minus').addClass('min_val');
  1171. }else{
  1172. $('.number_count').find('.minus').removeClass('min_val');
  1173. }
  1174. fnSetTotalPrice();
  1175. }
  1176. //합계 계산
  1177. var fnSetTotalPrice = function() {
  1178. //let f = document.cartForm;
  1179. $('.price_box').show();
  1180. let totalEa = 0;
  1181. let totalPrice = 0;
  1182. $('input[name="cea"]').each(function() {
  1183. let ea = parseInt($(this).val());
  1184. let addPrice = 0;
  1185. if("G056_N" == $("#cartForm input[name=goodsType]").val() && "Y" == $("#cartForm input[name=selfGoodsYn]").val()){
  1186. let target=$('.opt_size').find('input[name=opt]');
  1187. target.each(function() {
  1188. if ($(this).is(":checked")){
  1189. addPrice += Number($(this).attr('addPrice'));
  1190. }
  1191. });
  1192. }else{
  1193. let target=$('.select_custom.item_opt2');
  1194. target.each(function() {
  1195. if (typeof ($(this).find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('input[name=opt2]').val())){
  1196. addPrice += Number($(this).find('input[name=opt2]').attr('addPrice'));
  1197. }
  1198. });
  1199. }
  1200. let goodsPrice = parseInt($(this).parent().find('input[name="coption"]').attr('price'));
  1201. totalEa += ea;
  1202. if (goodsPrice > 0) {
  1203. totalPrice += ((goodsPrice+addPrice) * ea);
  1204. }
  1205. });
  1206. $('#goodsTotalQty').html(totalEa.addComma());
  1207. $('#goodsTotalPrice').html(totalPrice.addComma());
  1208. }
  1209. //장바구니담기
  1210. var fnAddCart = function(btnType){
  1211. let goodsType = $("#cartForm input[name=goodsType]").val();
  1212. if (goodsType == 'G056_N'){
  1213. if (gagajf.isNull($("#cartForm input[name=optCd2]").val())) {
  1214. if("Y" == $("#cartForm input[name=selfGoodsYn]").val()){
  1215. mcxDialog.alert("사이즈를 선택해 주세요.");
  1216. return false;
  1217. }else{
  1218. mcxDialog.alert("옵션을 선택해 주세요.");
  1219. return false;
  1220. }
  1221. }
  1222. let compsList = [];
  1223. let obj = new Object();
  1224. obj.goodsCd = $("#cartForm input[name=goodsCd]").val();
  1225. obj.optCd = $("#cartForm input[name=optCd]").val();
  1226. obj.goodsQty = $("#cartForm input[name=ordQty]").val();
  1227. obj.goodsType = $("#cartForm input[name=goodsType]").val();
  1228. obj.cartGb = btnType;
  1229. obj.afLinkCd =$("#cartForm input[name=afLinkCd]").val();
  1230. obj.ithrCd =$("#cartForm input[name=ithrCd]").val();
  1231. obj.contentsLoc =$("#cartForm input[name=contentsLoc]").val();
  1232. obj.planDtlSq = $("#cartForm input[name=planDtlSq]").val();
  1233. compsList.push(obj);
  1234. // 장바구니담기
  1235. cfnAddCart(compsList);
  1236. }else if (goodsType == 'G056_S'){ //수정요
  1237. let target=$('.select_custom.item_opt2');
  1238. let targetSize = target.length; //구성품 갯수
  1239. let itemSize = 0;
  1240. target.each(function(){
  1241. if (typeof ($(this).find('.select').find('input[name=opt2]').val()) != 'undefined' && !gagajf.isNull($(this).find('.select').find('input[name=opt2]').val())){
  1242. itemSize ++;
  1243. }
  1244. });
  1245. if (targetSize != itemSize){
  1246. mcxDialog.alert("옵션을 선택해 주세요.");
  1247. return false;
  1248. }
  1249. let cartGoodsList = [];
  1250. let compsList = [];
  1251. let goodsList = {
  1252. cartCompsList : new Array()
  1253. }
  1254. target.each(function() {
  1255. var arrInfo = $(this).find('input[name=opt2]').val().split('|'); // 상품코드|사이즈|구성수량
  1256. var obj = new Object();
  1257. obj.cartGb = btnType;
  1258. obj.goodsType = $("#cartForm input[name=goodsType]").val();
  1259. obj.goodsCd = $("#cartForm input[name=goodsCd]").val();
  1260. obj.itemCd = arrInfo[0];
  1261. obj.optCd = arrInfo[1];
  1262. obj.goodsQty = $("#cartForm input[name=ordQty]").val();
  1263. obj.afLinkCd =$("#cartForm input[name=afLinkCd]").val();
  1264. obj.ithrCd =$("#cartForm input[name=ithrCd]").val();
  1265. obj.contentsLoc =$("#cartForm input[name=contentsLoc]").val();
  1266. obj.planDtlSq = $("#cartForm input[name=planDtlSq]").val();
  1267. compsList.push(obj);
  1268. });
  1269. goodsList.cartCompsList = compsList;
  1270. cartGoodsList.push(goodsList);
  1271. // 장바구니담기
  1272. cfnAddCart(cartGoodsList);
  1273. }
  1274. }
  1275. // 룩북속 상품 쇼핑백 담기
  1276. var fnAddCartLookBookGoods = function(obj){
  1277. let $obj = $(obj);
  1278. let $target = $obj.parent().find('.li_item').find('.item_prod');
  1279. let goodsSize = $target.length;
  1280. let btnType = "C";
  1281. let params = [];
  1282. let goodsIdx = 0;
  1283. $target.each(function(){
  1284. goodsIdx ++;
  1285. if ($(this).hasClass('unable')) {
  1286. }else{
  1287. // 옵션확인
  1288. let goodsCnt = $(this).find('input[name=lookbookGoodsOptCd]').length;
  1289. if (goodsCnt == 1){
  1290. let arrOpt = $(this).find('input[name=lookbookGoodsOptCd]').val();
  1291. let arrOptInfo = arrOpt.split(':');
  1292. let obj = new Object();
  1293. obj.goodsCd = $(this).attr("goodsCd");
  1294. //obj.optCd = $(this).attr("optCd");
  1295. obj.optCd = arrOptInfo[1];
  1296. obj.goodsQty = $(this).attr("minOrdQty");
  1297. obj.goodsType = $(this).attr("goodsType");
  1298. obj.cartGb = btnType;
  1299. obj.afLinkCd = '';
  1300. obj.ithrCd = $(this).attr("ithrCd");
  1301. obj.contentsLoc = $(this).attr("contentsLoc");
  1302. obj.planDtlSq = '';
  1303. obj.multiGoodsGb = 'O' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  1304. if (goodsIdx == goodsSize){
  1305. obj.multiGoodsGb = 'E' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  1306. }
  1307. params.push(obj);
  1308. // 장바구니담기
  1309. cfnAddCart(params);
  1310. }else{
  1311. let $goods = $(this);
  1312. let cartGoodsList = [];
  1313. let compsList = [];
  1314. let goodsList = {
  1315. cartCompsList : new Array()
  1316. }
  1317. let arrInfo = $(this).find('input[name=lookbookGoodsOptCd]').val().split(','); // 상품코드단위
  1318. $.each(arrInfo, function(idx, item) {
  1319. let arrOptInfo = item.split(':');
  1320. let obj = new Object();
  1321. obj.cartGb = btnType;
  1322. obj.goodsType = $goods.attr("goodsType");
  1323. obj.goodsCd = $goods.attr("goodsCd");
  1324. obj.itemCd =arrOptInfo[0];
  1325. obj.optCd = arrOptInfo[1];
  1326. obj.goodsQty = $goods.attr("minOrdQty");
  1327. obj.afLinkCd = '';
  1328. obj.ithrCd = $goods.attr("ithrCd");
  1329. obj.contentsLoc = $goods.attr("contentsLoc");
  1330. obj.planDtlSq = ''
  1331. obj.multiGoodsGb = 'O' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  1332. if (goodsIdx == goodsSize){
  1333. obj.multiGoodsGb = 'E' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  1334. }
  1335. compsList.push(obj);
  1336. });
  1337. goodsList.cartCompsList = compsList;
  1338. cartGoodsList.push(goodsList);
  1339. // 장바구니담기
  1340. cfnAddCart(cartGoodsList);
  1341. }
  1342. }
  1343. });
  1344. // 장바구니담기
  1345. /* if (params.length > 0){
  1346. cfnAddCart(params);
  1347. } */
  1348. }
  1349. // 품절처리
  1350. var fnOptionSoldout = function(){
  1351. let $target=$("#cartForm").find('.form_field');
  1352. let soldout = false;
  1353. for(var i=0;i<$target.find('input[name="opt"]').length;i++){
  1354. if($target.find('input[name="opt"]').eq(i).attr('disabled')) {
  1355. soldout = true;
  1356. }
  1357. }
  1358. let goodsType = [[${goodsInfo.goodsType}]];
  1359. if (soldout && goodsType == 'G056_N'&& $("#cartForm input[name=selfGoodsYn]").val() == 'Y') {
  1360. $(".info_restock").show();
  1361. }
  1362. }
  1363. // 옵션2 조회
  1364. var fnOption2 = function(ridx, goodsCd, optCd1, qty, minOrdQty, maxOrdQty ){
  1365. let selfGoodsYn = $("#cartForm input[name=selfGoodsYn]").val();
  1366. let data = {goodsCd : goodsCd
  1367. ,optCd1 : optCd1
  1368. ,adminYn : $("#cartForm input[name=adminYn]").val()
  1369. };
  1370. let jsonData = JSON.stringify(data);
  1371. gagajf.ajaxJsonSubmit('/goods/detail/option2/list', jsonData, function(result) {
  1372. if (result.dataList != null && result.dataList.length > 0) {
  1373. let tag = "";
  1374. let $obj = null;
  1375. if (selfGoodsYn == "Y"){
  1376. if (ridx == 1){
  1377. $obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_1');
  1378. }else if (ridx == 2){
  1379. $obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_2');
  1380. }else if (ridx == 3){
  1381. $obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_3');
  1382. }else if (ridx == 4){
  1383. $obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_4');
  1384. }else{
  1385. $obj = $('.opt_set_select .select_custom.item_opt2.item_opt2_5');
  1386. }
  1387. }else{
  1388. $obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
  1389. ridx = 1; // 입점은 1로 고정
  1390. }
  1391. $.each(result.dataList, function(idx, item) {
  1392. if (idx == 0){
  1393. //$obj = $('#goodsOpt2'+item.goodsCd);
  1394. //$obj = $('.form_field .select_custom.item_opt2.item_opt2_1');
  1395. // $obj.html('');
  1396. $obj.remove();
  1397. // $('.form_field .select_custom.item_opt2.' +item.goodsCd ).attr('disabled', false)
  1398. //------
  1399. tag += '<div class="select_custom item_opt2 item_opt2_'+ridx+ ' '+goodsCd+'">\n';
  1400. tag += '<div class="combo">\n';
  1401. tag += '<div class="select">옵션2선택</div>\n';
  1402. tag += '<ul class="list">\n';
  1403. //------
  1404. //tag += '<li class="selected" id="goodsOpt2'+item.goodsCd+'">선택</li>\n';
  1405. }
  1406. let soldoutYn = "";
  1407. let saleQty = (Number(qty) * Number(minOrdQty));
  1408. if ("Y" == item.soldoutYn || Number(item.stockQty) <= Number(saleQty))soldoutYn = "true";
  1409. if (selfGoodsYn == "Y"){
  1410. tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStockSet(this, \''+ item.goodsCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';
  1411. }else{
  1412. tag += '<li aria-disabled="'+soldoutYn+'" data-soldout="'+soldoutYn +'" onclick="fnViewStock(this, \''+ item.goodsCd+'\' , \''+ item.optCd+'\' , \''+ item.optCd1+'\' , \''+ item.optCd2+'\', \''+ minOrdQty+'\', \''+ maxOrdQty+'\')">\n';
  1413. }
  1414. tag += '<div class="opt_name">'+ item.optCd2+'</div>\n';
  1415. if (item.addPrice > 0){
  1416. tag += '<div class="opt_price">+'+ item.addPrice.addComma() +'원</div>\n';
  1417. }
  1418. tag += '<input type="hidden" name="opt2" value="'+ item.goodsCd+'|'+item.optCd +'|'+qty +'" goodsCd="'+item.goodsCd+'" id="'+item.optCd+'" addPrice="'+item.addPrice+'" optCd="'+item.optCd+'" optCd1="'+item.optCd1+'" optCd2="'+item.optCd2+'" />\n';
  1419. tag += '</li>\n';
  1420. });
  1421. if (!gagajf.isNull(tag)){
  1422. //------
  1423. tag += '</ul>\n';
  1424. tag += '</div>\n';
  1425. tag += '</div>\n';
  1426. //------
  1427. }
  1428. $('#form_field2_'+ goodsCd).append(tag);
  1429. //$obj.append(tag);
  1430. if (selfGoodsYn == "Y"){
  1431. if (ridx == 1){
  1432. var opt_selecter02_1 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_1');
  1433. //$('.opt_set_select .select_custom.item_opt2.item_opt2_1').find('.combo .select').trigger('click');
  1434. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
  1435. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
  1436. }else if (ridx == 2){
  1437. var opt_selecter02_2 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_2');
  1438. //$('.opt_set_select .select_custom.item_opt2.item_opt2_2').find('.combo .select').trigger('click');
  1439. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").addClass("on");
  1440. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_2").children(".combo").children(".list").css("display", "block");
  1441. }else if (ridx == 3){
  1442. var opt_selecter02_3 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_3');
  1443. //$('.opt_set_select .select_custom.item_opt2.item_opt2_3').find('.combo .select').trigger('click');
  1444. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").addClass("on");
  1445. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_3").children(".combo").children(".list").css("display", "block");
  1446. }else if (ridx == 4){
  1447. var opt_selecter02_4 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_4');
  1448. //$('.opt_set_select .select_custom.item_opt2.item_opt2_4').find('.combo .select').trigger('click');
  1449. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").addClass("on");
  1450. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_4").children(".combo").children(".list").css("display", "block");
  1451. }else{
  1452. var opt_selecter02_5 = new sCombo('.opt_set_select .select_custom.item_opt2.item_opt2_5');
  1453. //$('.opt_set_select .select_custom.item_opt2.item_opt2_5').find('.combo .select').trigger('click');
  1454. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").addClass("on");
  1455. //$('.pd_detail .item_detail .opt_set_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_5").children(".combo").children(".list").css("display", "block");
  1456. }
  1457. }else{
  1458. var opt_selecter02 = new sCombo('.opt_select .select_custom.item_opt2.item_opt2_1');
  1459. //$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").addClass("on");
  1460. //$('.pd_detail .item_detail .opt_select .set_option .list li').closest(".form_field").siblings(".form_field").children(".item_opt2.item_opt2_1").children(".combo").children(".list").css("display", "block");
  1461. //$('.opt_select .select_custom.item_opt2.item_opt2_1').find('.combo .select').trigger('click');
  1462. }
  1463. }
  1464. });
  1465. }
  1466. //룩북 피커 선택시 레이어 노출
  1467. var fnLookbookPicker = function(obj,goodsCd){
  1468. let $obj = $(obj);
  1469. var str = '<div class="modal fade pd_pop pd_lookbook_pop" id="layer_lookbook_goods" tabindex="-1" role="dialog" aria-labelledby="pd_lookbook_label" aria-hidden="true">';
  1470. let $target = $obj.parent().parent().parent().find('.item_prod');
  1471. let goodsImg = '';
  1472. let brandName = '';
  1473. let goodsName = '';
  1474. let currPrice = '';
  1475. let listPrice = '';
  1476. let dcRate = '';
  1477. let soldout = '';
  1478. $target.each(function(){
  1479. if ($(this).attr('goodsCd') == goodsCd) {
  1480. if ($(this).hasClass('unable')) soldout = 'sold_out';
  1481. goodsImg = $(this).find('.itemPic').children('.pd_img').attr('src');
  1482. brandName = $(this).find('.itemBrand').text();
  1483. goodsName = $(this).find('.itemName').text();
  1484. currPrice = $(this).find('#itemCurrprice').text();
  1485. listPrice = $(this).find('.itemPrice_original').text();
  1486. dcRate = $(this).find('.itemPercent').text();
  1487. }
  1488. });
  1489. if (gagajf.isNull(goodsName)){
  1490. return false;
  1491. }
  1492. let tag = '';
  1493. tag += ' <div class="modal-dialog" role="document">\n';
  1494. tag += ' <div class="modal-content">\n';
  1495. tag += ' <div class="modal-header">\n';
  1496. tag += ' <h5 class="modal-title sr-only" id="layer_lookbook_goods">상품정보</h5>\n';
  1497. tag += ' </div>\n';
  1498. tag += ' <div class="modal-body">\n';
  1499. tag += ' <div class="itemsGrp">\n';
  1500. tag += ' <div class="item_prod '+ soldout+'"> <!-- 품절일때 sold_out 클래스 추가 요청 -->\n';
  1501. tag += ' <div class="item_state">\n';
  1502. tag += ' <div class="itemLink">\n';
  1503. tag += ' <div class="itemPic">\n';
  1504. tag += ' <img alt="BLACK-a" class=" vLHTC pd_img" src="'+goodsImg +'?RS=260" onerror="this.src=\'/images/pc/thumb/bg_item_none.png\'">\n';
  1505. tag += ' </div>\n';
  1506. tag += ' <p class="itemBrand">'+brandName+'</p>\n';
  1507. tag += ' <div class="itemName">'+goodsName+'</div>\n';
  1508. if (listPrice != currPrice){
  1509. tag += ' <span class="itemPrice_original">'+listPrice+'</span>\n';
  1510. }
  1511. tag += ' <p class="itemPrice">'+currPrice+'\n';
  1512. if (!gagajf.isNull(dcRate)){
  1513. tag += ' <span class="itemPercent">'+dcRate+'</span>\n';
  1514. }
  1515. tag += ' </p>\n';
  1516. if (gagajf.isNull(soldout)){
  1517. tag += ' <button type="button" class="btn btn_default" onclick="cfnGoToGoodsDetail(\''+goodsCd+'\',\'\',\'\')"><span>자세히 보기</span></button>\n';
  1518. }
  1519. tag += ' </div>\n';
  1520. tag += ' </div>\n';
  1521. tag += ' </div>\n';
  1522. tag += ' </div>\n';
  1523. tag += ' </div>\n';
  1524. tag += ' </div>\n';
  1525. tag += ' </div>\n';
  1526. tag += ' <a href="javascript:void(0);" rel="modal:close" onclick="cfCloseLayer(\'layer_lookbook_goods\')" class="close-modal">Close</a>\n';
  1527. if ($('#layer_lookbook_goods').length == 0) {
  1528. $('body').append(str+tag+'</div>');
  1529. $('#layer_lookbook_goods').modal("show");
  1530. }
  1531. }
  1532. $(document).ready( function() {
  1533. $('.timer_box').css('display', 'none');
  1534. //공유 버튼 토글
  1535. $("button[data-name=openShare]").on("click", function(){
  1536. $(this).toggleClass("on").next(".shareWrap").toggleClass("on");
  1537. return false;
  1538. });
  1539. //영역밖 클릭으로 공유토글 닫기
  1540. $("body").on('click', function(e) {
  1541. if(!$(".shareWrap.on").parent().has(e.target).length) {
  1542. $("button[data-name=openShare]").removeClass("on");
  1543. $(".shareWrap").removeClass("on");
  1544. };
  1545. });
  1546. var params = new Object();
  1547. params.goodsCd = [[${params.goodsCd}]];
  1548. params.viewDt = [[${params.viewDt}]];
  1549. params.preview = [[${params.preview}]];
  1550. params.adminYn = [[${params.adminYn}]];
  1551. params.goodsType = [[${params.goodsType}]];
  1552. params.supplyCompCd = [[${params.supplyCompCd}]];
  1553. params.brandGroupNm = [[${goodsInfo.brandGroupNm}]];
  1554. // 다다익선 상품(ajax html)
  1555. params.goodsOtherGb = "tmtb";
  1556. params.ithrCd = "tmtb";
  1557. params.contentsLoc = "tmtb";
  1558. fnGoodsTmtbSearch(params);
  1559. // 함께본 상품(ajax html)
  1560. params.goodsOtherGb = "together";
  1561. params.ithrCd = "tmtb";
  1562. params.contentsLoc = "tmtb";
  1563. fnGoodsTogetherSearch(params);
  1564. // 추천 상품(ajax html)
  1565. params.goodsOtherGb = "recommend";
  1566. params.ithrCd = "tmtb";
  1567. params.contentsLoc = "tmtb";
  1568. fnGoodsRecommendSearch(params);
  1569. // 비슷한 상품(ajax html)
  1570. params.goodsOtherGb = "like";
  1571. params.ithrCd = "tmtb";
  1572. params.contentsLoc = "tmtb";
  1573. fnGoodsLikeSearch(params);
  1574. // 상품 대표설명 > 좌측 상품썸네일 navi, 우측 상품정보 고정
  1575. $(window).scroll(function(){
  1576. var scrollTop= $(window).scrollTop();
  1577. var firstFixed = $('#header').outerHeight();
  1578. var thumbListWrap_h = $('.pd_detail .thumb_list_wrap').outerHeight();
  1579. var descWrap_h = $('.pd_detail .desc_wrap').outerHeight();
  1580. var secondFixed_left = firstFixed + $('.pd_detail').outerHeight() - $('.pd_detail .thumb_nav_wrap').outerHeight();
  1581. var secondFixed_right = firstFixed + $('.pd_detail .desc_wrap').outerHeight() - $(window).outerHeight();
  1582. var secondFixed_right2 = firstFixed + $('.pd_detail').outerHeight() - $(window).outerHeight();
  1583. /* 좌측 상품썸네일 navi 고정 */
  1584. if (scrollTop > firstFixed){
  1585. $('.pd_detail .area_pic .thumb_nav_wrap').removeClass('fixbottom').addClass('fixtop');
  1586. }
  1587. else if (scrollTop < firstFixed){
  1588. $('.pd_detail .area_pic .thumb_nav_wrap').removeClass('fixtop');
  1589. }
  1590. if (scrollTop > secondFixed_left){
  1591. $('.pd_detail .area_pic .thumb_nav_wrap').removeClass('fixtop').addClass('fixbottom');
  1592. }
  1593. /* 우측 상품정보 고정 */
  1594. if (thumbListWrap_h > descWrap_h && scrollTop > secondFixed_right) {
  1595. $('.pd_detail .area_desc .desc_wrap').removeClass('absbottom').addClass('fixbottom');
  1596. }
  1597. else if (thumbListWrap_h > descWrap_h && scrollTop < secondFixed_right) {
  1598. $('.pd_detail .area_desc .desc_wrap').removeClass('fixbottom');
  1599. }
  1600. if (thumbListWrap_h > descWrap_h && scrollTop > secondFixed_right2) {
  1601. $('.pd_detail .area_desc .desc_wrap').removeClass('fixbottom').addClass('absbottom');
  1602. }
  1603. });
  1604. //슬라이드 - 상품 대표설명 > 좌측 상품썸네일 navi
  1605. var thumbNavSwiper = new Swiper('.area_pic .thumb_nav_wrap .swiper-container', {
  1606. direction: 'vertical',
  1607. slidesPerView: 6,
  1608. slidesPerGroup : 6,
  1609. spaceBetween: 10,
  1610. navigation: {
  1611. nextEl: '.area_pic .thumb_nav_wrap .swiper-button-next',
  1612. prevEl: '.area_pic .thumb_nav_wrap .swiper-button-prev',
  1613. },
  1614. });
  1615. //상품 대표설명 > 상품썸네일 1개일때
  1616. var thumblist = $('.area_pic .thumb_list_wrap li');
  1617. var thumblistLength = thumblist.length;
  1618. if (thumblistLength == 1) {
  1619. thumblist.parents('.area_pic').addClass('onlyitem');
  1620. } else {
  1621. thumblist.parents('.area_pic').removeClass('onlyitem');
  1622. }
  1623. //상품 대표설명 > 좌측 상품썸네일 6개 이하일때
  1624. var thumbnavSlide = $('.area_pic .thumb_nav_wrap .swiper-container .swiper-slide');
  1625. var thumbnavLength = thumbnavSlide.length;
  1626. if (thumbnavLength < 7) {
  1627. thumbnavSlide.parents('.thumbnav').addClass('disabled');
  1628. } else {
  1629. thumbnavSlide.parents('.thumbnav').removeClass('disabled');
  1630. }
  1631. //상품 대표설명 > 좌측 상품썸네일 navi 선택시 해당 대표 썸네일 위치로 이동
  1632. $(document).on('click','.pd_detail .area_pic .thumbnav .swiper-slide a',function(e){
  1633. e.preventDefault();
  1634. var hdHeight = $('#header').outerHeight();
  1635. var targetThumb = $($(this).attr('href'));
  1636. var topThumb = targetThumb.offset().top - hdHeight;
  1637. $(this).parents('.thumbnav').find('.swiper-slide').removeClass('on');
  1638. $(this).parent('.swiper-slide').addClass('on');
  1639. targetThumb.siblings('li').removeClass('on');
  1640. targetThumb.addClass('on');
  1641. $('html,body').animate({scrollTop : topThumb}, 500);
  1642. return false;
  1643. });
  1644. var opt_selecter01 = new sCombo('.opt_select .select_custom.item_opt1.item_opt1_1');
  1645. var opt_selecter01_1 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_1');
  1646. var opt_selecter01_2 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_2');
  1647. var opt_selecter01_3 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_3');
  1648. var opt_selecter01_4 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_4');
  1649. var opt_selecter01_5 = new sCombo('.opt_set_select .select_custom.item_opt1.item_opt1_5');
  1650. if (!gagajf.isNull([[${goodsInfo.socialSq}]])){
  1651. $('.timer_box').css('display', 'block');
  1652. /* 행사 남은시간 */
  1653. function promotionTimer() {
  1654. var endTime = new Date([[${goodsInfo.socialEddt}]]); // 남은시간 지정 30 March 2021 9:56:00 GMT+0900
  1655. endTime = (Date.parse(endTime) / 1000);
  1656. var now = new Date();
  1657. now = (Date.parse(now) / 1000);
  1658. var timeLeft = endTime - now;
  1659. var days = Math.floor(timeLeft / 86400);
  1660. var hours = Math.floor((timeLeft - (days * 86400)) / 3600);
  1661. var minutes = Math.floor((timeLeft - (days * 86400) - (hours * 3600 )) / 60);
  1662. var seconds = Math.floor((timeLeft - (days * 86400) - (hours * 3600) - (minutes * 60)));
  1663. if (hours < '10') { hours = '0' + hours; }
  1664. if (minutes < '10') { minutes = '0' + minutes; }
  1665. if (seconds < '10') { seconds = '0' + seconds; }
  1666. if (Number(days) > 0 ){
  1667. hours = Number(hours) + (Number(days) * 24);
  1668. }
  1669. $('#d-hours').html(hours);
  1670. $('#d-minutes').html(minutes);
  1671. $('#d-seconds').html(seconds);
  1672. }
  1673. setInterval(function() { promotionTimer(); }, 1000);
  1674. }
  1675. //스타일링 추천 picker
  1676. $(document).on('mouseenter','.pd_recommend .area_slider .item_picker button',function(e){
  1677. $(this).parents('.item_picker').find('.pick_descr').show();
  1678. return false;
  1679. }).on('mouseleave','.pd_recommend .area_slider .item_picker button', function(e){
  1680. $(this).parents('.item_picker').find('.pick_descr').hide();
  1681. return false;
  1682. });
  1683. //상품상세정보 더보기
  1684. $(document).on('click','.pd_descrp .btn_more_box button',function(e){
  1685. $('.pd_descrp .cont_body').toggleClass('on');
  1686. $(this).toggleClass('active');
  1687. $(this).parent('.btn_more_box').toggleClass('covered');
  1688. var descrpToggle = $(this).find('span');
  1689. $(descrpToggle).text($(descrpToggle).text() == '상세정보 더보기' ? '상세정보 접기' : '상세정보 더보기');
  1690. return false;
  1691. });
  1692. //슬라이드 - STYLE24의 스타일링 추천
  1693. var rcmdItemSwiper = new Swiper('.pd .pd_recommend .area_slider .swiper-container', {
  1694. slidesPerView: 1,
  1695. spaceBetween: 0,
  1696. navigation: {
  1697. nextEl: '.pd_recommend .swiper-button-next',
  1698. prevEl: '.pd_recommend .swiper-button-prev',
  1699. },
  1700. pagination: {
  1701. el: '.pd_recommend .swiper-pagination',
  1702. clickable: true,
  1703. },
  1704. });
  1705. fnOptionSoldout();
  1706. // 광고 스크립트용
  1707. var goodsNavigation = [[${goodsNavigation}]];
  1708. var cate1Nm = "";
  1709. var cate2Nm = "";
  1710. var cate3Nm = "";
  1711. var cate4Nm = "";
  1712. var cate5Nm = "";
  1713. if (!gagajf.isNull(goodsNavigation)) {
  1714. cate1Nm = goodsNavigation.cate1Nm;
  1715. cate2Nm = goodsNavigation.cate2Nm;
  1716. cate3Nm = goodsNavigation.cate3Nm;
  1717. cate4Nm = goodsNavigation.cate4Nm;
  1718. cate5Nm = goodsNavigation.cate3Nm;
  1719. if (!gagajf.isNull(cate1Nm)) {
  1720. cateNm += cate1Nm;
  1721. }
  1722. if (!gagajf.isNull(cate2Nm)) {
  1723. cateNm += ' > ' + cate2Nm;
  1724. }
  1725. if (!gagajf.isNull(cate3Nm)) {
  1726. cateNm += ' > ' + cate3Nm;
  1727. }
  1728. if (!gagajf.isNull(cate4Nm)) {
  1729. cateNm += ' > ' + cate4Nm;
  1730. }
  1731. if (!gagajf.isNull(cate5Nm)) {
  1732. cateNm += ' > ' + cate5Nm;
  1733. }
  1734. }
  1735. // 광고 스크립트용
  1736. var snsGoodsImg = _uploadGoodsUrl + [[${goodsInfo.sysImgNm}]];
  1737. var snsUrl = location.protocol + _PAGE_GOODS_DETAIL + params.goodsCd +'&colorCd =' + params.colorCd ;
  1738. var snsGoodsFullNm = [[${goodsInfo.goodsFullNm}]];
  1739. <!-- 페이스북 카카오스토리 연동 관련 메타태그 -->
  1740. $("meta[property='og:url']").attr('content', snsUrl);
  1741. $("meta[property='og:title']").attr('content', snsGoodsFullNm);
  1742. $("meta[property='og:description']").attr('content', snsGoodsFullNm);
  1743. $("meta[property='og:image']").attr('content', snsGoodsImg);
  1744. <!-- 트위터 관련 메타태그 -->
  1745. $("meta[name='twitter:url']").attr('content', snsUrl);
  1746. $("meta[name='twitter:title']").attr('content', snsGoodsFullNm);
  1747. $("meta[name='twitter:description']").attr('content', snsGoodsFullNm);
  1748. $("meta[name='twitter:image']").attr('content', snsGoodsImg);
  1749. // 추천솔류션 meta 설정
  1750. $("meta[property='eg:type']").attr('content',"product");
  1751. $("meta[property='eg:cuid']").attr('content',eglqueueCuid);
  1752. $("meta[property='eg:itemId']").attr('content', [[${goodsInfo.goodsCd}]] );
  1753. $("meta[property='eg:itemName']").attr('content',[[${goodsInfo.goodsFullNm}]] );
  1754. $("meta[property='eg:itemImage']").attr('content', snsGoodsImg);
  1755. $("meta[property='eg:itemUrl']").attr('content',snsUrl);
  1756. $("meta[property='eg:originalPrice']").attr('content',[[${goodsInfo.listPrice}]]);
  1757. $("meta[property='eg:salePrice']").attr('content',[[${goodsInfo.currPrice}]]);
  1758. $("meta[property='eg:category1']").attr('content',cate1Nm);
  1759. $("meta[property='eg:category2']").attr('content',cate2Nm);
  1760. $("meta[property='eg:category3']").attr('content',cate3Nm);
  1761. $("meta[property='eg:category4']").attr('content',cate4Nm);
  1762. $("meta[property='eg:category5']").attr('content',cate5Nm);
  1763. $("meta[property='eg:brandId']").attr('content',[[${goodsInfo.brandGroupNo}]]);
  1764. $("meta[property='eg:brandName']").attr('content',[[${goodsInfo.brandGroupNm}]]);
  1765. $("meta[property='eg:regDate']").attr('content',[[${goodsInfo.regDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
  1766. $("meta[property='eg:updateDate']").attr('content',[[${goodsInfo.updDt}]].toDate("YYYYMMDDHHmmss").format("YYYY-MM-DDTHH:mm:ssZ"));
  1767. $("meta[property='eg:stock']").attr('content',"");
  1768. $("meta[property='eg:state']").attr('content',[[${goodsInfo.goodsStatNm}]]);
  1769. $("meta[property='eg:description']").attr('content',null);
  1770. $("meta[property='eg:extraImage']").attr('content',null);
  1771. $("meta[property='eg:locale']").attr('content',"KR");
  1772. $("meta[property='eg:isNew']").attr('content',([[${goodsInfo.formalGb}]] == 'G009_10')? 'True' :'False');
  1773. $("meta[property='eg:etc1']").attr('content', [[${goodsInfo.selfGoodsYn}]]);
  1774. // ep 쿠폰확인
  1775. fnEpCouponDown([[${afLinkCd}]], [[${params.goodsCd}]], 1);
  1776. });
  1777. // 상품평 레이어 호출후 콜백에서 호출하므로 여기에 있어야함
  1778. var fnReviewLayerCollBack = function(){
  1779. //슬라이드 - 베스트리뷰
  1780. var bestReviewtSwiper = new Swiper('.area_rv_best .swiper-container', {
  1781. slidesPerView: 2,
  1782. spaceBetween: 20,
  1783. navigation: {
  1784. nextEl: '.area_rv_best .swiper-button-next',
  1785. prevEl: '.area_rv_best .swiper-button-prev',
  1786. },
  1787. pagination: {
  1788. el: '.area_rv_best .swiper-pagination',
  1789. clickable: true,
  1790. },
  1791. });
  1792. }
  1793. $(document).on('click','.option_box [class^="opt_"] .select_custom .select',function(e){
  1794. let selectHeight = $(this);
  1795. let selectHeight02 = selectHeight.outerHeight();
  1796. if($(this).find('.opt_name').length){
  1797. $(this).siblings('.list').css({"top":selectHeight02});
  1798. }else{
  1799. $(this).siblings('.list').css({"top":"52px"});
  1800. }
  1801. });
  1802. <!-- 210422_추가 : 상품썸네일 영상 -->
  1803. var controller;
  1804. var player = document.getElementById('player');
  1805. window.onload = function() {
  1806. try {
  1807. var controller = new VgControllerClient({
  1808. // target_window: document.getElementById('prodctThumbVideo').contentWindow
  1809. target_window: document.getElementsByClassName('pd_mov').contentWindow
  1810. });
  1811. controller.on('ready', function(){
  1812. //플레이어 준비 완료
  1813. // controller.set_ratio('cover');
  1814. // contain : 비율에 맞게 채웁니다.
  1815. //fill : 화면에 꽉 차게 채웁니다.
  1816. //enlargement : 세로 높이를 꽉 차게 맞춥니다. 좌우로 스크롤이 가능합니다
  1817. controller.play();
  1818. });
  1819. controller.on('done', function(){
  1820. //플레이어 재생 완료
  1821. controller.play();
  1822. });
  1823. } catch(e) {
  1824. // Videogateweay Controller Library는 window.postMessage API를 이용하기 때문에
  1825. // 해당 기능을 지원하지 않는 웹브라우져에서는 동작하지 않습니다.
  1826. // 이 부분에 적절한 fail-over 코드를 추가하여 주십시요.
  1827. }
  1828. }
  1829. // 상품상세 asis html 이지미 경로 수정
  1830. window.onload = function(){
  1831. $(".pd_descrp .cont_body").find('img').each(function() {
  1832. let tmpImgSrc = $(this).attr('src');
  1833. if (tmpImgSrc.indexOf('/Upload') == 0 ){ // /Upload
  1834. $(this).attr('src' , tmpImgSrc.replace('/Upload', _imgUrl+"/Local"));
  1835. }
  1836. });
  1837. }
  1838. /*]]>*/
  1839. </script>
  1840. <!-- 광고 스크립트 -->
  1841. <th:block th:replace="~{web/common/advertisements/GoodsDetailScriptsWeb :: scripts}"></th:block>
  1842. <!-- //광고 스크립트 -->
  1843. </th:block>
  1844. </body>
  1845. </html>