Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
d8ce6e58
提交
d8ce6e58
authored
1月 17, 2026
作者:
yanpeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
zm api
上级
a20e0bd1
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
935 行增加
和
43 行删除
+935
-43
package-lock.json
package-lock.json
+2
-2
index.js
src/api/zmOverview/allDomains/index.js
+29
-28
index.vue
...ew/components/fourSuppress/components/addDomain/index.vue
+184
-4
mockdata.json
...omponents/fourSuppress/components/addDomain/mockdata.json
+204
-0
Timeline.vue
src/views/ZMOverView/components/gameProfile/Timeline.vue
+5
-0
index.vue
src/views/ZMOverView/components/gameProfile/index.vue
+91
-9
概览页全领域.md
概览页全领域.md
+420
-0
没有找到文件。
package-lock.json
浏览文件 @
d8ce6e58
{
"name"
:
"
think-tank
"
,
"name"
:
"
zm-system
"
,
"version"
:
"1.0.0"
,
"lockfileVersion"
:
3
,
"requires"
:
true
,
"packages"
:
{
""
:
{
"name"
:
"
think-tank
"
,
"name"
:
"
zm-system
"
,
"version"
:
"1.0.0"
,
"license"
:
"MIT"
,
"dependencies"
:
{
...
...
src/api/zmOverview/allDomains/index.js
浏览文件 @
d8ce6e58
...
...
@@ -3,48 +3,49 @@ import request from "@/api/request.js";
// 全领域统计
export
function
getAllDomainCount
()
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndexV2/AllDomainCount`
,
})
return
request
({
method
:
"GET"
,
url
:
`/api/rivalryIndexV2/AllDomainCount`
});
}
// 美对华制裁措施数量趋势
export
function
getDomainContainmentTrend
()
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndexV2/DomainContainmentTrend`
,
})
export
function
getDomainContainmentTrend
(
byYOrM
=
"按月统计"
)
{
return
request
({
method
:
"GET"
,
url
:
`/api/rivalryIndexV2/DomainContainmentTrend?byYOrM=
${
byYOrM
}
`
});
}
//
最新动态
export
function
getTechnologyGameAnalysis
()
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndexV2/TechnologyGameAnalysis`
,
})
//
中美科技博弈分析
export
function
getTechnologyGameAnalysis
(
domain
=
1
)
{
return
request
({
method
:
"GET"
,
url
:
`/api/rivalryIndexV2/TechnologyGameAnalysis?domain=
${
domain
}
`
});
}
// 领域打压遏制排行
/**
* @param {currentPage, pageSize}
* @param {currentPage, pageSize}
*/
export
function
getDomainContainmentRanking
()
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndexV2/DomainContainmentRanking`
,
})
export
function
getDomainContainmentRanking
(
ContainmentOrg
=
"对我打压机构"
,
Domains
=
""
)
{
return
request
({
method
:
"GET"
,
url
:
!!
Domains
?
`/api/rivalryIndexV2/DomainContainmentRanking?ContainmentOrg=
${
ContainmentOrg
}
&Domains=
${
Domains
}
`
:
`/api/rivalryIndexV2/DomainContainmentRanking?ContainmentOrg=
${
ContainmentOrg
}
`
});
}
// 领域打压遏制时间线
/**
* @param {currentPage, pageSize}
* @param {currentPage, pageSize}
*/
export
function
getDomainContainmentTimeline
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndexV2/DomainContainmentTimeline`
,
params
})
return
request
({
method
:
"GET"
,
url
:
`/api/rivalryIndexV2/DomainContainmentTimeline`
,
params
});
}
src/views/ZMOverView/components/fourSuppress/components/addDomain/index.vue
浏览文件 @
d8ce6e58
...
...
@@ -199,7 +199,7 @@
</
template
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
,
watch
}
from
"vue"
;
import
setChart
from
"@/utils/setChart"
;
import
getMultiLineChart
from
"./multiLineChart"
;
import
leftBtn
from
"../../assets/left-btn.png"
;
...
...
@@ -289,6 +289,61 @@ const timelineList = ref([
}
]);
// 处理时间线数据的方法
const
processTimelineData
=
rawData
=>
{
if
(
!
rawData
||
!
Array
.
isArray
(
rawData
)
||
rawData
.
length
===
0
)
{
return
[];
}
return
rawData
.
map
(
item
=>
{
// 将日期格式转换为 "YYYY年 M月" 格式
const
eventDate
=
item
.
eventDate
?
new
Date
(
item
.
eventDate
)
:
null
;
const
formattedDate
=
eventDate
?
`
${
eventDate
.
getFullYear
()}
年
${
eventDate
.
getMonth
()
+
1
}
月`
:
""
;
// 提取领域标签
const
tags
=
[];
if
(
item
.
eventDomainList
&&
Array
.
isArray
(
item
.
eventDomainList
))
{
item
.
eventDomainList
.
forEach
(
domain
=>
{
if
(
domain
.
domainName
)
{
tags
.
push
(
domain
.
domainName
);
}
});
}
return
{
date
:
formattedDate
,
tags
:
tags
,
title
:
item
.
eventName
||
""
,
content
:
item
.
eventDesc
||
""
,
info
:
`
${
item
.
eventDate
||
""
}
·
${
item
.
eventType
||
""
}
`
,
// 保留原始数据字段
eventId
:
item
.
eventId
,
eventOrg
:
item
.
eventOrg
,
eventType
:
item
.
eventType
,
eventCountryImg
:
item
.
eventCountryImg
,
eventDomainList
:
item
.
eventDomainList
};
});
};
// 获取领域遏制时间线数据
const
handleGetDomainContainmentTimeline
=
async
()
=>
{
try
{
const
res
=
await
getDomainContainmentTimeline
();
console
.
log
(
"美对我领域打压遏制时间线"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 处理返回的数据结构
const
processedData
=
processTimelineData
(
res
.
data
);
timelineList
.
value
=
processedData
.
length
>
9
?
processedData
.
slice
(
0
,
9
)
:
processedData
;
}
}
catch
(
error
)
{
console
.
error
(
"获取美对我领域打压遏制时间线失败:"
,
error
);
// 设置默认空数组
timelineList
.
value
=
[];
}
};
const
maxPerRow
=
3
;
const
nodeGapX
=
450
;
const
rowHeight
=
215
;
...
...
@@ -419,6 +474,7 @@ const svgWidth = computed(() => {
const
svgHeight
=
computed
(()
=>
{
const
rows
=
Math
.
ceil
(
timelineList
.
value
.
length
/
maxPerRow
);
console
.
log
(
"看下高度"
,
rows
);
return
startY
+
rows
*
rowHeight
;
});
...
...
@@ -606,6 +662,77 @@ const box5Data = ref({
]
});
const
handleGetDomainContainmentTrend
=
async
()
=>
{
try
{
const
res
=
await
getDomainContainmentTrend
();
console
.
log
(
"美对华领域打压遏制数量趋势"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 处理返回的数据结构,按照 mockdata.json 中的格式
const
processedData
=
processDomainTrendData
(
res
.
data
);
box5Data
.
value
=
processedData
;
// 更新图表
let
Chart
=
getMultiLineChart
(
box5Data
.
value
);
setChart
(
Chart
,
"chartRef"
);
}
}
catch
(
error
)
{
console
.
error
(
"获取美对华领域打压遏制数量趋势失败:"
,
error
);
}
};
// 处理领域趋势数据的方法
const
processDomainTrendData
=
rawData
=>
{
// 提取所有的月份作为标题
const
titles
=
rawData
.
map
(
item
=>
item
.
yearOrMonth
);
// 收集所有不重复的领域名称
const
domainNamesSet
=
new
Set
();
rawData
.
forEach
(
item
=>
{
item
.
domainList
.
forEach
(
domain
=>
{
domainNamesSet
.
add
(
domain
.
domainName
);
});
});
const
domainNames
=
Array
.
from
(
domainNamesSet
);
// 定义颜色映射
const
colorMap
=
{
人工智能
:
"#E34D59"
,
新一代通信网络
:
"#FF9F1C"
,
核
:
"#FFB3B3"
,
生物科技
:
"#00A79D"
,
量子科技
:
"#7B61FF"
,
先进制造
:
"#363B42"
,
新能源
:
"#2BA471"
,
太空
:
"#3762F0"
,
集成电路
:
"#0052D9"
,
新材料
:
"#FFD900"
,
航空航天
:
"#3762F0"
,
海洋
:
"#76D1FF"
,
深海
:
"#002060"
,
其他
:
"#A6A6A6"
};
// 生成数据系列
const
dataSeries
=
domainNames
.
map
(
domainName
=>
{
const
values
=
rawData
.
map
(
monthData
=>
{
const
domainItem
=
monthData
.
domainList
.
find
(
d
=>
d
.
domainName
===
domainName
);
return
domainItem
?
domainItem
.
domainNum
:
0
;
});
return
{
name
:
domainName
,
color
:
colorMap
[
domainName
]
||
`#
${
Math
.
floor
(
Math
.
random
()
*
16777215
).
toString
(
16
)}
`
,
// 如果没有预定义颜色,则随机生成
value
:
values
};
});
return
{
title
:
titles
,
data
:
dataSeries
};
};
const
newsList
=
ref
([
{
tags
:
[
"航空航天"
,
"能源"
],
...
...
@@ -700,6 +827,57 @@ const getProgressWidth = count => {
return
(
count
/
maxCount
)
*
100
+
"%"
;
};
// 处理排名数据的方法
const
processRankingData
=
rawData
=>
{
if
(
!
rawData
||
!
Array
.
isArray
(
rawData
)
||
rawData
.
length
===
0
)
{
return
[];
}
return
rawData
.
map
(
item
=>
{
return
{
name
:
item
.
orgName
||
""
,
count
:
item
.
orgCount
||
0
,
orgPicture
:
item
.
orgPicture
// 保留原始图片字段,以防后续需要使用
};
});
};
const
rankTypeMap
=
{
institution
:
"对我打压机构"
,
enterprise
:
"受打压企业"
,
school
:
"受打压院校"
};
// 获取领域遏制排名数据
const
handleGetDomainContainmentRanking
=
async
()
=>
{
try
{
console
.
log
(
"获取领域遏制排名数据"
,
rankTypeMap
[
rankType
.
value
],
selectedField
.
value
);
const
res
=
await
getDomainContainmentRanking
(
rankTypeMap
[
rankType
.
value
],
!!
selectedField
.
value
?
selectedField
.
value
:
""
);
console
.
log
(
"获取领域遏制排名数据"
,
rankTypeMap
[
rankType
.
value
],
selectedField
.
value
);
console
.
log
(
"美对华领域打压遏制排行"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 处理返回的数据结构
const
processedData
=
processRankingData
(
res
.
data
);
rankList
.
value
=
processedData
;
}
}
catch
(
error
)
{
console
.
error
(
"获取美对华领域打压遏制排行失败:"
,
error
);
// 设置默认空数组
rankList
.
value
=
[];
}
};
// 监听rankType变化, 调用获取领域遏制排名数据方法
watch
(
rankType
,
handleGetDomainContainmentRanking
);
// 监听selectedField变化, 调用获取领域遏制排名数据方法
watch
(
selectedField
,
handleGetDomainContainmentRanking
);
const
currentIndex
=
ref
(
0
);
const
next
=
()
=>
{
if
(
currentIndex
.
value
<
buttonsData
.
value
.
length
-
5
)
{
...
...
@@ -714,10 +892,13 @@ const prev = () => {
};
onMounted
(()
=>
{
let
Chart
=
getMultiLineChart
(
box5Data
.
value
);
setChart
(
Chart
,
"chartRef"
);
// let Chart = getMultiLineChart(box5Data.value);
// setChart(Chart, "chartRef");
handleGetDomainContainmentTrend
();
handleGetAllDomainCount
();
handleGetDomainContainmentRanking
();
handleGetDomainContainmentTimeline
();
});
</
script
>
...
...
@@ -1461,4 +1642,3 @@ onMounted(() => {
border-color
:
rgb
(
59
,
65
,
75
)
!important
;
}
</
style
>
src/views/ZMOverView/components/fourSuppress/components/addDomain/mockdata.json
0 → 100644
浏览文件 @
d8ce6e58
{
"code"
:
200
,
"message"
:
"操作成功"
,
"success"
:
true
,
"data"
:
[
{
"eventType"
:
"行政令"
,
"eventName"
:
"为了美国和委内瑞拉人民的利益保障委内瑞拉的石油收入"
,
"eventDesc"
:
null
,
"eventId"
:
"248914"
,
"eventDomainList"
:
[
{
"domainId"
:
"1"
,
"domainName"
:
"人工智能"
},
{
"domainId"
:
"3"
,
"domainName"
:
"新一代通信网络"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-10"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
null
,
"eventDesc"
:
null
,
"eventId"
:
"248863"
,
"eventDomainList"
:
[
{
"domainId"
:
"8"
,
"domainName"
:
"先进制造"
},
{
"domainId"
:
"9"
,
"domainName"
:
"新材料"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-09"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"使美国退出与美国利益相悖的国际组织、公约、条约"
,
"eventDesc"
:
null
,
"eventId"
:
"249004"
,
"eventDomainList"
:
[
{
"domainId"
:
"2"
,
"domainName"
:
"生物科技"
},
{
"domainId"
:
"4"
,
"domainName"
:
"量子科技"
},
{
"domainId"
:
"5"
,
"domainName"
:
"新能源"
},
{
"domainId"
:
"3"
,
"domainName"
:
"新一代通信网络"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-08"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"在国防合同中优先考虑作战人员"
,
"eventDesc"
:
null
,
"eventId"
:
"248915"
,
"eventDomainList"
:
[
{
"domainId"
:
"99"
,
"domainName"
:
"其他"
},
{
"domainId"
:
"8"
,
"domainName"
:
"先进制造"
},
{
"domainId"
:
"10"
,
"domainName"
:
"航空航天"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-08"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"大西洋高度洄游物种;商业性大西洋黑鼻鲨和娱乐性大西洋鲨鱼渔业管理措施的修订"
,
"eventDesc"
:
"NMFS提议对商业和休闲大西洋鲨鱼渔业进行几项改革。具体来说,NMFS正在考虑取消大西洋地区黑鼻鲨管理边界,修改商业保留限额..."
,
"eventId"
:
"163447"
,
"eventDomainList"
:
[
{
"domainId"
:
"14"
,
"domainName"
:
"核"
},
{
"domainId"
:
"7"
,
"domainName"
:
"海洋"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-05"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"关于Hiefo Corporation收购Emcore Corporation部分资产"
,
"eventDesc"
:
null
,
"eventId"
:
"248916"
,
"eventDomainList"
:
[
{
"domainId"
:
"3"
,
"domainName"
:
"新一代通信网络"
},
{
"domainId"
:
"8"
,
"domainName"
:
"先进制造"
},
{
"domainId"
:
"6"
,
"domainName"
:
"集成电路"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-03"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"汽车贷款利息扣除"
,
"eventDesc"
:
"本文件包含关于某些纳税人扣除高达10,000美元的合格乘用车贷款利息的拟议法规。本文件还包含关于新信息报告的拟议法规..."
,
"eventId"
:
"163443"
,
"eventDomainList"
:
[
{
"domainId"
:
"13"
,
"domainName"
:
"太空"
},
{
"domainId"
:
"14"
,
"domainName"
:
"核"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-02"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"品牌处方药费用法规的法定更新"
,
"eventDesc"
:
"本文件建议修订有关对从事制造或进口某些品牌处方药业务的相关实体征收年费的法规。为了应对覆盖缺口折扣的替代..."
,
"eventId"
:
"163444"
,
"eventDomainList"
:
[
{
"domainId"
:
"2"
,
"domainName"
:
"生物科技"
},
{
"domainId"
:
"3"
,
"domainName"
:
"新一代通信网络"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2026-01-02"
},
{
"eventType"
:
"337"
,
"eventName"
:
"外国制造的半导体器件及其下游产品和组件"
,
"eventDesc"
:
"美国ITC发布对外国制造的半导体器件及其下游产品和组件的337部分终裁"
,
"eventId"
:
"111"
,
"eventDomainList"
:
[
{
"domainId"
:
"1"
,
"domainName"
:
"人工智能"
},
{
"domainId"
:
"5"
,
"domainName"
:
"新能源"
}
],
"eventOrgName"
:
"美国商务部"
,
"eventDate"
:
"2026-01-01"
},
{
"eventType"
:
"行政令"
,
"eventName"
:
"美国东北部的渔业;大西洋冲浪蛤和海洋圆蛤渔业管理计划修正案21"
,
"eventDesc"
:
"NMFS宣布,中大西洋渔业管理委员会已提交大西洋冲浪蛤和海洋圆蛤渔业管理计划第21号修正案,供商务部长审查和批准。我们正在征求意见..."
,
"eventId"
:
"163426"
,
"eventDomainList"
:
[
{
"domainId"
:
"7"
,
"domainName"
:
"海洋"
},
{
"domainId"
:
"3"
,
"domainName"
:
"新一代通信网络"
}
],
"eventOrgName"
:
null
,
"eventDate"
:
"2025-12-29"
}
]
}
\ No newline at end of file
src/views/ZMOverView/components/gameProfile/Timeline.vue
浏览文件 @
d8ce6e58
...
...
@@ -346,5 +346,9 @@ export default {
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
justify
;
overflow
:
hidden
;
display
:
-webkit-box
;
-webkit-box-orient
:
vertical
;
-webkit-line-clamp
:
6
;
}
</
style
>
\ No newline at end of file
src/views/ZMOverView/components/gameProfile/index.vue
浏览文件 @
d8ce6e58
...
...
@@ -8,7 +8,15 @@
</div>
<div
style=
"display: flex; height: 650px; width: 100%"
>
<div
style=
"width: 50%"
>
<div
style=
"display: flex; justify-content: space-between; margin-right: 50px; line-height: 32px;align-items: center;"
>
<div
style=
"
display: flex;
justify-content: space-between;
margin-right: 50px;
line-height: 32px;
align-items: center;
"
>
<div
style=
"display: flex; margin-left: 50px"
>
数据来源:
<el-select
class=
"select-item"
size=
"default"
style=
"margin-left: 15px; width: 240px; height: 32px"
>
...
...
@@ -31,16 +39,24 @@
<el-table-column
prop=
"percent"
label=
"中国"
>
<template
#
default=
"scope"
>
<div
class=
"progress-wrapper left"
:style=
"
{ '--i': '40px', '--j': '-20px', marginLeft: '20px' }">
<el-progress
:percentage=
"scope.row.percent[0]"
:stroke-width=
"20"
class=
"left-progress"
:show-text=
"false"
/>
<el-progress
:percentage=
"scope.row.percent[0]"
:stroke-width=
"20"
class=
"left-progress"
:show-text=
"false"
/>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"percent"
label=
"美国"
>
<
template
#
default=
"scope"
>
<div
class=
"progress-wrapper right"
:style=
"
{ '--i': '40px', marginRight: '20px' }">
<el-progress
:percentage=
"scope.row.percent[0]"
:stroke-width=
"20"
class=
"right-progress"
:show-text=
"false"
/>
<el-progress
:percentage=
"scope.row.percent[0]"
:stroke-width=
"20"
class=
"right-progress"
:show-text=
"false"
/>
</div>
</
template
>
</el-table-column>
...
...
@@ -58,12 +74,19 @@
</div>
</div>
<div
class=
"btn-box"
>
<div
v-for=
"(value, index) in btnList"
class=
"btn-item"
:style=
"{
background: value.background
}"
>
<div
v-for=
"(value, index) in btnList"
class=
"btn-item"
:style=
"{
background: value.background
}"
>
<img
:src=
"`/public/icon/ZM/btn-icon-${index}.png`"
style=
"width: 22px; height: 19px; margin: 0 22px"
/>
{{ value.text }}
<img
:src=
"`/public/icon/ZM/btn-icon-arrow.png`"
style=
"margin-left: auto; margin-right: 22px; width: 13px; height: 12px"
/>
<img
:src=
"`/public/icon/ZM/btn-icon-arrow.png`"
style=
"margin-left: auto; margin-right: 22px; width: 13px; height: 12px"
/>
</div>
</div>
</div>
...
...
@@ -74,6 +97,12 @@ import { onMounted, ref, computed } from "vue";
import
*
as
echarts
from
"echarts"
;
import
Timeline
from
"./Timeline.vue"
;
import
tableShow
from
"./tableShow.vue"
;
import
{
getTechnologyGameAnalysis
,
getDomainContainmentRanking
,
getDomainContainmentTimeline
}
from
"@/api/zmOverview/allDomains"
;
import
radarChart
from
"./radarChart3.js"
;
const
course
=
ref
([
{
...
...
@@ -129,6 +158,57 @@ const course = ref([
}
]);
// 处理时间线数据的方法
const
processTimelineData
=
rawData
=>
{
if
(
!
rawData
||
!
Array
.
isArray
(
rawData
)
||
rawData
.
length
===
0
)
{
return
[];
}
return
rawData
.
map
(
item
=>
{
// 根据eventType确定unit值
let
unit
=
""
;
if
(
item
.
eventType
===
"反制措施"
)
{
unit
=
"中国"
;
}
else
if
(
item
.
eventType
===
"行政令"
)
{
unit
=
"美国"
;
}
else
{
// 如果有其他类型,可以根据需要设定默认值或保持原有值
unit
=
item
.
eventOrg
||
""
;
// 使用eventOrg作为备选
}
return
{
time
:
item
.
eventDate
||
""
,
title
:
item
.
eventName
||
""
,
content
:
item
.
eventDesc
||
""
,
unit
:
unit
,
tag
:
item
.
eventStrategy
||
""
,
// 保留其他原始字段
eventId
:
item
.
eventId
,
eventOrg
:
item
.
eventOrg
,
eventType
:
item
.
eventType
,
eventCountryImg
:
item
.
eventCountryImg
};
});
};
// 获取技术博弈分析数据
const
handleGetTechnologyGameAnalysis
=
async
()
=>
{
try
{
const
res
=
await
getTechnologyGameAnalysis
();
console
.
log
(
"技术博弈分析数据"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 处理返回的数据结构
const
processedData
=
processTimelineData
(
res
.
data
);
course
.
value
=
processedData
;
}
}
catch
(
error
)
{
console
.
error
(
"获取技术博弈分析数据失败:"
,
error
);
// 设置默认空数组
course
.
value
=
[];
}
};
onMounted
(()
=>
{
const
dom
=
document
.
getElementById
(
"char"
);
const
myChart
=
echarts
.
init
(
dom
);
...
...
@@ -145,6 +225,8 @@ onMounted(() => {
myChart
.
setOption
(
option
);
// setChart(option, "char7");
// 获取时间线数据
handleGetTechnologyGameAnalysis
();
});
const
tableData
=
ref
([
...
...
概览页全领域.md
0 → 100644
浏览文件 @
d8ce6e58
# 交互消息类
## ApiResult
```
java
public
class
ApiResult
<
T
>
{
@ApiModelProperty
(
"响应码"
)
private
int
code
;
@ApiModelProperty
(
"响应消息"
)
private
String
message
;
@ApiModelProperty
(
"是否成功"
)
private
boolean
success
;
@ApiModelProperty
(
"响应数据"
)
private
T
data
;
}
```
## LatestRiskUpdatesVO
```
java
public
class
LatestRiskUpdatesVO
{
@Data
public
static
class
ItemVO
{
//统计总数
private
long
total
;
//增加数
private
long
dailyIncrement
;
}
@Data
public
static
class
HotspotVO
{
//最热事件id
private
String
HotspotID
;
//最热事件类型
private
String
HotspotType
;
//最热事件日期
private
String
HotspotDate
;
//最热事件标题
private
String
HotspotTitle
;
}
}
```
## LatestRisksVO
```
java
public
class
LatestRisksVO
{
//风险信号列表
private
List
<
RiskVO
>
riskVOS
;
//风险关联事件列表
private
List
<
HotspotVO
>
hotspotVOS
;
//所有风险数
private
Long
RiskCount
;
@Data
@NoArgsConstructor
public
static
class
HotspotVO
{
@ApiModelProperty
(
"id"
)
private
String
HotspotID
;
@ApiModelProperty
(
"标题"
)
private
String
HotspotTitle
;
@ApiModelProperty
(
"描述"
)
private
String
HotspotDesc
;
@ApiModelProperty
(
"时间"
)
private
Date
HotspotDate
;
@ApiModelProperty
(
"图片"
)
private
String
HotspotPicture
;
@ApiModelProperty
(
"发布机构名称"
)
private
String
HotspotOrgName
;
@ApiModelProperty
(
"类型"
)
private
String
HotspotType
;
@ApiModelProperty
(
"领域列表"
)
private
List
<
BaseInfo
>
DomainList
;
}
}
@Data
public
static
class
RiskVO
{
@ApiModelProperty
(
"风险信号id"
)
private
Long
signalId
;
@ApiModelProperty
(
"风险信号标题"
)
private
String
signalTitle
;
@ApiModelProperty
(
"风险信号时间"
)
private
Date
signalTime
;
@ApiModelProperty
(
"风险信号等级"
)
private
String
signalLevel
;
}
}
```
## AllDomainCountVO
```
public class AllDomainCountVO {
@ApiModelProperty(value = "统计名称")
private String countName;
@ApiModelProperty(value = "统计数量")
private Long countNum;
}
```
## DomainContainmentRankingVO
```
public class DomainContainmentRankingVO {
@ApiModelProperty(value = "机构名称")
private String orgName;
@ApiModelProperty(value = "机构图片")
private String orgPicture;
@ApiModelProperty(value = "机构打压次数")
private Long orgCount;
}
```
## DomainContainmentTrendVO
```
public class DomainContainmentTrendVO {
@ApiModelProperty(value = "年度/月份")
private String YearOrMonth;
@ApiModelProperty(value = "领域列表")
private List<DomainVO> DomainList;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DomainVO {
@ApiModelProperty(value = "统计名称")
private String DomainName;
@ApiModelProperty(value = "统计数量")
private Long DomainNum;
}
}
```
## DomainContainmentTimelineVO
```
public class DomainContainmentTimelineVO {
@ApiModelProperty(value = "打压名称")
private String EventName;
@ApiModelProperty(value = "打压描述")
private String EventDesc;
@ApiModelProperty(value = "打压时间")
private Date EventDate;
@ApiModelProperty(value = "打压类别")
private String EventType;
@ApiModelProperty(value = "打压发起机构")
private String EventOrgName;
@ApiModelProperty(value = "打压事件id")
private String EventId;
@ApiModelProperty(value = "领域列表")
private List<DomainContainmentTimelineVO.DomainVO> EventDomainList;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DomainVO {
@ApiModelProperty(value = "领域id")
private String DomainId;
@ApiModelProperty(value = "领域名称")
private String DomainName;
}
}
```
## TechnologyGameAnalysisVO
```
public class TechnologyGameAnalysisVO {
@ApiModelProperty(value = "事件id")
private String eventId;
@ApiModelProperty(value = "事件名称")
private String eventName;
@ApiModelProperty(value = "事件摘要")
private String eventDesc;
@ApiModelProperty(value = "事件发布机构")
private String eventOrg;
@ApiModelProperty(value = "事件时间")
private Date eventDate;
@ApiModelProperty(value = "事件策略")
private String eventStrategy;
@ApiModelProperty(value = "事件类型")
private String eventType;
@ApiModelProperty(value = "事件国旗图片")
private String eventCountryImg;
}
```
# 中美博弈概览
## **最新风险动态统计**
请求地址:/rivalryIndexV2/LatestRiskUpdates
请求类型:GET
输入参数:
参数:无输入
```
java
@ApiParam
(
value
=
"日期"
,
defaultValue
=
"本周"
)
@RequestParam
(
value
=
"currentDate"
)
String
currentDate
```
请求头:携带token,内容为:
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<LatestRiskUpdatesVO>
```
"data": {
"bill": { -法案
"total": 167258,
"dailyIncrement": 91
},
"administrativeOrder": {-政令
"total": 215763,
"dailyIncrement": 27
},
"Entities": {-实体清单
"total": 141,
"dailyIncrement": 0
},
"CCL": {-ccl
"total": 3,
"dailyIncrement": 0
},
"SDN": {-sdn
"total": 3,
"dailyIncrement": 0
},
"militaryInvolvement": {-涉军企业
"total": 0,
"dailyIncrement": 0
},
"337Survey": {-337调查
"total": 2881,
"dailyIncrement": 1
},
"232Survey": {-232调查
"total": 35,
"dailyIncrement": 0
},
"301Survey": {-301调查
"total": 5,
"dailyIncrement": 0
},
"policiesRegulations": {-最热政策法规
"hotspotID": "119_HR_7065",
"hotspotDate": "2026-01-14",
"hotspotType": "法案",
"hotspotTitle": "塞尼卡民族执法效率法案 (Seneca Nation Law Enforcement Efficiency Act)"
},
"exportControl": {-最热出口管制
"hotspotID": "138",
"hotspotDate": "2025-10-08",
"hotspotType": "实体清单",
"hotspotTitle": "实体清单的增补与修订"
},
"investmentFinancingRestrictions": {-最热投融资限制
"hotspotID": "147",
"hotspotDate": "2025-06-30",
"hotspotType": "SDN",
"hotspotTitle": "《出口管理条例》修订:商业管制清单新增条目"
},
"marketAccess": {-最热市场准入
"hotspotID": "111",
"hotspotDate": "2026-01-01",
"hotspotType": "337",
"hotspotTitle": "外国制造的半导体器件及其下游产品和组件"
}
}
```
## **最新风险信号**
请求地址:/rivalryIndexV2/LatestRisks
请求类型:GET
输入参数:
参数:无输入
请求头:携带token
输出结果:ApiResult
<LatestRisksVO>
## **全领域统计**
请求地址:/rivalryIndexV2/AllDomainCount
请求类型:GET
输入参数:
参数:无输入
请求头:携带token
输出结果:ApiResult
<List
<
AllDomainCountVO
>
>
## 领域打压遏制排行
请求地址:/rivalryIndexV2/DomainContainmentRanking
请求类型:GET
输入参数:
参数:
```
java
@ApiParam
(
value
=
"对我打压机构"
,
defaultValue
=
"对我打压机构"
)
@RequestParam
(
value
=
"ContainmentOrg"
)
String
ContainmentOrg
,
@ApiParam
(
value
=
"领域"
,
defaultValue
=
""
)
//传空值为查询全部领域
@RequestParam
(
value
=
"Domains"
,
required
=
false
)
String
Domain
```
请求头:携带token
输出结果:ApiResult
<List
<
DomainContainmentRankingVO
>
>
## 美对华制裁措施数量趋势
请求地址:/rivalryIndexV2/DomainContainmentTrend
请求类型:GET
输入参数:
参数:required = false为非必传
```
java
@ApiParam
(
value
=
"日期"
,
defaultValue
=
"按月统计"
)
@RequestParam
(
value
=
"byYOrM"
)
String
byYOrM
```
请求头:携带token
输出结果:ApiResult
<List
<
DomainContainmentTrendVO
>
>
## 领域打压遏制时间线
请求地址:/rivalryIndexV2/DomainContainmentTimeline
请求类型:GET
输入参数:
参数:required = false为非必传
```
JAVA
//传空值为查询全部领域
@ApiParam(value = "领域", defaultValue = "1")
@RequestParam(value = "domain",required = false) String domain
```
请求头:携带token
输出结果: ApiResult
<List
<
DomainContainmentTimelineVO
>
>
## 中美科技博弈分析
请求地址:/rivalryIndexV2/TechnologyGameAnalysis
请求类型:GET
输入参数:
参数:required = false为非必传
```
java
//传空值为查询全部领域
@ApiParam
(
value
=
"领域"
,
defaultValue
=
"1"
)
@RequestParam
(
value
=
"domain"
,
required
=
false
)
String
domain
```
输出结果:ApiResult
<List
<
TechnologyGameAnalysisVO
>
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论