调整流程详情模型输出展示

This commit is contained in:
wkc
2026-08-11 15:37:32 +08:00
parent 9d48d4b688
commit 6b5d31fb92

View File

@@ -18,6 +18,62 @@
</el-descriptions>
</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 retailLoyaltyRows" :key="`retail-loyalty-${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 :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 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>
</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 retailRelevanceRows" :key="`retail-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 :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 retailRiskRows" :key="`retail-risk-${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 :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>
<el-descriptions :column="2" border size="small">
@@ -30,77 +86,6 @@
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">忠诚度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="我行首贷客户">{{ formatBoolean(retailOutput.isFirstLoan) }}</el-descriptions-item>
<el-descriptions-item label="用信天数">{{ retailOutput.faithDay || '-' }}</el-descriptions-item>
<el-descriptions-item label="客户年龄">{{ retailOutput.custAge || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_首贷"><span class="bp-value">{{ retailOutput.bpFirstLoan || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="BP_贷龄"><span class="bp-value">{{ retailOutput.bpAgeLoan || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="BP_年龄"><span class="bp-value">{{ retailOutput.bpAge || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_忠诚度" :span="2"><span class="total-bp-value">{{ retailOutput.totalBpLoyalty || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">贡献度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="存款年日均">{{ retailOutput.balanceAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="贷款年日均">{{ retailOutput.loanAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ formatRate(retailOutput.derivationRate) }}</el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_贡献度"><span class="total-bp-value">{{ retailOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">关联度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="中间业务_个人_信用卡">{{ formatBoolean(retailOutput.midPerCard) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_一码通">{{ formatBoolean(retailOutput.midPerPass) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_丰收互联">{{ formatBoolean(retailOutput.midPerHarvest) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_有效客户">{{ formatBoolean(retailOutput.midPerEffect) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_快捷支付">{{ formatBoolean(retailOutput.midPerQuickPay) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_电费代扣">{{ formatBoolean(retailOutput.midPerEleDdc) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_水费代扣">{{ formatBoolean(retailOutput.midPerWaterDdc) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_华数费代扣">{{ formatBoolean(retailOutput.midPerHuashuDdc) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_煤气费代扣">{{ formatBoolean(retailOutput.MidPerGasDdc) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_市民卡">{{ formatBoolean(retailOutput.midPerCitizencard) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_理财业务">{{ formatBoolean(retailOutput.midPerFinMan) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_个人_etc">{{ formatBoolean(retailOutput.midPerEtc) }}</el-descriptions-item>
<el-descriptions-item label="BP_中间业务"><span class="bp-value">{{ retailOutput.bpMid || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_关联度"><span class="total-bp-value">{{ retailOutput.totalBpRelevance || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">贷款特征</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="申请金额">{{ retailOutput.applyAmt || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_贷款额度"><span class="bp-value">{{ retailOutput.bpLoanAmount || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="贷款用途">{{ formatLoanPurpose(retailOutput.loanPurpose) }}</el-descriptions-item>
<el-descriptions-item label="是否有经营佐证">{{ formatBoolean(retailOutput.bizProof) }}</el-descriptions-item>
<el-descriptions-item label="BP_贷款用途"><span class="bp-value">{{ retailOutput.bpLoanUse || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="循环功能">{{ formatBoolean(retailOutput.loanLoop) }}</el-descriptions-item>
<el-descriptions-item label="BP_循环功能"><span class="bp-value">{{ retailOutput.bpLoanLoop || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="抵质押类型">{{ retailOutput.collType || '-' }}</el-descriptions-item>
<el-descriptions-item label="抵质押物三方所有">{{ formatBoolean(retailOutput.collThirdParty) }}</el-descriptions-item>
<el-descriptions-item label="BP_抵押物"><span class="bp-value">{{ retailOutput.bpCollateral || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">风险度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="灰名单客户">{{ formatBoolean(retailOutput.greyCust) }}</el-descriptions-item>
<el-descriptions-item label="本金逾期">{{ formatBoolean(retailOutput.prinOverdue) }}</el-descriptions-item>
<el-descriptions-item label="利息逾期">{{ formatBoolean(retailOutput.interestOverdue) }}</el-descriptions-item>
<el-descriptions-item label="信用卡逾期">{{ formatBoolean(retailOutput.cardOverdue) }}</el-descriptions-item>
<el-descriptions-item label="BP_灰名单与逾期"><span class="bp-value">{{ retailOutput.bpGreyOverdue || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_风险度"><span class="total-bp-value">{{ retailOutput.totalBpRisk || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
</template>
<!-- 企业客户模型输出 -->
@@ -116,6 +101,76 @@
</el-descriptions>
</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 corporateLoyaltyRows" :key="`corporate-loyalty-${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 :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 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>
</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 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 :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">
<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 corporateRiskRows" :key="`corporate-risk-${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 :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>
<el-descriptions :column="2" border size="small">
@@ -128,81 +183,6 @@
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">忠诚度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="我行首贷客户">{{ formatBoolean(corpOutput.isFirstLoan) }}</el-descriptions-item>
<el-descriptions-item label="用信天数">{{ corpOutput.faithDay || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_首贷"><span class="bp-value">{{ corpOutput.bpFirstLoan || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="BP_贷龄"><span class="bp-value">{{ corpOutput.bpAgeLoan || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_忠诚度" :span="2"><span class="total-bp-value">{{ corpOutput.totalBpLoyalty || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">贡献度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="存款年日均">{{ corpOutput.balanceAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="贷款年日均">{{ corpOutput.loanAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ formatRate(corpOutput.derivationRate) }}</el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_贡献度"><span class="total-bp-value">{{ corpOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">关联度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="中间业务_企业_企业互联">{{ formatBoolean(corpOutput.midEntConnect) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_有效价值客户">{{ formatBoolean(corpOutput.midEntEffect) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_国际业务">{{ formatBoolean(corpOutput.midEntInter) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_承兑">{{ formatBoolean(corpOutput.midEntAccept) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_贴现">{{ formatBoolean(corpOutput.midEntDiscount) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_电费代扣">{{ formatBoolean(corpOutput.midEntEleDdc) }}</el-descriptions-item>
<el-descriptions-item label="中间业务_企业_水费代扣">{{ formatBoolean(corpOutput.midEntWaterDdc) }}</el-descriptions-item>
<el-descriptions-item label="BP_中间业务"><span class="bp-value">{{ corpOutput.bpMid || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="代发工资户数">{{ corpOutput.payroll || '-' }}</el-descriptions-item>
<el-descriptions-item label="存量贷款余额">{{ corpOutput.invLoanAmount || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_代发工资"><span class="bp-value">{{ corpOutput.bpPayroll || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_关联度"><span class="total-bp-value">{{ corpOutput.totalBpRelevance || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">企业类别</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="净身企业">{{ formatBoolean(corpOutput.isCleanEnt) }}</el-descriptions-item>
<el-descriptions-item label="开立基本结算账户">{{ formatBoolean(corpOutput.hasSettleAcct) }}</el-descriptions-item>
<el-descriptions-item label="绿色贷款">{{ formatBoolean(corpOutput.isGreenLoan) }}</el-descriptions-item>
<el-descriptions-item label="科技型企业">{{ formatBoolean(corpOutput.isTechEnt) }}</el-descriptions-item>
<el-descriptions-item label="贸易和建筑业企业">{{ formatBoolean(corpOutput.isTradeBuildEnt) }}</el-descriptions-item>
<el-descriptions-item label="BP_企业客户类别"><span class="bp-value">{{ corpOutput.bpEntType || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">贷款特征</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="借款期限">{{ corpOutput.loanTerm || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_贷款期限"><span class="bp-value">{{ corpOutput.bpLoanTerm || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="申请金额">{{ corpOutput.applyAmt || '-' }}</el-descriptions-item>
<el-descriptions-item label="BP_贷款额度"><span class="bp-value">{{ corpOutput.bpLoanAmount || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="抵质押类型">{{ corpOutput.collType || '-' }}</el-descriptions-item>
<el-descriptions-item label="抵质押物三方所有">{{ formatBoolean(corpOutput.collThirdParty) }}</el-descriptions-item>
<el-descriptions-item label="BP_抵押物"><span class="bp-value">{{ corpOutput.bpCollateral || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
<div class="output-section">
<h4 class="section-title">风险度分析</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="灰名单客户">{{ formatBoolean(corpOutput.greyCust) }}</el-descriptions-item>
<el-descriptions-item label="本金逾期">{{ formatBoolean(corpOutput.prinOverdue) }}</el-descriptions-item>
<el-descriptions-item label="利息逾期">{{ formatBoolean(corpOutput.interestOverdue) }}</el-descriptions-item>
<el-descriptions-item label="BP_灰名单与逾期"><span class="bp-value">{{ corpOutput.bpGreyOverdue || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_风险度"><span class="total-bp-value">{{ corpOutput.totalBpRisk || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
</template>
</div>
</el-card>
@@ -227,8 +207,134 @@ export default {
default: null
}
},
computed: {
retailLoyaltyRows() {
return [
this.analysisRow('我行首贷客户', this.formatBoolean(this.retailOutput.isFirstLoan), 'BP_首贷', this.retailOutput.bpFirstLoan),
this.analysisRow('用信天数', this.retailOutput.faithDay, 'BP_贷龄', this.retailOutput.bpAgeLoan),
this.analysisRow('客户年龄', this.retailOutput.custAge, 'BP_年龄', this.retailOutput.bpAge),
this.totalRow('TOTAL_BP_忠诚度', this.retailOutput.totalBpLoyalty)
]
},
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)]
},
retailRelevanceRows() {
return [
this.groupedAnalysisRow([
this.resultItem('中间业务_个人_信用卡', this.formatBoolean(this.retailOutput.midPerCard)),
this.resultItem('中间业务_个人_一码通', this.formatBoolean(this.retailOutput.midPerPass)),
this.resultItem('中间业务_个人_丰收互联', this.formatBoolean(this.retailOutput.midPerHarvest)),
this.resultItem('中间业务_个人_有效客户', this.formatBoolean(this.retailOutput.midPerEffect)),
this.resultItem('中间业务_个人_快捷支付', this.formatBoolean(this.retailOutput.midPerQuickPay)),
this.resultItem('中间业务_个人_电费代扣', this.formatBoolean(this.retailOutput.midPerEleDdc)),
this.resultItem('中间业务_个人_水费代扣', this.formatBoolean(this.retailOutput.midPerWaterDdc)),
this.resultItem('中间业务_个人_华数费代扣', this.formatBoolean(this.retailOutput.midPerHuashuDdc)),
this.resultItem('中间业务_个人_煤气费代扣', this.formatBoolean(this.retailOutput.MidPerGasDdc)),
this.resultItem('中间业务_个人_市民卡', this.formatBoolean(this.retailOutput.midPerCitizencard)),
this.resultItem('中间业务_个人_理财业务', this.formatBoolean(this.retailOutput.midPerFinMan)),
this.resultItem('中间业务_个人_etc', this.formatBoolean(this.retailOutput.midPerEtc))
], 'BP_中间业务', this.retailOutput.bpMid),
this.totalRow('TOTAL_BP_关联度', this.retailOutput.totalBpRelevance)
]
},
retailRiskRows() {
return [
this.analysisRow('申请金额', this.retailOutput.applyAmt, 'BP_贷款额度', this.retailOutput.bpLoanAmount),
this.groupedAnalysisRow([
this.resultItem('贷款用途', this.formatLoanPurpose(this.retailOutput.loanPurpose)),
this.resultItem('是否有经营佐证', this.formatBoolean(this.retailOutput.bizProof))
], 'BP_贷款用途', this.retailOutput.bpLoanUse),
this.analysisRow('循环功能', this.formatBoolean(this.retailOutput.loanLoop), 'BP_循环功能', this.retailOutput.bpLoanLoop),
this.groupedAnalysisRow([
this.resultItem('抵质押类型', this.retailOutput.collType),
this.resultItem('抵质押物三方所有', this.formatBoolean(this.retailOutput.collThirdParty))
], 'BP_抵押物', this.retailOutput.bpCollateral),
this.groupedAnalysisRow([
this.resultItem('灰名单客户', this.formatBoolean(this.retailOutput.greyCust)),
this.resultItem('本金逾期', this.formatBoolean(this.retailOutput.prinOverdue)),
this.resultItem('利息逾期', this.formatBoolean(this.retailOutput.interestOverdue)),
this.resultItem('信用卡逾期', this.formatBoolean(this.retailOutput.cardOverdue))
], 'BP_灰名单与逾期', this.retailOutput.bpGreyOverdue),
this.totalRow('TOTAL_BP_风险度', this.retailOutput.totalBpRisk)
]
},
corporateLoyaltyRows() {
return [
this.analysisRow('我行首贷客户', this.formatBoolean(this.corpOutput.isFirstLoan), 'BP_首贷', this.corpOutput.bpFirstLoan),
this.analysisRow('用信天数', this.corpOutput.faithDay, 'BP_贷龄', this.corpOutput.bpAgeLoan),
this.totalRow('TOTAL_BP_忠诚度', this.corpOutput.totalBpLoyalty)
]
},
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)]
},
corporateRelevanceRows() {
return [
this.groupedAnalysisRow([
this.resultItem('中间业务_企业_企业互联', this.formatBoolean(this.corpOutput.midEntConnect)),
this.resultItem('中间业务_企业_有效价值客户', this.formatBoolean(this.corpOutput.midEntEffect)),
this.resultItem('中间业务_企业_国际业务', this.formatBoolean(this.corpOutput.midEntInter)),
this.resultItem('中间业务_企业_承兑', this.formatBoolean(this.corpOutput.midEntAccept)),
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),
this.groupedAnalysisRow([
this.resultItem('代发工资户数', this.corpOutput.payroll),
this.resultItem('存量贷款余额', this.corpOutput.invLoanAmount)
], 'BP_代发工资', this.corpOutput.bpPayroll),
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),
this.analysisRow('申请金额', this.corpOutput.applyAmt, 'BP_贷款额度', this.corpOutput.bpLoanAmount),
this.groupedAnalysisRow([
this.resultItem('抵质押类型', this.corpOutput.collType),
this.resultItem('抵质押物三方所有', this.formatBoolean(this.corpOutput.collThirdParty))
], 'BP_抵押物', this.corpOutput.bpCollateral),
this.groupedAnalysisRow([
this.resultItem('灰名单客户', this.formatBoolean(this.corpOutput.greyCust)),
this.resultItem('本金逾期', this.formatBoolean(this.corpOutput.prinOverdue)),
this.resultItem('利息逾期', this.formatBoolean(this.corpOutput.interestOverdue))
], 'BP_灰名单与逾期', this.corpOutput.bpGreyOverdue),
this.totalRow('TOTAL_BP_风险度', this.corpOutput.totalBpRisk)
]
}
},
methods: {
formatRate,
resultItem(label, value) {
return {label, value: this.formatOutputValue(value)}
},
groupedAnalysisRow(results, bpLabel, bpValue, total = false) {
return {results, bpLabel, bpValue: this.formatOutputValue(bpValue), total}
},
analysisRow(resultLabel, resultValue, bpLabel, bpValue) {
return this.groupedAnalysisRow([this.resultItem(resultLabel, resultValue)], bpLabel, bpValue)
},
totalRow(bpLabel, bpValue) {
return {summary: true, bpLabel, bpValue: this.formatOutputValue(bpValue), total: true}
},
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
@@ -283,6 +389,84 @@ export default {
color: #303133;
}
.output-analysis-table {
width: 100%;
table-layout: fixed;
border-collapse: collapse;
border: 1px solid #ebeef5;
color: #606266;
font-size: 13px;
.result-column {
width: 60%;
}
.bp-column {
width: 40%;
}
th,
td {
padding: 10px 12px;
border-right: 1px solid #ebeef5;
border-bottom: 1px solid #ebeef5;
text-align: left;
vertical-align: top;
overflow-wrap: anywhere;
word-break: break-word;
}
th:last-child,
td:last-child {
border-right: 0;
}
tbody tr:last-child td {
border-bottom: 0;
}
th {
background: #f5f7fa;
color: #909399;
font-weight: 500;
}
.result-item {
display: flex;
align-items: flex-start;
justify-content: space-between;
flex-wrap: wrap;
gap: 4px 12px;
}
.result-item + .result-item {
margin-top: 6px;
padding-top: 6px;
border-top: 1px dashed #ebeef5;
}
.result-label {
min-width: 0;
color: #606266;
}
.result-value {
margin-left: auto;
color: #303133;
font-weight: 500;
text-align: right;
}
.is-total-row {
background: #fffaf0;
td:first-child {
color: #606266;
font-weight: 500;
}
}
}
// BP 值样式
.bp-value {
color: #409eff;
@@ -308,4 +492,44 @@ export default {
font-weight: 500;
}
}
@media screen and (max-width: 768px) {
.model-output-card {
::v-deep .el-card__body {
padding: 16px;
}
.output-analysis-table {
th,
td {
padding: 8px;
}
}
}
}
@media print {
.model-output-card {
break-inside: auto !important;
page-break-inside: auto !important;
.output-section {
break-inside: auto;
page-break-inside: auto;
}
.output-analysis-table {
color: #000;
thead {
display: table-header-group;
}
tr {
break-inside: avoid !important;
page-break-inside: avoid !important;
}
}
}
}
</style>