This commit is contained in:
liangzai 2025-03-23 01:42:47 +08:00
parent e02562f880
commit 66c2df8d44
15 changed files with 1413 additions and 190 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

View File

@ -0,0 +1,255 @@
<template>
<div>
<div ref="chartRef" :style="{ width: '100%', height: '200px' }"></div>
<div class="risk-description">
{{ riskDescription }}
</div>
</div>
</template>
<script setup>
import * as echarts from "echarts";
import { ref, onMounted, onUnmounted, watch, computed } from "vue";
const props = defineProps({
score: {
type: Number,
required: true,
},
});
//
const riskLevel = computed(() => {
const score = props.score;
if (score >= 0 && score <= 25) {
return {
level: "无任何风险",
color: "#52c41a",
gradient: [
{ offset: 0, color: "#52c41a" },
{ offset: 1, color: "#7fdb42" }
]
};
} else if (score > 25 && score <= 50) {
return {
level: "风险指数较低",
color: "#faad14",
gradient: [
{ offset: 0, color: "#faad14" },
{ offset: 1, color: "#ffc53d" }
]
};
} else if (score > 50 && score <= 75) {
return {
level: "风险指数较高",
color: "#fa8c16",
gradient: [
{ offset: 0, color: "#fa8c16" },
{ offset: 1, color: "#ffa940" }
]
};
} else {
return {
level: "高风险警告",
color: "#f5222d",
gradient: [
{ offset: 0, color: "#f5222d" },
{ offset: 1, color: "#ff4d4f" }
]
};
}
});
//
const riskDescription = computed(() => {
const score = props.score;
if (score >= 0 && score <= 25) {
return "根据综合分析,当前报告未检测到明显风险因素,各项指标表现正常,总体状况良好。";
} else if (score > 25 && score <= 50) {
return "根据综合分析,当前报告存在少量风险信号,建议关注相关指标变化,保持警惕。";
} else if (score > 50 && score <= 75) {
return "根据综合分析,当前报告风险指数较高,多项指标显示异常,建议进一步核实相关情况。";
} else {
return "根据综合分析,当前报告显示高度风险状态,多项重要指标严重异常,请立即采取相应措施。";
}
});
const chartRef = ref(null);
let chartInstance = null;
const initChart = () => {
if (!chartRef.value) return;
// ECharts
chartInstance = echarts.init(chartRef.value);
updateChart();
};
const updateChart = () => {
if (!chartInstance) return;
//
const risk = riskLevel.value;
//
const option = {
series: [
{
type: "gauge",
startAngle: 180,
endAngle: 0,
min: 0,
max: 100,
radius: "100%",
center: ["50%", "80%"],
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, risk.gradient),
shadowBlur: 10,
shadowColor: 'rgba(0, 0, 0, 0.2)',
},
progress: {
show: true,
width: 20,
roundCap: true,
clip: false
},
axisLine: {
roundCap: true,
lineStyle: {
width: 20,
color: [
[1, new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{
offset: 0,
color: "rgba(0, 0, 0, 0.1)"
},
{
offset: 1,
color: "rgba(0, 0, 0, 0.05)"
}
])]
]
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
distance: -26,
length: 5,
lineStyle: {
color: "#999",
width: 2
}
},
axisLabel: {
show: true,
distance: -8,
fontSize: 12,
color: "#999",
formatter: function (value) {
if (value % 20 === 0) {
return value;
}
return "";
}
},
anchor: {
show: false
},
pointer: {
icon: "triangle",
iconStyle: {
color: risk.color,
borderColor: risk.color,
borderWidth: 1
},
offsetCenter: ["7%", "-67%"],
length: "10%",
width: 15
},
detail: {
valueAnimation: true,
fontSize: 30,
fontWeight: "bold",
color: risk.color,
offsetCenter: [0, "-25%"],
formatter: function (value) {
return `{value|${value}分}\n{level|${risk.level}}`;
},
rich: {
value: {
fontSize: 30,
fontWeight: 'bold',
color: risk.color,
padding: [0, 0, 5, 0]
},
level: {
fontSize: 14,
fontWeight: 'normal',
color: risk.color,
padding: [5, 0, 0, 0]
}
}
},
data: [
{
value: props.score
}
],
title: {
fontSize: 14,
color: risk.color,
offsetCenter: [0, "10%"],
formatter: risk.level
}
}
]
};
// 使
chartInstance.setOption(option);
};
//
watch(
() => props.score,
() => {
updateChart();
}
);
onMounted(() => {
initChart();
//
window.addEventListener("resize", () => {
if (chartInstance) {
chartInstance.resize();
}
});
});
//
onUnmounted(() => {
if (chartInstance) {
chartInstance.dispose();
chartInstance = null;
}
window.removeEventListener("resize", chartInstance?.resize);
});
</script>
<style scoped>
.risk-description {
margin-top: 10px;
padding: 8px 12px;
background-color: #f5f5f5;
border-radius: 4px;
color: #666;
font-size: 12px;
line-height: 1.5;
text-align: center;
}
</style>

View File

@ -54,7 +54,7 @@ const route = useRoute();
const tabbar = ref('index');
const menu = reactive([
{ title: '首页', icon: 'home-o', name: 'index' },
// { title: '广', icon: 'balance-o', name: 'agent' },
{ title: '推广', icon: 'balance-o', name: 'agent' },
{ title: 'AI律师', icon: 'chat-o', name: 'ai' },
{ title: '我的', icon: 'user-o', name: 'me' },
]);

View File

@ -9,7 +9,6 @@ const props = defineProps({
required: true,
},
});
const chartInstance = ref(null); // ECharts
const chartRef = ref(null); // DOM
const riskLevel = ref("");

View File

@ -10,7 +10,6 @@ const props = defineProps({
},
});
const { data } = props;
//
const chartInstance = ref(null); // ECharts
const chartRef = ref(null); // DOM

377
src/ui/CLawsuitPP.vue Normal file
View File

