From 5c4921b34ee7edbe531df3826a19c4d5e6fe9144 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Sun, 19 Apr 2026 16:30:06 +0800 Subject: [PATCH] f --- index.html | 6 + public/example.json | 64 ++++ src/components/BaseReport.vue | 70 ++-- src/main.js | 10 +- src/ui/FLXGK5D2.zip | Bin 0 -> 7986 bytes src/ui/FLXGK5D2/components/CaseDetail.vue | 76 ++++ .../components/StatisticsOverview.vue | 93 +++++ src/ui/FLXGK5D2/index.vue | 344 ++++++++++++++++++ src/ui/FLXGK5D2/utils/lawsuitUtils.js | 143 ++++++++ src/views/Report.vue | 8 +- 10 files changed, 788 insertions(+), 26 deletions(-) create mode 100644 src/ui/FLXGK5D2.zip create mode 100644 src/ui/FLXGK5D2/components/CaseDetail.vue create mode 100644 src/ui/FLXGK5D2/components/StatisticsOverview.vue create mode 100644 src/ui/FLXGK5D2/index.vue create mode 100644 src/ui/FLXGK5D2/utils/lawsuitUtils.js diff --git a/index.html b/index.html index cb56af5..619f226 100644 --- a/index.html +++ b/index.html @@ -95,7 +95,13 @@ diff --git a/src/ui/FLXGK5D2/components/StatisticsOverview.vue b/src/ui/FLXGK5D2/components/StatisticsOverview.vue new file mode 100644 index 0000000..fbe4af5 --- /dev/null +++ b/src/ui/FLXGK5D2/components/StatisticsOverview.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/ui/FLXGK5D2/index.vue b/src/ui/FLXGK5D2/index.vue new file mode 100644 index 0000000..a1873cd --- /dev/null +++ b/src/ui/FLXGK5D2/index.vue @@ -0,0 +1,344 @@ + + + + + diff --git a/src/ui/FLXGK5D2/utils/lawsuitUtils.js b/src/ui/FLXGK5D2/utils/lawsuitUtils.js new file mode 100644 index 0000000..9103a66 --- /dev/null +++ b/src/ui/FLXGK5D2/utils/lawsuitUtils.js @@ -0,0 +1,143 @@ +// 案件类型映射表 +export const lawsuitTypeMap = { + sxbzxr: { + text: '失信被执行', + color: 'text-red-600 bg-red-50', + darkColor: 'bg-red-500', + riskLevel: 'high', // 高风险 + }, + xgbzxr: { + text: '限高被执行', + color: 'text-orange-600 bg-orange-50', + darkColor: 'bg-orange-500', + riskLevel: 'high', // 高风险 + } +} + +// 案件类型文本 +export const getCaseTypeText = type => { + return lawsuitTypeMap[type]?.text || '其他案件' +} + +// 案件类型颜色 +export const getCaseTypeColor = type => { + return lawsuitTypeMap[type]?.color || 'text-gray-600 bg-gray-50' +} + +// 案件类型深色 +export const getCaseTypeDarkColor = type => { + return lawsuitTypeMap[type]?.darkColor || 'bg-gray-500' +} + +// 格式化日期显示 +export const formatDate = dateStr => { + if (!dateStr) return '—' + // 转换YYYY-MM-DD为年月日格式 + if (dateStr.includes('-')) { + const parts = dateStr.split('-') + if (parts.length === 3) { + return `${parts[0]}年${parts[1]}月${parts[2]}日` + } + } + return dateStr // 如果不是标准格式则返回原始字符串 +} + +// 获取案件状态样式 +export const getCaseStatusClass = status => { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('已结') || status.includes('已办结')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('执行中') || status.includes('审理中')) { + return 'bg-blue-50 text-blue-600' + } else if (status.includes('未执行') || status.includes('未履行')) { + return 'bg-amber-50 text-amber-600' + } else { + return 'bg-gray-100 text-gray-500' + } +} + +// 根据案件类型获取风险等级 +export const getCaseTypeRiskLevel = caseType => { + const typeInfo = lawsuitTypeMap[caseType] + if (!typeInfo) { + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } + } + + const riskLevelMap = { + high: { + text: '高风险', + color: 'text-red-600 bg-red-50', + }, + medium: { + text: '中风险', + color: 'text-amber-600 bg-amber-50', + }, + low: { + text: '低风险', + color: 'text-green-600 bg-green-50', + }, + } + + return { + level: typeInfo.riskLevel, + ...riskLevelMap[typeInfo.riskLevel], + } +} + +// 解析扁平数据为结构化数组 +export const parseFlatData = (data) => { + const sx = []; + const xg = []; + + // 最多10个 + for (let i = 1; i <= 10; i++) { + // 检查失信 + if (data[`el_sx${i}_casecode`]) { + sx.push({ + ah: data[`el_sx${i}_casecode`], + casecode: data[`el_sx${i}_casecode`], + iname: data[`el_sx${i}_iname`], + sexname: data[`el_sx${i}_sexname`], + age: data[`el_sx${i}_age`], + courtname: data[`el_sx${i}_courtname`], + areaname: data[`el_sx${i}_areaname`], + publishdate: data[`el_sx${i}_publishdate`], + regdate: data[`el_sx${i}_regdate`], + gistcid: data[`el_sx${i}_gistcid`], + signalDesc: data[`el_sx${i}_signalDesc`], + signalRating: data[`el_sx${i}_signalRating`], + datatype: data[`el_sx${i}_datatype`], + partytypename: data[`el_sx${i}_partytypename`], + sign: data[`el_sx${i}_sign`], + type: 'sxbzxr' + }); + } + + // 检查限高 + if (data[`el_xg${i}_casecode`]) { + xg.push({ + ah: data[`el_xg${i}_casecode`], + casecode: data[`el_xg${i}_casecode`], + iname: data[`el_xg${i}_iname`], + sexname: data[`el_xg${i}_sexname`], + age: data[`el_xg${i}_age`], + courtname: data[`el_xg${i}_courtname`], + areaname: data[`el_xg${i}_areaname`], + publishdate: data[`el_xg${i}_publishdate`], + regdate: data[`el_xg${i}_regdate`], + signalDesc: data[`el_xg${i}_signalDesc`], + signalRating: data[`el_xg${i}_signalRating`], + datatype: data[`el_xg${i}_datatype`], + sign: data[`el_xg${i}_sign`], + type: 'xgbzxr' + }); + } + } + + return { sx, xg }; +} diff --git a/src/views/Report.vue b/src/views/Report.vue index 2b5e445..cb963b4 100644 --- a/src/views/Report.vue +++ b/src/views/Report.vue @@ -40,10 +40,13 @@ onMounted(async () => { }); const loadExampleData = async () => { + console.log('[Report.vue] 开始加载示例数据...'); try { // 从 public 目录加载示例数据 const response = await fetch('/example.json'); + console.log('[Report.vue] 数据请求响应状态:', response.status); const data = await response.json(); + console.log('[Report.vue] 原始数据条数:', Array.isArray(data) ? data.length : '非数组'); if (Array.isArray(data) && data.length > 0) { // 直接使用任意产品类型(不影响显示) @@ -53,15 +56,18 @@ const loadExampleData = async () => { reportData.value = data.sort((a, b) => { return (a.feature?.sort || 0) - (b.feature?.sort || 0); }); + console.log('[Report.vue] 数据排序完成,准备渲染...'); isEmpty.value = false; isDone.value = true; + console.log('[Report.vue] isDone 设置为 true'); } else { + console.warn('[Report.vue] 数据为空或非数组'); isEmpty.value = true; isDone.value = true; } } catch (error) { - console.error('加载示例数据失败:', error); + console.error('[Report.vue] 加载示例数据失败:', error); isEmpty.value = true; isDone.value = true; }