PageSourceSearch

https://samurai.ru/local/templates/new_design/state/basket/modules/mutations.js

js samurai.ru collected 2026-10-01 23:56:30 UTC 5,067 bytes, 168 lines download raw bytes

1export default {
2  ADD_PRODUCT_IN_BASKET(state, product) {
3    if (!product.basket_price) product.basket_price = product.price;
4    if (!product.basket_old_price) {
5      if (product.old_price) {
6        product.basket_old_price = product.old_price;
7      }
8    }
9    state.basket.products.push(product);
10  },
11
12  SET_MIN_SUM(state, sum) {
13    state.min_sum = sum;
14  },
15
16  SET_BONUS_WRITE_OFF_AVAILABLE(state, bonusWriteOffAvailable) {
17    state.bonus_write_off_available = bonusWriteOffAvailable;
18  },
19
20  REMOOVE_PRODUCT_FROM_BASKET(state, product) {
21    const products = state.basket.products;
22
23    state.basket.products = products.filter((basketProduct) => {
24      return basketProduct.basket_id !== product.basket_id;
25    });
26  },
27
28  CALC_DELIVERY_PROGRESS(state) {
29    if (state.min_sum > state.basket.total_sum) {
30      let basketTotalSum = state.basket.total_sum
31
32      if (state.basket.pay_bonuses && state.bonus_write_off_available?.write_off_available) {
33        basketTotalSum = basketTotalSum - state.bonus_write_off_available?.write_off_available;
34      }
35
36      state.delivery_progress = (
37        basketTotalSum /
38        (state.min_sum / 100)
39      ).toFixed(2);
40    } else {
41      state.delivery_progress = 100;
42    }
43    state.basket.preloader = false;
44    state.basket.reload = false;
45  },
46
47  INIT_PRODUCT_LIST(state, list) {
48    state.basket.products = list;
49    return true;
50  },
51
52  CALC_BASKET_PRICES(state, bonuses) {
53    let sum = 0;
54    let discount = 0;
55    let sum_products_not_bonus_charge = 0;
56
57    state.basket.products.forEach((product) => {
58      if (product.basket_old_price) {
59        sum += product.quantity * product.basket_old_price;
60        discount +=
61          (product.basket_old_price - product.basket_price) * product.quantity;
62      } else sum += product.basket_price * product.quantity;
63
64      if (product.properties.not_bonus_charge.value == "Y") {
65        sum_products_not_bonus_charge +=
66          product.quantity * product.basket_price;
67      }
68    });
69
70    // let payed_bonuses = 0;
71    // // Теперь количество бонусов на списание присылает Премиум Бонус
72    // try {
73    //   if (state.bonus_write_off_available && state.bonus_write_off_available.write_off_available) {
74    //     console.log({
75    //       'write_off_available' : state.bonus_write_off_available.write_off_available
76    //     });
77    //     payed_bonuses = state.bonus_write_off_available.write_off_available;
78    //   }
79    // }
80    // catch(e) {
81    // }
82    
83
84    // let payed_bonuses = bonuses;
85    // if (
86    //   payed_bonuses >
87    //   (sum - sum_products_not_bonus_charge - discount) * 0.2
88    // ) {
89    //   payed_bonuses = (
90    //     (sum - sum_products_not_bonus_charge - discount) *
91    //     0.2
92    //   ).toFixed(0);
93    // }
94
95    state.basket.added_bonuses = (
96      (sum - discount/*  - (state.basket.pay_bonuses ? payed_bonuses : 0) */) *
97      0.03
98    ).toFixed(0);
99
100    // Считаем дополнительные бонусы по товарам
101    state.basket.products.forEach(function (product) {
102      state.basket.added_bonuses = Number(state.basket.added_bonuses);
103      state.basket.added_bonuses += Number(product.properties.bonus.value) * Number(product.quantity);
104    });
105
106    state.basket.sum = sum.toFixed(0);
107    state.basket.discount = discount.toFixed(0);
108    // state.basket.payed_bonuses = payed_bonuses;
109    state.basket.sum_with_discounts = (sum - discount).toFixed(0);
110    state.basket.total_sum = (
111      sum -
112      discount
113      // (state.basket.pay_bonuses ? payed_bonuses : 0)
114    ).toFixed(0);
115  },
116
117  CLEAN_BASKET_PRODUCT_LIST(state) {
118    state.basket.products.forEach((product) => {
119      product.quantity = 0;
120      product.basket_id = false;
121    });
122    state.basket.products = [];
123  },
124
125  SET_GIFTS(state, gifts) {
126    state.basket.gifts = gifts;
127  },
128
129  SET_PROMOCODE(state, { message = null, value = "", status = "def" }) {
130    if (status == "applied" && state.basket.pay_bonuses) {
131      return;
132    }
133
134    state.basket.promocode = { message, value, status };
135  },
136
137  SET_PROMOCODE_ERROR(state, responce) {
138    if (responce) {
139      this.commit("SET_PROMOCODE", {
140        status: "error",
141        message: responce.error,
142        value: responce.value,
143      });
144    } else {
145      this.commit("SET_PROMOCODE");
146    }
147  },
148
149  SET_BASKET_POSITION_QUANTITY(state, basketPositionQuantity) {
150    state.basketPositionQuantity = basketPositionQuantity;
151  },
152
153  SET_PAYMENT_METHODS(state, payment_methods) {
154    state.payment_methods = payment_methods;
155  },
156
157  SET_COMPLEAT_MESSAGE(state, responce) {
158    state.compleatMessage = responce;
159    state.compleatMessage.show = true;
160  },
161  SET_RECOMENDATION(state, recomendations) {
162    state.basket.recomendations = recomendations;
163  },
164
165  SET_BASKET_CHANGE (state, sdacha) {
166    state.basket.change = sdacha;
167  },
168};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.