설명 없음
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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. shoppingCartInit();
  2. debugger;
  3. function shoppingCartInit() {
  4. shoppingCartAppend();
  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. for (let product in products) {
  33. html += shoppingCartDesktopHTML({ ...products[product], total: products[product].quantity * products[product].price, id: product });
  34. }
  35. $('.appendItems').html(html);
  36. addEventListenerCart();
  37. }
  38. // event listeners
  39. function addEventListenerCart() {
  40. $('.quantitySelect').each(function (i, element) {
  41. if (!$(element).hasClass('d-none')) {
  42. $(element).off().change(function (e) {
  43. insufficientQtyActions.moreQtyRemove(e);
  44. let num = e.target.value;
  45. if (num == 5) {
  46. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore').removeClass('d-none');
  47. $(e.target).addClass('d-none');
  48. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  49. const val = $(item.target).parent().find('input').val();
  50. debugger;
  51. let totalQty = $(this).parents('.mainselectcontainer').data('qty');
  52. if(val<=0 || totalQty< val){
  53. insufficientQtyActions.moreQtyAdd(e);
  54. return;
  55. }
  56. let id = $(item.target).parents('.mainselectcontainer').data('id');
  57. updateCartQuantity(id, val);
  58. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  59. // $(e.target).removeClass('d-none');
  60. setLengthCart();
  61. shoppingCartAppend();
  62. })
  63. } else {
  64. const val = $(item.target).parent().find('input').val();
  65. if(val<=0 || totalQty< val){
  66. insufficientQtyActions.moreQtyAdd(e);
  67. return;
  68. }
  69. let id = $(e.target).parents('.mainselectcontainer').data('id');
  70. updateCartQuantity(id, num);
  71. setLengthCart();
  72. shoppingCartAppend();
  73. }
  74. });
  75. } else {
  76. $(element).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  77. debugger;
  78. const val = $(item.target).parent().find('input').val()
  79. let totalQty = $(this).parents('.mainselectcontainer').data('qty');
  80. if(val<=0 || totalQty< val){
  81. insufficientQtyActions.moreQtyAdd(item);
  82. return;
  83. }
  84. let id = $(item.target).parents('.mainselectcontainer').data('id');
  85. updateCartQuantity(id, val);
  86. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  87. // $(e.target).removeClass('d-none');
  88. setLengthCart();
  89. shoppingCartAppend();
  90. })
  91. }
  92. });
  93. $('.btndeletecart').each(function (i, element) {
  94. $(element).click(function (e) {
  95. const cardId = $(e.target).data('cartid');
  96. let data = getCartData();
  97. console.log(data, 'cardId', cardId);
  98. if (!data) return;
  99. debugger;
  100. const products = data;
  101. const productsFilter = {};
  102. for (let product in products) {
  103. if (product != cardId) productsFilter[product] = products[product];
  104. }
  105. data = productsFilter;
  106. let len = Object.keys(data).length
  107. if(!len){
  108. $('.checkoutbtn').addClass('d-none');
  109. $('.emptyShow').removeClass('d-none');
  110. }else{
  111. $('.checkoutbtn').removeClass('d-none');
  112. $('.emptyShow').addClass('d-none');
  113. }
  114. setCartData(data);
  115. setLengthCart();
  116. shoppingCartAppend();
  117. });
  118. });
  119. $('.checkoutbtn').click(async function (e){
  120. $('.checkoutbtn').find('span').addClass('d-none');
  121. $('.checkoutbtn').find('div').removeClass('d-none');
  122. const res = await COOKIE_HELPER.validateToken();
  123. if(!res.response){
  124. localStorage.setItem(CART_ADD,true);
  125. window.location.href = '/login.html';
  126. $('.checkoutbtn').find('span').removeClass('d-none');
  127. $('.checkoutbtn').find('div').addClass('d-none');
  128. return;
  129. }
  130. window.location.href = '/selectdelivery.html';
  131. $('.checkoutbtn').find('span').removeClass('d-none');
  132. $('.checkoutbtn').find('div').addClass('d-none');
  133. });
  134. }
  135. function getQuantityHTML(value,totalQty, id) {
  136. return `<div data-id="${id}" data-qty="${totalQty}" class="mainselectcontainer w-100">
  137. <div class="w-50">
  138. <select class="quantitySelect form-select ${value >= 5 ? 'd-none' : ''}" value="${value}">
  139. <option ${value == 1 ? 'selected="selected"' : null} value="1">
  140. 1
  141. </option>
  142. <option ${value == 2 ? 'selected="selected"' : null} value="2">
  143. 2
  144. </option>
  145. <option ${value == 3 ? 'selected="selected"' : null} value="3">
  146. 3
  147. </option>
  148. <option ${value == 4 ? 'selected="selected"' : null} value="4">
  149. 4
  150. </option>
  151. <option ${value == 5 ? 'selected="selected"' : null} value="5">
  152. 5+
  153. </option>
  154. </select>
  155. </div>
  156. <div class=" inputcartaddmore d-flex gap-2 ${value >= 5 ? '' : 'd-none'}">
  157. <input min="1" class="form-control" style="max-width:100px" value="${value <= 5 ? '5' : value}" type="number" />
  158. <button class="btn border-none bg-info">Add</button>
  159. </div>
  160. <div class="text-danger pt-2 insufficientqty d-none">Insufficient quantity</div>
  161. </div>`
  162. }
  163. function shoppingCartDesktopHTML({ id, img, name, price, description, quantity, total,totalQty }) {
  164. const [currencySymbol,amt] = getCurrencySymbol(price);
  165. return `
  166. <div class="row bg-white border-bottom py-4 d-flex justify-content-center align-items-center">
  167. <div class="col-md-2 text-center"><img src="${img}" alt="${name}" class="img-fluid"></div>
  168. <div class="col-md-4 ">
  169. <a class="text-decoration-none text-blue fw-600 cursor-pointer" href="/productdetails.html?productId=${id}">${name}</a>
  170. <small>${description||''}</small>
  171. <span class="badge d-none text-bg-warning">8 Offers ></span>
  172. </div>
  173. <div class="col-md-2">
  174. <p class="text-right m-0"><span>${currencySymbol}</span> ${amt}</p>
  175. </div>
  176. <div class="col-md-2 ">
  177. ${getQuantityHTML(quantity,totalQty, id)}
  178. </div>
  179. <div class="col-md-2 ">
  180. <div class="d-flex justify-content-between w-100">
  181. <p class="fw-bold m-0"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-currency-rupee" viewBox="0 0 16 16">
  182. <path d="M4 3.06h2.726c1.22 0 2.12.575 2.325 1.724H4v1.051h5.051C8.855 7.001 8 7.558 6.788 7.558H4v1.317L8.437 14h2.11L6.095 8.884h.855c2.316-.018 3.465-1.476 3.688-3.049H12V4.784h-1.345c-.08-.778-.357-1.335-.793-1.732H12V2H4v1.06Z"/>
  183. </svg>${total}</p>
  184. <span class="btndeletecart cursor-pointer fw-500 text-danger" data-cartid="${id}">x</span>
  185. </div>
  186. </div>
  187. <div class="warrenty-sec px-3 sec-space-4 d-none">
  188. <div class="row align-items-center border py-2 mx-4">
  189. <div class="col-md-8">
  190. <p class="mb-0 "> <img src="./dist/assets/imgs/Home/Anwi-cart-logo.png" alt="shopping-cart-item-img"> Anwi Extended Warranty 2 Year: Protect your Laptop for another 2 years Learn more </p>
  191. </div>
  192. <div class="col-md-3">
  193. <p class="text-end mb-0"> ₹3,200 (2 year)
  194. </p>
  195. </div>
  196. </div>
  197. <div class="row align-items-center border py-2 mx-4 mt-3">
  198. <div class="col-md-8">
  199. <p class="mb-0"> <img src="./dist/assets/imgs/Home/Anwi-cart-logo-2.png" alt="shopping-cart-item-img"> Anwi Extended Warranty 2 Year: Protect your Laptop for another 2 years Learn more </p>
  200. </div>
  201. <div class="col-md-3">
  202. <p class="text-end mb-0"> ₹2,900 (2 year)
  203. </p>
  204. </div>
  205. </div>
  206. </div>
  207. </div>
  208. <div class=" bg-white mt-3 rounded py-3 d-block d-sm-none ">
  209. <div class="row">
  210. <div class=""></div>
  211. </div>
  212. <div>
  213. </div>
  214. </div>
  215. `;
  216. }
  217. }