LookbookDetailFormMob.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  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="mob/common/layout/BrandLayoutMob">
  6. <!--
  7. *******************************************************************************
  8. * @source : LookbookDetailFormMob.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.05.09 bin2107 최초 작성
  17. *******************************************************************************
  18. -->
  19. <body>
  20. <th:block layout:fragment="content">
  21. <main role="" id="" class="container br">
  22. <!-- ★ 컨텐츠 시작 -->
  23. <section class="content br_lookbook" th:if="${lookbookDetailList != null}">
  24. <div class="inner">
  25. <h2 class="collection_title" th:text="${lookbookInfo.title}">2020 F/W COLLECTION</h2>
  26. </div>
  27. <div class="inner wide">
  28. <div class="recommendedArea">
  29. <!-- 상품이미지pic -->
  30. <div class="area_slider pic_img">
  31. <div class="swiper-container">
  32. <div class="swiper-wrapper">
  33. <th:block th:each="item, stat : ${lookbookDetailList}">
  34. <div class="swiper-slide">
  35. <div class="page">
  36. <div class="pic">
  37. <span class="thumb" th:style="${'background-image:url('+@environment.getProperty('domain.image')+item.sysFileNm+')'}"></span>
  38. <!-- 상품피커 -->
  39. <th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
  40. <div class="item_picker" th:style="${'left:'+goodsItem.xlim+'%; top:'+goodsItem.ylim+'%;'}">
  41. <div>
  42. <button type="button" th:onclick="fnLookbookGoodsPopup([[${goodsItem.sysImgNm}]],[[${goodsItem.brandGroupNm}]],[[${goodsItem.goodsFullNm}]],[[${goodsItem.listPrice}]],[[${goodsItem.currPrice}]],[[${goodsItem.dcRate}]],[[${goodsItem.goodsCd}]],[[${goodsItem.stockQty}]],[[${goodsItem.soldoutYn}]])"><span class="ico ico_picker"></span></button>
  43. <div class="pick_descr">
  44. <a href="javascript:void(0);">
  45. </a>
  46. </div>
  47. </div>
  48. </div>
  49. </th:block>
  50. <!-- //상품피커 -->
  51. </div>
  52. </div>
  53. </div>
  54. </th:block>
  55. </div>
  56. <!-- Add Pagination -->
  57. <div class="swiper-pagination"></div>
  58. </div>
  59. </div>
  60. <!-- //상품이미지pic -->
  61. <div class="lb_text" id="lbImgDesc" th:if="${lookbookDetailList != null}">
  62. <th:block th:each="item, stat : ${lookbookDetailList}">
  63. <div class="text_cont">
  64. <input type="hidden" name="title" th:value="${item.imgDesc}">
  65. </div>
  66. </th:block>
  67. <button class="btn btnText"><p>더보기</p><span></span></button>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="inner" th:if="${lookbookDetailList != null}">
  72. <div class="br_inlookbook">
  73. <th:block th:each="item, stat : ${lookbookDetailList}">
  74. <p class="title ioTit"><em>룩북 속 상품</em>(<th:block th:text="${#lists.size(item.lookbookGoodsList)}"></th:block>)</p>
  75. </th:block>
  76. <div class="area_slider">
  77. <!-- 겉 상품 -->
  78. <div class="items_outside">
  79. <th:block th:each="item, stat : ${lookbookDetailList}">
  80. <div class="itemsOut" th:id="${'itemsList'+stat.count}">
  81. <div class="swiper-container items_inside swiper-container-initialized swiper-container-horizontal">
  82. <div class="swiper-wrapper" style="transform: translate3d(0px, 0px, 0px);">
  83. <th:block th:if="${item.lookbookGoodsList != null and !item.lookbookGoodsList.empty}" th:each="goodsItem, goodsStatus : ${item.lookbookGoodsList}">
  84. <div class="swiper-slide swiper-slide-active" style="width: 210.333px; margin-right: 20px;">
  85. <div class="item_prod" th:attr="goodsCd=${goodsItem.goodsCd}, optCdInfo=${goodsItem.optCdInfo}, minOrdQty=${goodsItem.minOrdQty}, goodsType=${goodsItem.goodsType}">
  86. <div class="item_state" th:classappend="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}? 'soldout' : ''">
  87. <th:block th:each="optCd : ${#strings.arraySplit(goodsItem.optCdInfo,',')}">
  88. <input type="hidden" name="lookbookGoodsOptCd" th:value="${optCd}"/>
  89. </th:block>
  90. <th:block th:if="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}">
  91. <a href="javascript:void(0);" class="itemLink" >
  92. </th:block>
  93. <th:block th:unless="${(goodsItem.stockQty <= 0 or goodsItem.soldoutYn == 'Y')}">
  94. <a href="javascript:void(0);" class="itemLink" th:onclick="cfnGoToGoodsDetail([[${goodsItem.goodsCd}]])">
  95. </th:block>
  96. <div class="itemPic">
  97. <img alt="" class="vLHTC pd_img" th:src="${@environment.getProperty('upload.goods.view') + '/' + goodsItem.sysImgNm}">
  98. </div>
  99. <p class="itemBrand" th:text="${goodsItem.brandGroupNm}">BRAND NAME1</p>
  100. <div class="itemName" th:text="${goodsItem.goodsFullNm}">남성 로고 자카드 방풍 패딩</div>
  101. <p class="itemPrice">[[${#numbers.formatInteger(goodsItem.currPrice,0,'COMMA')} + 원]]
  102. <span class="itemPrice_original" th:if="${goodsItem.currPrice != goodsItem.listPrice}" th:text="${#numbers.formatInteger(goodsItem.listPrice,3,'COMMA')}">89,000</span>
  103. <span class="itemPercent" th:if="${goodsItem.dcRate > 0}" th:text="|${#numbers.formatDecimal(goodsItem.dcRate,0,0)}%|">10%</span>
  104. </p>
  105. </a>
  106. </div>
  107. </div>
  108. </div>
  109. </th:block>
  110. </div>
  111. <div class="swiper-scrollbar" style="opacity: 0; transition-duration: 400ms;">
  112. <div class="swiper-scrollbar-drag" style="transition-duration: 0ms;"></div>
  113. </div>
  114. <span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span>
  115. </div>
  116. </div>
  117. </th:block>
  118. <!-- 룩북1 해당 아이템 -->
  119. </div>
  120. <!-- 겉 상품 종료 -->
  121. </div>
  122. <!-- 05.06_ 추가 : .ioTit , .ioBtn -->
  123. <th:block th:each="item, stat : ${lookbookDetailList}">
  124. <button class="btn ioBtn" th:onclick="fnAddCartLookBookGoods1(this,[[${stat.count}]]);">모두 쇼핑백 담기</button>
  125. </th:block>
  126. </div>
  127. </div>
  128. <div class="inner" th:if="${otherLookbookList}">
  129. <!-- 다른룩북보기 슬라이드 -->
  130. <div class="br_otherbrand">
  131. <h3 class="br_subtitle">다른 룩북 보기</h3>
  132. <div class="area_slider">
  133. <div class="swiper-container">
  134. <div class="swiper-wrapper">
  135. <th:block th:if="${otherLookbookList}" th:each="oneData, status : ${otherLookbookList}">
  136. <div class="swiper-slide">
  137. <a th:href="|javascript:cfnGoToLookbookDetail('${lookbookInfo.lookbookGb}','${oneData.lookbookSq}','${oneData.brandCd}')|">
  138. <div class="thumb">
  139. <img th:src="${@environment.getProperty('domain.image')+oneData.sysFileNm}" style="height:100%" alt="">
  140. </div>
  141. <div class="txt">
  142. <p class="tt" th:text="${oneData.title}"></p>
  143. </div>
  144. </a>
  145. </div>
  146. </th:block>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. <!-- //다른룩북보기 슬라이드 -->
  152. </div>
  153. </section>
  154. <!-- ★ 컨텐츠 종료 -->
  155. <!-- 픽커모달 -->
  156. <div class="modal fade" id="reco_pop" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  157. <!-- <div class="modal-dialog" role="document">-->
  158. <!-- <div class="modal-content">-->
  159. <!-- <div class="modal-header">-->
  160. <!-- <h5 class="modal-title"><span class="sr_only">제품정보</span></h5>-->
  161. <!-- </div>-->
  162. <!-- <div class="modal-body">-->
  163. <!-- <div class="itemsGrp rowtype">-->
  164. <!-- <div class="item_prod">-->
  165. <!-- <div class="item_state">-->
  166. <!-- <a href="#none" class="itemLink">-->
  167. <!-- <div class="itemPic">-->
  168. <!-- <img class="vLHTC pd_img" src="/images/mo/thumb/br_main03.png" alt="">-->
  169. <!-- </div>-->
  170. <!-- <p class="itemBrand">BRAND NAME</p>-->
  171. <!-- <div class="itemName">남성 헤링본 기모 팬츠 헤링본 기모 팬츠</div>-->
  172. <!-- <p class="itemPrice">-->
  173. <!-- 80,100-->
  174. <!-- </p>-->
  175. <!-- </a>-->
  176. <!-- </div>-->
  177. <!-- </div>-->
  178. <!-- </div>-->
  179. <!-- </div>-->
  180. <!-- </div>-->
  181. <!-- </div>-->
  182. <!-- <a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>-->
  183. </div>
  184. <!-- //픽커모달 -->
  185. </main>
  186. <script th:inline="javascript">
  187. /*<![CDATA[*/
  188. var lookbookGb = [[${lookbookInfo.lookbookGb}]];
  189. var brandCd = [[${lookbookInfo.brandCd}]];
  190. var goodsImgUrl = [[${@environment.getProperty('upload.goods.view')}]];
  191. var fnLookbookGoodsPopup = function(obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8,obj9){
  192. $("#reco_pop .modal-dialog").remove();
  193. tag = '';
  194. tag +='<div class="modal-dialog" role="document">\n';
  195. tag +=' <div class="modal-content">\n';
  196. tag +=' <div class="modal-header">\n';
  197. tag +=' <h5 class="modal-title"><span class="sr_only">제품정보</span></h5>\n';
  198. tag +=' </div>\n';
  199. tag +=' <div class="modal-body">\n';
  200. tag +=' <div class="itemsGrp rowtype">\n';
  201. tag +=' <div class="item_prod ';
  202. if(obj9 == 'Y'){
  203. tag += ' sold_out';
  204. }
  205. tag +='">\n';
  206. tag +=' <div class="item_state">\n';
  207. tag +=' <a href="javascript:void(0);" onclick="cfnGoToGoodsDetail(\''+obj7+'\',\'\',\'\')" class="itemLink">\n';
  208. tag +=' <div class="itemPic">\n';
  209. tag +=' <img class="vLHTC pd_img" src="'+goodsImgUrl+'/'+obj1+'?RS=260" alt="">\n';
  210. tag +=' </div>\n';
  211. tag +=' <p class="itemBrand">'+obj2+'</p>\n';
  212. tag +=' <div class="itemName">'+obj3+'</div>\n';
  213. tag +=' <p class="itemPrice">'+obj5.addComma()+'</p>\n';
  214. tag +=' </a>\n';
  215. tag +=' </div>\n';
  216. tag +=' </div>\n';
  217. tag +=' </div>\n';
  218. tag +=' </div>\n';
  219. tag +=' </div>\n';
  220. tag +='</div>\n';
  221. tag +='<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>\n';
  222. $("#reco_pop").append(tag);
  223. $('#reco_pop').modal("show");
  224. }
  225. var fnAddCartLookBookGoods1 = function (obj, idx){
  226. let $obj = $(obj);
  227. let $target = $('.br_inlookbook #itemsList'+idx).find('.item_prod');
  228. let goodsSize = $target.length;
  229. let btnType = "C";
  230. let params = [];
  231. let goodsIdx = 0;
  232. $target.each(function(){
  233. params = [];
  234. goodsIdx ++;
  235. if ($(this).hasClass('unable')) {
  236. }else{
  237. // 옵션확인
  238. let goodsCnt = $(this).find('input[name=lookbookGoodsOptCd]').length;
  239. if(goodsCnt == 1){
  240. let arrOpt = $(this).find('input[name=lookbookGoodsOptCd]').val();
  241. let arrOptInfo = arrOpt.split(':');
  242. let obj = new Object();
  243. obj.goodsCd = $(this).attr("goodsCd");
  244. obj.optCd = arrOptInfo[1];
  245. obj.goodsQty = $(this).attr("minOrdQty");
  246. obj.goodsType = $(this).attr("goodsType");
  247. obj.cartGb = btnType;
  248. obj.afLinkCd = '';
  249. obj.ithrCd = $(this).attr("ithrCd");
  250. obj.contentsLoc = $(this).attr("contentsLoc");
  251. obj.planDtlSq = '';
  252. obj.multiGoodsGb = 'O' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  253. if (goodsIdx == goodsSize){
  254. obj.multiGoodsGb = 'E' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  255. }
  256. params.push(obj);
  257. // 장바구니담기
  258. cfnAddCart(params);
  259. }else{
  260. let $goods = $(this);
  261. let cartGoodsList = [];
  262. let compsList = [];
  263. let goodsList = {
  264. cartCompsList : new Array()
  265. }
  266. let arrInfo = $(this).find('input[name=lookbookGoodsOptCd]').val().split(','); // 상품코드단위
  267. $.each(arrInfo, function(idx, item) {
  268. let arrOptInfo = item.split(':');
  269. let obj = new Object();
  270. obj.cartGb = btnType;
  271. obj.goodsType = $goods.attr("goodsType");
  272. obj.goodsCd = $goods.attr("goodsCd");
  273. obj.itemCd =arrOptInfo[0];
  274. obj.optCd = arrOptInfo[1];
  275. obj.goodsQty = $goods.attr("minOrdQty");
  276. obj.afLinkCd = '';
  277. obj.ithrCd = $goods.attr("ithrCd");
  278. obj.contentsLoc = $goods.attr("contentsLoc");
  279. obj.planDtlSq = ''
  280. obj.multiGoodsGb = 'O' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  281. if (goodsIdx == goodsSize){
  282. obj.multiGoodsGb = 'E' // 단품, 세트 혼합쇼핑백처리일경우, 마지막이 아닌경우는 'O'아니고 NULL 아닌값
  283. }
  284. compsList.push(obj);
  285. });
  286. goodsList.cartCompsList = compsList;
  287. cartGoodsList.push(goodsList);
  288. // 장바구니담기
  289. cfnAddCart(cartGoodsList);
  290. }
  291. }
  292. });
  293. }
  294. $(document).ready(function(){
  295. //setHtop();
  296. var spc = $('.swiper-pagination-current');
  297. var spt = $('.swiper-pagination-total');
  298. setInterval(function(){
  299. for(var i=0; i<spc.length; i++){
  300. if(spc[i].innerText.length < 2){
  301. var itNum = spc[i].innerText.toString();
  302. spc[i].innerText = 0+itNum;
  303. }
  304. }
  305. for(var i=0; i<spt.length; i++){
  306. if(spt[i].innerText.length < 2){
  307. var itNum2 = spt[i].innerText.toString();
  308. spt[i].innerText = 0+itNum2;
  309. }
  310. }
  311. }, 10);
  312. $(document).on('click','.item_picker',function(e){
  313. $("#reco_pop").modal("show");
  314. $("body").addClass("recoPop");
  315. return false;
  316. });
  317. $(document).on('click','#reco_pop .close-modal',function(e){
  318. $("body").removeClass("recoPop");
  319. return false;
  320. });
  321. });
  322. function setHtop() {
  323. if($('header').hasClass('main')) {
  324. $('#htopMain').show();
  325. $('#htopSub').hide();
  326. } else {
  327. $('#htopMain').hide();
  328. $('#gnb').hide();
  329. $('#htopSub').show();
  330. }
  331. }
  332. // 룩북 슬라이드
  333. var rcmdPicimgSwiper = new Swiper('.recommendedArea .area_slider .swiper-container', {
  334. loop: true,
  335. slidesPerView: 1,
  336. spaceBetween: 0,
  337. pagination: {
  338. el: '.swiper-pagination',
  339. type: 'fraction',
  340. },
  341. //210414_자동롤링 추가
  342. //autoplay : {
  343. // delay : 3000, // 시간 설정
  344. //},
  345. on: {
  346. slideChange:function(){
  347. // 05.06_ 추가 : .ioTit , .ioBtn
  348. $('.text_cont').removeClass('active');
  349. $('.ioTit').removeClass('active');
  350. $('.itemsOut').removeClass('active');
  351. $('.ioBtn').removeClass('active');
  352. $('.text_cont').eq(this.realIndex).addClass('active');
  353. $('.ioTit').eq(this.realIndex).addClass('active');
  354. $('.itemsOut').eq(this.realIndex).addClass('active');
  355. $('.ioBtn').eq(this.realIndex).addClass('active');
  356. }
  357. },
  358. });
  359. //룩북 속 상품
  360. var inLookbookSwiper = new Swiper('.br_inlookbook .area_slider .swiper-container', {
  361. slidesPerView: 3,
  362. spaceBetween: 26,
  363. observer: true,
  364. observeParents: true,
  365. //pagination: {
  366. // el: '.swiper-pagination',
  367. // type: 'fraction',
  368. //},
  369. });
  370. //다른 룩북 보기
  371. var otherBrandSwiper = new Swiper('.br_otherbrand .area_slider .swiper-container', {
  372. slidesPerView: 2,
  373. spaceBetween: 8,
  374. //pagination: {
  375. // el: '.swiper-pagination',
  376. // type: 'fraction',
  377. //},
  378. });
  379. // 더보기
  380. var count = 0;
  381. function view_fold(){
  382. document.querySelector(".lb_text button").onclick = function () {
  383. if(count === 0) {
  384. //document.querySelector(".lb_text .text_cont").style.height = "auto";
  385. $('.lb_text .text_cont').css('height', 'auto');
  386. document.querySelector(".lb_text .btnText p").innerText="접기";
  387. document.querySelector(".lb_text .btnText span").style.background="url(/images/mo/br_arrow_up.png)";
  388. count = 1;
  389. } else {
  390. //document.querySelector(".lb_text .text_cont").style.height = "3.4rem";
  391. $('.lb_text .text_cont').css('height', '3.4rem');
  392. document.querySelector(".lb_text .btnText p").innerText="더보기";
  393. document.querySelector(".lb_text .btnText span").style.background="url(/images/mo/br_arrow_down.png)";
  394. count = 0;
  395. }
  396. }
  397. }
  398. view_fold();
  399. /*]]>*/
  400. </script>
  401. <script>
  402. // 픽커모달
  403. $(document).ready(function () {
  404. $("#htopTitle").html('룩북');
  405. });
  406. $('#lbImgDesc .text_cont').each(function (){
  407. var brText = $(this).find("input[name=title]").val();
  408. let tag = brText.replace(/(?:\r\n|\r|\n)/g, '<br>');
  409. $(this).append(tag);
  410. });
  411. </script>
  412. </th:block>
  413. </body>
  414. </html>