Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
2dda3480
提交
2dda3480
authored
1月 07, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
c5add0d2
显示空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
637 行增加
和
461 行删除
+637
-461
App.vue
src/App.vue
+24
-55
home-header-icon1.png
src/assets/icons/home-header-icon1.png
+0
-0
home-header-icon2.png
src/assets/icons/home-header-icon2.png
+0
-0
home-header-icon3.png
src/assets/icons/home-header-icon3.png
+0
-0
home-header-icon4.png
src/assets/icons/home-header-icon4.png
+0
-0
home-header-icon5.png
src/assets/icons/home-header-icon5.png
+0
-0
headerInfo.vue
src/components/headerInfo.vue
+51
-0
headerMenu.vue
src/components/headerMenu.vue
+108
-0
index.vue
src/views/bill/billHome/index.vue
+24
-37
index.vue
src/views/coopRestriction/index.vue
+9
-24
index.vue
src/views/decree/decreeHome/index.vue
+27
-34
index.vue
src/views/exportControl/index.vue
+209
-83
index.vue
src/views/finance/index.vue
+11
-25
index.vue
src/views/innovationSubject/index.vue
+10
-26
index.vue
...views/marketAccessRestrictions/marketAccessHome/index.vue
+10
-26
index.vue
src/views/ruleRestriction/index.vue
+9
-25
index.vue
src/views/scientificFunding/index.vue
+9
-25
index.vue
src/views/technologyFigures/index.vue
+10
-28
index.vue
src/views/thinkTank/index.vue
+126
-73
没有找到文件。
src/App.vue
浏览文件 @
2dda3480
<
template
>
<div
id=
"app"
>
<el-container
class=
"wrapper"
>
<el-header>
<nav
class=
"navbar"
>
<div
class=
"wrapper"
>
<div
class=
"navbar"
>
<div
class=
"nav-brand"
>
<div
class=
"brand-icon"
>
<img
src=
"@/assets/icons/header-logo.png"
alt=
""
/>
...
...
@@ -20,12 +19,10 @@
</div>
<span
class=
"user"
>
管理员
</span>
</div>
</nav>
</el-header>
<el-main
class=
"main-container"
>
</div>
<div
class=
"main-container"
>
<router-view
/>
</
el-main
>
</
div
>
<div
class=
"ai-btn"
@
click=
"openAiBox"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/ai-icon.png"
alt=
""
/>
...
...
@@ -36,7 +33,7 @@
<div
class=
"ai-dialog"
v-if=
"isShowAiBox"
>
<AiBox
@
close=
"closeAiBox"
/>
</div>
</
el-container
>
</
div
>
</div>
</
template
>
...
...
@@ -46,7 +43,7 @@ import { Monitor, House, User, Location, Document, Bell, Message, ArrowDown } fr
import
{
useRouter
}
from
"vue-router"
;
import
Breadcrumb
from
"@/components/BreadCrumb/index.vue"
;
import
AiBox
from
"./components/AiBox.vue"
;
import
{
getPersonType
}
from
'@/api/common/index'
import
{
getPersonType
}
from
"@/api/common/index"
;
// import { useDraggable } from "@vueuse/core";
const
router
=
useRouter
();
...
...
@@ -86,29 +83,25 @@ const handleHomeCommand = command => {
router
.
push
(
command
);
};
const
personTypeList
=
ref
([])
const
personTypeList
=
ref
([])
;
// 获取人物类别
const
handleGetPersonType
=
async
()
=>
{
const
handleGetPersonType
=
async
()
=>
{
try
{
const
res
=
await
getPersonType
()
console
.
log
(
'res'
,
res
);
if
(
res
.
code
===
200
)
{
personTypeList
.
value
=
res
.
data
const
res
=
await
getPersonType
()
;
console
.
log
(
"res"
,
res
);
if
(
res
.
code
===
200
)
{
personTypeList
.
value
=
res
.
data
;
}
else
{
personTypeList
.
value
=
[]
}
window
.
sessionStorage
.
setItem
(
'personTypeList'
,
JSON
.
stringify
(
personTypeList
.
value
))
}
catch
(
error
)
{
personTypeList
.
value
=
[];
}
}
window
.
sessionStorage
.
setItem
(
"personTypeList"
,
JSON
.
stringify
(
personTypeList
.
value
));
}
catch
(
error
)
{}
};
onMounted
(()
=>
{
handleGetPersonType
()
})
handleGetPersonType
();
});
</
script
>
<
style
>
...
...
@@ -141,7 +134,7 @@ body {
text-align
:
justify
;
}
.el-popper
[
data-popper-placement
^=
top
]>
.el-popper__arrow
:before
{
.el-popper
[
data-popper-placement
^=
"top"
]
>
.el-popper__arrow
:before
{
display
:
none
;
}
</
style
>
...
...
@@ -164,20 +157,19 @@ body {
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
background
:
white
;
color
:
#333
;
height
:
100%
;
background
:
#fff
;
color
:
rgba
(
10
,
18
,
30
,
1
);
border-bottom
:
1px
solid
#e5e7eb
;
box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
0
.1
);
position
:
relative
;
box-sizing
:
border-box
;
height
:
96
px
;
height
:
72
px
;
}
.main-container
{
/* 移除宽度限制,让子页面自己控制布局 */
width
:
100%
;
height
:
984
px
;
height
:
1008
px
;
position
:
relative
;
}
...
...
@@ -191,7 +183,6 @@ body {
.brand-icon
{
width
:
48px
;
height
:
48px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -309,13 +300,6 @@ body {
.wrapper
{
position
:
relative
;
.target
{
// position: absolute;
// bottom: 20%;
// right: 46px;
z-index
:
9999
;
}
.ai-btn
{
position
:
absolute
;
bottom
:
240px
;
...
...
@@ -344,7 +328,6 @@ body {
text-align
:
center
;
}
}
.ai-dialog
{
position
:
absolute
;
right
:
100px
;
...
...
@@ -353,18 +336,4 @@ body {
}
}
.el-header
{
padding
:
0
;
height
:
96px
;
position
:
relative
;
z-index
:
1
;
}
.el-main
{
padding
:
0
;
height
:
calc
(
100vh
-
96px
);
overflow
:
hidden
;
overflow-y
:
auto
;
background-color
:
rgba
(
246
,
251
,
255
,
1
);
}
</
style
>
src/assets/icons/home-header-icon1.png
0 → 100644
浏览文件 @
2dda3480
1.3 KB
src/assets/icons/home-header-icon2.png
0 → 100644
浏览文件 @
2dda3480
1.7 KB
src/assets/icons/home-header-icon3.png
0 → 100644
浏览文件 @
2dda3480
1.5 KB
src/assets/icons/home-header-icon4.png
0 → 100644
浏览文件 @
2dda3480
1.6 KB
src/assets/icons/home-header-icon5.png
0 → 100644
浏览文件 @
2dda3480
1.4 KB
src/components/headerInfo.vue
0 → 100644
浏览文件 @
2dda3480
<
template
>
<div
class=
"info-wrapper"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
{{
curTitleName
}}
</div>
</div>
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
router
from
"@/router"
;
const
props
=
defineProps
({
curTitleName
:
{
type
:
String
,
required
:
true
}
});
// 返回首页
const
handleBackHome
=
()
=>
{
router
.
push
({
path
:
"/overview"
});
};
</
script
>
<
style
lang=
"scss"
scoped
>
.info-wrapper
{
height
:
64px
;
line-height
:
64px
;
display
:
flex
;
justify-content
:
flex-end
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
}
</
style
>
\ No newline at end of file
src/components/headerMenu.vue
0 → 100644
浏览文件 @
2dda3480
<
template
>
<div
class=
"menu-wrapper"
>
<div
class=
"menu-item"
>
<div
class=
"menu-item-icon"
>
<img
src=
"@/assets/icons/home-header-icon1.png"
alt=
""
/>
</div>
<div
class=
"menu-item-text"
>
{{
"首页"
}}
</div>
</div>
<div
class=
"menu-item"
>
<div
class=
"menu-item-icon1"
>
<img
src=
"@/assets/icons/home-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"menu-item-text"
>
{{
"国家"
}}
</div>
</div>
<div
class=
"menu-item"
>
<div
class=
"menu-item-icon2"
>
<img
src=
"@/assets/icons/home-header-icon3.png"
alt=
""
/>
</div>
<div
class=
"menu-item-text"
>
{{
"领域"
}}
</div>
</div>
<div
class=
"menu-item"
>
<div
class=
"menu-item-icon3"
>
<img
src=
"@/assets/icons/home-header-icon4.png"
alt=
""
/>
</div>
<div
class=
"menu-item-text"
>
{{
"要素"
}}
</div>
</div>
<div
class=
"menu-item"
>
<div
class=
"menu-item-icon4"
>
<img
src=
"@/assets/icons/home-header-icon5.png"
alt=
""
/>
</div>
<div
class=
"menu-item-text"
>
{{
"事件"
}}
</div>
</div>
</div>
</
template
>
<
style
lang=
"scss"
scoped
>
.menu-wrapper
{
width
:
644px
;
height
:
64px
;
display
:
flex
;
justify-content
:
space-between
;
.menu-item
{
display
:
flex
;
gap
:
11px
;
width
:
112px
;
height
:
64px
;
justify-content
:
center
;
align-items
:
center
;
.menu-item-icon
{
// margin-top: 2px;
width
:
22px
;
height
:
22px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.menu-item-icon1
{
// margin-top: 4px;
width
:
24px
;
height
:
24px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.menu-item-icon2
{
// margin-top: 4px;
width
:
24px
;
height
:
22px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.menu-item-icon3
{
// margin-top: 2px;
width
:
20px
;
height
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.menu-item-icon4
{
width
:
22px
;
height
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.menu-item-text
{
// margin-top: 16px;
height
:
32px
;
color
:
rgba
(
255
,
255
,
255
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-size
:
24px
;
font-weight
:
700
;
line-height
:
32px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
}
</
style
>
\ No newline at end of file
src/views/bill/billHome/index.vue
浏览文件 @
2dda3480
...
...
@@ -39,11 +39,12 @@
</div>
<div
class=
"home-box"
:class=
"
{ scrollHomeBox: isShow }" ref="containerRef">
<div
class=
"home-header"
v-show=
"!isShow"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
科技法案
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"科技法案"
></headerInfo>
</div>
</div>
<div
class=
"home-main"
>
<div
class=
"home-main-header"
v-show=
"!isShow"
>
...
...
@@ -198,12 +199,12 @@
<div
class=
"inner-box-title"
>
{{
bill
.
news
?.
newsTitle
}}
</div>
<div
class=
"inner-box-time"
>
{{
bill
.
news
?.
newsTime
.
replace
(
'T'
,
' '
)
}}
</div>
<div
class=
"inner-box-time"
>
{{
bill
.
news
?.
newsTime
.
replace
(
"T"
,
" "
)
}}
</div>
</div>
<div
class=
"inner-box-content"
>
{{
bill
.
news
?.
newsContent
}}
{{
bill
.
news
?.
newsContent
}}
</div>
</div>
</div>
...
...
@@ -223,7 +224,12 @@
</div>
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleClickToDetailO(item)"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleClickToDetailO(item)"
>
<div
class=
"item-left"
:class=
"
{
...
...
@@ -350,7 +356,6 @@
</el-select>
</div>
</div>
</div>
<div
...
...
@@ -755,7 +760,8 @@
import
{
onMounted
,
ref
,
computed
,
onUnmounted
,
nextTick
,
watch
}
from
"vue"
;
import
router
from
"@/router/index"
;
import
setChart
from
"@/utils/setChart"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
{
getBillIndustry
,
getHotBills
,
...
...
@@ -840,7 +846,7 @@ const formatMessageTime = timeStr => {
}
;
// 跳转人物主页
const
handleClcikToCharacter
=
async
(
id
)
=>
{
const
handleClcikToCharacter
=
async
id
=>
{
const
personTypeList
=
JSON
.
parse
(
window
.
sessionStorage
.
getItem
(
"personTypeList"
));
let
type
=
0
;
...
...
@@ -943,16 +949,12 @@ const curBill = ref({
// 查看详情
const
handleClickToDetail
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
value
.
billId
);
const
route
=
router
.
resolve
(
{
const
route
=
router
.
resolve
({
path
:
"/billLayout"
,
query
:
{
billId
:
curBill
.
value
.
billId
,
}
,
billId
:
curBill
.
value
.
billId
}
);
}
);
console
.
log
(
route
);
window
.
open
(
route
.
href
,
"_blank"
);
...
...
@@ -990,7 +992,6 @@ const handleToMoreNews = () => {
// 风险信号
const
warningList
=
ref
([]);
const
box7selectetedTime
=
ref
(
"2025"
);
const
box7YearList
=
ref
([
{
...
...
@@ -1848,25 +1849,11 @@ onUnmounted(() => {});
overflow
-
y
:
auto
;
.
home
-
header
{
height
:
64
px
;
color
:
#
fff
;
font
-
family
:
Microsoft
YaHei
;
font
-
size
:
20
px
;
font
-
weight
:
700
;
line
-
height
:
26
px
;
line
-
height
:
64
px
;
background
:
url
(
"./assets/images/header-bg.png"
);
box
-
sizing
:
border
-
box
;
padding
-
left
:
160
px
;
padding
:
0
160
px
;
display
:
flex
;
.
header
-
item
{
margin
:
0
3
px
;
}
.
back
-
item
{
cursor
:
pointer
;
&
:
hover
{
color
:
#
ccc
;
}
}
justify
-
content
:
space
-
between
;
}
.
home
-
main
{
width
:
1600
px
;
...
...
src/views/coopRestriction/index.vue
浏览文件 @
2dda3480
...
...
@@ -41,12 +41,11 @@
<!-- 面包屑 -->
<div
class=
"breadcrumb"
v-show=
"!isShow"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item"
>
合作限制
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"合作限制"
></headerInfo>
</div>
</div>
<!-- 主页面 -->
...
...
@@ -136,6 +135,8 @@
<
script
setup
>
import
{
ref
,
onMounted
,
nextTick
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
comTitle
from
"./common/comTitle.vue"
;
import
newData
from
"./components/dataNew/index.vue"
;
import
askPage
from
"./components/askPage/index.vue"
;
...
...
@@ -201,25 +202,9 @@ const handleBackHome = () => {
height
:
64px
;
background-image
:
url("./assets/images/bread-bg.png")
;
background-size
:
cover
;
padding
:
17px
0px
21px
0px
;
.breadcrumb-box
{
margin-left
:
160px
;
padding
:
0
160px
;
display
:
flex
;
// align-items: center;
.breadcrumb-item
{
font-size
:
20px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
30px
;
color
:
#fff
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#999
;
}
}
}
justify-content
:
space-between
;
}
.main-content
{
position
:
relative
;
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
2dda3480
...
...
@@ -2,7 +2,12 @@
<div
class=
"home-wrapper"
>
<div
class=
"search-header"
v-show=
"isShow"
>
<div
class=
"home-main-header-center"
>
<el-input
v-model=
"searchDecreeText"
@
keyup
.
enter=
"handleSearch"
style=
"width: 680px; height: 100%"
placeholder=
"搜索科技政令"
/>
<el-input
v-model=
"searchDecreeText"
@
keyup
.
enter=
"handleSearch"
style=
"width: 680px; height: 100%"
placeholder=
"搜索科技政令"
/>
<div
class=
"search"
>
<div
class=
"search-icon"
>
<img
src=
"./assets/images/search-icon.png"
alt=
""
/>
...
...
@@ -40,14 +45,20 @@
<div
class=
"home-main"
:class=
"
{ scrollHomeMain: isShow }" ref="containerRef">
<div
class=
"home-main-header"
>
<div
class=
"home-main-header-top"
v-show=
"!isShow"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
行政令
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"行政令"
></headerInfo>
</div>
</div>
<div
class=
"home-main-header-center"
v-show=
"!isShow"
>
<el-input
v-model=
"searchDecreeText"
@
keyup
.
enter=
"handleSearch"
style=
"width: 838px; height: 100%"
placeholder=
"搜索科技政令"
/>
<el-input
v-model=
"searchDecreeText"
@
keyup
.
enter=
"handleSearch"
style=
"width: 838px; height: 100%"
placeholder=
"搜索科技政令"
/>
<div
class=
"search"
>
<div
class=
"search-icon"
>
<img
src=
"./assets/images/search-icon.png"
alt=
""
/>
...
...
@@ -539,8 +550,9 @@
<
script
setup
>
import
{
onMounted
,
ref
,
computed
,
watch
}
from
"vue"
;
import
*
as
echarts
from
"echarts"
;
import
router
from
"@/router"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
{
getDepartmentList
,
getLatestDecree
,
...
...
@@ -763,7 +775,6 @@ const warningList = ref([
// postDate: "一天前",
// riskLevel: "特别重大"
// }
]);
const
handlegetDecreeRiskSignal
=
async
()
=>
{
try
{
...
...
@@ -1164,7 +1175,7 @@ const pubTime = ref([
{
id
:
"2023"
,
name
:
"2023年"
},
{
id
:
"2022"
,
name
:
"2022年"
},
{
id
:
"2021"
,
name
:
"2021年"
},
{
id
:
"2020"
,
name
:
"2020年"
}
,
{
id
:
"2020"
,
name
:
"2020年"
}
// { id: "更早时间", name: "更早时间" }
]);
const
activePubTime
=
ref
([
"2025"
]);
...
...
@@ -1213,7 +1224,7 @@ const handleGetDecreeOrderList = async () => {
return
{
id
:
item
.
id
,
time
:
item
.
postDate
,
title
:
item
.
proposeOrgName
+
': '
+
item
.
name
,
title
:
item
.
proposeOrgName
+
": "
+
item
.
name
,
desc
:
item
.
describe
,
img
:
item
.
orgImage
,
tagList
:
item
.
industryList
...
...
@@ -1274,18 +1285,17 @@ const handleSwithCurDecree = name => {
};
// 搜索
const
searchDecreeText
=
ref
(
''
)
const
searchDecreeText
=
ref
(
""
);
const
handleSearch
=
()
=>
{
const
curRoute
=
router
.
resolve
({
path
:
"/searchResults"
,
query
:
{
searchText
:
searchDecreeText
.
value
,
areaName
:
'政令'
areaName
:
"政令"
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
};
onMounted
(
async
()
=>
{
handleGetAreaList
();
...
...
@@ -1419,28 +1429,11 @@ onMounted(async () => {
.home-main-header-top
{
width
:
100%
;
height
:
64px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
64px
;
background
:
url("./assets/images/header-bg.png")
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
box-sizing
:
border-box
;
padding-left
:
160px
;
display
:
flex
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.home-main-header-center
{
margin-top
:
48px
;
...
...
src/views/exportControl/index.vue
浏览文件 @
2dda3480
...
...
@@ -38,11 +38,12 @@
</div>
</div>
<div
class=
"home-header"
v-show=
"!isShow"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
出口管制
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"出口管制"
></headerInfo>
</div>
</div>
<div
class=
"home-main"
ref=
"homeMainRef"
:class=
"
{ 'scroll-main': isShow }">
<div
class=
"home-main-header"
>
...
...
@@ -82,9 +83,17 @@
</div>
</div>
<div
class=
"home-main-header-footer-info"
>
<InfoCard
v-for=
"(item, index) in infoList"
:key=
"item.id"
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
:description=
"item.description"
:quantity=
"item.postCount"
unit=
"次"
:color=
"infoListColor[index]"
@
click=
"handleToEntityListNoId(item)"
/>
<InfoCard
v-for=
"(item, index) in infoList"
:key=
"item.id"
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
:description=
"item.description"
:quantity=
"item.postCount"
unit=
"次"
:color=
"infoListColor[index]"
@
click=
"handleToEntityListNoId(item)"
/>
</div>
</div>
...
...
@@ -110,8 +119,15 @@
<img
src=
"./assets/images/box1-right.png"
alt=
""
/>
</div>
</div>
<el-carousel
ref=
"carouselRef"
height=
"350px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel
ref=
"carouselRef"
height=
"350px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel-item
v-for=
"(item, index) in entitiesDataInfoList"
:key=
"item.id + index"
>
<div>
<div
class=
"box1-top"
>
...
...
@@ -129,8 +145,11 @@
</div>
<div
class=
"box1-top-content-item"
>
<span
class=
"box1-top-content-item-title"
>
· 涉及领域:
</span>
<div
class=
"box1-top-content-item-tags"
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
>
<div
class=
"box1-top-content-item-tags"
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
>
<el-tag
:type=
"getTagType(domainItem)"
>
{{
domainItem
}}
</el-tag>
</div>
</div>
...
...
@@ -139,10 +158,18 @@
<div
class=
"box1-bottom"
>
<div
class=
"box1-bottom-title"
>
· 涉及主要实体:
</div>
<div
class=
"box1-bottom-content"
>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in item.sanEntities"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in item.sanEntities"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
(
ett
.
entityNameZh
||
ett
.
enName
)?.
match
(
...
...
@@ -173,16 +200,28 @@
</custom-container>
</el-col>
<el-col
:span=
"8"
>
<custom-container
titleType=
"danger"
title=
"风险信号"
:headerNum=
"warningList.length"
:titleIcon=
"dangerIcon"
height=
"450px"
>
<custom-container
titleType=
"danger"
title=
"风险信号"
:headerNum=
"warningList.length"
:titleIcon=
"dangerIcon"
height=
"450px"
>
<
template
#
default
>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleToRiskSignalDetail(item)"
>
<div
class=
"item-left"
:class=
"
{
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleToRiskSignalDetail(item)"
>
<div
class=
"item-left"
:class=
"
{
itemLeftStatus1: item.status === '一般风险',
itemLeftStatus2: item.status === '重大风险'
}">
}"
>
{{
item
.
status
}}
</div>
<div
class=
"item-right"
>
...
...
@@ -227,9 +266,17 @@
<custom-container
title=
"社交媒体"
:titleIcon=
"dialogIcon"
height=
"450px"
>
<
template
#
default
>
<div
class=
"dialog-list"
>
<MessageBubble
v-for=
"(item, index) in socialMediaList"
@
click=
"handlePerClick(item)"
@
info-click=
"handleMediaClick(item)"
:key=
"index"
:avatar=
"item.avatar"
:name=
"item.name"
:time=
"item.time"
:source=
"item.source"
:content=
"item.content"
/>
<MessageBubble
v-for=
"(item, index) in socialMediaList"
@
click=
"handlePerClick(item)"
@
info-click=
"handleMediaClick(item)"
:key=
"index"
:avatar=
"item.avatar"
:name=
"item.name"
:time=
"item.time"
:source=
"item.source"
:content=
"item.content"
/>
<!--
<MessageBubble
:avatar=
"customMessage.avatar"
:name=
"customMessage.name"
...
...
@@ -281,14 +328,19 @@
<template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"280"
align=
"center"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
}}
</el-tag>
...
...
@@ -305,14 +357,19 @@
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"280"
align=
"center"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
}}
</el-tag>
...
...
@@ -329,8 +386,11 @@
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
...
...
@@ -377,9 +437,13 @@
<el-row
:gutter=
"20"
style=
"width: 1600px; margin: 0 auto"
>
<CustomTitle
id=
"position4"
title=
"资源库"
style=
"margin-top: 54px"
/>
<div
class=
"resource-tabs"
>
<div
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
<div
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
:class=
"{ active: activeResourceTab === tab.value, disabled: tab.disabled }"
@
click=
"handleResourceTabClick(tab)"
>
@
click=
"handleResourceTabClick(tab)"
>
{{ tab.label }}
</div>
</div>
...
...
@@ -392,15 +456,25 @@
<div
class=
"box4-item"
v-for=
"(item, idx) in sanctionProcessList"
:key=
"item.title"
>
<div
class=
"box4-item-left"
>
<el-image
:src=
"dotIcon"
alt=
"图片"
class=
"box4-item-left-icon"
/>
<div
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
<div
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
</div>
<div
class=
"box4-item-right"
>
<div
class=
"box4-item-right-header"
@
click=
"handleSanc(item)"
>
<span
class=
"box4-item-right-header-title"
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span>
<span
class=
"box4-item-right-header-title"
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span
>
<span
class=
"box4-item-right-header-desc"
>
{{
item
.
desc
}}
</span>
</div>
<el-tooltip
effect=
"dark"
:content=
"item.content"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<el-tooltip
effect=
"dark"
:content=
"item.content"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<div
class=
"box4-item-right-content"
>
{{
item
.
content
}}
</div>
...
...
@@ -408,8 +482,12 @@
</div>
</div>
</div>
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<el-icon>
<DArrowRight
/>
</el-icon>
...
...
@@ -426,8 +504,15 @@
</
template
>
<
template
#
default
>
<div
class=
"box5"
>
<el-table
:data=
"entitiesList"
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
<el-table
:data=
"entitiesList"
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
<!--
<el-table-column
prop=
"index"
label=
"序号"
width=
"80"
align=
"center"
>
<template
#
default=
"scope"
>
{{
scope
.
$index
+
1
+
(
currentPage
-
1
)
*
pageSize
}}
...
...
@@ -437,8 +522,12 @@
<el-table-column
prop=
"name"
label=
"实体名称"
min-width=
"200"
>
<
template
#
default=
"scope"
>
<div
class=
"tableName"
@
click=
"handleCompClick(scope.row)"
>
<el-image
v-if=
"scope.row.img"
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
alt=
""
></el-image>
<el-image
v-if=
"scope.row.img"
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
(
scope
.
row
.
name
||
scope
.
row
.
enName
)?.
match
(
...
...
@@ -489,13 +578,19 @@
<el-table-column
prop=
"revenue"
label=
"50%规则子企业"
width=
"280"
align=
"right"
>
<
template
#
default=
"scope"
>
<div
class=
"num-item"
v-if=
"scope.row.ruleOrgCount > 0"
>
<div
class=
"name-item"
:class=
"[
<div
class=
"name-item"
:class=
"[
'revenue-cell',
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
]"
>
{{
scope
.
row
.
ruleOrgList
[
0
].
orgName
}}
...等
</div>
<div
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
<div
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
{{
scope
.
row
.
ruleOrgCount
}}
家>
</div>
</div>
...
...
@@ -507,8 +602,15 @@
<!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页
</div> -->
<el-pagination
v-model:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"total"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
<el-pagination
v-model:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"total"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
</div>
</div>
</template>
...
...
@@ -594,8 +696,12 @@
<div
class=
"dialog-title"
>
50%规则子企业
</div>
</
template
>
<div
class=
"dialog-ett-wrpper"
>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in currentOrgList"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in currentOrgList"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{ (ett.orgName || ett.enName)?.match(/[\u4e00-\u9fa5a-zA-Z0-9]/)?.[0] }}
...
...
@@ -629,6 +735,8 @@
<
script
setup
>
import
{
onMounted
,
ref
,
computed
,
reactive
,
shallowRef
,
watch
,
nextTick
}
from
"vue"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
const
homeMainRef
=
ref
(
null
);
const
{
isShow
}
=
useContainerScroll
(
homeMainRef
);
import
*
as
echarts
from
"echarts"
;
...
...
@@ -736,7 +844,34 @@ const techOptions = [
{
label
:
"太空"
,
value
:
13
},
{
label
:
"核"
,
value
:
14
}
];
const
timeOptions
=
[
"全部时间"
,
"2025年"
,
"2024年"
,
"2023年"
,
"2022年"
,
"2021年"
,
"2020年"
,
"2019年"
,
"2018年"
,
"2017年"
,
"2016年"
,
"2015年"
,
"2014年"
,
"2013年"
,
"2012年"
,
"2011年"
,
"2010年"
,
"2009年"
,
"2008年"
,
"2007年"
,
"2006年"
,
"2005年"
,
"2004年"
,
"2003年"
,
"2002年"
,
"2001年"
];
const
timeOptions
=
[
"全部时间"
,
"2025年"
,
"2024年"
,
"2023年"
,
"2022年"
,
"2021年"
,
"2020年"
,
"2019年"
,
"2018年"
,
"2017年"
,
"2016年"
,
"2015年"
,
"2014年"
,
"2013年"
,
"2012年"
,
"2011年"
,
"2010年"
,
"2009年"
,
"2008年"
,
"2007年"
,
"2006年"
,
"2005年"
,
"2004年"
,
"2003年"
,
"2002年"
,
"2001年"
];
const
checkedTech
=
ref
([
0
]);
const
checkedTime
=
ref
([
"全部时间"
]);
...
...
@@ -1196,9 +1331,15 @@ const fetchSanctionList = async () => {
const
res
=
await
getExportControlList
(
params
);
if
(
res
&&
res
.
content
)
{
sanctionList
.
value
=
res
.
content
.
map
(
item
=>
{
const
tags
=
Array
.
isArray
(
item
.
techDomains
)
?
item
.
techDomains
:
item
.
techDomain
?
[
item
.
techDomain
]
:
item
.
techDomainList
||
[];
const
fullTime
=
item
.
startTime
?
formatAnyDateToChinese
(
item
.
startTime
)
:
item
.
postDate
||
item
.
publishDate
||
item
.
date
;
const
tags
=
Array
.
isArray
(
item
.
techDomains
)
?
item
.
techDomains
:
item
.
techDomain
?
[
item
.
techDomain
]
:
item
.
techDomainList
||
[];
const
fullTime
=
item
.
startTime
?
formatAnyDateToChinese
(
item
.
startTime
)
:
item
.
postDate
||
item
.
publishDate
||
item
.
date
;
let
year
=
""
;
let
dateStr
=
fullTime
;
if
(
typeof
fullTime
===
"string"
)
{
...
...
@@ -1221,12 +1362,16 @@ const fetchSanctionList = async () => {
title
:
item
.
entityNameZh
||
item
.
entityName
||
item
.
title
||
item
.
name
,
desc
:
item
.
sanReason
||
item
.
description
||
item
.
summary
||
item
.
content
,
tags
:
tags
,
countTag
:
item
.
cnEntityCount
?
`
${
item
.
cnEntityCount
}
家中国实体`
:
item
.
ruleOrgCount
?
`
${
item
.
ruleOrgCount
}
家关联实体`
:
item
.
countTag
||
""
countTag
:
item
.
cnEntityCount
?
`
${
item
.
cnEntityCount
}
家中国实体`
:
item
.
ruleOrgCount
?
`
${
item
.
ruleOrgCount
}
家关联实体`
:
item
.
countTag
||
""
};
});
totalAll
.
value
=
res
.
totalElements
;
}
}
catch
(
error
)
{
}
}
catch
(
error
)
{}
};
const
handlePageChangeAll
=
val
=>
{
...
...
@@ -1363,7 +1508,7 @@ const searchKeyword = ref("");
const
resourceTabs
=
[
{
label
:
"全部制裁"
,
value
:
"all"
,
disabled
:
false
},
{
label
:
"实体清单"
,
value
:
"entity"
,
disabled
:
false
},
{
label
:
"商业管制清单"
,
value
:
"commerce"
,
disabled
:
true
}
,
{
label
:
"商业管制清单"
,
value
:
"commerce"
,
disabled
:
true
}
// { label: "关键与新兴技术清单", value: "tech", disabled: true },
// { label: "军事最终用户清单", value: "military", disabled: true }
];
...
...
@@ -1498,7 +1643,7 @@ const handleGetHylyList = async () => {
hylymc
:
"全部分类"
};
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
}
catch
(
error
)
{
}
}
catch
(
error
)
{}
};
const
chart1Data
=
ref
({
...
...
@@ -1607,13 +1752,11 @@ const handleSearch = () => {
path
:
"/searchResults"
,
query
:
{
searchText
:
searchExportControlText
.
value
,
areaName
:
'实体清单'
areaName
:
"实体清单"
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
};
onMounted
(
async
()
=>
{
handleGetHylyList
();
...
...
@@ -1656,28 +1799,12 @@ const handleMediaClick = item => {
.home-header
{
height
:
64px
;
color
:
#fff
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
26px
;
line-height
:
64px
;
background
:
url("@/assets/images/nav-bg.png")
;
box-sizing
:
border-box
;
padding-left
:
160px
;
display
:
flex
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.box1
{
...
...
@@ -2030,7 +2157,6 @@ const handleMediaClick = item => {
}
.box3-content
{
// flex: 1;
.el-progress--line
{
width
:
82px
;
...
...
src/views/finance/index.vue
浏览文件 @
2dda3480
<
template
>
<div
class=
"home-wrapper"
>
<div
class=
"home-header"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
投融资限制
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"投融资限制"
></headerInfo>
</div>
</div>
<div
class=
"home-main"
>
<div
class=
"home-main-header"
>
...
...
@@ -145,11 +146,7 @@
<custom-container
titleType=
"danger"
title=
"风险信号"
:titleIcon=
"dangerIcon"
height=
"450px"
>
<
template
#
default
>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
>
<div
class=
"item-left"
:class=
"
{
...
...
@@ -517,6 +514,8 @@
<
script
setup
>
import
{
onMounted
,
ref
,
computed
}
from
"vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
setChart
from
"@/utils/setChart"
;
import
*
as
echarts
from
"echarts"
;
import
{
DArrowRight
,
Warning
,
Search
}
from
"@element-plus/icons-vue"
;
...
...
@@ -1317,25 +1316,12 @@ onMounted(async () => {
.home-header
{
height
:
64px
;
color
:
#fff
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
26px
;
line-height
:
64px
;
background
:
url("@/assets/images/nav-bg.png")
;
box-sizing
:
border-box
;
padding-left
:
160px
;
display
:
flex
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.box1
{
...
...
src/views/innovationSubject/index.vue
浏览文件 @
2dda3480
...
...
@@ -41,11 +41,12 @@
<div
class=
"home-main"
:class=
"
{ scrollHomeMain: isShow }" ref="containerRef">
<div
class=
"home-main-header"
>
<div
class=
"home-main-header-top"
v-show=
"!isShow"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
主要创新主体
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"主要创新主体"
></headerInfo>
</div>
</div>
<div
class=
"home-main-header-center"
v-show=
"!isShow"
>
<el-input
v-model=
"input"
style=
"width: 838px; height: 100%"
placeholder=
"搜索创新主体"
/>
...
...
@@ -403,6 +404,8 @@
import
{
onMounted
,
ref
,
computed
}
from
"vue"
;
import
*
as
echarts
from
"echarts"
;
import
router
from
"@/router"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
...
...
@@ -1193,31 +1196,12 @@ onMounted(async () => {
.home-main-header-top
{
width
:
100%
;
height
:
64px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
64px
;
background
:
url("./assets/images/header-bg.png")
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
box-sizing
:
border-box
;
padding
-left
:
160px
;
padding
:
0
160px
;
display
:
flex
;
justify-content
:
space-between
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
}
.home-main-header-center
{
...
...
src/views/marketAccessRestrictions/marketAccessHome/index.vue
浏览文件 @
2dda3480
...
...
@@ -3,13 +3,12 @@
<div
class=
"home-main"
>
<div
class=
"home-main-header"
>
<div
class=
"home-main-header-top"
>
<!--
<span>
国家科技安全
</span>
>
<span>
中美博弈概览
</span>
>
<span>
市场准入限制
</span>
-->
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
市场准入限制
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"市场准入限制"
></headerInfo>
</div>
</div>
<div
class=
"home-main-header-center"
>
<el-input
v-model=
"input"
style=
"width: 838px; height: 100%"
placeholder=
"搜索市场准入限制调查"
/>
...
...
@@ -611,6 +610,8 @@ import setChart from "@/utils/setChart";
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
router
from
"@/router"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
getMultiLineChart
from
"./utils/multiLineChart"
;
import
getPieChart
from
"./utils/piechart"
;
...
...
@@ -1525,27 +1526,10 @@ onMounted(async () => {
box
-
sizing
:
border
-
box
;
width
:
100
%
;
height
:
64
px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
size
:
16
px
;
font
-
weight
:
400
;
line
-
height
:
64
px
;
background
:
url
(
"./assets/images/header-bg.png"
);
font
-
family
:
Microsoft
YaHei
;
font
-
size
:
20
px
;
font
-
weight
:
700
;
color
:
#
fff
;
padding
-
left
:
160
px
;
padding
:
0
160
px
;
display
:
flex
;
.
header
-
item
{
margin
:
0
3
px
;
}
.
back
-
item
{
cursor
:
pointer
;
&
:
hover
{
color
:
#
ccc
;
}
}
justify
-
content
:
space
-
between
;
}
.
home
-
main
-
header
-
center
{
margin
-
top
:
48
px
;
...
...
src/views/ruleRestriction/index.vue
浏览文件 @
2dda3480
...
...
@@ -41,12 +41,11 @@
<!-- 面包屑 -->
<div
class=
"breadcrumb"
v-show=
"!isShow"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item"
>
规则限制
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"规则限制"
></headerInfo>
</div>
</div>
<!-- 主页面 -->
...
...
@@ -145,7 +144,8 @@ import newData from "./components/dataNew/index.vue";
import
askPage
from
"./components/askPage/index.vue"
;
import
dataSub
from
"./components/dataSub/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
// 搜索框
...
...
@@ -205,25 +205,9 @@ const handleBackHome = () => {
height
:
64px
;
background-image
:
url("./assets/images/bread-bg.png")
;
background-size
:
cover
;
padding
:
17px
0px
21px
0px
;
.breadcrumb-box
{
margin-left
:
160px
;
display
:
flex
;
// align-items: center;
.breadcrumb-item
{
font-size
:
20px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
30px
;
color
:
#fff
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#999
;
}
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.main-content
{
position
:
relative
;
...
...
src/views/scientificFunding/index.vue
浏览文件 @
2dda3480
...
...
@@ -2,12 +2,11 @@
<div
class=
"coop-page"
>
<!-- 面包屑 -->
<div
class=
"breadcrumb"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item"
>
科研资助体系
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"科研资助体系"
></headerInfo>
</div>
</div>
<!-- 主页面 -->
...
...
@@ -116,7 +115,8 @@ import newData from "./components/dataNew/index.vue";
import
askPage
from
"./components/askPage/index.vue"
;
import
dataSub
from
"./components/dataSub/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
...
...
@@ -210,25 +210,9 @@ const dataList = ref([
height
:
64px
;
background-image
:
url("./assets/images/bread-bg.png")
;
background-size
:
cover
;
padding
:
17px
0px
21px
0px
;
.breadcrumb-box
{
margin-left
:
160px
;
display
:
flex
;
// align-items: center;
.breadcrumb-item
{
font-size
:
20px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
30px
;
color
:
#fff
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#999
;
}
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.main-content
{
overflow
:
auto
;
...
...
src/views/technologyFigures/index.vue
浏览文件 @
2dda3480
...
...
@@ -3,11 +3,12 @@
<div
class=
"home-main"
>
<div
class=
"home-main-header"
>
<div
class=
"home-main-header-top"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
科技人物观点
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"科技人物观点"
></headerInfo>
</div>
</div>
<div
class=
"home-main-header-center"
>
<el-input
v-model=
"input"
style=
"width: 838px; height: 100%"
placeholder=
"搜索科技人物及观点"
/>
...
...
@@ -324,7 +325,8 @@ import { useRouter } from "vue-router";
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
setChart
from
"@/utils/setChart"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
// 图表工具函数(仅保留用到的)
import
getWordCloudChart
from
"./utils/worldCloudChart"
;
import
getMultiLineChart
from
"./utils/multiLineChart"
;
...
...
@@ -506,30 +508,10 @@ onMounted(() => {
box-sizing
:
border-box
;
width
:
100%
;
height
:
64px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
64px
;
background
:
url("./assets/images/header-bg.png")
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
padding-left
:
160px
;
padding
:
0
160px
;
display
:
flex
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
justify-content
:
space-between
;
}
.home-main-header-center
{
...
...
src/views/thinkTank/index.vue
浏览文件 @
2dda3480
...
...
@@ -3,11 +3,12 @@
<div
class=
"home-main"
>
<div
class=
"home-main-header"
>
<div
class=
"home-main-header-top"
>
<div
class=
"header-item"
>
国家科技安全
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item back-item"
@
click=
"handleBackHome"
>
中美博弈概览
</div>
<div
class=
"header-item"
>
>
</div>
<div
class=
"header-item"
>
科技智库
</div>
<div
class=
"header-left"
>
<HeaderMenu></HeaderMenu>
</div>
<div
class=
"header-right"
>
<headerInfo
curTitleName=
"科技智库"
></headerInfo>
</div>
</div>
<div
class=
"home-main-header-center"
>
<el-input
v-model=
"searchThinktankText"
style=
"width: 838px; height: 100%"
placeholder=
"搜索智库报告"
/>
...
...
@@ -85,12 +86,17 @@
</el-popover>
-->
<div
class=
"content"
>
{{ item.desc }}
</div>
<div
class=
"tag-box"
>
<div
class=
"tag"
:class=
"{
<div
class=
"tag"
:class=
"{
tag1: val.status === 1,
tag2: val.status === 2,
tag3: val.status === 3,
tag4: val.status === 4
}"
v-for=
"(val, idx) in item.tagList"
:key=
"idx"
>
}"
v-for=
"(val, idx) in item.tagList"
:key=
"idx"
>
{{ val.industryName }}
</div>
</div>
...
...
@@ -125,8 +131,14 @@
</div>
<div
class=
"box1-header-right"
@
click=
"handleClickToDetail"
>
查看详情 >
</div>
</div>
<el-carousel
ref=
"carouselRef"
height=
"395px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
>
<el-carousel
ref=
"carouselRef"
height=
"395px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
>
<el-carousel-item
v-for=
"(itemData, indexData) in box1Data"
:key=
"index"
>
<div
class=
"box1-main"
>
<div
class=
"box1-main-left"
>
...
...
@@ -154,7 +166,6 @@
</div>
</el-carousel-item>
</el-carousel>
</div>
<div
class=
"box2"
>
<div
class=
"box2-header"
>
...
...
@@ -167,13 +178,20 @@
</div>
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleClickToDetail()"
>
<div
class=
"item-left"
:class=
"{
<div
class=
"box2-main-item"
v-for=
"(item, index) in warningList"
:key=
"index"
@
click=
"handleClickToDetail()"
>
<div
class=
"item-left"
:class=
"{
itemLeftStatus1: item.status === '一般风险 ' || item.status === '暂无数值',
itemLeftStatus2: item.status === '重大风险',
itemLeftStatus3: item.status === '特别重大'
}"
>
}"
>
{{ item.status || "一般风险" }}
</div>
<div
class=
"item-right"
>
...
...
@@ -212,7 +230,12 @@
</div>
</div>
<div
class=
"box3-main"
>
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
@
click=
"handleToNewsAnalysis(news)"
>
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
@
click=
"handleToNewsAnalysis(news)"
>
<div
class=
"left"
>
<img
:src=
"news.newsImage !== null ? news.newsImage : defaultNewsIcon"
/>
</div>
...
...
@@ -279,8 +302,13 @@
</div>
<div
class=
"box5-select-box"
>
<el-select
v-model=
"box5selectetedMonths"
placeholder=
"选择时间"
style=
"width: 120px"
>
<el-option
v-for=
"item in box5MonthsList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"changeBox5Data(item.value)"
/>
<el-option
v-for=
"item in box5MonthsList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"changeBox5Data(item.value)"
/>
</el-select>
</div>
</div>
...
...
@@ -294,8 +322,13 @@
<div
class=
"header-title"
>
{{ "政策建议领域分布" }}
</div>
<div
class=
"box6-select-box"
>
<el-select
v-model=
"box6selectetedYear"
placeholder=
"选择时间"
style=
"width: 120px"
>
<el-option
v-for=
"item in box6YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"handleBox6()"
/>
<el-option
v-for=
"item in box6YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"handleBox6()"
/>
</el-select>
</div>
</div>
...
...
@@ -324,21 +357,30 @@
</div>
<div
class=
"box8-select-box"
>
<el-select
v-model=
"box8selectetedYear"
placeholder=
"选择时间"
style=
"width: 120px"
>
<el-option
v-for=
"item in box8YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"changeBox8Data(item.value)"
/>
<el-option
v-for=
"item in box8YearList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
@
click=
"changeBox8Data(item.value)"
/>
</el-select>
</div>
</div>
<div
class=
"box8-main"
>
<div
class=
"box8-item"
v-for=
"(item, index) in box8Data"
:key=
"index"
>
<div
class=
"item-left"
:class=
"{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }"
>
<div
class=
"item-left"
:class=
"{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }"
>
{{ index + 1 }}
</div>
<!-- <el-popover effect="dark" :content="item.clause" placement="top-start">
<template #reference> -->
<div
class=
"item-center"
:class=
"{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }"
>
<div
class=
"item-center"
:class=
"{ itemBold1: index === 0, itemBold2: index === 1, itemBold3: index === 2 }"
>
{{ item.clause }}
</div>
<!-- </template>
...
...
@@ -354,11 +396,15 @@
<div
class=
"home-main-footer"
>
<DivideHeader
id=
"position4"
class=
"divide-header"
:titleText=
"'资源库'"
></DivideHeader>
<div
class=
"home-main-footer-header"
>
<div
class=
"btn-box"
>
<div
class=
"btn"
:class=
"{ btnActive: activeCate === cate }"
v-for=
"(cate, index) in categoryList"
:key=
"index"
@
click=
"handleClickCate(cate)"
>
<div
class=
"btn"
:class=
"{ btnActive: activeCate === cate }"
v-for=
"(cate, index) in categoryList"
:key=
"index"
@
click=
"handleClickCate(cate)"
>
{{ cate }}
</div>
</div>
...
...
@@ -389,12 +435,22 @@
</div>
<div
class=
"select-main"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-model=
"checkAll"
:indeterminate=
"isIndeterminate"
class=
"all-checkbox"
@
change=
"handleCheckAllChange"
>
<el-checkbox
v-model=
"checkAll"
:indeterminate=
"isIndeterminate"
class=
"all-checkbox"
@
change=
"handleCheckAllChange"
>
全部领域
</el-checkbox>
<el-checkbox
v-for=
"research in areaList"
:key=
"research.id"
v-model=
"selectedAreaList"
:label=
"research.id"
@
change=
"handleCheckedAreaChange()"
class=
"filter-checkbox"
>
<el-checkbox
v-for=
"research in areaList"
:key=
"research.id"
v-model=
"selectedAreaList"
:label=
"research.id"
@
change=
"handleCheckedAreaChange()"
class=
"filter-checkbox"
>
{{ research.name }}
</el-checkbox>
</div>
...
...
@@ -408,13 +464,22 @@
</div>
<div
class=
"select-main"
>
<div
class=
"checkbox-group"
>
<el-checkbox
v-model=
"checkAllTime"
class=
"all-checkbox"
:indeterminate=
"isIndeterminateTime"
@
change=
"handleCheckAllChangeTime"
>
<el-checkbox
v-model=
"checkAllTime"
class=
"all-checkbox"
:indeterminate=
"isIndeterminateTime"
@
change=
"handleCheckAllChangeTime"
>
全部时间
</el-checkbox>
<el-checkbox-group
v-model=
"selectedPubTimeList"
>
<el-checkbox
v-for=
"time in pubTimeList"
:key=
"time.id"
:label=
"time.id"
class=
"filter-checkbox"
@
change=
"handleCheckedAreaChangeTime()"
>
<el-checkbox
v-for=
"time in pubTimeList"
:key=
"time.id"
:label=
"time.id"
class=
"filter-checkbox"
@
change=
"handleCheckedAreaChangeTime()"
>
{{ time.name }}
</el-checkbox>
</el-checkbox-group>
...
...
@@ -424,8 +489,12 @@
</div>
<div
class=
"right"
>
<div
class=
"card-box"
>
<div
class=
"footer-card"
v-for=
"(item, index) in curFooterList"
:key=
"index"
@
click=
"handleToReportDetail(item.id)"
>
<div
class=
"footer-card"
v-for=
"(item, index) in curFooterList"
:key=
"index"
@
click=
"handleToReportDetail(item.id)"
>
<div
class=
"footer-card-top"
>
<img
:src=
"item.imageUrl"
alt=
""
/>
</div>
...
...
@@ -448,8 +517,14 @@
<div
class=
"right-footer"
>
<div
class=
"info"
>
共{{ total }}项智库报告
</div>
<div
class=
"page-box"
>
<el-pagination
:page-size=
"12"
background
layout=
"prev, pager, next"
:total=
"total"
@
current-change=
"handleCurrentChange"
:current-page=
"currentPage"
/>
<el-pagination
:page-size=
"12"
background
layout=
"prev, pager, next"
:total=
"total"
@
current-change=
"handleCurrentChange"
:current-page=
"currentPage"
/>
</div>
</div>
</div>
...
...
@@ -480,7 +555,8 @@ import {
getThinkTankReportRemarks
}
from
"@/api/thinkTank/overview"
;
import
{
getPersonSummaryInfo
}
from
"@/api/common/index"
;
import
HeaderMenu
from
"@/components/headerMenu.vue"
;
import
headerInfo
from
"@/components/headerInfo.vue"
;
import
getMultiLineChart
from
"./utils/multiLineChart"
;
import
getPieChart
from
"./utils/piechart"
;
import
getSankeyChart
from
"./utils/sankey"
;
...
...
@@ -629,8 +705,8 @@ const handleClickToDetail = () => {
console
.
log
(
"当前 Carousel 激活索引:"
,
activeIndex
);
const
id
=
box1Data
.
value
[
activeIndex
].
id
;
box1DataIndex
.
value
=
activeIndex
toDetaile
()
box1DataIndex
.
value
=
activeIndex
;
toDetaile
()
;
};
const
toDetaile
=
()
=>
{
...
...
@@ -645,7 +721,7 @@ const toDetaile = () => {
// 切换当前智库
const
handleSwithCurDecree
=
name
=>
{
console
.
log
(
name
,
carouselRef
.
value
)
console
.
log
(
name
,
carouselRef
.
value
)
;
if
(
name
===
"left"
)
{
carouselRef
.
value
.
prev
();
}
else
{
...
...
@@ -1305,7 +1381,7 @@ const isIndeterminateTime = ref(true);
const
sort
=
ref
(
false
);
const
handleSwithSort
=
()
=>
{
sort
.
value
=
!
sort
.
value
;
handleGetetThinkTankReport
()()
handleGetetThinkTankReport
()()
;
};
const
handleCheckAllChangeTime
=
val
=>
{
...
...
@@ -1526,7 +1602,7 @@ const handleClickPerson = async item => {
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
}
catch
(
error
)
{
}
}
catch
(
error
)
{}
};
// 点击新闻条目,跳转到新闻分析页
...
...
@@ -1555,12 +1631,11 @@ const handleSearch = () => {
path
:
"/searchResults"
,
query
:
{
searchText
:
searchThinktankText
.
value
,
areaName
:
'智库'
areaName
:
"智库"
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
};
onMounted
(
async
()
=>
{
handleGetThinkTankList
();
...
...
@@ -1614,30 +1689,10 @@ onMounted(async () => {
box-sizing
:
border-box
;
width
:
100%
;
height
:
64px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
64px
;
background
:
url("./assets/images/header-bg.png")
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
color
:
#fff
;
padding-left
:
160px
;
display
:
flex
;
.header-item
{
margin
:
0
3px
;
}
.back-item
{
cursor
:
pointer
;
&
:hover
{
color
:
#ccc
;
}
}
justify-content
:
space-between
;
padding
:
0
160px
;
}
.home-main-header-center
{
...
...
@@ -3060,8 +3115,6 @@ onMounted(async () => {
overflow
:
hidden
;
background
:
rgba
(
247
,
248
,
249
,
1
);
.home-main-footer-header
{
width
:
1600px
;
height
:
42px
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论