Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
1dfb6405
提交
1dfb6405
authored
12月 19, 2025
作者:
huhuiqing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
政策追踪
上级
0bceced4
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
367 行增加
和
78 行删除
+367
-78
overview.js
src/api/thinkTank/overview.js
+48
-0
index.vue
src/views/thinkTank/ReportDetail/index.vue
+30
-6
index.vue
src/views/thinkTank/ReportDetail/policyTracking/index.vue
+104
-18
index.vue
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
+177
-47
index.vue
src/views/thinkTank/ThinkTankDetail/index.vue
+1
-1
index.vue
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
+6
-5
index.vue
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
+1
-1
没有找到文件。
src/api/thinkTank/overview.js
浏览文件 @
1dfb6405
...
...
@@ -190,3 +190,51 @@ export function getThinkTankPerson(params) {
url
:
`/api/thinkTankInfo/person/
${
params
}
`
,
})
}
//获取报告内容摘要
export
function
getThinkTankReportAbstract
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/abstract/
${
params
}
`
,
})
}
//获取报告主要观点
export
function
getThinkTankReportContent
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/content/
${
params
}
`
,
})
}
//获取涉及科技领域
export
function
getThinkTankReportIndustry
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/industry/
${
'Rand_RRA3572-1'
}
`
,
})
}
//获取科技领域词云
export
function
getThinkTankReportIndustryCloud
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/industry/
${
params
.
id
}
/
${
params
.
industryId
}
`
,
})
}
//获取政策建议落实情况
export
function
getThinkTankReportPolicy
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/policy/
${
params
}
`
,
})
}
//获取相关政策动态
export
function
getThinkTankReportPolicyAction
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/policyAction/
${
params
}
`
,
})
}
src/views/thinkTank/ReportDetail/index.vue
浏览文件 @
1dfb6405
...
...
@@ -86,7 +86,8 @@ const switchTab = name => {
<
style
lang=
"scss"
scoped
>
.wrap
{
width
:
1920px
;
height
:
984px
;
// height: 984px;
.header
{
width
:
1920px
;
height
:
188px
;
...
...
@@ -95,12 +96,14 @@ const switchTab = name => {
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.header-top
{
margin-top
:
20px
;
margin-left
:
248px
;
display
:
flex
;
justify-content
:
space-between
;
margin-right
:
160px
;
.header-top-left
{
.title
{
height
:
26px
;
...
...
@@ -112,6 +115,7 @@ const switchTab = name => {
letter-spacing
:
0px
;
text-align
:
left
;
}
.en-title
{
height
:
24px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
...
...
@@ -122,10 +126,12 @@ const switchTab = name => {
letter-spacing
:
0px
;
text-align
:
left
;
}
.tag-box
{
margin-top
:
11px
;
display
:
flex
;
gap
:
8px
;
.tag
{
height
:
26px
;
padding
:
0
8px
;
...
...
@@ -143,6 +149,7 @@ const switchTab = name => {
}
}
}
.header-top-right
{
.name
{
height
:
24px
;
...
...
@@ -154,6 +161,7 @@ const switchTab = name => {
letter-spacing
:
0px
;
text-align
:
right
;
}
.time
{
height
:
24px
;
margin-top
:
5px
;
...
...
@@ -167,6 +175,7 @@ const switchTab = name => {
}
}
}
.header-bottom
{
margin
:
0
auto
;
margin-top
:
30px
;
...
...
@@ -174,13 +183,15 @@ const switchTab = name => {
height
:
48px
;
display
:
flex
;
justify-content
:
space-between
;
.tab-box
{
width
:
224px
;
height
:
48px
;
display
:
flex
;
gap
:
24px
;
.tab
{
width
:
9
2
px
;
width
:
9
4
px
;
height
:
48px
;
display
:
flex
;
align-items
:
center
;
...
...
@@ -188,14 +199,17 @@ const switchTab = name => {
gap
:
4px
;
cursor
:
pointer
;
border-bottom
:
2px
solid
transparent
;
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.text
{
height
:
24px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
...
...
@@ -204,18 +218,22 @@ const switchTab = name => {
font-weight
:
400
;
line-height
:
24px
;
}
.textActive
{
color
:
rgba
(
5
,
95
,
194
,
1
);
font-weight
:
700
;
}
}
.tabActive
{
border-bottom
:
2px
solid
rgba
(
5
,
95
,
194
,
1
);
}
}
.btn-box
{
display
:
flex
;
gap
:
12px
;
.btn
{
width
:
120px
;
height
:
36px
;
...
...
@@ -227,16 +245,19 @@ const switchTab = name => {
align-items
:
center
;
justify-content
:
center
;
gap
:
8px
;
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.text
{
width
:
6
4
px
;
width
:
6
6
px
;
height
:
22px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
...
...
@@ -247,17 +268,20 @@ const switchTab = name => {
text-align
:
center
;
}
}
.btn1
{
border-radius
:
6px
;
background
:
var
(
--
color-main-active
);
.text
{
color
:
rgba
(
255
,
255
,
255
,
1
);
.text
{
color
:
rgba
(
255
,
255
,
255
,
1
);
}
}
}
}
}
.main
{
.main
{
width
:
100%
;
}
}
...
...
src/views/thinkTank/ReportDetail/policyTracking/index.vue
浏览文件 @
1dfb6405
...
...
@@ -17,10 +17,10 @@
<div
class=
"box1-main"
>
<div
class=
"box1-item"
v-for=
"(item, index) in box1Data"
:key=
"index"
>
<div
class=
"left"
>
{{
i
tem
.
id
}}
{{
i
ndex
+
1
}}
</div>
<div
class=
"center"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"title"
>
{{
item
.
content
}}
</div>
<div
class=
"tag-box"
>
<div
class=
"tag"
v-for=
"(val, idx) in item.tagList"
:key=
"idx"
>
{{
val
}}
...
...
@@ -28,8 +28,15 @@
</div>
<div
class=
"file-box"
>
<div
class=
"file-item"
v-for=
"(vall, idxx) in item.fileList"
:key=
"idxx"
>
<div
class=
"file-item-left"
>
{{
vall
.
type
}}
</div>
<div
class=
"file-item-center"
>
{{
vall
.
name
}}
</div>
<div
class=
"file-item-left"
>
法案
</div>
<div
class=
"file-item-center"
>
{{
vall
.
relationBillsList
}}
</div>
<div
class=
"file-item-right"
>
<img
src=
"@/assets/images/icon-right-circle.png"
alt=
""
/>
</div>
</div>
<div
class=
"file-item"
v-for=
"(vall, idxx) in item.fileList"
:key=
"idxx"
>
<div
class=
"file-item-left"
>
政令
</div>
<div
class=
"file-item-center"
>
{{
vall
.
relationAdList
}}
</div>
<div
class=
"file-item-right"
>
<img
src=
"@/assets/images/icon-right-circle.png"
alt=
""
/>
</div>
...
...
@@ -46,14 +53,7 @@
</div>
</div>
</div>
<div
class=
"box1-footer"
>
<div
class=
"info"
>
{{
`共105项调查`
}}
</div>
<div
class=
"page-box"
>
<el-pagination
:page-size=
"10"
background
layout=
"prev, pager, next"
:total=
"120"
/>
</div>
</div>
</div>
</div>
...
...
@@ -79,13 +79,13 @@
<div
class=
"line"
v-if=
"index
<
5
"
></div>
</div>
<div
class=
"box2-item-center"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"content"
>
{{
item
.
content
}}
</div>
<div
class=
"title"
>
{{
item
.
sjbt
}}
</div>
<div
class=
"content"
>
{{
item
.
sjnr
}}
</div>
</div>
<div
class=
"box2-item-right"
>
<div
class=
"time"
>
{{
item
.
time
}}
</div>
<div
class=
"img-box"
>
<img
:src=
"item.im
g
"
alt=
""
/>
<img
:src=
"item.im
ageUrl
"
alt=
""
/>
</div>
</div>
</div>
...
...
@@ -102,7 +102,12 @@
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
getThinkTankReportPolicy
,
getThinkTankReportPolicyAction
}
from
"@/api/thinkTank/overview"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
// 政策建议落实情况
const
box1Data
=
ref
([
{
...
...
@@ -257,6 +262,19 @@ const box1Data = ref([
}
]);
const
handleGetThinkTankReportPolicy
=
async
()
=>
{
try
{
const
res
=
await
getThinkTankReportPolicy
(
router
.
currentRoute
.
_value
.
params
.
id
);
console
.
log
(
"政策建议落实情况"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
box1Data
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取政策建议落实情况rror"
,
error
);
}
};
// 相关政策动态
const
box2Data
=
ref
([
{
...
...
@@ -296,6 +314,24 @@ const box2Data = ref([
img
:
1
}
]);
const
handleGetThinkTankReportPolicyAction
=
async
()
=>
{
try
{
const
res
=
await
getThinkTankReportPolicyAction
(
router
.
currentRoute
.
_value
.
params
.
id
);
console
.
log
(
"相关政策动态"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
box2Data
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取相关政策动态rror"
,
error
);
}
};
onMounted
(
async
()
=>
{
handleGetThinkTankReportPolicy
()
handleGetThinkTankReportPolicyAction
()
});
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -303,11 +339,14 @@ const box2Data = ref([
display
:
flex
;
justify-content
:
center
;
gap
:
16px
;
height
:
100%
;
.box-header
{
width
:
100%
;
height
:
50px
;
display
:
flex
;
position
:
relative
;
.header-left
{
margin-top
:
18px
;
width
:
8px
;
...
...
@@ -315,6 +354,7 @@ const box2Data = ref([
border-radius
:
0
4px
4px
0
;
background
:
var
(
--
color-main-active
);
}
.title
{
margin-left
:
14px
;
margin-top
:
14px
;
...
...
@@ -325,6 +365,7 @@ const box2Data = ref([
font-size
:
20px
;
font-weight
:
700
;
}
.header-btn-box
{
position
:
absolute
;
top
:
15px
;
...
...
@@ -332,6 +373,7 @@ const box2Data = ref([
display
:
flex
;
justify-content
:
flex-end
;
gap
:
8px
;
.btn
{
height
:
28px
;
padding
:
0
8px
;
...
...
@@ -345,11 +387,13 @@ const box2Data = ref([
font-weight
:
400
;
line-height
:
28px
;
}
.btnActive
{
color
:
var
(
--
color-main-active
);
border
:
1px
solid
var
(
--
color-main-active
);
}
}
.header-right
{
position
:
absolute
;
top
:
14px
;
...
...
@@ -357,9 +401,11 @@ const box2Data = ref([
display
:
flex
;
justify-content
:
flex-end
;
gap
:
4px
;
.icon
{
width
:
28px
;
height
:
28px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -367,26 +413,32 @@ const box2Data = ref([
}
}
}
.left
{
height
:
1442px
;
height
:
100%
;
.box1
{
margin-top
:
16px
;
width
:
1104px
;
height
:
1
405px
;
height
:
1
00%
;
margin-bottom
:
16px
;
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.box1-main
{
width
:
1056px
;
height
:
1280px
;
margin
:
0
auto
;
overflow
:
auto
;
.box1-item
{
height
:
128px
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
display
:
flex
;
position
:
relative
;
.left
{
width
:
28px
;
height
:
28px
;
...
...
@@ -402,8 +454,10 @@ const box2Data = ref([
font-weight
:
400
;
letter-spacing
:
0px
;
}
.center
{
margin-left
:
18px
;
.title
{
margin-top
:
16px
;
height
:
24px
;
...
...
@@ -415,10 +469,12 @@ const box2Data = ref([
letter-spacing
:
0px
;
text-align
:
left
;
}
.tag-box
{
display
:
flex
;
margin-top
:
7px
;
gap
:
8px
;
.tag
{
height
:
22px
;
padding
:
0
8px
;
...
...
@@ -435,10 +491,12 @@ const box2Data = ref([
text-align
:
left
;
}
}
.file-box
{
margin-top
:
7px
;
display
:
flex
;
gap
:
8px
;
.file-item
{
height
:
32px
;
padding
:
0
8px
;
...
...
@@ -446,6 +504,7 @@ const box2Data = ref([
background
:
rgba
(
246
,
250
,
255
,
1
);
display
:
flex
;
align-items
:
center
;
.file-item-left
{
height
:
22px
;
padding
:
0
4px
;
...
...
@@ -460,6 +519,7 @@ const box2Data = ref([
letter-spacing
:
0px
;
text-align
:
left
;
}
.file-item-center
{
margin-left
:
12px
;
color
:
var
(
--
color-main-active
);
...
...
@@ -470,10 +530,12 @@ const box2Data = ref([
letter-spacing
:
0px
;
text-align
:
left
;
}
.file-item-right
{
margin-left
:
12px
;
width
:
20px
;
height
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -482,6 +544,7 @@ const box2Data = ref([
}
}
}
.right
{
position
:
absolute
;
top
:
16px
;
...
...
@@ -491,6 +554,7 @@ const box2Data = ref([
justify-content
:
flex-end
;
align-items
:
center
;
gap
:
9px
;
.text
{
height
:
24px
;
font-family
:
Microsoft
YaHei
;
...
...
@@ -501,9 +565,11 @@ const box2Data = ref([
letter-spacing
:
0px
;
text-align
:
right
;
}
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -512,12 +578,14 @@ const box2Data = ref([
}
}
}
.box1-footer
{
height
:
50px
;
display
:
flex
;
justify-content
:
space-between
;
box-sizing
:
border-box
;
padding
:
20px
;
.info
{
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
...
...
@@ -539,24 +607,30 @@ const box2Data = ref([
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.box2-main
{
margin
:
0
auto
;
margin-top
:
15px
;
width
:
459px
;
height
:
654px
;
overflow
:
hidden
;
.box2-item
{
height
:
109px
;
display
:
flex
;
.box2-item-left
{
.point
{
margin-left
:
14px
;
width
:
10px
;
height
:
10px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.line
{
width
:
2px
;
height
:
109px
;
...
...
@@ -564,8 +638,10 @@ const box2Data = ref([
margin-left
:
18px
;
}
}
.box2-item-center
{
margin-left
:
11px
;
.title
{
width
:
314px
;
height
:
24px
;
...
...
@@ -580,6 +656,7 @@ const box2Data = ref([
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.content
{
width
:
314px
;
height
:
48px
;
...
...
@@ -593,8 +670,10 @@ const box2Data = ref([
overflow
:
hidden
;
}
}
.box2-item-right
{
margin-left
:
18px
;
.time
{
height
:
22px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
...
...
@@ -608,11 +687,13 @@ const box2Data = ref([
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.img-box
{
margin-top
:
14px
;
width
:
78px
;
height
:
50px
;
border-radius
:
2px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -621,6 +702,7 @@ const box2Data = ref([
}
}
}
.box2-footer
{
margin
:
10px
auto
;
width
:
108px
;
...
...
@@ -630,9 +712,11 @@ const box2Data = ref([
justify-content
:
center
;
gap
:
4px
;
cursor
:
pointer
;
&
:hover
{
background
:
var
(
--
color-bg-hover
);
}
.text
{
color
:
var
(
--
color-main-active
);
height
:
22px
;
...
...
@@ -642,9 +726,11 @@ const box2Data = ref([
line-height
:
22px
;
letter-spacing
:
0px
;
}
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
浏览文件 @
1dfb6405
...
...
@@ -39,14 +39,9 @@
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main-tag-box"
>
<div
class=
"tag"
:class=
"
{ tagActive: activeArea === item }"
v-for="(item, index) in areaList"
:key="index"
@click="handleClickArea(item)"
>
{{
item
}}
<div
class=
"tag"
:class=
"
{ tagActive: activeArea === item }" v-for="(item, index) in areaList" :key="index"
@click="handleClickArea(item.status)">
{{
item
.
industryName
}}
</div>
</div>
<div
class=
"box2-content"
id=
"box2Chart"
></div>
...
...
@@ -82,11 +77,14 @@
{{
item
.
id
}}
</div>
<div
class=
"center"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"desc"
>
{{
item
.
desc
}}
</div>
<div
class=
"title"
>
{{
item
.
content
}}
</div>
<div
class=
"desc"
>
{{
item
.
econtent
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"tag"
v-for=
"(val, idx) in item.tagList"
:key=
"idx"
>
<div
class=
"tag"
v-for=
"(val, idx) in item.hylyList"
:key=
"idx"
>
{{
val
.
name
}}
</div>
<div
class=
"tag"
v-for=
"(val, idx) in item.serialNum"
:key=
"idx"
>
{{
val
.
name
}}
</div>
</div>
...
...
@@ -126,53 +124,116 @@
import
{
ref
,
onMounted
}
from
"vue"
;
import
setChart
from
"@/utils/setChart"
;
import
getWordCloudChart
from
"./utils/worldCloudChart"
;
import
{
getThinkTankReportAbstract
,
getThinkTankReportContent
,
getThinkTankReportIndustry
,
getThinkTankReportIndustryCloud
}
from
"@/api/thinkTank/overview"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
// 内容摘要
const
box1Data
=
ref
(
`包括经济竞争在内的美中竞争自2017年以来一直在定义美国外交政策。这两个经济体是世界上第一和第二大国家经济体,并且深深交织在一起。改变关系,无论多么必要,可能是昂贵的。因此,美国面临着一项挑战,确保其经济在耦合的战略竞争条件下满足国家的需求。
为了应对这一挑战,兰德大学的研究人员对美中竞争进行了经济和制度分析,进行了参与式的远见练习,以了解确保美国经济健康的长期路径,并创建了两个经济竞争游戏,探索多个国家在相互交流的同时确保经济健康的动态...`
);
//获取内容摘要
const
handleGetThinkTankReportAbstract
=
async
()
=>
{
try
{
const
res
=
await
getThinkTankReportAbstract
(
router
.
currentRoute
.
_value
.
params
.
id
);
console
.
log
(
"内容摘要"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
box1Data
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取内容摘要error"
,
error
);
}
};
// 涉及科技领域
const
areaList
=
ref
([
"人工智能"
,
"半导体与高科技"
,
"经济与贸易"
,
"地缘政治"
,
"军事与安全"
,
"国际规则与多边体系"
]);
const
activeArea
=
ref
(
"人工智能"
);
const
areaList
=
ref
([]);
const
activeArea
=
ref
(
6
);
const
handleClickArea
=
area
=>
{
activeArea
.
value
=
area
;
handleGetThinkTankReportIndustryCloud
()
};
const
box2Data
=
ref
([
{
name
:
"通用人工智能"
,
value
:
100
},
{
name
:
"AI芯片"
,
value
:
66
},
{
name
:
"计算能力又是"
,
value
:
72
},
{
name
:
"基准测试"
,
value
:
88
},
{
name
:
"出口管制"
,
value
:
78
},
{
name
:
"军事AI"
,
value
:
85
},
{
name
:
"生态系统"
,
value
:
88
},
{
name
:
"模型能力"
,
value
:
89
}
//
{
//
name: "通用人工智能",
//
value: 100
//
},
//
{
//
name: "AI芯片",
//
value: 66
//
},
//
{
//
name: "计算能力又是",
//
value: 72
//
},
//
{
//
name: "基准测试",
//
value: 88
//
},
//
{
//
name: "出口管制",
//
value: 78
//
},
//
{
//
name: "军事AI",
//
value: 85
//
},
//
{
//
name: "生态系统",
//
value: 88
//
},
//
{
//
name: "模型能力",
//
value: 89
//
}
]);
//获取科技领域词云
const
handleGetThinkTankReportIndustryCloud
=
async
()
=>
{
try
{
const
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
,
industryId
:
activeArea
.
value
}
const
res
=
await
getThinkTankReportIndustryCloud
(
params
);
console
.
log
(
"科技领域词云"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
data
=
[]
res
.
data
.
map
(
item
=>
{
data
.
push
(
{
name
:
item
.
clause
,
value
:
item
.
count
})
box2Data
.
value
=
data
const
box2Chart
=
getWordCloudChart
(
box2Data
.
value
);
setChart
(
box2Chart
,
"box2Chart"
);
})
}
}
catch
(
error
)
{
console
.
error
(
"获取科技领域词云error"
,
error
);
}
};
//涉及科技领域
const
handleGetThinkTankReportIndustry
=
async
()
=>
{
try
{
const
res
=
await
getThinkTankReportIndustry
(
router
.
currentRoute
.
_value
.
params
.
id
);
console
.
log
(
"涉及科技领域"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
areaList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取涉及科技领域error"
,
error
);
}
};
// 主要观点
const
majorOpinions
=
ref
([
{
...
...
@@ -315,9 +376,25 @@ const majorOpinions = ref([
}
]);
//获取报告主要观点
const
handleGetThinkTankReportContent
=
async
()
=>
{
try
{
const
res
=
await
getThinkTankReportContent
(
router
.
currentRoute
.
_value
.
params
.
id
);
console
.
log
(
"主要观点"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
majorOpinions
.
value
=
res
.
data
.
content
}
}
catch
(
error
)
{
console
.
error
(
"获取主要观点error"
,
error
);
}
};
onMounted
(()
=>
{
const
box2Chart
=
getWordCloudChart
(
box2Data
.
value
);
setChart
(
box2Chart
,
"box2Chart"
);
handleGetThinkTankReportAbstract
()
handleGetThinkTankReportContent
()
handleGetThinkTankReportIndustry
()
handleGetThinkTankReportIndustryCloud
()
});
</
script
>
...
...
@@ -326,11 +403,13 @@ onMounted(() => {
display
:
flex
;
justify-content
:
center
;
gap
:
16px
;
.box-header
{
width
:
100%
;
height
:
50px
;
display
:
flex
;
position
:
relative
;
.header-left
{
margin-top
:
18px
;
width
:
8px
;
...
...
@@ -338,6 +417,7 @@ onMounted(() => {
border-radius
:
0
4px
4px
0
;
background
:
var
(
--
color-main-active
);
}
.title
{
margin-left
:
14px
;
margin-top
:
14px
;
...
...
@@ -348,6 +428,7 @@ onMounted(() => {
font-size
:
20px
;
font-weight
:
700
;
}
.header-btn-box
{
position
:
absolute
;
top
:
15px
;
...
...
@@ -355,6 +436,7 @@ onMounted(() => {
display
:
flex
;
justify-content
:
flex-end
;
gap
:
8px
;
.btn
{
height
:
28px
;
padding
:
0
8px
;
...
...
@@ -368,11 +450,13 @@ onMounted(() => {
font-weight
:
400
;
line-height
:
28px
;
}
.btnActive
{
color
:
var
(
--
color-main-active
);
border
:
1px
solid
var
(
--
color-main-active
);
}
}
.header-right
{
position
:
absolute
;
top
:
14px
;
...
...
@@ -380,9 +464,11 @@ onMounted(() => {
display
:
flex
;
justify-content
:
flex-end
;
gap
:
4px
;
.icon
{
width
:
28px
;
height
:
28px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -390,6 +476,7 @@ onMounted(() => {
}
}
}
.left
{
.box1
{
margin-top
:
17px
;
...
...
@@ -399,10 +486,12 @@ onMounted(() => {
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.box1-main
{
margin
:
5px
auto
;
width
:
428px
;
height
:
282px
;
/* 9行 * 30px/行 = 270px,这里可以稍微调整 */
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
...
...
@@ -410,7 +499,16 @@ onMounted(() => {
line-height
:
30px
;
letter-spacing
:
0px
;
text-align
:
justify
;
display
:
-
webkit-box
;
/* 使用Webkit的弹性盒模型 */
-webkit-box-orient
:
vertical
;
/* 垂直排列 */
-webkit-line-clamp
:
9
;
/* 限制显示9行 */
overflow
:
hidden
;
/* 隐藏超出部分 */
}
.box1-footer
{
margin
:
0
auto
;
width
:
108px
;
...
...
@@ -420,9 +518,11 @@ onMounted(() => {
justify-content
:
center
;
gap
:
4px
;
cursor
:
pointer
;
&
:hover
{
background
:
var
(
--
color-bg-hover
);
}
.text
{
height
:
22px
;
color
:
var
(
--
color-main-active
);
...
...
@@ -433,9 +533,11 @@ onMounted(() => {
letter-spacing
:
0px
;
text-align
:
left
;
}
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
@@ -443,6 +545,7 @@ onMounted(() => {
}
}
}
.box2
{
margin-top
:
16px
;
width
:
480px
;
...
...
@@ -451,10 +554,12 @@ onMounted(() => {
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
.box2-main
{
width
:
430px
;
height
:
320px
;
margin
:
0
auto
;
.box2-main-tag-box
{
display
:
flex
;
flex-wrap
:
wrap
;
...
...
@@ -462,6 +567,7 @@ onMounted(() => {
box-sizing
:
border-box
;
padding
:
8px
0
;
gap
:
8px
;
.tag
{
height
:
28px
;
line-height
:
28px
;
...
...
@@ -472,12 +578,14 @@ onMounted(() => {
background
:
rgba
(
255
,
255
,
255
,
1
);
cursor
:
pointer
;
}
.tagActive
{
color
:
var
(
--
color-main-active
);
border
:
1px
solid
var
(
--
color-main-active
);
background
:
rgba
(
231
,
243
,
255
,
1
);
}
}
.box2-content
{
width
:
430px
;
height
:
231px
;
...
...
@@ -489,8 +597,10 @@ onMounted(() => {
}
}
}
.right
{
margin-top
:
17px
;
.box3
{
width
:
1103px
;
height
:
946px
;
...
...
@@ -499,13 +609,16 @@ onMounted(() => {
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
position
:
relative
;
.box3-main
{
width
:
1057px
;
height
:
800px
;
margin
:
0
auto
;
.box3-main-main
{
height
:
720px
;
overflow
:
hidden
;
.box3-item
{
width
:
1057px
;
height
:
72px
;
...
...
@@ -513,6 +626,7 @@ onMounted(() => {
border-radius
:
4px
;
display
:
flex
;
position
:
relative
;
.left
{
margin-top
:
24px
;
margin-left
:
15px
;
...
...
@@ -528,12 +642,14 @@ onMounted(() => {
font-weight
:
400
;
letter-spacing
:
0px
;
}
.center
{
width
:
770px
;
margin-left
:
13px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
.title
{
margin-top
:
12px
;
height
:
26px
;
...
...
@@ -545,6 +661,7 @@ onMounted(() => {
letter-spacing
:
0px
;
text-align
:
left
;
}
.desc
{
height
:
22px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
...
...
@@ -556,6 +673,7 @@ onMounted(() => {
text-align
:
left
;
}
}
.right
{
margin-top
:
26px
;
width
:
180px
;
...
...
@@ -563,6 +681,7 @@ onMounted(() => {
display
:
flex
;
gap
:
8px
;
justify-content
:
flex-end
;
.tag
{
height
:
22px
;
padding
:
0
8px
;
...
...
@@ -577,29 +696,34 @@ onMounted(() => {
line-height
:
20px
;
}
}
.more
{
width
:
16px
;
height
:
16px
;
position
:
absolute
;
top
:
28px
;
right
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
}
.box3-item
:nth-child
(
2n-1
)
{
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
background
:
rgba
(
247
,
248
,
249
,
1
);
}
}
.box3-main-footer
{
height
:
80px
;
display
:
flex
;
justify-content
:
space-between
;
padding
:
30px
5px
;
.info
{
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
...
...
@@ -611,6 +735,7 @@ onMounted(() => {
}
}
}
.box3-footer
{
position
:
absolute
;
left
:
22px
;
...
...
@@ -625,14 +750,17 @@ onMounted(() => {
align-items
:
center
;
justify-content
:
center
;
gap
:
13px
;
.footer-left
{
width
:
19px
;
height
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.footer-center
{
width
:
964px
;
height
:
48px
;
...
...
@@ -644,9 +772,11 @@ onMounted(() => {
letter-spacing
:
0px
;
text-align
:
justify
;
}
.footer-right
{
width
:
24px
;
height
:
24px
;
img
{
width
:
100%
;
height
:
100%
;
...
...
src/views/thinkTank/ThinkTankDetail/index.vue
浏览文件 @
1dfb6405
...
...
@@ -3,7 +3,7 @@
<div
class=
"header"
>
<div
class=
"header-top"
>
<div
class=
"header-top-left"
>
<img
src=
"
"
alt=
""
/>
<img
:src=
"thinkTank.imageUrl
"
alt=
""
/>
</div>
<div
class=
"header-top-center"
>
<div
class=
"center-top"
>
...
...
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
浏览文件 @
1dfb6405
...
...
@@ -63,7 +63,8 @@
</div>
<div
class=
"right"
>
<div
class=
"card-box"
>
<div
class=
"footer-card"
v-for=
"(item, index) in curFooterList"
:key=
"index"
@
click=
"handleToReportDetail()"
>
<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>
...
...
@@ -111,15 +112,15 @@ import {
getThinkDynamicsReport
}
from
"@/api/thinkTank/overview"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
const
searchReport
=
ref
(
''
)
const
router
=
useRouter
();
const
handleToReportDetail
=
()
=>
{
const
handleToReportDetail
=
(
id
)
=>
{
const
route
=
router
.
resolve
({
name
:
'ReportDetail'
,
params
:
{
id
:
1
id
:
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
...
...
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
浏览文件 @
1dfb6405
...
...
@@ -8,7 +8,7 @@
</div>
<div
class=
"left-top-main"
>
<div
class=
"img-box"
>
<img
:src=
"basicInfo.im
g
"
alt=
""
/>
<img
:src=
"basicInfo.im
ageUrl
"
alt=
""
/>
</div>
<div
class=
"left-top-item"
>
<div
class=
"item-left"
>
{{
"国家:"
}}
</div>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论