BrandSearchLayerWeb.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : BrandSearchLayerWeb.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. <h2 class="sr-only">통합검색</h2>
  18. <div class="cont_search">
  19. <div class="area_input">
  20. <form id="brandSearchMainForm" name="brandSearchMainForm">
  21. <input type="hidden" name="brandGroupNo" th:value="${brandGroupNo}"/>
  22. <fieldset>
  23. <legend>통합검색</legend>
  24. <input type="text" name="keyword" value="" placeholder="검색어를 입력하세요." class="search_input" title="검색어 입력" maxlength="100" required="required" data-valid-name="검색어" autocomplete="off" onkeyup="fnOnkeyupKeyword(this);"/>
  25. <button type="button" class="sch_btn" id="btnSearchKeyword"><i class="ico ico_search"><em>검색</em></i></button>
  26. </fieldset>
  27. </form>
  28. </div>
  29. <div class="area_result">
  30. <!-- 검색결과 입력 전 -->
  31. <div class="default_box">
  32. <div class="recent_blk">
  33. <h3>최근 검색어</h3>
  34. <!-- 최근검색어 있을 시 노출 -->
  35. <div class="list_recent_keword" th:if="${not #lists.isEmpty(recentlyKeywordList)}">
  36. <ul>
  37. <li th:if="${recentlyKeywordList}" th:each="oneData, status : ${recentlyKeywordList}">
  38. <a href="javascript:void(0);" th:text="${oneData}" th:onclick="fnSearchKeyword([[${oneData}]])">슬랙스</a>
  39. <button type="button" class="btn_delete" th:onclick="fnDeleteCookie(this,[[${oneData}]]);" ><span>삭제</span></button>
  40. </li>
  41. </ul>
  42. </div>
  43. <button type="button" class="btn_underline" th:if="${not #lists.isEmpty(recentlyKeywordList)}"><span>전체삭제</span></button>
  44. <!-- //최근검색어 있을 시 노출 -->
  45. <!-- 최근검색어 없을 시 노출 -->
  46. <div class="empty_txt" th:if="${#lists.isEmpty(recentlyKeywordList)}">
  47. 최근 검색어가 없습니다.
  48. </div>
  49. <!-- //최근검색어 없을 시 노출 -->
  50. </div>
  51. <div class="realtime_blk">
  52. <h3>지금 고객님들이 많이 보고 있어요</h3>
  53. <div class="modify_timer">
  54. <button type="button" onclick="fnRealtimeGoodsList();"><span><em class="time" th:text="${#calendars.format(#calendars.createNow(), 'HH:mm')}">17:30</em> 기준</span></button>
  55. </div>
  56. <div class="realtime_wrap">
  57. <div class="swiper-container">
  58. <div class="swiper-wrapper itemsGrp" id="itemViewArea">
  59. <th:block th:each="item, status : ${realtimeGoodsList}">
  60. <div class="swiper-slide">
  61. <div class="item_prod">
  62. <div class="item_state">
  63. <a th:href="${item.itemUrl} + '&rccode=rts_pc_search&rtscode=pc_search'" class="itemLink">
  64. <div class="itemPic">
  65. <img alt="" class="vLHTC pd_img" th:src="${item.imageUrl}">
  66. </div>
  67. <div class="itemName" th:text="${item.itemName}"></div>
  68. <div class="viewCount"><span th:text="${item.count < 10 ? '10명 미만' : item.count + '명 보는중'}"></span></div>
  69. </a>
  70. </div>
  71. </div>
  72. </div>
  73. </th:block>
  74. </div>
  75. <div class="swiper-controls">
  76. <div class="swiper-scrollbar"></div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. <!-- //검색결과 입력 전 -->
  83. <!-- 검색결과 입력 후 -->
  84. <div class="searching_box" style="display:none;">
  85. <div class="autokeyword_blk">
  86. </div>
  87. <div class="pd_list relate" id="relateGoodsDiv">
  88. <h3>관련상품</h3>
  89. <div class="realtime_wrap">
  90. <div class="itemsGrp">
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. <!-- //검색결과 입력 후 -->
  96. <!-- 검색결과 없을때 노출 -->
  97. <div class="empty_box" style="display: none">
  98. <div class="">
  99. <div class="nodata">
  100. <p>
  101. <span class="keyword" id="noDataKeyword"></span>에 맞는 상품을 찾지 못했습니다.<br>
  102. 검색어를 변경해 보세요.
  103. </p>
  104. </div>
  105. <div class="pd_list recommend">
  106. <h3>이런 상품은 어떤가요?</h3>
  107. <div class="itemsGrp" id="recommendItemArea">
  108. </div>
  109. </div>
  110. </div>
  111. <!-- //검색결과 없을때 노출 -->
  112. </div>
  113. </div>
  114. </div>
  115. <button type="button" class="btn_close_search" onclick="fnClose();"><span>닫기</span></button>
  116. <script src="/ux/plugins/gaga/gaga.paging.js"></script>
  117. <script th:inline="javascript">
  118. /*<![CDATA[*/
  119. var enterBool = false;
  120. var fnClose = function() {
  121. $("body").removeClass("lock");
  122. $("#brand_layer_search").removeClass('active');
  123. }
  124. // 검색어 입력 후 엔터키
  125. $('#brandSearchMainForm input[name=keyword]').keypress(function (event) {
  126. if (event.which === 13) {
  127. event.preventDefault();
  128. $('#btnSearchKeyword').trigger('click');
  129. }
  130. });
  131. var ckKeyword = "st24ck_today_keyword";
  132. var fnSetKeywordCookie = function(keyword) {
  133. var arrKeyword = new Array;
  134. var arrTempKeyword = new Array;
  135. var j = 0;
  136. arrKeyword = gagajf.getCookie(ckKeyword).split(",");
  137. if (arrKeyword.length > 0) {
  138. for (var i = 0; i < arrKeyword.length; i++) {
  139. // 쿠키에 없으면
  140. if (arrKeyword[i] != keyword && arrKeyword[i] != "") {
  141. arrTempKeyword[j++] = arrKeyword[i];
  142. }
  143. }
  144. arrTempKeyword[j++] = keyword;
  145. } else {
  146. gagajf.setCookie(ckKeyword, keyword, 1);
  147. }
  148. gagajf.setCookie(ckKeyword, arrTempKeyword, 1);
  149. }
  150. // 키워드 검색
  151. $('#btnSearchKeyword').on('click', function() {
  152. if (!gagajf.validation($('#brandSearchMainForm'))) {
  153. return false;
  154. }
  155. // 검색결과 상품목록 호출(있으면 검색결과 페이지로 이동)
  156. gagajf.ajaxFormSubmit("/display/search/goods/list_cnt", document.brandSearchMainForm, function(result) {
  157. if( "0" == result.response_cnt){
  158. $('.common_search .area_result .default_box').hide();
  159. $('.common_search .area_result .searching_box').hide();
  160. $('.common_search .area_result .empty_box').show();
  161. $('.empty_box .nodata').find('#noDataKeyword').text("'"+$("#brandSearchMainForm").find('input[name=keyword]').val()+"'");
  162. // 검색결과 페이지에서 검색팝업 띄웠을때 (검색결과 페이지에 정의되어있으므로 내용 안뜨는 오류)
  163. if( 1 == $("input[name=keyword]").length ){
  164. $(".common_search .recommend").show();
  165. // 검색어 연관 상품 추천
  166. fnRecommendItemList($("#brandSearchMainForm").find('input[name=keyword]').val());
  167. }else{
  168. $(".common_search .recommend").hide();
  169. }
  170. }else{
  171. let keyword = encodeURIComponent($('#brandSearchMainForm input[name=keyword]').val());
  172. // 쿠키 세팅
  173. fnSetKeywordCookie(keyword);
  174. let actionUrl = _PAGE_BRAND_SEARCH_GOODS + '?keyword=' + keyword + '&brandGroupNo=' + $('#brandSearchMainForm input[name=brandGroupNo]').val();
  175. cfnGoToPage(actionUrl);
  176. }
  177. }, true);
  178. });
  179. var submain_slide;
  180. $(document).ready( function() {
  181. $("#brand_layer_search").addClass('active');
  182. //통합검색 - 검색어 입력 시
  183. //
  184. // 지금 고객님들이 많이 보고 있어요
  185. //210730_ 추가 : 지금 고객님들이 많이 보고 있어요 슬라이드 swiper 옵션 추가.
  186. submain_slide = new Swiper('.realtime_wrap .swiper-container', {
  187. slidesPerView: 5,
  188. watchOverflow:true,
  189. freeMode:true,
  190. observer: true,
  191. observeParents: true,
  192. speed:1000,
  193. scrollbar: {
  194. el: '.realtime_wrap .swiper-scrollbar',
  195. hide: false,
  196. },
  197. });
  198. });
  199. // 검색어 찾기
  200. var fnGetAutoSearch = function (){
  201. gagajf.ajaxFormSubmit("/display/search/auto/complete", document.brandSearchMainForm, fnAutoCompleteList);
  202. }
  203. // 검색어 찾기 결과
  204. var fnAutoCompleteList = function (result){
  205. if( enterBool ) return;
  206. if(result.autoKeywords.length==0 && gagajf.isNull(result.goodsList)){
  207. $('.common_search .area_result .default_box').hide();
  208. $('.common_search .area_result .searching_box').hide();
  209. }else{
  210. $('.common_search .area_result .default_box').hide();
  211. $('.common_search .area_result .searching_box').show();
  212. $('.common_search .area_result .empty_box').hide();
  213. // 자동완성 키워드
  214. if(result.autoKeywords != null && result.autoKeywords.length > 0){
  215. $(".autokeyword_blk").html('');
  216. let tag = '';
  217. tag += '<ul>\n';
  218. $.each(result.autoKeywords, function (idx, item){
  219. //<a href="javascript:void(0);"><em>가</em>을컬리수</a>
  220. tag += '<li><a href="javascript:void(0);">'+result.autoKeywords[idx]+'</a></li>\n';
  221. });
  222. tag += '</ul>\n';
  223. $(".autokeyword_blk").append(tag);
  224. }else{
  225. $(".autokeyword_blk").html('');
  226. let tag = '';
  227. tag += '<ul>\n';
  228. tag += '<li></li>\n';
  229. tag += '</ul>\n';
  230. $(".autokeyword_blk").append(tag);
  231. }
  232. //if(result.brand != null && !gagajf.isNull(result.brand.brandGroupNo)){
  233. // $(".find_brand").html('');
  234. // let tag = '';
  235. // tag += '<h3><a href="javascript:void(0);" onclick="cfnGoToBrandMain('+result.brand.brandGroupNo+');">'+result.brand.brandGroupNm+' 샵 바로가기</a></h3>\n';
  236. // $(".find_brand").append(tag);
  237. //}else{
  238. // $(".find_brand").html('');
  239. //}
  240. //if(result.cateList != null && result.cateList.length > 0){
  241. // $(".find_category").html('');
  242. // let tag = '';
  243. // tag += '<ul>\n';
  244. // $.each(result.cateList, function (idx, item){
  245. // tag += '<li>\n';
  246. // tag += ' <span class="category_txt">카테고리</span>\n';
  247. // tag += ' <a href="javascript:void(0);" onclick="cfnGoToGoodsList(0,\'G032_101\' ';
  248. // if(item.cate1No != null){
  249. // tag += ', '+item.cate1No;
  250. // }
  251. // if(item.cate2No != null){
  252. // tag += ', '+item.cate2No;
  253. // }
  254. // if(item.cate3No != null){
  255. // tag += ', '+item.cate3No;
  256. // }
  257. // if(item.cate4No != null){
  258. // tag += ', '+item.cate4No;
  259. // }
  260. // if(item.cate5No != null){
  261. // tag += ', '+item.cate5No;
  262. // }
  263. // tag += ');">\n';
  264. // if(item.cate1Nm != null){
  265. // tag += ' <span>'+item.cate1Nm+'</span>\n';
  266. // }
  267. // if(item.cate2Nm != null){
  268. // tag += ' <span>'+item.cate2Nm+'</span>\n';
  269. // }
  270. // if(item.cate3Nm != null){
  271. // tag += ' <span>'+item.cate3Nm+'</span>\n';
  272. // }
  273. // if(item.cate4Nm != null){
  274. // tag += ' <span>'+item.cate4Nm+'</span>\n';
  275. // }
  276. // if(item.cate5Nm != null){
  277. // tag += ' <span>'+item.cate5Nm+'</span>\n';
  278. // }
  279. // tag += ' </a>\n';
  280. // tag += '</li>\n';
  281. // });
  282. // tag += '</ul>\n';
  283. // $(".find_category").append(tag);
  284. //}else{
  285. // $(".find_category").html('');
  286. //}
  287. if(!gagajf.isNull(result.goodsList)){
  288. $("#relateGoodsDiv").show();
  289. $(".pd_list .realtime_wrap .itemsGrp").html('');
  290. let tag = '';
  291. $.each(result.goodsList, function (idx, item){
  292. if(idx<5) {
  293. tag += '<div class="item_prod">\n';
  294. tag += ' <div class="item_state">\n';
  295. tag += ' <a href="javascript:void(0);" class="itemLink">\n';
  296. tag += ' <div class="itemPic">\n';
  297. tag += ' <img alt="" class="vLHTC pd_img" src="' + item.sysImgNm + '">\n';
  298. tag += ' </div>\n';
  299. tag += ' <p class="itemBrand">' + item.brandGroupNm + '</p>\n';
  300. tag += ' <div class="itemName">' + item.goodsFullNm + '</div>\n';
  301. tag += ' <p class="itemPrice cols">\n';
  302. if (item.listPrice != item.currPrice) {
  303. tag += ' <span class="itemPrice_original">' + item.listPrice.addComma() + '</span>\n';
  304. }
  305. tag += item.currPrice.addComma();
  306. if (item.listPrice != item.currPrice) {
  307. tag += ' <span class="itemPercent">' + Math.round((item.listPrice - item.currPrice) / (item.listPrice * 1.0) * 100) + '%</span>\n';
  308. }
  309. tag += ' </p>\n';
  310. tag += ' </a>\n';
  311. tag += ' </div>\n';
  312. tag += '</div>\n';
  313. }
  314. });
  315. $(".pd_list .realtime_wrap .itemsGrp").append(tag);
  316. }else{
  317. $(".pd_list .realtime_wrap .itemsGrp").html('');
  318. $("#relateGoodsDiv").hide();
  319. }
  320. }
  321. }
  322. var fnOnkeyupKeyword = function (obj){
  323. if( 13 != event.keyCode){
  324. enterBool = false;
  325. var searchValue = $(obj).val();
  326. if(searchValue.length > 0) {
  327. fnGetAutoSearch();
  328. } else if (searchValue.length == 0) {
  329. $('.common_search .area_result .searching_box').hide();
  330. $('.common_search .area_result .default_box').show();
  331. $('.common_search .area_result .empty_box').hide();
  332. }
  333. }else{
  334. // 엔터친 후, 그 전에 검색한 결과가 오고있으므로
  335. enterBool = true;
  336. }
  337. }
  338. // 선택 단어 검색
  339. var fnSearchKeyword = function (obj){
  340. $("#brandSearchMainForm").find("input[name=keyword]").val(obj);
  341. $('#btnSearchKeyword').trigger('click');
  342. }
  343. // 선택 단어 삭제
  344. var fnDeleteCookie = function (obj, keyword){
  345. $(obj).closest('li').remove();
  346. gagajf.setCookie('st24ck_today_keyword',keyword, -1);
  347. }
  348. // 실시간 상품 새로고침
  349. var fnRealtimeGoodsList = function (){
  350. $("#itemViewArea").html('');
  351. var html = '';
  352. $.getJSON('/display/realtime/goods/list', function (result){
  353. if(result.length > 0){
  354. $.each(result, function (idx, item){
  355. html += '<div class="swiper-slide">\n';
  356. html += ' <div class="item_prod">\n';
  357. html += ' <div class="item_state">\n';
  358. html += ' <a href="'+item.itemUrl+'" class="itemLink">\n';
  359. html += ' <div class="itemPic">\n';
  360. html += ' <img alt="" class="vLHTC pd_img" src="'+item.imageUrl+'">\n';
  361. html += ' </div>\n';
  362. html += ' <div class="itemName">'+item.itemName+'</div>\n';
  363. if(item.count < 10){
  364. html += ' <div class="viewCount"><span>10명</span> 미만</div>\n';
  365. }else{
  366. html += ' <div class="viewCount"><span>'+item.count.addComma()+'</span>명 보는중</div>\n';
  367. }
  368. html += ' </a>\n';
  369. html += ' </div>\n';
  370. html += ' </div>\n';
  371. html += '</div>\n';
  372. })
  373. }
  374. $("#itemViewArea").append(html);
  375. // 슬라이드 사이즈 때문에 재설정함
  376. submain_slide = new Swiper('.realtime_wrap .swiper-container', {
  377. slidesPerView: 5,
  378. watchOverflow:true,
  379. freeMode:true,
  380. observer: true,
  381. observeParents: true,
  382. speed:1000,
  383. scrollbar: {
  384. el: '.realtime_wrap .swiper-scrollbar',
  385. hide: false,
  386. },
  387. });
  388. });
  389. }
  390. // 검색어 연관 상품 추천
  391. var fnRecommendItemList = function (keyword){
  392. if(gagajf.isNull(keyword)){
  393. keyword = "";
  394. }
  395. var data = {keyword : keyword};
  396. var html = '';
  397. $.getJSON('/display/recommend/item/list', data, function (result){
  398. $("#recommendItemArea").html('');
  399. $("#recommendItemArea").show();
  400. if(result.length > 0){
  401. $.each(result, function (idx, item){
  402. html += '<div class="item_prod">\n';
  403. html += ' <div class="item_state">\n';
  404. html += ' <a href="'+item.product.itemUrl+'" class="itemLink">\n';
  405. html += ' <div class="itemPic">\n';
  406. html += ' <img alt="" class="vLHTC pd_img" src="'+item.product.itemImage+'">\n';
  407. html += ' </div>\n';
  408. html += ' <p class="itemBrand">'+item.product.brandName+'</p>\n';
  409. html += ' <div class="itemName">'+item.product.itemName+'</div>\n';
  410. html += ' <p class="itemPrice cols">\n';
  411. if(item.product.salePrice < item.product.originalPrice) {
  412. html += ' <span class="itemPrice_original">'+ item.product.originalPrice.addComma() +'</span>\n';
  413. }
  414. html += item.product.salePrice.addComma() ;
  415. if(item.product.salePrice < item.product.originalPrice) {
  416. html += ' <span class="itemPercent">' + Math.round((item.product.originalPrice - item.product.salePrice) / (item.product.originalPrice * 1.0) * 100) + '%</span>\n';
  417. }
  418. html += ' </p>\n';
  419. html += ' </a>\n';
  420. html += ' </div>\n';
  421. html += '</div>\n';
  422. });
  423. $("#recommendItemArea").append(html);
  424. }else{
  425. $("#recommendItemArea").html('');
  426. $("#recommendItemArea").hide();
  427. }
  428. });
  429. }
  430. /*]]>*/
  431. </script>
  432. </html>