Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
2fb1c0a7
提交
2fb1c0a7
authored
3月 12, 2026
作者:
张伊明
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat 深度挖掘政治献金领域分布接口接入
fix 人物党派判断错误
上级
47bc38c9
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
40 行增加
和
100 行删除
+40
-100
deepdig.js
src/api/deepdig.js
+11
-0
index.vue
src/views/bill/deepDig/poliContribution/index.vue
+29
-100
没有找到文件。
src/api/deepdig.js
浏览文件 @
2fb1c0a7
...
@@ -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
}
`
})
}
src/views/bill/deepDig/poliContribution/index.vue
浏览文件 @
2fb1c0a7
...
@@ -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=
"!
a
reaList.length"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!
topA
reaList.length"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box3-main-right-item"
v-for=
"(item, index) in
a
reaList"
:key=
"index"
>
<div
class=
"box3-main-right-item"
v-for=
"(item, index) in
topA
reaList"
: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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论