Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
afe87dfb
提交
afe87dfb
authored
1月 28, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
944692dd
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
355 行增加
和
134 行删除
+355
-134
App.vue
src/App.vue
+1
-1
index.vue
...ew/components/fourSuppress/components/addDomain/index.vue
+80
-14
index.vue
...w/components/fourSuppress/components/allElement/index.vue
+25
-11
index.vue
...omponents/fourSuppress/components/allGovernment/index.vue
+1
-1
left-icon.png
...nts/fourSuppress/components/allUnion/assets/left-icon.png
+0
-0
right-icon.png
...ts/fourSuppress/components/allUnion/assets/right-icon.png
+0
-0
index.vue
...iew/components/fourSuppress/components/allUnion/index.vue
+220
-91
index.vue
src/views/ZMOverView/index.vue
+5
-4
index.vue
src/views/bill/deepDig/processAnalysis/index.vue
+10
-3
index.vue
src/views/bill/introdoction/index.vue
+4
-4
piechart.js
src/views/bill/template/utils/piechart.js
+3
-3
index.vue
src/views/thinkTank/reportOriginal/index.vue
+6
-2
没有找到文件。
src/App.vue
浏览文件 @
afe87dfb
...
...
@@ -522,7 +522,7 @@ body {
z-index
:
999999
;
width
:
713px
;
height
:
413px
;
top
:
6
5
px
;
top
:
6
4
px
;
left
:
140px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
255
,
255
,
255
,
1
);
...
...
src/views/ZMOverView/components/fourSuppress/components/addDomain/index.vue
浏览文件 @
afe87dfb
...
...
@@ -132,7 +132,7 @@
<template
v-if=
"rankType === 'institution'"
>
<div
v-for=
"(item, index) in rankList"
:key=
"index"
class=
"rank-item"
>
<div
class=
"rank-num"
:class=
"'rank-' + (index + 1)"
>
{{
index
+
1
}}
</div>
<img
:src=
"defaultImg"
alt=
""
class=
"rank-icon"
/>
<img
:src=
"
item.orgPicture ? item.orgPicture :
defaultImg"
alt=
""
class=
"rank-icon"
/>
<div
class=
"rank-name"
:title=
"item.name"
>
{{
item
.
name
}}
</div>
<div
class=
"rank-progress-container"
>
<div
class=
"rank-progress-bar"
:style=
"
{ width: getProgressWidth(item.count) }">
</div>
...
...
@@ -157,7 +157,7 @@
<div
v-for=
"(item, index) in rankList"
:key=
"index"
class=
"table-row"
>
<div
class=
"col-rank rank-num"
:class=
"'rank-' + (index + 1)"
>
{{
index
+
1
}}
</div>
<div
class=
"col-name flex-align"
>
<img
:src=
"defaultImg"
class=
"rank-icon"
/>
<img
:src=
"
item.orgPicture ? item.orgPicture :
defaultImg"
class=
"rank-icon"
/>
<span
class=
"text-ellipsis"
:title=
"item.name"
>
{{
item
.
name
}}
</span>
</div>
<div
class=
"col-domain"
>
...
...
@@ -258,6 +258,12 @@
</svg>
</div>
</div>
<div
class=
"left-btn"
@
click=
"handleLeft"
>
<img
src=
"@/assets/icons/card-btn-left.png"
alt=
""
>
</div>
<div
class=
"right-btn"
@
click=
"handleRight"
>
<img
src=
"@/assets/icons/card-btn-right.png"
alt=
""
>
</div>
</div>
</div>
</template>
...
...
@@ -282,6 +288,7 @@ import {
getDomainContainmentTimeline
}
from
"@/api/zmOverview/allDomains"
;
import
{
getUSGovernmentLatestDynamic
,
getDepartmentList
,
getSanTypeList
}
from
"@/api/allGovernment.js"
;
import
{
ElMessage
}
from
"element-plus"
;
const
router
=
useRouter
();
...
...
@@ -452,6 +459,8 @@ const handleGetDomainContainmentTimeline = async () => {
// 处理返回的数据结构
const
processedData
=
processTimelineData
(
res
.
data
);
timelineList
.
value
=
processedData
;
console
.
log
(
'timelineList'
,
timelineList
.
value
);
}
}
catch
(
error
)
{
console
.
error
(
"获取美对我领域打压遏制时间线失败:"
,
error
);
...
...
@@ -466,7 +475,10 @@ const rowHeight = 230;
const
startX
=
250
;
const
startY
=
45
;
const
timeLineActiveIndex
=
ref
(
0
)
const
axisDates
=
computed
(()
=>
{
const
dates
=
[];
if
(
timelineList
.
value
.
length
>
0
)
{
dates
.
push
({
...
...
@@ -486,11 +498,40 @@ const axisDates = computed(() => {
y
:
lastNode
.
y
-
25
});
}
return
dates
;
return
dates
});
const
handleLeft
=
()
=>
{
if
(
timeLineActiveIndex
.
value
===
0
)
{
ElMessage
.
warning
(
'当前已经是第一组数据!'
)
}
else
{
timeLineActiveIndex
.
value
--
}
}
const
handleRight
=
()
=>
{
if
(
timeLineActiveIndex
.
value
===
(
timelineList
.
value
.
length
%
9
))
{
ElMessage
.
warning
(
'当前已经是最后一组数据!'
)
}
else
{
timeLineActiveIndex
.
value
++
}
console
.
log
(
'axisDates'
,
axisDates
.
value
);
console
.
log
(
'timelineNodes'
,
timelineNodes
.
value
);
}
const
timelineNodes
=
computed
(()
=>
{
return
timelineList
.
value
.
map
((
item
,
index
)
=>
{
// 计算起始索引:activeIndex * 9
const
startIndex
=
timeLineActiveIndex
.
value
*
9
;
// 计算结束索引:起始索引 + 9(因为slice的第二个参数是结束索引,不包含)
const
endIndex
=
timeLineActiveIndex
.
value
+
9
;
const
showTimeLineList
=
timelineList
.
value
.
slice
(
startIndex
,
endIndex
);
return
showTimeLineList
.
map
((
item
,
index
)
=>
{
const
row
=
Math
.
floor
(
index
/
maxPerRow
);
const
col
=
index
%
maxPerRow
;
...
...
@@ -517,7 +558,7 @@ const timelineNodes = computed(() => {
contentWidth
:
320
,
contentHeight
:
180
};
})
;
})
});
const
getColorName
=
tag
=>
{
...
...
@@ -1251,7 +1292,7 @@ watch(activeDate, () => {
.bottom-content
{
display
:
flex
;
gap
:
17px
;
background
:
rgba
(
255
,
255
,
255
,
0
.65
);
.news-section
{
width
:
792px
;
height
:
700px
;
...
...
@@ -1343,7 +1384,7 @@ watch(activeDate, () => {
.select-box
{
width
:
691px
;
height
:
32px
;
margin
:
1
7px
auto
36
px
auto
;
margin
:
1
0px
auto
5
px
auto
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
...
...
@@ -1398,12 +1439,12 @@ watch(activeDate, () => {
}
.main-box
{
width
:
100%
;
height
:
5
6
7px
;
padding
:
24px
51px
51
px
27px
;
height
:
5
7
7px
;
padding
:
24px
30px
0
px
27px
;
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
gap
:
2
1
px
;
gap
:
2
8
px
;
overflow-y
:
auto
;
.rank-item
{
display
:
flex
;
...
...
@@ -1664,7 +1705,7 @@ watch(activeDate, () => {
box-sizing
:
border-box
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
background
:
rgba
(
255
,
255
,
255
,
0
.65
)
;
background
:
transparent
;
.news-item-title
{
display
:
flex
;
...
...
@@ -1738,6 +1779,33 @@ watch(activeDate, () => {
border-radius
:
10px
;
background-color
:
rgba
(
255
,
255
,
255
,
0
.65
);
box-shadow
:
0
0
20px
rgba
(
25
,
69
,
130
,
0
.1
);
position
:
relative
;
.left-btn
{
position
:
absolute
;
z-index
:
9999
;
left
:
0
;
top
:
345px
;
width
:
24px
;
height
:
48px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.right-btn
{
position
:
absolute
;
z-index
:
9999
;
right
:
0
;
top
:
345px
;
width
:
24px
;
height
:
48px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.bottom-item
{
width
:
100%
;
...
...
@@ -1794,7 +1862,6 @@ watch(activeDate, () => {
width
:
100%
;
height
:
652px
;
position
:
relative
;
.nav-btn
{
position
:
absolute
;
top
:
50%
;
...
...
@@ -1816,8 +1883,7 @@ watch(activeDate, () => {
.svg-container
{
width
:
100%
;
height
:
100%
;
overflow-x
:
hidden
;
overflow-y
:
auto
;
overflow
:
hidden
;
display
:
block
;
padding
:
0
;
box-sizing
:
border-box
;
...
...
src/views/ZMOverView/components/fourSuppress/components/allElement/index.vue
浏览文件 @
afe87dfb
...
...
@@ -717,10 +717,10 @@ onUnmounted(() => {
.
box1
-
main
{
height
:
836
px
;
overflow
:
hidden
;
overflow
-
y
:
auto
;
background
:
rgba
(
255
,
255
,
255
,
0.65
);
.
box1
-
item
{
width
:
430
px
;
height
:
167
px
;
padding
:
12
px
0
;
box
-
sizing
:
border
-
box
;
border
-
bottom
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
...
...
@@ -747,7 +747,7 @@ onUnmounted(() => {
width
:
388
px
;
margin
-
left
:
12
px
;
.
title
{
//
height: 30px;
height
:
30
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
style
:
Bold
;
...
...
@@ -756,20 +756,29 @@ onUnmounted(() => {
line
-
height
:
30
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
left
;
overflow
:
hidden
;
text
-
overflow
:
ellipsis
;
white
-
space
:
nowrap
;
}
.
content
{
height
:
48
px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
style
:
Regular
;
font
-
size
:
16
px
;
font
-
weight
:
400
;
line
-
height
:
30
px
;
line
-
height
:
24
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
justify
;
overflow
:
hidden
;
text
-
overflow
:
ellipsis
;
display
:
-
webkit
-
box
;
-
webkit
-
box
-
orient
:
vertical
;
-
webkit
-
line
-
clamp
:
2
;
}
.
tag
-
box
{
margin
-
top
:
4
px
;
//
height: 28px;
height
:
28
px
;
display
:
flex
;
flex
-
wrap
:
wrap
;
gap
:
8
px
;
...
...
@@ -998,7 +1007,7 @@ onUnmounted(() => {
margin
:
0
auto
;
margin
-
top
:
8
px
;
width
:
283
px
;
max
-
height
:
172
px
;
height
:
150
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
style
:
Regular
;
...
...
@@ -1008,13 +1017,15 @@ onUnmounted(() => {
letter
-
spacing
:
0
px
;
text
-
align
:
justify
;
overflow
:
hidden
;
// overflow-y: auto;
text
-
overflow
:
ellipsis
;
display
:
-
webkit
-
box
;
-
webkit
-
box
-
orient
:
vertical
;
-
webkit
-
line
-
clamp
:
5
;
}
.
area
-
box
{
width
:
283
px
;
margin
:
0
auto
;
margin
-
top
:
8
px
;
margin
-
top
:
2
8
px
;
// height: 24px;
display
:
flex
;
flex
-
wrap
:
wrap
;
...
...
@@ -1245,7 +1256,7 @@ onUnmounted(() => {
margin
:
0
auto
;
margin
-
top
:
8
px
;
width
:
283
px
;
max
-
height
:
172
px
;
height
:
150
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
style
:
Regular
;
...
...
@@ -1255,12 +1266,15 @@ onUnmounted(() => {
letter
-
spacing
:
0
px
;
text
-
align
:
justify
;
overflow
:
hidden
;
// overflow-y: auto;
text
-
overflow
:
ellipsis
;
display
:
-
webkit
-
box
;
-
webkit
-
box
-
orient
:
vertical
;
-
webkit
-
line
-
clamp
:
5
;
}
.
area
-
box
{
width
:
283
px
;
margin
:
0
auto
;
margin
-
top
:
8
px
;
margin
-
top
:
2
8
px
;
// height: 24px;
display
:
flex
;
flex
-
wrap
:
wrap
;
...
...
src/views/ZMOverView/components/fourSuppress/components/allGovernment/index.vue
浏览文件 @
afe87dfb
...
...
@@ -326,7 +326,7 @@ const getUSGovernmentSanctionHistoryData = async () => {
else
if
(
item
.
status
===
4
)
level
=
"white"
;
grouped
[
deptName
].
events
.
push
({
date
:
item
.
postDate
?
item
.
post
Date
.
replace
(
/^
(\d{4})
-
(\d{2})
-
(\d{2})
$/
,
"$1年$2月$3日"
)
:
""
,
date
:
item
.
endDate
?
item
.
end
Date
.
replace
(
/^
(\d{4})
-
(\d{2})
-
(\d{2})
$/
,
"$1年$2月$3日"
)
:
""
,
content
:
item
.
name
||
item
.
summary
,
tags
:
item
.
techDomainList
?
item
.
techDomainList
.
slice
(
0
,
2
)
:
[],
level
:
level
,
...
...
src/views/ZMOverView/components/fourSuppress/components/allUnion/assets/left-icon.png
0 → 100644
浏览文件 @
afe87dfb
1.2 KB
src/views/ZMOverView/components/fourSuppress/components/allUnion/assets/right-icon.png
0 → 100644
浏览文件 @
afe87dfb
1.2 KB
src/views/ZMOverView/components/fourSuppress/components/allUnion/index.vue
浏览文件 @
afe87dfb
...
...
@@ -6,17 +6,17 @@
<img
src=
"./assets/leftbtn.png"
alt
class=
"left-btn"
@
click=
"prev"
:class=
"
{ disabled: startIndex === 0 }" />
<div
class=
"content"
>
<div
class=
"carousel-container"
:style=
"
{ transform: `translateX(-${startIndex * (307 + 16)}px)` }">
<div
class=
"carousel-item"
v-for=
"item
in carouselList
"
>
<div
class=
"carousel-item"
v-for=
"item
,index in carouselList"
:key=
"index
"
>
<div
class=
"item-top"
>
<div
class=
"top-img"
>
<img
:src=
"ele"
:class=
"
{ img1: index !== 0 }" alt v-for="(ele, i
ndex) in item.imageList
" />
<img
:src=
"ele"
:class=
"
{ img1: index !== 0 }" alt v-for="(ele, i
dx) in item.imageList" :key="idx
" />
</div>
<div
class=
"top-num"
>
{{
item
.
count
}}
次
</div>
</div>
<div
class=
"item-title"
>
{{
item
.
name
}}
</div>
<div
class=
"type"
>
<div
class=
"type-item"
:class=
"getTagClass(ele.industryName)"
v-for=
"ele
in item.industryList
"
>
<div
class=
"type-item"
:class=
"getTagClass(ele.industryName)"
v-for=
"ele
, idxx in item.industryList"
:key=
"idxx
"
>
{{
ele
.
industryName
}}
</div>
</div>
...
...
@@ -47,20 +47,43 @@
<div
class=
"anti-content"
>
<div
class=
"content-left"
>
<div
class=
"item"
v-for=
"item in countList"
>
<div
class=
"item-left"
>
<img
:src=
"item.image"
alt
/>
<el-tooltip
effect=
"dark"
:content=
"item.zhName"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<span>
{{
item
.
zhName
}}
</span>
</el-tooltip>
<div
class=
"count-box"
>
<div
class=
"item"
v-for=
"(item, index) in countList"
:key=
"index"
>
<div
class=
"item-left"
>
<img
:src=
"item.image"
alt
/>
<el-tooltip
effect=
"dark"
:content=
"item.zhName"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<span>
{{
item
.
zhName
}}
</span>
</el-tooltip>
</div>
<div
class=
"item-right"
>
{{
item
.
value
}}
个
</div>
</div>
</div>
<div
class=
"page-box"
>
<div
class=
"left"
@
click=
"handleLeft"
>
<img
src=
"./assets/left-icon.png"
alt=
""
/>
</div>
<div
class=
"item-right"
>
{{
item
.
value
}}
个
</div>
<div
class=
"center"
>
{{
`${currentPage
}
/ ${totalPage
}
`
}}
<
/div
>
<
div
class
=
"right"
@
click
=
"handleRight"
>
<
img
src
=
"./assets/right-icon.png"
alt
=
""
/>
<
/div
>
<!--
<
el
-
pagination
background
layout
=
"prev, pager, next"
:
total
=
"countryTotalNum"
:
page
-
size
=
"pageSize"
:
pager
-
count
=
"2"
v
-
model
:
current
-
page
=
"currentPage"
size
=
"small"
@
current
-
change
=
"handleShowCountries"
/>
-->
<
/div
>
<
/div
>
...
...
@@ -76,7 +99,7 @@
<
span
>
排华联盟最新动态
<
/span
>
<
/div
>
<
div
class
=
"news-content"
>
<div
class=
"item"
v-for=
"item
in newsList
"
>
<
div
class
=
"item"
v
-
for
=
"item
,index in newsList"
:
key
=
"index
"
>
<
div
class
=
"item-title"
>
<
img
:
src
=
"item.image || defaultImg"
alt
/>
<
span
@
click
=
"handleClick(item)"
>
{{
item
.
title
}}
<
/span
>
...
...
@@ -92,7 +115,7 @@
<
/el-tooltip
>
<
div
class
=
"item-bottom"
>
<
div
class
=
"bottom-left"
>
<div
class=
"left-item"
:class=
"getTagClass(ele.industryName)"
v-for=
"ele
in item.industryList
"
>
<
div
class
=
"left-item"
:
class
=
"getTagClass(ele.industryName)"
v
-
for
=
"ele
,idx in item.industryList"
:
key
=
"idx
"
>
<
span
>
{{
ele
.
industryName
}}
<
/span
>
<
/div
>
<
/div
>
...
...
@@ -107,7 +130,7 @@
<
span
>
新增排华联盟预警
<
/span
>
<
/div
>
<
div
class
=
"warning-content"
>
<div
class=
"content-item"
v-for=
"
item,index
in warningList"
:key=
"index"
>
<
div
class
=
"content-item"
v
-
for
=
"
(item, index)
in warningList"
:
key
=
"index"
>
<
div
class
=
"item-title"
>
<
div
class
=
"title-left"
>
<
div
class
=
"img-list"
>
...
...
@@ -125,7 +148,12 @@
<
div
class
=
"title-right"
>
{{
item
.
statementList
?.
length
}}
次合作
<
/div
>
<
/div
>
<
div
class
=
"item-content"
>
<div
class=
"content-list"
v-for=
"ele,idx in item.statementList"
:key=
"idx"
@
click=
"handleClick(ele)"
>
<
div
class
=
"content-list"
v
-
for
=
"(ele, idx) in item.statementList"
:
key
=
"idx"
@
click
=
"handleClick(ele)"
>
<
div
class
=
"list-left"
:
class
=
"getTagClass(getName(ele.industryList))"
>
<
span
>
{{
getName
(
ele
.
industryList
)
}}
<
/span
>
<
/div
>
...
...
@@ -164,10 +192,44 @@ import router from "@/router";
import
*
as
echarts
from
"echarts"
;
import
{
getAllUnionList
,
getDynamic
,
getPrediction
,
getUnionCount
,
getIndustry
,
getCountryRelation
}
from
"@/api/allUnion.js"
;
import
defaultImg
from
"../../../../assets/images/default-icon2.png"
;
import
mapJson
from
'./assets/world.json'
import
mapJson
from
"./assets/world.json"
;
import
{
ElMessage
}
from
"element-plus"
;
const
currentPage
=
ref
(
1
);
const
pageSize
=
ref
(
10
);
const
countryTotalNum
=
ref
(
0
);
const
countryTotalList
=
ref
([]);
const
totalPage
=
computed
(()
=>
{
return
Math
.
ceil
(
countryTotalNum
.
value
/
10
);
}
);
const
carouselList
=
ref
([]);
const
countList
=
ref
([]);
const
countList
=
computed
(()
=>
{
return
countryTotalList
.
value
.
slice
(
(
currentPage
.
value
-
1
)
*
pageSize
.
value
,
(
currentPage
.
value
-
1
)
*
pageSize
.
value
+
pageSize
.
value
);
}
);
const
handleLeft
=
()
=>
{
if
(
currentPage
.
value
===
1
)
{
ElMessage
.
warning
(
"当前已经是第一页!"
);
return
;
}
else
{
currentPage
.
value
--
;
}
}
;
const
handleRight
=
()
=>
{
if
(
currentPage
.
value
===
totalPage
.
value
)
{
ElMessage
.
warning
(
"当前已经是最后一页!"
);
return
;
}
else
{
currentPage
.
value
++
;
}
}
;
const
startIndex
=
ref
(
0
);
const
activeDate
=
inject
(
"activeDate"
,
ref
(
"week"
));
...
...
@@ -458,7 +520,7 @@ const nameMap = {
"Solomon Islands"
:
"所罗门群岛"
,
"Sierra Leone"
:
"塞拉利昂"
,
"El Salvador"
:
"萨尔瓦多"
,
"Somaliland"
:
"索马里兰"
,
Somaliland
:
"索马里兰"
,
Somalia
:
"索马里"
,
"Republic of Serbia"
:
"塞尔维亚"
,
Suriname
:
"苏里南"
,
...
...
@@ -582,58 +644,72 @@ const getColorByValue = (value, maxValue) => {
* @param {number
}
maxValue - 最大值
* @returns {string
}
RGB 颜色字符串,如 "rgb(255, 0, 0)"
*/
const
getColorByValueRandom
=
(
value
,
maxValue
)
=>
{
const
ratio
=
Math
.
min
(
Math
.
max
(
value
/
maxValue
,
0
),
1
);
// HSL 参数:高饱和度,中等偏暗亮度,避免太亮或黑色
let
h
=
ratio
*
360
;
// 色相:0°(红) 到 360°(循环)
h
=
h
%
360
;
// 修复:确保 h=360 映射回 0,避免黑色
const
s
=
100
;
// 饱和度 100%
const
l
=
40
;
// 亮度 40%(不亮不暗)
// HSL 到 RGB 转换
const
hslToRgb
=
(
h
,
s
,
l
)
=>
{
s
/=
100
;
l
/=
100
;
const
c
=
(
1
-
Math
.
abs
(
2
*
l
-
1
))
*
s
;
const
x
=
c
*
(
1
-
Math
.
abs
((
h
/
60
)
%
2
-
1
));
const
m
=
l
-
c
/
2
;
let
r
=
0
,
g
=
0
,
b
=
0
;
if
(
0
<=
h
&&
h
<
60
)
{
r
=
c
;
g
=
x
;
b
=
0
;
}
else
if
(
60
<=
h
&&
h
<
120
)
{
r
=
x
;
g
=
c
;
b
=
0
;
}
else
if
(
120
<=
h
&&
h
<
180
)
{
r
=
0
;
g
=
c
;
b
=
x
;
}
else
if
(
180
<=
h
&&
h
<
240
)
{
r
=
0
;
g
=
x
;
b
=
c
;
}
else
if
(
240
<=
h
&&
h
<
300
)
{
r
=
x
;
g
=
0
;
b
=
c
;
}
else
if
(
300
<=
h
&&
h
<
360
)
{
r
=
c
;
g
=
0
;
b
=
x
;
}
// 移除 else 分支(修复后无需,h 已 %360)
r
=
Math
.
round
((
r
+
m
)
*
255
);
g
=
Math
.
round
((
g
+
m
)
*
255
);
b
=
Math
.
round
((
b
+
m
)
*
255
);
return
`rgb(
${
r
}
,
${
g
}
,
${
b
}
)`
;
};
return
hslToRgb
(
h
,
s
,
l
);
}
const
getColorByValueRandom
=
(
value
,
maxValue
)
=>
{
const
ratio
=
Math
.
min
(
Math
.
max
(
value
/
maxValue
,
0
),
1
);
// HSL 参数:高饱和度,中等偏暗亮度,避免太亮或黑色
let
h
=
ratio
*
360
;
// 色相:0°(红) 到 360°(循环)
h
=
h
%
360
;
// 修复:确保 h=360 映射回 0,避免黑色
const
s
=
100
;
// 饱和度 100%
const
l
=
40
;
// 亮度 40%(不亮不暗)
// HSL 到 RGB 转换
const
hslToRgb
=
(
h
,
s
,
l
)
=>
{
s
/=
100
;
l
/=
100
;
const
c
=
(
1
-
Math
.
abs
(
2
*
l
-
1
))
*
s
;
const
x
=
c
*
(
1
-
Math
.
abs
(((
h
/
60
)
%
2
)
-
1
));
const
m
=
l
-
c
/
2
;
let
r
=
0
,
g
=
0
,
b
=
0
;
if
(
0
<=
h
&&
h
<
60
)
{
r
=
c
;
g
=
x
;
b
=
0
;
}
else
if
(
60
<=
h
&&
h
<
120
)
{
r
=
x
;
g
=
c
;
b
=
0
;
}
else
if
(
120
<=
h
&&
h
<
180
)
{
r
=
0
;
g
=
c
;
b
=
x
;
}
else
if
(
180
<=
h
&&
h
<
240
)
{
r
=
0
;
g
=
x
;
b
=
c
;
}
else
if
(
240
<=
h
&&
h
<
300
)
{
r
=
x
;
g
=
0
;
b
=
c
;
}
else
if
(
300
<=
h
&&
h
<
360
)
{
r
=
c
;
g
=
0
;
b
=
x
;
}
// 移除 else 分支(修复后无需,h 已 %360)
r
=
Math
.
round
((
r
+
m
)
*
255
);
g
=
Math
.
round
((
g
+
m
)
*
255
);
b
=
Math
.
round
((
b
+
m
)
*
255
);
return
`rgb(${r
}
, ${g
}
, ${b
}
)`
;
}
;
return
hslToRgb
(
h
,
s
,
l
);
}
;
const
chartDom
=
ref
();
const
myChart
=
ref
();
function
createChart
()
{
if
(
!
countList
.
value
)
return
;
if
(
!
count
ryTotal
List
.
value
)
return
;
// 找到最大值用于颜色计算
const
maxValue
=
Math
.
max
(...
countList
.
value
.
map
(
item
=>
item
.
value
));
const
maxValue
=
Math
.
max
(...
count
ryTotal
List
.
value
.
map
(
item
=>
item
.
value
));
// 为每个数据项计算颜色
const
processedData
=
countList
.
value
.
map
(
item
=>
{
const
processedData
=
count
ryTotal
List
.
value
.
map
(
item
=>
{
const
color
=
getColorByValueRandom
(
item
.
value
,
maxValue
);
return
{
...
item
,
...
...
@@ -726,15 +802,14 @@ function fetchGeoJSON() {
// fetch("/src/views/ZMOverView/components/fourSuppress/components/allUnion/assets/world.json")
// .then(res => res.json())
// .then(result =>
{
// echarts.registerMap("world", result);
// createChart();
// myChart.value.hideLoading();
// });
echarts
.
registerMap
(
"world"
,
mapJson
);
createChart
();
myChart
.
value
.
hideLoading
();
// echarts.registerMap("world", result);
// createChart();
// myChart.value.hideLoading();
//
}
);
echarts
.
registerMap
(
"world"
,
mapJson
);
createChart
();
myChart
.
value
.
hideLoading
();
}
const
newsList
=
ref
([]);
...
...
@@ -876,10 +951,12 @@ const initRightDonut = async () => {
name
:
res
.
data
[
i
].
country
,
x
:
Math
.
random
()
*
10
,
y
:
Math
.
random
()
*
10
,
// 节点颜色
itemStyle
:
{
color
:
`rgba(
${
Math
.
floor
(
Math
.
random
()
*
256
)}
,
${
Math
.
floor
(
Math
.
random
()
*
256
)}
,
${
Math
.
floor
(
Math
.
random
()
*
256
)}
, 1)`
}
// 节点颜色
itemStyle
:
{
color
:
`rgba(${Math.floor(Math.random() * 256)
}
, ${Math.floor(Math.random() * 256)
}
, ${Math.floor(
Math.random() * 256
)
}
, 1)`
}
}
;
let
item1
=
{
name
:
res
.
data
[
i
].
relationCountry
,
...
...
@@ -894,7 +971,7 @@ const initRightDonut = async () => {
if
(
index
===
-
1
)
{
data
.
push
(
item
);
}
if
(
index1
===
-
1
)
{
data
.
push
(
item1
);
}
...
...
@@ -1038,6 +1115,9 @@ const getUnionList = async () => {
if
(
res
&&
res
.
code
===
200
)
{
console
.
log
(
"----getUnionList"
,
res
.
data
);
carouselList
.
value
=
res
.
data
;
carouselList
.
value
.
forEach
(
item
=>
{
item
.
imageList
=
item
.
imageList
.
slice
(
0
,
10
);
}
);
}
}
catch
(
error
)
{
console
.
error
(
"获取联盟列表接口失败:"
,
error
);
...
...
@@ -1086,7 +1166,8 @@ const getUnionCountList = async () => {
if
(
res
&&
res
.
code
===
200
)
{
console
.
log
(
"----getUnionCountList"
,
res
.
data
);
// 处理一下数据
countList
.
value
=
res
.
data
countryTotalList
.
value
=
res
.
data
.
sort
((
a
,
b
)
=>
b
.
count
-
a
.
count
)
.
map
(
item
=>
{
item
.
value
=
item
.
count
;
...
...
@@ -1110,6 +1191,10 @@ const getUnionCountList = async () => {
item
.
name
=
mappedName
||
item
.
ename
;
return
item
;
}
);
console
.
log
(
"countryTotalList"
,
countryTotalList
.
value
);
countryTotalNum
.
value
=
countryTotalList
.
value
.
length
;
console
.
log
(
"countryTotalNum"
,
countryTotalNum
.
value
);
}
}
catch
(
error
)
{
console
.
error
(
"获取联盟动态接口失败:"
,
error
);
...
...
@@ -1403,17 +1488,22 @@ watch(activeDate, async () => {
.
content
-
left
{
width
:
197
px
;
margin
-
left
:
38
px
;
margin-top
:
55
px
;
margin
-
top
:
31
px
;
margin
-
bottom
:
55
px
;
overflow-y
:
auto
;
display
:
flex
;
flex-direction
:
column
;
.
count
-
box
{
height
:
520
px
;
display
:
flex
;
flex
-
direction
:
column
;
overflow
:
hidden
;
gap
:
12
px
;
}
.
item
{
/* 容器 493 */
width
:
100
%
;
height
:
38
px
;
height
:
42
px
;
/* 自动布局 */
display
:
flex
;
flex
-
direction
:
row
;
...
...
@@ -1426,8 +1516,6 @@ watch(activeDate, async () => {
/* 业务系统/模态背景模糊 */
backdrop
-
filter
:
blur
(
30
px
);
background
:
rgba
(
255
,
255
,
255
,
0.65
);
margin-bottom
:
16px
;
.
item
-
left
{
display
:
flex
;
align
-
items
:
center
;
...
...
@@ -1465,6 +1553,47 @@ watch(activeDate, async () => {
text
-
align
:
left
;
}
}
.
page
-
box
{
height
:
24
px
;
margin
-
top
:
24
px
;
display
:
flex
;
justify
-
content
:
center
;
gap
:
8
px
;
.
left
{
width
:
24
px
;
height
:
24
px
;
border
-
radius
:
4
px
;
overflow
:
hidden
;
cursor
:
pointer
;
img
{
width
:
100
%
;
height
:
100
%
;
}
}
.
center
{
height
:
24
px
;
color
:
var
(
--
color
-
main
-
active
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
style
:
Regular
;
font
-
size
:
14
px
;
font
-
weight
:
400
;
line
-
height
:
24
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
center
;
}
.
right
{
width
:
24
px
;
height
:
24
px
;
border
-
radius
:
4
px
;
overflow
:
hidden
;
cursor
:
pointer
;
img
{
width
:
100
%
;
height
:
100
%
;
}
}
}
}
.
content
-
right
{
...
...
@@ -1745,7 +1874,7 @@ watch(activeDate, async () => {
align
-
items
:
center
;
justify
-
content
:
space
-
around
;
cursor
:
pointer
;
&
:hover
{
&
:
hover
{
background
:
var
(
--
color
-
bg
-
hover
);
}
.
list
-
left
{
...
...
src/views/ZMOverView/index.vue
浏览文件 @
afe87dfb
...
...
@@ -81,7 +81,7 @@
</
template
>
<
script
setup
>
import
{
onMounted
,
ref
,
computed
,
provide
}
from
"vue"
;
import
{
onMounted
,
onUnmounted
,
ref
,
computed
,
provide
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
import
background
from
"./assets/images/backgroundBT.png"
;
...
...
@@ -159,6 +159,8 @@ provide("activeDate", activeDate);
const
handleDateClick
=
type
=>
{
activeDate
.
value
=
type
;
};
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -276,7 +278,7 @@ const handleDateClick = type => {
height
:
192px
;
position
:
fixed
;
top
:
149px
;
left
:
0
;
left
:
0
;
background-color
:
rgba
(
255
,
255
,
255
,
0
.65
);
border-top-right-radius
:
10px
;
border-bottom-right-radius
:
10px
;
...
...
@@ -295,12 +297,11 @@ const handleDateClick = type => {
cursor
:
pointer
;
border-top-right-radius
:
10px
;
border-bottom-right-radius
:
10px
;
&
:hover
{
&
:hover
{
background
:
var
(
--
color-bg-hover
);
// span{
// color: var(--color-main-active);
// }
}
img
{
...
...
src/views/bill/deepDig/processAnalysis/index.vue
浏览文件 @
afe87dfb
...
...
@@ -21,7 +21,7 @@
<div
class=
"box1-main-center"
id=
"chart1"
></div>
<div
class=
"box1-main-footer"
>
<div
class=
"box-footer-left"
>
<img
src=
"
../assets/icons/right-icon1
.png"
alt=
""
/>
<img
src=
"
@/assets/icons/box-footer-left-icon
.png"
alt=
""
/>
</div>
<div
class=
"box-footer-center"
>
从立法耗时角度分析,大而美法案从提交到签署仅39天,远快于历史同类法案(通常需6个月以上),立法速度极快。
...
...
@@ -52,7 +52,7 @@
<div
class=
"box2-main-center"
id=
"chart2"
></div>
<div
class=
"box2-main-footer"
>
<div
class=
"box-footer-left"
>
<img
src=
"
../assets/icons/right-icon1
.png"
alt=
""
/>
<img
src=
"
@/assets/icons/box-footer-left-icon
.png"
alt=
""
/>
</div>
<div
class=
"box-footer-center"
>
法案本质是共和党与资本集团的深度联盟,共和党获超
...
...
@@ -403,7 +403,7 @@
<
/div
>
<
div
class
=
"box3-main-footer"
>
<
div
class
=
"box-footer-left"
>
<
img
src
=
"
../assets/icons/right-icon1
.png"
alt
=
""
/>
<
img
src
=
"
@/assets/icons/box-footer-left-icon
.png"
alt
=
""
/>
<
/div
>
<
div
class
=
"box-footer-center"
>
法案以
218
:
214
(众议院)和
51
:
50
(副总统决胜票)微弱优势强行通过,暴露两党极端对立、党内倒戈频发的特点。
...
...
@@ -1219,6 +1219,7 @@ onMounted(async () => {
width
:
130
px
;
display
:
flex
;
justify
-
content
:
flex
-
end
;
align
-
items
:
center
;
.
icon
{
width
:
16
px
;
height
:
16
px
;
...
...
@@ -1254,6 +1255,9 @@ onMounted(async () => {
// border-right: 1px solid rgba(243, 243, 244, 1);
width
:
215
px
;
.
box1
-
right
-
top
{
height
:
20
px
;
box
-
sizing
:
border
-
box
;
padding
-
top
:
8
px
;
:
deep
(.
el
-
progress
-
bar__inner
)
{
background
:
rgba
(
22
,
119
,
255
,
1
);
border
-
radius
:
0
;
...
...
@@ -1264,6 +1268,9 @@ onMounted(async () => {
}
}
.
box1
-
right
-
bottom
{
height
:
20
px
;
box
-
sizing
:
border
-
box
;
padding
-
top
:
8
px
;
:
deep
(.
el
-
progress
-
bar__inner
)
{
background
:
rgba
(
255
,
172
,
77
,
1
);
border
-
radius
:
0
;
...
...
src/views/bill/introdoction/index.vue
浏览文件 @
afe87dfb
...
...
@@ -899,7 +899,7 @@ onMounted(() => {
position
:
relative
;
.
usr
-
icon1
{
position
:
absolute
;
bottom
:
0
px
;
bottom
:
0
;
left
:
18
px
;
width
:
48
px
;
height
:
48
px
;
...
...
@@ -1076,7 +1076,7 @@ onMounted(() => {
}
.
usr
-
icon1
{
position
:
absolute
;
//
bottom: -15px;
bottom
:
-
15
px
;
left
:
55
px
;
width
:
48
px
;
height
:
48
px
;
...
...
@@ -1091,7 +1091,7 @@ onMounted(() => {
}
.
usr
-
icon2
{
position
:
absolute
;
//
bottom: -15px;
bottom
:
-
15
px
;
right
:
55
px
;
width
:
48
px
;
height
:
48
px
;
...
...
@@ -1110,7 +1110,7 @@ onMounted(() => {
margin
-
top
:
30
px
;
.
info
-
right
-
title
{
height
:
22
px
;
//
height: 22px;
color
:
var
(
--
color
-
main
-
active
);
font
-
family
:
Microsoft
YaHei
;
font
-
size
:
20
px
;
...
...
src/views/bill/template/utils/piechart.js
浏览文件 @
afe87dfb
...
...
@@ -17,17 +17,17 @@ const getPieChart = (data, colorList) => {
formatter
:
'{name|{b}}
\
n{time|{c} 条 {d}%}'
,
minMargin
:
5
,
edgeDistance
:
10
,
lineHeight
:
18
,
lineHeight
:
24
,
rich
:
{
name
:
{
color
:
'rgba(59, 65, 75, 1)'
,
fontFamily
:
'Microsoft YaHei'
,
fontSize
:
1
4
,
fontSize
:
1
6
,
fontWeight
:
'bold'
,
padding
:
[
10
,
0
,
10
,
0
]
},
time
:
{
fontSize
:
1
4
,
fontSize
:
1
6
,
fontFamily
:
'Microsoft YaHei'
,
color
:
'#rgba(95, 101, 108, 1)'
,
padding
:
[
10
,
0
,
10
,
0
]
...
...
src/views/thinkTank/reportOriginal/index.vue
浏览文件 @
afe87dfb
...
...
@@ -108,16 +108,20 @@ onMounted(async () => {
<
style
lang=
"scss"
scoped
>
.wrap
{
width
:
100%
;
// height: 984px;
height
:
100%
;
overflow
:
hidden
;
overflow-y
:
auto
;
.header
{
width
:
100%
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
position
:
sticky
;
top
:
0
;
z-index
:
99
;
.header-top
{
margin-top
:
20px
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论