<template> <div> <section class="form inputs"> <h3>Monthly Payment - ${{totalMonthly}}</h3> <label>Loan payment: ${{loanPayment.toFixed(2)}}</label> <label v-if="loan.mi.monthly"> Mortgage insurance: ${{(loanPayment*loan.mi.rate/100).toFixed(2)}} </label> <label>Property taxes: ${{loan.tax}}</label> </section> <section class="form inputs"> <h3>Cash to Close - ${{totalMonthly}}</h3> <label>Closing costs: ${{fees}}</label> <label>Credits: ${{credits}}</label> <label>Downpayment: ${{downpayment.toFixed(2)}}</label> <label v-if="!loan.mi.monthly"> Mortgage insurance: ${{(loanPayment*loan.mi.rate).toFixed(2)}} </label> </section> <section class="form inputs"> <button>Save Estimate</button> <button>Generate PDF</button> </section> </div> </template> <script setup> import { ref, computed } from 'vue' const props = defineProps(['downpayment', 'loan']) function amortize(principle, rate, periods) { return principle * rate*(1+rate)**periods / ((1+rate)**periods - 1) } const loanPayment = computed(() => amortize(props.loan.amount, props.loan.interest / 100 / 12, props.loan.term*12) ) const totalMonthly = computed ( () => (loanPayment.value + props.loan.tax + props.loan.hoa + props.loan.hazard).toFixed(2) ) // Closing costs const fees = computed(() => { return props.loan.fees.reduce((total, x) => { return x.amount > 0 ? total + x.amount : 0 }, 0 ).toFixed(2) }) const credits = computed(() => { return props.loan.fees.reduce((total, x) => { return x.amount < 0 ? total + x.amount : 0 }, 0 ).toFixed(2) }) const cashToClose = computed(() => { return fees + credits + downpayment }) </script>