@ -0,0 +1,377 @@
<script setup>
import LTitle from "@/components/LTitle.vue";
import { defineProps, onMounted, ref, computed } from "vue";
import * as echarts from "echarts";
const props = defineProps({
data: {
type: Object,
required: true,
},
});
// props.data
const {
entout: PropEntout = [],
sxbzxr: PropSxbzxr = [],
xgbzxr: PropXgbzxr = []
} = props.data || {}
// entout()
const entout = ref(PropEntout[0]?.entout || {
administrative: {},
bankrupt: {},
cases_tree: { criminal: [] },
civil: {},
count: {},
criminal: { cases: [], count: {} },
implement: {},
preservation: {}
})
// ()
const sx = ref(PropSxbzxr[0]?.sxbzxr || [])
const xg = ref(PropXgbzxr[0]?.xgbzxr || [])
const fieldLabel = [
// ================= =================
{ "field": "n_jbfy", "label": "经办法院" },
{ "field": "n_jbfy_cj", "label": "法院所属层级" },
{ "field": "c_ssdy", "label": "所属地域" },
// ================= =================
{ "field": "d_larq", "label": "立案时间" },
{ "field": "larq_stat", "label": "涉案时间分布" },
{ "field": "d_jarq", "label": "结案时间" },
// ================= =================
{ "field": "n_laay", "label": "立案案由" },
{ "field": "n_laay_tag", "label": "立案案由标签" },
{ "field": "n_laay_tree", "label": "立案案由详细" },
{ "field": "n_jaay", "label": "结案案由" },
{ "field": "n_jaay_tag", "label": "结案案由标签" },
{ "field": "n_jaay_tree", "label": "结案案由详细" },
{ "field": "n_dzzm", "label": "定罪罪名" },
{ "field": "n_dzzm_tree", "label": "定罪罪名详细" },
// ================= =================
{ "field": "c_gkws_dsr", "label": "当事人" },
{ "field": "n_dsrlx", "label": "当事人类型" },
{ "field": "n_ssdw", "label": "诉讼地位" },
{ "field": "n_ssdw_ys", "label": "一审诉讼地位" },
{ "field": "c_gkws_glah", "label": "相关案件号" },
// ================= =================
{ "field": "n_slcx", "label": "审理程序" },
{ "field": "c_slfsxx", "label": "审理方式信息" },
{ "field": "n_ajjzjd", "label": "案件进展阶段" },
{ "field": "n_pcjg", "label": "判处结果" },
{ "field": "c_gkws_pjjg", "label": "判决结果" },
{ "field": "n_pj_victory", "label": "胜诉估计" },
// ================= =================
// --- ---
{ "field": "n_qsbdje_level", "label": "起诉标的金额等级" },
{ "field": "n_qsbdje", "label": "起诉标的金额" },
{ "field": "n_qsbdje_gj_level", "label": "起诉标的金额估计等级" },
{ "field": "n_qsbdje_gj", "label": "起诉标的金额估计" },
// --- ---
{ "field": "n_jabdje_level", "label": "结案标的金额等级" },
{ "field": "n_jabdje", "label": "结案标的金额" },
{ "field": "n_jabdje_gj_level", "label": "结案标的金额估计等级" },
{ "field": "n_jabdje_gj", "label": "结案标的金额估计" },
// --- ---
{ "field": "n_sqzxbdje", "label": "申请执行标的金额" },
{ "field": "n_sjdwje", "label": "实际到位金额" },
{ "field": "n_wzxje", "label": "未执行金额" },
// --- ---
{ "field": "n_fzje_level", "label": "犯罪金额等级" },
{ "field": "n_fzje", "label": "犯罪金额" },
{ "field": "n_bqqpcje_level", "label": "被请求赔偿金额等级" },
{ "field": "n_bqqpcje", "label": "被请求赔偿金额" },
{ "field": "n_pcpcje_level", "label": "判处赔偿金额等级" },
{ "field": "n_pcpcje", "label": "判处赔偿金额" },
{ "field": "n_pcpcje_gj_level", "label": "判处赔偿金额估计等级" },
{ "field": "n_pcpcje_gj", "label": "判处赔偿金额估计" },
{ "field": "n_ccxzxje_level", "label": "财产刑执行金额等级" },
{ "field": "n_ccxzxje", "label": "财产刑执行金额" },
{ "field": "n_ccxzxje_gj_level", "label": "财产刑执行金额估计等级" },
{ "field": "n_ccxzxje_gj", "label": "财产刑执行金额估计" },
// ================= =================
{ "field": "n_sqbqse_level", "label": "申请保全数额等级" },
{ "field": "n_sqbqse", "label": "申请保全数额" },
{ "field": "c_sqbqbdw", "label": "申请保全标的物" },
// ================= =================
{ "field": "xb", "label": "性别" },
{ "field": "zxfy", "label": "执行法院" },
{ "field": "sf", "label": "省份" },
{ "field": "ah", "label": "案号" },
{ "field": "zxyjwh", "label": "执行依据文号" },
{ "field": "zxyjdw", "label": "执行依据单位" },
{ "field": "yw", "label": "生成法律文书确定的义务" },
{ "field": "lxqk", "label": "履行情况" },
{ "field": "xwqx", "label": "失信行为情形" },
{ "field": "pjje_gj", "label": "失信金额估计" },
{ "field": "larq", "label": "立案日期" },
{ "field": "fbrq", "label": "发布日期" },
];
const collapse = ref([]);
const chartOptions = ref({});
const chartDom = ref(null); // DOM
const totalCases = ref(0);
onMounted(() => {
//
const caseCounts = {
criminal: entout.value.criminal?.cases?.length || 0,
civil: entout.value.civil?.cases?.length || 0,
administrative: entout.value.administrative?.cases?.length || 0,
preservation: entout.value.preservation?.cases?.length || 0,
implement: entout.value.implement?.cases?.length || 0,
bankrupt: entout.value.bankrupt?.cases?.length || 0,
sx: sx.value.length,
xg: xg.value.length
};
//
totalCases.value = Object.values(caseCounts).reduce(
(sum, count) => sum + count,
0
);
chartOptions.value = {
title: {
// text: "",
// subtext: totalCases.toString(),
// left: "35%", // series.center
// top: "50%", // series.center
// textAlign: "center", //
// textStyle: {
// fontSize: 16,
// fontWeight: "bold",
// color: "#333",
// },
// subtextStyle: {
// fontSize: 24,
// fontWeight: "bold",
// color: "#EE6666",
// },
},
tooltip: {
trigger: "item",
formatter: "{b}: {c}件 ({d}%)",
},
legend: {
orient: "vertical",
right: "0", //
top: "middle", //
itemGap: 10, //
textStyle: {
fontSize: 12,
color: "#666",
},
},
series: [
{
name: "案件类型",
type: "pie",
radius: ["30%", "60%"], //
center: ["30%", "50%"], //
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 8, //
borderColor: "#fff",
borderWidth: 2,
},
label: {
show: false, //
position: "center",
},
emphasis: {
label: {
show: true,
fontSize: "18",
fontWeight: "bold",
formatter: "{b}\n{c}件",
},
},
labelLine: {
show: false,
},
data: [
{
value: caseCounts.criminal,
name: `刑事案件${caseCounts.criminal}`,
},
{
value: caseCounts.civil,
name: `民事案件${caseCounts.civil}`,
},
{
value: caseCounts.administrative,
name: `行政案件${caseCounts.administrative}`,
},
{
value: caseCounts.preservation,
name: `非诉保全审查${caseCounts.preservation}`,
},
{
value: caseCounts.implement,
name: `执行案件${caseCounts.implement}`,
},
{
value: caseCounts.bankrupt,
name: `强制清算与破产${caseCounts.bankrupt}`,
},
{
value: caseCounts.bankrupt,
name: `失信${caseCounts.sx}`,
}, {
value: caseCounts.bankrupt,
name: `限高${caseCounts.xg}`,
},
],
},
],
};
// ECharts
const chartInstance = echarts.init(chartDom.value);
chartInstance.setOption(chartOptions.value);
//
window.addEventListener("resize", () => {
chartInstance.resize();
});
});
const caseTypes = computed(() => {
const data = entout.value;
return {
civil: data.civil?.cases || [],
criminal: data.criminal?.cases || [],
administrative: data.administrative?.cases || [],
preservation: data.preservation?.cases || [],
implement: data.implement?.cases || [],
bankrupt: data.bankrupt?.cases || [],
sx: sx.value,
xg: xg.value
};
});
function getCaseTypeName(caseType) {
const caseTypeNames = {
civil: "民事",
criminal: "刑事",
administrative: "行政",
preservation: "非诉保全审查",
implement: "执行",
bankrupt: "强制清算与破产",
sx: "失信",
xg: "限高"
};
return caseTypeNames[caseType] || caseType;
}
</script>
<template>
<div class="card">
<div class="flex flex-col gap-y-4">
<!-- 涉诉案件统计 -->
<LTitle title="涉诉案件统计" type="blue-green" />
<div class="font-bold ml-4 text-lg">
涉诉案件数共
<span class="text-red-500 text-2xl font-bold">{{
totalCases
}}</span>
</div>
<div ref="chartDom" style="
width: 100%;
height: 300px;
margin-top: -40px;
margin-bottom: -40px;
"></div>
<template v-for="(caseType, typeName) in caseTypes" :key="typeName">
<LTitle :title="` ${getCaseTypeName(typeName)}案件`" type="blue-green" />
<div v-if="!caseType || caseType.length === 0">
无记录或数据未被公开
</div>
<template v-else>
<van-collapse v-model="collapse">
<van-collapse-item v-for="(caseData, index) in caseType" :key="index" custom-class="collapse"
:name="index" :title="`案件: ${caseData.c_ah || caseData.ah}`">
<div class="case-row">
<div class="case-label">案号:</div>
<div class="case-value">
{{ caseData.c_ah || "-" }}
</div>
</div>
<div class="case-row">
<div class="case-label">案件类型:</div>
<div class="case-value">
{{ caseData.n_ajlx || "-" }}
</div>
</div>
<div class="case-row">
<div class="case-label">经办法院:</div>
<div class="case-value">
{{ caseData.n_jbfy || "-" }}
</div>
</div>
<div class="case-row">
<div class="case-label">立案日期:</div>
<div class="case-value">
{{ caseData.d_larq || "-" }}
</div>
</div>
<div class="case-row">
<div class="case-label">结案方式:</div>
<div class="case-value">
{{ caseData.n_jafs || "-" }}
</div>
</div>
<div class="case-row">
<div class="case-label">当事人信息:</div>
<div class="case-value">
<div v-for="dsr in caseData.c_dsrxx" :key="dsr.c_mc">
{{ dsr.c_mc }} -
{{
dsr.n_ssdw
}}
</div>
</div>
</div>
<template v-for="(item, index) in fieldLabel" :key="index">
<div class="case-row" v-if="caseData[item.field]">
<div class="case-label">{{ item.label }}:</div>
<div class="case-value">{{ caseData[item.field] || '无' }}</div>
</div>
</template>
</van-collapse-item>
</van-collapse>
</template>
</template>
</div>
</div>
</template>
<style lang="scss" scoped>
.case-row {
@apply flex items-start justify-between my-2;
}
.case-label {
@apply flex-shrink-0 font-bold text-gray-700;
}
.case-value {
@apply text-left text-gray-500;
}
:deep(.van-cell) {}
</style>

