Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
a93f5a3b
提交
a93f5a3b
authored
4月 23, 2026
作者:
朱政
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:智库/合作限制跳转加密问题
上级
4a7526c1
流水线
#621
已通过 于阶段
in 1 分 47 秒
变更
5
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
164 行增加
和
55 行删除
+164
-55
setChart.js
src/utils/setChart.js
+3
-3
index.vue
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
+53
-15
index.vue
src/views/thinkTank/SurveyProjectView/index.vue
+60
-16
index.vue
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
+39
-7
index.vue
src/views/thinkTank/index.vue
+9
-14
没有找到文件。
src/utils/setChart.js
浏览文件 @
a93f5a3b
...
...
@@ -4,7 +4,7 @@ import getQuarterRange from './getQuarterRange';
import
*
as
echarts
from
'echarts'
import
'echarts-wordcloud'
;
import
router
from
'@/router/index'
import
{
goToDataCountryBill
,
goToDataDecree
}
from
'./goToPage'
;
import
{
goToDataCountryBill
,
goToDataDecree
,
goToDataThinkTank
}
from
'./goToPage'
;
const
setChart
=
(
option
,
chartId
,
allowClick
,
selectParam
,
otherAreaList
)
=>
{
let
chartDom
=
document
.
getElementById
(
chartId
);
if
(
!
chartDom
)
{
...
...
@@ -105,11 +105,11 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
const
year
=
params
.
name
.
slice
(
0
,
4
)
const
quatarNum
=
Number
(
params
.
name
[
params
.
name
.
length
-
1
])
selectParam
.
selectedDate
=
JSON
.
stringify
(
getQuarterRange
(
year
,
quatarNum
))
open
DataThinkTank
(
selectParam
);
goTo
DataThinkTank
(
selectParam
);
return
}
else
if
(
selectParam
.
key
===
2
)
{
selectParam
.
domains
=
params
.
name
open
DataThinkTank
(
selectParam
);
goTo
DataThinkTank
(
selectParam
);
return
}
}
...
...
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
浏览文件 @
a93f5a3b
...
...
@@ -420,26 +420,64 @@ const reportAuthors = computed(() => {
return
[];
});
// 点击报告作者头像,跳转到人物主页
// 与核心研究人员逻辑一致:核心依赖 personId,本页面依赖作者的 id(作为 personId 传入)
const
encodeBase64Param
=
(
val
)
=>
{
const
s
=
String
(
val
??
""
).
trim
();
if
(
!
s
)
return
""
;
try
{
return
btoa
(
encodeURIComponent
(
s
));
}
catch
(
_
)
{
return
s
;
}
};
// 点击报告作者:与智库概览核心研究人员一致,personId 加密后传入,人物页解密
const
handleClickReportAuthor
=
async
(
author
)
=>
{
const
personId
=
author
?.
id
;
const
personId
=
author
?.
personId
??
author
?.
id
;
if
(
!
personId
)
return
;
const
personTypeList
=
JSON
.
parse
(
window
.
sessionStorage
.
getItem
(
"personTypeList"
));
let
type
=
0
;
const
params
=
{
personId
};
const
res
=
await
getPersonSummaryInfo
(
params
);
if
(
res
.
code
!==
200
||
!
res
.
data
)
return
;
window
.
sessionStorage
.
setItem
(
"curTabName"
,
author
?.
name
||
""
);
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
personId
try
{
const
res
=
await
getPersonSummaryInfo
(
params
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
arr
=
Array
.
isArray
(
personTypeList
)
?
personTypeList
.
filter
((
t
)
=>
{
const
typeIdNum
=
Number
(
t
.
typeId
);
const
personTypeNum
=
Number
(
res
.
data
.
personType
);
return
!
Number
.
isNaN
(
typeIdNum
)
&&
!
Number
.
isNaN
(
personTypeNum
)
&&
typeIdNum
===
personTypeNum
;
})
:
[];
if
(
!
arr
.
length
)
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
const
personTypeName
=
arr
[
0
]?.
typeName
||
""
;
if
(
personTypeName
===
"科技企业领袖"
)
{
type
=
1
;
}
else
if
(
personTypeName
===
"国会议员"
)
{
type
=
2
;
}
else
if
(
personTypeName
===
"智库研究人员"
)
{
type
=
3
;
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
author
?.
name
||
"人物主页"
);
const
encodedPersonId
=
encodeBase64Param
(
personId
);
if
(
!
encodedPersonId
)
return
;
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
type
,
personId
:
encodedPersonId
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
catch
(
error
)
{
}
};
const
riskSignal
=
computed
(()
=>
{
const
info
=
props
.
thinkInfo
||
{};
...
...
src/views/thinkTank/SurveyProjectView/index.vue
浏览文件 @
a93f5a3b
...
...
@@ -316,40 +316,84 @@ const handleGetThinkTankReport = async () => {
}
};
/** 新标签页打开智库报告详情 /thinkTank/reportDetail/:id */
const
encodeBase64Param
=
(
val
)
=>
{
const
s
=
String
(
val
??
""
).
trim
();
if
(
!
s
)
return
""
;
try
{
return
btoa
(
encodeURIComponent
(
s
));
}
catch
(
_
)
{
return
s
;
}
};
/** 新标签页打开报告详情:与智库概览「智库报告」一致,id 为 base64(encodeURIComponent(明文id)),报告详情页 decodeRouteId 解密 */
const
handleClickProjectReport
=
(
report
)
=>
{
const
id
=
report
?.
id
;
if
(
!
id
)
{
ElMessage
.
warning
(
"报告 id 为空,无法跳转"
);
return
;
}
const
reportTitle
=
String
(
report
?.
nameZh
||
report
?.
name
||
""
).
trim
();
const
name
=
String
(
report
?.
nameZh
||
report
?.
name
||
""
).
trim
();
if
(
name
)
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
name
);
}
const
encodedId
=
encodeBase64Param
(
id
);
if
(
!
encodedId
)
return
;
const
route
=
router
.
resolve
({
name
:
"ReportDetail"
,
params
:
{
id
:
String
(
id
)
},
query
:
reportTitle
?
{
name
:
reportTitle
}
:
{}
params
:
{
id
:
encodedId
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 点击项目团队成员:与智库概览-核心研究人员一致,personId 经 encodeURIComponent 后 base64,人物页会解密
const
handleClickReportAuthor
=
async
(
author
)
=>
{
const
personId
=
author
?.
personId
;
if
(
!
personId
)
return
;
const
personTypeList
=
JSON
.
parse
(
window
.
sessionStorage
.
getItem
(
"personTypeList"
));
let
type
=
0
;
const
params
=
{
personId
};
const
res
=
await
getPersonSummaryInfo
(
params
);
if
(
res
.
code
!==
200
||
!
res
.
data
)
return
;
window
.
sessionStorage
.
setItem
(
"curTabName"
,
author
?.
name
||
""
);
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
personId
try
{
const
res
=
await
getPersonSummaryInfo
(
params
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
arr
=
Array
.
isArray
(
personTypeList
)
?
personTypeList
.
filter
((
t
)
=>
{
const
typeIdNum
=
Number
(
t
.
typeId
);
const
personTypeNum
=
Number
(
res
.
data
.
personType
);
return
!
Number
.
isNaN
(
typeIdNum
)
&&
!
Number
.
isNaN
(
personTypeNum
)
&&
typeIdNum
===
personTypeNum
;
})
:
[];
if
(
!
arr
.
length
)
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
const
personTypeName
=
arr
[
0
]?.
typeName
||
""
;
if
(
personTypeName
===
"科技企业领袖"
)
{
type
=
1
;
}
else
if
(
personTypeName
===
"国会议员"
)
{
type
=
2
;
}
else
if
(
personTypeName
===
"智库研究人员"
)
{
type
=
3
;
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
author
?.
name
||
"人物主页"
);
const
encodedPersonId
=
encodeBase64Param
(
author
?.
personId
);
if
(
!
encodedPersonId
)
return
;
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
type
,
personId
:
encodedPersonId
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
catch
(
error
)
{
}
};
// 内容摘要
const
box1Data
=
...
...
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
浏览文件 @
a93f5a3b
...
...
@@ -260,6 +260,7 @@ import setChart from "@/utils/setChart";
import
getPieChart
from
"./utils/piechart"
;
import
getTreeMapChart
from
"./utils/treeMapChart"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
getThinkTankInfoBasic
,
getThinkTankInfoBranch
,
...
...
@@ -705,6 +706,16 @@ const handlePersonNextPage = () => {
handleGetThinkPerson
(
personCurrentPage
.
value
+
1
);
};
const
encodeBase64Param
=
(
val
)
=>
{
const
s
=
String
(
val
??
""
).
trim
();
if
(
!
s
)
return
""
;
try
{
return
btoa
(
encodeURIComponent
(
s
));
}
catch
(
_
)
{
return
s
;
}
};
// 点击人物头像,跳转到人物主页
const
handleClickPerson
=
async
item
=>
{
...
...
@@ -722,17 +733,38 @@ const handleClickPerson = async item => {
const
res
=
await
getPersonSummaryInfo
(
params
);
console
.
log
(
"人物全局信息"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
arr
=
personTypeList
.
filter
(
t
=>
{
const
typeIdNum
=
Number
(
t
.
typeId
);
const
personTypeNum
=
Number
(
res
.
data
.
personType
);
return
!
Number
.
isNaN
(
typeIdNum
)
&&
!
Number
.
isNaN
(
personTypeNum
)
&&
typeIdNum
===
personTypeNum
;
});
const
arr
=
Array
.
isArray
(
personTypeList
)
?
personTypeList
.
filter
(
t
=>
{
const
typeIdNum
=
Number
(
t
.
typeId
);
const
personTypeNum
=
Number
(
res
.
data
.
personType
);
return
!
Number
.
isNaN
(
typeIdNum
)
&&
!
Number
.
isNaN
(
personTypeNum
)
&&
typeIdNum
===
personTypeNum
;
})
:
[];
console
.
log
(
"arr"
,
arr
);
if
(
!
arr
.
length
)
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
personTypeName
=
arr
[
0
]?.
typeName
||
""
;
if
(
personTypeName
===
"科技企业领袖"
)
{
type
=
1
;
}
else
if
(
personTypeName
===
"国会议员"
)
{
type
=
2
;
}
else
if
(
personTypeName
===
"智库研究人员"
)
{
type
=
3
;
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
return
;
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
||
"人物主页"
);
const
encodedPersonId
=
encodeBase64Param
(
item
?.
personId
);
if
(
!
encodedPersonId
)
return
;
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
personId
:
item
.
p
ersonId
type
,
personId
:
encodedP
ersonId
}
});
window
.
open
(
route
.
href
,
"_blank"
);
...
...
src/views/thinkTank/index.vue
浏览文件 @
a93f5a3b
...
...
@@ -67,11 +67,9 @@
{{
"No."
+
(
index
+
1
)
}}
</div>
-->
<div
class=
"rank"
>
<el-popover
content=
"跳转至数据资源库"
placement=
"top"
>
<template
#
reference
>
<div
class=
" number"
@
click=
"handleToDataLibrary(item)"
>
{{
item
.
reportNumber
}}
{{
"篇报告"
}}
</div>
</
template
>
</el-popover>
<div
class=
" number"
@
click=
"handleToDataLibrary(item)"
>
{{
item
.
reportNumber
}}
{{
"篇报告"
}}
</div>
</div>
</div>
<div
class=
"card-title"
>
...
...
@@ -504,7 +502,7 @@ import { setCanvasCreator } from "echarts/core";
import
{
ElMessage
}
from
"element-plus"
;
import
{
useRouter
}
from
'vue-router'
;
import
{
useGotoNewsDetail
}
from
'@/router/modules/news'
;
import
{
goToThinkTank
}
from
"@/utils/goToPage"
;
import
{
goTo
DataThinkTank
,
goTo
ThinkTank
}
from
"@/utils/goToPage"
;
const
gotoNewsDetail
=
useGotoNewsDetail
()
const
containerRef
=
ref
(
null
);
const
isRiskDetailVisible
=
ref
(
false
);
...
...
@@ -2399,7 +2397,7 @@ const handleClickPerson = async item => {
const
handleToReportDetail
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
const
encodedId
=
encodeBase64Param
(
item
?.
id
);
if
(
!
encodedId
)
return
;
if
(
!
encodedId
)
return
;
const
route
=
router
.
resolve
({
name
:
"ReportDetail"
,
params
:
{
...
...
@@ -2411,7 +2409,7 @@ const handleToReportDetail = item => {
const
handleToHearingDetail
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
titleZh
);
const
encodedId
=
encodeBase64Param
(
item
?.
id
);
if
(
!
encodedId
)
return
;
if
(
!
encodedId
)
return
;
const
route
=
router
.
resolve
({
name
:
"CongressHearingView"
,
params
:
{
...
...
@@ -2423,7 +2421,7 @@ const handleToHearingDetail = item => {
const
handleToSurveyProjectView
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
const
encodedId
=
encodeBase64Param
(
item
?.
id
);
if
(
!
encodedId
)
return
;
if
(
!
encodedId
)
return
;
const
route
=
router
.
resolve
({
name
:
"SurveyProjectView"
,
params
:
{
...
...
@@ -2453,11 +2451,8 @@ const handleToDataLibrary = (item) => {
const
selectParam
=
{
orgnizationName
:
item
.
name
}
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataThinkTank"
,
query
:
selectParam
});
window
.
open
(
route
.
href
,
"_blank"
);
// 使用 goToPage.js 统一的 Base64(encodeURIComponent(JSON)) 加密传参方式
goToDataThinkTank
(
selectParam
)
}
onMounted
(
async
()
=>
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论