f
This commit is contained in:
148
src/ui/9B3F-在线示例留存/components/RiskAssessmentSection.vue
Normal file
148
src/ui/9B3F-在线示例留存/components/RiskAssessmentSection.vue
Normal file
@@ -0,0 +1,148 @@
|
||||
<template>
|
||||
<div class="gamma-card risk-assessment">
|
||||
<div class="gamma-grid-2" style="grid-template-columns: 1fr 2fr; gap: 24px;">
|
||||
<div class="risk-card">
|
||||
<div class="gamma-title"><span>🛡️</span> 风险评估</div>
|
||||
<div class="risk-desc">
|
||||
说明:<br>
|
||||
<span v-for="item in RISK_LEVEL_DESC" :key="item.level">
|
||||
{{ item.level }}({{ item.label }}): {{ item.desc }}<br>
|
||||
</span>
|
||||
</div>
|
||||
<div class="risk-level-circle">
|
||||
<div class="circle" :style="{ borderTopColor: levelColor }">
|
||||
<div class="circle-text">{{ riskLevel }}</div>
|
||||
</div>
|
||||
<div class="risk-level-text">风险等级</div>
|
||||
<div class="risk-stars">{{ riskStars }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="risk-card index-group">
|
||||
<div class="index-item">
|
||||
<div class="index-title">信用风险指数</div>
|
||||
<div class="index-circle">
|
||||
<div class="index-status">{{ riskScoreDisplay }}</div>
|
||||
<div class="gamma-small">{{ riskScoreUnit }}</div>
|
||||
</div>
|
||||
<div class="index-desc">信用风险评分,0-1000分,分数越高用户信用越高</div>
|
||||
</div>
|
||||
<div class="index-item">
|
||||
<div class="index-title">履约金额综合指数</div>
|
||||
<div class="index-circle">
|
||||
<div class="index-status">{{ amountIndexDisplay.value }}</div>
|
||||
<div class="gamma-small">{{ amountIndexDisplay.unit }}</div>
|
||||
</div>
|
||||
<div class="index-desc">履约金额综合指数,0-1000分,指数越大用户逾期可能性越低</div>
|
||||
</div>
|
||||
<div class="index-item">
|
||||
<div class="index-title">履约笔数综合指数</div>
|
||||
<div class="index-circle">
|
||||
<div class="index-status">{{ countIndexDisplay.value }}</div>
|
||||
<div class="gamma-small">{{ countIndexDisplay.unit }}</div>
|
||||
</div>
|
||||
<div class="index-desc">履约笔数综合指数,0-1000分,指数越大用户逾期可能性越低</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
import { RISK_LEVEL_DESC, riskLevelColor, formatComplianceIndex, riskLevelStars } from '../reportHelper';
|
||||
|
||||
const props = defineProps({
|
||||
riskLevel: { type: String, default: '—' },
|
||||
riskScore: { type: [String, Number], default: '—' },
|
||||
amountIndex: { type: [String, Number], default: '' },
|
||||
countIndex: { type: [String, Number], default: '' },
|
||||
});
|
||||
|
||||
const levelColor = computed(() => riskLevelColor(props.riskLevel));
|
||||
const riskStars = computed(() => riskLevelStars(props.riskLevel));
|
||||
|
||||
const riskScoreDisplay = computed(() => {
|
||||
if (props.riskScore === null || props.riskScore === undefined || props.riskScore === '') {
|
||||
return '未命中';
|
||||
}
|
||||
return String(props.riskScore);
|
||||
});
|
||||
|
||||
const riskScoreUnit = computed(() => (riskScoreDisplay.value === '未命中' ? '未命中' : '分'));
|
||||
|
||||
const amountIndexDisplay = computed(() => formatComplianceIndex(props.amountIndex));
|
||||
const countIndexDisplay = computed(() => formatComplianceIndex(props.countIndex));
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.risk-assessment .risk-card {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.risk-desc {
|
||||
font-size: 13px;
|
||||
color: #555;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.risk-level-circle {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.circle {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
border-radius: 50%;
|
||||
border: 4px solid #eee;
|
||||
border-top-color: #ff3333;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.circle-text {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.risk-level-text {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.risk-stars {
|
||||
margin-top: 4px;
|
||||
letter-spacing: 2px;
|
||||
color: #d4af37;
|
||||
}
|
||||
|
||||
.index-group {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.index-item { text-align: center; }
|
||||
|
||||
.index-circle {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid #eee;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 8px;
|
||||
}
|
||||
|
||||
.index-title { font-size: 14px; margin-bottom: 4px; }
|
||||
.index-status { font-size: 18px; font-weight: 600; }
|
||||
.index-desc { font-size: 12px; color: #666; margin-top: 4px; line-height: 1.4; max-width: 180px; }
|
||||
</style>
|
||||
Reference in New Issue
Block a user