BrandSearchLayerMob.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : BrandSearchLayerMob.html
  7. * @desc : 검색 레이어 Page
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2021.07.12 bin2107 최초 작성
  15. *******************************************************************************
  16. -->
  17. <body>
  18. <div class="modal-dialog" role="document">
  19. <div class="modal-content">
  20. <div class="modal-header htop">
  21. <h5 class="modal-title sr-only" id="schPopLabel">통합검색</h5>
  22. </div>
  23. <div class="modal-body">
  24. <section class="sch_result">
  25. <!-- 1.통합검색 default -->
  26. <div class="inner">
  27. <form id="searchMainForm" name="searchMainForm">
  28. <input type="hidden" name="brandGroupNo" th:value="${brandGroupNo}"/>
  29. <div class="sch_title">
  30. <input type="text" class="form_control" name="keyword" placeholder="브랜드 검색어를 입력하세요." autocomplete="off" onkeyup="fnOnkeyupKeyword(this);">
  31. <button type="button" class="btn_x" id="deleteKeyword" style="display:none;">X</button>
  32. <button type="button" class="btn_sch" id="btnSearchKeyword"><img th:src="${@environment.getProperty('domain.uximage')} + '/images/mo/ico_btn_search.png'" alt=""></button>
  33. </div>
  34. </form>
  35. </div>
  36. <div class="inner default_box" id="defaultArea">
  37. <div class="filter-list">
  38. <div class="f_left">
  39. <h3>최근 검색어</h3>
  40. </div>
  41. <div class="f_right">
  42. </div>
  43. </div>
  44. <div class="search-list" th:classappend="${#lists.isEmpty(recentlyKeywordList)?'nodata':''}"> <!-- 검색데이터 없을시 nodata 클래스 추가. -->
  45. <ul>
  46. <li th:if="${recentlyKeywordList}" th:each="oneData, status : ${recentlyKeywordList}">
  47. <a href="javascript:void(0);" th:onclick="fnSearchKeyword([[${oneData}]])">
  48. <p th:text="${oneData}"></p>
  49. </a>
  50. <button type="button" class="xBtn" th:onclick="fnDeleteCookie(this,[[${oneData}]]);"><span>삭제</span></button>
  51. </li>
  52. </ul>
  53. <p class="nodata_txt" th:if="${#lists.isEmpty(recentlyKeywordList)}">최근 검색어가 없습니다.</p>
  54. </div>
  55. <h3 class="hot-key" th:if="${brandGroupNo==null}">STYLE24에서 검색되고 있어요</h3>
  56. <div class="related_keyword" th:if="${brandGroupNo==null}">
  57. <div class="sub_category">
  58. <div class="cate_wrap" id="popularKeyArea">
  59. <!-- <a href="javascript:;" class="on">전체</a>-->
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. <!-- //1.통합검색 default -->
  65. <!-- 3.지금 많이 보고 있어요 상품. -->
  66. <div class="inner default_box" id="popularArea">
  67. <div class="now_view">
  68. <div class="store_product">
  69. <div class="allresult-tit">
  70. <h3>지금 많이 보고 있어요</h3>
  71. <button class="btn_refresh" onclick="fnRealtimeGoodsList();"><span th:text="${#calendars.format(#calendars.createNow(), 'HH:mm')}">17:30</span> 기준</button>
  72. </div>
  73. <div class="swiper-container sch_product">
  74. <div class="swiper-wrapper" id="itemViewArea">
  75. <th:block th:each="item, status : ${realtimeGoodsList}">
  76. <div class="swiper-slide">
  77. <div class="item_prod">
  78. <button type="button" class="itemLike" th:classappend="${item.wishCnt > 0}? 'likeit' : ''" onclick="cfnMoPutWishList(this);" th:attr="goodsCd=${item.itemId}">관심상품 추가</button>
  79. <a th:href="${item.itemUrl} + '&rccode=rts_mo_search&rtscode=mo_search'">
  80. <img th:src="${item.imageUrl}" alt="">
  81. <div class="s-text">
  82. <div class="itemName" th:text="${item.itemName}"></div>
  83. <p class="itemTag" th:text="${item.count < 10 ? '10명 미만' : item.count + '명 보는중'}">508명 보는중</p>
  84. </div>
  85. </a>
  86. </div>
  87. </div>
  88. </th:block>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. <!-- //3.지금 많이 보고 있어요 상품. -->
  95. <!-- 4.검색어 타이핑 -->
  96. <div class="inner searching_box" id="keyupArea" style="display:none;">
  97. <!-- <div class="filter-list store-list">-->
  98. <!-- </div>-->
  99. <div class="relative-list">
  100. </div>
  101. </div>
  102. <div class="inner empty_box2" id="relateGoodsDiv" style="display:none;">
  103. <div class="recommand_product">
  104. <div class="store_product">
  105. <div class="swiper-container recommand_slide">
  106. <h3>관련상품</h3>
  107. <div class="swiper-wrapper" id="relateArea">
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. <!-- //4.검색어 타이핑 -->
  114. <!-- 3.검색결과 없을때 -->
  115. <div class="inner empty_box" id="noDataArea" style="display:none;">
  116. <div class="relative-list nodata"> <!-- 검색결과 없을 시 nodata 클래스 추가 -->
  117. <p class="nodata_txt">&lsquo;<span id="noDataKeyword"></span>&rsquo; 에 맞는 상품을 찾지 못했습니다.<br>검색어를 변경해 보세요.</p>
  118. </div>
  119. <h3 class="hot-key">STYLE24에서 검색되고 있어요</h3>
  120. <div class="related_keyword">
  121. <div class="sub_category">
  122. <div class="cate_wrap" id="noDataRelatedKeyword">
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. <div class="inner empty_box" id="recommandArea" style="display:none;">
  128. <div class="recommand_product">
  129. <div class="store_product">
  130. <div class="swiper-container recommand_slide">
  131. <h3>이런 상품은 어떤가요?</h3>
  132. <div class="swiper-wrapper" id="recommendItemArea">
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <!-- //3.검색결과 없을때 -->
  139. </section>
  140. </div>
  141. </div>
  142. </div>
  143. <script src="/ux/plugins/gaga/gaga.paging.js"></script>
  144. <script th:inline="javascript">
  145. /*<![CDATA[*/
  146. var enterBool = false;
  147. var swiperschProduct = new Swiper('.swiper-container.sch_product', {
  148. slidesPerView: 3,
  149. spaceBetween: 7,
  150. autoplay: {
  151. delay: 4000,
  152. },
  153. freeMode: true,
  154. //centeredSlides: true,
  155. });
  156. var swiperschProduct = new Swiper('.swiper-container.recommand_slide', {
  157. slidesPerView: 2.2,
  158. spaceBetween: 8,
  159. autoplay: {
  160. delay: 4000,
  161. },
  162. freeMode: true,
  163. //centeredSlides: true,
  164. });
  165. $(".itemLike").click(function () {
  166. $(this).toggleClass("likeit");
  167. });
  168. var ckKeyword = "st24ck_today_keyword";
  169. var fnSetKeywordCookie = function(keyword) {
  170. var arrKeyword = new Array;
  171. var arrTempKeyword = new Array;
  172. var j = 0;
  173. arrKeyword = gagajf.getCookie(ckKeyword).split(",");
  174. if (arrKeyword.length > 0) {
  175. for (var i = 0; i < arrKeyword.length; i++) {
  176. // 쿠키에 없으면
  177. if (arrKeyword[i] != keyword && arrKeyword[i] != "") {
  178. arrTempKeyword[j++] = arrKeyword[i];
  179. }
  180. }
  181. arrTempKeyword[j++] = keyword;
  182. } else {
  183. gagajf.setCookie(ckKeyword, keyword, 1);
  184. }
  185. gagajf.setCookie(ckKeyword, arrTempKeyword, 1);
  186. }
  187. // 키워드 검색
  188. $('#btnSearchKeyword').on('click', function() {
  189. if (!gagajf.validation($('#searchMainForm'))) {
  190. return false;
  191. }
  192. // 검색결과 상품목록 호출(있으면 검색결과 페이지로 이동)
  193. gagajf.ajaxFormSubmit("/display/search/goods/list_cnt", document.searchMainForm, function(result) {
  194. if( "0" == result.response_cnt){
  195. $('.sch_result .default_box').hide();
  196. $('.sch_result .searching_box').hide();
  197. $('.sch_result .empty_box2').hide();
  198. $('.sch_result .empty_box').show();
  199. $("#noDataArea").find('#noDataKeyword').text($("#searchMainForm").find('input[name=keyword]').val());
  200. // 검색어 연관 상품 추천
  201. fnRecommendItemList($("#searchMainForm").find('input[name=keyword]').val());
  202. // 인기검색어
  203. fnTrendKeywordList();
  204. }else{
  205. let keyword = encodeURIComponent($('#searchMainForm input[name=keyword]').val());
  206. // 쿠키 세팅
  207. fnSetKeywordCookie(keyword);
  208. let actionUrl = _PAGE_BRAND_SEARCH_GOODS + '?keyword=' + keyword + '&brandGroupNo=' + $('#searchMainForm input[name=brandGroupNo]').val();
  209. cfnGoToPage(actionUrl);
  210. }
  211. }, true);
  212. });
  213. // 검색어 찾기
  214. var fnGetAutoSearch = function (){
  215. gagajf.ajaxFormSubmit("/display/search/auto/complete", document.searchMainForm, fnAutoCompleteList);
  216. }
  217. // 검색어 찾기 결과
  218. var fnAutoCompleteList = function (result){
  219. if( enterBool ) return;
  220. if(result && result.autoKeywords && result.autoKeywords.length==0 && gagajf.isNull(result.goodsList)){
  221. $('.sch_result .default_box').hide();
  222. $('.sch_result .searching_box').hide();
  223. $('.sch_result .empty_box2').hide();
  224. }else{
  225. $('.sch_result .default_box').hide();
  226. $('.sch_result .searching_box').show();
  227. $('.sch_result .empty_box').hide();
  228. $('.sch_result .empty_box2').hide();
  229. // 자동완성 키워드
  230. if(result.autoKeywords != null && result.autoKeywords.length > 0){
  231. $("#keyupArea").show();
  232. $("#keyupArea").find(".relative-list").html('');
  233. let tag = '';
  234. tag += '<ul>\n';
  235. $.each(result.autoKeywords, function (idx,item){
  236. tag += '<li>\n';
  237. tag += ' <a href="javascript:void(0);">\n';
  238. tag += ' <p><span>'+result.autoKeywords[idx]+'</span></p>\n';
  239. tag += ' </a>\n';
  240. tag += '</li>\n';
  241. });
  242. tag += '</ul>\n';
  243. $("#keyupArea").find(".relative-list").append(tag);
  244. }else{
  245. $("#keyupArea").find(".relative-list").html('');
  246. $("#keyupArea").hide();
  247. }
  248. // if(result.cateList != null && result.cateList.length > 0){
  249. // $("#keyupCateArea").find(".sch_category").html('');
  250. // let tag = '';
  251. // tag += '<h3>카테고리</h3>\n';
  252. // tag += '<ul>\n';
  253. // $.each(result.cateList, function (idx, item){
  254. // tag +='<li>\n';
  255. // tag +=' <a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'G032_101\' ';
  256. // if(item.cate1No != null){
  257. // tag += ', '+item.cate1No;
  258. // }
  259. // if(item.cate2No != null){
  260. // tag += ', '+item.cate2No;
  261. // }
  262. // if(item.cate3No != null){
  263. // tag += ', '+item.cate3No;
  264. // }
  265. // if(item.cate4No != null){
  266. // tag += ', '+item.cate4No;
  267. // }
  268. // if(item.cate5No != null){
  269. // tag += ', '+item.cate5No;
  270. // }
  271. // tag += ');">\n';
  272. // if(item.cate1Nm != null){
  273. // tag += ' <span>'+item.cate1Nm+'</span>\n';
  274. // }
  275. // if(item.cate2Nm != null){
  276. // tag += ' <span>'+item.cate2Nm+'</span>\n';
  277. // }
  278. // if(item.cate3Nm != null){
  279. // tag += ' <span>'+item.cate3Nm+'</span>\n';
  280. // }
  281. // if(item.cate4Nm != null){
  282. // tag += ' <span>'+item.cate4Nm+'</span>\n';
  283. // }
  284. // if(item.cate5Nm != null){
  285. // tag += ' <span>'+item.cate5Nm+'</span>\n';
  286. // }
  287. // tag +=' </a>\n';
  288. // tag +='</li>\n';
  289. // });
  290. // tag += '</ul>\n';
  291. //
  292. // $("#keyupCateArea").find(".sch_category").append(tag);
  293. // }else{
  294. // $("#keyupCateArea").find(".sch_category").html('');
  295. // }
  296. if(!gagajf.isNull(result.goodsList)){
  297. $("#relateGoodsDiv").show();
  298. $("#relateArea").html('');
  299. let tag = '';
  300. $.each(result.goodsList, function (idx, item){
  301. //console.log(item);
  302. if(idx<5) {
  303. tag += '<div class="swiper-slide">\n';
  304. tag += ' <div class="item_prod">\n';
  305. tag += ' <div class="item_state">\n';
  306. tag += ' <button type="button" class="itemLike';
  307. if(item.likeIt == 'likeit'){
  308. tag += ' likeit';
  309. }
  310. tag += '" onclick="cfnMoPutWishList(this);" goodsCd="'+item.goodsCd+'">관심상품 추가</button>\n';
  311. //tag += ' <button type="button" class="itemLike">관심상품 추가</button>\n';
  312. tag += ' <a href="javascript:void(0);" class="itemLink" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\',\'' + item.colorCd + '\');">\n';
  313. tag += ' <div class="itemPic">\n';
  314. tag += ' <img class="vLHTC pd_img" src="'+item.sysImgNm+'" alt="">\n';
  315. tag += ' </div>\n';
  316. tag += ' <p class="itemBrand">'+item.brandGroupNm+'</p>\n';
  317. tag += ' <div class="itemName">'+item.goodsFullNm+'</div>\n';
  318. tag += ' <p class="itemPrice">\n';
  319. if(item.listPrice != item.currPrice) {
  320. tag += ' <span class="itemPrice_original">'+ item.listPrice.addComma() +'</span>\n';
  321. }
  322. tag += item.currPrice.addComma() ;
  323. if(item.listPrice != item.currPrice) {
  324. tag += ' <span class="itemPercent">' + Math.round((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100) + '%</span>\n';
  325. }
  326. tag += ' </p>\n';
  327. tag += ' </a>\n';
  328. tag += ' </div>\n';
  329. tag += ' </div>\n';
  330. tag += '</div>\n';
  331. }
  332. });
  333. $("#relateArea").html(tag);
  334. var swiperschProduct5 = new Swiper('.swiper-container.recommand_slide', {
  335. slidesPerView: 2.2,
  336. spaceBetween: 8,
  337. autoplay: {
  338. delay: 4000,
  339. },
  340. freeMode: true,
  341. //centeredSlides: true,
  342. });
  343. }else{
  344. $("#relateArea").html('');
  345. $("#relateGoodsDiv").hide();
  346. }
  347. }
  348. }
  349. // 검색어 입력
  350. var fnOnkeyupKeyword = function (obj){
  351. if( 13 != event.keyCode){
  352. enterBool = false;
  353. var searchValue = $(obj).val();
  354. if(searchValue.length > 0){
  355. fnGetAutoSearch();
  356. }else{
  357. $('.sch_result .default_box').show();
  358. $('.sch_result .searching_box').hide();
  359. $('.sch_result .empty_box').hide();
  360. $('.sch_result .empty_box2').hide();
  361. }
  362. }else{
  363. // 엔터친 후, 그 전에 검색한 결과가 오고있으므로
  364. enterBool = true;
  365. }
  366. }
  367. document.getElementById("deleteKeyword").onclick = function (){
  368. $("#searchMainForm").find("input[name=keyword]").val('');
  369. fnOnkeyupKeyword($("#searchMainForm").find("input[name=keyword]"));
  370. }
  371. $(document).ready( function() {
  372. $("#keyupArea").hide();
  373. $("#keyupCateArea").hide();
  374. $("#deleteKeyword").hide();
  375. $("#noDataArea").hide();
  376. $("#recommandArea").hide();
  377. $("#relateGoodsDiv").hide();
  378. });
  379. // 선택 단어 검색
  380. var fnSearchKeyword = function (obj){
  381. $("#searchMainForm").find("input[name=keyword]").val(obj);
  382. $('#btnSearchKeyword').trigger('click');
  383. }
  384. // 선택 단어 삭제
  385. var fnDeleteCookie = function (obj, keyword){
  386. $(obj).closest('li').remove();
  387. gagajf.setCookie('st24ck_today_keyword',keyword, -1);
  388. }
  389. // 검색어 입력 후 엔터키
  390. $('#searchMainForm input[name=keyword]').keypress(function (event) {
  391. if (event.which === 13) {
  392. event.preventDefault();
  393. $('#btnSearchKeyword').trigger('click');
  394. }
  395. });
  396. // 인기검색어 조회
  397. var fnTrendKeywordList = function (){
  398. $("#noDataRelatedKeyword").html('');
  399. var html = '';
  400. $.getJSON('/display/search/trend/keyword/list', function (result){
  401. if(result.trendList.length > 0){
  402. $.each(result.trendList, function (idx, item){
  403. html += '<a href="javascript:void(0);" onclick="fnSearchKeyword(\''+item.keyword+'\');"><span>#</span>'+item.keyword+'</a>';
  404. });
  405. }
  406. $("#noDataRelatedKeyword").append(html);
  407. });
  408. }
  409. // 검색어 연관 상품 추천
  410. var fnRecommendItemList = function (keyword){
  411. if(gagajf.isNull(keyword)){
  412. keyword = "";
  413. }
  414. var data = {keyword : keyword.trim()};
  415. var html = '';
  416. $.getJSON('/display/recommend/item/list', data, function (result){
  417. $("#recommendItemArea").html('');
  418. $("#recommandArea").show();
  419. if(result.length > 0){
  420. $.each(result, function (idx, item){
  421. html += '<div class="swiper-slide">\n';
  422. html += ' <div class="item_prod">\n';
  423. html += ' <div class="item_state">\n';
  424. html += ' <button type="button" class="itemLike">관심상품 추가</button>\n';
  425. html += ' <a href="'+item.product.itemUrl+'" class="itemLink">\n';
  426. html += ' <div class="itemPic">\n';
  427. html += ' <img class="vLHTC pd_img" src="'+item.product.itemImage+'" alt="">\n';
  428. html += ' </div>\n';
  429. html += ' <p class="itemBrand">'+item.product.brandName+'</p>\n';
  430. html += ' <div class="itemName">'+item.product.itemName+'</div>\n';
  431. html += ' <p class="itemPrice">\n';
  432. if(item.product.salePrice < item.product.originalPrice) {
  433. html += ' <span class="itemPrice_original">'+ item.product.originalPrice.addComma() +'</span>\n';
  434. }
  435. html += item.product.salePrice.addComma() ;
  436. if(item.product.salePrice < item.product.originalPrice) {
  437. html += ' <span class="itemPercent">' + Math.round((item.product.originalPrice - item.product.salePrice) / (item.product.originalPrice * 1.0) * 100) + '%</span>\n';
  438. }
  439. html += ' </p>\n';
  440. html += ' </a>\n';
  441. html += ' </div>\n';
  442. html += ' </div>\n';
  443. html += '</div>\n';
  444. });
  445. $("#recommendItemArea").append(html);
  446. var swiperschProduct4 = new Swiper('.swiper-container.recommand_slide', {
  447. slidesPerView: 2.2,
  448. spaceBetween: 8,
  449. autoplay: {
  450. delay: 4000,
  451. },
  452. freeMode: true,
  453. //centeredSlides: true,
  454. });
  455. }else{
  456. $("#recommendItemArea").html('');
  457. $("#recommandArea").hide();
  458. }
  459. });
  460. }
  461. /*]]>*/
  462. </script>
  463. </body>
  464. </html>