Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
26d5da4e
提交
26d5da4e
authored
3月 13, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
差异文件
feat:update
上级
c84a594d
b841823f
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
170 行增加
和
51 行删除
+170
-51
overview.js
src/api/thinkTank/overview.js
+15
-0
NewsItem.vue
src/components/base/newsList/NewsItem.vue
+2
-2
NewsItemMini.vue
src/components/base/newsList/NewsItemMini.vue
+2
-2
NewsItemWithTag.vue
src/components/base/newsList/NewsItemWithTag.vue
+2
-2
IntelligentEntityText.vue
src/components/base/texts/IntelligentEntityText.vue
+2
-0
TextTranslatePane.vue
src/components/base/texts/TextTranslatePane.vue
+2
-2
common.js
src/router/common.js
+25
-19
index.vue
src/styles/components/ActionButton/index.vue
+4
-3
index.vue
src/styles/components/News/index.vue
+42
-0
index.vue
src/styles/components/RadioPage/index.vue
+27
-7
index.vue
src/styles/components/index.vue
+4
-0
container.scss
src/styles/container.scss
+9
-0
ModeuleNews.vue
src/views/newsBrief/ModeuleNews.vue
+25
-10
NewsDetial.vue
src/views/newsBrief/NewsDetial.vue
+9
-4
Line_Search.png
src/views/thinkTank/ReportDetail/images/Line_Search.png
+0
-0
image-down.png
src/views/thinkTank/ReportDetail/images/image-down.png
+0
-0
image-up.png
src/views/thinkTank/ReportDetail/images/image-up.png
+0
-0
index.vue
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
+0
-0
没有找到文件。
src/api/thinkTank/overview.js
浏览文件 @
26d5da4e
...
...
@@ -258,6 +258,21 @@ export function getThinkTankReportContent(params) {
})
}
// 获取报告核心论点(支持关键字搜索)
export
function
getThinkTankReportViewpoint
(
params
)
{
const
{
reportId
,
currentPage
,
pageSize
,
keyword
=
''
,
orgIds
=
''
}
=
params
return
request
({
method
:
'GET'
,
url
:
`/api/thinkTankReport/viewpoint/
${
reportId
}
`
,
params
:
{
currentPage
,
pageSize
,
keyword
,
orgIds
,
}
})
}
//获取涉及科技领域
export
function
getThinkTankReportIndustry
(
params
)
{
return
request
({
...
...
src/components/base/newsList/NewsItem.vue
浏览文件 @
26d5da4e
<
template
>
<el-space
alignment=
"flex-start"
:size=
"10"
>
<img
:width=
"97"
:height=
"72"
:src=
"
news
?? DefaultIconNews"
alt=
""
/>
<img
:width=
"97"
:height=
"72"
:src=
"
img
?? DefaultIconNews"
alt=
""
/>
<el-space
direction=
"vertical"
alignment=
"flex-start"
:size=
"0"
fill
>
<div
class=
"full-width flex-display"
>
<common-text
:line-limit=
"1"
class=
"text-title-3-bold text-hover flex-fill"
...
...
@@ -26,7 +26,7 @@ import CommonText from "../texts/CommonText.vue";
const
props
=
defineProps
({
img
:
{
type
:
String
,
default
:
''
default
:
null
,
},
title
:
{
type
:
String
,
...
...
src/components/base/newsList/NewsItemMini.vue
浏览文件 @
26d5da4e
<
template
>
<el-space
alignment=
"flex-start"
:size=
"10"
>
<img
:width=
"64"
:height=
"52"
:src=
"
news
?? DefaultIconNews"
alt=
""
/>
<img
:width=
"64"
:height=
"52"
:src=
"
img
?? DefaultIconNews"
alt=
""
/>
<el-space
direction=
"vertical"
alignment=
"flex-start"
:size=
"0"
>
<common-text
:line-limit=
"1"
class=
"text-regular text-hover"
color=
"var(--text-primary-80-color)"
>
{{
title
}}
...
...
@@ -20,7 +20,7 @@ import CommonText from "../texts/CommonText.vue";
const
props
=
defineProps
({
img
:
{
type
:
String
,
default
:
''
default
:
null
},
title
:
{
type
:
String
,
...
...
src/components/base/newsList/NewsItemWithTag.vue
浏览文件 @
26d5da4e
...
...
@@ -11,7 +11,7 @@
<area-tag
v-for=
"(tag, index) in props.aeraTags"
:key=
"index"
:tagName=
"tag"
/>
</el-space>
</el-space>
<img
style=
"width: 122px; height: 82px"
:src=
"props.img"
>
<img
style=
"width: 122px; height: 82px"
:src=
"props.img
? props.img : DefaultIconNews
"
>
</div>
</
template
>
...
...
@@ -26,7 +26,7 @@ const props = defineProps({
img
:
{
type
:
String
,
default
:
'img'
default
:
null
},
title
:
{
type
:
String
,
...
...
src/components/base/texts/IntelligentEntityText.vue
浏览文件 @
26d5da4e
...
...
@@ -121,5 +121,6 @@ onMounted(processText)
.p-regular-rereg
{
text-indent
:
2em
;
margin
:
4px
0
;
}
</
style
>
\ No newline at end of file
src/components/base/texts/TextTranslatePane.vue
浏览文件 @
26d5da4e
...
...
@@ -9,8 +9,8 @@
<el-button
v-if=
"showMoreVisible"
@
click=
"() =>
{ showMore = !showMore; updateText() }">
{{
showMore
?
'收起'
:
'展开'
}}
<el-icon>
<arrow-
down
v-if=
"showMore"
/>
<arrow-
up
v-else
/>
<arrow-
up
v-if=
"showMore"
/>
<arrow-
down
v-else
/>
</el-icon>
</el-button>
</div>
...
...
src/router/common.js
浏览文件 @
26d5da4e
import
{
useRouter
}
from
"vue-router"
;
export
function
useGotoPage
()
{
const
router
=
useRouter
();
return
(
path
,
data
,
isNewTabs
=
true
)
=>
{
console
.
log
(
'path'
,
path
);
if
(
isNewTabs
)
{
// 打开新页面
const
url
=
new
URL
(
window
.
location
.
origin
+
path
);
if
(
data
)
{
Object
.
entries
(
data
).
forEach
(([
key
,
value
])
=>
{
url
.
searchParams
.
append
(
key
,
value
);
});
}
window
.
open
(
url
.
toString
(),
'_blank'
);
}
else
{
// 当前页面打开
router
.
push
({
path
,
query
:
data
});
}
}
}
\ No newline at end of file
const
router
=
useRouter
();
return
(
path
,
data
,
isNewTabs
=
true
)
=>
{
console
.
log
(
"path"
,
path
);
if
(
isNewTabs
)
{
// 打开新页面
const
url
=
new
URL
(
window
.
location
.
origin
+
path
);
if
(
data
)
{
Object
.
entries
(
data
).
forEach
(([
key
,
value
])
=>
{
url
.
searchParams
.
append
(
key
,
value
);
});
}
window
.
open
(
url
.
toString
(),
"_blank"
);
}
else
{
// 当前页面打开
router
.
push
({
path
,
query
:
data
});
}
};
}
// 滚动到指定元素
export
function
scrollToElement
(
elementId
)
{
document
.
getElementById
(
elementId
).
scrollIntoView
({
behavior
:
"smooth"
,
// 平滑滚动
block
:
"start"
// 滚动到元素顶部
});
}
src/styles/components/ActionButton/index.vue
浏览文件 @
26d5da4e
...
...
@@ -48,14 +48,15 @@
<
script
setup
>
import
'@/styles/common.scss'
import
LeftBtn
from
'@/components/base/
PageBtn/L
eftBtn.vue'
import
RightBtn
from
'@/components/base/
PageBtn/R
ightBtn.vue'
import
LeftBtn
from
'@/components/base/
pageBtn/l
eftBtn.vue'
import
RightBtn
from
'@/components/base/
pageBtn/r
ightBtn.vue'
const
span
=
12
</
script
>
<
style
lang=
"scss"
scoped
>
.button-box
{
margin-left
:
40px
;;
margin-left
:
40px
;
;
display
:
flex
;
gap
:
8px
}
...
...
src/styles/components/News/index.vue
0 → 100644
浏览文件 @
26d5da4e
<
script
setup
lang=
"ts"
>
import
{
ElRow
,
ElCol
}
from
'element-plus'
;
import
'@/styles/common.scss'
import
NewsItemMini
from
'@/components/base/newsList/NewsItemMini.vue'
import
NewsItem
from
'@/components/base/newsList/NewsItem.vue'
import
NewsItemWithTag
from
'@/components/base/newsList/NewsItemWithTag.vue'
const
span
=
12
const
news
=
{
title
:
'新闻标题-老长了老长了老长了老长了老长了老长长了老长了'
,
content
:
'新闻内容-老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了老长了'
,
from
:
"2025.1.1 · 来源:中国"
,
aeraTags
:
[
'人工智能'
,
'深海'
]
}
</
script
>
<
template
>
<el-row
class=
"wrapper layout-grid-line"
>
<el-col
:span=
"span"
>
<pre>
{{
`import NewsItem from '@/components/base/newsList/NewsItem.vue'`
}}
</pre>
<news-item
class=
"common-padding"
:title=
"news.title"
:content=
"news.content"
:from=
"news.from"
></news-item>
</el-col>
<el-col
:span=
"span"
>
<pre>
{{
`import NewsItemMini from '@/components/base/newsList/NewsItemMini.vue'`
}}
</pre>
<news-item-mini
class=
"common-padding"
:title=
"news.title"
:content=
"news.content"
:from=
"news.from"
></news-item-mini>
</el-col>
<el-col
:span=
"span"
>
<pre>
{{
`import NewsItemWithTag from '@/components/base/newsList/NewsItemWithTag.vue'`
}}
</pre>
<news-item-with-tag
class=
"common-padding"
:title=
"news.title"
:content=
"news.content"
:from=
"news.from"
:aeraTags=
"news.aeraTags"
></news-item-with-tag>
</el-col>
</el-row>
</
template
>
<
style
lang=
"scss"
scoped
></
style
>
\ No newline at end of file
src/styles/components/RadioPage/index.vue
浏览文件 @
26d5da4e
<
script
setup
lang=
"ts"
>
import
{
ElRadioGroup
,
ElRadioButton
,
ElRow
,
ElCol
}
from
'element-plus'
;
import
{
ElRadioGroup
,
ElRadioButton
,
ElRow
,
ElCol
,
ElSpace
}
from
'element-plus'
;
import
{
ref
}
from
'vue'
;
import
'@/styles/radio.scss'
;
...
...
@@ -13,16 +13,36 @@ const span = 12
<pre>
{{
`import '@/styles/radio.scss';
<template>
<el-radio-group class="radio-group-as-gap-btn">
<el-radio-group v-model="radio" class="radio-group-as-gap-btn">
<el-radio-button :value="1">选项1</el-radio-button>
<el-radio-button :value="2">选项2</el-radio-button>
<el-radio-button :value="3">选项3</el-radio-button>
</el-radio-group>
<el-radio-group v-model="radio" class="radio-group-as-gap-btn">
<el-space :size="24">
<el-radio-button :value="1">选项1</el-radio-button>
<el-radio-button :value="2">选项2</el-radio-button>
<el-radio-button :value="3">选项3</el-radio-button>
</el-space>
</el-radio-group>
</template>
`
}}
</pre>
<el-radio-group
v-model=
"radio"
class=
"radio-group-as-gap-btn"
>
<el-radio-button
:value=
"1"
>
选项1
</el-radio-button>
<el-radio-button
:value=
"2"
>
选项2
</el-radio-button>
<el-radio-button
:value=
"3"
>
选项3
</el-radio-button>
</el-radio-group>
<el-space
direction=
"vertical"
fill
>
<el-radio-group
v-model=
"radio"
class=
"radio-group-as-gap-btn"
>
<el-radio-button
:value=
"1"
>
选项1
</el-radio-button>
<el-radio-button
:value=
"2"
>
选项2
</el-radio-button>
<el-radio-button
:value=
"3"
>
选项3
</el-radio-button>
</el-radio-group>
<el-radio-group
v-model=
"radio"
class=
"radio-group-as-gap-btn"
>
<el-space
:size=
"24"
>
<el-radio-button
:value=
"1"
>
选项1
</el-radio-button>
<el-radio-button
:value=
"2"
>
选项2
</el-radio-button>
<el-radio-button
:value=
"3"
>
选项3
</el-radio-button>
</el-space>
</el-radio-group>
</el-space>
</el-col>
<el-col
:span=
"span"
>
<pre>
{{
`import '@/styles/radio.scss';\n <template>
...
...
src/styles/components/index.vue
浏览文件 @
26d5da4e
...
...
@@ -28,6 +28,9 @@
<el-tab-pane
label=
"人物"
lazy
>
<people-page
/>
</el-tab-pane>
<el-tab-pane
label=
"新闻"
lazy
>
<news-page
/>
</el-tab-pane>
<el-tab-pane
label=
"预警面板"
lazy
>
<WarnningPane
/>
</el-tab-pane>
...
...
@@ -71,6 +74,7 @@ import GraphTreeChart from './GraphTreeChart/index.vue'
import
AreaTag
from
'./AreaTag/index.vue'
import
ActionButton
from
'./ActionButton/index.vue'
import
WordCloudChart
from
'./WordCloudChart/index.vue'
import
NewsPage
from
'./News/index.vue'
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
src/styles/container.scss
浏览文件 @
26d5da4e
...
...
@@ -16,4 +16,12 @@
.common-padding
{
padding
:
20px
24px
;
}
.common-padding-h
{
padding
:
0px
24px
;
}
.common-padding-v
{
padding
:
20px
0px
;
}
\ No newline at end of file
src/views/newsBrief/ModeuleNews.vue
浏览文件 @
26d5da4e
...
...
@@ -4,10 +4,10 @@
<back
/>
</el-icon>
返回
</el-button>
<el-space
style=
"width: 993px;"
direction=
"vertical"
alignment=
"flex-start"
>
<div
style=
"margin-top: 50px; margin-bottom: 24px; margin-left: 24px;"
>
<div
id=
"ref-news-list"
style=
"margin-top: 50px; margin-bottom: 24px; margin-left: 24px;"
>
<common-text
class=
"text-title-0-show"
color=
"var(--text-primary-90-color)"
>
{{
moduleName
}}
</common-text>
}}
</common-text>
<common-text
class=
"text-regular"
color=
"var(--text-primary-65-color)"
>
基于情报价值评估预测算法,掌握全球重要潜在动向
</common-text>
</div>
...
...
@@ -21,9 +21,12 @@
</el-space>
</el-radio-group>
<el-divider
style=
"margin: 10px 0px;"
></el-divider>
<div
class=
"
"
>
<news-list
:news=
"NewsData"
/>
<div
v-if=
"NewsData?.content?.length > 0
"
>
<news-list
:news=
"NewsData
.content
"
/>
</div>
<el-empty
v-else
></el-empty>
<el-pagination
background
layout=
"total, ->, prev, pager, next"
:current-page=
"modulePage"
:total=
"NewsData?.totalElements ?? 0"
v-on:current-change=
"onCurrentChange"
/>
</el-space>
</el-space>
</el-space>
...
...
@@ -36,32 +39,44 @@ import '@/styles/container.scss';
import
'@/styles/radio.scss'
;
import
NewsList
from
"./NewsList.vue"
;
import
{
getAreaList
,
getHotNewsByArea
}
from
"@/api/news/newsBrief"
;
import
{
ElSpace
,
ElDivider
,
ElRadioButton
,
ElRadioGroup
,
ElButton
,
ElIcon
}
from
"element-plus"
;
import
{
ElSpace
,
ElDivider
,
ElRadioButton
,
ElRadioGroup
,
ElButton
,
ElIcon
,
ElEmpty
,
ElPagination
}
from
"element-plus"
;
import
CommonText
from
"@/components/base/texts/CommonText.vue"
;
import
{
useGotoNewsBrief
}
from
"@/router/modules/news"
;
import
{
scrollToElement
}
from
"@/router/common"
;
import
{
number
}
from
"echarts"
;
const
route
=
useRoute
();
const
gotoNewsBrief
=
useGotoNewsBrief
();
const
moduleId
=
ref
(
route
.
params
.
id
);
const
moduleName
=
ref
(
route
.
query
.
name
??
""
);
const
NewsData
=
ref
([]);
const
modulePage
=
ref
(
1
);
const
NewsData
=
ref
({});
const
AreaList
=
ref
([]);
const
currentAreaId
=
ref
(
""
);
onMounted
(
async
()
=>
{
console
.
log
(
route
.
query
.
name
,
moduleId
.
value
,
moduleName
.
value
);
const
{
data
:
areaList
}
=
await
getAreaList
();
AreaList
.
value
=
areaList
??
[];
await
changeArea
(
""
)
await
updateDate
(
""
)
});
async
function
changeArea
(
id
)
{
const
onCurrentChange
=
async
e
=>
{
await
updateDate
(
currentAreaId
.
value
,
e
-
1
)
scrollToElement
(
"ref-news-list"
);
}
async
function
updateDate
(
id
,
page
=
0
)
{
const
{
data
}
=
await
getHotNewsByArea
({
moduleId
:
moduleId
.
value
,
industryId
:
id
?
id
:
null
,
currentPage
:
page
,
});
data
?.
forEach
(
item
=>
{
data
?.
content
?.
forEach
(
item
=>
{
item
.
newsImage
=
item
.
coverUrl
??
""
})
NewsData
.
value
=
data
??
[];
modulePage
.
value
=
(
data
?.
number
??
0
)
+
1
;
}
async
function
changeArea
(
id
)
{
await
updateDate
(
id
,
0
)
}
</
script
>
...
...
src/views/newsBrief/NewsDetial.vue
浏览文件 @
26d5da4e
...
...
@@ -41,22 +41,27 @@
译文
<
/el-button
>
<
/div
>
<
text
-
translate
-
pane
class
=
"common-padding"
:
texts
-
raw
=
"textEns"
:
texts
-
translate
=
"textZns"
<
text
-
translate
-
pane
class
=
"common-padding
-h
"
:
texts
-
raw
=
"textEns"
:
texts
-
translate
=
"textZns"
:
text
-
entities
=
"textEntities"
:
is
-
open
-
translation
=
"isOpenTranslation"
:
is
-
highlight
-
entity
=
"isHightLightEntity"
>
<
/text-translate-pane
>
<
div
>
<
img
v
-
if
=
"newsDetail.coverUrl"
class
=
"common-padding"
:
src
=
"newsDetail.coverUrl"
:
width
=
"320"
:
height
=
"240"
/>
<
/div
>
<
/el-space
>
<
el
-
space
direction
=
"vertical"
class
=
"background-as-card relation-news-box"
alignment
=
"flex-start"
>
<
el
-
space
direction
=
"vertical"
class
=
"background-as-card relation-news-box"
fill
>
<
el
-
space
style
=
"margin-top: 10px;"
>
<
color
-
prefix
-
title
height
=
"20px"
>
<
div
class
=
"text-title-2-bold"
>
相关新闻
<
/div
>
<
/color-prefix-title
>
<
/el-space
>
<
el
-
space
direction
=
"vertical"
fill
class
=
"common-padding"
>
<
el
-
space
v
-
if
=
"relationNews?.length > 0"
direction
=
"vertical"
fill
class
=
"common-padding"
>
<
news
-
item
-
mini
v
-
for
=
"item in relationNews"
:
key
=
"item.newsId"
:
news
=
"item"
:
img
=
"item.newsImage"
:
title
=
"item.newsTitle"
:
from
=
"`${item.newsDate
}
· ${item.newsOrg
}
`"
@
click
=
"gotoNewsDetail(item.newsId)"
/>
<
/el-space
>
<
el
-
empty
v
-
else
style
=
""
><
/el-empty
>
<
/el-space
>
<
/div
>
<
/el-scrollbar
>
...
...
@@ -67,7 +72,7 @@ import '@/styles/container.scss';
import
'@/styles/common.scss'
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
ElSpace
,
ElButton
,
ElScrollbar
,
ElSwitch
}
from
"element-plus"
;
import
{
ElSpace
,
ElButton
,
ElScrollbar
,
ElSwitch
,
ElEmpty
,
ElImage
}
from
"element-plus"
;
import
CommonText
from
"@/components/base/texts/CommonText.vue"
;
import
AreaTag
from
"@/components/base/AreaTag/index.vue"
;
import
ColorPrefixTitle
from
'@/components/base/texts/ColorPrefixTitle.vue'
;
...
...
src/views/thinkTank/ReportDetail/images/Line_Search.png
0 → 100644
浏览文件 @
26d5da4e
21.4 KB
src/views/thinkTank/ReportDetail/images/image-down.png
0 → 100644
浏览文件 @
26d5da4e
10.5 KB
src/views/thinkTank/ReportDetail/images/image-up.png
0 → 100644
浏览文件 @
26d5da4e
10.3 KB
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
浏览文件 @
26d5da4e
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论