Как сделать предоплату по определённому виду оплаты в Tilda

Как сделать предоплату по определённому виду оплаты в Tilda

1
Создали корзину и добавили в ней поле с именем prepayment
Значения поля:
Оплата 100%
Предоплата 10 000 р.
2
Добавили код в блок T123 на страницу и в продуктовый footer

В коде изменили нужные параметры, если требуется

let prePay = 10000; //Сумма или процент предоплаты, без знака %
let percent = false; //Если процент, то true, если сумма, то false
let pSystem = 1; //Порядкомый номер платёжной системы, где будет предоплата
Библиотека для примера

<script>
document.addEventListener("DOMContentLoaded", function(){
    
let prePay  = 10000; //Сумма или процент предоплаты, без знака %
let percent = false; //Если процент, то true, если сумма, то false
let pSystem = 1; //Порядкомый номер платёжной системы, где будет предоплата


let cartSt = document.querySelectorAll('div[data-record-type="706"]');
if(cartSt.length){
//Отслеживаем выбор предоплаты
let prepayment = document.getElementsByName('prepayment')[0];
prepayment.closest('.t-input-group').classList.add("prepayment-group");
let prepaymentGroup = document.querySelectorAll('.prepayment-group')[0];
let prepOpt = prepayment.getElementsByTagName('option')[1];
let prepOptTxt = prepOpt.innerHTML;

prepayment.addEventListener('change', function (e) { setPrepayment() });
function divide(x, delimiter) {
  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, delimiter || " ");
};

//Отслеживаем выбор платёжной системы
let paymentsystem = document.getElementsByName('paymentsystem');
if(paymentsystem.length){
    paymentsystem.forEach(i => i.addEventListener('change',  setPrepayment ) );
};

//Рассчитываем предоплату
let repeat = true; let prepayTxt = '';
prepayTxt = document.createElement('div');
prepayTxt.className = "t706__prepay-text";
setTimeout(function(){ 
    document.querySelectorAll('.t706__cartwin-totalamount-wrap')[0].append(prepayTxt);    
}, 1000);

function setPrepayment(){
    let indexPayment = 0;
    if(paymentsystem.length){
        for (let i = 0; i < paymentsystem.length; i++) {
            if(paymentsystem[i].checked) indexPayment = i+1;
        };  
        if(indexPayment==pSystem){//Если выбрана нужная платёжная система
            prepaymentGroup.classList.remove("prepayment-group-hide");
        }else{//Если выбрана другая платёжная система
            prepaymentGroup.classList.add("prepayment-group-hide");
            prepayment.selectedIndex = 0;
            prepayTxt.innerHTML = "";
            tcart__updateTotalProductsinCartObj(); tcart__reDrawTotal();
        };
    };
    
    let indexPrePay = prepayment.selectedIndex; //Определяем положение выбора предоплаты
    
    let  totalWrap = document.querySelectorAll('.t706__cartwin-totalamount-wrap')[0];

    if(indexPrePay==1){//Если выбрана предоплата

        let  amount = tcart.amount;
        if(percent){//Если процент
            prepayTxt.innerHTML = "Предоплата: "+divide(prePay*amount/100)+" р.";   
            tcart.amount = prePay*amount/100;
            prepOpt.innerHTML = prepOptTxt + " / Остаток " + divide(amount - prePay*amount/100) + " р.";
            prepOpt.value = prepOptTxt + " / Остаток " + divide(amount - prePay*amount/100) + " р.";
            totalWrap.classList.add("prepayment-group-hide");
            
        }else{//Если сумма
            prepayTxt.innerHTML = "Предоплата: "+divide(prePay)+" р.";  
            tcart.amount = prePay;
            prepOpt.innerHTML = prepOptTxt + " / Остаток " + divide(amount - prePay) + " р.";
            prepOpt.value = prepOptTxt + " / Остаток " + divide(amount - prePay) + " р.";
            totalWrap.classList.add("prepayment-group-hide");
        };
    }else{//Если отключена предоплата
            prepayTxt.innerHTML = "";
            prepOpt.innerHTML = prepOptTxt;
            prepOpt.value = prepOptTxt;
            totalWrap.classList.remove("prepayment-group-hide");
            tcart__updateTotalProductsinCartObj(); tcart__reDrawTotal();
    };
        
    repeat = false;
    tcart__reDrawTotal();
    setTimeout(function(){ repeat = true }, 200);

};

//При изменении стоимости продукции, её кол-ва или доставки
let prodamount = document.querySelectorAll('.t706__cartwin-prodamount')[0];
let observer = new MutationObserver(function(mutations) { if(repeat) setPrepayment()});
observer.observe(prodamount, { childList: true, subtree: true});

};

});
</script>

<style>
.t706 .t-input-group_pm .t-input-title {display: none;}
.t706 .t-input-group_pm {margin-top: 0px !important;}
.t706 .prepayment-group.t-input-group_sb {margin-top: 60px;}   
.t706__cartwin-totalamount-wrap { display: block !important}
.prepayment-group-hide,
.prepayment-group-hide .t706__cartwin-totalamount-label,
.prepayment-group-hide .t706__cartwin-totalamount
{display:none}
</style>
Made on
Tilda