// 案件类型映射表 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', // 高风险 }, criminal: { text: '刑事案件', color: 'text-red-600 bg-red-50', darkColor: 'bg-red-500', riskLevel: 'high', // 高风险 }, civil: { text: '民事案件', color: 'text-blue-600 bg-blue-50', darkColor: 'bg-blue-500', riskLevel: 'medium', // 中风险 }, administrative: { text: '行政案件', color: 'text-purple-600 bg-purple-50', darkColor: 'bg-purple-500', riskLevel: 'medium', // 中风险 }, implement: { text: '执行案件', color: 'text-orange-600 bg-orange-50', darkColor: 'bg-orange-500', riskLevel: 'medium', // 中风险 }, bankrupt: { text: '强制清算与破产案件', color: 'text-rose-600 bg-rose-50', darkColor: 'bg-rose-500', riskLevel: 'high', // 高风险 }, preservation: { text: '非诉保全审查', color: 'text-amber-600 bg-amber-50', darkColor: 'bg-amber-500', riskLevel: 'low', // 低风险 }, } // 案件类型文本 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 formatLawsuitMoney = money => { if (!money) return '—' const value = parseFloat(money) if (isNaN(value)) return '—' // 超过1亿显示亿元 if (value >= 10000) { return ( (value / 10000).toLocaleString('zh-CN', { minimumFractionDigits: 0, maximumFractionDigits: 2, }) + ' 亿元' ) } // 否则显示万元 return ( value.toLocaleString('zh-CN', { minimumFractionDigits: 0, maximumFractionDigits: 2, }) + ' 万元' ) } // 获取案件状态样式 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('未执行')) { return 'bg-amber-50 text-amber-600' } else { return 'bg-gray-100 text-gray-500' } } // 获取企业状态对应的样式 export const getStatusClass = status => { if (!status) return 'bg-gray-100 text-gray-500' if (status.includes('注销') || status.includes('吊销')) { return 'bg-red-50 text-red-600' } else 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 { return 'bg-yellow-50 text-yellow-600' } } // 格式化资本金额显示 export const formatCapital = (capital, currency) => { if (!capital) return '—' // 检查是否包含"万"字或需要显示为万元 let unit = '' let value = parseFloat(capital) // 处理原始数据中可能带有的单位 if (typeof capital === 'string' && capital.includes('万')) { unit = '万' // 提取数字部分 const numMatch = capital.match(/[\d.]+/) value = numMatch ? parseFloat(numMatch[0]) : 0 } else if (value >= 10000) { // 大额数字转换为万元显示 value = value / 10000 unit = '万' } // 格式化数字,保留两位小数(如果有小数部分) const formattedValue = value.toLocaleString('zh-CN', { minimumFractionDigits: 0, maximumFractionDigits: 2, }) return `${formattedValue}${unit} ${currency || '人民币'}` } // 获取涉诉风险等级 export const getRiskLevel = lawsuitInfo => { if (!lawsuitInfo) { return { level: 'low', text: '低风险', color: 'text-green-600 bg-green-50', } } // 失信被执行人是最高风险 if (lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0) { return { level: 'high', text: '高风险', color: 'text-red-600 bg-red-50', } } // 限高被执行人是最高风险 if (lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0) { return { level: 'high', text: '高风险', color: 'text-red-600 bg-red-50', } } // 有涉诉数据的风险级别 if (lawsuitInfo.data && Object.keys(lawsuitInfo.data).length > 0) { // 检查是否有未结案的案件 const data = lawsuitInfo.data if (data.count && data.count_wei_total && data.count_wei_total > 0) { return { level: 'medium', text: '中风险', color: 'text-amber-600 bg-amber-50', } } // 只有已结案的为低中风险 return { level: 'low-medium', text: '低中风险', color: 'text-yellow-600 bg-yellow-50', } } return { level: 'low', text: '低风险', color: 'text-green-600 bg-green-50', } } // 获取涉诉案件统计 export const getLawsuitStats = lawsuitInfo => { if (!lawsuitInfo) return null const stats = { total: 0, types: [], } // 统计各类型案件数量 Object.keys(lawsuitTypeMap).forEach(type => { let count = 0 if (type === 'sxbzxr') { count = lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0 ? lawsuitInfo.sxbzxr.length : 0 } else if (type === 'xgbzxr') { count = lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0 ? lawsuitInfo.xgbzxr.length : 0 } else if (lawsuitInfo.data && lawsuitInfo.data[type] && Object.keys(lawsuitInfo.data[type]).length > 0) { const typeData = lawsuitInfo.data[type] count = typeData.cases && typeData.cases.length ? typeData.cases.length : 0 } if (count > 0) { stats.total += count stats.types.push({ type, count, name: getCaseTypeText(type), color: getCaseTypeColor(type), darkColor: getCaseTypeDarkColor(type), }) } }) return stats } // 获取案件类型优先级顺序 export const getCaseTypePriority = () => { return [ 'sxbzxr', // 失信被执行人(最高风险) 'xgbzxr', // 限高被执行人 'criminal', // 刑事案件 'civil', // 民事案件 'administrative', // 行政案件 'implement', // 执行案件 'bankrupt', // 强制清算与破产案件 'preservation', // 非诉保全审查 ] } // 根据案件类型获取风险等级 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], } }