正式版
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<div class="flex items-center justify-between mb-3 border border-[#DDDDDD] rounded-lg p-4 bg-[#F9F9F9]">
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/jd.png" alt="租赁风险评估概览" class="w-10 h-10 object-contain" />
|
||||
<img src="@/assets/images/report/zlfxpggl.png" alt="租赁风险评估概览" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">租赁风险评估概览</span>
|
||||
</div>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
<div class="p-2 relative">
|
||||
<div class="flex items-center justify-between mb-3 border border-[#DDDDDD] rounded-lg p-4 bg-[#F9F9F9]">
|
||||
<div class="flex items-center ">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/jd.png" alt="借贷评估概览" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/jdpggl.png" alt="借贷评估概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">借贷评估概览</span>
|
||||
</div>
|
||||
@@ -17,8 +17,8 @@
|
||||
<div v-if="loanEvaluationVerificationDetail.organLoanPerformances"
|
||||
class="border border-[#DDDDDD] mb-4 rounded-lg">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/jd2.png" alt="借贷评估概览" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/yzgz.png" alt="借贷评估概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">机构借贷表现</span>
|
||||
</div>
|
||||
@@ -60,8 +60,8 @@
|
||||
<div v-if="loanEvaluationVerificationDetail.customerLoanPerformances"
|
||||
class="border border-[#DDDDDD] mb-4 rounded-lg">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/jd2.png" alt="客户类型借贷表现" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/khlxjdbx.png" alt="客户类型借贷表现" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">客户类型借贷表现</span>
|
||||
</div>
|
||||
@@ -123,8 +123,8 @@
|
||||
<div v-if="loanEvaluationVerificationDetail.businessLoanPerformances"
|
||||
class="border border-[#DDDDDD] mb-4 rounded-lg">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ywlx.png" alt="业务类型借贷表现" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ywlxjdbx.png" alt="业务类型借贷表现" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">业务类型借贷表现</span>
|
||||
</div>
|
||||
@@ -186,8 +186,8 @@
|
||||
<!-- 异常时间段借贷表现 -->
|
||||
<div v-if="loanEvaluationVerificationDetail.timeLoanPerformances" class="border border-[#DDDDDD] mb-4 rounded-lg">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/yj.png" alt="异常时间段借贷表现" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ycsjdjdbx.png" alt="异常时间段借贷表现" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">异常时间段借贷表现</span>
|
||||
</div>
|
||||
|
||||
@@ -4,18 +4,12 @@
|
||||
|
||||
<!-- 案件概览 -->
|
||||
<div class="court-overview mb-4">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<div class="flex items-center">
|
||||
<div class="w-8 h-8 bg-purple-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">案件概览</span>
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajgl.png" alt="案件概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">案件概览</span>
|
||||
</div>
|
||||
|
||||
<!-- 案件类型统计 -->
|
||||
@@ -57,16 +51,13 @@
|
||||
<div class="space-y-4">
|
||||
<!-- 涉案公告 -->
|
||||
<div v-if="multCourtInfo.legalCases && multCourtInfo.legalCases.length > 0" class="case-section">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-6 h-6 bg-blue-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-3 h-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/sagg.png" alt="涉案公告" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">涉案公告</span>
|
||||
<span class="ml-2 px-2 py-1 bg-blue-100 text-blue-700 rounded-full text-xs font-medium">
|
||||
<span class="ml-2 px-2 py-1 bg-[#2B79EE1A] text-[#2B79EE] rounded-full text-xs font-medium">
|
||||
{{ multCourtInfo.legalCases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
@@ -125,16 +116,13 @@
|
||||
|
||||
<!-- 执行案件 -->
|
||||
<div v-if="multCourtInfo.executionCases && multCourtInfo.executionCases.length > 0" class="case-section">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-6 h-6 bg-red-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-3 h-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zxaj.png" alt="执行案件" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">执行案件</span>
|
||||
<span class="ml-2 px-2 py-1 bg-red-100 text-red-700 rounded-full text-xs font-medium">
|
||||
<span class="ml-2 px-2 py-1 bg-[#F9ECEC] text-[#EB3C3C] rounded-full text-xs font-medium">
|
||||
{{ multCourtInfo.executionCases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
@@ -174,7 +162,7 @@
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">执行金额:</span>
|
||||
<span class="value text-red-600 font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">已还款金额:</span>
|
||||
@@ -201,17 +189,13 @@
|
||||
|
||||
<!-- 失信案件 -->
|
||||
<div v-if="multCourtInfo.disinCases && multCourtInfo.disinCases.length > 0" class="case-section">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-6 h-6 bg-orange-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-3 h-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z">
|
||||
</path>
|
||||
</svg>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/sxaj.png" alt="失信案件" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">失信案件</span>
|
||||
<span class="ml-2 px-2 py-1 bg-orange-100 text-orange-700 rounded-full text-xs font-medium">
|
||||
<span class="ml-2 px-2 py-1 bg-[#FFF8E1] text-[#D6943E] rounded-full text-xs font-medium">
|
||||
{{ multCourtInfo.disinCases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
@@ -251,7 +235,7 @@
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">执行金额:</span>
|
||||
<span class="value text-red-600 font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">已还款金额:</span>
|
||||
@@ -278,17 +262,13 @@
|
||||
|
||||
<!-- 限高案件 -->
|
||||
<div v-if="multCourtInfo.limitCases && multCourtInfo.limitCases.length > 0" class="case-section">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-6 h-6 bg-purple-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-3 h-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18.364 5.636M5.636 18.364l12.728-12.728">
|
||||
</path>
|
||||
</svg>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/xgaj.png" alt="限高案件" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">限高案件</span>
|
||||
<span class="ml-2 px-2 py-1 bg-purple-100 text-purple-700 rounded-full text-xs font-medium">
|
||||
<span class="ml-2 px-2 py-1 bg-[#2B79EE1A] text-[#2B79EE] rounded-full text-xs font-medium">
|
||||
{{ multCourtInfo.limitCases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
@@ -328,7 +308,7 @@
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">执行金额:</span>
|
||||
<span class="value text-red-600 font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}元</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">已还款金额:</span>
|
||||
@@ -355,9 +335,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 温馨提示 -->
|
||||
<LRemark content="法院曝光台信息展示申请人的各类案件信息,包括涉案公告、执行案件、失信案件和限高案件。数据来源于全国法院执行信息公开网等权威司法数据库。案件状态包括审理中、执行中、已结案等,执行金额和已还款金额直接反映债务履行情况。失信和限高记录对个人信用影响较大,建议重点关注。数据更新频率依赖于司法系统,可能存在延迟。" />
|
||||
<LRemark
|
||||
content="法院曝光台信息展示申请人的各类案件信息,包括涉案公告、执行案件、失信案件和限高案件。数据来源于全国法院执行信息公开网等权威司法数据库。案件状态包括审理中、执行中、已结案等,执行金额和已还款金额直接反映债务履行情况。失信和限高记录对个人信用影响较大,建议重点关注。数据更新频率依赖于司法系统,可能存在延迟。" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@@ -420,16 +401,16 @@ const getCaseCount = (cases) => {
|
||||
|
||||
// 获取案件标识样式
|
||||
const getCaseFlagClass = (flag) => {
|
||||
if (flag === 1) return 'bg-red-50 border border-red-200'
|
||||
if (flag === 2) return 'bg-green-50 border border-green-200'
|
||||
if (flag === 1) return 'bg-[#F9ECEC] border border-[#F0CACA]'
|
||||
if (flag === 2) return 'bg-[#ECF9EF] border border-[#CAECD3]'
|
||||
return 'bg-gray-50 border border-gray-200'
|
||||
}
|
||||
|
||||
// 获取案件标识文本样式
|
||||
const getCaseFlagTextClass = (flag) => {
|
||||
if (flag === 1) return 'text-red-600'
|
||||
if (flag === 1) return 'text-[#EB3C3C]'
|
||||
if (flag === 2) return 'text-green-600'
|
||||
return 'text-gray-600'
|
||||
return 'text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取案件标识文本
|
||||
@@ -449,12 +430,12 @@ const getCaseItemClass = (caseItem) => {
|
||||
// 获取案件状态样式
|
||||
const getCaseStatusClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||
if (status === '执行中') return 'text-orange-600 bg-orange-100'
|
||||
if (status === '未执行') return 'text-red-600 bg-red-100'
|
||||
if (status === '审理中') return 'text-blue-600 bg-blue-100'
|
||||
if (status === '失信中') return 'text-red-600 bg-red-100'
|
||||
if (status === '限高中') return 'text-purple-600 bg-purple-100'
|
||||
return 'text-gray-600 bg-gray-100'
|
||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
return 'text-[#666666] bg-gray-100'
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -467,7 +448,7 @@ const getCaseStatusClass = (status) => {
|
||||
|
||||
.case-number {
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
color: #333333;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@@ -489,13 +470,13 @@ const getCaseStatusClass = (status) => {
|
||||
padding: 4px 0;
|
||||
|
||||
.label {
|
||||
color: #6b7280;
|
||||
color: #666666;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #374151;
|
||||
color: #333333;
|
||||
font-size: 13px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
@@ -511,18 +492,15 @@ const getCaseStatusClass = (status) => {
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
|
||||
&.case-item-settled {
|
||||
border: 1px solid #d1fae5;
|
||||
background-color: #f0fdf4;
|
||||
}
|
||||
&.case-item-settled {}
|
||||
|
||||
&.case-item-executing {
|
||||
border: 1px solid #fed7aa;
|
||||
background-color: #fff7ed;
|
||||
border: 1px solid #FFE082;
|
||||
background-color: #FFF8E1;
|
||||
}
|
||||
|
||||
&.case-item-default {
|
||||
border: 1px solid #e5e7eb;
|
||||
border: 1px solid #DDDDDD;
|
||||
background-color: #f9fafb;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
<div class="bg-white rounded-lg border border-[#EB3C3C33] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/yqfx.png" alt="风险标识" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/fxbs.png" alt="风险标识" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">风险标识</span>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="flex items-center justify-between mb-3 p-4 ">
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/gl.png" alt="关联风险监督" class="w-10 h-10 object-contain" />
|
||||
<img src="@/assets/images/report/glfxjd.png" alt="关联风险监督" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-bold text-lg text-[#333333]">关联风险监督</div>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
{{ getElementVerificationRisks().length }}条风险
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>w'w'w'w'w'w'w'w'w'w
|
||||
<div class="risk-list">
|
||||
<div v-for="risk in getElementVerificationRisks()" :key="risk.key" class="risk-item">
|
||||
<div class="flex items-center justify-between">
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
<div class="text-center">
|
||||
<div class="text-sm text-[#666666] mb-1">总风险点</div>
|
||||
<div class="text-lg font-bold text-[#E53935]">{{ riskWarning.totalRiskCounts || 0 }}条</div>
|
||||
<div class="text-lg font-bold text-[#E53935]">{{ riskWarning.value?.totalRiskCounts || 0 }}条</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
@@ -44,7 +44,7 @@
|
||||
<!-- 要素核查 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('element')">
|
||||
<div v-if="getElementVerificationRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('element'))]">
|
||||
{{ getElementVerificationRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -59,17 +59,21 @@
|
||||
|
||||
<div v-if="getElementVerificationRisks().length > 0"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
高风险
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(getElementVerificationRisks()[0])]">
|
||||
{{ getElementVerificationRisks()[0]?.level || '高风险' }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(getElementVerificationRisks()[0])"
|
||||
:alt="getElementVerificationRisks()[0]?.level || '高风险'" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="font-bold text-[#333333]">{{ getElementVerificationRisks()[0]?.description || '检测到风险' }}
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ getElementVerificationRisks()[0]?.description ||
|
||||
'检测到风险' }}
|
||||
</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ getElementVerificationRisks()[0]?.detail || '该模块检测到风险' }}
|
||||
</div>
|
||||
<div class="text-sm text-[#999999]">{{ getElementVerificationRisks()[0]?.detail || '该模块检测到风险' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -90,7 +94,7 @@
|
||||
<!-- 运营商核验 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('operator')">
|
||||
<div v-if="getOperatorVerificationRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('operator'))]">
|
||||
{{ getOperatorVerificationRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -105,17 +109,21 @@
|
||||
|
||||
<div v-if="getOperatorVerificationRisks().length > 0"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
高风险
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(getOperatorVerificationRisks()[0])]">
|
||||
{{ getOperatorVerificationRisks()[0]?.level || '高风险' }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/zfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(getOperatorVerificationRisks()[0])"
|
||||
:alt="getOperatorVerificationRisks()[0]?.level || '高风险'" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="font-bold text-[#333333]">{{ getOperatorVerificationRisks()[0]?.description || '手机在网状态为风险号'
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ getOperatorVerificationRisks()[0]?.description ||
|
||||
'手机在网状态为风险号'
|
||||
}}</div>
|
||||
<div class="text-sm text-[#999999]">{{ getOperatorVerificationRisks()[0]?.detail || '手机号状态异常,存在风险' }}
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ getOperatorVerificationRisks()[0]?.detail ||
|
||||
'手机号状态异常,存在风险' }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -137,7 +145,7 @@
|
||||
<!-- 公安重点人员核验 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('police')">
|
||||
<div v-if="getPoliceVerificationRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('police'))]">
|
||||
{{ getPoliceVerificationRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -151,7 +159,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 风险等级显示 -->
|
||||
<div v-if="riskWarning.level" class="mb-3">
|
||||
<div v-if="riskWarning.value?.level" class="mb-3">
|
||||
<div class="bg-gray-50 rounded-lg p-3 border border-gray-200">
|
||||
<div class="flex items-center mb-2">
|
||||
<div class="w-10 h-10 flex items-center justify-center mr-3">
|
||||
@@ -159,11 +167,15 @@
|
||||
</div>
|
||||
<span class="font-bold text-lg text-gray-800">风险等级</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<span v-for="level in getRiskLevels()" :key="level"
|
||||
class="px-3 py-1 rounded-md text-sm font-medium bg-yellow-50 text-yellow-700 border border-yellow-200">
|
||||
{{ getRiskLevelText(level) }}
|
||||
</span>
|
||||
<div class="space-y-2">
|
||||
<div v-for="level in getRiskLevels()" :key="level"
|
||||
class="flex flex-col gap-1 p-3 bg-white rounded-lg border border-gray-200">
|
||||
<div class="flex items-center gap-2">
|
||||
<span :class="['px-2 py-1 rounded text-xs font-bold', getRiskLevelTagClass(level)]">{{ level
|
||||
}}</span>
|
||||
<span class="text-sm font-medium text-[#333333]">{{ getRiskLevelText(level) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -172,16 +184,17 @@
|
||||
<div v-if="getPoliceVerificationRisks().length > 0" class="space-y-2">
|
||||
<div v-for="risk in getPoliceVerificationRisks()" :key="risk.key"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-lg rounded-tr-lg">
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(risk)]">
|
||||
{{ risk.level }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(risk)" :alt="risk.level" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1 pr-16">
|
||||
<div class="font-bold text-[#333333]">{{ risk.description }}</div>
|
||||
<div class="text-sm text-[#999999]">{{ risk.detail }}</div>
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ risk.description }}</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ risk.detail }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -202,7 +215,7 @@
|
||||
<!-- 逾期风险 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('overdue')">
|
||||
<div v-if="getOverdueRiskRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('overdue'))]">
|
||||
{{ getOverdueRiskRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -218,16 +231,17 @@
|
||||
<div v-if="getOverdueRiskRisks().length > 0" class="space-y-2">
|
||||
<div v-for="risk in getOverdueRiskRisks()" :key="risk.key"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-lg rounded-tr-lg">
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(risk)]">
|
||||
{{ risk.level }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(risk)" :alt="risk.level" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1 pr-16">
|
||||
<div class="font-bold text-[#333333]">{{ risk.description }}</div>
|
||||
<div class="text-sm text-[#999999]">{{ risk.detail }}</div>
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ risk.description }}</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ risk.detail }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -247,57 +261,56 @@
|
||||
</div>
|
||||
|
||||
<!-- 法院曝光台信息 -->
|
||||
<!-- <div class="risk-module-card" :class="getModuleCardClass('court')">
|
||||
<div class="module-header">
|
||||
<div class="module-icon bg-purple-500">
|
||||
<svg class="w-5 h-5 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z">
|
||||
</path>
|
||||
</svg>
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('court')">
|
||||
<div v-if="getCourtRiskRisks().length > 0"
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('court'))]">
|
||||
{{ getCourtRiskRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-12 h-12">
|
||||
<img :src="courtIconPath" alt="法院曝光台信息" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="module-info">
|
||||
<h4 class="module-title">法院曝光台信息</h4>
|
||||
<p class="module-desc">民事、刑事、行政案件等司法记录</p>
|
||||
</div>
|
||||
<div class="module-status">
|
||||
<span class="status-badge" :class="getModuleStatusClass('court')">
|
||||
{{ getCourtRiskRisks().length }}条风险
|
||||
</span>
|
||||
<div class="flex-1">
|
||||
<h4 class="font-bold text-lg text-[#333333]">法院曝光台信息</h4>
|
||||
<p class="text-sm text-[#999999]">民事、刑事、行政案件等司法记录</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="module-content" v-if="getCourtRiskRisks().length > 0">
|
||||
<div class="risk-list">
|
||||
<div v-for="risk in getCourtRiskRisks()" :key="risk.key" class="risk-item">
|
||||
<div class="risk-indicator" :class="getRiskLevelClass(risk.level)"></div>
|
||||
<div class="risk-details">
|
||||
<div class="risk-title">{{ risk.description }}</div>
|
||||
<div class="risk-desc">{{ risk.detail }}</div>
|
||||
<div v-if="getCourtRiskRisks().length > 0" class="space-y-2">
|
||||
<div v-for="risk in getCourtRiskRisks()" :key="risk.key"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(risk)]">
|
||||
{{ risk.level }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(risk)" :alt="risk.level" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="risk-level" :class="getRiskLevelClass(risk.level)">
|
||||
{{ risk.level }}
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ risk.description }}</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ risk.detail }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="no-risk-content">
|
||||
<div class="no-risk-icon">
|
||||
<svg class="w-8 h-8 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="no-risk-text">
|
||||
<div class="text-sm font-medium text-green-600">暂无风险</div>
|
||||
<div class="text-xs text-gray-500">该模块未检测到风险</div>
|
||||
<div v-else class="bg-[#F0FFF0] border border-green-200 rounded-lg p-4">
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img :src="safeIconPath" alt="暂无风险" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="font-bold text-[#333333]">暂无风险</div>
|
||||
<div class="text-sm text-[#999999]">该模块未检测到风险</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
|
||||
<!-- 借贷评估 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('loan')">
|
||||
<div v-if="getLoanEvaluationRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('loan'))]">
|
||||
{{ getLoanEvaluationRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -313,16 +326,17 @@
|
||||
<div v-if="getLoanEvaluationRisks().length > 0" class="space-y-2">
|
||||
<div v-for="risk in getLoanEvaluationRisks()" :key="risk.key"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-lg rounded-tr-lg">
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(risk)]">
|
||||
{{ risk.level }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(risk)" :alt="risk.level" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1 pr-16">
|
||||
<div class="font-bold text-[#333333]">{{ risk.description }}</div>
|
||||
<div class="text-sm text-[#999999]">{{ risk.detail }}</div>
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ risk.description }}</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ risk.detail }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -344,7 +358,7 @@
|
||||
<!-- 租赁风险评估 -->
|
||||
<div class="risk-module-card relative" :class="getModuleCardClass('leasing')">
|
||||
<div v-if="getLeasingRiskRisks().length > 0"
|
||||
class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-xl rounded-tr-xl">
|
||||
:class="['absolute top-0 right-0 px-2 py-1 text-xs text-white rounded-bl-xl rounded-tr-xl', getRiskBadgeBgColor(getModuleHighestRiskLevel('leasing'))]">
|
||||
{{ getLeasingRiskRisks().length }}条风险
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
@@ -360,16 +374,17 @@
|
||||
<div v-if="getLeasingRiskRisks().length > 0" class="space-y-2">
|
||||
<div v-for="risk in getLeasingRiskRisks()" :key="risk.key"
|
||||
class="bg-[#FFF0F0] border border-red-200 rounded-lg p-4 relative">
|
||||
<div class="absolute top-0 right-0 px-2 py-1 text-xs text-white bg-[#E53935] rounded-bl-lg rounded-tr-lg">
|
||||
<div
|
||||
:class="['absolute top-0 right-0 px-1.5 py-0.5 text-xs text-white rounded-bl-lg rounded-tr-lg', getRiskBadgeColor(risk)]">
|
||||
{{ risk.level }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-10 h-10 mr-4">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
<div class="w-8 h-8 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon(risk)" :alt="risk.level" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="flex-1 pr-16">
|
||||
<div class="font-bold text-[#333333]">{{ risk.description }}</div>
|
||||
<div class="text-sm text-[#999999]">{{ risk.detail }}</div>
|
||||
<div class="flex-1 pr-12">
|
||||
<div class="font-bold text-[#333333] text-sm">{{ risk.description }}</div>
|
||||
<div class="text-xs text-[#999999] mt-0.5">{{ risk.detail }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -411,6 +426,20 @@ import {
|
||||
formatVerificationResult
|
||||
} from '@/ui/CDWBG8B4D/utils/intervalFormatter.js'
|
||||
|
||||
// 导入风险类型图标
|
||||
import iconZfx from '@/assets/images/report/zfx.png'
|
||||
import iconGfx from '@/assets/images/report/gfx.png'
|
||||
|
||||
// 图标路径
|
||||
const courtIconPath = new URL('@/assets/images/report/fybgt.png', import.meta.url).href
|
||||
const safeIconPath = new URL('@/assets/images/report/zq.png', import.meta.url).href
|
||||
|
||||
// 风险类型图标映射
|
||||
const riskTypeIcons = {
|
||||
'zfx.png': iconZfx,
|
||||
'gfx.png': iconGfx
|
||||
}
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
@@ -431,7 +460,7 @@ const props = defineProps({
|
||||
})
|
||||
|
||||
// 从data中解构出riskWarning
|
||||
const riskWarning = computed(() => props.data?.riskWarning || {});
|
||||
const riskWarning = computed(() => (props.data && props.data.riskWarning) ? props.data.riskWarning : {});
|
||||
|
||||
// 格式化时间
|
||||
const formatTime = (timestamp) => {
|
||||
@@ -442,8 +471,8 @@ const formatTime = (timestamp) => {
|
||||
|
||||
// 风险等级相关函数
|
||||
const getRiskLevels = () => {
|
||||
if (!riskWarning.level) return []
|
||||
return riskWarning.level.split(',').map(level => level.trim()).filter(level => level)
|
||||
if (!riskWarning.value?.level) return []
|
||||
return riskWarning.value.level.split(',').map(level => level.trim()).filter(level => level)
|
||||
}
|
||||
|
||||
const getRiskLevelText = (level) => {
|
||||
@@ -468,6 +497,90 @@ const getRiskLevelClass = (level) => {
|
||||
return 'bg-gray-100 text-gray-700 border-gray-200'
|
||||
}
|
||||
|
||||
// 根据风险等级获取对应的图标路径
|
||||
const getRiskIconPath = (level) => {
|
||||
if (level === '高风险') {
|
||||
return new URL('@/assets/images/report/gfx.png', import.meta.url).href
|
||||
} else if (level === '中风险') {
|
||||
return new URL('@/assets/images/report/zfx.png', import.meta.url).href
|
||||
}
|
||||
return new URL('@/assets/images/report/zfx.png', import.meta.url).href // 默认使用中风险图标
|
||||
}
|
||||
|
||||
// 根据风险等级获取对应的背景色
|
||||
const getRiskBadgeBgColor = (level) => {
|
||||
if (level === '高风险') {
|
||||
return 'bg-[#E53935]'
|
||||
} else if (level === '中风险') {
|
||||
return 'bg-[#D6943E]'
|
||||
}
|
||||
return 'bg-[#D6943E]' // 默认使用中风险颜色
|
||||
}
|
||||
|
||||
// 根据风险代码获取对应的图标和背景色
|
||||
const getRiskTypeConfig = (levelCode) => {
|
||||
if (!levelCode) return { icon: 'zfx.png', bgColor: 'bg-[#D6943E]' }
|
||||
|
||||
// A类:红色系
|
||||
if (levelCode.startsWith('A')) {
|
||||
return { icon: 'gfx.png', bgColor: 'bg-[#E53935]' }
|
||||
}
|
||||
// B类:橙色系
|
||||
if (levelCode.startsWith('B')) {
|
||||
return { icon: 'zfx.png', bgColor: 'bg-[#D6943E]' }
|
||||
}
|
||||
// C类:黄色系
|
||||
if (levelCode.startsWith('C')) {
|
||||
return { icon: 'zfx.png', bgColor: 'bg-[#D6943E]' }
|
||||
}
|
||||
// D类:紫色系
|
||||
if (levelCode.startsWith('D')) {
|
||||
return { icon: 'gfx.png', bgColor: 'bg-[#E53935]' }
|
||||
}
|
||||
// E类:蓝色系
|
||||
if (levelCode.startsWith('E')) {
|
||||
return { icon: 'zfx.png', bgColor: 'bg-[#D6943E]' }
|
||||
}
|
||||
// F类:灰色系
|
||||
if (levelCode.startsWith('F')) {
|
||||
return { icon: 'zfx.png', bgColor: 'bg-[#999999]' }
|
||||
}
|
||||
|
||||
return { icon: 'zfx.png', bgColor: 'bg-[#D6943E]' }
|
||||
}
|
||||
|
||||
// 获取风险图标路径(根据 risk 对象)
|
||||
const getRiskIcon = (risk) => {
|
||||
// 优先根据风险等级(高风险/中风险)来决定图标
|
||||
if (risk?.level === '高风险') {
|
||||
return iconGfx
|
||||
} else if (risk?.level === '中风险') {
|
||||
return iconZfx
|
||||
}
|
||||
// 如果没有level,使用levelCode来判断
|
||||
if (risk?.levelCode) {
|
||||
const config = getRiskTypeConfig(risk.levelCode)
|
||||
return riskTypeIcons[config.icon] || iconZfx
|
||||
}
|
||||
return iconZfx
|
||||
}
|
||||
|
||||
// 获取风险标签颜色(根据 risk 对象)
|
||||
const getRiskBadgeColor = (risk) => {
|
||||
// 优先根据风险等级(高风险/中风险)来决定背景色
|
||||
if (risk?.level === '高风险') {
|
||||
return 'bg-[#E53935]'
|
||||
} else if (risk?.level === '中风险') {
|
||||
return 'bg-[#D6943E]'
|
||||
}
|
||||
// 如果没有level,使用levelCode来判断
|
||||
if (risk?.levelCode) {
|
||||
const config = getRiskTypeConfig(risk.levelCode)
|
||||
return config.bgColor
|
||||
}
|
||||
return 'bg-[#D6943E]'
|
||||
}
|
||||
|
||||
// 模块卡片样式
|
||||
const getModuleCardClass = (module) => {
|
||||
const riskCount = getModuleRiskCount(module)
|
||||
@@ -504,6 +617,36 @@ const getModuleRiskCount = (module) => {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取模块的风险列表
|
||||
const getModuleRisks = (moduleType) => {
|
||||
switch (moduleType) {
|
||||
case 'element':
|
||||
return getElementVerificationRisks()
|
||||
case 'operator':
|
||||
return getOperatorVerificationRisks()
|
||||
case 'police':
|
||||
return getPoliceVerificationRisks()
|
||||
case 'overdue':
|
||||
return getOverdueRiskRisks()
|
||||
case 'court':
|
||||
return getCourtRiskRisks()
|
||||
case 'loan':
|
||||
return getLoanEvaluationRisks()
|
||||
case 'leasing':
|
||||
return getLeasingRiskRisks()
|
||||
default:
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
// 获取模块的最高风险等级
|
||||
const getModuleHighestRiskLevel = (moduleType) => {
|
||||
const risks = getModuleRisks(moduleType)
|
||||
if (risks.length === 0) return '中风险'
|
||||
const hasHighRisk = risks.some(risk => risk.level === '高风险')
|
||||
return hasHighRisk ? '高风险' : '中风险'
|
||||
}
|
||||
|
||||
// 获取高风险数量
|
||||
const getHighRiskCount = () => {
|
||||
const highRiskFields = [
|
||||
@@ -518,7 +661,7 @@ const getHighRiskCount = () => {
|
||||
]
|
||||
|
||||
return highRiskFields.reduce((count, field) => {
|
||||
return count + (riskWarning[field] || 0)
|
||||
return count + (riskWarning.value[field] || 0)
|
||||
}, 0)
|
||||
}
|
||||
|
||||
@@ -531,7 +674,7 @@ const getMiddleRiskCount = () => {
|
||||
]
|
||||
|
||||
return middleRiskFields.reduce((count, field) => {
|
||||
return count + (riskWarning[field] || 0)
|
||||
return count + (riskWarning.value[field] || 0)
|
||||
}, 0)
|
||||
}
|
||||
|
||||
@@ -539,7 +682,7 @@ const getMiddleRiskCount = () => {
|
||||
const getElementVerificationRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.idCardTwoElementMismatch) {
|
||||
if (riskWarning.value.idCardTwoElementMismatch) {
|
||||
risks.push({
|
||||
key: 'idCardTwoElementMismatch',
|
||||
description: '身份证二要素信息对比结果不一致',
|
||||
@@ -548,7 +691,7 @@ const getElementVerificationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.phoneThreeElementMismatch) {
|
||||
if (riskWarning.value.phoneThreeElementMismatch) {
|
||||
risks.push({
|
||||
key: 'phoneThreeElementMismatch',
|
||||
description: '手机三要素简版不一致',
|
||||
@@ -564,7 +707,7 @@ const getElementVerificationRisks = () => {
|
||||
const getOperatorVerificationRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.shortPhoneDuration) {
|
||||
if (riskWarning.value.shortPhoneDuration) {
|
||||
risks.push({
|
||||
key: 'shortPhoneDuration',
|
||||
description: '手机在网时长极短',
|
||||
@@ -573,7 +716,7 @@ const getOperatorVerificationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.shortPhoneDurationSlight) {
|
||||
if (riskWarning.value.shortPhoneDurationSlight) {
|
||||
risks.push({
|
||||
key: 'shortPhoneDurationSlight',
|
||||
description: '手机在网时长较短',
|
||||
@@ -582,7 +725,7 @@ const getOperatorVerificationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.idCardPhoneProvinceMismatch) {
|
||||
if (riskWarning.value.idCardPhoneProvinceMismatch) {
|
||||
risks.push({
|
||||
key: 'idCardPhoneProvinceMismatch',
|
||||
description: '身份证号手机号归属省不一致',
|
||||
@@ -591,7 +734,7 @@ const getOperatorVerificationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.noPhoneDuration) {
|
||||
if (riskWarning.value.noPhoneDuration) {
|
||||
risks.push({
|
||||
key: 'noPhoneDuration',
|
||||
description: '手机在网状态为风险号',
|
||||
@@ -603,63 +746,48 @@ const getOperatorVerificationRisks = () => {
|
||||
return risks
|
||||
}
|
||||
|
||||
// 根据 level 字段生成风险项
|
||||
const getLevelBasedRisks = () => {
|
||||
const risks = []
|
||||
const levels = riskWarning.value?.level
|
||||
|
||||
if (!levels) return risks
|
||||
|
||||
const levelList = levels.split(',').map(l => l.trim()).filter(l => l && l !== '0' && l !== 'B3')
|
||||
|
||||
// 获取统计数据,确定整体风险等级
|
||||
const highCounts = riskWarning.value.gazdyrhyRiskHighCounts || 0
|
||||
const middleCounts = riskWarning.value.gazdyrhyRiskMiddleCounts || 0
|
||||
|
||||
// 根据统计数据判断整体风险等级
|
||||
// 如果有高风险,整体显示为高风险;如果只有中风险,整体显示为中风险
|
||||
let overallRiskLevel = '高风险'
|
||||
if (highCounts > 0) {
|
||||
overallRiskLevel = '高风险'
|
||||
} else if (middleCounts > 0 && highCounts === 0) {
|
||||
overallRiskLevel = '中风险'
|
||||
}
|
||||
|
||||
levelList.forEach((level, index) => {
|
||||
const levelDescription = getRiskLevelText(level)
|
||||
risks.push({
|
||||
key: `level_${level}_${index}`,
|
||||
description: `命中${levelDescription}`,
|
||||
detail: levelDescription,
|
||||
level: overallRiskLevel,
|
||||
levelCode: level
|
||||
})
|
||||
})
|
||||
|
||||
return risks
|
||||
}
|
||||
|
||||
// 公安重点人员核验风险
|
||||
const getPoliceVerificationRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.hasCriminalRecord) {
|
||||
risks.push({
|
||||
key: 'hasCriminalRecord',
|
||||
description: '该用户有前科',
|
||||
detail: '用户存在犯罪前科记录',
|
||||
level: '高风险'
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.isEconomyFront) {
|
||||
risks.push({
|
||||
key: 'isEconomyFront',
|
||||
description: '该用户有经济类前科',
|
||||
detail: '用户存在经济类犯罪前科',
|
||||
level: '高风险'
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.isDisrupSocial) {
|
||||
risks.push({
|
||||
key: 'isDisrupSocial',
|
||||
description: '该用户有妨害社会管理秩序',
|
||||
detail: '用户存在妨害社会管理秩序记录',
|
||||
level: '高风险'
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.isKeyPerson) {
|
||||
risks.push({
|
||||
key: 'isKeyPerson',
|
||||
description: '该用户为重点人员',
|
||||
detail: '用户被列为重点监管人员',
|
||||
level: '高风险'
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.isTrafficRelated) {
|
||||
risks.push({
|
||||
key: 'isTrafficRelated',
|
||||
description: '该用户为涉交通案件',
|
||||
detail: '用户存在交通相关案件记录',
|
||||
level: '高风险'
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.isAntiFraudInfo) {
|
||||
risks.push({
|
||||
key: 'isAntiFraudInfo',
|
||||
description: '该用户为涉赌涉诈',
|
||||
detail: '用户存在涉赌涉诈相关风险',
|
||||
level: '中风险'
|
||||
})
|
||||
}
|
||||
// 只添加基于 level 字段的风险项
|
||||
risks.push(...getLevelBasedRisks())
|
||||
|
||||
return risks
|
||||
}
|
||||
@@ -668,7 +796,7 @@ const getPoliceVerificationRisks = () => {
|
||||
const getOverdueRiskRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.hitHighRiskBankLastTwoYears) {
|
||||
if (riskWarning.value.hitHighRiskBankLastTwoYears) {
|
||||
risks.push({
|
||||
key: 'hitHighRiskBankLastTwoYears',
|
||||
description: '近两年命中银行高风险',
|
||||
@@ -677,7 +805,7 @@ const getOverdueRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitHighRiskNonBankLastTwoYears) {
|
||||
if (riskWarning.value.hitHighRiskNonBankLastTwoYears) {
|
||||
risks.push({
|
||||
key: 'hitHighRiskNonBankLastTwoYears',
|
||||
description: '近两年命中非银高风险',
|
||||
@@ -686,7 +814,7 @@ const getOverdueRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitCurrentOverdue) {
|
||||
if (riskWarning.value.hitCurrentOverdue) {
|
||||
risks.push({
|
||||
key: 'hitCurrentOverdue',
|
||||
description: '该用户命中当前逾期',
|
||||
@@ -702,7 +830,7 @@ const getOverdueRiskRisks = () => {
|
||||
const getCourtRiskRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.hitCivilCase) {
|
||||
if (riskWarning.value.hitCivilCase) {
|
||||
risks.push({
|
||||
key: 'hitCivilCase',
|
||||
description: '该用户命中民事案件',
|
||||
@@ -711,7 +839,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitCriminalRisk) {
|
||||
if (riskWarning.value.hitCriminalRisk) {
|
||||
risks.push({
|
||||
key: 'hitCriminalRisk',
|
||||
description: '该用户命中刑事风险',
|
||||
@@ -720,7 +848,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitAdministrativeCase) {
|
||||
if (riskWarning.value.hitAdministrativeCase) {
|
||||
risks.push({
|
||||
key: 'hitAdministrativeCase',
|
||||
description: '该用户命中行政案件',
|
||||
@@ -729,7 +857,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitPreservationReview) {
|
||||
if (riskWarning.value.hitPreservationReview) {
|
||||
risks.push({
|
||||
key: 'hitPreservationReview',
|
||||
description: '该用户命中保全审查',
|
||||
@@ -738,7 +866,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitExecutionCase) {
|
||||
if (riskWarning.value.hitExecutionCase) {
|
||||
risks.push({
|
||||
key: 'hitExecutionCase',
|
||||
description: '该用户命中执行案件',
|
||||
@@ -747,7 +875,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitBankruptcyAndLiquidation) {
|
||||
if (riskWarning.value.hitBankruptcyAndLiquidation) {
|
||||
risks.push({
|
||||
key: 'hitBankruptcyAndLiquidation',
|
||||
description: '该用户命中强制清算与破产案件',
|
||||
@@ -756,7 +884,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitDirectlyUnderCase) {
|
||||
if (riskWarning.value.hitDirectlyUnderCase) {
|
||||
risks.push({
|
||||
key: 'hitDirectlyUnderCase',
|
||||
description: '该用户命中直辖案件',
|
||||
@@ -765,7 +893,7 @@ const getCourtRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.hitCompensationCase) {
|
||||
if (riskWarning.value.hitCompensationCase) {
|
||||
risks.push({
|
||||
key: 'hitCompensationCase',
|
||||
description: '该用户命中赔偿案件',
|
||||
@@ -781,7 +909,7 @@ const getCourtRiskRisks = () => {
|
||||
const getLoanEvaluationRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.frequentApplicationRecent) {
|
||||
if (riskWarning.value.frequentApplicationRecent) {
|
||||
risks.push({
|
||||
key: 'frequentApplicationRecent',
|
||||
description: '近期申请机构极为频繁',
|
||||
@@ -790,7 +918,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.frequentNonBankApplications) {
|
||||
if (riskWarning.value.frequentNonBankApplications) {
|
||||
risks.push({
|
||||
key: 'frequentNonBankApplications',
|
||||
description: '在非银机构申请次数极多',
|
||||
@@ -799,7 +927,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.highDebtPressure) {
|
||||
if (riskWarning.value.highDebtPressure) {
|
||||
risks.push({
|
||||
key: 'highDebtPressure',
|
||||
description: '偿债压力极高',
|
||||
@@ -808,7 +936,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.frequentBankApplications) {
|
||||
if (riskWarning.value.frequentBankApplications) {
|
||||
risks.push({
|
||||
key: 'frequentBankApplications',
|
||||
description: '在银行机构申请次数极多',
|
||||
@@ -817,7 +945,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.moreFrequentNonBankApplications) {
|
||||
if (riskWarning.value.moreFrequentNonBankApplications) {
|
||||
risks.push({
|
||||
key: 'moreFrequentNonBankApplications',
|
||||
description: '在非银机构申请次数较多',
|
||||
@@ -826,7 +954,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.highFraudGangLevel) {
|
||||
if (riskWarning.value.highFraudGangLevel) {
|
||||
risks.push({
|
||||
key: 'highFraudGangLevel',
|
||||
description: '欺诈团伙等级较高',
|
||||
@@ -835,7 +963,7 @@ const getLoanEvaluationRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.moreFrequentBankApplications) {
|
||||
if (riskWarning.value.moreFrequentBankApplications) {
|
||||
risks.push({
|
||||
key: 'moreFrequentBankApplications',
|
||||
description: '在银行机构申请次数较多',
|
||||
@@ -851,7 +979,7 @@ const getLoanEvaluationRisks = () => {
|
||||
const getLeasingRiskRisks = () => {
|
||||
const risks = []
|
||||
|
||||
if (riskWarning.frequentRentalApplications) {
|
||||
if (riskWarning.value.frequentRentalApplications) {
|
||||
risks.push({
|
||||
key: 'frequentRentalApplications',
|
||||
description: '在租赁机构申请极为频繁',
|
||||
@@ -860,7 +988,7 @@ const getLeasingRiskRisks = () => {
|
||||
})
|
||||
}
|
||||
|
||||
if (riskWarning.veryFrequentRentalApplications) {
|
||||
if (riskWarning.value.veryFrequentRentalApplications) {
|
||||
risks.push({
|
||||
key: 'veryFrequentRentalApplications',
|
||||
description: '在租赁机构申请次数极多',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="">
|
||||
<!-- 概览标题 -->
|
||||
<div class="mb-6">
|
||||
<div class="p-4">
|
||||
<!-- 添加风险概览总结 -->
|
||||
<div class=" p-4 rounded-lg" :class="getRiskOverviewClass()">
|
||||
<div class="p-4 rounded-lg" :class="getRiskOverviewClass()">
|
||||
<div class="flex items-center">
|
||||
<div class="w-12 h-12 mr-3 flex-shrink-0">
|
||||
<img :src="getRiskIcon()" alt="风险" class="w-12 h-12 object-contain" />
|
||||
@@ -234,7 +234,7 @@ const caseTypeChartOption = computed(() => {
|
||||
return {
|
||||
value: value === 0 ? 0.1 : value, // 0值显示为0.1,让柱子能显示一个小尖尖
|
||||
itemStyle: {
|
||||
color: 'var(--color-primary)',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [0, 4, 4, 0],
|
||||
},
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<!-- 标题 -->
|
||||
<div class="flex items-center mb-3 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zwsc.png" alt="涉诉风险整体概览" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/ssfxfx.png" alt="涉诉风险整体" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">涉诉风险分析</span>
|
||||
</div>
|
||||
|
||||
296
src/ui/CIVYZ7F3A.vue
Normal file
296
src/ui/CIVYZ7F3A.vue
Normal file
@@ -0,0 +1,296 @@
|
||||
<script setup>
|
||||
import { computed, onMounted } from 'vue';
|
||||
import { useRiskNotifier } from '@/composables/useRiskNotifier';
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
apiId: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
index: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
notifyRiskStatus: {
|
||||
type: Function,
|
||||
default: () => { },
|
||||
},
|
||||
});
|
||||
|
||||
// 导入图片图标
|
||||
import rkpmIcon from '@/assets/images/report/rkpm.png';
|
||||
import zymcIcon from '@/assets/images/report/zymc.png';
|
||||
import xxxsIcon from '@/assets/images/report/xxxs.png';
|
||||
import xxlxIcon from '@/assets/images/report/xxlx.png';
|
||||
import bysjIcon from '@/assets/images/report/bysj.png';
|
||||
import xlIcon from '@/assets/images/report/xl.png';
|
||||
|
||||
|
||||
// 计算风险评分(0-100分,分数越高越安全)
|
||||
const riskScore = computed(() => {
|
||||
// 学历信息不算风险,始终返回100分(最安全)
|
||||
return 100;
|
||||
});
|
||||
|
||||
// 使用 composable 通知父组件风险评分
|
||||
useRiskNotifier(props, riskScore);
|
||||
|
||||
// 暴露给父组件
|
||||
defineExpose({
|
||||
riskScore
|
||||
});
|
||||
|
||||
// 格式化日期,从YYYYMM格式转换为YYYY年MM月格式
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr || dateStr.length !== 6) return "未知";
|
||||
|
||||
const year = dateStr.substring(0, 4);
|
||||
const month = dateStr.substring(4, 6);
|
||||
|
||||
return `${year}年${month}月`;
|
||||
};
|
||||
|
||||
// 获取学历等级的描述
|
||||
const getEducationLevelDesc = (level) => {
|
||||
const descriptions = {
|
||||
"专科": "专科学历是高等教育的重要组成部分,培养具有专业知识和技能的应用型人才。",
|
||||
"本科": "本科学历是高等教育的基础学位,培养具有系统专业知识和基本技能的高级人才。",
|
||||
"硕士": "硕士学位是较高层次的学位,培养具有较深厚理论基础和专业技能的高级专门人才。",
|
||||
"博士": "博士学位是最高学位,培养能够独立从事科学研究工作、具有创新能力的高级专门人才。",
|
||||
};
|
||||
return descriptions[level] || "";
|
||||
};
|
||||
|
||||
// 根据学校属性获取徽章配置
|
||||
const getSchoolBadges = () => {
|
||||
const badges = [];
|
||||
|
||||
if (props.data.isProject985 === "是") {
|
||||
badges.push({
|
||||
text: "985院校",
|
||||
class: "bg-amber-500 text-white",
|
||||
icon: "🏆"
|
||||
});
|
||||
}
|
||||
|
||||
if (props.data.isProject211 === "是") {
|
||||
badges.push({
|
||||
text: "211院校",
|
||||
class: "bg-blue-500 text-white",
|
||||
icon: "⭐"
|
||||
});
|
||||
}
|
||||
|
||||
if (props.data.isDoubleFirstClass === "是") {
|
||||
badges.push({
|
||||
text: "双一流",
|
||||
class: "bg-green-500 text-white",
|
||||
icon: "✨"
|
||||
});
|
||||
}
|
||||
|
||||
return badges;
|
||||
};
|
||||
|
||||
// 获取学校类型徽章样式
|
||||
const getSchoolTypeBadgeClass = (type) => {
|
||||
const typeClasses = {
|
||||
"综合": "bg-blue-50 text-blue-700 border-blue-300",
|
||||
"理工": "bg-purple-50 text-purple-700 border-purple-300",
|
||||
"农业": "bg-green-50 text-green-700 border-green-300",
|
||||
"医学": "bg-red-50 text-red-700 border-red-300",
|
||||
"师范": "bg-yellow-50 text-yellow-700 border-yellow-300",
|
||||
"财经": "bg-cyan-50 text-cyan-700 border-cyan-300",
|
||||
"艺术": "bg-pink-50 text-pink-700 border-pink-300",
|
||||
};
|
||||
return typeClasses[type] || "bg-gray-50 text-gray-700 border-gray-300";
|
||||
};
|
||||
|
||||
// 获取软科排名样式
|
||||
const getRankingClass = () => {
|
||||
if (!props.data.Ranking) return "bg-gray-50 text-gray-700";
|
||||
|
||||
// 解析排名范围 (例如: "151-155")
|
||||
const match = props.data.Ranking.match(/(\d+)-(\d+)/);
|
||||
if (match) {
|
||||
const minRank = parseInt(match[1]);
|
||||
if (minRank <= 50) return "bg-green-50 text-green-700 border-green-300";
|
||||
if (minRank <= 100) return "bg-blue-50 text-blue-700 border-blue-300";
|
||||
if (minRank <= 200) return "bg-yellow-50 text-yellow-700 border-yellow-300";
|
||||
}
|
||||
return "bg-gray-50 text-gray-700 border-gray-300";
|
||||
};
|
||||
|
||||
// 判断是否有数据
|
||||
const hasData = computed(() => {
|
||||
return props.data && Object.keys(props.data).length > 0;
|
||||
});
|
||||
|
||||
// 获取徽章列表
|
||||
const schoolBadges = computed(() => getSchoolBadges());
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="hasData" class="card max-w-4xl mx-auto">
|
||||
<!-- 头部区域 -->
|
||||
<div class="mb-6">
|
||||
<!-- 学历等级标题 -->
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-12 h-12 flex items-center justify-center">
|
||||
<img :src="xlIcon" alt="学历图标" class="w-12 h-12" />
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="text-2xl font-bold text-gray-900">{{ data.educationLevel }}学历</h2>
|
||||
<p class="text-sm text-gray-500">Education Information</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 主要内容区域 -->
|
||||
<div class="space-y-4">
|
||||
<!-- 软科排名 -->
|
||||
<div v-if="data.Ranking"
|
||||
class="bg-gradient-to-r from-blue-50 to-indigo-50 rounded-lg p-4 border border-blue-200">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center flex-shrink-0">
|
||||
<img :src="rkpmIcon" alt="软科排名" class="w-8 h-8" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm text-gray-600 mb-1">软科排名</div>
|
||||
<div
|
||||
:class="['inline-block px-3 py-1 rounded-full text-sm font-medium border', getRankingClass()]">
|
||||
第 {{ data.Ranking }} 名
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 学校徽章 -->
|
||||
<div v-if="schoolBadges.length > 0" class="flex gap-2 flex-wrap">
|
||||
<div v-for="(badge, index) in schoolBadges" :key="index"
|
||||
:class="['inline-flex items-center gap-1 px-4 py-2 rounded-lg text-sm font-medium shadow-sm', badge.class]">
|
||||
<span>{{ badge.icon }}</span>
|
||||
<span>{{ badge.text }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 详细信息卡片 -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<!-- 专业信息 -->
|
||||
<div v-if="data.major"
|
||||
class="bg-gray-50 rounded-lg p-4 border border-gray-200 hover:border-blue-300 transition-colors">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center flex-shrink-0 mt-1">
|
||||
<img :src="zymcIcon" alt="专业名称" class="w-8 h-8" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm text-gray-600 mb-1">专业名称</div>
|
||||
<div class="text-base font-medium text-gray-900">{{ data.major }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 学校类型 -->
|
||||
<div v-if="data.schoolType"
|
||||
class="bg-gray-50 rounded-lg p-4 border border-gray-200 hover:border-blue-300 transition-colors">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center flex-shrink-0 mt-1">
|
||||
<img :src="xxlxIcon" alt="学校类型" class="w-8 h-8" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm text-gray-600 mb-1">学校类型</div>
|
||||
<div
|
||||
:class="['inline-block px-3 py-1 rounded text-sm font-medium border', getSchoolTypeBadgeClass(data.schoolType)]">
|
||||
{{ data.schoolType }}类院校
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 学习形式 -->
|
||||
<div v-if="data.educationType"
|
||||
class="bg-gray-50 rounded-lg p-4 border border-gray-200 hover:border-blue-300 transition-colors">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center flex-shrink-0 mt-1">
|
||||
<img :src="xxxsIcon" alt="学习形式" class="w-8 h-8" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm text-gray-600 mb-1">学习形式</div>
|
||||
<div class="text-base font-medium text-gray-900">{{ data.educationType }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 毕业时间 -->
|
||||
<div v-if="data.graduationDate"
|
||||
class="bg-gray-50 rounded-lg p-4 border border-gray-200 hover:border-blue-300 transition-colors">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center flex-shrink-0 mt-1">
|
||||
<img :src="bysjIcon" alt="毕业时间" class="w-8 h-8" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm text-gray-600 mb-1">毕业时间</div>
|
||||
<div class="text-base font-medium text-gray-900">{{ formatDate(data.graduationDate) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 学历描述 -->
|
||||
<div v-if="data.educationLevel"
|
||||
class="mt-6 bg-gradient-to-r from-blue-50 to-indigo-50 rounded-lg p-5 border border-blue-200">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="w-10 h-10 rounded-full bg-blue-500 flex items-center justify-center flex-shrink-0 mt-1">
|
||||
<span class="text-white text-xl">💡</span>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<h3 class="text-lg font-semibold text-gray-900">学历说明</h3>
|
||||
<span class="px-2 py-1 bg-blue-500 text-white text-xs rounded">信息</span>
|
||||
</div>
|
||||
<p class="text-gray-700 leading-relaxed">
|
||||
{{ getEducationLevelDesc(data.educationLevel) }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 无数据状态 -->
|
||||
<div v-else class="card max-w-2xl mx-auto">
|
||||
<div class="flex flex-col items-center py-12 text-center">
|
||||
<div class="w-20 h-20 flex items-center justify-center mb-4">
|
||||
<img :src="xlIcon" alt="学历图标" class="w-20 h-20 opacity-40" />
|
||||
</div>
|
||||
<h3 class="text-lg font-medium text-gray-900 mb-2">暂无学历信息</h3>
|
||||
<p class="text-sm text-gray-500 max-w-md">
|
||||
系统中暂无相关的学历信息记录。这可能是因为学历信息未公开或数据正在同步中。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.card {
|
||||
padding: 1.5rem;
|
||||
box-shadow: 0px 0px 24px 0px #3F3F3F0F;
|
||||
border-radius: 12px;
|
||||
background: white;
|
||||
}
|
||||
|
||||
/* 添加一些动画效果 */
|
||||
.bg-gray-50 {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.bg-gray-50:hover {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,4 @@
|
||||
<script setup>
|
||||
import LTitle from "@/components/LTitle.vue";
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
|
||||
@@ -225,6 +225,7 @@ function initChart() {
|
||||
data: item.data || [],
|
||||
barMaxWidth: 50,
|
||||
barGap: '30%',
|
||||
barMinHeight: 3,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
|
||||
@@ -306,7 +306,7 @@ onUnmounted(() => {
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="还款压力分析" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/hkylfx.png" alt="还款压力分析" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">还款压力分析</span>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/fqzpf.png" alt="信用评分" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/xypf2.png" alt="信用评分" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">信用评分</span>
|
||||
</div>
|
||||
@@ -161,7 +161,7 @@
|
||||
<div class="flex flex-col items-center justify-center h-full w-full">
|
||||
<div class="flex flex-col items-center justify-center w-full h-full text-center">
|
||||
<div class="text-lg text-[#999999] mt-1">金额: <span class="font-bold text-green-600 text-2xl">{{
|
||||
(recent5AmountRatio * 100).toFixed(0) }}</span> %</div>
|
||||
(recent5AmountRatio * 100).toFixed(0) }}</span> %</div>
|
||||
<div class="font-medium text-[#666666] mb-2">近5次</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zq.png" alt="机构分析" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/jgfx.png" alt="机构分析" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">机构分析</span>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zwsc.png" alt="贷款行为分析" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/dkxwfx.png" alt="贷款行为分析" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">贷款行为分析</span>
|
||||
</div>
|
||||
@@ -167,14 +167,14 @@
|
||||
<div class="flex justify-between items-center" v-if="currentPeriod.amounts">
|
||||
<span class="text-sm text-gray-600">成功金额</span>
|
||||
<span class="text-sm font-bold text-gray-800">{{ formatAmount(currentPeriod.amounts.success)
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
|
||||
<!-- 失败金额 -->
|
||||
<div class="flex justify-between items-center" v-if="currentPeriod.amounts">
|
||||
<span class="text-sm text-gray-600">失败金额</span>
|
||||
<span class="text-sm font-bold text-gray-800">{{ formatAmount(currentPeriod.amounts.failure)
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
<div class="rounded-lg border border-[#99999933] mb-4">
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center p-4">
|
||||
<span class="font-bold text-gray-800 text-xl ml-8">专业建议</span>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zyjy.png" alt="专业建议" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">专业建议</span>
|
||||
</div>
|
||||
|
||||
<!-- 风险评估结论 -->
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="风险指标详情" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/fxzbxq.png" alt="风险指标详情" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">风险指标详情</span>
|
||||
</div>
|
||||
@@ -52,7 +52,7 @@
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm text-[#999999]">历史成功还款</span>
|
||||
<span class="text-base font-bold text-[#333333]">{{ formatMetricValue(historicalSuccessPayments)
|
||||
}}笔</span>
|
||||
}}笔</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -223,17 +223,17 @@
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm text-[#999999]">近90天最大交易金额</span>
|
||||
<span class="text-base font-bold text-[#333333]">{{ formatAmount(parseIntervalValue(data.xyp_t01aafzzz))
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm text-[#999999]">近90天最小交易金额</span>
|
||||
<span class="text-base font-bold text-[#333333]">{{ formatAmount(parseIntervalValue(data.xyp_t01abfzzz))
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm text-[#999999]">近90天平均交易金额</span>
|
||||
<span class="text-base font-bold text-[#333333]">{{ formatAmount(parseIntervalValue(data.xyp_t01adfzzz))
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="风险概览" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/fxgl.png" alt="风险概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">风险概览</span>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!-- 标题栏 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zwsc.png" alt="贷款行为分析" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/sjqsfx.png" alt="贷款行为分析" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">贷款行为分析</span>
|
||||
</div>
|
||||
@@ -152,7 +152,7 @@
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm text-gray-600">新增</span>
|
||||
<span class="text-sm font-bold text-gray-800">{{ formatAmount(currentAmountData.totalAmount)
|
||||
}}</span>
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="h-2 rounded-full bg-gray-200">
|
||||
<div class="h-2 rounded-full transition-all duration-500"
|
||||
|
||||
@@ -400,6 +400,7 @@ function drawBorrowChart() {
|
||||
},
|
||||
},
|
||||
barWidth: '60%',
|
||||
barMinHeight: 3,
|
||||
showBackground: true,
|
||||
backgroundStyle: {
|
||||
color: 'rgba(180, 180, 180, 0.1)',
|
||||
@@ -507,6 +508,7 @@ function drawRepayChart() {
|
||||
},
|
||||
},
|
||||
barWidth: '60%',
|
||||
barMinHeight: 3,
|
||||
showBackground: true,
|
||||
backgroundStyle: {
|
||||
color: 'rgba(180, 180, 180, 0.1)',
|
||||
|
||||
130
src/ui/CQCXG9P1C.vue
Normal file
130
src/ui/CQCXG9P1C.vue
Normal file
@@ -0,0 +1,130 @@
|
||||
<template>
|
||||
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-6">
|
||||
<!-- 车辆总数统计 -->
|
||||
<div class="flex justify-between items-center mb-6 pb-4 border-b border-gray-100">
|
||||
<div class="flex items-center gap-3">
|
||||
<div>
|
||||
<div class="text-lg font-semibold text-gray-900">个人名下车辆</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-blue-50 text-blue-700 px-4 py-2 rounded-full text-sm font-medium">
|
||||
共 {{ vehicleCount }} 辆
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 车辆列表 -->
|
||||
<div class="space-y-3" v-if="vehicleList && vehicleList.length > 0">
|
||||
<div class="bg-gray-50 rounded-lg p-4 border border-gray-200 hover:bg-blue-50 hover:border-blue-200 transition-colors duration-200"
|
||||
v-for="(vehicle, index) in vehicleList" :key="index">
|
||||
<div class="space-y-3">
|
||||
<div class="text-xl font-bold text-gray-900 font-mono tracking-wider">
|
||||
{{ vehicle.plateNum }}
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="inline-flex items-center gap-1 px-3 py-1 rounded text-xs font-medium text-white"
|
||||
:class="getPlateColorClass(vehicle.plateColor)">
|
||||
<span>🏷️</span>
|
||||
<span>{{ getPlateColorText(vehicle.plateColor) }}</span>
|
||||
</div>
|
||||
<div class="text-sm text-gray-600">
|
||||
<span class="text-gray-500">车辆类型:</span>
|
||||
<span class="font-medium text-gray-900 ml-1">{{ getVehicleTypeText(vehicle.vehicleType)
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 无数据状态 -->
|
||||
<div class="text-center py-12 text-gray-500" v-else>
|
||||
<div class="text-4xl mb-3">🚫</div>
|
||||
<div class="text-lg font-medium mb-1">暂无车辆信息</div>
|
||||
<div class="text-sm">No vehicle records found</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { defineProps, computed } from 'vue';
|
||||
|
||||
// 接收父组件传入的 props
|
||||
const props = defineProps({
|
||||
data: Object,
|
||||
params: Object,
|
||||
});
|
||||
|
||||
// 车牌颜色映射
|
||||
const plateColorMap = {
|
||||
0: '蓝色 - 普通燃油车',
|
||||
1: '黄色 - 大型车/货车',
|
||||
2: '黑色 - 外籍车辆/港澳台车',
|
||||
3: '白色 - 警车/军车/武警车',
|
||||
4: '渐变绿色 - 新能源汽车',
|
||||
5: '黄绿双拼色 - 大型新能源汽车',
|
||||
6: '蓝白渐变色 - 临时牌照',
|
||||
7: '临时牌照 - 临时行驶车辆',
|
||||
11: '绿色 - 新能源汽车',
|
||||
12: '红色 - 教练车/试验车'
|
||||
};
|
||||
|
||||
// 车辆类型映射
|
||||
const vehicleTypeMap = {
|
||||
1: '一型客车',
|
||||
2: '二型客车',
|
||||
3: '三型客车',
|
||||
4: '四型客车',
|
||||
11: '一型货车',
|
||||
12: '二型货车',
|
||||
13: '三型货车',
|
||||
14: '四型货车',
|
||||
15: '五型货车',
|
||||
16: '六型货车',
|
||||
21: '一型专项作业车',
|
||||
22: '二型专项作业车',
|
||||
23: '三型专项作业车',
|
||||
24: '四型专项作业车',
|
||||
25: '五型专项作业车',
|
||||
26: '六型专项作业车'
|
||||
};
|
||||
|
||||
// 计算属性
|
||||
const vehicleList = computed(() => props.data?.list || []);
|
||||
const vehicleCount = computed(() => props.data?.vehicleCount || 0);
|
||||
|
||||
// 获取车牌颜色文本
|
||||
const getPlateColorText = (plateColor) => {
|
||||
return plateColorMap[plateColor] || '未知颜色 - 未知类型';
|
||||
};
|
||||
|
||||
// 获取车牌颜色样式类
|
||||
const getPlateColorClass = (plateColor) => {
|
||||
const colorClassMap = {
|
||||
0: 'bg-blue-500',
|
||||
1: 'bg-yellow-500',
|
||||
2: 'bg-gray-800',
|
||||
3: 'bg-gray-200 text-gray-800',
|
||||
4: 'bg-green-500',
|
||||
5: 'bg-gradient-to-r from-yellow-500 to-green-500',
|
||||
6: 'bg-gradient-to-r from-blue-500 to-white text-blue-800',
|
||||
7: 'bg-red-500',
|
||||
11: 'bg-green-500',
|
||||
12: 'bg-red-500'
|
||||
};
|
||||
return colorClassMap[plateColor] || 'bg-gray-500';
|
||||
};
|
||||
|
||||
// 获取车辆类型文本
|
||||
const getVehicleTypeText = (vehicleType) => {
|
||||
return vehicleTypeMap[vehicleType] || '未知类型';
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
console.log('车辆数据:', props.data);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 自定义样式 - 仅保留必要的样式 */
|
||||
</style>
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="border border-[#EEEEEE] p-4 rounded-xl">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/dwtz.png" alt="对外投资历史" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/dwtzls.png" alt="对外投资历史" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">对外投资历史</span>
|
||||
</div>
|
||||
@@ -21,7 +21,7 @@
|
||||
<div class="flex items-center justify-between pt-2">
|
||||
<span class="text-sm text-gray-600">投资企业</span>
|
||||
<span class="text-sm text-gray-600">投资项目: <span class="ml-1 font-medium text-[#333333]">{{
|
||||
group.totalInvestments }}</span></span>
|
||||
group.totalInvestments }}</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
<!-- 持股比例 -->
|
||||
<span class="text-base text-[#666666] flex-shrink-0">持股比例:</span>
|
||||
<span class="text-base font-medium text-[#333333] break-words">{{ investment.percent || '-'
|
||||
}}</span>
|
||||
}}</span>
|
||||
|
||||
<!-- 投资金额 -->
|
||||
<template v-if="investment.amount">
|
||||
@@ -114,13 +114,13 @@
|
||||
<!-- 企业状态 -->
|
||||
<span class="text-base text-[#666666] flex-shrink-0">企业状态:</span>
|
||||
<span class="text-base font-medium text-[#333333] break-words">{{ investment.regStatus || '-'
|
||||
}}</span>
|
||||
}}</span>
|
||||
|
||||
<!-- 统一社会信用代码 -->
|
||||
<template v-if="investment.creditCode">
|
||||
<span class="text-base text-[#666666] flex-shrink-0">统一社会信用代码:</span>
|
||||
<span class="text-base font-medium text-[#333333] break-words">{{ investment.creditCode
|
||||
}}</span>
|
||||
}}</span>
|
||||
</template>
|
||||
|
||||
<!-- 企业类型 -->
|
||||
@@ -149,14 +149,14 @@
|
||||
<template v-if="investment.legalPersonName">
|
||||
<span class="text-base text-[#666666] flex-shrink-0">法人代表:</span>
|
||||
<span class="text-base font-medium text-[#333333] break-words">{{ investment.legalPersonName
|
||||
}}</span>
|
||||
}}</span>
|
||||
</template>
|
||||
|
||||
<!-- 经营范围 -->
|
||||
<template v-if="investment.business_scope">
|
||||
<span class="text-base text-[#666666] flex-shrink-0">经营范围:</span>
|
||||
<span class="text-base font-medium text-[#333333] break-words">{{ investment.business_scope
|
||||
}}</span>
|
||||
}}</span>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class=" border border-[#EEEEEE] p-4 rounded-xl">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/zwsc.png" alt="涉诉风险整体概览" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/ssfxztgl.png" alt="涉诉风险整体概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">涉诉风险整体概览</span>
|
||||
</div>
|
||||
@@ -1313,7 +1313,7 @@ const caseTypeChartOption = computed(() => {
|
||||
return {
|
||||
value: value,
|
||||
itemStyle: {
|
||||
color: "var(--color-primary)",
|
||||
color: "#5d7eeb",
|
||||
borderRadius: [0, 4, 4, 0],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="rounded-lg border border-gray-200 pb-4 mb-4">
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getTitleIcon()" alt="涉赌涉诈人员核验" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/sdszryhy.png" alt="涉赌涉诈人员核验" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">涉赌涉诈人员核验</span>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="历史借贷行为" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/lsjdxw.png" alt="历史借贷行为" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">历史借贷行为</span>
|
||||
</div>
|
||||
@@ -311,14 +311,15 @@ const barChartOption = computed(() => {
|
||||
name: '申请机构数',
|
||||
type: 'bar',
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
data: data,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,53 +4,51 @@
|
||||
|
||||
<div class="mt-4">
|
||||
<!-- 法院风险概览 -->
|
||||
<div class="bg-gradient-to-r from-red-50 to-pink-50 rounded-lg p-4 mb-4">
|
||||
<h3 class="text-lg font-semibold text-gray-800 mb-3 flex items-center">
|
||||
<span class="w-2 h-2 bg-red-500 rounded-full mr-2"></span>
|
||||
<div class="bg-gradient-to-r from-[#F9ECEC] to-[#FCE8E8] rounded-lg p-4 mb-4">
|
||||
<h3 class="text-lg font-semibold text-[#333333] mb-3 flex items-center">
|
||||
<span class="w-2 h-2 bg-[#EB3C3C] rounded-full mr-2"></span>
|
||||
法院风险概览
|
||||
</h3>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-red-600' : 'text-green-600'">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length || 0 }}
|
||||
</div>
|
||||
<div class="text-sm text-gray-600">法院案件数</div>
|
||||
<div class="text-sm text-[#666666]">法院案件数</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-red-600' : 'text-green-600'">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length > 0 ? '有风险' : '无风险' }}
|
||||
</div>
|
||||
<div class="text-sm text-gray-600">风险状态</div>
|
||||
<div class="text-sm text-[#666666]">风险状态</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 案件类型统计 -->
|
||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="mb-4">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<div class="flex items-center">
|
||||
<div class="w-8 h-8 bg-purple-500 rounded-full flex items-center justify-center mr-2">
|
||||
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3">
|
||||
</path>
|
||||
</svg>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">案件类型分布</span>
|
||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 案件类型统计 -->
|
||||
<div class="grid grid-cols-3 md:grid-cols-6 gap-2">
|
||||
<div v-for="(typeInfo, type) in caseTypeStats" :key="type" class="text-center p-2 rounded-lg border"
|
||||
:class="typeInfo.count > 0 ? 'bg-red-50 border-red-200' : 'bg-green-50 border-green-200'">
|
||||
<div class="text-lg mb-1">{{ getCaseTypeIcon(type) }}</div>
|
||||
<div class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-red-600' : 'text-green-600'">
|
||||
:class="typeInfo.count > 0 ? 'bg-[#F9ECEC] border border-[#F0CACA]' : 'bg-[#ECF9EF] border border-[#CAECD3]'">
|
||||
<div class="flex justify-center mb-1">
|
||||
<img :src="getCaseTypeIconPath(type)" alt="" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count }}
|
||||
</div>
|
||||
<div class="text-xs text-gray-600 leading-tight">{{ getCaseTypeShortName(type) }}</div>
|
||||
<div class="text-xs mt-0.5" :class="typeInfo.count > 0 ? 'text-red-600' : 'text-green-600'">
|
||||
<div class="text-xs text-[#666666] leading-tight">{{ getCaseTypeShortName(type) }}</div>
|
||||
<div class="text-xs mt-0.5" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count > 0 ? '有风险' : '无风险' }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -62,13 +60,12 @@
|
||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="space-y-4">
|
||||
<!-- 按案件类型分组显示 -->
|
||||
<div v-for="(cases, caseType) in groupedCases" :key="caseType" class="case-section">
|
||||
<div class="bg-white rounded-lg border border-gray-200 p-4">
|
||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-6 h-6 rounded-full flex items-center justify-center mr-2"
|
||||
:class="getCaseTypeHeaderStyle(caseType)">
|
||||
<span class="text-white text-xs">{{ getCaseTypeIcon(caseType) }}</span>
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getCaseTypeIconPath(caseType)" alt="" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">{{ getCaseTypeName(caseType) }}</span>
|
||||
<span class="font-bold text-[#333333]">{{ getCaseTypeName(caseType) }}</span>
|
||||
<span class="ml-2 px-2 py-1 rounded-full text-xs font-medium" :class="getCaseTypeBadgeStyle(caseType)">
|
||||
{{ cases.length }}件
|
||||
</span>
|
||||
@@ -115,7 +112,7 @@
|
||||
</div>
|
||||
<div class="detail-item" v-if="caseItem.executionAmount">
|
||||
<span class="label">执行金额:</span>
|
||||
<span class="value text-red-600 font-bold">{{ caseItem.executionAmount }}</span>
|
||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}</span>
|
||||
</div>
|
||||
<div class="detail-item" v-if="caseItem.repaidAmount">
|
||||
<span class="label">已还款金额:</span>
|
||||
@@ -140,10 +137,10 @@
|
||||
</div>
|
||||
|
||||
<!-- 匹配度信息 -->
|
||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-blue-50 rounded-lg">
|
||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-[#EBF5FF] rounded-lg">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="text-sm text-gray-600">身份匹配度</span>
|
||||
<span class="text-sm font-bold text-blue-600">
|
||||
<span class="text-sm text-[#666666]">身份匹配度</span>
|
||||
<span class="text-sm font-bold text-[#2B79EE]">
|
||||
{{ (caseItem.matchScore * 100).toFixed(1) }}%
|
||||
</span>
|
||||
</div>
|
||||
@@ -156,7 +153,7 @@
|
||||
|
||||
<!-- 内容摘要 -->
|
||||
<div v-if="caseItem.contentSummary" class="mt-3">
|
||||
<div class="text-sm text-gray-600 mb-2">案件摘要:</div>
|
||||
<div class="text-sm text-[#666666] mb-2">案件摘要:</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border">
|
||||
<p class="text-sm text-gray-700 leading-relaxed">
|
||||
{{ formatContentSummary(caseItem.contentSummary) }}
|
||||
@@ -166,7 +163,7 @@
|
||||
|
||||
<!-- 执行公告ID -->
|
||||
<div v-if="caseItem.executionAnnouncementId" class="mt-3">
|
||||
<div class="text-sm text-gray-600 mb-1">公告编号:</div>
|
||||
<div class="text-sm text-[#666666] mb-1">公告编号:</div>
|
||||
<div class="bg-gray-100 rounded p-2">
|
||||
<span class="text-xs font-mono text-gray-700">
|
||||
{{ caseItem.executionAnnouncementId }}
|
||||
@@ -181,19 +178,19 @@
|
||||
</div>
|
||||
|
||||
<!-- 高风险警告 -->
|
||||
<div v-if="hasHighRiskCases" class="mt-4 p-4 bg-red-100 border border-red-300 rounded-lg">
|
||||
<div v-if="hasHighRiskCases" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] rounded-lg">
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1">
|
||||
<span class="text-xl">🚨</span>
|
||||
<div class="mr-3 mt-1 flex-shrink-0">
|
||||
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-red-800 mb-2">法院风险警告</h4>
|
||||
<p class="text-red-700 text-sm">
|
||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">法院风险警告</h4>
|
||||
<p class="text-[#666666] text-sm">
|
||||
检测到法院相关案件记录,存在司法风险,建议立即停止相关业务并进行详细核实。
|
||||
</p>
|
||||
<div class="mt-2">
|
||||
<span class="text-red-800 font-medium">涉及案件类型:</span>
|
||||
<span class="text-red-700">{{ getCaseTypesList.join('、') }}</span>
|
||||
<span class="text-[#666666] font-medium">涉及案件类型:</span>
|
||||
<span class="text-[#EB3C3C]">{{ getCaseTypesList.join('、') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -201,14 +198,14 @@
|
||||
|
||||
<!-- 无风险提示 -->
|
||||
<div v-if="!courtRiskInfos || courtRiskInfos.length === 0"
|
||||
class="mt-4 p-4 bg-green-100 border border-green-300 rounded-lg">
|
||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg">
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1">
|
||||
<span class="text-xl">✅</span>
|
||||
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-green-800 mb-2">法院风险核验通过</h4>
|
||||
<p class="text-green-700 text-sm">
|
||||
<h4 class="font-semibold text-green-600 mb-2">法院风险核验通过</h4>
|
||||
<p class="text-green-600 text-sm">
|
||||
未检测到法院相关案件记录,司法风险较低。
|
||||
</p>
|
||||
</div>
|
||||
@@ -216,9 +213,9 @@
|
||||
</div>
|
||||
|
||||
<!-- 案件类型说明 -->
|
||||
<div class="mt-4 p-4 bg-gray-50 border border-gray-200 rounded-lg">
|
||||
<h4 class="font-semibold text-gray-800 mb-2">案件类型说明</h4>
|
||||
<div class="text-sm text-gray-600 space-y-1">
|
||||
<div class="mt-4 p-4 bg-gray-50 border border-[#DDDDDD] rounded-lg">
|
||||
<h4 class="font-semibold text-[#333333] mb-2">案件类型说明</h4>
|
||||
<div class="text-sm text-[#666666] space-y-1">
|
||||
<div><strong>民事案件:</strong>涉及财产、合同等民事纠纷</div>
|
||||
<div><strong>刑事案件:</strong>涉及刑法规定的犯罪行为</div>
|
||||
<div><strong>行政案件:</strong>涉及行政管理相关纠纷</div>
|
||||
@@ -354,18 +351,19 @@ const caseTypeStats = computed(() => {
|
||||
return stats
|
||||
})
|
||||
|
||||
// 获取案件类型图标
|
||||
const getCaseTypeIcon = (type) => {
|
||||
// 获取案件类型图标路径
|
||||
const getCaseTypeIconPath = (type) => {
|
||||
const iconMap = {
|
||||
'民事案件': '⚖️',
|
||||
'刑事案件': '🚨',
|
||||
'行政案件': '🏛️',
|
||||
'执行案件': '⚡',
|
||||
'非诉保全审查案件': '🛡️',
|
||||
'强制清算与破产案件': '💼',
|
||||
'default': '📄'
|
||||
'民事案件': () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||
'刑事案件': () => new URL('@/assets/images/report/xs.png', import.meta.url).href,
|
||||
'行政案件': () => new URL('@/assets/images/report/xz.png', import.meta.url).href,
|
||||
'执行案件': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||
'非诉保全审查案件': () => new URL('@/assets/images/report/fsbq.png', import.meta.url).href,
|
||||
'强制清算与破产案件': () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||
'default': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href
|
||||
}
|
||||
return iconMap[type] || iconMap.default
|
||||
const getIcon = iconMap[type] || iconMap.default
|
||||
return getIcon()
|
||||
}
|
||||
|
||||
// 获取案件类型名称
|
||||
@@ -397,27 +395,27 @@ const getCaseTypeShortName = (type) => {
|
||||
// 获取案件类型头部样式
|
||||
const getCaseTypeHeaderStyle = (caseType) => {
|
||||
const styleMap = {
|
||||
'民事案件': 'bg-blue-500',
|
||||
'刑事案件': 'bg-red-500',
|
||||
'行政案件': 'bg-purple-500',
|
||||
'执行案件': 'bg-orange-500',
|
||||
'民事案件': 'bg-[#2B79EE]',
|
||||
'刑事案件': 'bg-[#EB3C3C]',
|
||||
'行政案件': 'bg-[#2B79EE]',
|
||||
'执行案件': 'bg-[#D6943E]',
|
||||
'非诉保全审查案件': 'bg-green-500',
|
||||
'强制清算与破产案件': 'bg-gray-500'
|
||||
'强制清算与破产案件': 'bg-[#666666]'
|
||||
}
|
||||
return styleMap[caseType] || 'bg-gray-500'
|
||||
return styleMap[caseType] || 'bg-[#666666]'
|
||||
}
|
||||
|
||||
// 获取案件类型标签样式
|
||||
const getCaseTypeBadgeStyle = (caseType) => {
|
||||
const styleMap = {
|
||||
'民事案件': 'bg-blue-100 text-blue-700',
|
||||
'刑事案件': 'bg-red-100 text-red-700',
|
||||
'行政案件': 'bg-purple-100 text-purple-700',
|
||||
'执行案件': 'bg-orange-100 text-orange-700',
|
||||
'非诉保全审查案件': 'bg-green-100 text-green-700',
|
||||
'强制清算与破产案件': 'bg-gray-100 text-gray-700'
|
||||
'民事案件': 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||
'刑事案件': 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
'行政案件': 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||
'执行案件': 'bg-[#FFF8E1] text-[#D6943E]',
|
||||
'非诉保全审查案件': 'bg-[#ECF9EF] text-green-600',
|
||||
'强制清算与破产案件': 'bg-gray-100 text-[#666666]'
|
||||
}
|
||||
return styleMap[caseType] || 'bg-gray-100 text-gray-700'
|
||||
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取案件项样式
|
||||
@@ -431,32 +429,32 @@ const getCaseItemClass = (caseItem) => {
|
||||
// 获取案件状态样式
|
||||
const getCaseStatusClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||
if (status === '执行中') return 'text-orange-600 bg-orange-100'
|
||||
if (status === '未执行') return 'text-red-600 bg-red-100'
|
||||
if (status === '审理中') return 'text-blue-600 bg-blue-100'
|
||||
if (status === '失信中') return 'text-red-600 bg-red-100'
|
||||
if (status === '限高中') return 'text-purple-600 bg-purple-100'
|
||||
return 'text-gray-600 bg-gray-100'
|
||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
return 'text-[#666666] bg-gray-100'
|
||||
}
|
||||
|
||||
// 获取案件状态文字样式
|
||||
const getCaseStatusTextClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600'
|
||||
if (status === '执行中') return 'text-orange-600'
|
||||
if (status === '未执行') return 'text-red-600'
|
||||
if (status === '审理中') return 'text-blue-600'
|
||||
if (status === '失信中') return 'text-red-600'
|
||||
if (status === '限高中') return 'text-purple-600'
|
||||
return 'text-gray-600'
|
||||
if (status === '执行中') return 'text-[#D6943E]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C]'
|
||||
if (status === '审理中') return 'text-[#2B79EE]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C]'
|
||||
if (status === '限高中') return 'text-[#2B79EE]'
|
||||
return 'text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取匹配度进度条样式
|
||||
const getMatchScoreBarStyle = (score) => {
|
||||
if (score >= 0.9) return 'bg-green-500'
|
||||
if (score >= 0.8) return 'bg-blue-500'
|
||||
if (score >= 0.8) return 'bg-[#2B79EE]'
|
||||
if (score >= 0.7) return 'bg-yellow-500'
|
||||
if (score >= 0.6) return 'bg-orange-500'
|
||||
return 'bg-red-500'
|
||||
if (score >= 0.6) return 'bg-[#D6943E]'
|
||||
return 'bg-[#EB3C3C]'
|
||||
}
|
||||
|
||||
// 格式化内容摘要
|
||||
@@ -512,7 +510,7 @@ watch(() => props.data, (newData) => {
|
||||
|
||||
.case-number {
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
color: #333333;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@@ -534,13 +532,13 @@ watch(() => props.data, (newData) => {
|
||||
padding: 4px 0;
|
||||
|
||||
.label {
|
||||
color: #6b7280;
|
||||
color: #666666;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #374151;
|
||||
color: #333333;
|
||||
font-size: 13px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
@@ -557,22 +555,22 @@ watch(() => props.data, (newData) => {
|
||||
overflow: hidden;
|
||||
|
||||
&.case-item-settled {
|
||||
border: 1px solid #d1fae5;
|
||||
background-color: #f0fdf4;
|
||||
}
|
||||
|
||||
&.case-item-executing {
|
||||
border: 1px solid #fed7aa;
|
||||
background-color: #fff7ed;
|
||||
}
|
||||
|
||||
&.case-item-hearing {
|
||||
border: 1px solid #dbeafe;
|
||||
background-color: #eff6ff;
|
||||
border: 1px solid #CAECD3;
|
||||
background-color: #FBFDFC;
|
||||
}
|
||||
|
||||
&.case-item-executing {
|
||||
border: 1px solid #FFE082;
|
||||
background-color: #FFFDF9;
|
||||
}
|
||||
|
||||
&.case-item-hearing {
|
||||
border: 1px solid #EBF5FF;
|
||||
background-color: #FAFDFF;
|
||||
}
|
||||
|
||||
&.case-item-default {
|
||||
border: 1px solid #e5e7eb;
|
||||
border: 1px solid #DDDDDD;
|
||||
background-color: #f9fafb;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="授信详情" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/sxxq.png" alt="授信详情" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">授信详情</span>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="近24个月放款情况" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/j24gyfkqk.png" alt="近24个月放款情况" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">近24个月放款情况</span>
|
||||
</div>
|
||||
@@ -374,13 +374,14 @@ const timeBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: data,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -480,13 +481,14 @@ const amountBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: amountData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="历史逾期记录" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/yqfx.png" alt="历史逾期记录" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">历史逾期记录</span>
|
||||
</div>
|
||||
@@ -54,7 +54,7 @@
|
||||
<!-- 数据表格 -->
|
||||
<div class="mb-4 mt-4 border border-gray-200 rounded-lg overflow-hidden mx-4">
|
||||
<!-- 表头 -->
|
||||
<div class="bg-[#922D2A] text-white">
|
||||
<div class="bg-[#5d7eeb] text-white">
|
||||
<div class="grid grid-cols-4 text-sm">
|
||||
<div class="py-3 px-4 text-left font-semibold border-r border-white whitespace-nowrap">时间段</div>
|
||||
<div class="py-3 px-4 text-center font-semibold border-r border-white whitespace-nowrap">M0+笔数</div>
|
||||
@@ -390,6 +390,7 @@ const overdueCountBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: m0Data,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#2B79EE',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
@@ -405,6 +406,7 @@ const overdueCountBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: m1Data,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#61D2F4',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
@@ -486,13 +488,14 @@ const overdueAmountBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: amountData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="履约情况" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/lyqk.png" alt="履约情况" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">履约情况</span>
|
||||
</div>
|
||||
@@ -339,13 +339,14 @@ const performanceBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: data,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -411,13 +412,14 @@ const exceptionBarChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: data,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#a03434',
|
||||
color: '#5d7eeb',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: '#c04242'
|
||||
color: '#7dd3fc'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="租赁行为" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/zlxw.png" alt="租赁行为" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">租赁行为</span>
|
||||
</div>
|
||||
@@ -577,6 +577,7 @@ const timeDistributionChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: countData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#2B79EE',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
@@ -592,6 +593,7 @@ const timeDistributionChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: institutionData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#61D2F4',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
@@ -691,6 +693,7 @@ const specialTimeChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: weekendData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#2B79EE',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
@@ -706,6 +709,7 @@ const specialTimeChartOption = computed(() => {
|
||||
type: 'bar',
|
||||
data: nightData,
|
||||
barWidth: '25%',
|
||||
barMinHeight: 3,
|
||||
itemStyle: {
|
||||
color: '#61D2F4',
|
||||
borderRadius: [4, 4, 0, 0]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="rounded-lg border border-gray-200 pb-4 mb-4">
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getTitleIcon()" alt="风险名单" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/fxmd.png" alt="风险名单" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">风险名单</span>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="rounded-lg border border-gray-200 pb-4 mb-4">
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="命中风险标注" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/mzfxbz.png" alt="命中风险标注" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">命中风险标注</span>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="关联风险监督" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/glfxjd2.png" alt="关联风险监督" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">关联风险监督</span>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="rounded-lg border border-gray-200 pb-4 mb-4">
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getTitleIcon()" alt="公安重点人员核验" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/glzdryhy2.png" alt="公安重点人员核验" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">公安重点人员核验</span>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="rounded-lg border border-gray-200 pb-2 mb-4">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="身份信息核验" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/sfxxhy.png" alt="身份信息核验" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">身份信息核验</span>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- 标题区域 -->
|
||||
<div class="flex items-center mb-4 p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="收入评估" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/srpg.png" alt="收入评估" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">收入评估</span>
|
||||
</div>
|
||||
@@ -461,7 +461,7 @@ defineExpose({
|
||||
|
||||
.indicator-marker {
|
||||
position: absolute;
|
||||
top: -24px;
|
||||
top: -26px;
|
||||
transform: translateX(-50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -469,7 +469,7 @@ defineExpose({
|
||||
}
|
||||
|
||||
.marker-image {
|
||||
width: 16px;
|
||||
width: 24px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="institution-status-section bg-white rounded-lg border border-gray-200">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="机构状态信息" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/jgztxx.png" alt="机构状态信息" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">机构状态信息</span>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="probe-overview bg-white rounded-lg border border-gray-200">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="逾期信息详情" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/yqxxxq.png" alt="逾期信息详情" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">逾期信息详情</span>
|
||||
</div>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<div class="performance-info-section bg-white rounded-lg border border-gray-200">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="逾期信息详情" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/lyxxxq.png" alt="履约信息详情" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">逾期信息详情</span>
|
||||
<span class="font-bold text-gray-800">履约信息详情</span>
|
||||
</div>
|
||||
<div class="">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 p-4">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="probe-overview bg-white rounded-lg border border-gray-200">
|
||||
<div class="flex items-center p-4">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/qsgg.png" alt="欠税公告" class="w-8 h-8 object-contain" />
|
||||
<img src="@/assets/images/report/gl.png" alt="概览" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-gray-800">概览</span>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user