View File

@ -13,7 +13,7 @@ const entCollapse = ref([]);
<template>
<div class="">
<template v-if="data && data.datalist.length === 0">
<template v-if="!data || data.datalist?.length === 0">
<!-- 显示暂无关联企业信息的提示 -->
<div class="card py-10 text-center text-gray-500">
暂无关联企业信息

View File

@ -1,14 +1,17 @@
<script setup>
import LTitle from "@/components/LTitle.vue";
// const props = defineProps({
// data: {
// type: Object,
// required: true,
// },
// })
// const { data } = props
const data = ref({
const props = defineProps({
data: {
type: Object,
required: true,
},
})
const { data } = props
import { ref, onMounted } from 'vue';
// datanull
const defaultData = {
swift_number: "999333_20181029143459_23453A4E0",
code: "00",
flag_specialList_c: "1",
@ -39,57 +42,57 @@ const data = ref({
sl_id_nbank_other_overdue: "0",
sl_id_nbank_other_lost: "0",
sl_id_court_bad_time: "0",
sl_id_court_executed_time: "1",
sl_id_bank_bad_time: "1",
sl_id_bank_overdue_time: "2",
sl_id_court_executed_time: "0",
sl_id_bank_bad_time: "0",
sl_id_bank_overdue_time: "0",
sl_id_bank_lost_time: "0",
sl_id_nbank_bad_time: "0",
sl_id_nbank_overdue_time: "1",
sl_id_nbank_lost_time: "1",
sl_id_nbank_overdue_time: "0",
sl_id_nbank_lost_time: "0",
sl_id_nbank_nsloan_bad_time: "0",
sl_id_nbank_nsloan_overdue_time: "1",
sl_id_nbank_nsloan_lost_time: "1",
sl_id_nbank_nsloan_overdue_time: "0",
sl_id_nbank_nsloan_lost_time: "0",
sl_id_nbank_sloan_bad_time: "0",
sl_id_nbank_sloan_overdue_time: "1",
sl_id_nbank_sloan_lost_time: "1",
sl_id_nbank_cons_bad_time: "1",
sl_id_nbank_sloan_overdue_time: "0",
sl_id_nbank_sloan_lost_time: "0",
sl_id_nbank_cons_bad_time: "0",
sl_id_nbank_cons_overdue_time: "0",
sl_id_nbank_cons_lost_time: "1",
sl_id_nbank_finlea_bad_time: "1",
sl_id_nbank_finlea_overdue_time: "2",
sl_id_nbank_cons_lost_time: "0",
sl_id_nbank_finlea_bad_time: "0",
sl_id_nbank_finlea_overdue_time: "0",
sl_id_nbank_finlea_lost_time: "0",
sl_id_nbank_autofin_bad_time: "1",
sl_id_nbank_autofin_bad_time: "0",
sl_id_nbank_autofin_overdue_time: "0",
sl_id_nbank_autofin_lost_time: "2",
sl_id_nbank_autofin_lost_time: "0",
sl_id_nbank_other_bad_time: "0",
sl_id_nbank_other_overdue_time: "0",
sl_id_nbank_other_lost_time: "0",
sl_id_court_bad_allnum: "1",
sl_id_court_executed_allnum: "1",
sl_id_bank_bad_allnum: "1",
sl_id_bank_overdue_allnum: "2",
sl_id_bank_lost_allnum: "5",
sl_id_nbank_bad_allnum: "6",
sl_id_nbank_overdue_allnum: "1",
sl_id_nbank_lost_allnum: "1",
sl_id_nbank_nsloan_bad_allnum: "7",
sl_id_nbank_nsloan_overdue_allnum: "1",
sl_id_nbank_nsloan_lost_allnum: "1",
sl_id_nbank_sloan_bad_allnum: "1",
sl_id_nbank_sloan_overdue_allnum: "1",
sl_id_nbank_sloan_lost_allnum: "1",
sl_id_nbank_cons_bad_allnum: "1",
sl_id_nbank_cons_overdue_allnum: "9",
sl_id_nbank_cons_lost_allnum: "1",
sl_id_nbank_finlea_bad_allnum: "1",
sl_id_nbank_finlea_overdue_allnum: "2",
sl_id_nbank_finlea_lost_allnum: "4",
sl_id_nbank_autofin_bad_allnum: "1",
sl_id_nbank_autofin_overdue_allnum: "8",
sl_id_nbank_autofin_lost_allnum: "2",
sl_id_nbank_other_bad_allnum: "5",
sl_id_nbank_other_overdue_allnum: "7",
sl_id_nbank_other_lost_allnum: "2",
sl_id_court_bad_allnum: "0",
sl_id_court_executed_allnum: "0",
sl_id_bank_bad_allnum: "0",
sl_id_bank_overdue_allnum: "0",
sl_id_bank_lost_allnum: "0",
sl_id_nbank_bad_allnum: "0",
sl_id_nbank_overdue_allnum: "0",
sl_id_nbank_lost_allnum: "0",
sl_id_nbank_nsloan_bad_allnum: "0",
sl_id_nbank_nsloan_overdue_allnum: "0",
sl_id_nbank_nsloan_lost_allnum: "0",
sl_id_nbank_sloan_bad_allnum: "0",
sl_id_nbank_sloan_overdue_allnum: "0",
sl_id_nbank_sloan_lost_allnum: "0",
sl_id_nbank_cons_bad_allnum: "0",
sl_id_nbank_cons_overdue_allnum: "0",
sl_id_nbank_cons_lost_allnum: "0",
sl_id_nbank_finlea_bad_allnum: "0",
sl_id_nbank_finlea_overdue_allnum: "0",
sl_id_nbank_finlea_lost_allnum: "0",
sl_id_nbank_autofin_bad_allnum: "0",
sl_id_nbank_autofin_overdue_allnum: "0",
sl_id_nbank_autofin_lost_allnum: "0",
sl_id_nbank_other_bad_allnum: "0",
sl_id_nbank_other_overdue_allnum: "0",
sl_id_nbank_other_lost_allnum: "0",
sl_cell_bank_bad: "0",
sl_cell_bank_overdue: "0",
sl_cell_bank_lost: "0",
@ -114,56 +117,59 @@ const data = ref({
sl_cell_nbank_other_bad: "0",
sl_cell_nbank_other_overdue: "0",
sl_cell_nbank_other_lost: "0",
sl_cell_bank_bad_time: "1",
sl_cell_bank_overdue_time: "2",
sl_cell_bank_bad_time: "0",
sl_cell_bank_overdue_time: "0",
sl_cell_bank_lost_time: "0",
sl_cell_nbank_bad_time: "0",
sl_cell_nbank_overdue_time: "1",
sl_cell_nbank_lost_time: "1",
sl_cell_nbank_overdue_time: "0",
sl_cell_nbank_lost_time: "0",
sl_cell_nbank_nsloan_bad_time: "0",
sl_cell_nbank_nsloan_overdue_time: "1",
sl_cell_nbank_nsloan_lost_time: "1",
sl_cell_nbank_nsloan_overdue_time: "0",
sl_cell_nbank_nsloan_lost_time: "0",
sl_cell_nbank_sloan_bad_time: "0",
sl_cell_nbank_sloan_overdue_time: "1",
sl_cell_nbank_sloan_lost_time: "1",
sl_cell_nbank_cons_bad_time: "1",
sl_cell_nbank_sloan_overdue_time: "0",
sl_cell_nbank_sloan_lost_time: "0",
sl_cell_nbank_cons_bad_time: "0",
sl_cell_nbank_cons_overdue_time: "0",
sl_cell_nbank_cons_lost_time: "1",
sl_cell_nbank_finlea_bad_time: "1",
sl_cell_nbank_finlea_overdue_time: "2",
sl_cell_nbank_cons_lost_time: "0",
sl_cell_nbank_finlea_bad_time: "0",
sl_cell_nbank_finlea_overdue_time: "0",
sl_cell_nbank_finlea_lost_time: "0",
sl_cell_nbank_autofin_bad_time: "1",
sl_cell_nbank_autofin_bad_time: "0",
sl_cell_nbank_autofin_overdue_time: "0",
sl_cell_nbank_autofin_lost_time: "2",
sl_cell_nbank_autofin_lost_time: "0",
sl_cell_nbank_other_bad_time: "0",
sl_cell_nbank_other_overdue_time: "0",
sl_cell_nbank_other_lost_time: "0",
sl_cell_bank_bad_allnum: "1",
sl_cell_bank_overdue_allnum: "2",
sl_cell_bank_lost_allnum: "3",
sl_cell_nbank_bad_allnum: "5",
sl_cell_nbank_overdue_allnum: "1",
sl_cell_nbank_lost_allnum: "1",
sl_cell_nbank_nsloan_bad_allnum: "3",
sl_cell_nbank_nsloan_overdue_allnum: "1",
sl_cell_nbank_nsloan_lost_allnum: "1",
sl_cell_nbank_sloan_bad_allnum: "7",
sl_cell_nbank_sloan_overdue_allnum: "1",
sl_cell_nbank_sloan_lost_allnum: "1",
sl_cell_nbank_cons_bad_allnum: "1",
sl_cell_nbank_cons_overdue_allnum: "8",
sl_cell_nbank_cons_lost_allnum: "1",
sl_cell_nbank_finlea_bad_allnum: "1",
sl_cell_nbank_finlea_overdue_allnum: "2",
sl_cell_nbank_finlea_lost_allnum: "4",
sl_cell_nbank_autofin_bad_allnum: "1",
sl_cell_nbank_autofin_overdue_allnum: "6",
sl_cell_nbank_autofin_lost_allnum: "2",
sl_cell_nbank_other_bad_allnum: "7",
sl_cell_nbank_other_overdue_allnum: "6",
sl_cell_nbank_other_lost_allnum: "9",
});
console.log("spp data", data);
sl_cell_bank_bad_allnum: "0",
sl_cell_bank_overdue_allnum: "0",
sl_cell_bank_lost_allnum: "0",
sl_cell_nbank_bad_allnum: "0",
sl_cell_nbank_overdue_allnum: "0",
sl_cell_nbank_lost_allnum: "0",
sl_cell_nbank_nsloan_bad_allnum: "0",
sl_cell_nbank_nsloan_overdue_allnum: "0",
sl_cell_nbank_nsloan_lost_allnum: "0",
sl_cell_nbank_sloan_bad_allnum: "0",
sl_cell_nbank_sloan_overdue_allnum: "0",
sl_cell_nbank_sloan_lost_allnum: "0",
sl_cell_nbank_cons_bad_allnum: "0",
sl_cell_nbank_cons_overdue_allnum: "0",
sl_cell_nbank_cons_lost_allnum: "0",
sl_cell_nbank_finlea_bad_allnum: "0",
sl_cell_nbank_finlea_overdue_allnum: "0",
sl_cell_nbank_finlea_lost_allnum: "0",
sl_cell_nbank_autofin_bad_allnum: "0",
sl_cell_nbank_autofin_overdue_allnum: "0",
sl_cell_nbank_autofin_lost_allnum: "0",
sl_cell_nbank_other_bad_allnum: "0",
sl_cell_nbank_other_overdue_allnum: "0",
sl_cell_nbank_other_lost_allnum: "0",
};
// "0"使defaultData
const dataValue = ref(!props.data || Object.keys(props.data).length === 0 ? defaultData : props.data);
const bankLost = ref([]);
const lost = ref([]);
function totalStats(data) {
@ -240,8 +246,8 @@ function lostSotalStats(data) {
return result;
}
onMounted(() => {
const result = totalStats(data.value);
const lostResult = lostSotalStats(data.value);
const result = totalStats(dataValue.value);
const lostResult = lostSotalStats(dataValue.value);
bankLost.value = result;
lost.value = lostResult;
});

View File

@ -141,9 +141,11 @@
</template>
<script setup>
import { storeToRefs } from 'pinia';
import { ref, computed } from 'vue';
import { useRouter } from 'vue-router';
const agentStore = useAgentStore()
const { isAgent } = storeToRefs(agentStore)
const router = useRouter();
const data = ref(null);
@ -197,9 +199,8 @@ const getData = async () => {
}
};
onBeforeMount(() => {
const token = localStorage.getItem("token")
if (token) {
onMounted(() => {
if (isAgent.value) {
getData();
}
});

View File

@ -3,7 +3,7 @@ const featureMap = {
G09SC02: {
name: '婚姻状态',
component: defineAsyncComponent(() => import('@/ui/CMarriage.vue')),
remark: "查询结果为“未婚或尚未登记结婚”时,表示婚姻登记处暂无相关的登记记录。婚姻状态信息由婚姻登记处逐级上报,可能存在数据遗漏或更新滞后。当前可查询的婚姻状态包括:未婚或尚未登记结婚、已婚、离异、离异冷静期。如您对查询结果有疑问,请联系客服反馈。"
remark: '查询结果为"未婚或尚未登记结婚"时,表示婚姻登记处暂无相关的登记记录。婚姻状态信息由婚姻登记处逐级上报,可能存在数据遗漏或更新滞后。当前可查询的婚姻状态包括:未婚或尚未登记结婚、已婚、离异、离异冷静期。如您对查询结果有疑问,请联系客服反馈。'
},
G27BJ05: {
name: '借贷申请记录',
@ -18,7 +18,7 @@ const featureMap = {
),
},
G26BJ05: {
name: '关联人异常检测',
name: '违约异常',
component: defineAsyncComponent(() =>
import('@/ui/CSpecialList.vue')
),
@ -31,8 +31,12 @@ const featureMap = {
name: '司法涉诉',
component: defineAsyncComponent(() => import('@/ui/CLawsuit.vue')),
},
G22SC01: {
name: '司法涉诉',
component: defineAsyncComponent(() => import('@/ui/CLawsuitPP.vue')),
},
G05HZ01: {
name: '股东人企关系',
name: '人企关系',
component: defineAsyncComponent(() => import('@/ui/CRelatedEnterprises.vue')),
},
Q23SC01: {
@ -88,6 +92,8 @@ const featureMap = {
import LEmpty from "@/components/LEmpty.vue";
import LRemark from "@/components/LRemark.vue";
import LTitle from "@/components/LTitle.vue";
import GaugeChart from "@/components/GaugeChart.vue";
const productId = ref(null);
@ -100,6 +106,8 @@ const reportName = ref("")
const reportDateTime = ref(null)
const feature = ref("")
const isEmpty = ref(false)
const reportScore = ref(75); //
onMounted(() => {
const query = new URLSearchParams(window.location.search);
feature.value = query.get("feature");
@ -124,11 +132,282 @@ const getReport = async () => {
reportParams.value = data.value.data.query_params
reportName.value = data.value.data.product_name
reportDateTime.value = data.value.data.create_time
//
reportScore.value = calculateScore(reportData.value);
} else if (data.value.code === 200003) {
isEmpty.value = true
}
}
}
//
const calculateScore = (reportData) => {
// 0
let score = 0;
// 90
const maxScore = 90;
//
const relativeWeights = {
//
'G34BJ03': 250, //
'G26BJ05': 100, //
'G22SC01': 400, //
'G35SC01': 20, //
'Q23SC01': 50, //
'FIN019': 100, //
//
'G27BJ05': 40, //
'G28BJ05': 40, //
'G03HZ01': 70, //
//
'G19BJ02': 50, //
'G02BJ02': 50, //
'G05HZ01': 50, //
//
'G15BJ02': 25, //
'G17BJ02': 25, //
'KZEYS': 25, //
'G20GZ01': 25 //
};
//
const availableAPIs = reportData.map(item => item.data.apiID).filter(id => relativeWeights[id]);
//
if (availableAPIs.length === 0) return 60; // 60
//
let totalWeight = 0;
availableAPIs.forEach(apiID => {
totalWeight += relativeWeights[apiID];
});
//
const pointValue = maxScore / totalWeight;
//
const actualWeights = {};
availableAPIs.forEach(apiID => {
//
actualWeights[apiID] = relativeWeights[apiID] * pointValue;
});
//
reportData.forEach(item => {
const apiID = item.data.apiID;
const data = item.data.data;
//
if (!actualWeights[apiID]) return;
// API ID
switch (apiID) {
case 'G09SC02': //
//
break;
case 'G27BJ05': //
if (data) {
// 0
let noRisk = true;
for (const key in data) {
if (data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G28BJ05': //
if (data) {
// 0
let noRisk = true;
for (const key in data) {
if (data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G26BJ05': //
if (data) {
// 0
const excludeFields = ['swift_number', 'code', 'flag_specialList_c'];
let noRisk = true;
for (const key in data) {
if (!excludeFields.includes(key) && data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G34BJ03': //
if (data && data.risk_level) {
//
switch (data.risk_level) {
case 'A': //
score += actualWeights[apiID];
break;
case 'F': //
score += actualWeights[apiID] * 0.7;
break;
case 'C': //
case 'D': //
score += actualWeights[apiID] * 0.3;
break;
case 'B': //
case 'E': //
//
break;
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G35SC01': //
case 'G22SC01': //
case 'Q23SC01': //
if (data) {
let hasRisk = false;
// -
// entoutJSONentout
if (data.entout && Array.isArray(data.entout) && data.entout.length > 0 &&
data.entout[0] && data.entout[0].entout &&
((Array.isArray(data.entout[0].entout) && data.entout[0].entout.length > 0) ||
(typeof data.entout[0].entout === 'object' && Object.keys(data.entout[0].entout).length > 0))) {
hasRisk = true;
}
// sxbzxr()
if (data.sxbzxr && Array.isArray(data.sxbzxr) && data.sxbzxr.length > 0 &&
data.sxbzxr[0] && data.sxbzxr[0].sxbzxr &&
((Array.isArray(data.sxbzxr[0].sxbzxr) && data.sxbzxr[0].sxbzxr.length > 0) ||
(typeof data.sxbzxr[0].sxbzxr === 'object' && Object.keys(data.sxbzxr[0].sxbzxr).length > 0))) {
hasRisk = true;
}
// xgbzxr()
if (data.xgbzxr && Array.isArray(data.xgbzxr) && data.xgbzxr.length > 0 &&
data.xgbzxr[0] && data.xgbzxr[0].xgbzxr &&
((Array.isArray(data.xgbzxr[0].xgbzxr) && data.xgbzxr[0].xgbzxr.length > 0) ||
(typeof data.xgbzxr[0].xgbzxr === 'object' && Object.keys(data.xgbzxr[0].xgbzxr).length > 0))) {
hasRisk = true;
}
if (!hasRisk) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G03HZ01': //
if (data && data.filterType) {
// filterType
switch (data.filterType) {
case '0': //
score += actualWeights[apiID];
break;
case '3': //
score += actualWeights[apiID] * 0.7;
break;
case '2': //
score += actualWeights[apiID] * 0.3;
break;
case '1': //
//
break;
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G19BJ02': //
if (data && data.is_second_card === false) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'G02BJ02': //
if (data && data.online_months >= 6) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'G15BJ02': //
case 'G17BJ02': //
case 'KZEYS': //
case 'G20GZ01': //
if (data && data.is_consistent) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'FIN019': //
if (data && data.is_blacklisted === false) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
default:
//
break;
}
});
// 0-90
return Math.max(0, Math.min(maxScore, Math.round(score)));
};
const maskValue = computed(() => {
return (type, value) => {
if (!value) return value;
@ -187,6 +466,15 @@ const maskValue = computed(() => {
<van-tabs v-model:active="active" shrink scrollspy sticky :offset-top="46">
<div class="flex flex-col gap-y-4 p-4">
<LEmpty v-if="isEmpty" />
<van-tab title="分析指数">
<div id="overdiv" class="title mb-4">分析指数</div>
<div class="card mb-4">
<div class="my-4">
<GaugeChart :score="reportScore" />
</div>
</div>
</van-tab>
<van-tab title="基本信息">
<div id="overdiv" class="title mb-4">基本信息</div>
<div class="card">
@ -203,13 +491,14 @@ const maskValue = computed(() => {
{{ reportName }}</span>
</div>
</div>
<template v-if="Object.keys(reportParams).length != 0">
<LTitle title="报告对象" type="blue-green"></LTitle>
<div class="flex flex-col gap-2 my-2">
<div class="flex justify-between border-b pb-2 pl-2" v-if="reportParams?.name">
<span class="text-gray-700 font-bold">姓名</span>
<span class="text-gray-600">{{ maskValue("name", reportParams?.name)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.id_card">
@ -221,65 +510,65 @@ const maskValue = computed(() => {
v-if="reportParams?.nameMan">
<span class="text-gray-700 font-bold">男方姓名</span>
<span class="text-gray-600">{{ maskValue("name", reportParams?.nameMan)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.idCardMan">
<span class="text-gray-700 font-bold">男方身份证号</span>
<span class="text-gray-600">{{ maskValue("id_card", reportParams?.idCardMan)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.nameWoman">
<span class="text-gray-700 font-bold">女方姓名</span>
<span class="text-gray-600">{{ maskValue("name", reportParams?.nameWoman)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.idCardWoman">
<span class="text-gray-700 font-bold">女方身份证号</span>
<span class="text-gray-600">{{ maskValue("id_card",
reportParams?.idCardWoman)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.bank_card">
<span class="text-gray-700 font-bold">银行卡号</span>
<span class="text-gray-600">{{ maskValue("bank_card",
reportParams?.bank_card)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.mobile">
<span class="text-gray-700 font-bold">手机号</span>
<span class="text-gray-600">{{ maskValue("mobile", reportParams?.mobile)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.verification_code">
<span class="text-gray-700 font-bold">验证码</span>
<span class="text-gray-600">{{ maskValue("code",
reportParams?.verification_code)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.car_license">
<span class="text-gray-700 font-bold">车牌号</span>
<span class="text-gray-600">{{ maskValue("car_license",
reportParams?.car_license)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.ent_name">
<span class="text-gray-700 font-bold">企业名称</span>
<span class="text-gray-600">{{ maskValue("ent_name", reportParams?.ent_name)
}}</span>
}}</span>
</div>
<div class="flex justify-between border-b pb-2 pl-2"
v-if="reportParams?.ent_code">
<span class="text-gray-700 font-bold">企业代码</span>
<span class="text-gray-600">{{ maskValue("ent_code", reportParams?.ent_code)
}}</span>
}}</span>
</div>
<div class="flex flex-col gap-4">
<div class="flex items-center bg-blue-100 rounded-xl px-4 py-2 flex-1">

View File

@ -536,6 +536,10 @@ onUnmounted(() => {
报告包含内容
</div>
<div class="grid grid-cols-2 gap-4">
<div
class="rounded-lg py-2 text-center text-sm text-gray-700 font-medium bg-gradient-to-r from-blue-200 via-blue-200 to-blue-100">
分析指数
</div>
<div
class="rounded-lg py-2 text-center text-sm text-gray-700 font-medium bg-gradient-to-r from-sky-200 via-sky-200 to-sky-100">
基本信息

View File

@ -1,9 +1,14 @@
<script setup>
import LEmpty from "@/components/LEmpty.vue";
import LPendding from "@/components/LPendding.vue";
import LTitle from "@/components/LTitle.vue";
import GaugeChart from "@/components/GaugeChart.vue";
const featureMap = {
G09SC02: {
name: '婚姻状态',
component: defineAsyncComponent(() => import('@/ui/CMarriage.vue')),
remark: "查询结果为“未婚或尚未登记结婚”时,表示婚姻登记处暂无相关的登记记录。婚姻状态信息由婚姻登记处逐级上报,可能存在数据遗漏或更新滞后。当前可查询的婚姻状态包括:未婚或尚未登记结婚、已婚、离异、离异冷静期。如您对查询结果有疑问,请联系客服反馈。"
remark: '查询结果为"未婚或尚未登记结婚"时,表示婚姻登记处暂无相关的登记记录。婚姻状态信息由婚姻登记处逐级上报,可能存在数据遗漏或更新滞后。当前可查询的婚姻状态包括:未婚或尚未登记结婚、已婚、离异、离异冷静期。如您对查询结果有疑问,请联系客服反馈。'
},
G27BJ05: {
name: '借贷申请记录',
@ -18,7 +23,7 @@ const featureMap = {
),
},
G26BJ05: {
name: '关联人异常检测',
name: '违约异常',
component: defineAsyncComponent(() =>
import('@/ui/CSpecialList.vue')
),
@ -31,8 +36,12 @@ const featureMap = {
name: '司法涉诉',
component: defineAsyncComponent(() => import('@/ui/CLawsuit.vue')),
},
G22SC01: {
name: '司法涉诉',
component: defineAsyncComponent(() => import('@/ui/CLawsuitPP.vue')),
},
G05HZ01: {
name: '股东人企关系',
name: '人企关系',
component: defineAsyncComponent(() => import('@/ui/CRelatedEnterprises.vue')),
},
Q23SC01: {
@ -85,10 +94,6 @@ const featureMap = {
}
};
import LEmpty from "@/components/LEmpty.vue";
import LPendding from "@/components/LPendding.vue";
import LTitle from "@/components/LTitle.vue";
const route = useRoute();
const productId = ref(null);
@ -102,6 +107,8 @@ const orderId = ref(null);
const orderNo = ref("")
const isEmpty = ref(false)
const isPending = ref(false)
const reportScore = ref(75); //
onMounted(() => {
const query = new URLSearchParams(window.location.search);
orderNo.value = query.get("out_trade_no");
@ -137,6 +144,9 @@ const getReport = async () => {
reportParams.value = data.value.data.query_params
reportName.value = data.value.data.product_name
reportDateTime.value = data.value.data.create_time
//
reportScore.value = calculateScore(reportData.value);
} else if (data.value.code === 200003) {
isEmpty.value = true
} else if (data.value.code === 200002) {
@ -145,6 +155,274 @@ const getReport = async () => {
}
}
//
const calculateScore = (reportData) => {
// 0
let score = 0;
// 90
const maxScore = 90;
//
const relativeWeights = {
//
'G34BJ03': 250, //
'G26BJ05': 100, //
'G22SC01': 400, //
'G35SC01': 20, //
'Q23SC01': 50, //
'FIN019': 100, //
//
'G27BJ05': 40, //
'G28BJ05': 40, //
'G03HZ01': 70, //
//
'G19BJ02': 50, //
'G02BJ02': 50, //
'G05HZ01': 50, //
//
'G15BJ02': 25, //
'G17BJ02': 25, //
'KZEYS': 25, //
'G20GZ01': 25 //
};
//
const availableAPIs = reportData.map(item => item.data.apiID).filter(id => relativeWeights[id]);
//
if (availableAPIs.length === 0) return 60; // 60
//
let totalWeight = 0;
availableAPIs.forEach(apiID => {
totalWeight += relativeWeights[apiID];
});
//
const pointValue = maxScore / totalWeight;
//
const actualWeights = {};
availableAPIs.forEach(apiID => {
//
actualWeights[apiID] = relativeWeights[apiID] * pointValue;
});
//
reportData.forEach(item => {
const apiID = item.data.apiID;
const data = item.data.data;
//
if (!actualWeights[apiID]) return;
// API ID
switch (apiID) {
case 'G09SC02': //
//
break;
case 'G27BJ05': //
if (data) {
// 0
let noRisk = true;
for (const key in data) {
if (data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G28BJ05': //
if (data) {
// 0
let noRisk = true;
for (const key in data) {
if (data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G26BJ05': //
if (data) {
// 0
const excludeFields = ['swift_number', 'code', 'flag_specialList_c'];
let noRisk = true;
for (const key in data) {
if (!excludeFields.includes(key) && data[key] !== 0 && data[key] !== '0') {
noRisk = false;
break;
}
}
if (noRisk || !Object.keys(data).length) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G34BJ03': //
if (data && data.risk_level) {
//
switch (data.risk_level) {
case 'A': //
score += actualWeights[apiID];
break;
case 'F': //
score += actualWeights[apiID] * 0.7;
break;
case 'C': //
case 'D': //
score += actualWeights[apiID] * 0.3;
break;
case 'B': //
case 'E': //
//
break;
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G35SC01': //
case 'G22SC01': //
case 'Q23SC01': //
if (data) {
let hasRisk = false;
// -
// entoutJSONentout
if (data.entout && Array.isArray(data.entout) && data.entout.length > 0 &&
data.entout[0] && data.entout[0].entout &&
((Array.isArray(data.entout[0].entout) && data.entout[0].entout.length > 0) ||
(typeof data.entout[0].entout === 'object' && Object.keys(data.entout[0].entout).length > 0))) {
hasRisk = true;
}
// sxbzxr()
if (data.sxbzxr && Array.isArray(data.sxbzxr) && data.sxbzxr.length > 0 &&
data.sxbzxr[0] && data.sxbzxr[0].sxbzxr &&
((Array.isArray(data.sxbzxr[0].sxbzxr) && data.sxbzxr[0].sxbzxr.length > 0) ||
(typeof data.sxbzxr[0].sxbzxr === 'object' && Object.keys(data.sxbzxr[0].sxbzxr).length > 0))) {
hasRisk = true;
}
// xgbzxr()
if (data.xgbzxr && Array.isArray(data.xgbzxr) && data.xgbzxr.length > 0 &&
data.xgbzxr[0] && data.xgbzxr[0].xgbzxr &&
((Array.isArray(data.xgbzxr[0].xgbzxr) && data.xgbzxr[0].xgbzxr.length > 0) ||
(typeof data.xgbzxr[0].xgbzxr === 'object' && Object.keys(data.xgbzxr[0].xgbzxr).length > 0))) {
hasRisk = true;
}
if (!hasRisk) {
score += actualWeights[apiID];
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G03HZ01': //
if (data && data.filterType) {
// filterType
switch (data.filterType) {
case '0': //
score += actualWeights[apiID];
break;
case '3': //
score += actualWeights[apiID] * 0.7;
break;
case '2': //
score += actualWeights[apiID] * 0.3;
break;
case '1': //
//
break;
}
} else {
//
score += actualWeights[apiID];
}
break;
case 'G19BJ02': //
if (data && data.is_second_card === false) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'G02BJ02': //
if (data && data.online_months >= 6) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'G15BJ02': //
case 'G17BJ02': //
case 'KZEYS': //
case 'G20GZ01': //
if (data && data.is_consistent) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
case 'FIN019': //
if (data && data.is_blacklisted === false) {
score += actualWeights[apiID];
} else if (!data) {
//
score += actualWeights[apiID];
}
break;
default:
//
break;
}
});
// 0-90
return Math.max(0, Math.min(maxScore, Math.round(score)));
};
//
const maskValue = computed(() => {
return (type, value) => {
@ -203,11 +481,19 @@ const maskValue = computed(() => {
<!-- <van-notice-bar color="#e03131" background="#ecf9ff" left-icon="info-o"
text="由于天远数据APP暂未上线建议将此网站加入收藏夹或书签或可以百度搜索天远数据以及在微信天远数据小程序复制链接打开" /> -->
<template v-if="isDone">
<van-tabs v-model:active="active" scrollspy sticky :offset-top="46">
<van-tabs v-model:active="active" shrink scrollspy sticky :offset-top="46">
<div class="flex flex-col gap-y-4 p-4">
<LEmpty v-if="isEmpty" />
<template v-if="!isEmpty && !isPending">
<van-tab title="分析指数">
<div id="overdiv" class="title mb-4">分析指数</div>
<div class="card mb-4">
<div class="my-4">
<GaugeChart :score="reportScore" />
</div>
</div>
</van-tab>
<van-tab title="基本信息">
<div id="overdiv" class="title mb-4">基本信息</div>
<div class="card">
@ -338,8 +624,9 @@ const maskValue = computed(() => {
</van-tab>
</template>
<LPendding v-if="isPending" />
<van-tab v-for="(item, index) in reportData" :key="index" :title="featureMap[item.data.apiID].name">
<div id="lawsuit" class="title mb-4">{{ featureMap[item.data.apiID].name }}</div>
<van-tab v-for="(item, index) in reportData" :key="index"
:title="featureMap[item.data.apiID]?.name">
<div id="lawsuit" class="title mb-4">{{ featureMap[item.data.apiID]?.name }}</div>
<component :is="featureMap[item.data.apiID].component" :data="item.data.data"
:params="reportParams">
</component>

View File

@ -20,64 +20,66 @@ const toPromote = () => {
const toHelp = () => {
router.push("/help")
}
const services = ref([
{
title: '个人风险',
name: 'riskassessment',
subtitle: '一查全知',
bg: indexIcon2,
bgColor: 'bg-indigo-400',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '婚恋风险',
name: 'marriage',
subtitle: '查婚姻状态让爱无忧',
bg: indexIcon1,
bgColor: ' bg-pink-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
{
title: '家政服务',
name: 'homeservice',
subtitle: '用人有保障',
bg: indexIcon3,
bgColor: ' bg-teal-500 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '租赁风险',
name: 'rentalinfo',
subtitle: '一查明了',
bg: indexIcon4,
bgColor: ' bg-sky-500 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '企业报告',
name: 'companyinfo',
subtitle: '合作更安心',
bg: indexIcon5,
bgColor: ' bg-blue-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
{
title: '人事背调',
name: 'backgroundcheck',
subtitle: '招聘有保障,选人更放心',
bg: indexIcon6,
bgColor: ' bg-orange-400 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '贷前背调',
name: 'preloanbackgroundcheck',
subtitle: '招聘有保障,选人更放心',
bg: indexIcon7,
bgColor: ' bg-orange-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
])
const services = ref(
[
{
title: '个人风险',
name: 'riskassessment',
subtitle: '一查全知',
bg: indexIcon2,
bgColor: 'bg-indigo-400',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '婚恋风险',
name: 'marriage',
subtitle: '查婚姻状态让爱无忧',
bg: indexIcon1,
bgColor: ' bg-pink-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
{
title: '家政服务',
name: 'homeservice',
subtitle: '用人有保障',
bg: indexIcon3,
bgColor: ' bg-teal-500 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '租赁风险',
name: 'rentalinfo',
subtitle: '一查明了',
bg: indexIcon4,
bgColor: ' bg-sky-500 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '企业报告',
name: 'companyinfo',
subtitle: '合作更安心',
bg: indexIcon5,
bgColor: ' bg-blue-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
{
title: '人事背调',
name: 'backgroundcheck',
subtitle: '招聘有保障,选人更放心',
bg: indexIcon6,
bgColor: ' bg-orange-400 ',
position: 'rounded-tl-[35px] rounded-bl-[35px] rounded-tr-lg rounded-br-lg'
},
{
title: '贷前背调',
name: 'preloanbackgroundcheck',
subtitle: '招聘有保障,选人更放心',
bg: indexIcon7,
bgColor: ' bg-orange-400 ',
position: 'rounded-tr-[35px] rounded-br-[35px] rounded-tl-lg rounded-bl-lg'
},
]
)
const noticeText = ref([])

View File

@ -14,19 +14,23 @@ export default defineConfig({
port: 5678, // 自定义端口号,可选
strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口
proxy: {
// "/api/v1": {
// target: "https://www.tianyuandata.com", // 本地接口地址
// changeOrigin: true,
// },
"/api/v1": {
target: "https://www.tianyuandb.com", // 本地接口地址
changeOrigin: true,
},
"/api/v1/chat": {
target: "https://www.tianyuandata.com", // 本地接口地址
target: "https://www.tianyuandb.com", // 本地接口地址
changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api\/v1\/chat/, '/chat')
},
"/api/v1": {
target: "https://6m4685017o.goho.co", // 本地接口地址
changeOrigin: true,
},
// "/api/v1": {
// target: "https://6m4685017o.goho.co", // 本地接口地址
// changeOrigin: true,
// },
// "/api/v1": {
// target: "http:127.0.0.1:8888", // 本地接口地址
// changeOrigin: true,
// },
},
},
plugins: [