/** * Предварительный расчёт авиадоставки Алматы → Москва (только страница услуги, RU). */ import { MAX_KG, USD_PER_PLACE, RESULT_KIND, computeAirFreightEstimate, } from './air-freight-estimate-core.mjs'; const MSG = { over: 'Одно или несколько мест тяжелее 23 кг — автоматический расчёт по тарифу 300 USD/место недоступен. Свяжитесь с менеджером для согласования.', incomplete: 'Укажите вес каждого места.', ok: (places, total) => `Предварительно: ${places} мест × ${USD_PER_PLACE} USD = ${total} USD. Окончательную стоимость и условия подтверждает менеджер.`, }; const root = document.getElementById('air-freight-estimate'); if (root) { const placesInput = root.querySelector('#air-places'); const weightsWrap = root.querySelector('#air-weights'); const resultEl = root.querySelector('#air-estimate-result'); const warnEl = root.querySelector('#air-estimate-warn'); function renderWeightFields(count) { const n = Math.max(1, Math.min(50, Number(count) || 1)); const rows = []; for (let i = 0; i < n; i++) { rows.push( `
` ); } weightsWrap.innerHTML = rows.join(''); } function calc() { const inputs = weightsWrap.querySelectorAll('.air-weight-input'); const rawValues = [...inputs].map((input) => input.value); const result = computeAirFreightEstimate(rawValues); warnEl.hidden = result.kind !== RESULT_KIND.OVER; if (result.kind === RESULT_KIND.OVER) { resultEl.textContent = MSG.over; resultEl.classList.add('v2-air-estimate__result--warn'); return; } if (result.kind === RESULT_KIND.INCOMPLETE) { resultEl.textContent = MSG.incomplete; resultEl.classList.remove('v2-air-estimate__result--warn'); return; } resultEl.classList.remove('v2-air-estimate__result--warn'); resultEl.textContent = MSG.ok(result.places, result.totalUsd); } placesInput.addEventListener('change', () => { renderWeightFields(placesInput.value); calc(); }); placesInput.addEventListener('input', () => { renderWeightFields(placesInput.value); calc(); }); root.addEventListener('input', (e) => { if (e.target.classList.contains('air-weight-input')) calc(); }); renderWeightFields(placesInput.value || 1); calc(); }