설명 없음
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

shoppingcart.js 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. shoppingCartInit();
  2. function shoppingCartInit() {
  3. shoppingCartAppend();
  4. let DELETE_FILTER = null;
  5. let insufficientQtyActions = {
  6. moreQtyAdd(e) {
  7. $(e.target).parents('.mainselectcontainer').find('.insufficientqty').removeClass('d-none');
  8. },
  9. moreQtyRemove(e) {
  10. $(e.target).parents('.mainselectcontainer').find('.insufficientqty').addClass('d-none');
  11. }
  12. }
  13. function shoppingCartAppend() {
  14. let data = getCartData();
  15. if (!data) {
  16. $('.emptyShow').removeClass('d-none');
  17. $('.checkoutbtn').addClass('d-none');
  18. return;
  19. };
  20. let html = '';
  21. let products = data;
  22. // for(let i=0;i<products.length;i++){
  23. // const {img,name,price,quantity,total} = products[i];
  24. // debugger;
  25. // html += shoppingCartDesktopHTML(products[i]);
  26. // }
  27. if (Object.keys(data).length === 0) {
  28. $('.checkoutbtn').addClass('d-none');
  29. $('.emptyShow').removeClass('d-none');
  30. }
  31. setLengthCart();
  32. console.log(products, 'products');
  33. for (let product in products) {
  34. html += shoppingCartDesktopHTML({ ...products[product], total: products[product].quantity * products[product].price, id: product });
  35. }
  36. $('.appendItems').html(html);
  37. addEventListenerCart();
  38. }
  39. // event listeners
  40. function addEventListenerCart() {
  41. $('.quantitySelect').each(function (i, element) {
  42. if (!$(element).hasClass('d-none')) {
  43. $(element).off().change(function (e) {
  44. insufficientQtyActions.moreQtyRemove(e);
  45. let num = e.target.value;
  46. if (num == 5) {
  47. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore').removeClass('d-none');
  48. $(e.target).addClass('d-none');
  49. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  50. const val = $(item.target).parent().find('input').val();
  51. debugger;
  52. let totalQty = $(this).parents('.mainselectcontainer').data('qty');
  53. if (val <= 0 || totalQty < val) {
  54. insufficientQtyActions.moreQtyAdd(e);
  55. return;
  56. }
  57. let id = $(item.target).parents('.mainselectcontainer').data('id');
  58. updateCartQuantity(id, val);
  59. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  60. // $(e.target).removeClass('d-none');
  61. setLengthCart();
  62. shoppingCartAppend();
  63. })
  64. } else {
  65. let totalQty = $(e.target).parents('.mainselectcontainer').data('qty');
  66. const val = $(e.target).parent().find('input').val();
  67. if (val <= 0 || totalQty < val) {
  68. insufficientQtyActions.moreQtyAdd(e);
  69. return;
  70. }
  71. let id = $(e.target).parents('.mainselectcontainer').data('id');
  72. updateCartQuantity(id, num);
  73. setLengthCart();
  74. shoppingCartAppend();
  75. }
  76. });
  77. } else {
  78. $(element).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  79. debugger;
  80. const val = $(item.target).parent().find('input').val()
  81. let totalQty = $(this).parents('.mainselectcontainer').data('qty');
  82. if (val <= 0 || totalQty < val) {
  83. insufficientQtyActions.moreQtyAdd(item);
  84. return;
  85. }
  86. let id = $(item.target).parents('.mainselectcontainer').data('id');
  87. updateCartQuantity(id, val);
  88. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  89. // $(e.target).removeClass('d-none');
  90. setLengthCart();
  91. shoppingCartAppend();
  92. })
  93. }
  94. });
  95. $('.removeitemcartmodal').off('click').click(function () {
  96. setCartData(DELETE_FILTER);
  97. setLengthCart();
  98. shoppingCartAppend();
  99. let len = Object.keys(DELETE_FILTER).length
  100. if (!len) {
  101. $('.checkoutbtn').addClass('d-none');
  102. $('.emptyShow').removeClass('d-none');
  103. } else {
  104. $('.checkoutbtn').removeClass('d-none');
  105. $('.emptyShow').addClass('d-none');
  106. }
  107. });
  108. $('.btndeletecart').each(function (i, element) {
  109. $(element).click(function (e) {
  110. const cardId = $(e.target).data('cartid');
  111. let data = getCartData();
  112. console.log(data, 'cardId', cardId);
  113. if (!data) return;
  114. debugger;
  115. const products = data;
  116. const productsFilter = {};
  117. $('#modalremovecart').html(products[cardId].name);
  118. for (let product in products) {
  119. if (product != cardId) productsFilter[product] = products[product];
  120. }
  121. data = productsFilter;
  122. console.log(data);
  123. DELETE_FILTER = data;
  124. // setCartData(data);
  125. // setLengthCart();
  126. // shoppingCartAppend();
  127. });
  128. });
  129. $('.checkoutbtn').click(async function (e) {
  130. $('.checkoutbtn').find('span').addClass('d-none');
  131. $('.checkoutbtn').find('div').removeClass('d-none');
  132. const res = await COOKIE_HELPER.validateToken();
  133. if (!res.response) {
  134. localStorage.setItem(CART_ADD, true);
  135. window.location.href = '/login.html';
  136. $('.checkoutbtn').find('span').removeClass('d-none');
  137. $('.checkoutbtn').find('div').addClass('d-none');
  138. return;
  139. }
  140. window.location.href = '/selectdelivery.html';
  141. $('.checkoutbtn').find('span').removeClass('d-none');
  142. $('.checkoutbtn').find('div').addClass('d-none');
  143. });
  144. }
  145. function getQuantityHTML(value, totalQty, id) {
  146. return `<div data-id="${id}" data-qty="${totalQty}" class="mainselectcontainer w-100">
  147. <div class="w-50">
  148. <select class="quantitySelect form-select ${value >= 5 ? 'd-none' : ''}" value="${value}">
  149. <option ${value == 1 ? 'selected="selected"' : null} value="1">
  150. 1
  151. </option>
  152. <option ${value == 2 ? 'selected="selected"' : null} value="2">
  153. 2
  154. </option>
  155. <option ${value == 3 ? 'selected="selected"' : null} value="3">
  156. 3
  157. </option>
  158. <option ${value == 4 ? 'selected="selected"' : null} value="4">
  159. 4
  160. </option>
  161. <option ${value == 5 ? 'selected="selected"' : null} value="5">
  162. 5+
  163. </option>
  164. </select>
  165. </div>
  166. <div class=" inputcartaddmore d-flex gap-2 ${value >= 5 ? '' : 'd-none'}">
  167. <input min="1" class="form-control" style="max-width:100px" value="${value <= 5 ? '5' : value}" type="number" />
  168. <button class="bg-gradient-anwi border-none btn text-white">Add</button>
  169. </div>
  170. <div class="text-danger pt-2 insufficientqty d-none">Insufficient quantity</div>
  171. </div>`
  172. }
  173. function shoppingCartDesktopHTML({ id, img, name, price, description, quantity, total, totalQty, productid, itemid }) {
  174. const [currencySymbol, amount] = getCurrencySymbol(price);
  175. debugger;
  176. let tamt = 0;
  177. {
  178. const [currencySymbol, amount] = getCurrencySymbol(total);
  179. tamt = amount;
  180. }
  181. return `
  182. <div class="d-none d-md-block">
  183. <div class="row bg-white border-bottom py-4 d-flex justify-content-center align-items-center">
  184. <div class="col-md-2 text-center"><img src="${img}" alt="${name}" class="img-fluid"></div>
  185. <div class="col-md-4 ">
  186. <a class="text-decoration-none text-blue fw-600 cursor-pointer" href="productdetails.html?productId=${productid}#itemid=${itemid}">${name}</a>
  187. <small>${description || ''}</small>
  188. <span class="badge d-none text-bg-warning">8 Offers ></span>
  189. </div>
  190. <div class="col-md-2">
  191. <p class="text-right m-0"><span>${currencySymbol}</span> ${amount}</p>
  192. </div>
  193. <div class="col-md-2 ">
  194. ${getQuantityHTML(quantity, totalQty, id)}
  195. </div>
  196. <div class="col-md-2 ">
  197. <div class="d-flex justify-content-between w-100">
  198. <p class="fw-bold m-0">
  199. ${currencySymbol}${tamt}</p>
  200. <span class="btndeletecart cursor-pointer fw-500 text-danger" data-cartid="${id}" data-bs-toggle="modal" data-bs-target="#deletecartmodal">x</span>
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. <div class="row d-block d-md-none smallcart py-3">
  206. <div class="row bg-white py-5 m-0">
  207. <div class="col-4 text-center">
  208. <img src="${img}" alt="${name}" class="img-fluid">
  209. </div>
  210. <div class="col-8 position-relative d-flex flex-column gap-1">
  211. <div class="">
  212. <span>
  213. <a class="text-decoration-none text-blue fw-600 cursor-pointer" href="productdetails.html?productId=${productid}#itemid=${itemid}"><span class="">${name}</span></a>
  214. </span>
  215. </div>
  216. <div>
  217. <p class="fw-bold m-0">
  218. ${currencySymbol}${tamt}</p>
  219. </div>
  220. <div class="text-truncate d-none">
  221. <small>${description || ''}</small>
  222. </div>
  223. <div class="">
  224. ${getQuantityHTML(quantity, totalQty, id)}
  225. </div>
  226. <span class="btndeletecart cursor-pointer fw-500 text-danger" data-cartid="${id}" data-bs-toggle="modal" data-bs-target="#deletecartmodal">x</span>
  227. </div>
  228. </div>
  229. </div>
  230. `;
  231. }
  232. }