1. Крепим таблицы скидок (фиксированные скидки для различных комбинаций):
const discounts = {
"A2": {
"Глянцевая": [
{ min: 1, discount: 1 }, // До 10 листов
{ min: 10, discount: 0.9 }, // От 10 листов
{ min: 100, discount: 0.85 }, // От 100 листов
],
"Матовая": [
{ min: 1, discount: 1 }, // До 10 листов
{ min: 10, discount: 0.8 }, // От 10 листов
{ min: 100, discount: 0.7 }, // От 100 листов
],
},
"A3": {
"Глянцевая": [
{ min: 1, discount: 1 },
{ min: 10, discount: 0.95 },
{ min: 100, discount: 0.9 },
],
"Матовая": [
{ min: 1, discount: 1 },
{ min: 10, discount: 0.85 },
{ min: 100, discount: 0.75 },
],
},
};
2. Функция для расчёта скидки:
function getDiscount(format, type, amount) {
const rules = discounts[format][type];
let discount = 1;
for (const rule of rules) {
if (amount >= rule.min) {
discount = rule.discount;
}
}
return discount;
}
3. Обновляем код калькулятора
jQuery(function ($) {
$("#calc .form-control").on("input change", function () {
const format = $("#paper option:selected").text();
const type = $("#paper-type option:selected").text();
const pricePerSheet = Number($("#paper option:selected").val());
const multiplier = Number($("#paper-type option:selected").val());
const amount = Number($("#paper-amount").val());
if (!amount || amount < 1) {
$("#totalprice").text("0 руб.");
return;
}
// Получение скидки
const discount = getDiscount(format, type, amount);
// Расчёт итоговой стоимости
const total = amount * pricePerSheet * multiplier * discount;
// Вывод результата
$("#totalprice").text(`${total.toLocaleString("ru-RU")}`);
});
});
4. HTML с адаптацией под решение (остаётся практически неизменным):
<div id="calc">
<label>Формат бумаги</label>
<select class="form-control" id="paper">
<option value="2">A2</option>
<option value="1">A3</option>
</select>
<label>Тип бумаги</label>
<select class="form-control" id="paper-type">
<option value="1">Глянцевая</option>
<option value="2">Матовая</option>
</select>
<label>Листов в упаковке</label>
<input type="text" class="form-control" id="paper-amount" />
<div>
<span id="totalprice">0</span> руб.
</div>
</div>
Вся эта пурга динамического расчёта стоимости с учетом фиксированных скидок на основе комбинаций формата бумаги, типа бумаги и количества, лучше всего использовать таблицу скидок или конфигурационный объект, который описывает правила расчёта (определил выше).
Это избавит тебя от необходимости прописывать каждую комбинацию вручную и упростит поддержку кода.
Код проверил
https://jsfiddle.net/pnr4hz10/