Оставьте свои контактные данные
Нажимая на кнопку, вы соглашаетесь с  условиями обработки персональных данных с целью предоставления консультации
Наш менеджер свяжется с вами в ближайшее время
import { useState } from "react"; const tariffs = { Россия: { currency: "₽", pickup: 10, preparation: 5, storagePerDay: 0.5, storagePerMonth: 15, declaredValueFee: 0.01, deliveryPerKgOver5: 20, deliveryUpTo5: 100, assembly: { Москва: 120, "Санкт-Петербург": 120, default: 80, over5kg: 10, }, }, Казахстан: { currency: "₸", pickup: 50, preparation: 20, storagePerDay: 2, storagePerMonth: 60, declaredValueFee: 0.01, deliveryPerKgOver5: 80, deliveryUpTo5: 500, assembly: { default: 500, over5kg: 50, }, }, }; export default function FulfillmentCalculator() { const [country, setCountry] = useState("Россия"); const [city, setCity] = useState(""); const [model, setModel] = useState("FBO"); const [quantity, setQuantity] = useState(1); const [weight, setWeight] = useState(1); const [longestSide, setLongestSide] = useState(""); const [declaredValue, setDeclaredValue] = useState(""); const [storageDays, setStorageDays] = useState(""); const [result, setResult] = useState(null); const calculate = () => { const t = tariffs[country]; const pickup = t.pickup * quantity; const prep = t.preparation * quantity; const storagePerDay = t.storagePerDay * quantity * (parseInt(storageDays) || 0); const storagePerMonth = t.storagePerMonth * quantity; const storage = storageDays ? storagePerDay : 0; const declaredFee = declaredValue ? parseFloat(declaredValue) * t.declaredValueFee : 0; const assemblyRate = model === "FBO" ? t.assembly[city] || t.assembly.default : t.assembly.default; const over5kg = weight > 5 ? (weight - 5) * (t.assembly.over5kg || 0) : 0; const assemblyPerOrder = assemblyRate + over5kg; const assemblyTotal = assemblyPerOrder * quantity; const delivery = model === "FBS" ? (weight > 5 ? t.deliveryUpTo5 + (weight - 5) * t.deliveryPerKgOver5 : t.deliveryUpTo5) : 0; let rows = [ { label: "Приемка", qty: quantity, rate: t.pickup, total: pickup }, ]; if (model === "FBO") rows.push({ label: "Подготовка товара", qty: quantity, rate: t.preparation, total: prep }); if (storage) rows.push({ label: "Хранение (дней)", qty: quantity, rate: t.storagePerDay, total: storage }); rows.push({ label: "Сборка заказа", qty: quantity, rate: assemblyPerOrder, total: assemblyTotal }); if (declaredFee) rows.push({ label: "Сбор за объявленную стоимость", qty: 1, rate: declaredFee.toFixed(2), total: declaredFee }); if (delivery) rows.push({ label: "Доставка", qty: 1, rate: delivery, total: delivery }); const total = rows.reduce((sum, r) => sum + r.total, 0); setResult({ rows, total, currency: t.currency }); }; return (

Калькулятор фулфилмента

{country === "Россия" && ( )} {model === "FBO" && ( )}
{result && (
{result.rows.map((r, i) => ( ))}
Тип операции Количество Тариф за единицу Итого
{r.label} {r.qty} {r.rate} {result.currency} {r.total.toFixed(2)} {result.currency}
Итого: {result.total.toFixed(2)} {result.currency}

Цены указаны без НДС. Это примерный расчет и не является публичной офертой.

)}
); }