提交 2fb1c0a7 authored 作者: 张伊明's avatar 张伊明

feat 深度挖掘政治献金领域分布接口接入

fix 人物党派判断错误
上级 47bc38c9
......@@ -130,3 +130,14 @@ export function getBillPersonPoliContribution(params) {
url: `/api/billDeepDive/processAnalyze/xj/${params.id}/${params.personId}`
})
}
// 根据法案ID和人物ID获取政治献金领域分布
/**
* @param {id, personId}
*/
export function getBillPersonPoliDomain(params) {
return request({
method: 'GET',
url: `/api/billDeepDive/processAnalyze/xjDomain/${params.id}/${params.personId}`
})
}
......@@ -2,63 +2,6 @@
<div class="wrapper">
<div class="left">
<div class="box1">
<!-- <div class="box-header">
<div class="icon"></div>
<div class="title">{{ "主要议员" }}</div>
<div class="btn-box">
<div class="btn" :class="{ btnActive: activeBtnIndex === 0 }" @click="activeBtnIndex = 0">
{{ "参议院" }}
</div>
<div class="btn" :class="{ btnActive: activeBtnIndex === 1 }" @click="activeBtnIndex = 1">
{{ "众议院" }}
</div>
</div>
<div class="header-right">
<div class="right-icon">
<img src="@/assets/icons/box-header-icon2.png" alt="" />
</div>
<div class="right-icon">
<img src="@/assets/icons/box-header-icon3.png" alt="" />
</div>
</div>
</div>
<div class="box1-main">
<div class="box1-main-top">
<div class="top-item" v-for="(item, index) in partyContributionList" :key="index">
<div class="icon">
<img :src="item.img" alt="" />
</div>
<div class="name">{{ item.name }}</div>
<div class="line" :class="{ line1: index === 0, line2: index === 1 }"></div>
<div class="num" :class="{ num1: index === 0, num2: index === 1 }">{{ item.num }}</div>
</div>
</div>
<div class="box1-main-main">
<div class="item" :class="{ itemActive: itemActiveIndex === index }"
v-for="(item, index) in mainPoliContribution" :key="index" @click="handlePersonClick(item, index)">
<div class="item-left">
<img :src="item.image || Img1" alt="" />
</div>
<div class="item-center">
<div class="center-top">
<div class="name">{{ item.name }}</div>
<div class="icon1">
<img :src="item.dp === 'Republican' ? Ghd : Mzd" alt="" />
</div>
<div class="icon2">
<img :src="activeBtnIndex === 0 ? Cyy : Zyy" alt="" />
</div>
</div>
<div class="center-footer">
{{ item.zw }}
</div>
</div>
<div class="item-right">
{{ item.formattedTotalJe }}
</div>
</div>
</div>
</div> -->
<AnalysisBox title="主要议员" :showAllBtn="false">
<template #header-btn>
<div class="btn-box">
......@@ -91,7 +34,7 @@
<div class="center-top">
<div class="name">{{ item.name }}</div>
<div class="icon1">
<img :src="item.dp === 'Republican' ? Ghd : Mzd" alt="" />
<img :src="item.dp === '共和党' ? Ghd : Mzd" alt="" />
</div>
<div class="icon2">
<img :src="activeBtnIndex === 0 ? Cyy : Zyy" alt="" />
......@@ -214,8 +157,8 @@
<div class="box3-main" :class="{ 'box3-main-no-footer': !showHardcodedTips }">
<div class="box3-main-left" id="chart2"></div>
<div class="box3-main-right">
<el-empty v-if="!areaList.length" description="暂无数据" :image-size="100" />
<div class="box3-main-right-item" v-for="(item, index) in areaList" :key="index">
<el-empty v-if="!topAreaList.length" description="暂无数据" :image-size="100" />
<div class="box3-main-right-item" v-for="(item, index) in topAreaList" :key="index">
<div class="id">{{ index + 1 }}</div>
<div class="name">{{ item.name }}</div>
<div class="line">
......@@ -247,7 +190,7 @@
<script setup>
import { ref, onMounted, watch, computed, nextTick } from "vue";
import { getBillPoliContribution, getBillMainPoliContribution, getBillPersonPoliContribution } from "@/api/deepdig";
import { getBillPoliContribution, getBillMainPoliContribution, getBillPersonPoliContribution, getBillPersonPoliDomain } from "@/api/deepdig";
import setChart from "@/utils/setChart";
......@@ -486,28 +429,12 @@ const areaList = ref([]);
const chart2Data = ref([]);
const chart2ColorList = ref(["#4096FF", "#FFA39E", "#ADC6FF", "#FFC069", "#B5F5EC", "#B37FEB", "#D6E4FF"]);
// 使用静态行业分布数据,用于“政治献金领域分布”模块展示
const useStaticIndustryData = true;
const staticChart2Data = [
{ name: "集成电路", value: 21 },
{ name: "能源", value: 18 },
{ name: "量子科技", value: 16 },
{ name: "航空航天", value: 14 },
{ name: "通信设备", value: 12 },
{ name: "生物科技", value: 11 },
{ name: "其他", value: 8 }
];
// 领域分布列表仅展示前 5 条
const topAreaList = computed(() => {
return areaList.value.slice(0, 5);
});
const staticAreaList = [
{ name: "集成电路", amount: 186000, insNum: 8 },
{ name: "能源", amount: 180000, insNum: 5 },
{ name: "量子科技", amount: 171000, insNum: 2 },
{ name: "航空航天", amount: 75000, insNum: 3 },
{ name: "通信设备", amount: 70000, insNum: 2 }
];
const chart2ColorList = ref(["#4096FF", "#FFA39E", "#ADC6FF", "#FFC069", "#B5F5EC", "#B37FEB", "#D6E4FF"]);
const sankeyColors = [
"#5470c6",
......@@ -560,7 +487,11 @@ const getPoliContribution = async () => {
if (res.data && res.data.length > 0) {
res.data.forEach(item => {
const totalAmount = item.totalJe || 0;
if (item.dp === "Republican") {
const dp = item.dp || "";
// 兼容中文/英文党派名称,优先识别“共和党”
const isRepublican = dp === "共和党" || dp === "Republican";
if (isRepublican) {
partyContributionList.value[0].num = `$${totalAmount.toLocaleString()}`;
} else {
partyContributionList.value[1].num = `$${totalAmount.toLocaleString()}`;
......@@ -710,23 +641,15 @@ const getPersonPoliContribution = async personId => {
showAllSankeyData.value = false; // Reset to default (top 5)
renderSankeyChart();
// 政治献金领域分布:根据配置选择静态数据或接口数据
if (useStaticIndustryData) {
// 饼图数据(左侧圆环)
chart2Data.value = staticChart2Data;
const chart2Static = getPieChart(chart2Data.value, chart2ColorList.value);
setChart(chart2Static, "chart2");
// 政治献金领域分布:调用 /xjDomain/{billId}/{personId} 接口
const domainParams = {
id: window.sessionStorage.getItem("billId"),
personId
};
const domainRes = await getBillPersonPoliDomain(domainParams);
// 右侧列表(Top5 领域)
areaList.value = staticAreaList.map(item => ({
name: item.name,
num: item.amount,
numtext: `$${item.amount.toLocaleString()}`,
insNum: item.insNum
}));
} else {
// 使用接口返回的行业分布
const industries = res.data.industryList || [];
if (domainRes.code === 200 && Array.isArray(domainRes.data)) {
const industries = domainRes.data || [];
chart2Data.value = industries.map(item => ({
name: item.industryName,
......@@ -744,6 +667,11 @@ const getPersonPoliContribution = async personId => {
numtext: `$${(item.amount || 0).toLocaleString()}`,
insNum: item.orgNum
}));
} else {
chart2Data.value = [];
areaList.value = [];
const chart2Empty = getPieChart([], chart2ColorList.value);
setChart(chart2Empty, "chart2");
}
} else {
personPoliContribution.value = [];
......@@ -1192,7 +1120,8 @@ onMounted(() => {
.box3-main-right {
width: 518px;
margin-left: 10px;
overflow: auto;
overflow-x: hidden;
overflow-y: hidden;
.box3-main-right-item {
height: 60px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论