303 lines
7.6 KiB
JavaScript
303 lines
7.6 KiB
JavaScript
|
|
// 案件类型映射表
|
||
|
|
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],
|
||
|
|
}
|
||
|
|
}
|