1. 实现计算公积金贷款和商业贷款实际利率的功能
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="../js/vue.js"></script>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title></title>
</head>
<body>
<div id="root">
<div>
<label>贷款方式</label>
<select v-model="selected_LoanMethod" @change="CalculateRate">
<option value="0">商业贷款</option>
<option value="1">公积金贷款</option>
</select>
</div>
<div>
<label>贷款年限</label>
<select v-model="selected_LoanYear" @change="CalculateRate">
<option v-for="(year, index) in 30" :value="year">{
{year}}年</option>
</select>
</div>
<div>
<label>贷款利率</label>
<select v-model="selected_Rate">
<option v-for="(item, index) in rateDetail" :value="item.value">{
{item.text}}</option>
</select>
<label>{
{selected_Rate}}%</label>
</div>
<div>
<label>还款方式</label>
<select v-model="RepaymentMethod">
<option value="0">等额本金</option>
<option value="1">等额本息</option>
</select>
</div>
<div>
<label>贷款金额</label>
<input type="number" v-model="LoanMoney">万
</div>
<div>
<button @click="">开始计算</button>
</div>
</div>
<script>
const GJJ_GT_5 = 3.25 //公积金贷款5年以上的贷款利率
const GJJ_LT_5 = 2.75 //公积金贷款5年以下的贷款利率
const SY_GT_5 = 4.90 //商业贷款5年以上的贷款利率
const SY_LT_5 = 4.75 //商业贷款5年以下的贷款利率
let vm = new Vue({
el: '#root',
data: {
RepaymentMethod: "0", //还款方式
selected_LoanMethod: "0", //贷款方式
selected_LoanYear: "10", //贷款年限
selected_Rate: "", //贷款利率
LoanMoney: "0", //贷款金额
rateDetail: [], //利率详情
},
created: function () {
this.CalculateRate()
},
methods: {
CalculateRate: function () { //计算利率
this.rateDetail = []
let basicRate; //定义基准利率
if (this.selected_LoanMethod == "0") { //如果贷款方式是商业贷款
if (this.selected_LoanYear <= 5) { //如果贷款年限小于等于5
basicRate = SY_LT_5
} else {
basicRate = SY_GT_5
}
//设置利率
this.rateDetail.push({
text: "基准利率",
value: parseFloat((1 * basicRate).toFixed(2))
}, {
text: "7折利率",
value: parseFloat((0.7 * basicRate).toFixed(2))
}, {
text: "8折利率",
value: parseFloat((0.8 * basicRate).toFixed(2))
}, {
text: "8.3折利率",
value: parseFloat((0.83 * basicRate).toFixed(2))
}, {
text: "8.5折利率",
value: parseFloat((0.85 * basicRate).toFixed(2))
}, {
text: "8.8折利率",
value: parseFloat((0.88 * basicRate).toFixed(2))
}, {
text: "9折利率",
value: parseFloat((0.9 * basicRate).toFixed(2))
}, {
text: "9.5折利率",
value: parseFloat((0.95 * basicRate).toFixed(2))
}, {
text: "1.05倍利率",
value: parseFloat((1.05 * basicRate).toFixed(2))
}, {
text: "1.1倍利率",
value: parseFloat((1.1 * basicRate).toFixed(2))
})
} else if (this.selected_LoanMethod == "1") {
if (this.selected_LoanYear <= 5) {
basicRate = GJJ_LT_5
} else {
basicRate = GJJ_GT_5
}
//设置利率
this.rateDetail.push({
text: "基准利率",
value: basicRate
}, {
text: "1.1倍率",
value: parseFloat((basicRate * 1.1).toFixed(2))
})
}
this.selected_Rate = basicRate //设置下拉框的默认值
},
CalculateDetail: function () { //计算还款明细
alert()
}
}
})
</script>
</body>
</html>
2. 实现计算还款明细的功能
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="../js/vue.js"></script>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title></title>
</head>
<body>
<div id="root">
<div>
<label>贷款方式</label>
<select v-model="selected_LoanMethod" @change="CalculateRate">
<option value="0">商业贷款</option>
<option value="1">公积金贷款</option>
</select>
</div>
<div>
<label>贷款年限</label>
<select v-model="selected_LoanYear" @change="CalculateRate">
<option v-for="(year, index) in 30" :value="year">{
{ year }}年</option>
</select>
</div>
<div>
<label>贷款利率</label>
<select v-model="selected_Rate">
<option v-for="(item, index) in rateDetail" :value="item.value">{
{ item.text }}</option>
</select>
<label>{
{ selected_Rate }}%</label>
</div>
<div>
<label>还款方式</label>
<select v-model="RepaymentMethod">
<option value="0">等额本金</option>
<option value="1">等额本息</option>
</select>
</div>
<div>
<label>贷款金额</label>
<input type="number" v-model="LoanMoney" />万
</div>
<div>
<button @click="CalculateDetail">开始计算</button>
</div>
{
{RepaymentDetails}}
</div>
<script>
const GJJ_GT_5 = 3.25 //公积金贷款5年以上的贷款利率
const GJJ_LT_5 = 2.75 //公积金贷款5年以下的贷款利率
const SY_GT_5 = 4.9 //商业贷款5年以上的贷款利率
const SY_LT_5 = 4.75 //商业贷款5年以下的贷款利率
let vm = new Vue({
el: '#root',
data: {
RepaymentMethod: '0', //还款方式
selected_LoanMethod: '0', //贷款方式
selected_LoanYear: '10', //贷款年限
selected_Rate: '', //贷款利率
LoanMoney: '0', //贷款金额
rateDetail: [], //利率详情
RepaymentDetails: [], //还款明细
},
created: function() {
this.CalculateRate()
},
methods: {
CalculateRate: function() {
//计算利率
this.rateDetail = []
let basicRate //定义基准利率
if (this.selected_LoanMethod == '0') {
//如果贷款方式是商业贷款
if (this.selected_LoanYear <= 5) {
//如果贷款年限小于等于5
basicRate = SY_LT_5
} else {
basicRate = SY_GT_5
}
//设置利率
this.rateDetail.push({
text: '基准利率',
value: parseFloat(
(1 * basicRate).toFixed(2)
)
}, {
text: '7折利率',
value: parseFloat(
(0.7 * basicRate).toFixed(2)
)
}, {
text: '8折利率',
value: parseFloat(
(0.8 * basicRate).toFixed(2)
)
}, {
text: '8.3折利率',
value: parseFloat(
(0.83 * basicRate).toFixed(2)
)
}, {
text: '8.5折利率',
value: parseFloat(
(0.85 * basicRate).toFixed(2)
)
}, {
text: '8.8折利率',
value: parseFloat(
(0.88 * basicRate).toFixed(2)
)
}, {
text: '9折利率',
value: parseFloat(
(0.9 * basicRate).toFixed(2)
)
}, {
text: '9.5折利率',
value: parseFloat(
(0.95 * basicRate).toFixed(2)
)
}, {
text: '1.05倍利率',
value: parseFloat(
(1.05 * basicRate).toFixed(2)
)
}, {
text: '1.1倍利率',
value: parseFloat(
(1.1 * basicRate).toFixed(2)
)
})
} else if (this.selected_LoanMethod == '1') {
if (this.selected_LoanYear <= 5) {
basicRate = GJJ_LT_5
} else {
basicRate = GJJ_GT_5
}
//设置利率
this.rateDetail.push({
text: '基准利率',
value: basicRate
}, {
text: '1.1倍率',
value: parseFloat(
(basicRate * 1.1).toFixed(2)
)
})
}
this.selected_Rate = basicRate //设置下拉框的默认值
},
CalculateDetail: function() { //计算还款明细
this.RepaymentDetails = []
let LoanMoney = this.LoanMoney * 10000 //贷款金额、本金(单位:元)
let LoanMonth = this.selected_LoanYear * 12 //贷款的月数
let month_rate = (this.selected_Rate * 0.01) / 12 //月利率
if (this.RepaymentMethod == '0') { //等额本金
let payable_bj_month = LoanMoney / LoanMonth //每月应还本金=本金/(贷款年限*12)
let payed_bj = 0 //已还本金初始为0
for (let i = 1; i <= LoanMonth; i++) {
let payable_lx_month = (LoanMoney - payed_bj) * month_rate //每月应还的利息 = (本金-已还本金)*月利率
let payable_total_month = payable_bj_month + payable_lx_month //每月月供=每月应还本金 + 每月应还的利息
payed_bj = payed_bj + payable_bj_month //已还本金=累计的已还本金+每月应还本金
let RepaymentDetails_month = {}
RepaymentDetails_month["月数"] = i
RepaymentDetails_month["每月月供"] = payable_total_month
RepaymentDetails_month["当月累计已还本金"] = payed_bj
RepaymentDetails_month["每月应还的利息"] = payable_lx_month
this.RepaymentDetails.push(RepaymentDetails_month)
}
} else { //等额本息
let payable_total_month = (LoanMoney * month_rate * Math.pow(1 + month_rate, LoanMonth)) / (Math.pow(1 + month_rate, LoanMonth) - 1) //每月月供=[本金*月利率*(1+月利率)^贷款月数]/[(1+月利率)^贷款年限-1]
let payed_bj = 0 //已还本金,初始为0
for (let i = 1; i <= LoanMonth; i++) {
let payable_lx_month = (LoanMoney - payed_bj) * month_rate //每月利息=(本金-已还本金)*月利率
payable_bj_month = payable_total_month - payable_lx_month //每月应还本金=每月月供-每月利息
payed_bj = payed_bj + payable_bj_month //已还本金=累计的已还本金+每月应还本金
let RepaymentDetails_month = {}
RepaymentDetails_month["月数"] = i
RepaymentDetails_month["每月月供"] = payable_total_month
RepaymentDetails_month["当月累计已还本金"] = payed_bj
RepaymentDetails_month["每月应还的利息"] = payable_lx_month
this.RepaymentDetails.push(RepaymentDetails_month)
}
}
}
}
})
</script>
</body>
</html>
测试结果: