cartChangeOptionPopupWeb.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <html lang="ko"
  2. xmlns:th="http://www.thymeleaf.org">
  3. <!-- 옵션변경 팝업 -->
  4. <div class="modal-dialog cartOptionModal" role="document">
  5. <div class="modal-content">
  6. <div class="modal-header">
  7. <h5 class="modal-title" id="optModifyLabel">옵션변경</h5>
  8. <div class="prod_title">
  9. <span class="brand" th:text="|${cart.brandEnm + ' ' + cart.brandKnm}|"></span>
  10. <span class="name" th:text="${cart.goodsNm}"></span>
  11. </div>
  12. </div>
  13. <div class="modal-body">
  14. <div class="pop_cont">
  15. <div class="prod_info">
  16. <div class="prod_preview">
  17. <div class="area_pic">
  18. <ul class="pic_list">
  19. <th:block th:if="${setType.equals(cart.goodsType) or cart.selfGoodsYn.equals('N')}">
  20. <li th:each="img, index : ${cart.cartImgList}">
  21. <span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
  22. </li>
  23. </th:block>
  24. <th:block th:if="${!setType.equals(cart.goodsType) and cart.selfGoodsYn.equals('Y')}">
  25. <th:block th:each="comp, status : ${cart.cartCompsList}">
  26. <th:block th:each="color, index : ${comp.cartColorList}">
  27. <th:block th:if="${color.cartOptCd1 != null and color.cartOptCd1.equals(color.optCd1)}">
  28. <li th:each="img, index : ${color.cartImgList}">
  29. <span class="thumb"><img th:src="${cart.imgPath + '/' + img.sysImgNm}" src="#" alt="" /></span>
  30. </li>
  31. </th:block>
  32. </th:block>
  33. </th:block>
  34. </th:block>
  35. </ul>
  36. </div>
  37. <div class="area_order">
  38. <th:block th:each="comp, status : ${cart.cartCompsList}">
  39. <!-- 세트상품 옵션 -->
  40. <th:block th:if="${setType.equals(cart.goodsType)}">
  41. <div class="opt_select setOption">
  42. <div class="opt_header">
  43. <span class="title" th:text="${comp.goodsNm}"></span>
  44. </div>
  45. <!-- 컬러 변경시 만들어줄 size option -->
  46. <th:block th:each="color, index : ${comp.cartColorList}">
  47. <span style="display:none;">
  48. <select th:classappend="|color_${color.goodsCd}_${color.optCd1}|">
  49. <th:block th:each="size, i : ${color.cartSizeList}">
  50. <th:block th:if="${color.optCd1.equals(size.optCd1)}">
  51. <option th:value="${size.optCd}" th:text="${size.optCd2}"></option>
  52. </th:block>
  53. </th:block>
  54. </select>
  55. </span>
  56. </th:block>
  57. <div class="form_field">
  58. <select class="setColorSelect">
  59. <th:block th:each="color, index : ${comp.cartColorList}">
  60. <option th:data="${comp.goodsCd}" th:value="${color.optCd1}" rel="icon-temperature" th:text="${color.colorNm}" th:selected="${color.cartColorNm != null}"></option>
  61. </th:block>
  62. </select>
  63. </div>
  64. <div class="form_field">
  65. <th:block th:each="color, index : ${comp.cartColorList}">
  66. <select th:data="${color.goodsCd}" th:class="|size_${comp.goodsCd} setSizeSelect|">
  67. <th:block th:each="size, i : ${color.cartSizeList}">
  68. <th:block th:if="${color.optCd1.equals(size.optCd1)}">
  69. <option th:data="${comp.cartDtlSq}" th:value="${size.optCd}" th:text="${size.optCd2}" th:selected="${size.cartOptCd != null}"></option>
  70. </th:block>
  71. </th:block>
  72. </select>
  73. </th:block>
  74. </div>
  75. </div>
  76. </th:block>
  77. <!-- 자사 일반 상품 옵션 -->
  78. <th:block th:if="${!setType.equals(cart.goodsType) and 'Y'.equals(cart.selfGoodsYn)}">
  79. <div class="opt_color">
  80. <div class="opt_header">
  81. <span class="title">컬러</span>
  82. <th:block th:each="color, index : ${comp.cartColorList}">
  83. <th:block th:if="${color.cartColorNm != null}">
  84. <span class="color" th:text="${color.cartColorNm}"></span>
  85. </th:block>
  86. </th:block>
  87. </div>
  88. <ul>
  89. <li th:each="color, index : ${comp.cartColorList}" class="selfGoodsColor">
  90. <a href="" th:cartDtlSq="${color.cartDtlSq}" th:classappend="${color.cartColorNm != null} ? 'on'" class="selfGoodsColorSelect" th:data="${color.optCd1}">
  91. <img th:src="${cart.imgPath + '/' + color.sysImgNm}" src="#" th:alt="${color.colorNm}" alt="" />
  92. </a>
  93. </li>
  94. </ul>
  95. </div>
  96. <div class="opt_size">
  97. <div class="opt_header">
  98. <span class="title">사이즈</span>
  99. </div>
  100. <div class="form_field selfGoodsSize">
  101. <th:block th:each="color, index : ${comp.cartColorList}">
  102. <th:block th:if="${color.cartColorNm != null}">
  103. <th:block th:each="size, index : ${color.cartSizeList}">
  104. <div>
  105. <input type="radio" name="rdi-optsize" th:id="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|" th:value="${size.optCd}" th:checked="${size.cartOptCd != null}" th:disabled="${size.soldoutYn == 'Y' or cart.goodsQty > size.currStockQty}">
  106. <label th:for="|${'rdi-optsize' + size.goodsCd + '-' + size.optCd}|"><span th:text="${size.optCd2}"></span></label>
  107. </div>
  108. </th:block>
  109. </th:block>
  110. </th:block>
  111. </div>
  112. </div>
  113. </th:block>
  114. <!-- 입점업체 상품 옵션 -->
  115. <th:block th:if="${!setType.equals(cart.goodsType) and !'Y'.equals(cart.selfGoodsYn)}">
  116. <div class="opt_select">
  117. <div class="opt_header">
  118. <span class="title">옵션선택</span>
  119. </div>
  120. <div class="form_field">
  121. <select class="selfGoodsColor">
  122. <th:block th:each="color, index : ${comp.cartColorList}">
  123. <option th:data="${color.cartDtlSq}" th:value="${color.optCd}" th:text="${color.optCd1 + '/' + color.optCd2}" th:selected="${color.cartOptCd != null}"></option>
  124. </th:block>
  125. </select>
  126. </div>
  127. </div>
  128. </th:block>
  129. </th:block>
  130. <div class="opt_count">
  131. <div class="opt_header">
  132. <span class="title">수량</span>
  133. </div>
  134. <div class="number_count">
  135. <span class="minus"><span class="sr-only">감소</span></span>
  136. <input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="${cart.goodsQty}" />
  137. <!-- <input type="text" name="goodsQty" maxlength="3" style='ime-mode:disabled' th:value="2" /> -->
  138. <span class="plus"><span class="sr-only">추가</span></span>
  139. </div>
  140. </div>
  141. <div class="btn_group_block">
  142. <button class="btn btn_dark btn_block" th:onclick="|fnChangeCartOption(${cart.cartSq})|"><span>옵션변경</span></button>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. <!-- //옵션변경 팝업 -->
  151. <script th:inline="javascript">
  152. // 세트상품 컬러 변경시
  153. $(".setColorSelect").on("change", function(e) {
  154. let goodsCd = $(this).find("option:checked").attr("data");
  155. $(".setOption .size_" + goodsCd).html("");
  156. $(".setOption .size_" + goodsCd).html($(".color_" + goodsCd + "_" + $(this).val()).html());
  157. });
  158. // 자사 일반 상품 컬러 선택시
  159. $(".selfGoodsColorSelect").on("click", function(e) {
  160. let html = "";
  161. let cart = [[${cart}]];
  162. let color = [[${cart.cartCompsList[0].cartColorList}]];
  163. let optCd1 = $(this).attr("data");
  164. for(let i = 0 ; i < color.length ; i++) {
  165. let size = color[i].cartSizeList;
  166. for(let j = 0 ; j < size.length ; j++) {
  167. if(optCd1 == size[j].optCd1) {
  168. html += "<div>";
  169. html += "<input type='radio' name='rdi-optsize' id='" + size[j].goodsCd + "-" + size[j].optCd + "' value='" + size[j].optCd + "' ";
  170. if(size[j].soldoutYn == "Y" || cart.goodsQty > size[j].currStockQty) {
  171. html += "disabled = 'disabled'";
  172. }
  173. html += " />\n";
  174. html += "<label for='" + size[j].goodsCd + "-" + size[j].optCd + "'><span>" + size[j].optCd2 + "</span></label>\n"
  175. html += "</div>\n";
  176. }
  177. }
  178. }
  179. $(".selfGoodsSize").html(html);
  180. });
  181. function fnChangeCartOption(cartSq) {
  182. let cart = [[${cart}]];
  183. let cartDtlSqArr = [], itemCds = [], optCds = [];
  184. let data;
  185. if(cart.goodsType == "G056_S") {
  186. $(".setSizeSelect").each(function() {
  187. optCds.push($(this).val());
  188. itemCds.push($(this).attr("data"));
  189. cartDtlSqArr.push($(this).find("option:checked").attr("data"));
  190. });
  191. data = {
  192. cartSq : cart.cartSq
  193. , goodsCd : cart.goodsCd
  194. , goodsType : cart.goodsType
  195. , cartDtlSqArr : cartDtlSqArr
  196. , itemCds : itemCds
  197. , optCds : optCds
  198. , goodsQty : $("input[name=goodsQty]").val()
  199. }
  200. } else if(cart.goodsType != "G056_S" && cart.selfGoodsYn == "Y") {
  201. optCds.push($(".selfGoodsSize").find("input[name=rdi-optsize]:checked").val());
  202. itemCds.push(cart.goodsCd);
  203. $(".selfGoodsColorSelect").each(function() {
  204. if($(this).attr("cartDtlSq") > 0) {
  205. cartDtlSqArr.push($(this).attr("cartDtlSq"));
  206. }
  207. });
  208. data = {
  209. cartSq : cart.cartSq
  210. , goodsCd : cart.goodsCd
  211. , goodsType : cart.goodsType
  212. , cartDtlSqArr : cartDtlSqArr
  213. , itemCds : itemCds
  214. , optCds : optCds
  215. , goodsQty : $("input[name=goodsQty]").val()
  216. }
  217. } else {
  218. optCds.push($(".selfGoodsColor").val());
  219. itemCds.push(cart.goodsCd);
  220. $(".selfGoodsColor option").each(function() {
  221. if($(this).attr("data") > 0) {
  222. cartDtlSqArr.push($(this).attr("data"));
  223. }
  224. });
  225. data = {
  226. cartSq : cart.cartSq
  227. , goodsCd : cart.goodsCd
  228. , goodsType : cart.goodsType
  229. , cartDtlSqArr : cartDtlSqArr
  230. , itemCds : itemCds
  231. , optCds : optCds
  232. , goodsQty : $("input[name=goodsQty]").val()
  233. }
  234. }
  235. $.ajax( {
  236. type: "POST",
  237. url : '/cart/change/option',
  238. contentType: 'application/json',
  239. dataType : 'json',
  240. data : JSON.stringify(data),
  241. success : function(result) {
  242. alert(result.message);
  243. $(".closeCartOptionModal").trigger("click");
  244. getCartList();
  245. }
  246. });
  247. }
  248. </script>
  249. </div>
  250. <a href="#close-modal" rel="modal:close" class="close-modal closeCartOptionModal">Close</a>
  251. </html>