f
This commit is contained in:
@@ -170,6 +170,10 @@ const featureMap = {
|
|||||||
name: "关联风险监督",
|
name: "关联风险监督",
|
||||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
||||||
},
|
},
|
||||||
|
DWBG6A2C_CourtRiskInfo: {
|
||||||
|
name: "个人司法信息",
|
||||||
|
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/CourtRiskInfoSection.vue")),
|
||||||
|
},
|
||||||
|
|
||||||
// 司法涉诉
|
// 司法涉诉
|
||||||
FLXG0V4B: {
|
FLXG0V4B: {
|
||||||
@@ -393,6 +397,7 @@ const featureRiskLevels = {
|
|||||||
'DWBG6A2C_CreditDetail': 5,
|
'DWBG6A2C_CreditDetail': 5,
|
||||||
'DWBG6A2C_RentalBehavior': 5,
|
'DWBG6A2C_RentalBehavior': 5,
|
||||||
'DWBG6A2C_RiskSupervision': 8,
|
'DWBG6A2C_RiskSupervision': 8,
|
||||||
|
'DWBG6A2C_CourtRiskInfo': 14,
|
||||||
|
|
||||||
// 人企关系加强版子模块
|
// 人企关系加强版子模块
|
||||||
'CQYGL3F8E_Investment': 4,
|
'CQYGL3F8E_Investment': 4,
|
||||||
|
|||||||
@@ -1,24 +1,70 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="bg-white rounded-xl shadow-sm p-6">
|
<div class="bg-white rounded-xl shadow-sm p-6">
|
||||||
<LTitle title="法院风险信息" type="red" />
|
<LTitle title="个人司法信息" type="red" />
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<!-- 法院风险概览 -->
|
<!-- 案件概览 -->
|
||||||
|
<div v-if="caseOverview" 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-3 text-sm">
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告总案件数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalCasesCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告未结案数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalWeiCaseCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告涉案金额</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalCaseAmounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被执行案件数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.executionCaseCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">失信命中</span>
|
||||||
|
<span :class="caseOverview.disinCaseCounts ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
|
{{ caseOverview.disinCaseCounts ? '命中' : '未命中' }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">限高命中</span>
|
||||||
|
<span :class="caseOverview.limitCaseCounts ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
|
{{ caseOverview.limitCaseCounts ? '命中' : '未命中' }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">关联企业</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.affiliateCompany ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1">
|
||||||
|
<span class="text-[#666666]">最近案件年份</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.leastCaseTime || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 概览统计 -->
|
||||||
<div class="bg-gradient-to-r from-[#F9ECEC] to-[#FCE8E8] rounded-lg p-4 mb-4">
|
<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">
|
<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>
|
<span class="w-2 h-2 bg-[#EB3C3C] rounded-full mr-2"></span>
|
||||||
法院风险概览
|
司法风险概览
|
||||||
</h3>
|
</h3>
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
{{ courtRiskInfos?.length || 0 }}
|
{{ totalListCaseCount }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-[#666666]">法院案件数</div>
|
<div class="text-sm text-[#666666]">案件明细数</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
{{ courtRiskInfos?.length > 0 ? '有风险' : '无风险' }}
|
{{ hasJudicialContent ? '有风险' : '无风险' }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-[#666666]">风险状态</div>
|
<div class="text-sm text-[#666666]">风险状态</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -26,150 +72,206 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 案件类型统计 -->
|
<!-- 案件类型统计 -->
|
||||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="mb-4">
|
<div v-if="hasJudicialContent" class="mb-4">
|
||||||
<div class="bg-white rounded-xl border border-[#DDDDDD] 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 mb-3">
|
||||||
<div class="flex items-center">
|
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||||
<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" />
|
||||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
|
||||||
</div>
|
|
||||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid grid-cols-3 md:grid-cols-5 gap-2">
|
||||||
<!-- 案件类型统计 -->
|
<div
|
||||||
<div class="grid grid-cols-3 md:grid-cols-6 gap-2">
|
v-for="group in JUDICIAL_CASE_GROUPS"
|
||||||
<div v-for="(typeInfo, type) in caseTypeStats" :key="type" class="text-center p-2 rounded-lg border"
|
:key="group.listKey"
|
||||||
:class="typeInfo.count > 0 ? 'bg-[#F9ECEC] border border-[#F0CACA]' : 'bg-[#ECF9EF] border border-[#CAECD3]'">
|
class="text-center p-2 rounded-lg border"
|
||||||
|
:class="(caseTypeStats[group.name]?.count || 0) > 0
|
||||||
|
? 'bg-[#F9ECEC] border-[#F0CACA]'
|
||||||
|
: 'bg-[#ECF9EF] border-[#CAECD3]'"
|
||||||
|
>
|
||||||
<div class="flex justify-center mb-1">
|
<div class="flex justify-center mb-1">
|
||||||
<img :src="getCaseTypeIconPath(type)" alt="" class="w-8 h-8 object-contain" />
|
<img :src="getCaseTypeIconPath(group.name)" alt="" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div
|
||||||
{{ typeInfo.count }}
|
class="text-base font-bold"
|
||||||
</div>
|
:class="(caseTypeStats[group.name]?.count || 0) > 0 ? 'text-[#EB3C3C]' : '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'">
|
{{ caseTypeStats[group.name]?.count || 0 }}
|
||||||
{{ typeInfo.count > 0 ? '有风险' : '无风险' }}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="text-xs text-[#666666] leading-tight">{{ group.shortName }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 法院案件详情 -->
|
<!-- 案件详情 -->
|
||||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="space-y-4">
|
<div v-if="hasJudicialContent" class="space-y-4">
|
||||||
<!-- 按案件类型分组显示 -->
|
|
||||||
<div v-for="(cases, caseType) in groupedCases" :key="caseType" class="case-section">
|
<div v-for="(cases, caseType) in groupedCases" :key="caseType" class="case-section">
|
||||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||||
<div class="flex items-center mb-3">
|
<div class="flex items-center mb-3">
|
||||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
<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" />
|
<img :src="getCaseTypeIconPath(caseType)" alt="" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<span class="font-bold text-[#333333]">{{ getCaseTypeName(caseType) }}</span>
|
<span class="font-bold text-[#333333]">{{ caseType }}</span>
|
||||||
<span class="ml-2 px-2 py-1 rounded-full text-xs font-medium" :class="getCaseTypeBadgeStyle(caseType)">
|
<span class="ml-2 px-2 py-1 rounded-full text-xs font-medium" :class="getCaseTypeBadgeStyle(caseType)">
|
||||||
{{ cases.length }}件
|
{{ cases.length }}件
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<van-collapse v-model="activeCases[caseType]" accordion>
|
<van-collapse v-model="activeCases[caseType]" accordion>
|
||||||
<van-collapse-item v-for="(caseItem, index) in cases" :key="`${caseType}-${index}`"
|
<van-collapse-item
|
||||||
:name="`${caseType}-${index}`" :class="getCaseItemClass(caseItem)">
|
v-for="(caseItem, index) in cases"
|
||||||
|
:key="`${caseType}-${index}`"
|
||||||
|
:name="`${caseType}-${index}`"
|
||||||
|
:class="getCaseItemClass(caseItem)"
|
||||||
|
>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="case-header">
|
<div class="case-header">
|
||||||
<div class="case-number">{{ caseItem.caseNumber || '案号未知' }}</div>
|
<div class="case-number">{{ getCaseTitle(caseItem) }}</div>
|
||||||
<div class="case-status" :class="getCaseStatusClass(caseItem.caseStatus)">
|
<div v-if="getCaseStatus(caseItem)" class="case-status" :class="getCaseStatusClass(getCaseStatus(caseItem))">
|
||||||
{{ caseItem.caseStatus || '状态未知' }}
|
{{ getCaseStatus(caseItem) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="case-details-content">
|
<div class="case-details-content">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
<!-- 标准司法案件 -->
|
||||||
<div class="detail-item">
|
<template v-if="caseItem._kind === 'standard'">
|
||||||
<span class="label">案件类型:</span>
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<span class="value">{{ caseItem.caseType || '-' }}</span>
|
<div class="detail-item">
|
||||||
|
<span class="label">案号</span>
|
||||||
|
<span class="value">{{ caseItem.caseNumber || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">案件类型</span>
|
||||||
|
<span class="value">{{ caseItem.najlx || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">诉讼地位</span>
|
||||||
|
<span class="value">{{ caseItem.nssdw || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">案件进展</span>
|
||||||
|
<span class="value">{{ caseItem.caseStatus || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">经办法院</span>
|
||||||
|
<span class="value">{{ caseItem.njbfy || caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">审理程序</span>
|
||||||
|
<span class="value">{{ caseItem.nslcx || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案时间</span>
|
||||||
|
<span class="value">{{ caseItem.dlarq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案时间</span>
|
||||||
|
<span class="value">{{ caseItem.djarq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案方式</span>
|
||||||
|
<span class="value">{{ caseItem.njafs || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">胜诉估计</span>
|
||||||
|
<span class="value">{{ caseItem.npjVictory || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">起诉标的</span>
|
||||||
|
<span class="value">{{ caseItem.nqsbdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案标的</span>
|
||||||
|
<span class="value">{{ caseItem.njabdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">申请执行标的</span>
|
||||||
|
<span class="value">{{ caseItem.nsqzxbdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">实际到位金额</span>
|
||||||
|
<span class="value">{{ caseItem.nsjdwje || '-' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.nlaayTree" class="detail-item mt-2">
|
||||||
<span class="label">审理法院:</span>
|
<span class="label">案由</span>
|
||||||
<span class="value">{{ caseItem.court || '-' }}</span>
|
<span class="value">{{ caseItem.nlaayTree }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.cdsrxx" class="mt-3">
|
||||||
<span class="label">诉讼地位:</span>
|
<div class="text-sm text-[#666666] mb-1">当事人</div>
|
||||||
<span class="value">{{ caseItem.litigantType || '-' }}</span>
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700">
|
||||||
|
{{ truncateText(caseItem.cdsrxx, 300) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.cgkwsPjjg" class="mt-3">
|
||||||
<span class="label">立案时间:</span>
|
<div class="text-sm text-[#666666] mb-1">判决结果</div>
|
||||||
<span class="value">{{ caseItem.filingTime || '-' }}</span>
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700 leading-relaxed">
|
||||||
|
{{ truncateText(caseItem.cgkwsPjjg, 400) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
</template>
|
||||||
<span class="label">结案时间:</span>
|
|
||||||
<span class="value">{{ caseItem.disposalTime || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案件状态:</span>
|
|
||||||
<span class="value" :class="getCaseStatusTextClass(caseItem.caseStatus)">
|
|
||||||
{{ caseItem.caseStatus || '-' }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item" v-if="caseItem.executionAmount">
|
|
||||||
<span class="label">执行金额:</span>
|
|
||||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item" v-if="caseItem.repaidAmount">
|
|
||||||
<span class="label">已还款金额:</span>
|
|
||||||
<span class="value text-green-600 font-bold">{{ caseItem.repaidAmount }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案由:</span>
|
|
||||||
<span class="value">{{ caseItem.caseReason || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">结案方式:</span>
|
|
||||||
<span class="value">{{ caseItem.disposalMethod || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">判决结果:</span>
|
|
||||||
<span class="value">{{ caseItem.judgmentResult || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案件分类:</span>
|
|
||||||
<span class="value">{{ caseItem.type || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 匹配度信息 -->
|
<!-- 失信公告 -->
|
||||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-[#EBF5FF] rounded-lg">
|
<template v-else-if="caseItem._kind === 'disin'">
|
||||||
<div class="flex items-center justify-between">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<span class="text-sm text-[#666666]">身份匹配度</span>
|
<div class="detail-item">
|
||||||
<span class="text-sm font-bold text-[#2B79EE]">
|
<span class="label">案号</span>
|
||||||
{{ (caseItem.matchScore * 100).toFixed(1) }}%
|
<span class="value">{{ caseItem.ah || '-' }}</span>
|
||||||
</span>
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">执行法院</span>
|
||||||
|
<span class="value">{{ caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案日期</span>
|
||||||
|
<span class="value">{{ caseItem.larq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">发布日期</span>
|
||||||
|
<span class="value">{{ caseItem.fbrq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">金额估计</span>
|
||||||
|
<span class="value">{{ caseItem.pjjeGj || '-' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 w-full bg-gray-200 rounded-full h-2">
|
<div v-if="caseItem.yw" class="mt-3">
|
||||||
<div class="h-2 rounded-full transition-all duration-500"
|
<div class="text-sm text-[#666666] mb-1">生效法律文书确定的义务</div>
|
||||||
:class="getMatchScoreBarStyle(caseItem.matchScore)"
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ truncateText(caseItem.yw, 300) }}</div>
|
||||||
:style="{ width: (caseItem.matchScore * 100) + '%' }"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div v-if="caseItem.lxqk" class="mt-3">
|
||||||
|
<div class="text-sm text-[#666666] mb-1">履行情况</div>
|
||||||
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ caseItem.lxqk }}</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<!-- 内容摘要 -->
|
<!-- 限高公告 -->
|
||||||
<div v-if="caseItem.contentSummary" class="mt-3">
|
<template v-else-if="caseItem._kind === 'limit'">
|
||||||
<div class="text-sm text-[#666666] mb-2">案件摘要:</div>
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<div class="bg-gray-50 rounded-lg p-3 border">
|
<div class="detail-item">
|
||||||
<p class="text-sm text-gray-700 leading-relaxed">
|
<span class="label">案号</span>
|
||||||
{{ formatContentSummary(caseItem.contentSummary) }}
|
<span class="value">{{ caseItem.ah || '-' }}</span>
|
||||||
</p>
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">执行法院</span>
|
||||||
|
<span class="value">{{ caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案时间</span>
|
||||||
|
<span class="value">{{ caseItem.larq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">发布时间</span>
|
||||||
|
<span class="value">{{ caseItem.fbrq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="caseItem.orglegalName" class="detail-item">
|
||||||
|
<span class="label">企业名称</span>
|
||||||
|
<span class="value">{{ caseItem.orglegalName }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
|
|
||||||
<!-- 执行公告ID -->
|
|
||||||
<div v-if="caseItem.executionAnnouncementId" class="mt-3">
|
|
||||||
<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 }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</van-collapse-item>
|
</van-collapse-item>
|
||||||
</van-collapse>
|
</van-collapse>
|
||||||
@@ -177,65 +279,59 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 高风险警告 -->
|
<div v-if="hasJudicialContent" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] 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="flex items-start">
|
||||||
<div class="mr-3 mt-1 flex-shrink-0">
|
<div class="mr-3 mt-1 flex-shrink-0">
|
||||||
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">法院风险警告</h4>
|
<h4 class="font-semibold text-[#EB3C3C] mb-2">司法风险警告</h4>
|
||||||
<p class="text-[#666666] text-sm">
|
<p class="text-[#666666] text-sm">
|
||||||
检测到法院相关案件记录,存在司法风险,建议立即停止相关业务并进行详细核实。
|
检测到司法相关记录,建议结合案件类型与诉讼地位进行审慎评估。
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-2">
|
<div v-if="activeCaseTypeNames.length" class="mt-2 text-sm">
|
||||||
<span class="text-[#666666] font-medium">涉及案件类型:</span>
|
<span class="text-[#666666] font-medium">涉及类型:</span>
|
||||||
<span class="text-[#EB3C3C]">{{ getCaseTypesList.join('、') }}</span>
|
<span class="text-[#EB3C3C]">{{ activeCaseTypeNames.join('、') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 无风险提示 -->
|
<div
|
||||||
<div v-if="!courtRiskInfos || courtRiskInfos.length === 0"
|
v-if="!hasJudicialContent"
|
||||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg">
|
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg"
|
||||||
|
>
|
||||||
<div class="flex items-start">
|
<div class="flex items-start">
|
||||||
<div class="mr-3 mt-1">
|
<div class="mr-3 mt-1">
|
||||||
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="font-semibold text-green-600 mb-2">法院风险核验通过</h4>
|
<h4 class="font-semibold text-green-600 mb-2">司法信息核验通过</h4>
|
||||||
<p class="text-green-600 text-sm">
|
<p class="text-green-600 text-sm">未检测到相关司法案件明细,司法风险较低。</p>
|
||||||
未检测到法院相关案件记录,司法风险较低。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 案件类型说明 -->
|
|
||||||
<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>
|
|
||||||
<div><strong>执行案件:</strong>强制执行相关案件</div>
|
|
||||||
<div><strong>非诉保全审查案件:</strong>财产保全等非诉讼案件</div>
|
|
||||||
<div><strong>强制清算与破产案件:</strong>企业清算破产相关案件</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 温馨提示 -->
|
|
||||||
<LRemark
|
<LRemark
|
||||||
content="法院风险信息展示申请人的司法风险情况,包括民事案件、执行案件、失信记录和限高消费等。数据来源于全国法院执行信息公开网等权威司法数据库。失信和限高记录对个人信用影响极大,会限制高消费和金融服务。执行案件可能涉及财产冻结和强制执行。建议对有司法风险记录的申请进行重点审查。" />
|
content="个人司法信息来源于法院公开数据,包括民事、刑事、行政、执行等案件及失信、限高公告。字段与接口文档 judicialLeaseReport 结构一致。建议重点关注被告身份、未结案及被执行类记录。"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LTitle from '@/components/LTitle.vue'
|
import LTitle from '@/components/LTitle.vue'
|
||||||
import LRemark from '@/components/LRemark.vue'
|
import LRemark from '@/components/LRemark.vue'
|
||||||
import { ref, computed, onMounted, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
|
import {
|
||||||
|
JUDICIAL_CASE_GROUPS,
|
||||||
|
getJudicialLeaseReport,
|
||||||
|
hasJudicialLeaseContent,
|
||||||
|
getCaseTypeStatsFromReport,
|
||||||
|
getGroupedCasesFromReport,
|
||||||
|
getTotalCaseListCount,
|
||||||
|
truncateText,
|
||||||
|
} from '../utils/judicialLeaseReport.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
data: {
|
data: {
|
||||||
@@ -252,253 +348,102 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
notifyRiskStatus: {
|
notifyRiskStatus: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => { },
|
default: () => {},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
// 从data中解构出需要的字段
|
const judicialReport = computed(() => getJudicialLeaseReport(props.data))
|
||||||
const courtRiskInfos = computed(() => {
|
|
||||||
return props.data?.judiciaRiskInfos || []
|
const caseOverview = computed(() => judicialReport.value?.caseOverviewInfo || null)
|
||||||
})
|
|
||||||
|
const hasJudicialContent = computed(() => hasJudicialLeaseContent(judicialReport.value))
|
||||||
|
|
||||||
|
const caseTypeStats = computed(() => getCaseTypeStatsFromReport(judicialReport.value))
|
||||||
|
|
||||||
|
const groupedCases = computed(() => getGroupedCasesFromReport(judicialReport.value))
|
||||||
|
|
||||||
|
const totalListCaseCount = computed(() => getTotalCaseListCount(judicialReport.value))
|
||||||
|
|
||||||
|
const activeCaseTypeNames = computed(() =>
|
||||||
|
Object.keys(groupedCases.value).filter((name) => groupedCases.value[name]?.length)
|
||||||
|
)
|
||||||
|
|
||||||
// 折叠面板状态
|
|
||||||
const activeCases = ref({})
|
const activeCases = ref({})
|
||||||
|
|
||||||
// 是否有高风险案件
|
const getCaseTitle = (caseItem) => {
|
||||||
const hasHighRiskCases = computed(() => {
|
if (caseItem._kind === 'disin' || caseItem._kind === 'limit') {
|
||||||
return courtRiskInfos.value && courtRiskInfos.value.length > 0
|
return caseItem.ah || '案号未知'
|
||||||
})
|
|
||||||
|
|
||||||
// 获取案件类型列表
|
|
||||||
const getCaseTypesList = computed(() => {
|
|
||||||
if (!courtRiskInfos.value) return []
|
|
||||||
|
|
||||||
const types = [...new Set(courtRiskInfos.value.map(item => inferCaseType(item)))]
|
|
||||||
return types.filter(type => type !== '未知类型')
|
|
||||||
})
|
|
||||||
|
|
||||||
// 根据案件信息推断真实案件类型
|
|
||||||
const inferCaseType = (caseItem) => {
|
|
||||||
// 如果type字段已经是标准的6种类型之一,直接使用
|
|
||||||
const standardTypes = ['民事案件', '刑事案件', '行政案件', '执行案件', '非诉保全审查案件', '强制清算与破产案件']
|
|
||||||
if (standardTypes.includes(caseItem.type)) {
|
|
||||||
return caseItem.type
|
|
||||||
}
|
}
|
||||||
|
return caseItem.caseNumber || '案号未知'
|
||||||
// 根据caseType字段推断案件类型
|
|
||||||
const caseType = caseItem.caseType || ''
|
|
||||||
if (caseType.includes('刑事')) {
|
|
||||||
return '刑事案件'
|
|
||||||
} else if (caseType.includes('民事')) {
|
|
||||||
return '民事案件'
|
|
||||||
} else if (caseType.includes('行政')) {
|
|
||||||
return '行政案件'
|
|
||||||
} else if (caseType.includes('执行') || caseItem.type === '执行公告') {
|
|
||||||
return '执行案件'
|
|
||||||
} else if (caseType.includes('破产') || caseType.includes('清算')) {
|
|
||||||
return '强制清算与破产案件'
|
|
||||||
} else if (caseType.includes('保全') || caseItem.type === '非诉保全审查案件') {
|
|
||||||
return '非诉保全审查案件'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据原始type字段的值进行映射
|
|
||||||
if (caseItem.type === '涉案公告' && caseType.includes('刑事')) {
|
|
||||||
return '刑事案件'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 默认返回民事案件
|
|
||||||
return '民事案件'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按案件类型分组
|
const getCaseStatus = (caseItem) => {
|
||||||
const groupedCases = computed(() => {
|
if (caseItem._kind === 'disin') return '失信公告'
|
||||||
if (!courtRiskInfos.value) return {}
|
if (caseItem._kind === 'limit') return '限高公告'
|
||||||
|
return caseItem.caseStatus || ''
|
||||||
|
}
|
||||||
|
|
||||||
const grouped = {}
|
|
||||||
courtRiskInfos.value.forEach(caseItem => {
|
|
||||||
const type = inferCaseType(caseItem)
|
|
||||||
if (!grouped[type]) {
|
|
||||||
grouped[type] = []
|
|
||||||
}
|
|
||||||
grouped[type].push(caseItem)
|
|
||||||
})
|
|
||||||
|
|
||||||
return grouped
|
|
||||||
})
|
|
||||||
|
|
||||||
// 案件类型统计
|
|
||||||
const caseTypeStats = computed(() => {
|
|
||||||
const stats = {}
|
|
||||||
const allTypes = ['民事案件', '刑事案件', '行政案件', '执行案件', '非诉保全审查案件', '强制清算与破产案件']
|
|
||||||
|
|
||||||
// 初始化所有类型
|
|
||||||
allTypes.forEach(type => {
|
|
||||||
stats[type] = { count: 0 }
|
|
||||||
})
|
|
||||||
|
|
||||||
// 统计实际案件
|
|
||||||
if (courtRiskInfos.value) {
|
|
||||||
courtRiskInfos.value.forEach(caseItem => {
|
|
||||||
const type = inferCaseType(caseItem)
|
|
||||||
if (stats[type]) {
|
|
||||||
stats[type].count++
|
|
||||||
} else {
|
|
||||||
stats[type] = { count: 1 }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return stats
|
|
||||||
})
|
|
||||||
|
|
||||||
// 获取案件类型图标路径
|
|
||||||
const getCaseTypeIconPath = (type) => {
|
const getCaseTypeIconPath = (type) => {
|
||||||
const iconMap = {
|
const iconMap = {
|
||||||
'民事案件': () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
民事案件: () => 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/xs.png', import.meta.url).href,
|
||||||
'行政案件': () => new URL('@/assets/images/report/xz.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/zxaj.png', import.meta.url).href,
|
||||||
'非诉保全审查案件': () => new URL('@/assets/images/report/fsbq.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,
|
强制清算与破产案件: () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||||
'default': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href
|
管辖案件: () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||||
|
赔偿案件: () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||||
|
失信公告: () => new URL('@/assets/images/report/gfx.png', import.meta.url).href,
|
||||||
|
限高公告: () => new URL('@/assets/images/report/gfx.png', import.meta.url).href,
|
||||||
}
|
}
|
||||||
const getIcon = iconMap[type] || iconMap.default
|
const getIcon = iconMap[type] || (() => new URL('@/assets/images/report/zxaj.png', import.meta.url).href)
|
||||||
return getIcon()
|
return getIcon()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件类型名称
|
|
||||||
const getCaseTypeName = (type) => {
|
|
||||||
const nameMap = {
|
|
||||||
'民事案件': '民事案件',
|
|
||||||
'刑事案件': '刑事案件',
|
|
||||||
'行政案件': '行政案件',
|
|
||||||
'执行案件': '执行案件',
|
|
||||||
'非诉保全审查案件': '非诉保全审查案件',
|
|
||||||
'强制清算与破产案件': '强制清算与破产案件'
|
|
||||||
}
|
|
||||||
return nameMap[type] || '未知类型'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型简短名称(用于紧凑显示)
|
|
||||||
const getCaseTypeShortName = (type) => {
|
|
||||||
const shortNameMap = {
|
|
||||||
'民事案件': '民事',
|
|
||||||
'刑事案件': '刑事',
|
|
||||||
'行政案件': '行政',
|
|
||||||
'执行案件': '执行',
|
|
||||||
'非诉保全审查案件': '非诉保全',
|
|
||||||
'强制清算与破产案件': '清算破产'
|
|
||||||
}
|
|
||||||
return shortNameMap[type] || '未知'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型头部样式
|
|
||||||
const getCaseTypeHeaderStyle = (caseType) => {
|
|
||||||
const styleMap = {
|
|
||||||
'民事案件': 'bg-[#2B79EE]',
|
|
||||||
'刑事案件': 'bg-[#EB3C3C]',
|
|
||||||
'行政案件': 'bg-[#2B79EE]',
|
|
||||||
'执行案件': 'bg-[#D6943E]',
|
|
||||||
'非诉保全审查案件': 'bg-green-500',
|
|
||||||
'强制清算与破产案件': 'bg-[#666666]'
|
|
||||||
}
|
|
||||||
return styleMap[caseType] || 'bg-[#666666]'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型标签样式
|
|
||||||
const getCaseTypeBadgeStyle = (caseType) => {
|
const getCaseTypeBadgeStyle = (caseType) => {
|
||||||
const styleMap = {
|
const styleMap = {
|
||||||
'民事案件': 'bg-[#2B79EE1A] text-[#2B79EE]',
|
民事案件: 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||||
'刑事案件': 'bg-[#F9ECEC] text-[#EB3C3C]',
|
刑事案件: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
'行政案件': 'bg-[#EBF5FF] text-[#2B79EE]',
|
行政案件: 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||||
'执行案件': 'bg-[#FFF8E1] text-[#D6943E]',
|
执行案件: 'bg-[#FFF8E1] text-[#D6943E]',
|
||||||
'非诉保全审查案件': 'bg-[#ECF9EF] text-green-600',
|
非诉保全审查案件: 'bg-[#ECF9EF] text-green-600',
|
||||||
'强制清算与破产案件': 'bg-gray-100 text-[#666666]'
|
强制清算与破产案件: 'bg-gray-100 text-[#666666]',
|
||||||
|
失信公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
|
限高公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
}
|
}
|
||||||
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件项样式
|
|
||||||
const getCaseItemClass = (caseItem) => {
|
const getCaseItemClass = (caseItem) => {
|
||||||
if (caseItem.caseStatus === '已结案') return 'case-item-settled'
|
const status = getCaseStatus(caseItem)
|
||||||
if (caseItem.caseStatus === '执行中') return 'case-item-executing'
|
if (status === '已结案') return 'case-item-settled'
|
||||||
if (caseItem.caseStatus === '审理中') return 'case-item-hearing'
|
if (status === '执行中' || status === '未执行') return 'case-item-executing'
|
||||||
return 'case-item-default'
|
return 'case-item-default'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态样式
|
|
||||||
const getCaseStatusClass = (status) => {
|
const getCaseStatusClass = (status) => {
|
||||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
if (status === '未执行' || status === '失信公告') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
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'
|
return 'text-[#666666] bg-gray-100'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态文字样式
|
const initActiveCases = () => {
|
||||||
const getCaseStatusTextClass = (status) => {
|
Object.keys(groupedCases.value).forEach((caseType) => {
|
||||||
if (status === '已结案') return 'text-green-600'
|
if (groupedCases.value[caseType]?.length && !activeCases.value[caseType]) {
|
||||||
if (status === '执行中') return 'text-[#D6943E]'
|
activeCases.value[caseType] = `${caseType}-0`
|
||||||
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-[#2B79EE]'
|
|
||||||
if (score >= 0.7) return 'bg-yellow-500'
|
|
||||||
if (score >= 0.6) return 'bg-[#D6943E]'
|
|
||||||
return 'bg-[#EB3C3C]'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 格式化内容摘要
|
|
||||||
const formatContentSummary = (summary) => {
|
|
||||||
if (!summary) return ''
|
|
||||||
|
|
||||||
// 如果是JSON格式,尝试解析
|
|
||||||
if (summary.startsWith('{') && summary.includes('id')) {
|
|
||||||
try {
|
|
||||||
const parsed = JSON.parse(summary)
|
|
||||||
return parsed.content || parsed.summary || '详细信息请查看完整报告'
|
|
||||||
} catch (e) {
|
|
||||||
return summary.substring(0, 200) + (summary.length > 200 ? '...' : '')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 普通文本,限制长度
|
|
||||||
return summary.length > 200 ? summary.substring(0, 200) + '...' : summary
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取默认展开的案件名称
|
|
||||||
const getDefaultActiveCase = (caseType) => {
|
|
||||||
return `${caseType}-0` // 默认展开每种类型的第一个案件
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化折叠面板状态
|
|
||||||
onMounted(() => {
|
|
||||||
Object.keys(groupedCases.value).forEach(caseType => {
|
|
||||||
if (groupedCases.value[caseType].length > 0) {
|
|
||||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
// 监听数据变化
|
watch(
|
||||||
watch(() => props.data, (newData) => {
|
() => props.data?.judicialLeaseReport,
|
||||||
if (newData?.judiciaRiskInfos) {
|
() => {
|
||||||
Object.keys(groupedCases.value).forEach(caseType => {
|
initActiveCases()
|
||||||
if (groupedCases.value[caseType].length > 0 && !activeCases.value[caseType]) {
|
},
|
||||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
{ immediate: true, deep: true }
|
||||||
}
|
)
|
||||||
})
|
|
||||||
}
|
|
||||||
}, { immediate: true, deep: true })
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -535,42 +480,37 @@ watch(() => props.data, (newData) => {
|
|||||||
color: #666666;
|
color: #666666;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 400;
|
|
||||||
text-align: right;
|
text-align: right;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 案件项样式
|
|
||||||
:deep(.van-collapse-item) {
|
:deep(.van-collapse-item) {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&.case-item-settled {
|
&.case-item-settled {
|
||||||
border: 1px solid #CAECD3;
|
border: 1px solid #caecd3;
|
||||||
background-color: #FBFDFC;
|
background-color: #fbfdfc;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.case-item-executing {
|
&.case-item-executing {
|
||||||
border: 1px solid #FFE082;
|
border: 1px solid #ffe082;
|
||||||
background-color: #FFFDF9;
|
background-color: #fffdf9;
|
||||||
}
|
|
||||||
|
|
||||||
&.case-item-hearing {
|
|
||||||
border: 1px solid #EBF5FF;
|
|
||||||
background-color: #FAFDFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.case-item-default {
|
&.case-item-default {
|
||||||
border: 1px solid #DDDDDD;
|
border: 1px solid #dddddd;
|
||||||
background-color: #f9fafb;
|
background-color: #f9fafb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -584,8 +524,4 @@ watch(() => props.data, (newData) => {
|
|||||||
padding: 0 16px 16px;
|
padding: 0 16px 16px;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.van-collapse-item__wrapper) {
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -209,6 +209,13 @@ const riskListConfig = {
|
|||||||
severity: 'medium',
|
severity: 'medium',
|
||||||
color: 'orange'
|
color: 'orange'
|
||||||
},
|
},
|
||||||
|
mediumRelationRisk: {
|
||||||
|
name: '中介关联风险',
|
||||||
|
description: '命中中介关联风险名单',
|
||||||
|
icon: '🔗',
|
||||||
|
severity: 'high',
|
||||||
|
color: 'red'
|
||||||
|
},
|
||||||
phoneNumberStatus: {
|
phoneNumberStatus: {
|
||||||
name: '手机号码状态异常',
|
name: '手机号码状态异常',
|
||||||
description: '手机号码状态存在异常',
|
description: '手机号码状态存在异常',
|
||||||
|
|||||||
@@ -208,6 +208,20 @@ const riskConfig = {
|
|||||||
isHighRisk: true,
|
isHighRisk: true,
|
||||||
icon: '🎰',
|
icon: '🎰',
|
||||||
color: 'red'
|
color: 'red'
|
||||||
|
},
|
||||||
|
registerRisk: {
|
||||||
|
name: '公证仲裁执行风险',
|
||||||
|
description: '该地区不予执行先享后付案件',
|
||||||
|
isHighRisk: true,
|
||||||
|
icon: '📜',
|
||||||
|
color: 'red'
|
||||||
|
},
|
||||||
|
relationRisk: {
|
||||||
|
name: '命中中介关联风险',
|
||||||
|
description: '该用户与中介深度关联',
|
||||||
|
isHighRisk: true,
|
||||||
|
icon: '🔗',
|
||||||
|
color: 'red'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,10 +39,8 @@
|
|||||||
<!-- 关联风险监督 -->
|
<!-- 关联风险监督 -->
|
||||||
<RiskSupervisionSection :data="{ riskSupervision: data.riskSupervision }" />
|
<RiskSupervisionSection :data="{ riskSupervision: data.riskSupervision }" />
|
||||||
|
|
||||||
<!-- 法院风险信息 -->
|
<!-- 个人司法信息 -->
|
||||||
<!-- <CourtRiskInfoSection
|
<CourtRiskInfoSection :data="{ judicialLeaseReport: data.judicialLeaseReport }" />
|
||||||
:data="{ judiciaRiskInfos: data.judiciaRiskInfos }"
|
|
||||||
/> -->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
88
report-viewer/src/ui/DWBG6A2C/utils/judicialLeaseReport.js
Normal file
88
report-viewer/src/ui/DWBG6A2C/utils/judicialLeaseReport.js
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/**
|
||||||
|
* 司南报告 judicialLeaseReport 结构解析
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const JUDICIAL_CASE_GROUPS = [
|
||||||
|
{ listKey: 'civilCases', name: '民事案件', shortName: '民事', countField: 'civilCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'criminalCases', name: '刑事案件', shortName: '刑事', countField: 'criminalCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'administrativeCases', name: '行政案件', shortName: '行政', countField: 'administrativeCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'preservationCases', name: '非诉保全审查案件', shortName: '非诉保全', countField: 'preservationCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'enforcementCases', name: '执行案件', shortName: '执行', countField: 'enforcementCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'supervisionCases', name: '管辖案件', shortName: '管辖', countField: 'supervisionCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'compensationCases', name: '赔偿案件', shortName: '赔偿', countField: 'compensationCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'bankruptcyCases', name: '强制清算与破产案件', shortName: '清算破产', countField: 'bankruptcyCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'disinCases', name: '失信公告', shortName: '失信', countField: null, kind: 'disin' },
|
||||||
|
{ listKey: 'limitCases', name: '限高公告', shortName: '限高', countField: null, kind: 'limit' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export function getJudicialLeaseReport(data) {
|
||||||
|
return data?.judicialLeaseReport || null
|
||||||
|
}
|
||||||
|
|
||||||
|
function listHasItems(list) {
|
||||||
|
return Array.isArray(list) && list.length > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hasJudicialLeaseContent(report) {
|
||||||
|
if (!report) return false
|
||||||
|
|
||||||
|
const overview = report.caseOverviewInfo || {}
|
||||||
|
const courtInfo = report.courtInfo || {}
|
||||||
|
const multi = courtInfo.newMultCourtInfo || {}
|
||||||
|
|
||||||
|
if (Number(overview.beigaoTotalCasesCounts) > 0) return true
|
||||||
|
if (Number(overview.executionCaseCounts) > 0) return true
|
||||||
|
if (Number(overview.disinCaseCounts) > 0) return true
|
||||||
|
if (Number(overview.limitCaseCounts) > 0) return true
|
||||||
|
|
||||||
|
for (const group of JUDICIAL_CASE_GROUPS) {
|
||||||
|
const count = group.countField ? Number(courtInfo[group.countField] || 0) : 0
|
||||||
|
if (count > 0) return true
|
||||||
|
if (listHasItems(multi[group.listKey])) return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCaseTypeStatsFromReport(report) {
|
||||||
|
const courtInfo = report?.courtInfo || {}
|
||||||
|
const multi = courtInfo.newMultCourtInfo || {}
|
||||||
|
const stats = {}
|
||||||
|
|
||||||
|
JUDICIAL_CASE_GROUPS.forEach((group) => {
|
||||||
|
let count = 0
|
||||||
|
if (group.countField) {
|
||||||
|
count = Number(courtInfo[group.countField] || 0)
|
||||||
|
}
|
||||||
|
if (count === 0 && listHasItems(multi[group.listKey])) {
|
||||||
|
count = multi[group.listKey].length
|
||||||
|
}
|
||||||
|
stats[group.name] = { count, listKey: group.listKey, kind: group.kind }
|
||||||
|
})
|
||||||
|
|
||||||
|
return stats
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getGroupedCasesFromReport(report) {
|
||||||
|
const multi = report?.courtInfo?.newMultCourtInfo || {}
|
||||||
|
const grouped = {}
|
||||||
|
|
||||||
|
JUDICIAL_CASE_GROUPS.forEach((group) => {
|
||||||
|
const cases = multi[group.listKey]
|
||||||
|
if (listHasItems(cases)) {
|
||||||
|
grouped[group.name] = cases.map((item) => ({ ...item, _kind: group.kind }))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return grouped
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTotalCaseListCount(report) {
|
||||||
|
const grouped = getGroupedCasesFromReport(report)
|
||||||
|
return Object.values(grouped).reduce((sum, list) => sum + list.length, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function truncateText(text, maxLen = 200) {
|
||||||
|
if (!text || typeof text !== 'string') return ''
|
||||||
|
return text.length > maxLen ? `${text.slice(0, maxLen)}...` : text
|
||||||
|
}
|
||||||
@@ -204,13 +204,13 @@ export function splitDWBG6A2CForTabs(reportData) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 14. 法院风险信息
|
// 14. 个人司法信息
|
||||||
if (originalData.judiciaRiskInfos && originalData.judiciaRiskInfos.length > 0) {
|
if (originalData.judicialLeaseReport) {
|
||||||
splitModules.push({
|
splitModules.push({
|
||||||
data: {
|
data: {
|
||||||
apiID: 'DWBG6A2C_CourtRiskInfo',
|
apiID: 'DWBG6A2C_CourtRiskInfo',
|
||||||
data: {
|
data: {
|
||||||
judiciaRiskInfos: originalData.judiciaRiskInfos
|
judicialLeaseReport: originalData.judicialLeaseReport
|
||||||
},
|
},
|
||||||
success: true,
|
success: true,
|
||||||
timestamp: baseTimestamp
|
timestamp: baseTimestamp
|
||||||
@@ -269,7 +269,8 @@ export function formatPhoneStatus(status) {
|
|||||||
export function formatVerificationResult(result) {
|
export function formatVerificationResult(result) {
|
||||||
const resultMap = {
|
const resultMap = {
|
||||||
'0': { color: 'text-green-600', bg: 'bg-green-100', text: '一致', icon: '✅' },
|
'0': { color: 'text-green-600', bg: 'bg-green-100', text: '一致', icon: '✅' },
|
||||||
'1': { color: 'text-red-600', bg: 'bg-red-100', text: '不一致或不存在', icon: '❌' }
|
'1': { color: 'text-red-600', bg: 'bg-red-100', text: '不一致或不存在', icon: '❌' },
|
||||||
|
'-1': { color: 'text-gray-600', bg: 'bg-gray-100', text: '查无记录', icon: '❓' }
|
||||||
};
|
};
|
||||||
|
|
||||||
return resultMap[result] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' };
|
return resultMap[result] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' };
|
||||||
|
|||||||
@@ -467,7 +467,7 @@ const featureMap = {
|
|||||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
||||||
},
|
},
|
||||||
DWBG6A2C_CourtRiskInfo: {
|
DWBG6A2C_CourtRiskInfo: {
|
||||||
name: "法院风险信息",
|
name: "个人司法信息",
|
||||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/CourtRiskInfoSection.vue")),
|
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/CourtRiskInfoSection.vue")),
|
||||||
},
|
},
|
||||||
// 贷款风险报告
|
// 贷款风险报告
|
||||||
|
|||||||
@@ -1,24 +1,70 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="bg-white rounded-xl shadow-sm p-6">
|
<div class="bg-white rounded-xl shadow-sm p-6">
|
||||||
<LTitle title="法院风险信息" type="red" />
|
<LTitle title="个人司法信息" type="red" />
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<!-- 法院风险概览 -->
|
<!-- 案件概览 -->
|
||||||
|
<div v-if="caseOverview" 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-3 text-sm">
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告总案件数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalCasesCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告未结案数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalWeiCaseCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被告涉案金额</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.beigaoTotalCaseAmounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">被执行案件数</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.executionCaseCounts ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">失信命中</span>
|
||||||
|
<span :class="caseOverview.disinCaseCounts ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
|
{{ caseOverview.disinCaseCounts ? '命中' : '未命中' }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">限高命中</span>
|
||||||
|
<span :class="caseOverview.limitCaseCounts ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
|
{{ caseOverview.limitCaseCounts ? '命中' : '未命中' }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1 border-b border-red-100">
|
||||||
|
<span class="text-[#666666]">关联企业</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.affiliateCompany ?? 0 }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between py-1">
|
||||||
|
<span class="text-[#666666]">最近案件年份</span>
|
||||||
|
<span class="font-semibold text-[#333333]">{{ caseOverview.leastCaseTime || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 概览统计 -->
|
||||||
<div class="bg-gradient-to-r from-[#F9ECEC] to-[#FCE8E8] rounded-lg p-4 mb-4">
|
<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">
|
<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>
|
<span class="w-2 h-2 bg-[#EB3C3C] rounded-full mr-2"></span>
|
||||||
法院风险概览
|
司法风险概览
|
||||||
</h3>
|
</h3>
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
{{ courtRiskInfos?.length || 0 }}
|
{{ totalListCaseCount }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-[#666666]">法院案件数</div>
|
<div class="text-sm text-[#666666]">案件明细数</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||||
{{ courtRiskInfos?.length > 0 ? '有风险' : '无风险' }}
|
{{ hasJudicialContent ? '有风险' : '无风险' }}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm text-[#666666]">风险状态</div>
|
<div class="text-sm text-[#666666]">风险状态</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -26,150 +72,206 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 案件类型统计 -->
|
<!-- 案件类型统计 -->
|
||||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="mb-4">
|
<div v-if="hasJudicialContent" class="mb-4">
|
||||||
<div class="bg-white rounded-xl border border-[#DDDDDD] 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 mb-3">
|
||||||
<div class="flex items-center">
|
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||||
<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" />
|
||||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
|
||||||
</div>
|
|
||||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="grid grid-cols-3 md:grid-cols-5 gap-2">
|
||||||
<!-- 案件类型统计 -->
|
<div
|
||||||
<div class="grid grid-cols-3 md:grid-cols-6 gap-2">
|
v-for="group in JUDICIAL_CASE_GROUPS"
|
||||||
<div v-for="(typeInfo, type) in caseTypeStats" :key="type" class="text-center p-2 rounded-lg border"
|
:key="group.listKey"
|
||||||
:class="typeInfo.count > 0 ? 'bg-[#F9ECEC] border border-[#F0CACA]' : 'bg-[#ECF9EF] border border-[#CAECD3]'">
|
class="text-center p-2 rounded-lg border"
|
||||||
|
:class="(caseTypeStats[group.name]?.count || 0) > 0
|
||||||
|
? 'bg-[#F9ECEC] border-[#F0CACA]'
|
||||||
|
: 'bg-[#ECF9EF] border-[#CAECD3]'"
|
||||||
|
>
|
||||||
<div class="flex justify-center mb-1">
|
<div class="flex justify-center mb-1">
|
||||||
<img :src="getCaseTypeIconPath(type)" alt="" class="w-8 h-8 object-contain" />
|
<img :src="getCaseTypeIconPath(group.name)" alt="" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
<div
|
||||||
{{ typeInfo.count }}
|
class="text-base font-bold"
|
||||||
</div>
|
:class="(caseTypeStats[group.name]?.count || 0) > 0 ? 'text-[#EB3C3C]' : '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'">
|
{{ caseTypeStats[group.name]?.count || 0 }}
|
||||||
{{ typeInfo.count > 0 ? '有风险' : '无风险' }}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="text-xs text-[#666666] leading-tight">{{ group.shortName }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 法院案件详情 -->
|
<!-- 案件详情 -->
|
||||||
<div v-if="courtRiskInfos && courtRiskInfos.length > 0" class="space-y-4">
|
<div v-if="hasJudicialContent" class="space-y-4">
|
||||||
<!-- 按案件类型分组显示 -->
|
|
||||||
<div v-for="(cases, caseType) in groupedCases" :key="caseType" class="case-section">
|
<div v-for="(cases, caseType) in groupedCases" :key="caseType" class="case-section">
|
||||||
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
<div class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||||
<div class="flex items-center mb-3">
|
<div class="flex items-center mb-3">
|
||||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
<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" />
|
<img :src="getCaseTypeIconPath(caseType)" alt="" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<span class="font-bold text-[#333333]">{{ getCaseTypeName(caseType) }}</span>
|
<span class="font-bold text-[#333333]">{{ caseType }}</span>
|
||||||
<span class="ml-2 px-2 py-1 rounded-full text-xs font-medium" :class="getCaseTypeBadgeStyle(caseType)">
|
<span class="ml-2 px-2 py-1 rounded-full text-xs font-medium" :class="getCaseTypeBadgeStyle(caseType)">
|
||||||
{{ cases.length }}件
|
{{ cases.length }}件
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<van-collapse v-model="activeCases[caseType]" accordion>
|
<van-collapse v-model="activeCases[caseType]" accordion>
|
||||||
<van-collapse-item v-for="(caseItem, index) in cases" :key="`${caseType}-${index}`"
|
<van-collapse-item
|
||||||
:name="`${caseType}-${index}`" :class="getCaseItemClass(caseItem)">
|
v-for="(caseItem, index) in cases"
|
||||||
|
:key="`${caseType}-${index}`"
|
||||||
|
:name="`${caseType}-${index}`"
|
||||||
|
:class="getCaseItemClass(caseItem)"
|
||||||
|
>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="case-header">
|
<div class="case-header">
|
||||||
<div class="case-number">{{ caseItem.caseNumber || '案号未知' }}</div>
|
<div class="case-number">{{ getCaseTitle(caseItem) }}</div>
|
||||||
<div class="case-status" :class="getCaseStatusClass(caseItem.caseStatus)">
|
<div v-if="getCaseStatus(caseItem)" class="case-status" :class="getCaseStatusClass(getCaseStatus(caseItem))">
|
||||||
{{ caseItem.caseStatus || '状态未知' }}
|
{{ getCaseStatus(caseItem) }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="case-details-content">
|
<div class="case-details-content">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
<!-- 标准司法案件 -->
|
||||||
<div class="detail-item">
|
<template v-if="caseItem._kind === 'standard'">
|
||||||
<span class="label">案件类型:</span>
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<span class="value">{{ caseItem.caseType || '-' }}</span>
|
<div class="detail-item">
|
||||||
|
<span class="label">案号</span>
|
||||||
|
<span class="value">{{ caseItem.caseNumber || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">案件类型</span>
|
||||||
|
<span class="value">{{ caseItem.najlx || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">诉讼地位</span>
|
||||||
|
<span class="value">{{ caseItem.nssdw || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">案件进展</span>
|
||||||
|
<span class="value">{{ caseItem.caseStatus || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">经办法院</span>
|
||||||
|
<span class="value">{{ caseItem.njbfy || caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">审理程序</span>
|
||||||
|
<span class="value">{{ caseItem.nslcx || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案时间</span>
|
||||||
|
<span class="value">{{ caseItem.dlarq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案时间</span>
|
||||||
|
<span class="value">{{ caseItem.djarq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案方式</span>
|
||||||
|
<span class="value">{{ caseItem.njafs || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">胜诉估计</span>
|
||||||
|
<span class="value">{{ caseItem.npjVictory || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">起诉标的</span>
|
||||||
|
<span class="value">{{ caseItem.nqsbdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">结案标的</span>
|
||||||
|
<span class="value">{{ caseItem.njabdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">申请执行标的</span>
|
||||||
|
<span class="value">{{ caseItem.nsqzxbdje || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">实际到位金额</span>
|
||||||
|
<span class="value">{{ caseItem.nsjdwje || '-' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.nlaayTree" class="detail-item mt-2">
|
||||||
<span class="label">审理法院:</span>
|
<span class="label">案由</span>
|
||||||
<span class="value">{{ caseItem.court || '-' }}</span>
|
<span class="value">{{ caseItem.nlaayTree }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.cdsrxx" class="mt-3">
|
||||||
<span class="label">诉讼地位:</span>
|
<div class="text-sm text-[#666666] mb-1">当事人</div>
|
||||||
<span class="value">{{ caseItem.litigantType || '-' }}</span>
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700">
|
||||||
|
{{ truncateText(caseItem.cdsrxx, 300) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
<div v-if="caseItem.cgkwsPjjg" class="mt-3">
|
||||||
<span class="label">立案时间:</span>
|
<div class="text-sm text-[#666666] mb-1">判决结果</div>
|
||||||
<span class="value">{{ caseItem.filingTime || '-' }}</span>
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700 leading-relaxed">
|
||||||
|
{{ truncateText(caseItem.cgkwsPjjg, 400) }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="detail-item">
|
</template>
|
||||||
<span class="label">结案时间:</span>
|
|
||||||
<span class="value">{{ caseItem.disposalTime || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案件状态:</span>
|
|
||||||
<span class="value" :class="getCaseStatusTextClass(caseItem.caseStatus)">
|
|
||||||
{{ caseItem.caseStatus || '-' }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item" v-if="caseItem.executionAmount">
|
|
||||||
<span class="label">执行金额:</span>
|
|
||||||
<span class="value text-[#EB3C3C] font-bold">{{ caseItem.executionAmount }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item" v-if="caseItem.repaidAmount">
|
|
||||||
<span class="label">已还款金额:</span>
|
|
||||||
<span class="value text-green-600 font-bold">{{ caseItem.repaidAmount }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案由:</span>
|
|
||||||
<span class="value">{{ caseItem.caseReason || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">结案方式:</span>
|
|
||||||
<span class="value">{{ caseItem.disposalMethod || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">判决结果:</span>
|
|
||||||
<span class="value">{{ caseItem.judgmentResult || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="detail-item">
|
|
||||||
<span class="label">案件分类:</span>
|
|
||||||
<span class="value">{{ caseItem.type || '-' }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 匹配度信息 -->
|
<!-- 失信公告 -->
|
||||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-[#EBF5FF] rounded-lg">
|
<template v-else-if="caseItem._kind === 'disin'">
|
||||||
<div class="flex items-center justify-between">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<span class="text-sm text-[#666666]">身份匹配度</span>
|
<div class="detail-item">
|
||||||
<span class="text-sm font-bold text-[#2B79EE]">
|
<span class="label">案号</span>
|
||||||
{{ (caseItem.matchScore * 100).toFixed(1) }}%
|
<span class="value">{{ caseItem.ah || '-' }}</span>
|
||||||
</span>
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">执行法院</span>
|
||||||
|
<span class="value">{{ caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案日期</span>
|
||||||
|
<span class="value">{{ caseItem.larq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">发布日期</span>
|
||||||
|
<span class="value">{{ caseItem.fbrq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">金额估计</span>
|
||||||
|
<span class="value">{{ caseItem.pjjeGj || '-' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 w-full bg-gray-200 rounded-full h-2">
|
<div v-if="caseItem.yw" class="mt-3">
|
||||||
<div class="h-2 rounded-full transition-all duration-500"
|
<div class="text-sm text-[#666666] mb-1">生效法律文书确定的义务</div>
|
||||||
:class="getMatchScoreBarStyle(caseItem.matchScore)"
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ truncateText(caseItem.yw, 300) }}</div>
|
||||||
:style="{ width: (caseItem.matchScore * 100) + '%' }"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div v-if="caseItem.lxqk" class="mt-3">
|
||||||
|
<div class="text-sm text-[#666666] mb-1">履行情况</div>
|
||||||
|
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ caseItem.lxqk }}</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<!-- 内容摘要 -->
|
<!-- 限高公告 -->
|
||||||
<div v-if="caseItem.contentSummary" class="mt-3">
|
<template v-else-if="caseItem._kind === 'limit'">
|
||||||
<div class="text-sm text-[#666666] mb-2">案件摘要:</div>
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||||
<div class="bg-gray-50 rounded-lg p-3 border">
|
<div class="detail-item">
|
||||||
<p class="text-sm text-gray-700 leading-relaxed">
|
<span class="label">案号</span>
|
||||||
{{ formatContentSummary(caseItem.contentSummary) }}
|
<span class="value">{{ caseItem.ah || '-' }}</span>
|
||||||
</p>
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">执行法院</span>
|
||||||
|
<span class="value">{{ caseItem.zxfy || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">立案时间</span>
|
||||||
|
<span class="value">{{ caseItem.larq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="detail-item">
|
||||||
|
<span class="label">发布时间</span>
|
||||||
|
<span class="value">{{ caseItem.fbrq || '-' }}</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="caseItem.orglegalName" class="detail-item">
|
||||||
|
<span class="label">企业名称</span>
|
||||||
|
<span class="value">{{ caseItem.orglegalName }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
|
|
||||||
<!-- 执行公告ID -->
|
|
||||||
<div v-if="caseItem.executionAnnouncementId" class="mt-3">
|
|
||||||
<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 }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</van-collapse-item>
|
</van-collapse-item>
|
||||||
</van-collapse>
|
</van-collapse>
|
||||||
@@ -177,65 +279,59 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 高风险警告 -->
|
<div v-if="hasJudicialContent" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] 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="flex items-start">
|
||||||
<div class="mr-3 mt-1 flex-shrink-0">
|
<div class="mr-3 mt-1 flex-shrink-0">
|
||||||
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">法院风险警告</h4>
|
<h4 class="font-semibold text-[#EB3C3C] mb-2">司法风险警告</h4>
|
||||||
<p class="text-[#666666] text-sm">
|
<p class="text-[#666666] text-sm">
|
||||||
检测到法院相关案件记录,存在司法风险,建议立即停止相关业务并进行详细核实。
|
检测到司法相关记录,建议结合案件类型与诉讼地位进行审慎评估。
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-2">
|
<div v-if="activeCaseTypeNames.length" class="mt-2 text-sm">
|
||||||
<span class="text-[#666666] font-medium">涉及案件类型:</span>
|
<span class="text-[#666666] font-medium">涉及类型:</span>
|
||||||
<span class="text-[#EB3C3C]">{{ getCaseTypesList.join('、') }}</span>
|
<span class="text-[#EB3C3C]">{{ activeCaseTypeNames.join('、') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 无风险提示 -->
|
<div
|
||||||
<div v-if="!courtRiskInfos || courtRiskInfos.length === 0"
|
v-if="!hasJudicialContent"
|
||||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg">
|
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg"
|
||||||
|
>
|
||||||
<div class="flex items-start">
|
<div class="flex items-start">
|
||||||
<div class="mr-3 mt-1">
|
<div class="mr-3 mt-1">
|
||||||
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="font-semibold text-green-600 mb-2">法院风险核验通过</h4>
|
<h4 class="font-semibold text-green-600 mb-2">司法信息核验通过</h4>
|
||||||
<p class="text-green-600 text-sm">
|
<p class="text-green-600 text-sm">未检测到相关司法案件明细,司法风险较低。</p>
|
||||||
未检测到法院相关案件记录,司法风险较低。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 案件类型说明 -->
|
|
||||||
<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>
|
|
||||||
<div><strong>执行案件:</strong>强制执行相关案件</div>
|
|
||||||
<div><strong>非诉保全审查案件:</strong>财产保全等非诉讼案件</div>
|
|
||||||
<div><strong>强制清算与破产案件:</strong>企业清算破产相关案件</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 温馨提示 -->
|
|
||||||
<LRemark
|
<LRemark
|
||||||
content="法院风险信息展示申请人的司法风险情况,包括民事案件、执行案件、失信记录和限高消费等。数据来源于全国法院执行信息公开网等权威司法数据库。失信和限高记录对个人信用影响极大,会限制高消费和金融服务。执行案件可能涉及财产冻结和强制执行。建议对有司法风险记录的申请进行重点审查。" />
|
content="个人司法信息来源于法院公开数据,包括民事、刑事、行政、执行等案件及失信、限高公告。字段与接口文档 judicialLeaseReport 结构一致。建议重点关注被告身份、未结案及被执行类记录。"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LTitle from '@/components/LTitle.vue'
|
import LTitle from '@/components/LTitle.vue'
|
||||||
import LRemark from '@/components/LRemark.vue'
|
import LRemark from '@/components/LRemark.vue'
|
||||||
import { ref, computed, onMounted, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
|
import {
|
||||||
|
JUDICIAL_CASE_GROUPS,
|
||||||
|
getJudicialLeaseReport,
|
||||||
|
hasJudicialLeaseContent,
|
||||||
|
getCaseTypeStatsFromReport,
|
||||||
|
getGroupedCasesFromReport,
|
||||||
|
getTotalCaseListCount,
|
||||||
|
truncateText,
|
||||||
|
} from '../utils/judicialLeaseReport.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
data: {
|
data: {
|
||||||
@@ -252,253 +348,102 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
notifyRiskStatus: {
|
notifyRiskStatus: {
|
||||||
type: Function,
|
type: Function,
|
||||||
default: () => { },
|
default: () => {},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
// 从data中解构出需要的字段
|
const judicialReport = computed(() => getJudicialLeaseReport(props.data))
|
||||||
const courtRiskInfos = computed(() => {
|
|
||||||
return props.data?.judiciaRiskInfos || []
|
const caseOverview = computed(() => judicialReport.value?.caseOverviewInfo || null)
|
||||||
})
|
|
||||||
|
const hasJudicialContent = computed(() => hasJudicialLeaseContent(judicialReport.value))
|
||||||
|
|
||||||
|
const caseTypeStats = computed(() => getCaseTypeStatsFromReport(judicialReport.value))
|
||||||
|
|
||||||
|
const groupedCases = computed(() => getGroupedCasesFromReport(judicialReport.value))
|
||||||
|
|
||||||
|
const totalListCaseCount = computed(() => getTotalCaseListCount(judicialReport.value))
|
||||||
|
|
||||||
|
const activeCaseTypeNames = computed(() =>
|
||||||
|
Object.keys(groupedCases.value).filter((name) => groupedCases.value[name]?.length)
|
||||||
|
)
|
||||||
|
|
||||||
// 折叠面板状态
|
|
||||||
const activeCases = ref({})
|
const activeCases = ref({})
|
||||||
|
|
||||||
// 是否有高风险案件
|
const getCaseTitle = (caseItem) => {
|
||||||
const hasHighRiskCases = computed(() => {
|
if (caseItem._kind === 'disin' || caseItem._kind === 'limit') {
|
||||||
return courtRiskInfos.value && courtRiskInfos.value.length > 0
|
return caseItem.ah || '案号未知'
|
||||||
})
|
|
||||||
|
|
||||||
// 获取案件类型列表
|
|
||||||
const getCaseTypesList = computed(() => {
|
|
||||||
if (!courtRiskInfos.value) return []
|
|
||||||
|
|
||||||
const types = [...new Set(courtRiskInfos.value.map(item => inferCaseType(item)))]
|
|
||||||
return types.filter(type => type !== '未知类型')
|
|
||||||
})
|
|
||||||
|
|
||||||
// 根据案件信息推断真实案件类型
|
|
||||||
const inferCaseType = (caseItem) => {
|
|
||||||
// 如果type字段已经是标准的6种类型之一,直接使用
|
|
||||||
const standardTypes = ['民事案件', '刑事案件', '行政案件', '执行案件', '非诉保全审查案件', '强制清算与破产案件']
|
|
||||||
if (standardTypes.includes(caseItem.type)) {
|
|
||||||
return caseItem.type
|
|
||||||
}
|
}
|
||||||
|
return caseItem.caseNumber || '案号未知'
|
||||||
// 根据caseType字段推断案件类型
|
|
||||||
const caseType = caseItem.caseType || ''
|
|
||||||
if (caseType.includes('刑事')) {
|
|
||||||
return '刑事案件'
|
|
||||||
} else if (caseType.includes('民事')) {
|
|
||||||
return '民事案件'
|
|
||||||
} else if (caseType.includes('行政')) {
|
|
||||||
return '行政案件'
|
|
||||||
} else if (caseType.includes('执行') || caseItem.type === '执行公告') {
|
|
||||||
return '执行案件'
|
|
||||||
} else if (caseType.includes('破产') || caseType.includes('清算')) {
|
|
||||||
return '强制清算与破产案件'
|
|
||||||
} else if (caseType.includes('保全') || caseItem.type === '非诉保全审查案件') {
|
|
||||||
return '非诉保全审查案件'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据原始type字段的值进行映射
|
|
||||||
if (caseItem.type === '涉案公告' && caseType.includes('刑事')) {
|
|
||||||
return '刑事案件'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 默认返回民事案件
|
|
||||||
return '民事案件'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按案件类型分组
|
const getCaseStatus = (caseItem) => {
|
||||||
const groupedCases = computed(() => {
|
if (caseItem._kind === 'disin') return '失信公告'
|
||||||
if (!courtRiskInfos.value) return {}
|
if (caseItem._kind === 'limit') return '限高公告'
|
||||||
|
return caseItem.caseStatus || ''
|
||||||
|
}
|
||||||
|
|
||||||
const grouped = {}
|
|
||||||
courtRiskInfos.value.forEach(caseItem => {
|
|
||||||
const type = inferCaseType(caseItem)
|
|
||||||
if (!grouped[type]) {
|
|
||||||
grouped[type] = []
|
|
||||||
}
|
|
||||||
grouped[type].push(caseItem)
|
|
||||||
})
|
|
||||||
|
|
||||||
return grouped
|
|
||||||
})
|
|
||||||
|
|
||||||
// 案件类型统计
|
|
||||||
const caseTypeStats = computed(() => {
|
|
||||||
const stats = {}
|
|
||||||
const allTypes = ['民事案件', '刑事案件', '行政案件', '执行案件', '非诉保全审查案件', '强制清算与破产案件']
|
|
||||||
|
|
||||||
// 初始化所有类型
|
|
||||||
allTypes.forEach(type => {
|
|
||||||
stats[type] = { count: 0 }
|
|
||||||
})
|
|
||||||
|
|
||||||
// 统计实际案件
|
|
||||||
if (courtRiskInfos.value) {
|
|
||||||
courtRiskInfos.value.forEach(caseItem => {
|
|
||||||
const type = inferCaseType(caseItem)
|
|
||||||
if (stats[type]) {
|
|
||||||
stats[type].count++
|
|
||||||
} else {
|
|
||||||
stats[type] = { count: 1 }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return stats
|
|
||||||
})
|
|
||||||
|
|
||||||
// 获取案件类型图标路径
|
|
||||||
const getCaseTypeIconPath = (type) => {
|
const getCaseTypeIconPath = (type) => {
|
||||||
const iconMap = {
|
const iconMap = {
|
||||||
'民事案件': () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
民事案件: () => 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/xs.png', import.meta.url).href,
|
||||||
'行政案件': () => new URL('@/assets/images/report/xz.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/zxaj.png', import.meta.url).href,
|
||||||
'非诉保全审查案件': () => new URL('@/assets/images/report/fsbq.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,
|
强制清算与破产案件: () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||||
'default': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href
|
管辖案件: () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||||
|
赔偿案件: () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||||
|
失信公告: () => new URL('@/assets/images/report/gfx.png', import.meta.url).href,
|
||||||
|
限高公告: () => new URL('@/assets/images/report/gfx.png', import.meta.url).href,
|
||||||
}
|
}
|
||||||
const getIcon = iconMap[type] || iconMap.default
|
const getIcon = iconMap[type] || (() => new URL('@/assets/images/report/zxaj.png', import.meta.url).href)
|
||||||
return getIcon()
|
return getIcon()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件类型名称
|
|
||||||
const getCaseTypeName = (type) => {
|
|
||||||
const nameMap = {
|
|
||||||
'民事案件': '民事案件',
|
|
||||||
'刑事案件': '刑事案件',
|
|
||||||
'行政案件': '行政案件',
|
|
||||||
'执行案件': '执行案件',
|
|
||||||
'非诉保全审查案件': '非诉保全审查案件',
|
|
||||||
'强制清算与破产案件': '强制清算与破产案件'
|
|
||||||
}
|
|
||||||
return nameMap[type] || '未知类型'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型简短名称(用于紧凑显示)
|
|
||||||
const getCaseTypeShortName = (type) => {
|
|
||||||
const shortNameMap = {
|
|
||||||
'民事案件': '民事',
|
|
||||||
'刑事案件': '刑事',
|
|
||||||
'行政案件': '行政',
|
|
||||||
'执行案件': '执行',
|
|
||||||
'非诉保全审查案件': '非诉保全',
|
|
||||||
'强制清算与破产案件': '清算破产'
|
|
||||||
}
|
|
||||||
return shortNameMap[type] || '未知'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型头部样式
|
|
||||||
const getCaseTypeHeaderStyle = (caseType) => {
|
|
||||||
const styleMap = {
|
|
||||||
'民事案件': 'bg-[#2B79EE]',
|
|
||||||
'刑事案件': 'bg-[#EB3C3C]',
|
|
||||||
'行政案件': 'bg-[#2B79EE]',
|
|
||||||
'执行案件': 'bg-[#D6943E]',
|
|
||||||
'非诉保全审查案件': 'bg-green-500',
|
|
||||||
'强制清算与破产案件': 'bg-[#666666]'
|
|
||||||
}
|
|
||||||
return styleMap[caseType] || 'bg-[#666666]'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取案件类型标签样式
|
|
||||||
const getCaseTypeBadgeStyle = (caseType) => {
|
const getCaseTypeBadgeStyle = (caseType) => {
|
||||||
const styleMap = {
|
const styleMap = {
|
||||||
'民事案件': 'bg-[#2B79EE1A] text-[#2B79EE]',
|
民事案件: 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||||
'刑事案件': 'bg-[#F9ECEC] text-[#EB3C3C]',
|
刑事案件: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
'行政案件': 'bg-[#EBF5FF] text-[#2B79EE]',
|
行政案件: 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||||
'执行案件': 'bg-[#FFF8E1] text-[#D6943E]',
|
执行案件: 'bg-[#FFF8E1] text-[#D6943E]',
|
||||||
'非诉保全审查案件': 'bg-[#ECF9EF] text-green-600',
|
非诉保全审查案件: 'bg-[#ECF9EF] text-green-600',
|
||||||
'强制清算与破产案件': 'bg-gray-100 text-[#666666]'
|
强制清算与破产案件: 'bg-gray-100 text-[#666666]',
|
||||||
|
失信公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
|
限高公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||||
}
|
}
|
||||||
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件项样式
|
|
||||||
const getCaseItemClass = (caseItem) => {
|
const getCaseItemClass = (caseItem) => {
|
||||||
if (caseItem.caseStatus === '已结案') return 'case-item-settled'
|
const status = getCaseStatus(caseItem)
|
||||||
if (caseItem.caseStatus === '执行中') return 'case-item-executing'
|
if (status === '已结案') return 'case-item-settled'
|
||||||
if (caseItem.caseStatus === '审理中') return 'case-item-hearing'
|
if (status === '执行中' || status === '未执行') return 'case-item-executing'
|
||||||
return 'case-item-default'
|
return 'case-item-default'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态样式
|
|
||||||
const getCaseStatusClass = (status) => {
|
const getCaseStatusClass = (status) => {
|
||||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
if (status === '未执行' || status === '失信公告') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
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'
|
return 'text-[#666666] bg-gray-100'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取案件状态文字样式
|
const initActiveCases = () => {
|
||||||
const getCaseStatusTextClass = (status) => {
|
Object.keys(groupedCases.value).forEach((caseType) => {
|
||||||
if (status === '已结案') return 'text-green-600'
|
if (groupedCases.value[caseType]?.length && !activeCases.value[caseType]) {
|
||||||
if (status === '执行中') return 'text-[#D6943E]'
|
activeCases.value[caseType] = `${caseType}-0`
|
||||||
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-[#2B79EE]'
|
|
||||||
if (score >= 0.7) return 'bg-yellow-500'
|
|
||||||
if (score >= 0.6) return 'bg-[#D6943E]'
|
|
||||||
return 'bg-[#EB3C3C]'
|
|
||||||
}
|
|
||||||
|
|
||||||
// 格式化内容摘要
|
|
||||||
const formatContentSummary = (summary) => {
|
|
||||||
if (!summary) return ''
|
|
||||||
|
|
||||||
// 如果是JSON格式,尝试解析
|
|
||||||
if (summary.startsWith('{') && summary.includes('id')) {
|
|
||||||
try {
|
|
||||||
const parsed = JSON.parse(summary)
|
|
||||||
return parsed.content || parsed.summary || '详细信息请查看完整报告'
|
|
||||||
} catch (e) {
|
|
||||||
return summary.substring(0, 200) + (summary.length > 200 ? '...' : '')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 普通文本,限制长度
|
|
||||||
return summary.length > 200 ? summary.substring(0, 200) + '...' : summary
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取默认展开的案件名称
|
|
||||||
const getDefaultActiveCase = (caseType) => {
|
|
||||||
return `${caseType}-0` // 默认展开每种类型的第一个案件
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化折叠面板状态
|
|
||||||
onMounted(() => {
|
|
||||||
Object.keys(groupedCases.value).forEach(caseType => {
|
|
||||||
if (groupedCases.value[caseType].length > 0) {
|
|
||||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
// 监听数据变化
|
watch(
|
||||||
watch(() => props.data, (newData) => {
|
() => props.data?.judicialLeaseReport,
|
||||||
if (newData?.judiciaRiskInfos) {
|
() => {
|
||||||
Object.keys(groupedCases.value).forEach(caseType => {
|
initActiveCases()
|
||||||
if (groupedCases.value[caseType].length > 0 && !activeCases.value[caseType]) {
|
},
|
||||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
{ immediate: true, deep: true }
|
||||||
}
|
)
|
||||||
})
|
|
||||||
}
|
|
||||||
}, { immediate: true, deep: true })
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -535,42 +480,37 @@ watch(() => props.data, (newData) => {
|
|||||||
color: #666666;
|
color: #666666;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 400;
|
|
||||||
text-align: right;
|
text-align: right;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 案件项样式
|
|
||||||
:deep(.van-collapse-item) {
|
:deep(.van-collapse-item) {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&.case-item-settled {
|
&.case-item-settled {
|
||||||
border: 1px solid #CAECD3;
|
border: 1px solid #caecd3;
|
||||||
background-color: #FBFDFC;
|
background-color: #fbfdfc;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.case-item-executing {
|
&.case-item-executing {
|
||||||
border: 1px solid #FFE082;
|
border: 1px solid #ffe082;
|
||||||
background-color: #FFFDF9;
|
background-color: #fffdf9;
|
||||||
}
|
|
||||||
|
|
||||||
&.case-item-hearing {
|
|
||||||
border: 1px solid #EBF5FF;
|
|
||||||
background-color: #FAFDFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.case-item-default {
|
&.case-item-default {
|
||||||
border: 1px solid #DDDDDD;
|
border: 1px solid #dddddd;
|
||||||
background-color: #f9fafb;
|
background-color: #f9fafb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -584,8 +524,4 @@ watch(() => props.data, (newData) => {
|
|||||||
padding: 0 16px 16px;
|
padding: 0 16px 16px;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.van-collapse-item__wrapper) {
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -209,6 +209,13 @@ const riskListConfig = {
|
|||||||
severity: 'medium',
|
severity: 'medium',
|
||||||
color: 'orange'
|
color: 'orange'
|
||||||
},
|
},
|
||||||
|
mediumRelationRisk: {
|
||||||
|
name: '中介关联风险',
|
||||||
|
description: '命中中介关联风险名单',
|
||||||
|
icon: '🔗',
|
||||||
|
severity: 'high',
|
||||||
|
color: 'red'
|
||||||
|
},
|
||||||
phoneNumberStatus: {
|
phoneNumberStatus: {
|
||||||
name: '手机号码状态异常',
|
name: '手机号码状态异常',
|
||||||
description: '手机号码状态存在异常',
|
description: '手机号码状态存在异常',
|
||||||
|
|||||||
@@ -208,6 +208,20 @@ const riskConfig = {
|
|||||||
isHighRisk: true,
|
isHighRisk: true,
|
||||||
icon: '🎰',
|
icon: '🎰',
|
||||||
color: 'red'
|
color: 'red'
|
||||||
|
},
|
||||||
|
registerRisk: {
|
||||||
|
name: '公证仲裁执行风险',
|
||||||
|
description: '该地区不予执行先享后付案件',
|
||||||
|
isHighRisk: true,
|
||||||
|
icon: '📜',
|
||||||
|
color: 'red'
|
||||||
|
},
|
||||||
|
relationRisk: {
|
||||||
|
name: '命中中介关联风险',
|
||||||
|
description: '该用户与中介深度关联',
|
||||||
|
isHighRisk: true,
|
||||||
|
icon: '🔗',
|
||||||
|
color: 'red'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,10 +39,8 @@
|
|||||||
<!-- 关联风险监督 -->
|
<!-- 关联风险监督 -->
|
||||||
<RiskSupervisionSection :data="{ riskSupervision: data.riskSupervision }" />
|
<RiskSupervisionSection :data="{ riskSupervision: data.riskSupervision }" />
|
||||||
|
|
||||||
<!-- 法院风险信息 -->
|
<!-- 个人司法信息 -->
|
||||||
<!-- <CourtRiskInfoSection
|
<CourtRiskInfoSection :data="{ judicialLeaseReport: data.judicialLeaseReport }" />
|
||||||
:data="{ judiciaRiskInfos: data.judiciaRiskInfos }"
|
|
||||||
/> -->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
88
src/ui/DWBG6A2C/utils/judicialLeaseReport.js
Normal file
88
src/ui/DWBG6A2C/utils/judicialLeaseReport.js
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/**
|
||||||
|
* 司南报告 judicialLeaseReport 结构解析
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const JUDICIAL_CASE_GROUPS = [
|
||||||
|
{ listKey: 'civilCases', name: '民事案件', shortName: '民事', countField: 'civilCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'criminalCases', name: '刑事案件', shortName: '刑事', countField: 'criminalCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'administrativeCases', name: '行政案件', shortName: '行政', countField: 'administrativeCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'preservationCases', name: '非诉保全审查案件', shortName: '非诉保全', countField: 'preservationCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'enforcementCases', name: '执行案件', shortName: '执行', countField: 'enforcementCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'supervisionCases', name: '管辖案件', shortName: '管辖', countField: 'supervisionCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'compensationCases', name: '赔偿案件', shortName: '赔偿', countField: 'compensationCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'bankruptcyCases', name: '强制清算与破产案件', shortName: '清算破产', countField: 'bankruptcyCasesCount', kind: 'standard' },
|
||||||
|
{ listKey: 'disinCases', name: '失信公告', shortName: '失信', countField: null, kind: 'disin' },
|
||||||
|
{ listKey: 'limitCases', name: '限高公告', shortName: '限高', countField: null, kind: 'limit' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export function getJudicialLeaseReport(data) {
|
||||||
|
return data?.judicialLeaseReport || null
|
||||||
|
}
|
||||||
|
|
||||||
|
function listHasItems(list) {
|
||||||
|
return Array.isArray(list) && list.length > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hasJudicialLeaseContent(report) {
|
||||||
|
if (!report) return false
|
||||||
|
|
||||||
|
const overview = report.caseOverviewInfo || {}
|
||||||
|
const courtInfo = report.courtInfo || {}
|
||||||
|
const multi = courtInfo.newMultCourtInfo || {}
|
||||||
|
|
||||||
|
if (Number(overview.beigaoTotalCasesCounts) > 0) return true
|
||||||
|
if (Number(overview.executionCaseCounts) > 0) return true
|
||||||
|
if (Number(overview.disinCaseCounts) > 0) return true
|
||||||
|
if (Number(overview.limitCaseCounts) > 0) return true
|
||||||
|
|
||||||
|
for (const group of JUDICIAL_CASE_GROUPS) {
|
||||||
|
const count = group.countField ? Number(courtInfo[group.countField] || 0) : 0
|
||||||
|
if (count > 0) return true
|
||||||
|
if (listHasItems(multi[group.listKey])) return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCaseTypeStatsFromReport(report) {
|
||||||
|
const courtInfo = report?.courtInfo || {}
|
||||||
|
const multi = courtInfo.newMultCourtInfo || {}
|
||||||
|
const stats = {}
|
||||||
|
|
||||||
|
JUDICIAL_CASE_GROUPS.forEach((group) => {
|
||||||
|
let count = 0
|
||||||
|
if (group.countField) {
|
||||||
|
count = Number(courtInfo[group.countField] || 0)
|
||||||
|
}
|
||||||
|
if (count === 0 && listHasItems(multi[group.listKey])) {
|
||||||
|
count = multi[group.listKey].length
|
||||||
|
}
|
||||||
|
stats[group.name] = { count, listKey: group.listKey, kind: group.kind }
|
||||||
|
})
|
||||||
|
|
||||||
|
return stats
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getGroupedCasesFromReport(report) {
|
||||||
|
const multi = report?.courtInfo?.newMultCourtInfo || {}
|
||||||
|
const grouped = {}
|
||||||
|
|
||||||
|
JUDICIAL_CASE_GROUPS.forEach((group) => {
|
||||||
|
const cases = multi[group.listKey]
|
||||||
|
if (listHasItems(cases)) {
|
||||||
|
grouped[group.name] = cases.map((item) => ({ ...item, _kind: group.kind }))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return grouped
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTotalCaseListCount(report) {
|
||||||
|
const grouped = getGroupedCasesFromReport(report)
|
||||||
|
return Object.values(grouped).reduce((sum, list) => sum + list.length, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function truncateText(text, maxLen = 200) {
|
||||||
|
if (!text || typeof text !== 'string') return ''
|
||||||
|
return text.length > maxLen ? `${text.slice(0, maxLen)}...` : text
|
||||||
|
}
|
||||||
@@ -204,13 +204,13 @@ export function splitDWBG6A2CForTabs(reportData) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 14. 法院风险信息
|
// 14. 个人司法信息
|
||||||
if (originalData.judiciaRiskInfos && originalData.judiciaRiskInfos.length > 0) {
|
if (originalData.judicialLeaseReport) {
|
||||||
splitModules.push({
|
splitModules.push({
|
||||||
data: {
|
data: {
|
||||||
apiID: 'DWBG6A2C_CourtRiskInfo',
|
apiID: 'DWBG6A2C_CourtRiskInfo',
|
||||||
data: {
|
data: {
|
||||||
judiciaRiskInfos: originalData.judiciaRiskInfos
|
judicialLeaseReport: originalData.judicialLeaseReport
|
||||||
},
|
},
|
||||||
success: true,
|
success: true,
|
||||||
timestamp: baseTimestamp
|
timestamp: baseTimestamp
|
||||||
@@ -269,7 +269,8 @@ export function formatPhoneStatus(status) {
|
|||||||
export function formatVerificationResult(result) {
|
export function formatVerificationResult(result) {
|
||||||
const resultMap = {
|
const resultMap = {
|
||||||
'0': { color: 'text-green-600', bg: 'bg-green-100', text: '一致', icon: '✅' },
|
'0': { color: 'text-green-600', bg: 'bg-green-100', text: '一致', icon: '✅' },
|
||||||
'1': { color: 'text-red-600', bg: 'bg-red-100', text: '不一致或不存在', icon: '❌' }
|
'1': { color: 'text-red-600', bg: 'bg-red-100', text: '不一致或不存在', icon: '❌' },
|
||||||
|
'-1': { color: 'text-gray-600', bg: 'bg-gray-100', text: '查无记录', icon: '❓' }
|
||||||
};
|
};
|
||||||
|
|
||||||
return resultMap[result] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' };
|
return resultMap[result] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' };
|
||||||
|
|||||||
101
vite.config.js.timestamp-1783517359131-685e6073b99a4.mjs
Normal file
101
vite.config.js.timestamp-1783517359131-685e6073b99a4.mjs
Normal file
File diff suppressed because one or more lines are too long
629
司南报告服务_响应示例.md
Normal file
629
司南报告服务_响应示例.md
Normal file
File diff suppressed because one or more lines are too long
436
司南报告服务_返回字段说明.md
Normal file
436
司南报告服务_返回字段说明.md
Normal file
@@ -0,0 +1,436 @@
|
|||||||
|
# 接口返回字段说明
|
||||||
|
|
||||||
|
|
||||||
|
### 1. data (响应主体结构)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| baseInfo | object | 基本信息 |
|
||||||
|
| standLiveInfo | object | 身份信息核验 |
|
||||||
|
| riskPoint | object | 命中风险标注 |
|
||||||
|
| securityInfo | object | 公安重点人员核验 |
|
||||||
|
| antiFraudInfo | object | 涉赌涉诈人员核验 |
|
||||||
|
| riskList | object | 风险名单 |
|
||||||
|
| applicationStatistics | object | 历史借贷行为 |
|
||||||
|
| lendingStatistics | object | 近24个月放款情况 |
|
||||||
|
| performanceStatistics | object | 履约情况 |
|
||||||
|
| overdueRecord | object | 历史逾期记录 |
|
||||||
|
| creditDetail | object | 授信详情 |
|
||||||
|
| rentalBehavior | object | 租赁行为 |
|
||||||
|
| riskSupervision | object | 关联风险监督 |
|
||||||
|
| judicialLeaseReport | object | 个人司法信息 |
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. baseInfo(基本信息)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| name | String | 姓名 |
|
||||||
|
| age | int | 年龄 |
|
||||||
|
| sex | String | 性别 |
|
||||||
|
| idCard | String | 身份证号码 |
|
||||||
|
| phone | String | 手机号码 |
|
||||||
|
| location | String | 户籍所在地 |
|
||||||
|
| phoneArea | String | 号码归属地 |
|
||||||
|
| status | int | 号码状态:-1:未查得; 0:空号; 1:实号; 2:停机; 3:库无; 4:沉默号; 5:风险号 |
|
||||||
|
| channel | String | 手机运营商 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. standLiveInfo(身份信息核验)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| finalAuthResult | String | 实名核验:"1":【不一致或不存在】、"0":【一致】 |
|
||||||
|
| verification | String | 运营商三要素核验:"1":【不一致】、"0":【一致】、"-1":【查无记录】 |
|
||||||
|
| inTime | String | 运营商在网时长:0 [0,3)、3 [3,6)、6 [6,12)、12 [12,24)、24 [24,+)、99 手机号已离网/新入网/手机状态异常、-1 查无记录 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. riskPoint(命中风险标注)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 | 风险点 | 详解 |
|
||||||
|
| :--- | :--- | :--- | :--- | :--- |
|
||||||
|
| multiQuery | int | 0:未命中、其他为命中月份数 | 多头查询次数多 | 近{变量}个月申请网贷的查询次数较多 |
|
||||||
|
| riskList | int | 0:未命中、1:命中 | 命中风险关注名单 | 命中信贷高风险或租赁关注类名单库 |
|
||||||
|
| newRiskFeature | int | 0:未命中、1:命中 | 命中新增风险特征规则 | 命中报告中未展示的内容,数据的模型评分较低 |
|
||||||
|
| deductFail | int | 0:未命中、其他为命中月份数 | 近期扣款失败次数较多 | 近{变量}个月代扣还款失败次数较多 |
|
||||||
|
| judicialRisk | int | 0:未命中、1:命中 | 命中司法涉诉案件 | 用户历史上有过失信、犯罪、纠纷等严重影响信用记录的法院案件记录,审核需谨慎 |
|
||||||
|
| hitPreservationReview | int | 0:未命中、1:命中 | 命中非诉保全 | 该用户命中非诉保全案件记录 |
|
||||||
|
| legalCasesFlag | int | 0:未命中、1:命中 | 涉案公告 | |
|
||||||
|
| executionCasesFlag | int | 0:未命中、1:命中 | 执行公告 | |
|
||||||
|
| disinCasesFlag | int | 0:未命中、1:命中 | 失信公告 | |
|
||||||
|
| limitCasesFlag | int | 0:未命中、1:命中 | 限高公告 | |
|
||||||
|
| securityRisk | int | 0:未命中、1:命中 | 命中公安重点人员 | 该用户有不良劣迹 |
|
||||||
|
| antiFraudRisk | int | 0:未命中、1:命中 | 疑似涉赌涉诈人员 | 该用户涉嫌赌博、洗钱、诈骗 |
|
||||||
|
| registerRisk | int | 0:未命中、1:命中 | 公证仲裁执行风险 | 该地区不予执行先享后付案件 |
|
||||||
|
| relationRisk | int | 0:未命中、1:命中 | 命中中介关联风险 | 该用户与中介深度关联 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. securityInfo(公安重点人员核验)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 | 备注 |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| front | int | 前科,0表示未命中 | 表明用户在刑或有前科 |
|
||||||
|
| drug | int | 涉毒,0表示未命中 | 表明用户制、贩、藏、运、涉毒品风险较高 |
|
||||||
|
| takeDrug | int | 吸毒,0表示未命中 | 表明用户吸食毒品风险较高 |
|
||||||
|
| escape | int | 在逃,0表示未命中 | 表明用户有在逃、在逃撤销历史风险 |
|
||||||
|
| icase | int | 涉案,0表示未命中 | 表明用户涉黑、涉疆藏,在逃,涉刑案等风险较高 |
|
||||||
|
| ikey | int | 重点,0表示未命中 | 表明用户为公安机关重点人员名单风险 |
|
||||||
|
| itrancase | int | 涉交通案件,0表示未命中 | 表明用户涉交通案件 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. riskList(风险名单)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| creditLeaseRisk | int | 信用租赁风险名单,0未命中,1命中 |
|
||||||
|
| bankOverdueRecord | int | 银行逾期记录,0未命中,1命中 |
|
||||||
|
| riskPhoneNumber | int | 通信风险手机号库,0未命中,1命中 |
|
||||||
|
| highRiskArea | int | 高风险集中地区,0未命中,1命中 |
|
||||||
|
| creditOverdueRecord | int | 信贷逾期记录,0未命中,1命中 |
|
||||||
|
| vehicleLeaseViolation | int | 车辆租赁违约,0未命中,1命中 |
|
||||||
|
| courtViolator | int | 法院被执行名单,0未命中,1命中 |
|
||||||
|
| industryBlacklist | int | 行业黑名单,0未命中,1命中 |
|
||||||
|
| identityFake | int | 身份伪冒风险,0未命中,1命中 |
|
||||||
|
| groupFraud | int | 团伙欺诈名单,0未命中,1命中 |
|
||||||
|
| taxDebt | int | 欠税名单,0未命中,1命中 |
|
||||||
|
| mediumRelationRisk | int | 中介关联风险,0未命中,1命中 |
|
||||||
|
| phoneNumberStatus | int | 手机号码状态异常,0未命中,1命中 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. applicationStatistics(历史借贷行为)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| totalApplicationCount | int | 申请机构数 |
|
||||||
|
| consumptionInstallmentApplicationCount | int | 申请消费分期类机构数 |
|
||||||
|
| onlineLoanApplicationCount | int | 申请网络贷款类机构数 |
|
||||||
|
| otherApplicationCount | int | 申请其他类机构数 |
|
||||||
|
| lastApplicationDate | String | 最后一次申请时间 |
|
||||||
|
| daysSinceLastApplication | String | 距离最近一次申请已有(天):(0,30) |
|
||||||
|
| applicationCountLastMonth | int | 近1个月申请机构数 |
|
||||||
|
| applicationCountLast3Months | int | 近3个月申请机构数 |
|
||||||
|
| applicationCountLast6Months | int | 近6个月申请机构数 |
|
||||||
|
| applicationCountLast12Months | int | 近12个月申请机构数 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 8. lendingStatistics(近24个月放款情况)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| totalLendingInstitutionCount | int | 放贷机构总数 |
|
||||||
|
| installmentLendingInstitutionCount | int | 分期类放款机构数 |
|
||||||
|
| onlineLendingInstitutionCount | int | 网络贷款类放款机构 |
|
||||||
|
| lastLendingDate | String | 最近一次放款日期 |
|
||||||
|
| daysSinceLastLending | String | 距离最近一次放款日期已有(天):(0,30) |
|
||||||
|
| lendingCountLastMonth | int | 近1个月放贷次数 |
|
||||||
|
| lendingAmountLastMonth | String | 近1个月放贷金额(金额区间) |
|
||||||
|
| lendingCountLast3Months | int | 近3个月放贷次数 |
|
||||||
|
| lendingAmountLast3Months | String | 近3个月放贷金额(金额区间) |
|
||||||
|
| lendingCountLast6Months | int | 近6个月放贷次数 |
|
||||||
|
| lendingAmountLast6Months | String | 近6个月放贷金额(金额区间) |
|
||||||
|
| lendingCountLast12Months | int | 近12个月放贷次数 |
|
||||||
|
| lendingAmountLast12Months | String | 近12个月放贷金额(金额区间) |
|
||||||
|
| lendingCountLast24Months | int | 近24个月放贷次数 |
|
||||||
|
| lendingAmountLast24Months | String | 近24个月放贷金额(金额区间) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 9. performanceStatistics(履约情况)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| normalRepaymentRatio | String | 正常还款占总订单比例 |
|
||||||
|
| creditLoanDuration | int | 信用贷款时长 |
|
||||||
|
| settledLoanOrderCount | int | 贷款已结清订单数 |
|
||||||
|
| daysSinceLastPerformance | String | 距离最近一次履约据今天数(天):(0,30) |
|
||||||
|
| performanceCountLastMonth | int | 近1个月履约次数 |
|
||||||
|
| performanceAmountLastMonth | String | 近1个月履约金额(金额区间) |
|
||||||
|
| repaymentExceptionCountLastMonth | int | 近1个月还款异常次数 |
|
||||||
|
| performanceCountLast3Months | int | 近3个月履约次数 |
|
||||||
|
| performanceAmountLast3Months | String | 近3个月履约金额(金额区间) |
|
||||||
|
| repaymentExceptionCountLast3Months | int | 近3个月还款异常次数 |
|
||||||
|
| performanceCountLast6Months | int | 近6个月履约次数 |
|
||||||
|
| performanceAmountLast6Months | String | 近6个月履约金额(金额区间) |
|
||||||
|
| repaymentExceptionCountLast6Months | int | 近6个月还款异常次数 |
|
||||||
|
| performanceCountLast12Months | int | 近12个月履约次数 |
|
||||||
|
| performanceAmountLast12Months | String | 近12个月履约金额(金额区间) |
|
||||||
|
| repaymentExceptionCountLast12Months | int | 近12个月还款异常次数 |
|
||||||
|
| performanceCountLast24Months | int | 近24个月履约次数 |
|
||||||
|
| performanceAmountLast24Months | String | 近24个月履约金额(金额区间) |
|
||||||
|
| repaymentExceptionCountLast24Months | int | 近24个月还款异常次数 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 10. overdueRecord(历史逾期记录)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| currentOverdueInstitution | String | 当前逾期机构 |
|
||||||
|
| currentOverdueCount | int | 当前逾期笔数 |
|
||||||
|
| totalOverdueAmount | String | 逾期总金额(元)(金额区间) |
|
||||||
|
| lastOverdueDate | String | 最近逾期时间 |
|
||||||
|
| m0PlusCountLast6Months | int | 近6个月M0+笔数 |
|
||||||
|
| m1PlusCountLast6Months | int | 近6个月M1+笔数 |
|
||||||
|
| totalAmountLast6Months | String | 近6个月累计金额(金额区间) |
|
||||||
|
| m0PlusCountLast12Months | int | 近12个月M0+笔数 |
|
||||||
|
| m1PlusCountLast12Months | int | 近12个月M1+笔数 |
|
||||||
|
| totalAmountLast12Months | String | 近12个月累计金额(金额区间) |
|
||||||
|
| m0PlusCountLast24Months | int | 近24个月M0+笔数 |
|
||||||
|
| m1PlusCountLast24Months | int | 近24个月M1+笔数 |
|
||||||
|
| totalAmountLast24Months | String | 近24个月累计金额(金额区间) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 11. creditDetail(授信详情)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| maxOnlineLoanCredit | String | 网络贷款类最大授信额度(金额区间) |
|
||||||
|
| avgOnlineLoanCredit | String | 网络贷款类平均授信额度(金额区间) |
|
||||||
|
| maxConsumptionInstallmentCredit | String | 消费分期类最大授信额度(金额区间) |
|
||||||
|
| avgConsumptionInstallmentCredit | String | 消费分期类平均授信额度(金额区间) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 12. rentalBehavior(租赁行为)
|
||||||
|
|
||||||
|
*注:以下字段命名规则统一为 `rentalApplication...`,类型均为 String 或 int(具体视原始数据而定,文档中未明确区分的默认为 String)。*
|
||||||
|
|
||||||
|
| 字段名 | 说明 |
|
||||||
|
| :--- | :--- |
|
||||||
|
| rentalApplicationInstitutionsLast3Days | 近3天租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast3Days | 近3天租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast3DaysWeekend | 近3天租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast3DaysWeekend | 近3天租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast3DaysNight | 近3天租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast3DaysNight | 近3天租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast7Days | 近7天租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast7Days | 近7天租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast7DaysWeekend | 近7天租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast7DaysWeekend | 近7天租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast7DaysNight | 近7天租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast7DaysNight | 近7天租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast14Days | 近14天租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast14Days | 近14天租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast14DaysWeekend | 近14天租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast14DaysWeekend | 近14天租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast14DaysNight | 近14天租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast14DaysNight | 近14天租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast1Month | 近1个月租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast1Month | 近1个月租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast1MonthWeekend | 近1个月租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast1MonthWeekend | 近1个月租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast1MonthNight | 近1个月租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast1MonthNight | 近1个月租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast3Months | 近3个月租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast3Months | 近3个月租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast3MonthsWeekend | 近3个月租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast3MonthsWeekend | 近3个月租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast3MonthsNight | 近3个月租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast3MonthsNight | 近3个月租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast6Months | 近6个月租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast6Months | 近6个月租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast6MonthsWeekend | 近6个月租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast6MonthsWeekend | 近6个月租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast6MonthsNight | 近6个月租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast6MonthsNight | 近6个月租赁夜间申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast12Months | 近12个月租赁申请机构数 |
|
||||||
|
| rentalApplicationCountLast12Months | 近12个月租赁申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast12MonthsWeekend | 近12个月租赁周末申请机构数 |
|
||||||
|
| rentalApplicationCountLast12MonthsWeekend | 近12个月租赁周末申请次数 |
|
||||||
|
| rentalApplicationInstitutionsLast12MonthsNight | 近12个月租赁夜间申请机构数 |
|
||||||
|
| rentalApplicationCountLast12MonthsNight | 近12个月租赁夜间申请次数 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 13. riskSupervision(关联风险监督)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| leastApplicationTime | int | 最后申请时间 |
|
||||||
|
| rentalRiskListIdCardRelationsPhones | int | 同一身份证关联手机号数 |
|
||||||
|
| rentalRiskListPhoneRelationsIdCards | int | 同一手机号关联身份证数 |
|
||||||
|
| details | String | 详情 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 14. antiFraudInfo(涉赌涉诈风险)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| moneyLaundering | string | 疑似跑分风险(0,A,B,C,D) |
|
||||||
|
| deceiver | string | 疑似欺诈风险(0,A,B,C,D) |
|
||||||
|
| gamblerPlayer | string | 疑似赌博玩家风险(0,A,B,C,D) |
|
||||||
|
| gamblerBanker | string | 疑似赌博庄家风险(0,A,B,C,D) |
|
||||||
|
|
||||||
|
**备注:**
|
||||||
|
* **0**: 无风险
|
||||||
|
* **A**: 较低风险:近三个月有参与疑似涉赌涉诈中风险交易,或历史有参与涉赌诈高风险交易,近期未参与涉赌诈等交易的账号;以及其他较低危风险交易
|
||||||
|
* **B**: 低风险:近三个月有参与疑似涉赌涉诈高风险交易,近期未参与涉赌诈等交易的账号;以及其他低危风险交易。
|
||||||
|
* **C**: 中风险(有从高风险降级的可能性):近三个月有与赌博庄家、欺诈收款关联交易,或疑似团伙性质的账户;或第三方支付投诉举报,疑似为涉诈、涉赌的收款账户;以及其他中危风险交易。
|
||||||
|
* **D**: 高风险:近三个月有被交易处罚,如涉赌、涉诈等高危风险交易的处罚;或近期被四方巡检稽核为收款账户;或第三方支付投诉举报,定性为涉诈账户,且近期有过高危收款行为的账户,以及其他高危风险交易。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 15. judicialLeaseReport(个人司法信息统计)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| courtInfo | object | 个人司法信息 |
|
||||||
|
| caseOverviewInfo | object | 案件概览 |
|
||||||
|
|
||||||
|
#### 16. courtInfo(个人司法信息)
|
||||||
|
|
||||||
|
##### 16.1 案件统计信息
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| civilCasesCount | int | 民事案件数 |
|
||||||
|
| criminalCasesCount | int | 刑事案件数 |
|
||||||
|
| administrativeCasesCount | int | 行政案件数 |
|
||||||
|
| preservationCasesCount | int | 非诉保全审查数 |
|
||||||
|
| enforcementCasesCount | int | 执行案件数 |
|
||||||
|
| supervisionCasesCount | int | 管辖案件数 |
|
||||||
|
| compensationCasesCount | int | 赔偿案件数 |
|
||||||
|
| bankruptcyCasesCount | int | 强制清算与破产案件数 |
|
||||||
|
| newMultCourtInfo | Object | 案件详细信息 |
|
||||||
|
|
||||||
|
##### 16.2 案件详细信息
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| civilCases | List | 民事案件列表 |
|
||||||
|
| criminalCases | List | 刑事案件列表 |
|
||||||
|
| administrativeCases | List | 行政案件列表 |
|
||||||
|
| preservationCases | List | 非诉保全审查列表 |
|
||||||
|
| enforcementCases | List | 执行案件列表 |
|
||||||
|
| supervisionCases | List | 管辖案件列表 |
|
||||||
|
| compensationCases | List | 赔偿案件列表 |
|
||||||
|
| bankruptcyCases | List | 强制清算与破产案件列表 |
|
||||||
|
| disinCases | List | 失信公告列表 |
|
||||||
|
| limitCases | List | 限高公告列表 |
|
||||||
|
| caseCounts | Object | 总案件统计 |
|
||||||
|
| civilCaseCounts | Object | 民事案件统计 |
|
||||||
|
| criminalCaseCounts | Object | 刑事案件统计 |
|
||||||
|
| administrativeCaseCounts | Object | 行政案件统计 |
|
||||||
|
| preservationCaseCounts | Object | 非诉保全审查统计 |
|
||||||
|
| enforcementCaseCounts | Object | 执行案件统计 |
|
||||||
|
| supervisionCaseCounts | Object | 管辖案件统计 |
|
||||||
|
| compensationCaseCounts | Object | 赔偿案件统计 |
|
||||||
|
| bankruptcyCaseCounts | Object | 强制清算与破产案件统计 |
|
||||||
|
|
||||||
|
##### 16.3 judiciaLegalCase 案件详情列表共有字段
|
||||||
|
*(适用于 civilCases, criminalCases, administrativeCases, preservationCases, enforcementCases, supervisionCases, compensationCases, bankruptcyCases)*
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| caseNumber | String | 案号 |
|
||||||
|
| nssdw | String | 诉讼地位 |
|
||||||
|
| caseStatus | String | 案件进展阶段 |
|
||||||
|
| najlx | String | 案件类型 |
|
||||||
|
| cdsrxx | String | 当事人 |
|
||||||
|
| nslcx | String | 审理程序 |
|
||||||
|
| zxfy | String | 执行法院 |
|
||||||
|
| dlarq | String | 立案时间 |
|
||||||
|
| djarq | String | 结案时间 |
|
||||||
|
| njafs | String | 结案方式 |
|
||||||
|
| nfzje | String | 犯罪金额 |
|
||||||
|
| nccxzxje | String | 财产执行金额 |
|
||||||
|
| njbfy | String | 经办法院 |
|
||||||
|
| npcpcje | String | 判处罚金额 |
|
||||||
|
| cgkwsDsr | String | 当事人详情/公开文书当事人 |
|
||||||
|
| cgkwsPjjg | String | 判决结果 |
|
||||||
|
| cahHx | String | 后续案件案号 |
|
||||||
|
| cahHxBs | String | 后续案件标识 |
|
||||||
|
| nsqzxbdje | String | 申请执行标的金额 |
|
||||||
|
| njabdje | String | 结案标的金额 |
|
||||||
|
| nsjdwje | String | 实际到位的金额 |
|
||||||
|
| najbs | String | 案件标识 |
|
||||||
|
| npjVictory | String | 胜诉估计 |
|
||||||
|
| nwzxje | String | 未执行金额 |
|
||||||
|
| nqsbdje | String | 起诉标的金额 |
|
||||||
|
|
||||||
|
##### 16.4 disinCases 失信公告案件详情列表
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| xb | String | 性别 |
|
||||||
|
| orgCode | String | 组织机构代码 |
|
||||||
|
| orglegalPerson | String | 企业法人 |
|
||||||
|
| zxfy | String | 执行法院 |
|
||||||
|
| sf | String | 执行省份 |
|
||||||
|
| zxyjwh | String | 执行依据文号 |
|
||||||
|
| larq | String | 立案日期 |
|
||||||
|
| ah | String | 案号 |
|
||||||
|
| zxyjdw | String | 执行依据单位 |
|
||||||
|
| yw | String | 生效法律文书确定的义务 |
|
||||||
|
| lxqk | String | 被执行人的履行情况 |
|
||||||
|
| xwqx | String | 失信被执行人行为具体情况 |
|
||||||
|
| fbrq | String | 发布日期 |
|
||||||
|
| pjjeGj | String | 金额估计 |
|
||||||
|
|
||||||
|
##### 16.5 limitCases 限高公告案件详情列表
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| orglegalName | String | 企业名称 |
|
||||||
|
| orglegalPerson | String | 企业法人 |
|
||||||
|
| zxfy | String | 执行法院 |
|
||||||
|
| ah | String | 案号 |
|
||||||
|
| larq | String | 立案时间 |
|
||||||
|
| fbrq | String | 发布时间 |
|
||||||
|
|
||||||
|
##### 16.6 caseCounts 案件统计
|
||||||
|
*(适用于 caseCounts, civilCaseCounts, criminalCaseCounts, administrativeCaseCounts, preservationCaseCounts, enforcementCaseCounts, supervisionCaseCounts, compensationCaseCounts, bankruptcyCaseCounts)*
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| totalCasesCounts | String | 总案件数量 |
|
||||||
|
| totalJieCaseCounts | String | 总已结案数量 |
|
||||||
|
| totalWeiCaseCounts | String | 总未结案数量 |
|
||||||
|
| totalCaseAmounts | String | 总案件金额 |
|
||||||
|
| totalJieAmountCases | String | 总已结案金额 |
|
||||||
|
| totalWeiAmountCases | String | 总未结案金额 |
|
||||||
|
| beigaoTotalCasesCounts | String | 被告总案件数量 |
|
||||||
|
| beigaoTotalJieCaseCounts | String | 被告总已结案数量 |
|
||||||
|
| beigaoTotalWeiCaseCounts | String | 被告总未结案数量 |
|
||||||
|
| beigaoTotalCaseAmounts | String | 被告总案件金额 |
|
||||||
|
| beigaoTotalJieAmountCases | String | 被告总已结案金额 |
|
||||||
|
| beigaoTotalWeiAmountCases | String | 被告总未结案金额 |
|
||||||
|
| yuangaoTotalCasesCounts | String | 原告总案件数量 |
|
||||||
|
| yuangaoTotalJieCaseCounts | String | 原告总已结案数量 |
|
||||||
|
| yuangaoTotalWeiCaseCounts | String | 原告总未结案数量 |
|
||||||
|
| yuangaoTotalCaseAmounts | String | 原告总案件金额 |
|
||||||
|
| yuangaoTotalJieAmountCases | String | 原告总已结案金额 |
|
||||||
|
| yuangaoTotalWeiAmountCases | String | 原告总未结案金额 |
|
||||||
|
| otherTotalCasesCounts | String | 第三人总案件数量 |
|
||||||
|
| otherTotalJieCaseCounts | String | 第三人总已结案数量 |
|
||||||
|
| otherTotalWeiCaseCounts | String | 第三人总未结案数量 |
|
||||||
|
| otherTotalCaseAmounts | String | 第三人总案件金额 |
|
||||||
|
| otherTotalJieAmountCases | String | 第三人总已结案金额 |
|
||||||
|
| otherTotalWeiAmountCases | String | 第三人总未结案金额 |
|
||||||
|
| caseActionDistribution | String | 案由分布 |
|
||||||
|
| localDistribution | String | 地点分布 |
|
||||||
|
| caseCloselDistribution | String | 结案分布 |
|
||||||
|
| timeDistribution | String | 时间分布 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 17. caseOverviewInfo(案件概览)
|
||||||
|
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| disinCaseCounts | int | 失信命中,0未命中,1命中 |
|
||||||
|
| limitCaseCounts | int | 限高命中,0未命中,1命中 |
|
||||||
|
| beigaoTotalCasesCounts | int | 被告总案件数量 |
|
||||||
|
| beigaoTotalWeiCaseCounts | int | 被告总未结案数量 |
|
||||||
|
| executionCaseCounts | int | 被执行案件数 |
|
||||||
|
| beigaoTotalCaseAmounts | int | 被告总案件金额 |
|
||||||
|
| affiliateCompany | int | 关联企业 |
|
||||||
|
| leastCaseTime | String | 最近案件年份 |
|
||||||
Reference in New Issue
Block a user