Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
c5add0d2
提交
c5add0d2
authored
1月 07, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
差异文件
update
上级
93476144
ca74db31
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
998 行增加
和
244 行删除
+998
-244
coopRestriction.js
src/api/coopRestriction/coopRestriction.js
+20
-0
overview.js
src/api/innovationSubject/overview.js
+137
-2
InnovationSubject.js
src/router/modules/InnovationSubject.js
+2
-2
index.vue
src/views/bill/background/index.vue
+0
-0
index.vue
src/views/bill/billHome/index.vue
+20
-17
index.vue
src/views/bill/index.vue
+0
-56
default-icon-news.png
...views/coopRestriction/assets/images/default-icon-news.png
+0
-0
default-icon1.png
src/views/coopRestriction/assets/images/default-icon1.png
+0
-0
default-icon2.png
src/views/coopRestriction/assets/images/default-icon2.png
+0
-0
index.vue
src/views/coopRestriction/components/dataNew/index.vue
+18
-0
index.vue
src/views/coopRestriction/components/resLib/index.vue
+0
-0
index.vue
src/views/coopRestriction/index.vue
+212
-10
index.vue
src/views/exportControl/index.vue
+18
-8
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+28
-31
index.vue
src/views/innovationSubject/index.vue
+109
-26
index.vue
src/views/innovationSubject/innovativeInstitutions/index.vue
+54
-14
index.vue
...novationSubject/innovativeInstitutions/overView/index.vue
+0
-0
index.vue
...Subject/innovativeInstitutions/researchStrength/index.vue
+136
-23
charts.js
src/views/innovationSubject/utils/charts.js
+0
-0
index.vue
src/views/ruleRestriction/index.vue
+221
-53
index.vue
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
+23
-2
box6-header-icon.png
src/views/thinkTank/assets/images/box6-header-icon.png
+0
-0
没有找到文件。
src/api/coopRestriction/coopRestriction.js
浏览文件 @
c5add0d2
...
@@ -76,4 +76,23 @@ export function getCoopRestrictionDomain(params) {
...
@@ -76,4 +76,23 @@ export function getCoopRestrictionDomain(params) {
url
:
`/api/cooperationlimitinfo/getLimitArea`
,
url
:
`/api/cooperationlimitinfo/getLimitArea`
,
params
params
})
})
}
// 合作限制-获取合作限制列表接口
/**
* @param {area} 涉及领域
* @param {currentPage} 当前页码
* @param {pageSize} 每页数量
* @param {sortOrder} 排序顺序
* @param {source} 合作来源
* @param {sortField} 排序字段
* @param {type} 合作限制类型
* @header token
*/
export
function
getCoopRestrictionList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/cooperationlimitinfo/statList`
,
params
})
}
}
\ No newline at end of file
src/api/innovationSubject/overview.js
浏览文件 @
c5add0d2
// 智库概览信息
// 智库概览信息
import
request
from
"@/api/request.js"
;
import
request
from
"@/api/request.js"
;
// 获取新闻资讯
/**
* @param {moduleId}
*/
export
function
getNews
(
moduleId
=
"0105"
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/commonFeature/news/
${
moduleId
}
`
,
})
}
/**
* 社交媒体
*/
export
function
getSocialMediaInfo
(
moduleId
=
"0105"
)
{
return
request
({
method
:
"GET"
,
url
:
`/api/commonFeature/remarks/
${
moduleId
}
`
})
}
// 获取法案风险信号
/**
* @param {moduleId}
*/
export
function
getBillRiskSignal
(
moduleId
=
"0105"
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/commonFeature/riskSignal/
${
moduleId
}
`
,
})
}
//创新主体主页:统计不同创新主体类型对应的主体数量
//创新主体主页:统计不同创新主体类型对应的主体数量
export
function
getCountSubjectType
()
{
export
function
getCountSubjectType
()
{
return
request
({
return
request
({
...
@@ -40,4 +75,105 @@ export function getOverallRanking(params) {
...
@@ -40,4 +75,105 @@ export function getOverallRanking(params) {
url
:
`/api/innovateSubject/overallRanking`
,
url
:
`/api/innovateSubject/overallRanking`
,
params
params
})
})
}
}
\ No newline at end of file
//创新主体主页:领域布局
export
function
getResearchField
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/researchField`
,
params
})
}
//创新主体主页:主体类型分类领域布局
export
function
getResearchFieldSubjectType
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/researchFieldSubjectType`
,
params
})
}
/***********详情页 */
//创新主体详情:基本信息
export
function
getInfo
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/info/
${
params
.
id
}
`
,
params
})
}
//最新动态
export
function
getDynamics
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/dynamics/
${
params
.
orgId
}
`
,
params
})
}
//创新主体详情:历史事件轴
export
function
getEventList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/eventList/
${
params
.
id
}
`
,
params
})
}
//创新主体详情:重点人物
export
function
getPersonList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/personList/
${
params
.
id
}
`
,
params
})
}
//创新主体科研实力:专利数量统计
export
function
getPatentList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/patentList/
${
params
.
id
}
`
,
params
})
}
// 创新主体科研实力:论文数量统计
export
function
getPaperList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/paperList/
${
params
.
id
}
`
,
params
})
}
//创新主体科研实力:经费增长情况
export
function
getFundGrowth
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/fundGrowth/
${
params
.
id
}
`
,
params
})
}
//创新主体科研实力:经费来源
export
function
getFundFromList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/fundFromList/
${
params
.
id
}
`
,
params
})
}
//创新主体科研实力:经费分配
export
function
getFundToList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/fundToList/
${
params
.
id
}
`
,
params
})
}
src/router/modules/InnovationSubject.js
浏览文件 @
c5add0d2
...
@@ -3,7 +3,7 @@ import InnovationSubject from "@/views/innovationSubject/index.vue";
...
@@ -3,7 +3,7 @@ import InnovationSubject from "@/views/innovationSubject/index.vue";
import
InnovationInstitution
from
"@/views/innovationSubject/innovativeInstitutions/index.vue"
;
import
InnovationInstitution
from
"@/views/innovationSubject/innovativeInstitutions/index.vue"
;
const
innovationSubjectRoutes
=
[
const
innovationSubjectRoutes
=
[
//创新主体
//创新主体
{
{
path
:
"/innovationSubject"
,
path
:
"/innovationSubject"
,
name
:
"InnovationSubject"
,
name
:
"InnovationSubject"
,
...
@@ -13,7 +13,7 @@ const innovationSubjectRoutes = [
...
@@ -13,7 +13,7 @@ const innovationSubjectRoutes = [
}
}
},
},
{
{
path
:
"/InnovativeInstitutions"
,
path
:
"/InnovativeInstitutions
/:id
"
,
name
:
"InnovativeInstitutions"
,
name
:
"InnovativeInstitutions"
,
component
:
InnovationInstitution
,
component
:
InnovationInstitution
,
meta
:
{
meta
:
{
...
...
src/views/bill/background/index.vue
浏览文件 @
c5add0d2
差异被折叠。
点击展开。
src/views/bill/billHome/index.vue
浏览文件 @
c5add0d2
...
@@ -1524,24 +1524,26 @@ watch(box8selectetedTime, () => {
...
@@ -1524,24 +1524,26 @@ watch(box8selectetedTime, () => {
}
);
}
);
const
handleToPosi
=
id
=>
{
const
handleToPosi
=
id
=>
{
let
top
=
0
;
const
element
=
document
.
getElementById
(
id
);
switch
(
id
)
{
if
(
element
&&
containerRef
.
value
)
{
case
"position2"
:
// 1. 如果是从完整搜索框跳转,先强制切换状态稳定布局
top
=
isShow
.
value
?
634
:
980
;
if
(
!
isShow
.
value
)
{
break
;
isShow
.
value
=
true
;
case
"position3"
:
}
top
=
isShow
.
value
?
1204
:
1550
;
break
;
// 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计算
case
"position4"
:
nextTick
(()
=>
{
top
=
isShow
.
value
?
2334
:
2680
;
const
containerRect
=
containerRef
.
value
.
getBoundingClientRect
();
break
;
const
elementRect
=
element
.
getBoundingClientRect
();
default
:
// 使用 getBoundingClientRect 计算元素相对于容器顶部的绝对距离
top
=
0
;
const
top
=
elementRect
.
top
-
containerRect
.
top
+
containerRef
.
value
.
scrollTop
;
containerRef
.
value
.
scrollTo
({
top
:
top
,
behavior
:
"smooth"
}
);
}
);
}
}
containerRef
.
value
.
scrollTo
({
top
:
top
,
behavior
:
"smooth"
}
);
}
;
}
;
const
tabList
=
ref
([
const
tabList
=
ref
([
...
@@ -1838,6 +1840,7 @@ onUnmounted(() => {});
...
@@ -1838,6 +1840,7 @@ onUnmounted(() => {});
overflow
-
y
:
auto
;
overflow
-
y
:
auto
;
}
}
.
home
-
box
{
.
home
-
box
{
position
:
relative
;
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
background
:
url
(
"./assets/images/background.png"
);
background
:
url
(
"./assets/images/background.png"
);
...
...
src/views/bill/index.vue
浏览文件 @
c5add0d2
...
@@ -116,62 +116,6 @@ const handleClickLeftSiderBtn = (item) => {
...
@@ -116,62 +116,6 @@ const handleClickLeftSiderBtn = (item) => {
}
}
})
})
}
}
const
progressList
=
ref
([
{
tip
:
true
,
date
:
"7月5日"
,
title
:
"特朗普于美国独立日签署法案,公法编号Pub. L. No. 119-21。白宫举行庆典,B-2轰炸机飞越上空,象征“美国新时代”开启。"
,
degree
:
"特别重大风险"
,
rank
:
4
,
},
{
tip
:
true
,
date
:
"7月4日"
,
title
:
"众议院最终表决218票赞成 vs 214票反对,修订版法案以4票优势通过,2名共和党议员倒戈,民主党全员反对。"
,
degree
:
"重大风险"
,
rank
:
3
,
},
{
tip
:
true
,
date
:
"7月3日"
,
title
:
"民主党领袖杰弗里斯发表 8小时45分钟 演讲(众议院现代史最长),抗议法案“劫贫济富”,但仍未阻止表决。"
,
degree
:
"较大风险"
,
rank
:
2
,
},
{
tip
:
true
,
date
:
"7月2日"
,
title
:
"众议院以 219:213 通过程序规则,为最终表决铺路。此前4名共和党议员反对程序规则,议长约翰逊紧急游说挽回1票。"
,
degree
:
"低风险"
,
rank
:
1
,
},
{
tip
:
false
,
date
:
"7月1日"
,
title
:
"参议院最终表决投票51:50,副总统万斯(JD Vance)投出关键票打破平局。3名共和党参议员倒戈(蒂利斯、保罗、柯林斯)。"
,
degree
:
""
,
},
]);
const
wordCloudData
=
[
{
name
:
"财政保守主义"
,
value
:
100
},
{
name
:
"移民与边境安全"
,
value
:
5
},
{
name
:
"削减市民福利"
,
value
:
77
},
{
name
:
"债务驱动型经济"
,
value
:
35
},
{
name
:
"传统能源"
,
value
:
96
},
{
name
:
"与马斯克公开冲突"
,
value
:
57
},
{
name
:
"共和党财政鹰派"
,
value
:
72
},
{
name
:
"财政问责法案"
,
value
:
18
},
{
name
:
"强硬边境政策"
,
value
:
34
},
{
name
:
"扩大军费"
,
value
:
16
},
{
name
:
"债务与赤字警告"
,
value
:
72
},
{
name
:
"批评美国债务膨胀"
,
value
:
58
},
];
onMounted
(()
=>
{});
onMounted
(()
=>
{});
</
script
>
</
script
>
...
...
src/views/coopRestriction/assets/images/default-icon-news.png
0 → 100644
浏览文件 @
c5add0d2
57.8 KB
src/views/coopRestriction/assets/images/default-icon1.png
0 → 100644
浏览文件 @
c5add0d2
6.5 KB
src/views/coopRestriction/assets/images/default-icon2.png
0 → 100644
浏览文件 @
c5add0d2
8.2 KB
src/views/coopRestriction/components/dataNew/index.vue
浏览文件 @
c5add0d2
...
@@ -335,6 +335,14 @@ onMounted(() => {
...
@@ -335,6 +335,14 @@ onMounted(() => {
margin-bottom
:
12px
;
margin-bottom
:
12px
;
display
:
flex
;
display
:
flex
;
align-items
:
flex-start
;
align-items
:
flex-start
;
&
:
:
before
{
content
:
"·"
;
font-size
:
24px
;
line-height
:
20px
;
font-weight
:
bold
;
margin-right
:
16px
;
color
:
rgb
(
59
,
65
,
75
);
}
.ul-title
{
.ul-title
{
flex-shrink
:
0
;
flex-shrink
:
0
;
width
:
120px
;
width
:
120px
;
...
@@ -413,6 +421,16 @@ onMounted(() => {
...
@@ -413,6 +421,16 @@ onMounted(() => {
line-height
:
24px
;
line-height
:
24px
;
color
:
rgb
(
59
,
65
,
75
);
color
:
rgb
(
59
,
65
,
75
);
margin-bottom
:
10px
;
margin-bottom
:
10px
;
display
:
flex
;
align-items
:
center
;
&
:
:
before
{
content
:
"·"
;
font-size
:
24px
;
line-height
:
20px
;
font-weight
:
bold
;
margin-right
:
12px
;
color
:
rgb
(
59
,
65
,
75
);
}
}
}
}
}
.left-bottom-content
{
.left-bottom-content
{
...
...
src/views/coopRestriction/components/resLib/index.vue
浏览文件 @
c5add0d2
差异被折叠。
点击展开。
src/views/coopRestriction/index.vue
浏览文件 @
c5add0d2
<
template
>
<
template
>
<div
class=
"coop-page"
>
<div
class=
"coop-page"
>
<!-- 吸顶简易搜索框 -->
<div
class=
"search-header"
v-show=
"isShow"
>
<div
class=
"home-main-header-center"
>
<input
v-model=
"input"
class=
"search-input"
placeholder=
"搜索合作限制"
/>
<div
class=
"search-btn-small"
@
click=
"handleSearch"
>
<div
class=
"search-icon"
>
<img
src=
"./assets/icons/search-icon.png"
alt=
""
/>
</div>
<div
class=
"search-text"
>
搜索
</div>
</div>
</div>
<div
class=
"home-main-header-btn-box"
>
<div
class=
"btn"
@
click=
"handleToPosi('position1')"
>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position2')"
>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position3')"
>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position4')"
>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<!-- 面包屑 -->
<!-- 面包屑 -->
<div
class=
"breadcrumb"
>
<div
class=
"breadcrumb"
v-show=
"!isShow"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
...
@@ -11,9 +50,9 @@
...
@@ -11,9 +50,9 @@
</div>
</div>
</div>
</div>
<!-- 主页面 -->
<!-- 主页面 -->
<div
class=
"main-content"
>
<div
class=
"main-content"
ref=
"homeMainRef"
:class=
"
{ 'scroll-main': isShow }"
>
<!-- 搜索栏部分 -->
<!-- 搜索栏部分 -->
<div
class=
"search"
>
<div
class=
"search"
v-show=
"!isShow"
>
<div
class=
"search-main"
>
<div
class=
"search-main"
>
<input
v-model=
"input"
placeholder=
"搜索合作限制"
class=
"search-input"
/>
<input
v-model=
"input"
placeholder=
"搜索合作限制"
class=
"search-input"
/>
<div
class=
"search-btn"
>
<div
class=
"search-btn"
>
...
@@ -36,25 +75,25 @@
...
@@ -36,25 +75,25 @@
</div>
</div>
</div>
-->
</div>
-->
<div
class=
"search-bottom"
>
<div
class=
"search-bottom"
>
<div
class=
"btn"
@
click=
"
scrollToTop
('position1')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position1')"
>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position2')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position2')"
>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position3')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position3')"
>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position4')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position4')"
>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
...
@@ -95,21 +134,52 @@
...
@@ -95,21 +134,52 @@
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
,
nextTick
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
comTitle
from
"./common/comTitle.vue"
;
import
comTitle
from
"./common/comTitle.vue"
;
import
newData
from
"./components/dataNew/index.vue"
;
import
newData
from
"./components/dataNew/index.vue"
;
import
askPage
from
"./components/askPage/index.vue"
;
import
askPage
from
"./components/askPage/index.vue"
;
import
dataSub
from
"./components/dataSub/index.vue"
;
import
dataSub
from
"./components/dataSub/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
// 搜索框
// 搜索框
const
input
=
ref
(
""
);
const
input
=
ref
(
""
);
const
homeMainRef
=
ref
(
null
);
const
{
isShow
}
=
useContainerScroll
(
homeMainRef
);
const
router
=
useRouter
();
const
router
=
useRouter
();
// 搜索功能
const
handleSearch
=
()
=>
{
console
.
log
(
"搜索内容:"
,
input
.
value
);
};
// 锚点跳转
const
handleToPosi
=
id
=>
{
const
element
=
document
.
getElementById
(
id
);
if
(
element
&&
homeMainRef
.
value
)
{
// 如果当前还未显示吸顶搜索栏,先强制切换状态以稳定布局
if
(
!
isShow
.
value
)
{
isShow
.
value
=
true
;
}
// 使用 nextTick 确保 DOM 状态更新(高度变化生效)后再计算
nextTick
(()
=>
{
const
containerRect
=
homeMainRef
.
value
.
getBoundingClientRect
();
const
elementRect
=
element
.
getBoundingClientRect
();
// 使用 getBoundingClientRect 计算元素相对于容器顶部的绝对距离,不受嵌套布局影响
const
top
=
elementRect
.
top
-
containerRect
.
top
+
homeMainRef
.
value
.
scrollTop
;
homeMainRef
.
value
.
scrollTo
({
top
:
top
,
behavior
:
"smooth"
});
});
}
};
// 返回首页
// 返回首页
const
handleBackHome
=
()
=>
{
const
handleBackHome
=
()
=>
{
router
.
push
({
router
.
push
({
...
@@ -152,6 +222,7 @@ const handleBackHome = () => {
...
@@ -152,6 +222,7 @@ const handleBackHome = () => {
}
}
}
}
.main-content
{
.main-content
{
position
:
relative
;
overflow
:
auto
;
overflow
:
auto
;
width
:
100%
;
width
:
100%
;
height
:
calc
(
100%
-
64px
);
height
:
calc
(
100%
-
64px
);
...
@@ -188,7 +259,11 @@ const handleBackHome = () => {
...
@@ -188,7 +259,11 @@ const handleBackHome = () => {
font-weight
:
400
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
line-height
:
24px
;
color
:
rgb
(
132
,
136
,
142
);
color
:
rgba
(
59
,
65
,
75
,
1
);
&
:
:
placeholder
{
color
:
#a8abb2
;
}
}
}
.search-btn
{
.search-btn
{
margin-right
:
-3px
;
margin-right
:
-3px
;
...
@@ -335,5 +410,132 @@ const handleBackHome = () => {
...
@@ -335,5 +410,132 @@ const handleBackHome = () => {
}
}
}
}
}
}
.search-header
{
width
:
100%
;
height
:
144px
;
background
:
#fff
;
box-shadow
:
0px
0px
15px
0px
rgba
(
22
,
119
,
255
,
0
.1
);
overflow
:
hidden
;
.home-main-header-center
{
margin-top
:
20px
;
margin-left
:
200px
;
width
:
800px
;
height
:
48px
;
border-radius
:
10px
;
box-shadow
:
0px
0px
15px
0px
rgba
(
22
,
119
,
255
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
box-sizing
:
border-box
;
padding
:
1px
;
position
:
relative
;
border
:
1px
solid
transparent
;
display
:
flex
;
align-items
:
center
;
&
:hover
{
border
:
1px
solid
var
(
--
color-main-active
);
}
.search-input
{
border
:
none
;
outline
:
none
;
width
:
800px
;
height
:
46px
;
background-color
:
transparent
;
font-size
:
16px
;
padding
:
12px
16px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
color
:
rgb
(
132
,
136
,
142
);
}
.search-btn-small
{
position
:
absolute
;
right
:
-1px
;
top
:
0px
;
width
:
120px
;
height
:
46px
;
border-radius
:
10px
;
background
:
var
(
--
color-main-active
);
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
cursor
:
pointer
;
.search-icon
{
width
:
18px
;
height
:
18px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.search-text
{
margin-left
:
8px
;
height
:
22px
;
color
:
#fff
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
22px
;
}
}
}
.home-main-header-btn-box
{
margin-top
:
20px
;
margin-left
:
200px
;
display
:
flex
;
gap
:
16px
;
.btn
{
display
:
flex
;
align-items
:
center
;
gap
:
9px
;
width
:
160px
;
height
:
48px
;
border
:
1px
solid
#aed6ff
;
box-sizing
:
border-box
;
border-radius
:
24px
;
background
:
#e7f3ff
;
cursor
:
pointer
;
position
:
relative
;
&
:hover
{
background
:
#cae3fc
;
}
.btn-text
{
width
:
80px
;
color
:
var
(
--
color-main-active
);
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
400
;
line-height
:
48px
;
margin-left
:
36px
;
text-align
:
center
;
}
.btn-icon
{
position
:
absolute
;
top
:
16px
;
right
:
19px
;
width
:
6px
;
height
:
12px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
}
}
}
.scroll-main
{
height
:
calc
(
100%
-
144px
)
!
important
;
}
}
}
</
style
>
</
style
>
src/views/exportControl/index.vue
浏览文件 @
c5add0d2
...
@@ -627,8 +627,7 @@
...
@@ -627,8 +627,7 @@
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
onMounted
,
ref
,
computed
,
reactive
,
shallowRef
,
watch
}
from
"vue"
;
import
{
onMounted
,
ref
,
computed
,
reactive
,
shallowRef
,
watch
,
nextTick
}
from
"vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
const
homeMainRef
=
ref
(
null
);
const
homeMainRef
=
ref
(
null
);
const
{
isShow
}
=
useContainerScroll
(
homeMainRef
);
const
{
isShow
}
=
useContainerScroll
(
homeMainRef
);
...
@@ -686,12 +685,22 @@ import {
...
@@ -686,12 +685,22 @@ import {
const
handleToPosi
=
id
=>
{
const
handleToPosi
=
id
=>
{
const
element
=
document
.
getElementById
(
id
);
const
element
=
document
.
getElementById
(
id
);
if
(
element
&&
homeMainRef
.
value
)
{
if
(
element
&&
homeMainRef
.
value
)
{
const
containerRect
=
homeMainRef
.
value
.
getBoundingClientRect
();
// 1. 如果是从完整搜索框跳转,先强制切换状态稳定布局
const
elementRect
=
element
.
getBoundingClientRect
();
if
(
!
isShow
.
value
)
{
const
top
=
elementRect
.
top
-
containerRect
.
top
+
homeMainRef
.
value
.
scrollTop
;
isShow
.
value
=
true
;
homeMainRef
.
value
.
scrollTo
({
}
top
:
top
,
behavior
:
"smooth"
// 2. 使用 nextTick 等待 DOM 布局(如高度切换)完成后再进行坐标计算
nextTick
(()
=>
{
const
containerRect
=
homeMainRef
.
value
.
getBoundingClientRect
();
const
elementRect
=
element
.
getBoundingClientRect
();
// 使用 getBoundingClientRect 计算元素相对于容器顶部的绝对距离,不受嵌套布局影响
const
top
=
elementRect
.
top
-
containerRect
.
top
+
homeMainRef
.
value
.
scrollTop
;
homeMainRef
.
value
.
scrollTo
({
top
:
top
,
behavior
:
"smooth"
});
});
});
}
}
};
};
...
@@ -2159,6 +2168,7 @@ const handleMediaClick = item => {
...
@@ -2159,6 +2168,7 @@ const handleMediaClick = item => {
overflow-y
:
hidden
;
overflow-y
:
hidden
;
.home-main
{
.home-main
{
position
:
relative
;
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
overflow-y
:
auto
;
overflow-y
:
auto
;
...
...
src/views/exportControl/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
c5add0d2
...
@@ -103,36 +103,37 @@
...
@@ -103,36 +103,37 @@
</div>
</div>
</div>
</div>
<div
class=
"right-title"
>
<div
class=
"right-title"
>
<div
class=
"filter-row"
>
<!--
<div
class=
"filter-left"
>
<el-select
v-model=
"filterEntity"
placeholder=
"受制裁实体"
style=
"width: 184px"
>
<el-option
label=
"受制裁实体"
value=
"1"
/>
</el-select>
</div>
-->
<div
class=
"filter-right"
>
<el-checkbox
v-model=
"onlyChina"
label=
"只看中国实体"
/>
<el-select
v-model=
"filterField"
placeholder=
"全部领域"
style=
"width: 150px; margin: 0 12px 0 16px"
>
<el-option
label=
"全部领域"
value=
""
/>
<el-option
v-for=
"item in domainOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
<el-input
v-model=
"searchKeyword"
placeholder=
"搜索实体"
style=
"width: 150px"
:suffix-icon=
"Search"
/>
</div>
</div>
<div
class=
"stats-row"
>
<div
class=
"stats-row"
>
<
!--
<
div
class=
"tabs"
>
<div
class=
"tabs"
>
<div
class=
"tab-btn"
:class=
"
{ active: activeTab === 'add' }" @click="activeTab = 'add'">新增实体
</div>
<div
class=
"tab-btn"
:class=
"
{ active: activeTab === 'add' }" @click="activeTab = 'add'">新增实体
</div>
<div
class=
"tab-btn"
:class=
"
{ active: activeTab === 'remove' }" @click="activeTab = 'remove'">移除实体
</div>
<div
class=
"tab-btn"
:class=
"
{ active: activeTab === 'remove' }" @click="activeTab = 'remove'">移除实体
</div>
</div>
-->
</div>
<div
class=
"stats-info"
>
<div
class=
"stats-info"
>
<div
class=
"stat-item"
>
<div
class=
"stat-item"
>
<span
class=
"dot red"
></span>
<span
class=
"dot red"
></span>
<span
class=
"text"
>
新增
<span
class=
"num red"
>
{{
addCount
}}
</span>
家 (50%规则涉及
<span
class=
"num red"
>
{{
<span
class=
"text"
>
新增
<span
class=
"num red"
>
{{
addCount
}}
</span>
家 (50%规则涉及
<span
class=
"num red"
>
{{
addRuleCount
}}
</span>
家)
</span>
addRuleCount
}}
</span>
家)
</span>
</div>
</div>
<
!--
<
div
class=
"stat-item"
>
<div
class=
"stat-item"
>
<span
class=
"dot green"
></span>
<span
class=
"dot green"
></span>
<span
class=
"text"
>
移除
<span
class=
"num green"
>
{{
removeCount
}}
</span>
家 (50%规则涉及
<span
class=
"num green"
>
{{
removeRuleCount
}}
</span>
家)
</span>
<span
class=
"text"
>
移除
<span
class=
"num green"
>
{{
removeCount
}}
</span>
家 (50%规则涉及
<span
class=
"num green"
>
{{
removeRuleCount
}}
</span>
家)
</span>
</div>
-->
</div>
</div>
</div>
<div
class=
"filter-row"
>
<div
class=
"filter-left"
>
<!--
<el-select
v-model=
"filterEntity"
placeholder=
"受制裁实体"
style=
"width: 184px"
>
<el-option
label=
"受制裁实体"
value=
"1"
/>
</el-select>
-->
</div>
<div
class=
"filter-right"
>
<el-checkbox
v-model=
"onlyChina"
label=
"只看中国实体"
/>
<el-select
v-model=
"filterField"
placeholder=
"全部领域"
style=
"width: 150px; margin: 0 12px 0 16px"
>
<el-option
label=
"全部领域"
value=
""
/>
<el-option
v-for=
"item in domainOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
<el-input
v-model=
"searchKeyword"
placeholder=
"搜索实体"
style=
"width: 150px"
:suffix-icon=
"Search"
/>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -185,6 +186,7 @@
...
@@ -185,6 +186,7 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
defineProps
,
computed
,
onMounted
,
watch
}
from
"vue"
;
import
{
ref
,
defineProps
,
computed
,
onMounted
,
watch
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
DArrowRight
,
Search
}
from
"@element-plus/icons-vue"
;
import
{
DArrowRight
,
Search
}
from
"@element-plus/icons-vue"
;
import
{
debounce
}
from
"lodash"
;
import
{
debounce
}
from
"lodash"
;
import
title
from
"../../assets/title.png"
import
title
from
"../../assets/title.png"
...
@@ -195,14 +197,10 @@ import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOv
...
@@ -195,14 +197,10 @@ import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOv
// 跳转公司详情页
// 跳转公司详情页
const
handleCompClick
=
item
=>
{
const
handleCompClick
=
item
=>
{
// console.log("item", item);
if
(
!
item
.
entityId
)
{
// const route = router.resolve({
ElMessage
.
warning
(
"暂无数据"
);
// path: "/companyPages",
return
;
// query: {
}
// id: item.entityId
// }
// });
// window.open(route.href, "_blank");
const
curRoute
=
router
.
resolve
({
name
:
"companyPages"
,
params
:
{
id
:
item
.
entityId
}
});
const
curRoute
=
router
.
resolve
({
name
:
"companyPages"
,
params
:
{
id
:
item
.
entityId
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
...
@@ -817,10 +815,9 @@ onMounted(() => {
...
@@ -817,10 +815,9 @@ onMounted(() => {
.filter-row
{
.filter-row
{
display
:
flex
;
display
:
flex
;
// 隐藏使用right,解除使用space-between
justify-content
:
right
;
justify-content
:
right
;
align-items
:
center
;
align-items
:
center
;
margin-bottom
:
20px
;
//
margin-bottom: 20px;
:deep
(
.el-input__inner
)
{
:deep
(
.el-input__inner
)
{
font-size
:
16px
;
font-size
:
16px
;
...
@@ -850,8 +847,8 @@ onMounted(() => {
...
@@ -850,8 +847,8 @@ onMounted(() => {
.stats-row
{
.stats-row
{
display
:
flex
;
display
:
flex
;
// 隐藏使用right,解除使用space-between
margin-bottom
:
20px
;
justify-content
:
right
;
justify-content
:
space-between
;
align-items
:
center
;
align-items
:
center
;
.tabs
{
.tabs
{
...
...
src/views/innovationSubject/index.vue
浏览文件 @
c5add0d2
...
@@ -158,16 +158,16 @@
...
@@ -158,16 +158,16 @@
<div
class=
"box2-main"
>
<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=
"
{
<div
class=
"item-left"
:class=
"
{
itemLeftStatus1: item.s
tatus
=== '一般风险',
itemLeftStatus1: item.s
ignalLevel
=== '一般风险',
itemLeftStatus2: item.s
tatus
=== '重大风险'
itemLeftStatus2: item.s
ignalLevel
=== '重大风险'
}">
}">
{{
item
.
s
tatus
}}
{{
item
.
s
ignalLevel
}}
</div>
</div>
<div
class=
"item-right"
>
<div
class=
"item-right"
>
<div
class=
"text"
>
<div
class=
"text"
>
{{
item
.
t
itle
}}
{{
item
.
signalT
itle
}}
</div>
</div>
<div
class=
"time"
>
{{
item
.
t
ime
}}
</div>
<div
class=
"time"
>
{{
item
.
signalT
ime
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -194,14 +194,14 @@
...
@@ -194,14 +194,14 @@
<div
class=
"box3-main"
>
<div
class=
"box3-main"
>
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
>
<div
class=
"box3-item"
v-for=
"(news, index) in newsList"
:key=
"index"
>
<div
class=
"left"
>
<div
class=
"left"
>
<img
:src=
"news.
img
"
alt=
""
/>
<img
:src=
"news.
newsImage
"
alt=
""
/>
</div>
</div>
<div
class=
"right"
>
<div
class=
"right"
>
<div
class=
"right-top"
>
<div
class=
"right-top"
>
<div
class=
"title"
>
{{
news
.
t
itle
}}
</div>
<div
class=
"title"
>
{{
news
.
newsT
itle
}}
</div>
<div
class=
"time"
>
{{
news
.
from
}}
</div>
<div
class=
"time"
>
{{
news
.
newsDate
+
'.'
+
news
.
newsOrg
}}
</div>
</div>
</div>
<div
class=
"right-footer"
>
{{
news
.
c
ontent
}}
</div>
<div
class=
"right-footer"
>
{{
news
.
newsC
ontent
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -216,14 +216,14 @@
...
@@ -216,14 +216,14 @@
<div
class=
"box4-main"
>
<div
class=
"box4-main"
>
<div
class=
"box4-main-item"
v-for=
"(item, index) in messageList"
:key=
"index"
>
<div
class=
"box4-main-item"
v-for=
"(item, index) in messageList"
:key=
"index"
>
<div
class=
"left"
>
<div
class=
"left"
>
<img
:src=
"item.
img
"
alt=
""
/>
<img
:src=
"item.
personImage
"
alt=
""
/>
</div>
</div>
<div
class=
"right"
>
<div
class=
"right"
>
<div
class=
"right-top"
>
<div
class=
"right-top"
>
<div
class=
"name"
>
{{
item
.
n
ame
}}
</div>
<div
class=
"name"
>
{{
item
.
personN
ame
}}
</div>
<div
class=
"time"
>
{{
item
.
time
}}
</div>
<div
class=
"time"
>
{{
item
.
time
+
'.'
+
item
.
orgName
}}
</div>
</div>
</div>
<div
class=
"content"
>
{{
item
.
content
}}
</div>
<div
class=
"content"
>
{{
item
.
remarks
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -240,7 +240,7 @@
...
@@ -240,7 +240,7 @@
</div>
</div>
</div>
</div>
<div
class=
"select-box"
>
<div
class=
"select-box"
>
<el-select
v-model=
"releaseTime"
placeholder=
"2022"
style=
"width: 120px"
<el-select
v-model=
"releaseTime"
pl
aceholder=
"2022"
style=
"width: 120px"
@
change=
"handleGetOverallRanking"
>
@
change=
"handleGetOverallRanking"
>
<el-option
v-for=
"item in releaseTimeList"
:key=
"item.value"
:label=
"item.label"
<el-option
v-for=
"item in releaseTimeList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
:value=
"item.value"
/>
...
@@ -308,7 +308,8 @@
...
@@ -308,7 +308,8 @@
</div>
</div>
</div>
</div>
<div
class=
"select-box"
>
<div
class=
"select-box"
>
<el-select
v-model=
"releaseTime"
placeholder=
"2022"
style=
"width: 120px"
>
<el-select
v-model=
"releaseTime"
placeholder=
"2022"
style=
"width: 120px"
@
change=
"handleGetResearchField(), handleGetResearchFieldSubjectType()"
>
<el-option
v-for=
"item in releaseTimeList"
:key=
"item.value"
:label=
"item.label"
<el-option
v-for=
"item in releaseTimeList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
:value=
"item.value"
/>
</el-select>
</el-select>
...
@@ -324,7 +325,7 @@
...
@@ -324,7 +325,7 @@
</div>
</div>
<div
class=
"center-footer-layout-content"
>
<div
class=
"center-footer-layout-content"
>
<div
class=
"center-footer-layout-content-item"
>
<div
class=
"center-footer-layout-content-item"
>
<EChart
:option=
"pieOption"
autoresize
:style=
"{ height: '370px', width: '750px' }"
/>
<EChart
:option=
"pieOption
(barOptionData)
"
autoresize
:style=
"{ height: '370px', width: '750px' }"
/>
<div
class=
"center-footer-elx-footer"
>
<div
class=
"center-footer-elx-footer"
>
<img
src=
"./assets/images/ai.png"
alt=
""
/>
<img
src=
"./assets/images/ai.png"
alt=
""
/>
<div
class=
"center-footer-elx-footer-text"
>
<div
class=
"center-footer-elx-footer-text"
>
...
@@ -335,7 +336,8 @@
...
@@ -335,7 +336,8 @@
</div>
</div>
<div
style=
"width: 1px;height: 432px;background: rgba(234, 236, 238, 1);"
></div>
<div
style=
"width: 1px;height: 432px;background: rgba(234, 236, 238, 1);"
></div>
<div
class=
"center-footer-layout-content-item"
>
<div
class=
"center-footer-layout-content-item"
>
<EChart
:option=
"raderOption"
autoresize
:style=
"{ height: '370px', width: '750px' }"
/>
<EChart
:option=
"raderOption(raderOptionData)"
autoresize
:style=
"{ height: '370px', width: '750px' }"
/>
<div
class=
"center-footer-elx-footer"
>
<div
class=
"center-footer-elx-footer"
>
<img
src=
"./assets/images/ai.png"
alt=
""
/>
<img
src=
"./assets/images/ai.png"
alt=
""
/>
<div
class=
"center-footer-elx-footer-text"
>
<div
class=
"center-footer-elx-footer-text"
>
...
@@ -365,7 +367,8 @@
...
@@ -365,7 +367,8 @@
</div>
</div>
<div
class=
"home-main-footer-main"
>
<div
class=
"home-main-footer-main"
>
<div
style=
" width: 1600px;"
>
<div
style=
" width: 1600px;"
>
<div
class=
"footer-main-item"
v-for=
"item in universityList"
:key=
"item.name"
@
click=
"handleClickToDetail"
>
<div
class=
"footer-main-item"
v-for=
"item in universityList"
:key=
"item.name"
@
click=
"handleClickToDetail(item.orgId)"
>
<img
:src=
"item.logoUrl"
style=
"height: 32px; width: 32px;"
/>
<img
:src=
"item.logoUrl"
style=
"height: 32px; width: 32px;"
/>
<div
class=
"item-text"
>
{{ item.orgName }}
</div>
<div
class=
"item-text"
>
{{ item.orgName }}
</div>
<div
class=
"item-text2"
>
{{ item.address }}
</div>
<div
class=
"item-text2"
>
{{ item.address }}
</div>
...
@@ -409,11 +412,16 @@ import getCalendarHeatChart from "./utils/cleandarHeat";
...
@@ -409,11 +412,16 @@ import getCalendarHeatChart from "./utils/cleandarHeat";
import
EChart
from
"@/components/Chart/index.vue"
;
import
EChart
from
"@/components/Chart/index.vue"
;
import
{
pieOption
,
raderOption
}
from
"./utils/charts"
;
import
{
pieOption
,
raderOption
}
from
"./utils/charts"
;
import
{
import
{
getNews
,
getSocialMediaInfo
,
getBillRiskSignal
,
getCountGeography
,
getCountGeography
,
getCountSubjectType
,
getCountSubjectType
,
getSubjectTypeList
,
getSubjectTypeList
,
findListBySubjectTypeId
,
findListBySubjectTypeId
,
getOverallRanking
getOverallRanking
,
getResearchField
,
getResearchFieldSubjectType
}
from
"@/api/innovationSubject/overview.js"
;
}
from
"@/api/innovationSubject/overview.js"
;
import
setChart
from
"@/utils/setChart"
;
import
setChart
from
"@/utils/setChart"
;
...
@@ -555,9 +563,11 @@ const handleGetCountGeography = async () => {
...
@@ -555,9 +563,11 @@ const handleGetCountGeography = async () => {
}
}
};
};
// 点击查看详情
// 点击查看详情
const
handleClickToDetail
=
()
=>
{
const
handleClickToDetail
=
(
university
)
=>
{
const
route
=
router
.
resolve
(
"/InnovativeInstitutions"
);
const
curRoute
=
router
.
resolve
({
name
:
"InnovativeInstitutions"
,
params
:
{
id
:
university
}
});
window
.
open
(
route
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const route = router.resolve("/InnovativeInstitutions");
// window.open(route.href, "_blank");
};
};
// 查看更多风险信号
// 查看更多风险信号
...
@@ -610,7 +620,17 @@ const warningList = ref([
...
@@ -610,7 +620,17 @@ const warningList = ref([
status
:
"重大风险"
status
:
"重大风险"
}
}
]);
]);
const
handleGetBillRiskSignal
=
async
()
=>
{
try
{
const
res
=
await
getBillRiskSignal
();
console
.
log
(
"风险信号"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
warningList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取风险信号error"
,
error
);
}
};
// 新闻资讯
// 新闻资讯
const
newsList
=
ref
([
const
newsList
=
ref
([
{
{
...
@@ -644,6 +664,18 @@ const newsList = ref([
...
@@ -644,6 +664,18 @@ const newsList = ref([
from
:
"11-2 · 福克斯新闻网"
from
:
"11-2 · 福克斯新闻网"
}
}
]);
]);
const
handleGetNews
=
async
()
=>
{
try
{
const
res
=
await
getNews
();
console
.
log
(
"新闻资讯"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
newsList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取新闻资讯error"
,
error
);
}
};
// 社交媒体
// 社交媒体
const
messageList
=
ref
([
const
messageList
=
ref
([
...
@@ -666,7 +698,17 @@ const messageList = ref([
...
@@ -666,7 +698,17 @@ const messageList = ref([
content
:
`提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”。`
content
:
`提出特朗普政府的AI政策强调技术开放与快速应用,但可能以牺牲安全防范为代价,开启了“潘多拉魔盒”。`
}
}
]);
]);
const
handleGetSocialMediaInfo
=
async
()
=>
{
try
{
const
res
=
await
getSocialMediaInfo
();
console
.
log
(
"社交媒体"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
messageList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取社交媒体error"
,
error
);
}
};
// 政令涉及领域
// 政令涉及领域
const
chart1Data
=
ref
([
const
chart1Data
=
ref
([
...
@@ -884,6 +926,43 @@ const releaseTimeList = ref([
...
@@ -884,6 +926,43 @@ const releaseTimeList = ref([
]);
]);
const
categoryList
=
ref
([
"创新主体排名"
,
"研究布局"
]);
const
categoryList
=
ref
([
"创新主体排名"
,
"研究布局"
]);
const
activeCate
=
ref
(
"创新主体排名"
);
const
activeCate
=
ref
(
"创新主体排名"
);
//研究领域布局情况
const
barOptionData
=
ref
([])
const
handleGetResearchField
=
async
()
=>
{
try
{
let
params
=
{
year
:
releaseTime
.
value
,
}
const
res
=
await
getResearchField
(
params
);
console
.
log
(
"研究领域布局情况"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 提取 names 和 values
const
names
=
res
.
data
.
map
(
item
=>
item
.
areaName
);
const
values
=
res
.
data
.
map
(
item
=>
item
.
amount
);
// 或者使用 item.percent,根据需求选择
const
total
=
res
.
data
.
reduce
((
sum
,
item
)
=>
sum
+
item
.
amount
,
0
);
barOptionData
.
value
=
{
names
,
values
,
total
}
}
}
catch
(
error
)
{
console
.
error
(
"获取研究领域布局情况error"
,
error
);
}
};
const
raderOptionData
=
ref
([])
const
handleGetResearchFieldSubjectType
=
async
()
=>
{
try
{
let
params
=
{
year
:
releaseTime
.
value
,
}
const
res
=
await
getResearchFieldSubjectType
(
params
);
console
.
log
(
"研究领域布局情况"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
raderOptionData
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取研究领域布局情况error"
,
error
);
}
};
const
areaList
=
ref
([
const
areaList
=
ref
([
{
{
...
@@ -894,7 +973,6 @@ const areaList = ref([
...
@@ -894,7 +973,6 @@ const areaList = ref([
const
categoryList1
=
ref
([
"研究型大学"
,
"国家实验室"
,
"科技企业"
,
"国防承包商"
]);
const
categoryList1
=
ref
([
"研究型大学"
,
"国家实验室"
,
"科技企业"
,
"国防承包商"
]);
const
activeCate1
=
ref
(
''
);
const
activeCate1
=
ref
(
''
);
//类型列表
//类型列表
const
handleGetSubjectTypeList
=
async
()
=>
{
const
handleGetSubjectTypeList
=
async
()
=>
{
try
{
try
{
...
@@ -959,12 +1037,17 @@ const handleToPosi = id => {
...
@@ -959,12 +1037,17 @@ const handleToPosi = id => {
};
};
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
handleGetNews
()
handleGetSocialMediaInfo
()
handleGetBillRiskSignal
()
await
handleGetSubjectTypeList
()
await
handleGetSubjectTypeList
()
handleGetCountGeography
()
handleGetCountGeography
()
handleGetCountSubjectType
()
handleGetCountSubjectType
()
handleGetOverallRanking
()
handleGetOverallRanking
()
handleFindListBySubjectTypeId
()
handleFindListBySubjectTypeId
()
handleGetResearchField
()
handleGetResearchFieldSubjectType
()
let
chart1
=
getPieChart
(
chart1Data
.
value
,
colorList
);
let
chart1
=
getPieChart
(
chart1Data
.
value
,
colorList
);
setChart
(
chart1
,
"chart1"
);
setChart
(
chart1
,
"chart1"
);
});
});
...
@@ -1621,7 +1704,7 @@ onMounted(async () => {
...
@@ -1621,7 +1704,7 @@ onMounted(async () => {
display
:
flex
;
display
:
flex
;
.text
{
.text
{
width
:
3
48
px
;
width
:
3
10
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-size
:
16px
;
...
...
src/views/innovationSubject/innovativeInstitutions/index.vue
浏览文件 @
c5add0d2
...
@@ -2,14 +2,14 @@
...
@@ -2,14 +2,14 @@
<div
class=
"wrap"
>
<div
class=
"wrap"
>
<div
class=
"header"
>
<div
class=
"header"
>
<div
class=
"header-left"
>
<div
class=
"header-left"
>
<img
src=
"./assets/images/icon-harvard.png
"
alt=
""
/>
<img
:src=
"institutionInfo.logoUrl
"
alt=
""
/>
</div>
</div>
<div
class=
"header-right"
>
<div
class=
"header-right"
>
<div
class=
"title"
>
{{
institutionInfo
.
n
ame
}}
</div>
<div
class=
"title"
>
{{
institutionInfo
.
orgN
ame
}}
</div>
<div
class=
"en-title"
>
{{
institutionInfo
.
enName
}}
</div>
<div
class=
"en-title"
>
{{
institutionInfo
.
orgNameEn
}}
</div>
<div
class=
"desc"
>
{{
institutionInfo
.
desc
}}
</div>
<div
class=
"desc"
>
{{
institutionInfo
.
orgIntroduction
}}
</div>
<div
class=
"tag-box"
>
<div
class=
"tag-box"
>
<div
class=
"tag"
v-for=
"(tag, index) in institutionInfo.tag
L
ist"
:key=
"index"
>
<div
class=
"tag"
v-for=
"(tag, index) in institutionInfo.tag
l
ist"
:key=
"index"
>
{{
tag
}}
{{
tag
}}
</div>
</div>
</div>
</div>
...
@@ -18,17 +18,12 @@
...
@@ -18,17 +18,12 @@
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"@/assets/images/links-icon.png"
alt=
""
/>
<img
src=
"@/assets/images/links-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"text"
>
{{
"查看官网"
}}
</div>
<div
class=
"text"
@
click=
"toURL(institutionInfo.url)"
>
{{
"查看官网"
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"tab-box"
>
<div
class=
"tab-box"
>
<div
<div
class=
"tab"
@
click=
"handleClickTab(item, index)"
:class=
"
{ tabActive: item.active }"
class=
"tab"
v-for="(item, index) in tabList" :key="index">
@
click=
"handleClickTab(item, index)"
:class=
"
{ tabActive: item.active }"
v-for="(item, index) in tabList"
:key="index"
>
{{
item
.
name
}}
{{
item
.
name
}}
</div>
</div>
</div>
</div>
...
@@ -47,6 +42,11 @@ import overView from "./overView/index.vue";
...
@@ -47,6 +42,11 @@ import overView from "./overView/index.vue";
import
researchStrength
from
"./researchStrength/index.vue"
;
import
researchStrength
from
"./researchStrength/index.vue"
;
import
cooperationStatus
from
"./cooperationStatus/index.vue"
;
import
cooperationStatus
from
"./cooperationStatus/index.vue"
;
import
otherStatus
from
"./otherStatus/index.vue"
;
import
otherStatus
from
"./otherStatus/index.vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
getInfo
}
from
"@/api/innovationSubject/overview.js"
;
const
router
=
useRouter
();
const
institutionInfo
=
ref
({
const
institutionInfo
=
ref
({
name
:
"哈佛大学"
,
name
:
"哈佛大学"
,
...
@@ -55,6 +55,23 @@ const institutionInfo = ref({
...
@@ -55,6 +55,23 @@ const institutionInfo = ref({
tagList
:
[
"常春藤"
,
"精英摇篮"
]
tagList
:
[
"常春藤"
,
"精英摇篮"
]
});
});
const
handleGetInfo
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getInfo
(
params
);
console
.
log
(
"创新主体详情"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
institutionInfo
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取创新主体详情error"
,
error
);
}
};
const
toURL
=
(
url
)
=>
{
}
const
activeTabName
=
ref
(
"学校详情"
);
const
activeTabName
=
ref
(
"学校详情"
);
const
tabList
=
ref
([
const
tabList
=
ref
([
...
@@ -83,6 +100,11 @@ const handleClickTab = (val, index) => {
...
@@ -83,6 +100,11 @@ const handleClickTab = (val, index) => {
tabList
.
value
[
index
].
active
=
true
;
tabList
.
value
[
index
].
active
=
true
;
activeTabName
.
value
=
val
.
name
;
activeTabName
.
value
=
val
.
name
;
};
};
onMounted
(
async
()
=>
{
handleGetInfo
()
});
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
@@ -92,7 +114,8 @@ const handleClickTab = (val, index) => {
...
@@ -92,7 +114,8 @@ const handleClickTab = (val, index) => {
background-image
:
url("./assets/images/bg.png")
;
background-image
:
url("./assets/images/bg.png")
;
background-repeat
:
no-repeat
;
background-repeat
:
no-repeat
;
background-size
:
100%
auto
;
background-size
:
100%
auto
;
padding-top
:
16px
;
padding-top
:
16px
;
.header
{
.header
{
width
:
1600px
;
width
:
1600px
;
height
:
200px
;
height
:
200px
;
...
@@ -104,17 +127,21 @@ const handleClickTab = (val, index) => {
...
@@ -104,17 +127,21 @@ const handleClickTab = (val, index) => {
background
:
rgba
(
255
,
255
,
255
,
0
.8
);
background
:
rgba
(
255
,
255
,
255
,
0
.8
);
display
:
flex
;
display
:
flex
;
position
:
relative
;
position
:
relative
;
.header-left
{
.header-left
{
width
:
160px
;
width
:
160px
;
height
:
160px
;
height
:
160px
;
margin
:
20px
;
margin
:
20px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.header-right
{
.header-right
{
margin-left
:
24px
;
margin-left
:
24px
;
.title
{
.title
{
margin-top
:
26px
;
margin-top
:
26px
;
height
:
42px
;
height
:
42px
;
...
@@ -126,6 +153,7 @@ const handleClickTab = (val, index) => {
...
@@ -126,6 +153,7 @@ const handleClickTab = (val, index) => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
}
}
.en-title
{
.en-title
{
margin-top
:
8px
;
margin-top
:
8px
;
height
:
24px
;
height
:
24px
;
...
@@ -137,6 +165,7 @@ const handleClickTab = (val, index) => {
...
@@ -137,6 +165,7 @@ const handleClickTab = (val, index) => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
}
}
.desc
{
.desc
{
margin-top
:
6px
;
margin-top
:
6px
;
height
:
24px
;
height
:
24px
;
...
@@ -148,10 +177,12 @@ const handleClickTab = (val, index) => {
...
@@ -148,10 +177,12 @@ const handleClickTab = (val, index) => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
justify
;
text-align
:
justify
;
}
}
.tag-box
{
.tag-box
{
margin-top
:
14px
;
margin-top
:
14px
;
display
:
flex
;
display
:
flex
;
gap
:
8px
;
gap
:
8px
;
.tag
{
.tag
{
height
:
24px
;
height
:
24px
;
padding
:
0px
8px
;
padding
:
0px
8px
;
...
@@ -166,6 +197,7 @@ const handleClickTab = (val, index) => {
...
@@ -166,6 +197,7 @@ const handleClickTab = (val, index) => {
}
}
}
}
}
}
.header-btn
{
.header-btn
{
position
:
absolute
;
position
:
absolute
;
top
:
26px
;
top
:
26px
;
...
@@ -179,14 +211,17 @@ const handleClickTab = (val, index) => {
...
@@ -179,14 +211,17 @@ const handleClickTab = (val, index) => {
justify-content
:
center
;
justify-content
:
center
;
align-items
:
center
;
align-items
:
center
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon
{
.icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text
{
.text
{
height
:
22px
;
height
:
22px
;
color
:
rgba
(
255
,
255
,
255
,
1
);
color
:
rgba
(
255
,
255
,
255
,
1
);
...
@@ -197,6 +232,7 @@ const handleClickTab = (val, index) => {
...
@@ -197,6 +232,7 @@ const handleClickTab = (val, index) => {
}
}
}
}
}
}
.tab-box
{
.tab-box
{
width
:
1600px
;
width
:
1600px
;
height
:
64px
;
height
:
64px
;
...
@@ -209,6 +245,7 @@ const handleClickTab = (val, index) => {
...
@@ -209,6 +245,7 @@ const handleClickTab = (val, index) => {
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
center
;
align-items
:
center
;
.tab
{
.tab
{
width
:
397px
;
width
:
397px
;
height
:
54px
;
height
:
54px
;
...
@@ -223,10 +260,12 @@ const handleClickTab = (val, index) => {
...
@@ -223,10 +260,12 @@ const handleClickTab = (val, index) => {
font-weight
:
400
;
font-weight
:
400
;
letter-spacing
:
0px
;
letter-spacing
:
0px
;
cursor
:
pointer
;
cursor
:
pointer
;
&
:hover
{
&
:hover
{
background
:
rgba
(
231
,
243
,
255
,
1
);
background
:
rgba
(
231
,
243
,
255
,
1
);
}
}
}
}
.tabActive
{
.tabActive
{
border
:
2px
solid
rgba
(
174
,
214
,
255
,
1
);
border
:
2px
solid
rgba
(
174
,
214
,
255
,
1
);
background
:
rgba
(
231
,
243
,
255
,
1
);
background
:
rgba
(
231
,
243
,
255
,
1
);
...
@@ -235,6 +274,7 @@ const handleClickTab = (val, index) => {
...
@@ -235,6 +274,7 @@ const handleClickTab = (val, index) => {
font-weight
:
700
;
font-weight
:
700
;
}
}
}
}
.main
{
.main
{
width
:
1600px
;
width
:
1600px
;
margin
:
16px
auto
;
margin
:
16px
auto
;
...
...
src/views/innovationSubject/innovativeInstitutions/overView/index.vue
浏览文件 @
c5add0d2
差异被折叠。
点击展开。
src/views/innovationSubject/innovativeInstitutions/researchStrength/index.vue
浏览文件 @
c5add0d2
<!--科研实力-->
<
template
>
<
template
>
<div
class=
"detail-wrap"
>
<div
class=
"detail-wrap"
>
<div
class=
"row"
>
<div
class=
"row"
>
...
@@ -15,7 +16,7 @@
...
@@ -15,7 +16,7 @@
</div>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"barOption"
height=
"100%"
></Echarts>
<Echarts
:option=
"barOption
(patentList)
"
height=
"100%"
></Echarts>
</div>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<div
class=
"AIbox"
>
...
@@ -39,7 +40,7 @@
...
@@ -39,7 +40,7 @@
</div>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"lineChart"
height=
"100%"
></Echarts>
<Echarts
:option=
"lineChart
(paperList)
"
height=
"100%"
></Echarts>
</div>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<div
class=
"AIbox"
>
...
@@ -89,7 +90,7 @@
...
@@ -89,7 +90,7 @@
</div>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"lineChart1"
height=
"100%"
></Echarts>
<Echarts
:option=
"lineChart1
(fundGrowth)
"
height=
"100%"
></Echarts>
</div>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<div
class=
"AIbox"
>
...
@@ -115,7 +116,7 @@
...
@@ -115,7 +116,7 @@
</div>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"pieOption1"
height=
"100%"
></Echarts>
<Echarts
:option=
"pieOption1
(fundFromList)
"
height=
"100%"
></Echarts>
</div>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<div
class=
"AIbox"
>
...
@@ -146,7 +147,7 @@
...
@@ -146,7 +147,7 @@
letter-spacing: 0px;
letter-spacing: 0px;
text-align: right;"
>
(亿美元)
</div>
text-align: right;"
>
(亿美元)
</div>
<div
class=
"statisticsChart"
style=
"height: 298px; "
>
<div
class=
"statisticsChart"
style=
"height: 298px; "
>
<Echarts
:option=
"horizontalBaroption
"
height=
"100%"
></Echarts>
<Echarts
:option=
"horizontalBaroption
(fundToList)"
height=
"100%"
></Echarts>
</div>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<div
class=
"AIbox"
>
...
@@ -164,8 +165,103 @@
...
@@ -164,8 +165,103 @@
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
Echarts
from
"@/components/Chart/index.vue"
;
import
Echarts
from
"@/components/Chart/index.vue"
;
import
{
barOption
,
lineChart
,
raderOption1
,
lineChart1
,
pieOption1
,
horizontalBaroption
}
from
"../../utils/charts.js"
;
import
{
barOption
,
lineChart
,
raderOption1
,
lineChart1
,
pieOption1
,
horizontalBaroption
}
from
"../../utils/charts.js"
;
import
{
getPatentList
,
getPaperList
,
getFundGrowth
,
getFundFromList
,
getFundToList
}
from
"@/api/innovationSubject/overview.js"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
//专利数量统计
const
patentList
=
ref
([])
const
handleGetPatentList
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getPatentList
(
params
);
console
.
log
(
"专利数量统计"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
patentList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取专利数量统计error"
,
error
);
}
};
//论文数量统计
const
paperList
=
ref
([])
const
handleGetPaperList
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getPaperList
(
params
);
console
.
log
(
"论文数量统计"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
paperList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取论文数量统计error"
,
error
);
}
};
//经费增长情况
const
fundGrowth
=
ref
([])
const
handleGetFundGrowth
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getFundGrowth
(
params
);
console
.
log
(
"经费增长情况"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
fundGrowth
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取经费增长情况error"
,
error
);
}
};
//经费来源
const
fundFromList
=
ref
([])
const
handleGetFundFromList
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getFundFromList
(
params
);
console
.
log
(
"经费来源"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
fundFromList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取经费来源error"
,
error
);
}
};
//学院经费分配排序
const
fundToList
=
ref
([])
const
handlegGetFundToList
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getFundToList
(
params
);
console
.
log
(
"学院经费分配排序"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
fundToList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取学院经费分配排序error"
,
error
);
}
};
onMounted
(
async
()
=>
{
handleGetPatentList
()
handleGetPaperList
()
handleGetFundGrowth
()
handleGetFundFromList
()
handlegGetFundToList
()
});
</
script
>
</
script
>
...
@@ -175,16 +271,19 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -175,16 +271,19 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
flex-direction
:
column
;
flex-direction
:
column
;
gap
:
16px
;
gap
:
16px
;
padding-bottom
:
30px
;
padding-bottom
:
30px
;
.box
{
.box
{
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-radius
:
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
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
}
}
.box-header
{
.box-header
{
height
:
56px
;
height
:
56px
;
display
:
flex
;
display
:
flex
;
position
:
relative
;
position
:
relative
;
.header-left
{
.header-left
{
margin-top
:
18px
;
margin-top
:
18px
;
width
:
8px
;
width
:
8px
;
...
@@ -192,6 +291,7 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -192,6 +291,7 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
border-radius
:
0
4px
4px
0
;
border-radius
:
0
4px
4px
0
;
background
:
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
10
,
87
,
166
,
1
);
}
}
.title
{
.title
{
margin-left
:
14px
;
margin-left
:
14px
;
margin-top
:
14px
;
margin-top
:
14px
;
...
@@ -203,11 +303,13 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -203,11 +303,13 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
}
}
.header-btn-box
{
.header-btn-box
{
position
:
absolute
;
position
:
absolute
;
top
:
14px
;
top
:
14px
;
right
:
52px
;
right
:
52px
;
display
:
flex
;
display
:
flex
;
.btn
{
.btn
{
margin-left
:
8px
;
margin-left
:
8px
;
height
:
28px
;
height
:
28px
;
...
@@ -224,12 +326,14 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -224,12 +326,14 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
font-weight
:
400
;
font-weight
:
400
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.btnActive
{
.btnActive
{
border
:
1px
solid
rgba
(
10
,
87
,
166
,
1
);
border
:
1px
solid
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
}
}
}
}
.header-info
{
.header-info
{
height
:
22px
;
height
:
22px
;
position
:
absolute
;
position
:
absolute
;
...
@@ -237,16 +341,19 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -237,16 +341,19 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
top
:
17px
;
top
:
17px
;
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
.icon
{
.icon
{
margin-top
:
3px
;
margin-top
:
3px
;
width
:
14px
;
width
:
14px
;
height
:
14px
;
height
:
14px
;
margin-right
:
8px
;
margin-right
:
8px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text
{
.text
{
height
:
22px
;
height
:
22px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
color
:
rgba
(
95
,
101
,
108
,
1
);
...
@@ -256,6 +363,7 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -256,6 +363,7 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
line-height
:
22px
;
line-height
:
22px
;
}
}
}
}
.header-right
{
.header-right
{
position
:
absolute
;
position
:
absolute
;
top
:
14px
;
top
:
14px
;
...
@@ -263,15 +371,18 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -263,15 +371,18 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
gap
:
8px
;
gap
:
8px
;
.icon
{
.icon
{
width
:
28px
;
width
:
28px
;
height
:
28px
;
height
:
28px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.checkboxRight
{
.checkboxRight
{
color
:
rgba
(
132
,
136
,
142
,
1
);
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-size
:
16px
;
...
@@ -280,7 +391,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -280,7 +391,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
justify
;
text-align
:
justify
;
}
}
.btnRightActive
{
.btnRightActive
{
width
:
80px
;
width
:
80px
;
height
:
28px
;
height
:
28px
;
display
:
flex
;
display
:
flex
;
...
@@ -299,7 +411,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -299,7 +411,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
center
;
text-align
:
center
;
}
}
.btnRight
{
.btnRight
{
width
:
80px
;
width
:
80px
;
height
:
28px
;
height
:
28px
;
display
:
flex
;
display
:
flex
;
...
@@ -320,20 +433,24 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -320,20 +433,24 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
}
}
}
}
}
}
.row
{
.row
{
display
:
flex
;
display
:
flex
;
width
:
1600px
;
width
:
1600px
;
height
:
500px
;
height
:
500px
;
gap
:
16px
;
gap
:
16px
;
.statisticsItem
{
.statisticsItem
{
width
:
792px
;
width
:
792px
;
height
:
500px
;
height
:
500px
;
.statisticsChart
{
.statisticsChart
{
width
:
736px
;
width
:
736px
;
height
:
321px
;
height
:
321px
;
margin
:
20px
auto
;
margin
:
20px
auto
;
}
}
.statisticsAI
{
.statisticsAI
{
margin
:
0
auto
;
margin
:
0
auto
;
width
:
760px
;
width
:
760px
;
height
:
64px
;
height
:
64px
;
...
@@ -345,11 +462,12 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -345,11 +462,12 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
gap
:
10
;
gap
:
10
;
padding
:
6px
12px
6px
12px
;
padding
:
6px
12px
6px
12px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
border-radius
:
4px
;
border-radius
:
4px
;
background
:
rgba
(
246
,
250
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
.AIbox
{
.AIbox
{
width
:
736px
;
width
:
736px
;
height
:
52px
;
height
:
52px
;
/* 自动布局 */
/* 自动布局 */
...
@@ -359,7 +477,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -359,7 +477,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
align-items
:
center
;
align-items
:
center
;
gap
:
13px
;
gap
:
13px
;
padding
:
2px
0px
2px
0px
;
padding
:
2px
0px
2px
0px
;
.AItext
{
.AItext
{
width
:
667px
;
width
:
667px
;
height
:
48px
;
height
:
48px
;
display
:
flex
;
display
:
flex
;
...
@@ -377,13 +496,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
...
@@ -377,13 +496,8 @@ import { barOption, lineChart, raderOption1, lineChart1, pieOption1, horizontalB
}
}
}
}
}
}
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/innovationSubject/utils/charts.js
浏览文件 @
c5add0d2
差异被折叠。
点击展开。
src/views/ruleRestriction/index.vue
浏览文件 @
c5add0d2
<
template
>
<
template
>
<div
class=
"coop-page"
>
<div
class=
"coop-page"
>
<!-- 吸顶简易搜索框 -->
<div
class=
"search-header"
v-show=
"isShow"
>
<div
class=
"home-main-header-center"
>
<input
v-model=
"input"
class=
"search-input"
placeholder=
"搜索规则限制"
/>
<div
class=
"search-btn-small"
@
click=
"handleSearch"
>
<div
class=
"search-icon"
>
<img
src=
"./assets/icons/search-icon.png"
alt=
""
/>
</div>
<div
class=
"search-text"
>
搜索
</div>
</div>
</div>
<div
class=
"home-main-header-btn-box"
>
<div
class=
"btn"
@
click=
"handleToPosi('position1')"
>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position2')"
>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position3')"
>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"btn"
@
click=
"handleToPosi('position4')"
>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<!-- 面包屑 -->
<!-- 面包屑 -->
<div
class=
"breadcrumb"
>
<div
class=
"breadcrumb"
v-show=
"!isShow"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-box"
>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
国家科技安全
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
<div
class=
"breadcrumb-item"
>
>
</div>
...
@@ -11,9 +50,9 @@
...
@@ -11,9 +50,9 @@
</div>
</div>
</div>
</div>
<!-- 主页面 -->
<!-- 主页面 -->
<div
class=
"main-content"
>
<div
class=
"main-content"
ref=
"homeMainRef"
:class=
"
{ 'scroll-main': isShow }"
>
<!-- 搜索栏部分 -->
<!-- 搜索栏部分 -->
<div
class=
"search"
>
<div
class=
"search"
v-show=
"!isShow"
>
<div
class=
"search-main"
>
<div
class=
"search-main"
>
<input
v-model=
"input"
placeholder=
"搜索规则限制"
class=
"search-input"
/>
<input
v-model=
"input"
placeholder=
"搜索规则限制"
class=
"search-input"
/>
<div
class=
"search-btn"
>
<div
class=
"search-btn"
>
...
@@ -40,25 +79,25 @@
...
@@ -40,25 +79,25 @@
</div>
</div>
</div>
-->
</div>
-->
<div
class=
"search-bottom"
>
<div
class=
"search-bottom"
>
<div
class=
"btn"
@
click=
"
scrollToTop
('position1')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position1')"
>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-text"
>
最新动态
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position2')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position2')"
>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-text"
>
咨询要闻
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position3')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position3')"
>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-text"
>
数据总览
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"btn"
@
click=
"
scrollToTop
('position4')"
>
<div
class=
"btn"
@
click=
"
handleToPosi
('position4')"
>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-text"
>
资源库
</div>
<div
class=
"btn-icon"
>
<div
class=
"btn-icon"
>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/arrow-right-icon.png"
alt=
""
/>
...
@@ -99,7 +138,7 @@
...
@@ -99,7 +138,7 @@
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
ref
}
from
"vue"
;
import
{
ref
,
nextTick
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
comTitle
from
"./common/comTitle.vue"
;
import
comTitle
from
"./common/comTitle.vue"
;
import
newData
from
"./components/dataNew/index.vue"
;
import
newData
from
"./components/dataNew/index.vue"
;
...
@@ -107,14 +146,44 @@ import askPage from "./components/askPage/index.vue";
...
@@ -107,14 +146,44 @@ import askPage from "./components/askPage/index.vue";
import
dataSub
from
"./components/dataSub/index.vue"
;
import
dataSub
from
"./components/dataSub/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
resLib
from
"./components/resLib/index.vue"
;
import
scrollToTop
from
"@/utils/scrollToTop"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
// 搜索框
// 搜索框
const
input
=
ref
(
""
);
const
input
=
ref
(
""
);
const
homeMainRef
=
ref
(
null
);
const
{
isShow
}
=
useContainerScroll
(
homeMainRef
);
const
router
=
useRouter
();
const
router
=
useRouter
();
// 搜索功能
const
handleSearch
=
()
=>
{
console
.
log
(
"搜索内容:"
,
input
.
value
);
};
// 锚点跳转
const
handleToPosi
=
id
=>
{
const
element
=
document
.
getElementById
(
id
);
if
(
element
&&
homeMainRef
.
value
)
{
// 如果当前还未显示吸顶搜索栏,先强制切换状态以稳定布局
if
(
!
isShow
.
value
)
{
isShow
.
value
=
true
;
}
// 使用 nextTick 确保 DOM 状态更新(高度变化生效)后再计算
nextTick
(()
=>
{
const
containerRect
=
homeMainRef
.
value
.
getBoundingClientRect
();
const
elementRect
=
element
.
getBoundingClientRect
();
// 使用 getBoundingClientRect 计算元素相对于容器顶部的绝对距离,不受嵌套布局影响
const
top
=
elementRect
.
top
-
containerRect
.
top
+
homeMainRef
.
value
.
scrollTop
;
homeMainRef
.
value
.
scrollTo
({
top
:
top
,
behavior
:
"smooth"
});
});
}
};
// 返回首页
// 返回首页
const
handleBackHome
=
()
=>
{
const
handleBackHome
=
()
=>
{
router
.
push
({
router
.
push
({
...
@@ -157,12 +226,18 @@ const handleBackHome = () => {
...
@@ -157,12 +226,18 @@ const handleBackHome = () => {
}
}
}
}
.main-content
{
.main-content
{
position
:
relative
;
overflow
:
auto
;
overflow
:
auto
;
width
:
100%
;
width
:
100%
;
height
:
calc
(
100%
-
64px
);
height
:
calc
(
100%
-
64px
);
background
:
url("./assets/images/background.png")
;
background
:
url("./assets/images/background.png")
;
background-size
:
100%
100%
;
background-size
:
100%
100%
;
padding
:
44px
160px
30px
160px
;
padding
:
44px
160px
30px
160px
;
&
.scroll-main
{
height
:
calc
(
100%
-
144px
);
}
.search
{
.search
{
width
:
960px
;
width
:
960px
;
height
:
168px
;
height
:
168px
;
...
@@ -184,15 +259,19 @@ const handleBackHome = () => {
...
@@ -184,15 +259,19 @@ const handleBackHome = () => {
.search-input
{
.search-input
{
border
:
none
;
border
:
none
;
outline
:
none
;
outline
:
none
;
width
:
8
00
px
;
width
:
8
38
px
;
height
:
48px
;
height
:
48px
;
background-color
:
transparent
;
background-color
:
transparent
;
font-size
:
1
6
px
;
font-size
:
1
4
px
;
padding
:
12px
16px
;
padding
:
12px
16px
;
font-weight
:
400
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
line-height
:
22px
;
color
:
rgb
(
132
,
136
,
142
);
color
:
rgba
(
59
,
65
,
75
,
1
);
&
:
:
placeholder
{
color
:
#a8abb2
;
}
}
}
.search-btn
{
.search-btn
{
cursor
:
pointer
;
cursor
:
pointer
;
...
@@ -204,53 +283,18 @@ const handleBackHome = () => {
...
@@ -204,53 +283,18 @@ const handleBackHome = () => {
margin-right
:
-3px
;
margin-right
:
-3px
;
border-radius
:
8px
;
border-radius
:
8px
;
background-color
:
rgb
(
5
,
95
,
194
);
background-color
:
rgb
(
5
,
95
,
194
);
font-size
:
1
8
px
;
font-size
:
1
6
px
;
font-weight
:
400
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
font-family
:
"Microsoft YaHei"
;
line-height
:
2
4
px
;
line-height
:
2
2
px
;
color
:
#fff
;
color
:
#fff
;
img
{
img
{
width
:
22
px
;
width
:
18
px
;
height
:
22
px
;
height
:
18
px
;
margin-right
:
8px
;
margin-right
:
8px
;
}
}
}
}
}
}
.search-center
{
width
:
600px
;
height
:
57px
;
margin
:
36px
auto
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
.search-item
{
box-sizing
:
border-box
;
width
:
120px
;
height
:
57px
;
.search-item-num
{
width
:
120px
;
height
:
22px
;
font-size
:
36px
;
font-weight
:
700
;
font-family
:
"Microsoft YaHei"
;
line-height
:
22px
;
color
:
rgb
(
5
,
95
,
194
);
text-align
:
center
;
cursor
:
pointer
;
}
.search-item-name
{
width
:
120px
;
height
:
24px
;
margin-top
:
11px
;
font-size
:
16px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
line-height
:
24px
;
color
:
rgb
(
95
,
101
,
108
);
text-align
:
center
;
}
}
}
.search-bottom
{
.search-bottom
{
width
:
688px
;
width
:
688px
;
height
:
48px
;
height
:
48px
;
...
@@ -339,5 +383,129 @@ const handleBackHome = () => {
...
@@ -339,5 +383,129 @@ const handleBackHome = () => {
}
}
}
}
}
}
.search-header
{
width
:
100%
;
height
:
144px
;
background
:
#fff
;
box-shadow
:
0px
0px
15px
0px
rgba
(
22
,
119
,
255
,
0
.1
);
overflow
:
hidden
;
.home-main-header-center
{
margin-top
:
20px
;
margin-left
:
200px
;
width
:
800px
;
height
:
48px
;
border-radius
:
10px
;
box-shadow
:
0px
0px
15px
0px
rgba
(
22
,
119
,
255
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
box-sizing
:
border-box
;
padding
:
1px
;
position
:
relative
;
display
:
flex
;
align-items
:
center
;
border
:
1px
solid
transparent
;
&
:hover
{
border
:
1px
solid
var
(
--
color-main-active
);
}
.search-input
{
border
:
none
;
outline
:
none
;
width
:
800px
;
height
:
46px
;
background-color
:
transparent
;
font-size
:
14px
;
padding
:
12px
16px
;
font-weight
:
400
;
font-family
:
"Microsoft YaHei"
;
line-height
:
22px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
&
:
:
placeholder
{
color
:
#a8abb2
;
}
}
.search-btn-small
{
position
:
absolute
;
right
:
-1px
;
top
:
0px
;
width
:
120px
;
height
:
46px
;
border-radius
:
10px
;
background
:
var
(
--
color-main-active
);
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
cursor
:
pointer
;
.search-icon
{
width
:
18px
;
height
:
18px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.search-text
{
margin-left
:
8px
;
height
:
22px
;
color
:
#fff
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
22px
;
}
}
}
.home-main-header-btn-box
{
margin-top
:
20px
;
margin-left
:
200px
;
display
:
flex
;
gap
:
16px
;
.btn
{
display
:
flex
;
align-items
:
center
;
gap
:
9px
;
width
:
160px
;
height
:
48px
;
border
:
1px
solid
#aed6ff
;
box-sizing
:
border-box
;
border-radius
:
24px
;
background
:
#e7f3ff
;
cursor
:
pointer
;
position
:
relative
;
&
:hover
{
background
:
#cae3fc
;
}
.btn-text
{
width
:
80px
;
color
:
var
(
--
color-main-active
);
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
400
;
line-height
:
48px
;
margin-left
:
36px
;
text-align
:
center
;
}
.btn-icon
{
position
:
absolute
;
top
:
16px
;
right
:
19px
;
width
:
6px
;
height
:
12px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
}
}
}
}
}
</
style
>
</
style
>
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
浏览文件 @
c5add0d2
...
@@ -98,11 +98,11 @@
...
@@ -98,11 +98,11 @@
<div
class=
"bottom-main"
>
<div
class=
"bottom-main"
>
<div
class=
"left"
>
<div
class=
"left"
>
<div
class=
"select-box"
>
<div
class=
"select-box"
>
<div
class=
"select-box-header"
>
<div
class=
"select-box-header"
style=
" display: flex;"
>
<div
class=
"icon"
></div>
<div
class=
"icon"
></div>
<div
class=
"title"
>
{{
"科技领域"
}}
</div>
<div
class=
"title"
>
{{
"科技领域"
}}
</div>
</div>
</div>
<div
class=
"select-main"
>
<div
class=
"select-main"
style=
"padding: 25px;"
>
<div
class=
"checkbox-group"
>
<div
class=
"checkbox-group"
>
<!--
<el-checkbox
v-for=
"(item, index) in areaList"
:key=
"index"
v-model=
"selectedAreaList"
:label=
"item"
<!--
<el-checkbox
v-for=
"(item, index) in areaList"
:key=
"index"
v-model=
"selectedAreaList"
:label=
"item"
class=
"filter-checkbox"
>
class=
"filter-checkbox"
>
...
@@ -918,6 +918,7 @@ onMounted(() => {
...
@@ -918,6 +918,7 @@ onMounted(() => {
.select-box
{
.select-box
{
margin-top
:
21px
;
margin-top
:
21px
;
.paixu-btn
{
.paixu-btn
{
display
:
flex
;
display
:
flex
;
width
:
120px
;
width
:
120px
;
...
@@ -970,6 +971,26 @@ onMounted(() => {
...
@@ -970,6 +971,26 @@ onMounted(() => {
}
}
}
}
}
}
.icon
{
margin-top
:
4px
;
width
:
8px
;
height
:
16px
;
background
:
var
(
--
color-main-active
);
border-radius
:
0
4px
4px
0
;
}
.title
{
color
:
rgba
(
5
,
95
,
194
,
1
);
margin-left
:
17px
;
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
26px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
}
}
}
...
...
src/views/thinkTank/assets/images/box6-header-icon.png
查看替换文件 @
93476144
浏览文件 @
c5add0d2
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论