调整流程详情测算结果展示

This commit is contained in:
wkc
2026-08-12 10:36:21 +08:00
parent 6b5d31fb92
commit 30a1d9771f

View File

@@ -7,14 +7,16 @@
<!-- 个人客户模型输出 -->
<template v-if="custType === '个人' && retailOutput">
<div class="output-section">
<h4 class="section-title">基本信息</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="客户内码">{{ retailOutput.custIsn || '-' }}</el-descriptions-item>
<el-descriptions-item label="客户名称">{{ retailOutput.custName || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件类型">{{ retailOutput.idType || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件号码">{{ retailOutput.idNum || '-' }}</el-descriptions-item>
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="3" border size="small">
<el-descriptions-item label="基准利率"><span class="rate-value">{{ formatRate(retailOutput.baseLoanRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="灰黑名单客户">{{ formatOutputValue(retailOutput.greyBlackCust) }}</el-descriptions-item>
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ retailOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="模型测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(retailOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(retailOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="平滑利率"><span class="calculate-rate">{{ formatRate(retailOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="BP支行权限">-</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(retailOutput.referenceRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
@@ -38,9 +40,9 @@
<colgroup><col class="result-column"><col class="bp-column"></colgroup>
<thead><tr><th>模型输出结果</th><th>影响BP</th></tr></thead>
<tbody>
<tr v-for="(row, index) in retailContributionRows" :key="`retail-contribution-${index}`" class="is-total-row">
<td><div v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span class="total-bp-value">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
<tr v-for="(row, index) in retailContributionRows" :key="`retail-contribution-${index}`" :class="{ 'is-total-row': row.total }">
<td><span v-if="row.summary">汇总</span><div v-else v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span v-if="row.bpLabel" :class="row.total ? 'total-bp-value' : 'bp-value'">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
</tr>
</tbody>
</table>
@@ -74,30 +76,21 @@
</table>
</div>
<div class="output-section">
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ retailOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(retailOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ formatRate(retailOutput.minRateProduct) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(retailOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(retailOutput.referenceRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
</template>
<!-- 企业客户模型输出 -->
<template v-else-if="custType === '企业' && corpOutput">
<div class="output-section">
<h4 class="section-title">基本信息</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="客户内码">{{ corpOutput.custIsn || '-' }}</el-descriptions-item>
<el-descriptions-item label="客户名称">{{ corpOutput.custName || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件类型">{{ corpOutput.idType || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件号码">{{ corpOutput.idNum || '-' }}</el-descriptions-item>
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="3" border size="small">
<el-descriptions-item label="基准利率"><span class="rate-value">{{ formatRate(corpOutput.baseLoanRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ corpOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="模型测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(corpOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(corpOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="平滑利率"><span class="calculate-rate">{{ formatRate(corpOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="BP支行权限">-</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(corpOutput.referenceRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
@@ -121,9 +114,9 @@
<colgroup><col class="result-column"><col class="bp-column"></colgroup>
<thead><tr><th>模型输出结果</th><th>影响BP</th></tr></thead>
<tbody>
<tr v-for="(row, index) in corporateContributionRows" :key="`corporate-contribution-${index}`" class="is-total-row">
<td><div v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span class="total-bp-value">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
<tr v-for="(row, index) in corporateContributionRows" :key="`corporate-contribution-${index}`" :class="{ 'is-total-row': row.total }">
<td><span v-if="row.summary">汇总</span><div v-else v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span v-if="row.bpLabel" :class="row.total ? 'total-bp-value' : 'bp-value'">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
</tr>
</tbody>
</table>
@@ -136,27 +129,13 @@
<thead><tr><th>模型输出结果</th><th>影响BP</th></tr></thead>
<tbody>
<tr v-for="(row, index) in corporateRelevanceRows" :key="`corporate-relevance-${index}`" :class="{ 'is-total-row': row.total }">
<td><span v-if="row.summary">汇总</span><div v-else v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span v-if="row.summary">汇总</span><template v-else><div v-if="row.category" class="result-category">{{ row.category }}</div><div v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></template></td>
<td><span :class="row.total ? 'total-bp-value' : 'bp-value'">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
</tr>
</tbody>
</table>
</div>
<div class="output-section">
<h4 class="section-title">企业类别</h4>
<table class="output-analysis-table">
<colgroup><col class="result-column"><col class="bp-column"></colgroup>
<thead><tr><th>模型输出结果</th><th>影响BP</th></tr></thead>
<tbody>
<tr v-for="(row, index) in corporateTypeRows" :key="`corporate-type-${index}`">
<td><div v-for="item in row.results" :key="item.label" class="result-item"><span class="result-label">{{ item.label }}</span><span class="result-value">{{ item.value }}</span></div></td>
<td><span class="bp-value">{{ row.bpLabel }}{{ row.bpValue }}</span></td>
</tr>
</tbody>
</table>
</div>
<div class="output-section">
<h4 class="section-title">风险度分析</h4>
<table class="output-analysis-table">
@@ -171,18 +150,6 @@
</table>
</div>
<div class="output-section">
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ corpOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(corpOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ formatRate(corpOutput.minRateProduct) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(corpOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(corpOutput.referenceRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
</template>
</div>
</el-card>
@@ -217,11 +184,14 @@ export default {
]
},
retailContributionRows() {
return [this.groupedAnalysisRow([
this.resultItem('存款年日均', this.retailOutput.balanceAvg),
this.resultItem('款年日均', this.retailOutput.loanAvg),
this.resultItem('派生率', this.formatRate(this.retailOutput.derivationRate))
], 'TOTAL_BP_贡献度', this.retailOutput.totalBpContribution, true)]
return [
this.groupedAnalysisRow([
this.resultItem('款年日均', this.retailOutput.balanceAvg),
this.resultItem('贷款年日均', this.retailOutput.loanAvg),
this.resultItem('派生率', this.formatRate(this.retailOutput.derivationRate))
]),
this.totalRow('TOTAL_BP_贡献度', this.retailOutput.totalBpContribution)
]
},
retailRelevanceRows() {
return [
@@ -271,11 +241,14 @@ export default {
]
},
corporateContributionRows() {
return [this.groupedAnalysisRow([
this.resultItem('存款年日均', this.corpOutput.balanceAvg),
this.resultItem('款年日均', this.corpOutput.loanAvg),
this.resultItem('派生率', this.formatRate(this.corpOutput.derivationRate))
], 'TOTAL_BP_贡献度', this.corpOutput.totalBpContribution, true)]
return [
this.groupedAnalysisRow([
this.resultItem('款年日均', this.corpOutput.balanceAvg),
this.resultItem('贷款年日均', this.corpOutput.loanAvg),
this.resultItem('派生率', this.formatRate(this.corpOutput.derivationRate))
]),
this.totalRow('TOTAL_BP_贡献度', this.corpOutput.totalBpContribution)
]
},
corporateRelevanceRows() {
return [
@@ -287,23 +260,21 @@ export default {
this.resultItem('中间业务_企业_贴现', this.formatBoolean(this.corpOutput.midEntDiscount)),
this.resultItem('中间业务_企业_电费代扣', this.formatBoolean(this.corpOutput.midEntEleDdc)),
this.resultItem('中间业务_企业_水费代扣', this.formatBoolean(this.corpOutput.midEntWaterDdc))
], 'BP_中间业务', this.corpOutput.bpMid),
], 'BP_中间业务', this.corpOutput.bpMid, false, '中间业务'),
this.groupedAnalysisRow([
this.resultItem('代发工资户数', this.corpOutput.payroll),
this.resultItem('存量贷款余额', this.corpOutput.invLoanAmount)
], 'BP_代发工资', this.corpOutput.bpPayroll),
], 'BP_代发工资', this.corpOutput.bpPayroll, false, '代发工资'),
this.groupedAnalysisRow([
this.resultItem('净身企业', this.formatBoolean(this.corpOutput.isCleanEnt)),
this.resultItem('开立基本结算账户', this.formatBoolean(this.corpOutput.hasSettleAcct)),
this.resultItem('绿色贷款', this.formatBoolean(this.corpOutput.isGreenLoan)),
this.resultItem('科技型企业', this.formatBoolean(this.corpOutput.isTechEnt)),
this.resultItem('贸易和建筑业企业', this.formatBoolean(this.corpOutput.isTradeBuildEnt))
], 'BP_企业客户类别', this.corpOutput.bpEntType, false, '客户类型'),
this.totalRow('TOTAL_BP_关联度', this.corpOutput.totalBpRelevance)
]
},
corporateTypeRows() {
return [this.groupedAnalysisRow([
this.resultItem('净身企业', this.formatBoolean(this.corpOutput.isCleanEnt)),
this.resultItem('开立基本结算账户', this.formatBoolean(this.corpOutput.hasSettleAcct)),
this.resultItem('绿色贷款', this.formatBoolean(this.corpOutput.isGreenLoan)),
this.resultItem('科技型企业', this.formatBoolean(this.corpOutput.isTechEnt)),
this.resultItem('贸易和建筑业企业', this.formatBoolean(this.corpOutput.isTradeBuildEnt))
], 'BP_企业客户类别', this.corpOutput.bpEntType)]
},
corporateRiskRows() {
return [
this.analysisRow('借款期限', this.corpOutput.loanTerm, 'BP_贷款期限', this.corpOutput.bpLoanTerm),
@@ -326,8 +297,8 @@ export default {
resultItem(label, value) {
return {label, value: this.formatOutputValue(value)}
},
groupedAnalysisRow(results, bpLabel, bpValue, total = false) {
return {results, bpLabel, bpValue: this.formatOutputValue(bpValue), total}
groupedAnalysisRow(results, bpLabel, bpValue, total = false, category = null) {
return {results, bpLabel, bpValue: this.formatOutputValue(bpValue), total, category}
},
analysisRow(resultLabel, resultValue, bpLabel, bpValue) {
return this.groupedAnalysisRow([this.resultItem(resultLabel, resultValue)], bpLabel, bpValue)
@@ -445,6 +416,12 @@ export default {
border-top: 1px dashed #ebeef5;
}
.result-category {
margin-bottom: 8px;
color: #303133;
font-weight: 600;
}
.result-label {
min-width: 0;
color: #606266;