f
This commit is contained in:
@@ -170,6 +170,10 @@ const featureMap = {
|
||||
name: "关联风险监督",
|
||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
||||
},
|
||||
DWBG6A2C_CourtRiskInfo: {
|
||||
name: "个人司法信息",
|
||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/CourtRiskInfoSection.vue")),
|
||||
},
|
||||
|
||||
// 司法涉诉
|
||||
FLXG0V4B: {
|
||||
@@ -393,6 +397,7 @@ const featureRiskLevels = {
|
||||
'DWBG6A2C_CreditDetail': 5,
|
||||
'DWBG6A2C_RentalBehavior': 5,
|
||||
'DWBG6A2C_RiskSupervision': 8,
|
||||
'DWBG6A2C_CourtRiskInfo': 14,
|
||||
|
||||
// 人企关系加强版子模块
|
||||
'CQYGL3F8E_Investment': 4,
|
||||
|
||||
@@ -1,24 +1,70 @@
|
||||
<template>
|
||||
<div class="bg-white rounded-xl shadow-sm p-6">
|
||||
<LTitle title="法院风险信息" type="red" />
|
||||
<LTitle title="个人司法信息" type="red" />
|
||||
|
||||
<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">
|
||||
<h3 class="text-lg font-semibold text-[#333333] mb-3 flex items-center">
|
||||
<span class="w-2 h-2 bg-[#EB3C3C] rounded-full mr-2"></span>
|
||||
法院风险概览
|
||||
司法风险概览
|
||||
</h3>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length || 0 }}
|
||||
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ totalListCaseCount }}
|
||||
</div>
|
||||
<div class="text-sm text-[#666666]">法院案件数</div>
|
||||
<div class="text-sm text-[#666666]">案件明细数</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length > 0 ? '有风险' : '无风险' }}
|
||||
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ hasJudicialContent ? '有风险' : '无风险' }}
|
||||
</div>
|
||||
<div class="text-sm text-[#666666]">风险状态</div>
|
||||
</div>
|
||||
@@ -26,150 +72,206 @@
|
||||
</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="flex items-center justify-between mb-3">
|
||||
<div class="flex items-center">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||
</div>
|
||||
|
||||
<!-- 案件类型统计 -->
|
||||
<div class="grid grid-cols-3 md:grid-cols-6 gap-2">
|
||||
<div v-for="(typeInfo, type) in caseTypeStats" :key="type" class="text-center p-2 rounded-lg border"
|
||||
:class="typeInfo.count > 0 ? 'bg-[#F9ECEC] border border-[#F0CACA]' : 'bg-[#ECF9EF] border border-[#CAECD3]'">
|
||||
<div class="grid grid-cols-3 md:grid-cols-5 gap-2">
|
||||
<div
|
||||
v-for="group in JUDICIAL_CASE_GROUPS"
|
||||
:key="group.listKey"
|
||||
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">
|
||||
<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 class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count }}
|
||||
</div>
|
||||
<div class="text-xs text-[#666666] leading-tight">{{ getCaseTypeShortName(type) }}</div>
|
||||
<div class="text-xs mt-0.5" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count > 0 ? '有风险' : '无风险' }}
|
||||
<div
|
||||
class="text-base font-bold"
|
||||
:class="(caseTypeStats[group.name]?.count || 0) > 0 ? 'text-[#EB3C3C]' : 'text-green-600'"
|
||||
>
|
||||
{{ caseTypeStats[group.name]?.count || 0 }}
|
||||
</div>
|
||||
<div class="text-xs text-[#666666] leading-tight">{{ group.shortName }}</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 class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getCaseTypeIconPath(caseType)" alt="" class="w-8 h-8 object-contain" />
|
||||
</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)">
|
||||
{{ cases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<van-collapse v-model="activeCases[caseType]" accordion>
|
||||
<van-collapse-item v-for="(caseItem, index) in cases" :key="`${caseType}-${index}`"
|
||||
:name="`${caseType}-${index}`" :class="getCaseItemClass(caseItem)">
|
||||
<van-collapse-item
|
||||
v-for="(caseItem, index) in cases"
|
||||
:key="`${caseType}-${index}`"
|
||||
:name="`${caseType}-${index}`"
|
||||
:class="getCaseItemClass(caseItem)"
|
||||
>
|
||||
<template #title>
|
||||
<div class="case-header">
|
||||
<div class="case-number">{{ caseItem.caseNumber || '案号未知' }}</div>
|
||||
<div class="case-status" :class="getCaseStatusClass(caseItem.caseStatus)">
|
||||
{{ caseItem.caseStatus || '状态未知' }}
|
||||
<div class="case-number">{{ getCaseTitle(caseItem) }}</div>
|
||||
<div v-if="getCaseStatus(caseItem)" class="case-status" :class="getCaseStatusClass(getCaseStatus(caseItem))">
|
||||
{{ getCaseStatus(caseItem) }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="case-details-content">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案件类型:</span>
|
||||
<span class="value">{{ caseItem.caseType || '-' }}</span>
|
||||
<!-- 标准司法案件 -->
|
||||
<template v-if="caseItem._kind === 'standard'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<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 class="detail-item">
|
||||
<span class="label">审理法院:</span>
|
||||
<span class="value">{{ caseItem.court || '-' }}</span>
|
||||
<div v-if="caseItem.nlaayTree" class="detail-item mt-2">
|
||||
<span class="label">案由</span>
|
||||
<span class="value">{{ caseItem.nlaayTree }}</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">诉讼地位:</span>
|
||||
<span class="value">{{ caseItem.litigantType || '-' }}</span>
|
||||
<div v-if="caseItem.cdsrxx" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">当事人</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700">
|
||||
{{ truncateText(caseItem.cdsrxx, 300) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">立案时间:</span>
|
||||
<span class="value">{{ caseItem.filingTime || '-' }}</span>
|
||||
<div v-if="caseItem.cgkwsPjjg" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">判决结果</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700 leading-relaxed">
|
||||
{{ truncateText(caseItem.cgkwsPjjg, 400) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<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>
|
||||
</template>
|
||||
|
||||
<!-- 匹配度信息 -->
|
||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-[#EBF5FF] rounded-lg">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="text-sm text-[#666666]">身份匹配度</span>
|
||||
<span class="text-sm font-bold text-[#2B79EE]">
|
||||
{{ (caseItem.matchScore * 100).toFixed(1) }}%
|
||||
</span>
|
||||
<!-- 失信公告 -->
|
||||
<template v-else-if="caseItem._kind === 'disin'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案号</span>
|
||||
<span class="value">{{ caseItem.ah || '-' }}</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 class="mt-2 w-full bg-gray-200 rounded-full h-2">
|
||||
<div class="h-2 rounded-full transition-all duration-500"
|
||||
:class="getMatchScoreBarStyle(caseItem.matchScore)"
|
||||
:style="{ width: (caseItem.matchScore * 100) + '%' }"></div>
|
||||
<div v-if="caseItem.yw" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">生效法律文书确定的义务</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ truncateText(caseItem.yw, 300) }}</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">
|
||||
<div class="text-sm text-[#666666] mb-2">案件摘要:</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border">
|
||||
<p class="text-sm text-gray-700 leading-relaxed">
|
||||
{{ formatContentSummary(caseItem.contentSummary) }}
|
||||
</p>
|
||||
<!-- 限高公告 -->
|
||||
<template v-else-if="caseItem._kind === 'limit'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案号</span>
|
||||
<span class="value">{{ caseItem.ah || '-' }}</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 v-if="caseItem.orglegalName" class="detail-item">
|
||||
<span class="label">企业名称</span>
|
||||
<span class="value">{{ caseItem.orglegalName }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 执行公告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>
|
||||
</template>
|
||||
</div>
|
||||
</van-collapse-item>
|
||||
</van-collapse>
|
||||
@@ -177,65 +279,59 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 高风险警告 -->
|
||||
<div v-if="hasHighRiskCases" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] rounded-lg">
|
||||
<div v-if="hasJudicialContent" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] rounded-lg">
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1 flex-shrink-0">
|
||||
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">法院风险警告</h4>
|
||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">司法风险警告</h4>
|
||||
<p class="text-[#666666] text-sm">
|
||||
检测到法院相关案件记录,存在司法风险,建议立即停止相关业务并进行详细核实。
|
||||
检测到司法相关记录,建议结合案件类型与诉讼地位进行审慎评估。
|
||||
</p>
|
||||
<div class="mt-2">
|
||||
<span class="text-[#666666] font-medium">涉及案件类型:</span>
|
||||
<span class="text-[#EB3C3C]">{{ getCaseTypesList.join('、') }}</span>
|
||||
<div v-if="activeCaseTypeNames.length" class="mt-2 text-sm">
|
||||
<span class="text-[#666666] font-medium">涉及类型:</span>
|
||||
<span class="text-[#EB3C3C]">{{ activeCaseTypeNames.join('、') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 无风险提示 -->
|
||||
<div v-if="!courtRiskInfos || courtRiskInfos.length === 0"
|
||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg">
|
||||
<div
|
||||
v-if="!hasJudicialContent"
|
||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg"
|
||||
>
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1">
|
||||
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-green-600 mb-2">法院风险核验通过</h4>
|
||||
<p class="text-green-600 text-sm">
|
||||
未检测到法院相关案件记录,司法风险较低。
|
||||
</p>
|
||||
<h4 class="font-semibold text-green-600 mb-2">司法信息核验通过</h4>
|
||||
<p class="text-green-600 text-sm">未检测到相关司法案件明细,司法风险较低。</p>
|
||||
</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>
|
||||
|
||||
<!-- 温馨提示 -->
|
||||
<LRemark
|
||||
content="法院风险信息展示申请人的司法风险情况,包括民事案件、执行案件、失信记录和限高消费等。数据来源于全国法院执行信息公开网等权威司法数据库。失信和限高记录对个人信用影响极大,会限制高消费和金融服务。执行案件可能涉及财产冻结和强制执行。建议对有司法风险记录的申请进行重点审查。" />
|
||||
content="个人司法信息来源于法院公开数据,包括民事、刑事、行政、执行等案件及失信、限高公告。字段与接口文档 judicialLeaseReport 结构一致。建议重点关注被告身份、未结案及被执行类记录。"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LTitle from '@/components/LTitle.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({
|
||||
data: {
|
||||
@@ -252,253 +348,102 @@ const props = defineProps({
|
||||
},
|
||||
notifyRiskStatus: {
|
||||
type: Function,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
})
|
||||
|
||||
// 从data中解构出需要的字段
|
||||
const courtRiskInfos = computed(() => {
|
||||
return props.data?.judiciaRiskInfos || []
|
||||
})
|
||||
const judicialReport = computed(() => getJudicialLeaseReport(props.data))
|
||||
|
||||
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 hasHighRiskCases = computed(() => {
|
||||
return courtRiskInfos.value && courtRiskInfos.value.length > 0
|
||||
})
|
||||
|
||||
// 获取案件类型列表
|
||||
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
|
||||
const getCaseTitle = (caseItem) => {
|
||||
if (caseItem._kind === 'disin' || caseItem._kind === 'limit') {
|
||||
return caseItem.ah || '案号未知'
|
||||
}
|
||||
|
||||
// 根据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 '民事案件'
|
||||
return caseItem.caseNumber || '案号未知'
|
||||
}
|
||||
|
||||
// 按案件类型分组
|
||||
const groupedCases = computed(() => {
|
||||
if (!courtRiskInfos.value) return {}
|
||||
const getCaseStatus = (caseItem) => {
|
||||
if (caseItem._kind === 'disin') 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 iconMap = {
|
||||
'民事案件': () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||
'刑事案件': () => new URL('@/assets/images/report/xs.png', import.meta.url).href,
|
||||
'行政案件': () => new URL('@/assets/images/report/xz.png', import.meta.url).href,
|
||||
'执行案件': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||
'非诉保全审查案件': () => new URL('@/assets/images/report/fsbq.png', import.meta.url).href,
|
||||
'强制清算与破产案件': () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||
'default': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href
|
||||
民事案件: () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||
刑事案件: () => new URL('@/assets/images/report/xs.png', import.meta.url).href,
|
||||
行政案件: () => new URL('@/assets/images/report/xz.png', import.meta.url).href,
|
||||
执行案件: () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||
非诉保全审查案件: () => new URL('@/assets/images/report/fsbq.png', import.meta.url).href,
|
||||
强制清算与破产案件: () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||
管辖案件: () => 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()
|
||||
}
|
||||
|
||||
// 获取案件类型名称
|
||||
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 styleMap = {
|
||||
'民事案件': 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||
'刑事案件': 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
'行政案件': 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||
'执行案件': 'bg-[#FFF8E1] text-[#D6943E]',
|
||||
'非诉保全审查案件': 'bg-[#ECF9EF] text-green-600',
|
||||
'强制清算与破产案件': 'bg-gray-100 text-[#666666]'
|
||||
民事案件: 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||
刑事案件: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
行政案件: 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||
执行案件: 'bg-[#FFF8E1] text-[#D6943E]',
|
||||
非诉保全审查案件: 'bg-[#ECF9EF] text-green-600',
|
||||
强制清算与破产案件: 'bg-gray-100 text-[#666666]',
|
||||
失信公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
限高公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
}
|
||||
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取案件项样式
|
||||
const getCaseItemClass = (caseItem) => {
|
||||
if (caseItem.caseStatus === '已结案') return 'case-item-settled'
|
||||
if (caseItem.caseStatus === '执行中') return 'case-item-executing'
|
||||
if (caseItem.caseStatus === '审理中') return 'case-item-hearing'
|
||||
const status = getCaseStatus(caseItem)
|
||||
if (status === '已结案') return 'case-item-settled'
|
||||
if (status === '执行中' || status === '未执行') return 'case-item-executing'
|
||||
return 'case-item-default'
|
||||
}
|
||||
|
||||
// 获取案件状态样式
|
||||
const getCaseStatusClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '未执行' || status === '失信公告') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高公告') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
return 'text-[#666666] bg-gray-100'
|
||||
}
|
||||
|
||||
// 获取案件状态文字样式
|
||||
const getCaseStatusTextClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600'
|
||||
if (status === '执行中') return 'text-[#D6943E]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C]'
|
||||
if (status === '审理中') return 'text-[#2B79EE]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C]'
|
||||
if (status === '限高中') return 'text-[#2B79EE]'
|
||||
return 'text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取匹配度进度条样式
|
||||
const getMatchScoreBarStyle = (score) => {
|
||||
if (score >= 0.9) return 'bg-green-500'
|
||||
if (score >= 0.8) return 'bg-[#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)
|
||||
const initActiveCases = () => {
|
||||
Object.keys(groupedCases.value).forEach((caseType) => {
|
||||
if (groupedCases.value[caseType]?.length && !activeCases.value[caseType]) {
|
||||
activeCases.value[caseType] = `${caseType}-0`
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 监听数据变化
|
||||
watch(() => props.data, (newData) => {
|
||||
if (newData?.judiciaRiskInfos) {
|
||||
Object.keys(groupedCases.value).forEach(caseType => {
|
||||
if (groupedCases.value[caseType].length > 0 && !activeCases.value[caseType]) {
|
||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
||||
}
|
||||
})
|
||||
}
|
||||
}, { immediate: true, deep: true })
|
||||
watch(
|
||||
() => props.data?.judicialLeaseReport,
|
||||
() => {
|
||||
initActiveCases()
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -535,42 +480,37 @@ watch(() => props.data, (newData) => {
|
||||
color: #666666;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #333333;
|
||||
font-size: 13px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
margin-left: 8px;
|
||||
word-break: break-all;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 案件项样式
|
||||
:deep(.van-collapse-item) {
|
||||
margin-bottom: 8px;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
|
||||
&.case-item-settled {
|
||||
border: 1px solid #CAECD3;
|
||||
background-color: #FBFDFC;
|
||||
}
|
||||
border: 1px solid #caecd3;
|
||||
background-color: #fbfdfc;
|
||||
}
|
||||
|
||||
&.case-item-executing {
|
||||
border: 1px solid #FFE082;
|
||||
background-color: #FFFDF9;
|
||||
}
|
||||
|
||||
&.case-item-hearing {
|
||||
border: 1px solid #EBF5FF;
|
||||
background-color: #FAFDFF;
|
||||
&.case-item-executing {
|
||||
border: 1px solid #ffe082;
|
||||
background-color: #fffdf9;
|
||||
}
|
||||
|
||||
&.case-item-default {
|
||||
border: 1px solid #DDDDDD;
|
||||
border: 1px solid #dddddd;
|
||||
background-color: #f9fafb;
|
||||
}
|
||||
}
|
||||
@@ -584,8 +524,4 @@ watch(() => props.data, (newData) => {
|
||||
padding: 0 16px 16px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
:deep(.van-collapse-item__wrapper) {
|
||||
border-radius: 8px;
|
||||
}
|
||||
</style>
|
||||
@@ -209,6 +209,13 @@ const riskListConfig = {
|
||||
severity: 'medium',
|
||||
color: 'orange'
|
||||
},
|
||||
mediumRelationRisk: {
|
||||
name: '中介关联风险',
|
||||
description: '命中中介关联风险名单',
|
||||
icon: '🔗',
|
||||
severity: 'high',
|
||||
color: 'red'
|
||||
},
|
||||
phoneNumberStatus: {
|
||||
name: '手机号码状态异常',
|
||||
description: '手机号码状态存在异常',
|
||||
|
||||
@@ -208,6 +208,20 @@ const riskConfig = {
|
||||
isHighRisk: true,
|
||||
icon: '🎰',
|
||||
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 }" />
|
||||
|
||||
<!-- 法院风险信息 -->
|
||||
<!-- <CourtRiskInfoSection
|
||||
:data="{ judiciaRiskInfos: data.judiciaRiskInfos }"
|
||||
/> -->
|
||||
<!-- 个人司法信息 -->
|
||||
<CourtRiskInfoSection :data="{ judicialLeaseReport: data.judicialLeaseReport }" />
|
||||
|
||||
</div>
|
||||
</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. 法院风险信息
|
||||
if (originalData.judiciaRiskInfos && originalData.judiciaRiskInfos.length > 0) {
|
||||
// 14. 个人司法信息
|
||||
if (originalData.judicialLeaseReport) {
|
||||
splitModules.push({
|
||||
data: {
|
||||
apiID: 'DWBG6A2C_CourtRiskInfo',
|
||||
data: {
|
||||
judiciaRiskInfos: originalData.judiciaRiskInfos
|
||||
judicialLeaseReport: originalData.judicialLeaseReport
|
||||
},
|
||||
success: true,
|
||||
timestamp: baseTimestamp
|
||||
@@ -269,7 +269,8 @@ export function formatPhoneStatus(status) {
|
||||
export function formatVerificationResult(result) {
|
||||
const resultMap = {
|
||||
'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: '❓' };
|
||||
|
||||
@@ -467,7 +467,7 @@ const featureMap = {
|
||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/RiskSupervisionSection.vue")),
|
||||
},
|
||||
DWBG6A2C_CourtRiskInfo: {
|
||||
name: "法院风险信息",
|
||||
name: "个人司法信息",
|
||||
component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/components/CourtRiskInfoSection.vue")),
|
||||
},
|
||||
// 贷款风险报告
|
||||
|
||||
@@ -1,24 +1,70 @@
|
||||
<template>
|
||||
<div class="bg-white rounded-xl shadow-sm p-6">
|
||||
<LTitle title="法院风险信息" type="red" />
|
||||
<LTitle title="个人司法信息" type="red" />
|
||||
|
||||
<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">
|
||||
<h3 class="text-lg font-semibold text-[#333333] mb-3 flex items-center">
|
||||
<span class="w-2 h-2 bg-[#EB3C3C] rounded-full mr-2"></span>
|
||||
法院风险概览
|
||||
司法风险概览
|
||||
</h3>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length || 0 }}
|
||||
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ totalListCaseCount }}
|
||||
</div>
|
||||
<div class="text-sm text-[#666666]">法院案件数</div>
|
||||
<div class="text-sm text-[#666666]">案件明细数</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-2xl font-bold" :class="courtRiskInfos?.length > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ courtRiskInfos?.length > 0 ? '有风险' : '无风险' }}
|
||||
<div class="text-2xl font-bold" :class="hasJudicialContent ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ hasJudicialContent ? '有风险' : '无风险' }}
|
||||
</div>
|
||||
<div class="text-sm text-[#666666]">风险状态</div>
|
||||
</div>
|
||||
@@ -26,150 +72,206 @@
|
||||
</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="flex items-center justify-between mb-3">
|
||||
<div class="flex items-center">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img src="@/assets/images/report/ajlxfb.png" alt="案件类型分布" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<span class="font-bold text-[#333333]">案件类型分布</span>
|
||||
</div>
|
||||
|
||||
<!-- 案件类型统计 -->
|
||||
<div class="grid grid-cols-3 md:grid-cols-6 gap-2">
|
||||
<div v-for="(typeInfo, type) in caseTypeStats" :key="type" class="text-center p-2 rounded-lg border"
|
||||
:class="typeInfo.count > 0 ? 'bg-[#F9ECEC] border border-[#F0CACA]' : 'bg-[#ECF9EF] border border-[#CAECD3]'">
|
||||
<div class="grid grid-cols-3 md:grid-cols-5 gap-2">
|
||||
<div
|
||||
v-for="group in JUDICIAL_CASE_GROUPS"
|
||||
:key="group.listKey"
|
||||
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">
|
||||
<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 class="text-base font-bold" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count }}
|
||||
</div>
|
||||
<div class="text-xs text-[#666666] leading-tight">{{ getCaseTypeShortName(type) }}</div>
|
||||
<div class="text-xs mt-0.5" :class="typeInfo.count > 0 ? 'text-[#EB3C3C]' : 'text-green-600'">
|
||||
{{ typeInfo.count > 0 ? '有风险' : '无风险' }}
|
||||
<div
|
||||
class="text-base font-bold"
|
||||
:class="(caseTypeStats[group.name]?.count || 0) > 0 ? 'text-[#EB3C3C]' : 'text-green-600'"
|
||||
>
|
||||
{{ caseTypeStats[group.name]?.count || 0 }}
|
||||
</div>
|
||||
<div class="text-xs text-[#666666] leading-tight">{{ group.shortName }}</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 class="bg-white rounded-xl border border-[#DDDDDD] p-4">
|
||||
<div class="flex items-center mb-3">
|
||||
<div class="w-8 h-8 flex items-center justify-center mr-2">
|
||||
<img :src="getCaseTypeIconPath(caseType)" alt="" class="w-8 h-8 object-contain" />
|
||||
</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)">
|
||||
{{ cases.length }}件
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<van-collapse v-model="activeCases[caseType]" accordion>
|
||||
<van-collapse-item v-for="(caseItem, index) in cases" :key="`${caseType}-${index}`"
|
||||
:name="`${caseType}-${index}`" :class="getCaseItemClass(caseItem)">
|
||||
<van-collapse-item
|
||||
v-for="(caseItem, index) in cases"
|
||||
:key="`${caseType}-${index}`"
|
||||
:name="`${caseType}-${index}`"
|
||||
:class="getCaseItemClass(caseItem)"
|
||||
>
|
||||
<template #title>
|
||||
<div class="case-header">
|
||||
<div class="case-number">{{ caseItem.caseNumber || '案号未知' }}</div>
|
||||
<div class="case-status" :class="getCaseStatusClass(caseItem.caseStatus)">
|
||||
{{ caseItem.caseStatus || '状态未知' }}
|
||||
<div class="case-number">{{ getCaseTitle(caseItem) }}</div>
|
||||
<div v-if="getCaseStatus(caseItem)" class="case-status" :class="getCaseStatusClass(getCaseStatus(caseItem))">
|
||||
{{ getCaseStatus(caseItem) }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="case-details-content">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案件类型:</span>
|
||||
<span class="value">{{ caseItem.caseType || '-' }}</span>
|
||||
<!-- 标准司法案件 -->
|
||||
<template v-if="caseItem._kind === 'standard'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<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 class="detail-item">
|
||||
<span class="label">审理法院:</span>
|
||||
<span class="value">{{ caseItem.court || '-' }}</span>
|
||||
<div v-if="caseItem.nlaayTree" class="detail-item mt-2">
|
||||
<span class="label">案由</span>
|
||||
<span class="value">{{ caseItem.nlaayTree }}</span>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">诉讼地位:</span>
|
||||
<span class="value">{{ caseItem.litigantType || '-' }}</span>
|
||||
<div v-if="caseItem.cdsrxx" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">当事人</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700">
|
||||
{{ truncateText(caseItem.cdsrxx, 300) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="label">立案时间:</span>
|
||||
<span class="value">{{ caseItem.filingTime || '-' }}</span>
|
||||
<div v-if="caseItem.cgkwsPjjg" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">判决结果</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm text-gray-700 leading-relaxed">
|
||||
{{ truncateText(caseItem.cgkwsPjjg, 400) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<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>
|
||||
</template>
|
||||
|
||||
<!-- 匹配度信息 -->
|
||||
<div v-if="caseItem.matchScore" class="mt-3 p-3 bg-[#EBF5FF] rounded-lg">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="text-sm text-[#666666]">身份匹配度</span>
|
||||
<span class="text-sm font-bold text-[#2B79EE]">
|
||||
{{ (caseItem.matchScore * 100).toFixed(1) }}%
|
||||
</span>
|
||||
<!-- 失信公告 -->
|
||||
<template v-else-if="caseItem._kind === 'disin'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案号</span>
|
||||
<span class="value">{{ caseItem.ah || '-' }}</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 class="mt-2 w-full bg-gray-200 rounded-full h-2">
|
||||
<div class="h-2 rounded-full transition-all duration-500"
|
||||
:class="getMatchScoreBarStyle(caseItem.matchScore)"
|
||||
:style="{ width: (caseItem.matchScore * 100) + '%' }"></div>
|
||||
<div v-if="caseItem.yw" class="mt-3">
|
||||
<div class="text-sm text-[#666666] mb-1">生效法律文书确定的义务</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border text-sm">{{ truncateText(caseItem.yw, 300) }}</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">
|
||||
<div class="text-sm text-[#666666] mb-2">案件摘要:</div>
|
||||
<div class="bg-gray-50 rounded-lg p-3 border">
|
||||
<p class="text-sm text-gray-700 leading-relaxed">
|
||||
{{ formatContentSummary(caseItem.contentSummary) }}
|
||||
</p>
|
||||
<!-- 限高公告 -->
|
||||
<template v-else-if="caseItem._kind === 'limit'">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="detail-item">
|
||||
<span class="label">案号</span>
|
||||
<span class="value">{{ caseItem.ah || '-' }}</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 v-if="caseItem.orglegalName" class="detail-item">
|
||||
<span class="label">企业名称</span>
|
||||
<span class="value">{{ caseItem.orglegalName }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 执行公告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>
|
||||
</template>
|
||||
</div>
|
||||
</van-collapse-item>
|
||||
</van-collapse>
|
||||
@@ -177,65 +279,59 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 高风险警告 -->
|
||||
<div v-if="hasHighRiskCases" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] rounded-lg">
|
||||
<div v-if="hasJudicialContent" class="mt-4 p-4 bg-[#F9ECEC] border border-[#F0CACA] rounded-lg">
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1 flex-shrink-0">
|
||||
<img src="@/assets/images/report/gfx.png" alt="高风险" class="w-10 h-10 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">法院风险警告</h4>
|
||||
<h4 class="font-semibold text-[#EB3C3C] mb-2">司法风险警告</h4>
|
||||
<p class="text-[#666666] text-sm">
|
||||
检测到法院相关案件记录,存在司法风险,建议立即停止相关业务并进行详细核实。
|
||||
检测到司法相关记录,建议结合案件类型与诉讼地位进行审慎评估。
|
||||
</p>
|
||||
<div class="mt-2">
|
||||
<span class="text-[#666666] font-medium">涉及案件类型:</span>
|
||||
<span class="text-[#EB3C3C]">{{ getCaseTypesList.join('、') }}</span>
|
||||
<div v-if="activeCaseTypeNames.length" class="mt-2 text-sm">
|
||||
<span class="text-[#666666] font-medium">涉及类型:</span>
|
||||
<span class="text-[#EB3C3C]">{{ activeCaseTypeNames.join('、') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 无风险提示 -->
|
||||
<div v-if="!courtRiskInfos || courtRiskInfos.length === 0"
|
||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg">
|
||||
<div
|
||||
v-if="!hasJudicialContent"
|
||||
class="mt-4 p-4 bg-[#ECF9EF] border border-[#CAECD3] rounded-lg"
|
||||
>
|
||||
<div class="flex items-start">
|
||||
<div class="mr-3 mt-1">
|
||||
<img src="@/assets/images/report/zq.png" alt="正常" class="w-8 h-8 object-contain" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-green-600 mb-2">法院风险核验通过</h4>
|
||||
<p class="text-green-600 text-sm">
|
||||
未检测到法院相关案件记录,司法风险较低。
|
||||
</p>
|
||||
<h4 class="font-semibold text-green-600 mb-2">司法信息核验通过</h4>
|
||||
<p class="text-green-600 text-sm">未检测到相关司法案件明细,司法风险较低。</p>
|
||||
</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>
|
||||
|
||||
<!-- 温馨提示 -->
|
||||
<LRemark
|
||||
content="法院风险信息展示申请人的司法风险情况,包括民事案件、执行案件、失信记录和限高消费等。数据来源于全国法院执行信息公开网等权威司法数据库。失信和限高记录对个人信用影响极大,会限制高消费和金融服务。执行案件可能涉及财产冻结和强制执行。建议对有司法风险记录的申请进行重点审查。" />
|
||||
content="个人司法信息来源于法院公开数据,包括民事、刑事、行政、执行等案件及失信、限高公告。字段与接口文档 judicialLeaseReport 结构一致。建议重点关注被告身份、未结案及被执行类记录。"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import LTitle from '@/components/LTitle.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({
|
||||
data: {
|
||||
@@ -252,253 +348,102 @@ const props = defineProps({
|
||||
},
|
||||
notifyRiskStatus: {
|
||||
type: Function,
|
||||
default: () => { },
|
||||
default: () => {},
|
||||
},
|
||||
})
|
||||
|
||||
// 从data中解构出需要的字段
|
||||
const courtRiskInfos = computed(() => {
|
||||
return props.data?.judiciaRiskInfos || []
|
||||
})
|
||||
const judicialReport = computed(() => getJudicialLeaseReport(props.data))
|
||||
|
||||
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 hasHighRiskCases = computed(() => {
|
||||
return courtRiskInfos.value && courtRiskInfos.value.length > 0
|
||||
})
|
||||
|
||||
// 获取案件类型列表
|
||||
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
|
||||
const getCaseTitle = (caseItem) => {
|
||||
if (caseItem._kind === 'disin' || caseItem._kind === 'limit') {
|
||||
return caseItem.ah || '案号未知'
|
||||
}
|
||||
|
||||
// 根据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 '民事案件'
|
||||
return caseItem.caseNumber || '案号未知'
|
||||
}
|
||||
|
||||
// 按案件类型分组
|
||||
const groupedCases = computed(() => {
|
||||
if (!courtRiskInfos.value) return {}
|
||||
const getCaseStatus = (caseItem) => {
|
||||
if (caseItem._kind === 'disin') 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 iconMap = {
|
||||
'民事案件': () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||
'刑事案件': () => new URL('@/assets/images/report/xs.png', import.meta.url).href,
|
||||
'行政案件': () => new URL('@/assets/images/report/xz.png', import.meta.url).href,
|
||||
'执行案件': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||
'非诉保全审查案件': () => new URL('@/assets/images/report/fsbq.png', import.meta.url).href,
|
||||
'强制清算与破产案件': () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||
'default': () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href
|
||||
民事案件: () => new URL('@/assets/images/report/ms.png', import.meta.url).href,
|
||||
刑事案件: () => new URL('@/assets/images/report/xs.png', import.meta.url).href,
|
||||
行政案件: () => new URL('@/assets/images/report/xz.png', import.meta.url).href,
|
||||
执行案件: () => new URL('@/assets/images/report/zxaj.png', import.meta.url).href,
|
||||
非诉保全审查案件: () => new URL('@/assets/images/report/fsbq.png', import.meta.url).href,
|
||||
强制清算与破产案件: () => new URL('@/assets/images/report/qspc.png', import.meta.url).href,
|
||||
管辖案件: () => 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()
|
||||
}
|
||||
|
||||
// 获取案件类型名称
|
||||
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 styleMap = {
|
||||
'民事案件': 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||
'刑事案件': 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
'行政案件': 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||
'执行案件': 'bg-[#FFF8E1] text-[#D6943E]',
|
||||
'非诉保全审查案件': 'bg-[#ECF9EF] text-green-600',
|
||||
'强制清算与破产案件': 'bg-gray-100 text-[#666666]'
|
||||
民事案件: 'bg-[#2B79EE1A] text-[#2B79EE]',
|
||||
刑事案件: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
行政案件: 'bg-[#EBF5FF] text-[#2B79EE]',
|
||||
执行案件: 'bg-[#FFF8E1] text-[#D6943E]',
|
||||
非诉保全审查案件: 'bg-[#ECF9EF] text-green-600',
|
||||
强制清算与破产案件: 'bg-gray-100 text-[#666666]',
|
||||
失信公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
限高公告: 'bg-[#F9ECEC] text-[#EB3C3C]',
|
||||
}
|
||||
return styleMap[caseType] || 'bg-gray-100 text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取案件项样式
|
||||
const getCaseItemClass = (caseItem) => {
|
||||
if (caseItem.caseStatus === '已结案') return 'case-item-settled'
|
||||
if (caseItem.caseStatus === '执行中') return 'case-item-executing'
|
||||
if (caseItem.caseStatus === '审理中') return 'case-item-hearing'
|
||||
const status = getCaseStatus(caseItem)
|
||||
if (status === '已结案') return 'case-item-settled'
|
||||
if (status === '执行中' || status === '未执行') return 'case-item-executing'
|
||||
return 'case-item-default'
|
||||
}
|
||||
|
||||
// 获取案件状态样式
|
||||
const getCaseStatusClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600 bg-green-100'
|
||||
if (status === '执行中') return 'text-[#D6943E] bg-[#FFF8E1]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '审理中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高中') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
if (status === '未执行' || status === '失信公告') return 'text-[#EB3C3C] bg-[#F9ECEC]'
|
||||
if (status === '限高公告') return 'text-[#2B79EE] bg-[#EBF5FF]'
|
||||
return 'text-[#666666] bg-gray-100'
|
||||
}
|
||||
|
||||
// 获取案件状态文字样式
|
||||
const getCaseStatusTextClass = (status) => {
|
||||
if (status === '已结案') return 'text-green-600'
|
||||
if (status === '执行中') return 'text-[#D6943E]'
|
||||
if (status === '未执行') return 'text-[#EB3C3C]'
|
||||
if (status === '审理中') return 'text-[#2B79EE]'
|
||||
if (status === '失信中') return 'text-[#EB3C3C]'
|
||||
if (status === '限高中') return 'text-[#2B79EE]'
|
||||
return 'text-[#666666]'
|
||||
}
|
||||
|
||||
// 获取匹配度进度条样式
|
||||
const getMatchScoreBarStyle = (score) => {
|
||||
if (score >= 0.9) return 'bg-green-500'
|
||||
if (score >= 0.8) return 'bg-[#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)
|
||||
const initActiveCases = () => {
|
||||
Object.keys(groupedCases.value).forEach((caseType) => {
|
||||
if (groupedCases.value[caseType]?.length && !activeCases.value[caseType]) {
|
||||
activeCases.value[caseType] = `${caseType}-0`
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 监听数据变化
|
||||
watch(() => props.data, (newData) => {
|
||||
if (newData?.judiciaRiskInfos) {
|
||||
Object.keys(groupedCases.value).forEach(caseType => {
|
||||
if (groupedCases.value[caseType].length > 0 && !activeCases.value[caseType]) {
|
||||
activeCases.value[caseType] = getDefaultActiveCase(caseType)
|
||||
}
|
||||
})
|
||||
}
|
||||
}, { immediate: true, deep: true })
|
||||
watch(
|
||||
() => props.data?.judicialLeaseReport,
|
||||
() => {
|
||||
initActiveCases()
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -535,42 +480,37 @@ watch(() => props.data, (newData) => {
|
||||
color: #666666;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #333333;
|
||||
font-size: 13px;
|
||||
font-weight: 400;
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
margin-left: 8px;
|
||||
word-break: break-all;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 案件项样式
|
||||
:deep(.van-collapse-item) {
|
||||
margin-bottom: 8px;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
|
||||
&.case-item-settled {
|
||||
border: 1px solid #CAECD3;
|
||||
background-color: #FBFDFC;
|
||||
}
|
||||
border: 1px solid #caecd3;
|
||||
background-color: #fbfdfc;
|
||||
}
|
||||
|
||||
&.case-item-executing {
|
||||
border: 1px solid #FFE082;
|
||||
background-color: #FFFDF9;
|
||||
}
|
||||
|
||||
&.case-item-hearing {
|
||||
border: 1px solid #EBF5FF;
|
||||
background-color: #FAFDFF;
|
||||
&.case-item-executing {
|
||||
border: 1px solid #ffe082;
|
||||
background-color: #fffdf9;
|
||||
}
|
||||
|
||||
&.case-item-default {
|
||||
border: 1px solid #DDDDDD;
|
||||
border: 1px solid #dddddd;
|
||||
background-color: #f9fafb;
|
||||
}
|
||||
}
|
||||
@@ -584,8 +524,4 @@ watch(() => props.data, (newData) => {
|
||||
padding: 0 16px 16px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
:deep(.van-collapse-item__wrapper) {
|
||||
border-radius: 8px;
|
||||
}
|
||||
</style>
|
||||
@@ -209,6 +209,13 @@ const riskListConfig = {
|
||||
severity: 'medium',
|
||||
color: 'orange'
|
||||
},
|
||||
mediumRelationRisk: {
|
||||
name: '中介关联风险',
|
||||
description: '命中中介关联风险名单',
|
||||
icon: '🔗',
|
||||
severity: 'high',
|
||||
color: 'red'
|
||||
},
|
||||
phoneNumberStatus: {
|
||||
name: '手机号码状态异常',
|
||||
description: '手机号码状态存在异常',
|
||||
|
||||
@@ -208,6 +208,20 @@ const riskConfig = {
|
||||
isHighRisk: true,
|
||||
icon: '🎰',
|
||||
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 }" />
|
||||
|
||||
<!-- 法院风险信息 -->
|
||||
<!-- <CourtRiskInfoSection
|
||||
:data="{ judiciaRiskInfos: data.judiciaRiskInfos }"
|
||||
/> -->
|
||||
<!-- 个人司法信息 -->
|
||||
<CourtRiskInfoSection :data="{ judicialLeaseReport: data.judicialLeaseReport }" />
|
||||
|
||||
</div>
|
||||
</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. 法院风险信息
|
||||
if (originalData.judiciaRiskInfos && originalData.judiciaRiskInfos.length > 0) {
|
||||
// 14. 个人司法信息
|
||||
if (originalData.judicialLeaseReport) {
|
||||
splitModules.push({
|
||||
data: {
|
||||
apiID: 'DWBG6A2C_CourtRiskInfo',
|
||||
data: {
|
||||
judiciaRiskInfos: originalData.judiciaRiskInfos
|
||||
judicialLeaseReport: originalData.judicialLeaseReport
|
||||
},
|
||||
success: true,
|
||||
timestamp: baseTimestamp
|
||||
@@ -269,7 +269,8 @@ export function formatPhoneStatus(status) {
|
||||
export function formatVerificationResult(result) {
|
||||
const resultMap = {
|
||||
'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: '❓' };
|
||||
|
||||
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