This commit is contained in:
Mrx
2026-04-19 16:30:06 +08:00
parent 7b472db9d8
commit 5c4921b34e
10 changed files with 788 additions and 26 deletions

View File

@@ -87,24 +87,6 @@ onMounted(async () => {
await loadTrapezoidBackground();
});
// 处理数据拆分支持DWBG8B4D、DWBG6A2C、CJRZQ5E9F和CQYGL3F8E
const processedReportData = computed(() => {
let data = reportData.value;
// 拆分DWBG8B4D数据
data = splitDWBG8B4DForTabs(data);
// 拆分DWBG6A2C数据
data = splitDWBG6A2CForTabs(data);
// 拆分CQYGL3F8E数据
data = splitCQYGL3F8EForTabs(data);
// 过滤掉在featureMap中没有对应的项
return data.filter(item => featureMap[item.data.apiID]);
});
// 牌匾背景图片样式
const trapezoidBgStyle = computed(() => {
if (trapezoidBgImage.value) {
return {
@@ -183,6 +165,15 @@ const featureMap = {
),
},
// 法院被执行人高级版
FLXGK5D2: {
name: "法院被执行人高级版",
component: defineAsyncComponent(() =>
import("@/ui/FLXGK5D2/index.vue")
),
remark: '法院被执行人高级版展示申请人作为失信被执行人或限高被执行人的详细情况。数据来源于法院公开信息,包括案号、执行法院、立案时间及风险信号描述等。'
},
// 个人涉诉
FLXG7E8F: {
name: "个人涉诉",
@@ -492,6 +483,7 @@ const maskValue = computed(() => {
const featureRiskLevels = {
// 🔴 高风险类
'FLXG0V4B': 20, // 司法涉诉
'FLXGK5D2': 20, // 法院被执行人高级版
'FLXG7E8F': 20, // 个人涉诉
// 🟠 中高风险类 - 权重 7
@@ -511,7 +503,7 @@ const featureRiskLevels = {
// 🟡 中风险类 - 权重 5
'QYGL3F8E': 5, // 人企关系加强版
'QCXG9P1C': 5, // 名下车辆
'QCXG9P1C': 5, // 名下车辆贷前
'QCXG7A2B': 3, // 名下车辆(简化版)
'JRZQ09J8': 5, // 收入评估
'JRZQ8B3C': 5, // 个人消费能力等级
@@ -537,7 +529,7 @@ const featureRiskLevels = {
'DWBG8B4D_LeasingRisk': 6,
'DWBG8B4D_RiskSupervision': 8,
'DWBG8B4D_RiskWarningTab': 9,
// 'DWBG6A2C_CourtRiskInfo':9,
'DWBG6A2C_CourtRiskInfo':9,
// 司南报告子模块
@@ -566,6 +558,32 @@ const featureRiskLevels = {
'CQYGL3F8E_TaxRisk': 7,
};
// 处理数据拆分支持DWBG8B4D、DWBG6A2C、CJRZQ5E9F和CQYGL3F8E
const processedReportData = computed(() => {
console.log('[BaseReport.vue] 开始计算 processedReportData...');
let data = reportData.value || [];
// 拆分DWBG8B4D数据
data = splitDWBG8B4DForTabs(data);
// 拆分DWBG6A2C数据
data = splitDWBG6A2CForTabs(data);
// 拆分CQYGL3F8E数据
data = splitCQYGL3F8EForTabs(data);
// 过滤掉在featureMap中没有对应的项
const filtered = data.filter(item => {
const apiID = item?.data?.apiID;
const exists = item && item.data && apiID && featureMap[apiID];
if (!exists && item?.data?.apiID) {
console.warn(`[BaseReport.vue] 未找到 API ID "${apiID}" 的对应组件配置,已过滤。`);
}
return exists;
});
console.log('[BaseReport.vue] 过滤后模块数量:', filtered.length);
return filtered;
});
// 存储每个组件的 ref 引用
const componentRefs = ref({});
@@ -585,6 +603,7 @@ defineExpose({
// 计算综合评分的函数(分数越高越安全)
const calculateScore = () => {
console.log('[BaseReport.vue] 开始计算报告评分...');
// 收集实际存在的 features 及其风险权重
const presentFeatures = [];
@@ -605,6 +624,7 @@ const calculateScore = () => {
});
});
console.log('[BaseReport.vue] 参与评分的特征数量:', presentFeatures.length);
if (presentFeatures.length === 0) return 100; // 无有效特征时返回满分(最安全)
// 累计总风险分数
@@ -641,12 +661,14 @@ const calculateScore = () => {
totalRiskScore += riskContribution;
});
console.log('[BaseReport.vue] 计算得出的总风险分数:', totalRiskScore);
// 将总风险分数限制在 0-90 范围内确保最低分为10分
const finalRiskScore = Math.max(0, Math.min(90, Math.round(totalRiskScore)));
// 转换为安全分数分数越高越安全100 - 风险分数)
// 最终分数范围10-100分
const safetyScore = 100 - finalRiskScore;
console.log('[BaseReport.vue] 最终安全评分:', safetyScore);
return safetyScore;
};
@@ -660,11 +682,11 @@ watch([reportData, componentRiskScores], () => {
timestamp: new Date().toISOString(),
finalScore: reportScore.value,
reportModules: processedReportData.value.map((item, index) => ({
apiID: item.data.apiID,
name: featureMap[item.data.apiID]?.name || '未知',
apiID: item?.data?.apiID || 'unknown',
name: featureMap[item?.data?.apiID]?.name || '未知',
index: index,
riskScore: componentRiskScores.value[`${item.data.apiID}_${index}`] ?? '未上报',
weight: featureRiskLevels[item.data.apiID] ?? 0
riskScore: componentRiskScores.value[`${item?.data?.apiID}_${index}`] ?? '未上报',
weight: featureRiskLevels[item?.data?.apiID] ?? 0
})),
componentScores: componentRiskScores.value,
riskLevels: featureRiskLevels