тут очень много с карточкой товара и импортом.
This commit is contained in:
+71
-14
@@ -266,8 +266,7 @@ try {
|
||||
const tierValues = (base) => ({
|
||||
base: base,
|
||||
cash20: base * 0.95,
|
||||
cash50: base * 0.93,
|
||||
invoice: base * 1.08
|
||||
cash50: base * 0.93
|
||||
});
|
||||
|
||||
const updateDynamicPrices = (scope) => {
|
||||
@@ -287,7 +286,7 @@ try {
|
||||
};
|
||||
|
||||
const updateCardPrices = (card) => {
|
||||
const packageNode = card.querySelector('[data-package-price]');
|
||||
const packageNode = card.querySelector('[data-dynamic-package-price]');
|
||||
updateDynamicPrices(card);
|
||||
|
||||
if (packageNode) {
|
||||
@@ -297,12 +296,10 @@ try {
|
||||
const tierBase = card.querySelector('[data-tier-base]');
|
||||
const tierCash20 = card.querySelector('[data-tier-cash-20]');
|
||||
const tierCash50 = card.querySelector('[data-tier-cash-50]');
|
||||
const tierInvoice = card.querySelector('[data-tier-invoice]');
|
||||
|
||||
if (tierBase) tierBase.textContent = formatRub(tiers.base);
|
||||
if (tierCash20) tierCash20.textContent = formatRub(tiers.cash20);
|
||||
if (tierCash50) tierCash50.textContent = formatRub(tiers.cash50);
|
||||
if (tierInvoice) tierInvoice.textContent = formatRub(tiers.invoice);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -378,6 +375,8 @@ try {
|
||||
|
||||
const updateModeButtons = () => {
|
||||
const payment = getPaymentMode();
|
||||
document.body.dataset.paymentMode = payment;
|
||||
|
||||
document.querySelectorAll('[data-payment-mode]').forEach((button) => {
|
||||
button.classList.toggle('is-active', button.dataset.paymentMode === payment);
|
||||
});
|
||||
@@ -425,6 +424,37 @@ try {
|
||||
window.RybStockPricing.setPaymentMode(modeButton.dataset.paymentMode || 'cash');
|
||||
});
|
||||
|
||||
document.addEventListener('click', (event) => {
|
||||
const quantityButton = event.target.closest('[data-quantity-minus], [data-quantity-plus]');
|
||||
|
||||
if (!quantityButton) {
|
||||
return;
|
||||
}
|
||||
|
||||
const control = quantityButton.closest('[data-quantity-control]');
|
||||
const input = control?.querySelector('[data-quantity-input]');
|
||||
|
||||
if (!input) {
|
||||
return;
|
||||
}
|
||||
|
||||
const current = Math.max(1, parseInt(input.value || '1', 10) || 1);
|
||||
const next = quantityButton.matches('[data-quantity-plus]')
|
||||
? current + 1
|
||||
: Math.max(1, current - 1);
|
||||
input.value = String(next);
|
||||
});
|
||||
|
||||
document.addEventListener('input', (event) => {
|
||||
const input = event.target.closest('[data-quantity-input]');
|
||||
|
||||
if (!input) {
|
||||
return;
|
||||
}
|
||||
|
||||
input.value = String(Math.max(1, parseInt(input.value.replace(/\D/g, '') || '1', 10) || 1));
|
||||
});
|
||||
|
||||
document.addEventListener('click', (event) => {
|
||||
const addButton = event.target.closest('.add-to-cart-button');
|
||||
|
||||
@@ -435,19 +465,21 @@ try {
|
||||
const productScope = addButton.closest('.price-aware');
|
||||
const row = addButton.closest('.variant-row');
|
||||
const variantButton = productScope?.querySelector('.variant-choice-button.is-active');
|
||||
const packagePriceNode = row?.querySelector('[data-dynamic-package-price]') || productScope?.querySelector('[data-package-price]');
|
||||
const packagePriceNode = row?.querySelector('[data-dynamic-package-price]') || productScope?.querySelector('[data-dynamic-package-price]');
|
||||
const quantityInput = row?.querySelector('[data-quantity-input]') || productScope?.querySelector('[data-quantity-input]');
|
||||
|
||||
if (!productScope || !packagePriceNode) {
|
||||
return;
|
||||
}
|
||||
|
||||
const addQuantity = Math.max(1, parseInt(quantityInput?.value || '1', 10) || 1);
|
||||
const variantId = row?.dataset.variantId || variantButton?.dataset.variantId || 'default';
|
||||
const key = String(productScope.dataset.productId || '') + ':' + variantId;
|
||||
const items = getCartItems();
|
||||
const existing = items.find((item) => item.key === key);
|
||||
|
||||
if (existing) {
|
||||
existing.quantity = Number(existing.quantity || 0) + 1;
|
||||
existing.quantity = Number(existing.quantity || 0) + addQuantity;
|
||||
} else {
|
||||
items.push({
|
||||
key,
|
||||
@@ -459,7 +491,7 @@ try {
|
||||
variantName: row?.dataset.variantName || variantButton?.dataset.variantName || 'Фасовка',
|
||||
basePackagePrice: Number(packagePriceNode.dataset.basePackagePrice || 0),
|
||||
baseUnitPrice: Number(row?.dataset.baseUnitPrice || variantButton?.dataset.baseUnitPrice || 0),
|
||||
quantity: 1
|
||||
quantity: addQuantity
|
||||
});
|
||||
}
|
||||
|
||||
@@ -526,15 +558,23 @@ try {
|
||||
});
|
||||
|
||||
const unitNode = card.querySelector('[data-unit-label]');
|
||||
const unitPriceNode = card.querySelector('[data-price-unit]');
|
||||
const packagePriceNode = card.querySelector('[data-package-price]');
|
||||
const oldPriceNode = card.querySelector('[data-old-price]');
|
||||
const unitPriceNode = card.querySelector('[data-dynamic-unit-price]');
|
||||
const packagePriceNode = card.querySelector('[data-dynamic-package-price]');
|
||||
const packageLabelNode = card.querySelector('[data-package-label-display]');
|
||||
const packageLabelNoteNode = card.querySelector('[data-package-label-note]');
|
||||
const unitLabelNoteNode = card.querySelector('[data-unit-label-note]');
|
||||
const oldPriceNode = card.querySelector('[data-old-package-price-display]');
|
||||
const oldUnitPriceNode = card.querySelector('[data-old-unit-price-display]');
|
||||
|
||||
if (unitNode) {
|
||||
unitNode.textContent = button.dataset.unit || 'ед.';
|
||||
}
|
||||
|
||||
if (unitPriceNode && button.dataset.priceUnit) {
|
||||
if (unitLabelNoteNode) {
|
||||
unitLabelNoteNode.textContent = button.dataset.unit || 'ед.';
|
||||
}
|
||||
|
||||
if (unitPriceNode) {
|
||||
unitPriceNode.dataset.baseUnitPrice = button.dataset.baseUnitPrice || '';
|
||||
}
|
||||
|
||||
@@ -542,9 +582,26 @@ try {
|
||||
packagePriceNode.dataset.basePackagePrice = button.dataset.basePackagePrice || '';
|
||||
}
|
||||
|
||||
if (packageLabelNode) {
|
||||
packageLabelNode.textContent = button.dataset.variantPackageLabel || button.dataset.variantName || 'Фасовка';
|
||||
}
|
||||
|
||||
if (packageLabelNoteNode) {
|
||||
packageLabelNoteNode.textContent = button.dataset.variantPackageLabel || button.dataset.variantName || 'Фасовка';
|
||||
}
|
||||
|
||||
if (oldPriceNode) {
|
||||
oldPriceNode.textContent = button.dataset.oldPrice || '';
|
||||
oldPriceNode.hidden = !button.dataset.oldPrice;
|
||||
const oldPackagePrice = button.dataset.oldPrice || '';
|
||||
oldPriceNode.textContent = oldPackagePrice;
|
||||
oldPriceNode.hidden = oldPackagePrice === '';
|
||||
}
|
||||
|
||||
if (oldUnitPriceNode) {
|
||||
const oldUnitPrice = Number(button.dataset.oldUnitPrice || 0);
|
||||
const baseUnitPrice = Number(button.dataset.baseUnitPrice || 0);
|
||||
const hasOldUnitPrice = oldUnitPrice > baseUnitPrice;
|
||||
oldUnitPriceNode.textContent = hasOldUnitPrice ? formatRub(oldUnitPrice) : '';
|
||||
oldUnitPriceNode.hidden = !hasOldUnitPrice;
|
||||
}
|
||||
|
||||
updateCardPrices(card);
|
||||
|
||||
Reference in New Issue
Block a user