Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
05424435
提交
05424435
authored
1月 20, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
b87b7a63
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
162 行增加
和
85 行删除
+162
-85
App.vue
src/App.vue
+51
-3
tool-item-icon1.png
src/assets/icons/tool-item-icon1.png
+0
-0
tool-item-icon2.png
src/assets/icons/tool-item-icon2.png
+0
-0
tool-item-icon3.png
src/assets/icons/tool-item-icon3.png
+0
-0
tool-item-icon4.png
src/assets/icons/tool-item-icon4.png
+0
-0
index.vue
src/views/ZMOverView/components/newRisk/index.vue
+111
-82
没有找到文件。
src/App.vue
浏览文件 @
05424435
...
@@ -17,7 +17,8 @@
...
@@ -17,7 +17,8 @@
@
mouseleave=
"handleShowMenu(index, false)"
@
mouseleave=
"handleShowMenu(index, false)"
>
>
<div
class=
"text"
:class=
"
{ textActive: homeActiveTitleIndex === index }">
<div
class=
"text"
:class=
"
{ textActive: homeActiveTitleIndex === index }">
{{
item
.
name
}}
</div>
{{
item
.
name
}}
</div>
<div
class=
"bottom-line"
v-if=
"homeActiveTitleIndex === index"
></div>
<div
class=
"bottom-line"
v-if=
"homeActiveTitleIndex === index"
></div>
</div>
</div>
</div>
</div>
...
@@ -95,12 +96,27 @@
...
@@ -95,12 +96,27 @@
</div>
</div>
</div>
</div>
<div
class=
"ai-btn"
@
click=
"openAiBox"
>
<div
class=
"tool-box"
aria-disabled=
"true"
>
<div
class=
"tool-item"
>
<img
src=
"@/assets/icons/tool-item-icon1.png"
alt=
""
/>
</div>
<div
class=
"tool-item"
>
<img
src=
"@/assets/icons/tool-item-icon2.png"
alt=
""
/>
</div>
<div
class=
"tool-item"
>
<img
src=
"@/assets/icons/tool-item-icon3.png"
alt=
""
/>
</div>
<div
class=
"tool-item"
>
<img
src=
"@/assets/icons/tool-item-icon4.png"
alt=
""
/>
</div>
</div>
<!--
<div
class=
"ai-btn"
@
click=
"openAiBox"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/ai-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/ai-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"text"
>
智能问答
</div>
<div
class=
"text"
>
智能问答
</div>
</div>
</div>
-->
<div
class=
"ai-dialog"
v-if=
"isShowAiBox"
>
<div
class=
"ai-dialog"
v-if=
"isShowAiBox"
>
<AiBox
@
close=
"closeAiBox"
/>
<AiBox
@
close=
"closeAiBox"
/>
...
@@ -681,6 +697,33 @@ body {
...
@@ -681,6 +697,33 @@ body {
}
}
}
}
.tool-box
{
position
:
absolute
;
top
:
400px
;
right
:
28px
;
top
:
681px
;
width
:
62px
;
height
:
217px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
255
,
255
,
255
,
1
);
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
0
.65
);
box-sizing
:
border-box
;
padding
:
24px
18px
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
.tool-item
{
width
:
24px
;
height
:
24px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
}
.ai-btn
{
.ai-btn
{
position
:
absolute
;
position
:
absolute
;
bottom
:
240px
;
bottom
:
240px
;
...
@@ -749,4 +792,9 @@ body {
...
@@ -749,4 +792,9 @@ body {
pointer-events
:
none
;
pointer-events
:
none
;
}
}
.tool-box
[
aria-disabled
=
"true"
]
{
opacity
:
0
.3
;
cursor
:
not
-
allowed
;
pointer-events
:
none
;
}
</
style
>
</
style
>
src/assets/icons/tool-item-icon1.png
0 → 100644
浏览文件 @
05424435
2.0 KB
src/assets/icons/tool-item-icon2.png
0 → 100644
浏览文件 @
05424435
2.7 KB
src/assets/icons/tool-item-icon3.png
0 → 100644
浏览文件 @
05424435
2.2 KB
src/assets/icons/tool-item-icon4.png
0 → 100644
浏览文件 @
05424435
2.5 KB
src/views/ZMOverView/components/newRisk/index.vue
浏览文件 @
05424435
...
@@ -3,10 +3,15 @@
...
@@ -3,10 +3,15 @@
<div
class=
"content-wrapper"
>
<div
class=
"content-wrapper"
>
<div
class=
"policy-monitoring"
>
<div
class=
"policy-monitoring"
>
<div
class=
"header"
>
<div
class=
"header"
>
<div
class=
"section"
v-for=
"(section, index) in sectionTab"
:key=
"index"
:style=
"
{
<div
width: sections[index].waveBall.length === 2 ? '350px' : '503px',
class=
"section"
background: section.background
v-for=
"(section, index) in sectionTab"
}">
:key=
"index"
:style=
"
{
width: sections[index].waveBall.length === 2 ? '350px' : '503px',
background: section.background
}"
>
<img
class=
"section-title"
:src=
"section.title"
/>
<img
class=
"section-title"
:src=
"section.title"
/>
<div
class=
"stats"
>
<div
class=
"stats"
>
<div
v-for=
"value in sections[index].waveBall"
@
click=
"highLight(value.type)"
>
<div
v-for=
"value in sections[index].waveBall"
@
click=
"highLight(value.type)"
>
...
@@ -19,7 +24,10 @@
...
@@ -19,7 +24,10 @@
</div>
</div>
<div
class=
"bottm-box"
:style=
"sections[index].waveBall.length === 2 ? 'width: 350px' : 'width:503px'"
>
<div
class=
"bottm-box"
:style=
"sections[index].waveBall.length === 2 ? 'width: 350px' : 'width:503px'"
>
<img
src=
"./icon/title-icon-1.png"
/>
<img
src=
"./icon/title-icon-1.png"
/>
<div
class=
"bottm-box-text"
:style=
"sections[index].waveBall.length === 2 ? 'width: 225px' : 'width:378px'"
>
<div
class=
"bottm-box-text"
:style=
"sections[index].waveBall.length === 2 ? 'width: 225px' : 'width:378px'"
>
{{
sections
[
index
].
title
}}
{{
sections
[
index
].
title
}}
</div>
</div>
<div
style=
"width: 50px; color: #ffffff"
>
<div
style=
"width: 50px; color: #ffffff"
>
...
@@ -34,20 +42,30 @@
...
@@ -34,20 +42,30 @@
<div>
风险信号
</div>
<div>
风险信号
</div>
<div
class=
"num"
>
{{
riskTotal
}}
</div>
<div
class=
"num"
>
{{
riskTotal
}}
</div>
<div
class=
"manage-btn"
@
click=
"handleToRiskManage"
>
<div
class=
"manage-btn"
@
click=
"handleToRiskManage"
>
风险信号管理 >
</div>
风险信号管理 >
</div>
</div>
</div>
<div
style=
"display: flex"
>
<div
style=
"display: flex"
>
<!-- 风险信号列表 -->
<!-- 风险信号列表 -->
<div
class=
"risk-signals"
ref=
"riskSignalsRef"
>
<div
class=
"risk-signals"
ref=
"riskSignalsRef"
>
<div
class=
"risk-signals-item"
v-for=
"(item, index) in warningList"
:key=
"index"
<div
@
click=
"handleClickToDetailO(item)"
@
mouseenter=
"onMouseEnter(item.signalId)"
@
mouseleave=
"onMouseLeave"
class=
"risk-signals-item"
:class=
"['risk-signals-item',
{ 'risk-signals-item-hightLight': item.eventType === highlightedEventType }]">
v-for=
"(item, index) in warningList"
<div
class=
"item-left"
:class=
"
{
:key=
"index"
itemLeftStatus1: item.signalLevel === '特别重大',
@
click=
"handleClickToDetailO(item)"
itemLeftStatus2: item.signalLevel === '重大风险'
@
mouseenter=
"onMouseEnter(item.signalId)"
}">
@
mouseleave=
"onMouseLeave"
:class=
"[
'risk-signals-item',
{ 'risk-signals-item-hightLight': item.eventType === highlightedEventType }
]"
>
<div
class=
"item-left"
:class=
"
{
itemLeftStatus1: item.signalLevel === '特别重大',
itemLeftStatus2: item.signalLevel === '重大风险'
}"
>
{{
item
.
signalLevel
?
item
.
signalLevel
:
"一般风险"
}}
{{
item
.
signalLevel
?
item
.
signalLevel
:
"一般风险"
}}
</div>
</div>
<div
class=
"item-right"
>
<div
class=
"item-right"
>
...
@@ -69,8 +87,15 @@
...
@@ -69,8 +87,15 @@
<img
src=
"./icon/box1-right.png"
alt=
""
/>
<img
src=
"./icon/box1-right.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<el-carousel
ref=
"carouselRef"
style=
"height: 443px; width: 664px"
:autoplay=
"true"
:interval=
"30000"
<el-carousel
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
ref=
"carouselRef"
style=
"height: 443px; width: 664px"
:autoplay=
"true"
:interval=
"30000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel-item
v-for=
"(News, NewsIndex) in filteredHotNewsList"
:key=
"NewsIndex"
>
<el-carousel-item
v-for=
"(News, NewsIndex) in filteredHotNewsList"
:key=
"NewsIndex"
>
<div
class=
"carousel-item"
@
click=
"toDetaile(News.hotspotID, News.hotspotType)"
>
<div
class=
"carousel-item"
@
click=
"toDetaile(News.hotspotID, News.hotspotType)"
>
<div
class=
"carousel-title"
>
<div
class=
"carousel-title"
>
...
@@ -82,9 +107,14 @@
...
@@ -82,9 +107,14 @@
{{
News
.
hotspotTag
}}
{{
News
.
hotspotTag
}}
</div>
</div>
</div>
</div>
<img
:src=
"News.hotspotPicture?News.hotspotPicture:DefaultOrgIcon"
style=
"width: 96px; height: 96px"
/>
<img
:src=
"News.hotspotPicture ? News.hotspotPicture : DefaultOrgIcon"
style=
"width: 96px; height: 96px"
/>
</div>
</div>
<div
style=
"/* 矩形 351 */ width: 664px; height: 1px; background: rgba(234, 236, 238, 1)"
></div>
<div
style=
"/* 矩形 351 */ width: 664px; height: 1px; background: rgba(234, 236, 238, 1)"
></div>
<div
class=
"news-carousel-content"
>
{{
News
.
hotspotDesc
}}
</div>
<div
class=
"news-carousel-content"
>
{{
News
.
hotspotDesc
}}
</div>
<div
class=
"carousel-bottom"
>
<div
class=
"carousel-bottom"
>
...
@@ -109,13 +139,13 @@
...
@@ -109,13 +139,13 @@
import
{
color
}
from
"echarts"
;
import
{
color
}
from
"echarts"
;
import
{
onMounted
,
ref
,
onUnmounted
,
computed
}
from
"vue"
;
import
{
onMounted
,
ref
,
onUnmounted
,
computed
}
from
"vue"
;
import
WaveBall
from
"./WaveBall.vue"
;
import
WaveBall
from
"./WaveBall.vue"
;
import
{
getLatestRiskUpdates
,
getLatestRisks
}
from
'@/api/zmOverview/risk/index.js'
import
{
getLatestRiskUpdates
,
getLatestRisks
}
from
"@/api/zmOverview/risk/index.js"
;
import
router
from
"@/router/index"
;
import
router
from
"@/router/index"
;
import
icon1
from
'./icon/title-1.png'
import
icon1
from
"./icon/title-1.png"
;
import
icon2
from
'./icon/title-2.png'
import
icon2
from
"./icon/title-2.png"
;
import
icon3
from
'./icon/title-3.png'
import
icon3
from
"./icon/title-3.png"
;
import
icon4
from
'./icon/title-4.png'
import
icon4
from
"./icon/title-4.png"
;
import
DefaultOrgIcon
from
'@/assets/icons/default-icon2.png'
import
DefaultOrgIcon
from
"@/assets/icons/default-icon2.png"
;
const
sectionTab
=
[
const
sectionTab
=
[
{
{
textColor
:
"rgba(9, 88, 217, 1)"
,
textColor
:
"rgba(9, 88, 217, 1)"
,
...
@@ -161,7 +191,7 @@ const sections = ref([
...
@@ -161,7 +191,7 @@ const sections = ref([
change
:
"+3"
,
change
:
"+3"
,
unit
:
"项"
,
unit
:
"项"
,
title
:
"法案(提出)"
,
title
:
"法案(提出)"
,
type
:
'法案'
type
:
"法案"
},
},
{
{
percent
:
0
,
// 估算的百分比
percent
:
0
,
// 估算的百分比
...
@@ -169,7 +199,7 @@ const sections = ref([
...
@@ -169,7 +199,7 @@ const sections = ref([
change
:
"+2"
,
change
:
"+2"
,
unit
:
"个"
,
unit
:
"个"
,
title
:
"政令"
,
title
:
"政令"
,
type
:
'行政令'
type
:
"行政令"
}
}
]
]
},
},
...
@@ -183,7 +213,7 @@ const sections = ref([
...
@@ -183,7 +213,7 @@ const sections = ref([
change
:
"+1"
,
change
:
"+1"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"实体清单"
,
title
:
"实体清单"
,
type
:
'实体清单'
type
:
"实体清单"
},
},
{
{
percent
:
0
,
// 估算的百分比
percent
:
0
,
// 估算的百分比
...
@@ -191,7 +221,7 @@ const sections = ref([
...
@@ -191,7 +221,7 @@ const sections = ref([
change
:
"+1"
,
change
:
"+1"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"CCL"
,
title
:
"CCL"
,
type
:
'CCL'
type
:
"CCL"
}
}
]
]
},
},
...
@@ -205,7 +235,7 @@ const sections = ref([
...
@@ -205,7 +235,7 @@ const sections = ref([
change
:
"+1"
,
change
:
"+1"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"SDN"
,
title
:
"SDN"
,
type
:
'SDN'
type
:
"SDN"
},
},
{
{
percent
:
0
,
// 估算的百分比
percent
:
0
,
// 估算的百分比
...
@@ -213,7 +243,7 @@ const sections = ref([
...
@@ -213,7 +243,7 @@ const sections = ref([
change
:
"+1"
,
change
:
"+1"
,
unit
:
"家"
,
unit
:
"家"
,
title
:
"涉军企业"
,
title
:
"涉军企业"
,
type
:
'涉军企业'
type
:
"涉军企业"
}
}
]
]
},
},
...
@@ -227,7 +257,7 @@ const sections = ref([
...
@@ -227,7 +257,7 @@ const sections = ref([
change
:
"+1"
,
change
:
"+1"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"337调查"
,
title
:
"337调查"
,
type
:
'337调查'
type
:
"337调查"
},
},
{
{
percent
:
0
,
// 估算的百分比
percent
:
0
,
// 估算的百分比
...
@@ -235,7 +265,7 @@ const sections = ref([
...
@@ -235,7 +265,7 @@ const sections = ref([
change
:
"无新增"
,
change
:
"无新增"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"230调查"
,
title
:
"230调查"
,
type
:
'230调查'
type
:
"230调查"
},
},
{
{
percent
:
0
,
// 估算的百分比
percent
:
0
,
// 估算的百分比
...
@@ -243,7 +273,7 @@ const sections = ref([
...
@@ -243,7 +273,7 @@ const sections = ref([
change
:
"无新增"
,
change
:
"无新增"
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"301调查"
,
title
:
"301调查"
,
type
:
'301调查'
type
:
"301调查"
}
}
]
]
}
}
...
@@ -253,12 +283,11 @@ const sections = ref([
...
@@ -253,12 +283,11 @@ const sections = ref([
const
handleGetLatestRiskUpdates
=
async
()
=>
{
const
handleGetLatestRiskUpdates
=
async
()
=>
{
try
{
try
{
const
params
=
{
const
params
=
{
currentDate
:
'本周'
currentDate
:
"本周"
}
}
;
const
res
=
await
getLatestRiskUpdates
(
params
);
const
res
=
await
getLatestRiskUpdates
(
params
);
console
.
log
(
"最新风险动态统计"
,
res
);
console
.
log
(
"最新风险动态统计"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
sections
.
value
=
[
sections
.
value
=
[
{
{
title
:
res
.
data
.
policiesRegulations
.
hotspotTitle
,
title
:
res
.
data
.
policiesRegulations
.
hotspotTitle
,
...
@@ -270,7 +299,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -270,7 +299,7 @@ const handleGetLatestRiskUpdates = async () => {
change
:
res
.
data
.
bill
.
dailyIncrement
,
change
:
res
.
data
.
bill
.
dailyIncrement
,
unit
:
"项"
,
unit
:
"项"
,
title
:
"法案(提出)"
,
title
:
"法案(提出)"
,
type
:
'法案'
type
:
"法案"
},
},
{
{
percent
:
20
,
// 估算的百分比
percent
:
20
,
// 估算的百分比
...
@@ -278,7 +307,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -278,7 +307,7 @@ const handleGetLatestRiskUpdates = async () => {
change
:
res
.
data
.
administrativeOrder
.
dailyIncrement
,
change
:
res
.
data
.
administrativeOrder
.
dailyIncrement
,
unit
:
"个"
,
unit
:
"个"
,
title
:
"政令"
,
title
:
"政令"
,
type
:
'行政令'
type
:
"行政令"
}
}
]
]
},
},
...
@@ -293,7 +322,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -293,7 +322,7 @@ const handleGetLatestRiskUpdates = async () => {
unit
:
"次"
,
unit
:
"次"
,
title
:
"实体清单"
,
title
:
"实体清单"
,
type
:
'实体清单'
type
:
"实体清单"
},
},
{
{
percent
:
20
,
// 估算的百分比
percent
:
20
,
// 估算的百分比
...
@@ -301,7 +330,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -301,7 +330,7 @@ const handleGetLatestRiskUpdates = async () => {
change
:
res
.
data
.
CCL
.
dailyIncrement
,
change
:
res
.
data
.
CCL
.
dailyIncrement
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"CCL"
,
title
:
"CCL"
,
type
:
'CCL'
type
:
"CCL"
}
}
]
]
},
},
...
@@ -315,7 +344,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -315,7 +344,7 @@ const handleGetLatestRiskUpdates = async () => {
change
:
res
.
data
.
SDN
.
dailyIncrement
,
change
:
res
.
data
.
SDN
.
dailyIncrement
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"SDN"
,
title
:
"SDN"
,
type
:
'SDN'
type
:
"SDN"
},
},
{
{
percent
:
5
,
// 估算的百分比
percent
:
5
,
// 估算的百分比
...
@@ -323,7 +352,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -323,7 +352,7 @@ const handleGetLatestRiskUpdates = async () => {
change
:
res
.
data
.
militaryInvolvement
.
dailyIncrement
,
change
:
res
.
data
.
militaryInvolvement
.
dailyIncrement
,
unit
:
"家"
,
unit
:
"家"
,
title
:
"涉军企业"
,
title
:
"涉军企业"
,
type
:
'涉军企业'
type
:
"涉军企业"
}
}
]
]
},
},
...
@@ -333,32 +362,32 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -333,32 +362,32 @@ const handleGetLatestRiskUpdates = async () => {
waveBall
:
[
waveBall
:
[
{
{
percent
:
3
,
// 估算的百分比
percent
:
3
,
// 估算的百分比
count
:
res
.
data
[
'337Survey'
].
total
,
count
:
res
.
data
[
"337Survey"
].
total
,
change
:
res
.
data
[
'337Survey'
].
dailyIncrement
,
change
:
res
.
data
[
"337Survey"
].
dailyIncrement
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"337调查"
,
title
:
"337调查"
,
type
:
'337调查'
type
:
"337调查"
},
},
{
{
percent
:
3
,
// 估算的百分比
percent
:
3
,
// 估算的百分比
count
:
res
.
data
[
'232Survey'
].
total
,
count
:
res
.
data
[
"232Survey"
].
total
,
change
:
res
.
data
[
'232Survey'
].
dailyIncrement
,
change
:
res
.
data
[
"232Survey"
].
dailyIncrement
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"230调查"
,
title
:
"230调查"
,
type
:
'230调查'
type
:
"230调查"
},
},
{
{
percent
:
3
,
// 估算的百分比
percent
:
3
,
// 估算的百分比
count
:
res
.
data
[
'301Survey'
].
total
,
count
:
res
.
data
[
"301Survey"
].
total
,
change
:
res
.
data
[
'301Survey'
].
dailyIncrement
,
change
:
res
.
data
[
"301Survey"
].
dailyIncrement
,
unit
:
"次"
,
unit
:
"次"
,
title
:
"301调查"
,
title
:
"301调查"
,
type
:
'301调查'
type
:
"301调查"
}
}
]
]
}
}
]
]
;
console
.
log
(
sections
.
value
,
'sections.value'
)
console
.
log
(
sections
.
value
,
"sections.value"
);
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"获取最新风险动态统计error"
,
error
);
console
.
error
(
"获取最新风险动态统计error"
,
error
);
...
@@ -367,7 +396,7 @@ const handleGetLatestRiskUpdates = async () => {
...
@@ -367,7 +396,7 @@ const handleGetLatestRiskUpdates = async () => {
// 风险信号
// 风险信号
const
warningList
=
ref
([]);
const
warningList
=
ref
([]);
const
riskTotal
=
ref
(
0
)
const
riskTotal
=
ref
(
0
)
;
const
hotNewsList
=
ref
([
const
hotNewsList
=
ref
([
{
{
title
:
"美国白宫发布关于进一步延长TikTok执法宽限期的行政令"
,
title
:
"美国白宫发布关于进一步延长TikTok执法宽限期的行政令"
,
...
@@ -376,7 +405,7 @@ const hotNewsList = ref([
...
@@ -376,7 +405,7 @@ const hotNewsList = ref([
"2025年1月20日第14166号行政命令第2(a)条(《保护美国免受外国对抗者控制应用法案》对TikTok的适用)规定的执行延迟,并由2025年4月4日第14258号行政命令(延长TikTok执法延迟)和2025年6月19日第14310号行政命令(进一步延长TikTok执法延迟)所延长,进一步延长至2025年12月16日。在此期间,司法部不得采取任何行动执行《保护美国人免受外国对抗者控制应用法案》(以下简称“法案”)(公共法118-50,H部),也不得对任何违反该法案的实体处以任何处罚,包括分发、维护、更新(或促成分发,维护或更新任何外国对手控制的应用,如本法所定义。鉴于本指示,即使在上述规定期限届满后,司法部也应继续与相关部门合作,以确保美国国家安全和公民隐私权利不受威胁。"
,
"2025年1月20日第14166号行政命令第2(a)条(《保护美国免受外国对抗者控制应用法案》对TikTok的适用)规定的执行延迟,并由2025年4月4日第14258号行政命令(延长TikTok执法延迟)和2025年6月19日第14310号行政命令(进一步延长TikTok执法延迟)所延长,进一步延长至2025年12月16日。在此期间,司法部不得采取任何行动执行《保护美国人免受外国对抗者控制应用法案》(以下简称“法案”)(公共法118-50,H部),也不得对任何违反该法案的实体处以任何处罚,包括分发、维护、更新(或促成分发,维护或更新任何外国对手控制的应用,如本法所定义。鉴于本指示,即使在上述规定期限届满后,司法部也应继续与相关部门合作,以确保美国国家安全和公民隐私权利不受威胁。"
,
date
:
"2025年9月16日"
,
date
:
"2025年9月16日"
,
source
:
"美国白宫·总统行政令"
,
source
:
"美国白宫·总统行政令"
,
tags
:
[
'人工智能'
,
'通信网络'
]
tags
:
[
"人工智能"
,
"通信网络"
]
},
},
{
{
title
:
"美国白宫发布关于进一步延长TikTok执法宽限期的行政令"
,
title
:
"美国白宫发布关于进一步延长TikTok执法宽限期的行政令"
,
...
@@ -385,7 +414,7 @@ const hotNewsList = ref([
...
@@ -385,7 +414,7 @@ const hotNewsList = ref([
"2025年1月20日第14166号行政命令第2(a)条(《保护美国免受外国对抗者控制应用法案》对TikTok的适用)规定的执行延迟,并由2025年4月4日第14258号行政命令(延长TikTok执法延迟)和2025年6月19日第14310号行政命令(进一步延长TikTok执法延迟)所延长,进一步延长至2025年12月16日。在此期间,司法部不得采取任何行动执行《保护美国人免受外国对抗者控制应用法案》(以下简称“法案”)(公共法118-50,H部),也不得对任何违反该法案的实体处以任何处罚,包括分发、维护、更新(或促成分发,维护或更新任何外国对手控制的应用,如本法所定义。鉴于本指示,即使在上述规定期限届满后,司法部也应继续与相关部门合作,以确保美国国家安全和公民隐私权利不受威胁。"
,
"2025年1月20日第14166号行政命令第2(a)条(《保护美国免受外国对抗者控制应用法案》对TikTok的适用)规定的执行延迟,并由2025年4月4日第14258号行政命令(延长TikTok执法延迟)和2025年6月19日第14310号行政命令(进一步延长TikTok执法延迟)所延长,进一步延长至2025年12月16日。在此期间,司法部不得采取任何行动执行《保护美国人免受外国对抗者控制应用法案》(以下简称“法案”)(公共法118-50,H部),也不得对任何违反该法案的实体处以任何处罚,包括分发、维护、更新(或促成分发,维护或更新任何外国对手控制的应用,如本法所定义。鉴于本指示,即使在上述规定期限届满后,司法部也应继续与相关部门合作,以确保美国国家安全和公民隐私权利不受威胁。"
,
date
:
"2025年9月16日"
,
date
:
"2025年9月16日"
,
source
:
"美国白宫·总统行政令"
,
source
:
"美国白宫·总统行政令"
,
tags
:
[
'人工智能'
,
'通信网络'
]
tags
:
[
"人工智能"
,
"通信网络"
]
}
}
]);
]);
...
@@ -395,10 +424,10 @@ const handleGetLatestRisks = async () => {
...
@@ -395,10 +424,10 @@ const handleGetLatestRisks = async () => {
const
res
=
await
getLatestRisks
();
const
res
=
await
getLatestRisks
();
console
.
log
(
"最新风险信号"
,
res
);
console
.
log
(
"最新风险信号"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
warningList
.
value
=
res
.
data
.
riskVOS
warningList
.
value
=
res
.
data
.
riskVOS
;
hotNewsList
.
value
=
res
.
data
.
hotspotVOS
hotNewsList
.
value
=
res
.
data
.
hotspotVOS
;
riskTotal
.
value
=
res
.
data
.
riskCount
riskTotal
.
value
=
res
.
data
.
riskCount
;
console
.
log
(
hotNewsList
.
value
,
'hotNewsList.value'
)
console
.
log
(
hotNewsList
.
value
,
"hotNewsList.value"
);
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"获取最新风险信号error"
,
error
);
console
.
error
(
"获取最新风险信号error"
,
error
);
...
@@ -439,7 +468,7 @@ const handleClickToDetailO = item => {
...
@@ -439,7 +468,7 @@ const handleClickToDetailO = item => {
const
currentHoveredSignalId
=
ref
(
null
);
const
currentHoveredSignalId
=
ref
(
null
);
const
onMouseEnter
=
(
signalId
)
=>
{
const
onMouseEnter
=
signalId
=>
{
currentHoveredSignalId
.
value
=
signalId
;
currentHoveredSignalId
.
value
=
signalId
;
};
};
...
@@ -458,12 +487,12 @@ const handleToRiskManage = () => {
...
@@ -458,12 +487,12 @@ const handleToRiskManage = () => {
// router.push('/riskSignalManage');
// router.push('/riskSignalManage');
const
route
=
router
.
resolve
(
"/riskSignal"
);
const
route
=
router
.
resolve
(
"/riskSignal"
);
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
console
.
log
(
'跳转到风险信号管理'
);
console
.
log
(
"跳转到风险信号管理"
);
};
};
const
highlightedEventType
=
ref
(
''
)
const
highlightedEventType
=
ref
(
""
);
const
highLight
=
(
title
)
=>
{
const
highLight
=
title
=>
{
console
.
log
(
title
)
console
.
log
(
title
)
;
// 如果再次点击同一个,取消高亮
// 如果再次点击同一个,取消高亮
if
(
highlightedEventType
.
value
===
title
)
{
if
(
highlightedEventType
.
value
===
title
)
{
highlightedEventType
.
value
=
null
;
highlightedEventType
.
value
=
null
;
...
@@ -472,13 +501,13 @@ const highLight = (title) => {
...
@@ -472,13 +501,13 @@ const highLight = (title) => {
}
}
};
};
const
toDetaile
=
(
id
,
type
)
=>
{
const
toDetaile
=
(
id
,
type
)
=>
{
console
.
log
(
id
,
type
)
console
.
log
(
id
,
type
)
;
if
(
type
===
'法案'
)
{
if
(
type
===
"法案"
)
{
let
path
=
"/billLayout/bill/introduction"
;
let
path
=
"/billLayout/bill/introduction"
;
let
query
=
{
billId
:
id
};
let
query
=
{
billId
:
id
};
const
{
href
}
=
router
.
resolve
({
path
,
query
});
const
{
href
}
=
router
.
resolve
({
path
,
query
});
window
.
open
(
href
,
"_blank"
);
window
.
open
(
href
,
"_blank"
);
}
else
if
(
type
===
'政令'
)
{
}
else
if
(
type
===
"政令"
)
{
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/decreeLayout/overview/introduction"
,
path
:
"/decreeLayout/overview/introduction"
,
query
:
{
query
:
{
...
@@ -486,7 +515,7 @@ const toDetaile = (id, type) => {
...
@@ -486,7 +515,7 @@ const toDetaile = (id, type) => {
}
}
});
});
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
}
else
if
(
type
===
'实体清单'
||
type
===
'CCL'
)
{
}
else
if
(
type
===
"实体清单"
||
type
===
"CCL"
)
{
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
...
@@ -494,7 +523,7 @@ const toDetaile = (id, type) => {
...
@@ -494,7 +523,7 @@ const toDetaile = (id, type) => {
}
}
});
});
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
route
.
href
,
"_blank"
);
}
else
if
(
type
===
'337'
)
{
}
else
if
(
type
===
"337"
)
{
const
curRoute
=
router
.
resolve
({
const
curRoute
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
query
:
{
...
@@ -503,7 +532,7 @@ const toDetaile = (id, type) => {
...
@@ -503,7 +532,7 @@ const toDetaile = (id, type) => {
}
}
});
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
else
if
(
type
===
'203'
)
{
}
else
if
(
type
===
"203"
)
{
const
curRoute
=
router
.
resolve
({
const
curRoute
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
query
:
{
...
@@ -512,7 +541,7 @@ const toDetaile = (id, type) => {
...
@@ -512,7 +541,7 @@ const toDetaile = (id, type) => {
}
}
});
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
else
if
(
type
===
'301'
)
{
}
else
if
(
type
===
"301"
)
{
const
curRoute
=
router
.
resolve
({
const
curRoute
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
query
:
{
...
@@ -523,7 +552,7 @@ const toDetaile = (id, type) => {
...
@@ -523,7 +552,7 @@ const toDetaile = (id, type) => {
window
.
open
(
curRoute
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
}
//type=涉军企业和SDN未对接
//type=涉军企业和SDN未对接
}
}
;
const
handleSwithCurNews
=
name
=>
{
const
handleSwithCurNews
=
name
=>
{
if
(
name
===
"left"
)
{
if
(
name
===
"left"
)
{
carouselRef
.
value
.
prev
();
carouselRef
.
value
.
prev
();
...
@@ -536,19 +565,17 @@ const riskSignalsRef = ref(null); // 引用risk-signals容器
...
@@ -536,19 +565,17 @@ const riskSignalsRef = ref(null); // 引用risk-signals容器
let
intervalId
;
let
intervalId
;
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
await
handleGetLatestRiskUpdates
();
await
handleGetLatestRiskUpdates
()
await
handleGetLatestRisks
();
await
handleGetLatestRisks
()
const
scrollInterval
=
2000
;
// 每隔2秒滚动一次
const
scrollInterval
=
2000
;
// 每隔2秒滚动一次
let
currentScroll
=
0
;
let
currentScroll
=
0
;
intervalId
=
setInterval
(()
=>
{
intervalId
=
setInterval
(()
=>
{
if
(
riskSignalsRef
.
value
)
{
if
(
riskSignalsRef
.
value
)
{
const
scrollHeight
=
riskSignalsRef
.
value
.
scrollHeight
;
// 内容总高度
const
scrollHeight
=
riskSignalsRef
.
value
.
scrollHeight
;
// 内容总高度
const
clientHeight
=
riskSignalsRef
.
value
.
clientHeight
;
// 可视区域高度
const
clientHeight
=
riskSignalsRef
.
value
.
clientHeight
;
// 可视区域高度
console
.
log
(
scrollHeight
,
clientHeight
)
console
.
log
(
scrollHeight
,
clientHeight
)
;
// 如果滚动到底,则回到顶部
// 如果滚动到底,则回到顶部
if
(
currentScroll
+
clientHeight
>=
scrollHeight
)
{
if
(
currentScroll
+
clientHeight
>=
scrollHeight
)
{
currentScroll
=
0
;
currentScroll
=
0
;
...
@@ -593,7 +620,7 @@ onUnmounted(() => {
...
@@ -593,7 +620,7 @@ onUnmounted(() => {
height
:
568px
;
height
:
568px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
255
,
255
,
255
,
1
);
border
:
1px
solid
rgba
(
255
,
255
,
255
,
1
);
border-radius
:
var
(
---
10
,
10px
)
;
border-radius
:
10px
;
/* 业务系统/模块阴影 */
/* 业务系统/模块阴影 */
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
0
.65
);
background
:
rgba
(
255
,
255
,
255
,
0
.65
);
...
@@ -829,6 +856,10 @@ onUnmounted(() => {
...
@@ -829,6 +856,10 @@ onUnmounted(() => {
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
&
:hover
{
color
:
var
(
--
color-main-active
);
font-weight
:
bold
;
}
}
}
.time
{
.time
{
...
@@ -1096,8 +1127,6 @@ onUnmounted(() => {
...
@@ -1096,8 +1127,6 @@ onUnmounted(() => {
}
}
}
}
}
}
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论