GoodsDispOrdChangePopupForm.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : GoodsDispOrdChangePopupForm.html
  7. * @desc : 전시 상품 순서변경 팝업
  8. *============================================================================
  9. * STYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2021.02.18 bin2107 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div class="modalPopup" data-width="full" data-height="850">
  18. <div class="panelStyle" >
  19. <form id="goodsDispOrdChangeForm" name="goodsDispOrdChangeForm" action="#" th:action="@{'/display/goods/dispord/change/popup/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
  20. <input type="hidden" id="siteCd" name="siteCd" value="G00_10"/>
  21. <input type="hidden" id="selLvl" name="selLvl" th:value="${params.selLvl}"/>
  22. <input type="hidden" id="cateGb" name="cateGb" th:value="${params.cateGb}"/>
  23. <input type="hidden" id="cate1No" name="cate1No" th:value="${params.cate1No}"/>
  24. <input type="hidden" id="cate2No" name="cate2No" th:value="${params.cate2No}"/>
  25. <input type="hidden" id="cate3No" name="cate3No" th:value="${params.cate3No}"/>
  26. <input type="hidden" id="cate4No" name="cate4No" th:value="${params.cate4No}"/>
  27. <input type="hidden" id="searchGb" name="searchGb" value="BASIC"/>
  28. <input type="hidden" id="cateCd" name="cateCd" th:value="${params.cateCd}"/>
  29. <input type="hidden" id="contentsLoc" name="contentsLoc" th:value="${params.contentsLoc}"/>
  30. <input type="hidden" id="brandGroupNo" name="brandGroupNo" th:if="${params.brandGroupNo!=null}" th:value="${params.brandGroupNo}"/>
  31. <input type="hidden" id="brandGroupNo" name="brandGroupNo" th:unless="${params.brandGroupNo!=null}" value="0"/>
  32. <button type="button" class="btn btn-base btn-lg" id="btnSearch" style="display: none;">조회</button>
  33. <div class="panelTitle">
  34. <h2>상품 순서변경</h2>
  35. <button type="button" class="close" onclick="uifnPopupClose('popupGoodsDispOrdChange')"><i class="fa fa-times"></i></button>
  36. </div>
  37. <div class="panelContent">
  38. <!-- 상단 영역 START -->
  39. <ul class="lrStyle">
  40. <li class="aL"><font color="#1e90ff">* 상품은 왼쪽에서 오른쪽 순서대로 전시 됩니다.</font></li>
  41. <!-- <li class="aR">-->
  42. <!-- <button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnPopupAddGoods">상품추가</button>-->
  43. <!-- <button type="button" class="btn btn btn-info btn-sm" id="btnPopupReset">원 위치로</button>-->
  44. <!-- <button type="button" class="btn btn btn-info btn-sm" id="btnPopupInit">전시순서 초기화</button>-->
  45. <!-- <button type="button" class="btn btn btn-success btn-sm" id="btnPopupSave">저장</button>-->
  46. <!-- </li>-->
  47. </ul>
  48. <ul class="panelBar" style="margin-top: 10px;">
  49. <li>
  50. <button type="button" class="btn btn-danger btn-lg" onclick="fnAllGoodsDelete();">전체삭제</button>
  51. </li>
  52. <li class="right">
  53. <button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnPopupAddGoods">상품추가</button>
  54. <button type="button" class="btn btn btn-info btn-sm" id="btnPopupReset">원 위치로</button>
  55. <button type="button" class="btn btn btn-info btn-sm" id="btnPopupInit">전시순서 초기화</button>
  56. <button type="button" class="btn btn btn-success btn-sm" id="btnPopupSave">저장</button>
  57. </li>
  58. </ul>
  59. <!-- 상단 영역 END -->
  60. <!-- 상품 영역 START -->
  61. <div class="sortableWrap" data-unit="7" style="overflow-y:scroll;">
  62. <div class="itemWrap" id="sortable">
  63. </div>
  64. </div>
  65. <!-- 상품 영역 END -->
  66. <!-- 페이징영역 START -->
  67. <ul class="panelBar" style="display:none;">
  68. <li class="right">
  69. 검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
  70. 쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
  71. <select id="pageSize" name="pageSize">
  72. <option value="50" selected="selected">50개씩 보기</option>
  73. <option value="100">100개씩 보기</option>
  74. <option value="500">500개씩 보기</option>
  75. <option value="1000">1000개씩 보기</option>
  76. </select>
  77. <input type="hidden" name="pageNo" id="pageNo" value ="1"/>
  78. </li>
  79. </ul>
  80. <ul class="panelBar">
  81. <li class="center">
  82. <div class="tablePaging" id="goodsDispOrdChangePopupPagination"></div>
  83. </li>
  84. </ul>
  85. <!-- 페이징영역 END -->
  86. </div>
  87. </form>
  88. </div>
  89. </div>
  90. <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
  91. <script th:inline="javascript">
  92. var params = [[${params}]];
  93. var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
  94. $("#btnSearch").on('click', function(){
  95. $("#goodsDispOrdChangeForm input[name=searchGb]").val("BASIC");
  96. gagaPaging.load(1);
  97. });
  98. var fnSearchData = function (){
  99. gagaPaging.init('goodsDispOrdChangeForm', fnSelectCallBack, 'goodsDispOrdChangePopupPagination', $('#goodsDispOrdChangeForm').find('#pageSize').val());
  100. gagaPaging.load(1);
  101. }
  102. var firstOrd = '';
  103. var fnSelectCallBack = function (result){
  104. $('#goodsDispOrdChangeForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
  105. $('#goodsDispOrdChangeForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
  106. $('#goodsDispOrdChangeForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
  107. $('#goodsDispOrdChangeForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
  108. if(typeof result.categoryGoodsList != 'undefined'){
  109. resultList = result.categoryGoodsList;
  110. }
  111. var html = '';
  112. if(resultList.length > 0){
  113. for(var i=0; i<resultList.length; i++){
  114. if(i==0){
  115. firstOrd = resultList[i].dispOrd;
  116. }
  117. html+='<ul class="item ui-state-default" style="min-height:225px; ';
  118. if(resultList[i].goodsStat!="G008_90" || resultList[i].currStockQty<1){
  119. html += 'background:#f5f5f5;';
  120. }
  121. html += '">';
  122. html += '<li class="img">';
  123. var imgPath = '';
  124. //if(resultList[i].imgType=='A'){
  125. imgPath = uploadGoodsUrl;
  126. //}
  127. html += '<img src="'+imgPath+ "/" +resultList[i].imgPath1+'" onerror="this.src=\'/image/no.gif\';"/>';
  128. html += '<div class="btnArea">';
  129. html += '<button type="button" class="icnSm" title="맨위로" onclick="fnUpdownBtn(\''+resultList[i].goodsCd+'\', \''+resultList[i].dispOrd+'\', \'up\');"><i class="fa fa-play-circle fa-rotate-270" aria-hidden="true"></i></button>';
  130. html += '<button type="button" class="icnSm" title="위로"><i class="fa fa-arrow-up" aria-hidden="true"></i></button>';
  131. html += '<button type="button" class="icnSm" title="맨아래로" onclick="fnUpdownBtn(\''+resultList[i].goodsCd+'\', \''+resultList[i].dispOrd+'\', \'down\');"><i class="fa fa-play-circle fa-rotate-90" aria-hidden="true"></i></button>';
  132. html += '<button type="button" class="icnSm" title="아래로"><i class="fa fa-arrow-down" aria-hidden="true"></i></button>';
  133. html += '</div>';
  134. html += '</li>';
  135. html += '<li class="cont">';
  136. html += '<ul>';
  137. html += '<li class="no" name="goodsCd"><span>'+resultList[i].goodsCd+'</span>';
  138. if(params.goodsAddYn=='Y'){
  139. html += '<span style="margin-left:5px;"><a href="javascript:void(0);" onclick="fnPopupRemoveGoods(\''+resultList[i].goodsCd+'\');">X</a></span>';
  140. }
  141. html += '</li>';
  142. html += '<li class="title">'+resultList[i].goodsNm+'</li>';
  143. html += '<li class="price"><span>가격 :</span><em>'+resultList[i].currPrice.addComma()+'</em>원</li>';
  144. html += '<li><span>재고 :</span><em>'+resultList[i].currStockQty+'</em></li>';
  145. html += '<li>';
  146. html += '<span>전시순서 :</span>';
  147. html += '<input type="text" name="dispOrdEdit" value="" />';
  148. html += '<input type="hidden" name="setDispOrd" value="'+resultList[i].dispOrd+'"/>';
  149. html += '</li>';
  150. html += '</ul>';
  151. html += '</li>';
  152. html += '</ul>';
  153. }
  154. $("#sortable").html(html);
  155. $(".fa-arrow-up").off('click');
  156. $(".fa-arrow-up").on('click', function(){
  157. var ind = $(this).closest('.item').index();
  158. if(ind>0){
  159. $(".item").eq(ind-1).before($(".item").eq(ind));
  160. $(".item").eq(ind).find("input[name=setDispOrd]").val(Number($(".item").eq(ind).find("input[name=setDispOrd]").val())+1);
  161. $(".item").eq(ind-1).find("input[name=setDispOrd]").val(Number($(".item").eq(ind-1).find("input[name=setDispOrd]").val())-1);
  162. }
  163. });
  164. $(".fa-arrow-down").off('click');
  165. $(".fa-arrow-down").on('click', function(){
  166. var ind = $(this).closest('.item').index();
  167. if(ind<resultList.length){
  168. $(".item").eq(ind+1).after($(".item").eq(ind));
  169. $(".item").eq(ind).find("input[name=setDispOrd]").val(Number($(".item").eq(ind).find("input[name=setDispOrd]").val())-1);
  170. $(".item").eq(ind+1).find("input[name=setDispOrd]").val(Number($(".item").eq(ind+1).find("input[name=setDispOrd]").val())+1);
  171. }
  172. });
  173. fnViewInit();
  174. }else{
  175. $("#sortable").html(html);
  176. }
  177. gagaPaging.createPagination(result.pageing.pageable);
  178. }
  179. var fnViewInit = function() {
  180. //상품 나열 갯수 지정
  181. var unitVal = $(".sortableWrap").attr("data-unit");
  182. var itemW = parseInt($(".sortableWrap .item").outerWidth())+15;
  183. var setW = unitVal*itemW;
  184. $(".sortableWrap .itemWrap").css("width", setW+"px");
  185. }
  186. /**
  187. * 원위치 버튼
  188. */
  189. $("#btnPopupReset").on("click", function(){
  190. fnSearchData();
  191. });
  192. /**
  193. * 상품추가 버튼
  194. */
  195. $("#btnPopupAddGoods").on("click", function(){
  196. cfnOpenGoodsPopup('fnPopupAddGoods');
  197. });
  198. var fnPopupAddGoods = function(result){
  199. mcxDialog.confirm('적용하시겠습니까?', {
  200. cancelBtnText: "취소",
  201. sureBtnText: "확인",
  202. sureBtnClick: function(){
  203. var multiGoods = [];
  204. $.each(result, function(idx, item) {
  205. multiGoods.push(item.goodsCd);
  206. });
  207. var data = {
  208. mode : 'add'
  209. ,cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  210. ,multiGoods : multiGoods
  211. ,brandGroupNo : $("#goodsDispOrdChangeForm input[name=brandGroupNo]").val()
  212. }
  213. var jsonData = JSON.stringify(data);
  214. gagajf.ajaxJsonSubmit('/display/category/goods/save', jsonData, fnSearchData);
  215. uifnPopupClose('popupGoods');
  216. }
  217. });
  218. }
  219. /**
  220. * 상품 삭제 버튼
  221. */
  222. var fnPopupRemoveGoods = function (goodsCd){
  223. mcxDialog.confirm('삭제하시겠습니까?', {
  224. cancelBtnText: "취소",
  225. sureBtnText: "확인",
  226. sureBtnClick: function(){
  227. var data = {
  228. mode : 'delete'
  229. ,cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  230. ,brandGroupNo : $("#goodsDispOrdChangeForm input[name=brandGroupNo]").val()
  231. ,goodsCd : goodsCd
  232. };
  233. var jsonData = JSON.stringify(data);
  234. gagajf.ajaxJsonSubmit('/display/goods/dispord/change/delete', jsonData, fnSearchData);
  235. }
  236. });
  237. }
  238. /**
  239. * 전시초기화 클릭
  240. */
  241. $("#btnPopupInit").on("click", function (){
  242. mcxDialog.confirm('전시순서가 상품 등록일 순서로 초기화 됩니다.\n초기화 하시겠습니까?', {
  243. cancelBtnText: "취소",
  244. sureBtnText: "확인",
  245. sureBtnClick: function(){
  246. var data = {
  247. cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  248. ,brandGroupNo : $("#goodsDispOrdChangeForm input[name=brandGroupNo]").val()
  249. };
  250. var jsonData = JSON.stringify(data);
  251. gagajf.ajaxJsonSubmit('/display/category/goods/dispord/init', jsonData, fnSearchData);
  252. }
  253. });
  254. });
  255. /**
  256. * 상품 전체삭제
  257. */
  258. var fnAllGoodsDelete = function (){
  259. mcxDialog.confirm('전체 상품을 삭제하시겠습니까??', {
  260. cancelBtnText: "취소",
  261. sureBtnText: "확인",
  262. sureBtnClick: function(){
  263. var data = {
  264. mode : 'delete'
  265. ,cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  266. ,brandGroupNo : $("#goodsDispOrdChangeForm input[name=brandGroupNo]").val()
  267. };
  268. var jsonData = JSON.stringify(data);
  269. gagajf.ajaxJsonSubmit('/display/goods/dispord/change/delete', jsonData, fnSearchData);
  270. }
  271. });
  272. }
  273. $("#btnAlldelete").on("click", function (){
  274. });
  275. /**
  276. * 최상단/하단 이동 버튼
  277. */
  278. var fnUpdownBtn = function (goodsCd, dispOrd, changeGb){
  279. var msg = "최상단으로 이동시 바로 저장됩니다. 이동하시겠습니까?";
  280. if(changeGb=='down'){
  281. msg = "최하단으로 이동시 바로 저장됩니다. 이동하시겠습니까?";
  282. }
  283. mcxDialog.confirm(msg, {
  284. cancelBtnText: "취소",
  285. sureBtnText: "확인",
  286. sureBtnClick: function(){
  287. var data = {
  288. goodsCdArr : goodsCd
  289. ,dispOrdArr : dispOrd
  290. ,changeGb : changeGb
  291. ,cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  292. }
  293. var jsonData = JSON.stringify(data);
  294. gagajf.ajaxJsonSubmit('/display/category/goods/dispord/updown', jsonData, fnSearchData);
  295. }
  296. });
  297. }
  298. $("#btnPopupSave").on("click", function(){
  299. mcxDialog.confirm('저장하시겠습니까?', {
  300. cancelBtnText: "취소",
  301. sureBtnText: "확인",
  302. sureBtnClick: function(){
  303. var dispOrdArr = [];
  304. var goodsCdArr = [];
  305. $(".item input[name=setDispOrd]").each(function(i){
  306. if($(".item").eq(i).find("input[name=dispOrdEdit]").val()==''){
  307. dispOrdArr.push($(this).val());
  308. }else{
  309. dispOrdArr.push($(".item").eq(i).find("input[name=dispOrdEdit]").val());
  310. }
  311. });
  312. $(".item li[name=goodsCd]").each(function(i){
  313. goodsCdArr.push($(this).find("span").eq(0).text());
  314. });
  315. var data = {
  316. dispOrdArr : dispOrdArr
  317. ,goodsCdArr : goodsCdArr
  318. ,cateNo : $("#goodsDispOrdChangeForm input[name=cateCd]").val()
  319. ,contentsLoc : $("#goodsDispOrdChangeForm input[name=contentsLoc]").val()
  320. }
  321. var jsonData = JSON.stringify(data);
  322. gagajf.ajaxJsonSubmit('/display/category/goods/dispord/update', jsonData, fnSearchData);
  323. }
  324. });
  325. });
  326. $(document).ready(function() {
  327. $("#sortable").sortable({
  328. stop: function(event, ui) {
  329. var pageNo = Number($("#pageNo").val());
  330. if(firstOrd==''){
  331. firstOrd = 1;
  332. }else{
  333. firstOrd = Number(firstOrd);
  334. }
  335. $(".item").each(function(i){
  336. $(this).find("input[name=setDispOrd]").val(i+firstOrd);
  337. });
  338. }
  339. });
  340. $("#sortable").disableSelection();
  341. //sortable Item List
  342. fnSearchData();
  343. });
  344. </script>
  345. </html>