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

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

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