Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
bb765b60
提交
bb765b60
authored
3月 30, 2026
作者:
张烨
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pre' into zy-tmp
上级
23a7bd89
3967f51d
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
54 个修改的文件
包含
961 行增加
和
502 行删除
+961
-502
.gitlab-ci.yml
.gitlab-ci.yml
+12
-30
App.vue
src/App.vue
+0
-0
billHome.js
src/api/bill/billHome.js
+46
-66
index.vue
src/components/base/moduleHeader/index.vue
+154
-56
tool1.svg
src/components/base/moduleHeader/tool1.svg
+10
-0
tool2.svg
src/components/base/moduleHeader/tool2.svg
+10
-0
LeftBtn.vue
src/components/base/pageBtn/LeftBtn.vue
+0
-0
RightBtn.vue
src/components/base/pageBtn/RightBtn.vue
+0
-0
main.js
src/main.js
+2
-2
index.js
src/router/index.js
+24
-12
index.vue
src/styles/components/ActionButton/index.vue
+4
-4
index.vue
src/views/bill/background/index.vue
+19
-12
ResourceLibrarySection.vue
src/views/bill/billHome/ResourceLibrarySection.vue
+10
-3
icon-commit.png
src/views/bill/billHome/assets/icons/icon-commit.png
+0
-0
index.vue
src/views/bill/billHome/index.vue
+118
-46
multiLineChart.js
src/views/bill/billHome/utils/multiLineChart.js
+71
-68
FilterSection.vue
...l/influence/ProgressForecast/components/FilterSection.vue
+8
-10
PredictionPhaseCard.vue
...uence/ProgressForecast/components/PredictionPhaseCard.vue
+32
-14
Step2FilterBills.vue
...nfluence/ProgressForecast/components/Step2FilterBills.vue
+5
-4
index.vue
src/views/bill/influence/ProgressForecast/index.vue
+22
-20
index.vue
src/views/bill/influence/industry/index.vue
+15
-3
index.vue
src/views/bill/introdoction/index.vue
+17
-13
index.vue
src/views/dataLibrary/decree/index.vue
+0
-0
index.vue
src/views/dataLibrary/index.vue
+4
-4
index.vue
src/views/decree/allOrganization/index.vue
+56
-34
index.vue
src/views/decree/decreeHome/index.vue
+76
-25
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+9
-3
index.vue
src/views/decree/decreeLayout/index.vue
+72
-12
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+54
-20
index.vue
...views/decree/decreeLayout/overview/introduction/index.vue
+16
-6
index.vue
src/views/decree/decreeLayout/overview/measures/index.vue
+0
-0
index.vue
src/views/exportControl/index.vue
+95
-35
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+0
-0
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+0
-0
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+0
-0
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+0
-0
index.vue
...ents/impactAnalysis/components/industrialImpact/index.vue
+0
-0
index.vue
...onents/impactAnalysis/components/researchImpact/index.vue
+0
-0
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+0
-0
CooperationCases.vue
...ct/innovativeInstitutions/components/CooperationCases.vue
+0
-0
OtherInfo.vue
...novationSubject/innovativeInstitutions/tabs/OtherInfo.vue
+0
-0
index.vue
...views/marketAccessRestrictions/marketAccessHome/index.vue
+0
-0
index.vue
src/views/thinkTank/MultiThinkTankViewAnalysis/index.vue
+0
-0
index.vue
src/views/thinkTank/ReportDetail/index.vue
+0
-0
index.vue
src/views/thinkTank/ReportDetail/policyTracking/index.vue
+0
-0
index.vue
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
+0
-0
index.vue
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
+0
-0
index.vue
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
+0
-0
index.vue
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
+0
-0
index.vue
src/views/thinkTank/allThinkTank/index.vue
+0
-0
ThinkTankPolicyAdviceOverview.vue
...ws/thinkTank/components/ThinkTankPolicyAdviceOverview.vue
+0
-0
index.vue
src/views/thinkTank/index.vue
+0
-0
index.vue
src/views/thinkTank/reportOriginal/index.vue
+0
-0
pdf.vue
src/views/thinkTank/reportOriginal/pdf.vue
+0
-0
没有找到文件。
.gitlab-ci.yml
浏览文件 @
bb765b60
...
@@ -14,7 +14,9 @@ build_pre:
...
@@ -14,7 +14,9 @@ build_pre:
stage
:
build
stage
:
build
image
:
node:20-bullseye
image
:
node:20-bullseye
tags
:
tags
:
-
risk-monitor-frontend
-
docker
-
frontend
-
linux
only
:
only
:
-
pre
-
pre
script
:
script
:
...
@@ -37,39 +39,17 @@ deploy_pre:
...
@@ -37,39 +39,17 @@ deploy_pre:
stage
:
deploy
stage
:
deploy
image
:
alpine:3.20
image
:
alpine:3.20
tags
:
tags
:
-
risk-monitor-frontend
-
docker
-
frontend
-
linux
only
:
only
:
-
pre
-
pre
dependencies
:
dependencies
:
-
build_pre
-
build_pre
script
:
script
:
-
apk add --no-cache rsync curl jq
-
apk add --no-cache rsync
# 只允许“最新一次 pre pipeline”部署到 nginx(加二次确认,避免短时间多次推送导致重复 rsync)
-
test -d dist || (echo "dist not found" && exit 1)
-
>
-
test -d /nas/kjb_service/zm/pre-project/html || (echo "deploy target path not found" && exit 1)
LATEST_PIPELINE_ID="$(
curl --silent --show-error --fail
--header "JOB-TOKEN: $CI_JOB_TOKEN"
"$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/pipelines?ref=pre&order_by=id&sort=desc&per_page=1"
| jq -r '.[0].id'
)"
-
>
if [ -z "$LATEST_PIPELINE_ID" ] || [ "$LATEST_PIPELINE_ID" != "$CI_PIPELINE_ID" ]; then
echo "skip deploy: not latest pipeline (latest=$LATEST_PIPELINE_ID current=$CI_PIPELINE_ID)";
exit 0;
fi
-
sleep 20
-
>
LATEST_PIPELINE_ID="$(
curl --silent --show-error --fail
--header "JOB-TOKEN: $CI_JOB_TOKEN"
"$CI_SERVER_URL/api/v4/projects/$CI_PROJECT_ID/pipelines?ref=pre&order_by=id&sort=desc&per_page=1"
| jq -r '.[0].id'
)"
-
>
if [ -z "$LATEST_PIPELINE_ID" ] || [ "$LATEST_PIPELINE_ID" != "$CI_PIPELINE_ID" ]; then
echo "skip deploy: not latest pipeline after debounce (latest=$LATEST_PIPELINE_ID current=$CI_PIPELINE_ID)";
exit 0;
fi
-
rsync -avz --delete dist/ /nas/kjb_service/zm/pre-project/html/
-
rsync -avz --delete dist/ /nas/kjb_service/zm/pre-project/html/
# 非 protected 分支:push 时先做 build 校验(避免合并 pre 时出现 build 报错)
# 非 protected 分支:push 时先做 build 校验(避免合并 pre 时出现 build 报错)
...
@@ -77,7 +57,9 @@ build_check:
...
@@ -77,7 +57,9 @@ build_check:
stage
:
build
stage
:
build
image
:
node:20-bullseye
image
:
node:20-bullseye
tags
:
tags
:
-
risk-monitor-frontend
-
docker
-
frontend
-
linux
# 只在 push 时做构建校验,且排除 protected 分支与目标分支 pre
# 只在 push 时做构建校验,且排除 protected 分支与目标分支 pre
only
:
only
:
-
pushes
-
pushes
...
...
src/App.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/api/bill/billHome.js
浏览文件 @
bb765b60
...
@@ -335,99 +335,79 @@ export function getProgressPrediction(billId) {
...
@@ -335,99 +335,79 @@ export function getProgressPrediction(billId) {
* @returns {Promise<Object>} 相似法案列表
* @returns {Promise<Object>} 相似法案列表
*/
*/
export
function
getSimiBills
(
params
=
{})
{
export
function
getSimiBills
(
params
=
{})
{
// domains 如果是数组则用逗号拼接
const
domains
=
Array
.
isArray
(
params
.
domains
)
?
params
.
domains
.
join
(
','
)
:
params
.
domains
return
request
(
'/api/BillProgressPrediction/simiBills'
,
{
return
request
(
'/api/BillProgressPrediction/simiBills'
,
{
method
:
'GET'
,
method
:
'GET'
,
params
:
{
params
:
{
billIds
:
params
.
billIds
,
billIds
:
params
.
billIds
,
domains
:
params
.
domains
,
domains
:
domains
,
patternType
:
params
.
patternType
,
patternType
:
params
.
patternType
,
proposalType
:
params
.
proposalType
,
proposalType
:
params
.
proposalType
...
params
}
}
})
})
}
}
/**
* 格式化日期 YYYY-MM-DD -> YYYY年M月D日
* @param {string} dateStr - 日期字符串
* @returns {string} 格式化后的日期
*/
function
formatDate
(
dateStr
)
{
if
(
!
dateStr
)
return
''
const
match
=
dateStr
.
match
(
/
(\d{4})
-
(\d{2})
-
(\d{2})
/
)
if
(
match
)
{
return
`
${
match
[
1
]}
年
${
parseInt
(
match
[
2
])}
月
${
parseInt
(
match
[
3
])}
日`
}
return
dateStr
}
/**
/**
* 转换相似法案 API 返回的数据为组件所需格式
* 转换相似法案 API 返回的数据为组件所需格式
* @param {Object} apiData - API 返回的原始数据
* @param {Object} apiData - API 返回的原始数据
* @returns {Object} 转换后的统计数据和法案列表
* @returns {Object} 转换后的统计数据和法案列表
*/
*/
export
function
transformSimiBillsData
(
apiData
)
{
export
function
transformSimiBillsData
(
apiData
)
{
if
(
!
apiData
||
!
apiData
.
data
||
!
Array
.
isArray
(
apiData
.
data
)
)
{
if
(
!
apiData
||
!
apiData
.
data
)
{
return
{
stats
:
null
,
bills
:
[]
}
return
{
stats
:
null
,
bills
:
[]
}
}
}
const
bills
=
apiData
.
data
const
data
=
apiData
.
data
const
simiBills
=
data
.
simi_bills
||
[]
// 计算统计数据
// 直接使用 API 返回的统计数据
let
becameLaw
=
0
let
notPassedOrShelved
=
0
let
totalDays
=
0
let
completedBills
=
0
bills
.
forEach
(
bill
=>
{
const
actions
=
bill
.
bill_actions
||
[]
const
hasBecameLaw
=
actions
.
some
(
a
=>
a
.
action_type
===
'BecameLaw'
||
a
.
action_type
===
'President'
&&
a
.
action_desc
?.
includes
(
'签署'
)
)
if
(
hasBecameLaw
)
{
becameLaw
++
// 计算耗时
if
(
actions
.
length
>=
2
)
{
const
firstDate
=
new
Date
(
actions
[
0
].
action_date
)
const
lastDate
=
new
Date
(
actions
[
actions
.
length
-
1
].
action_date
)
const
days
=
Math
.
ceil
((
lastDate
-
firstDate
)
/
(
1000
*
60
*
60
*
24
))
if
(
days
>
0
)
{
totalDays
+=
days
completedBills
++
}
}
}
else
{
notPassedOrShelved
++
}
})
const
medianDays
=
completedBills
>
0
?
Math
.
round
(
totalDays
/
completedBills
)
:
223
const
passRate
=
bills
.
length
>
0
?
((
becameLaw
/
bills
.
length
)
*
100
).
toFixed
(
1
)
:
'0'
const
stats
=
{
const
stats
=
{
totalBills
:
b
ills
.
length
,
totalBills
:
data
.
count
||
simiB
ills
.
length
,
becameLaw
,
becameLaw
:
data
.
become_law
||
0
,
notPassedOrShelved
,
notPassedOrShelved
:
(
data
.
count
||
simiBills
.
length
)
-
(
data
.
become_law
||
0
)
,
medianDays
,
medianDays
:
data
.
become_law_avg_days
||
0
,
passRate
passRate
:
data
.
become_law_prop
?
(
data
.
become_law_prop
*
100
).
toFixed
(
1
)
:
'0'
}
}
// 转换法案列表格式
// 转换法案列表格式
const
transformedBills
=
b
ills
.
map
(
bill
=>
({
const
transformedBills
=
simiB
ills
.
map
(
bill
=>
({
id
:
bill
.
bill_id
,
id
:
bill
.
bill_id
,
title
:
bill
.
bill_name
||
bill
.
bill_id
,
title
:
bill
.
bill_name
||
bill
.
bill_id
,
proposalDate
:
extractProposalDate
(
bill
.
poli_pattern_desc
),
proposalDate
:
bill
.
proposed_date
?
formatDate
(
bill
.
proposed_date
)
:
''
,
areas
:
bill
.
domain_name
?
(
Array
.
isArray
(
bill
.
domain_name
)
?
bill
.
domain_name
:
[
bill
.
domain_name
])
:
[],
areas
:
bill
.
bill_domain
?
(
Array
.
isArray
(
bill
.
bill_domain
)
?
bill
.
bill_domain
:
[
bill
.
bill_domain
])
:
[],
proposer
:
extractProposer
(
bill
.
bill_sponsors
),
proposer
:
bill
.
key_sponsor_name
||
extractProposer
(
bill
.
bill_sponsors
),
coProposers
:
bill
.
bill_proposal_desc
||
''
,
proposerParty
:
bill
.
key_sponsor_party
||
''
,
coProposers
:
bill
.
co_sponsor_desc
||
bill
.
bill_proposal_desc
||
''
,
proposalType
:
bill
.
bill_proposal_type
||
''
,
governmentType
:
formatGovernmentType
(
bill
.
poli_pattern_type
,
bill
.
poli_pattern_desc
),
governmentType
:
formatGovernmentType
(
bill
.
poli_pattern_type
,
bill
.
poli_pattern_desc
),
passDays
:
calculateTotalDays
(
bill
.
bill_actions
),
patternType
:
bill
.
poli_pattern_type
||
''
,
billStatus
:
bill
.
bill_status
||
''
,
passDays
:
bill
.
bill_action_days
||
calculateTotalDays
(
bill
.
bill_actions
),
yearsDifference
:
bill
.
years_difference
||
0
,
billActions
:
bill
.
bill_actions
||
[],
billSponsors
:
bill
.
bill_sponsors
||
[],
selected
:
true
// 默认全选
selected
:
true
// 默认全选
}))
}))
return
{
stats
,
bills
:
transformedBills
}
return
{
stats
,
bills
:
transformedBills
}
}
}
/**
* 从政治格局描述中提取提案时间
* @param {string} desc - 政治格局描述
* @returns {string} 提案时间
*/
function
extractProposalDate
(
desc
)
{
if
(
!
desc
)
return
''
const
match
=
desc
.
match
(
/
(\d{4})
-
(\d{2})
-
(\d{2})
/
)
if
(
match
)
{
return
`
${
match
[
1
]}
年
${
parseInt
(
match
[
2
])}
月
${
parseInt
(
match
[
3
])}
日`
}
return
''
}
/**
/**
* 从提案人列表中提取主提案人
* 从提案人列表中提取主提案人
* @param {Array} sponsors - 提案人列表
* @param {Array} sponsors - 提案人列表
...
@@ -504,9 +484,9 @@ export function transformProposalInfo(apiData) {
...
@@ -504,9 +484,9 @@ export function transformProposalInfo(apiData) {
return
{
return
{
// 提案标题
// 提案标题
title
:
data
.
bill_
title
||
'H.R.1-大而美法案'
,
title
:
data
.
bill_
name_zh
,
// 提案时间 - 从政治格局描述中提取
// 提案时间 - 从政治格局描述中提取
date
:
extractDateFromDesc
(
data
.
poli_pattern_desc
)
||
'2025年5月20日'
,
date
:
extractDateFromDesc
(
data
.
poli_pattern_desc
)
,
// 涉及领域 TAG - 使用 domain_name
// 涉及领域 TAG - 使用 domain_name
areas
:
Array
.
isArray
(
data
.
domain_name
)
?
data
.
domain_name
:
(
data
.
domain_name
?
[
data
.
domain_name
]
:
[]),
areas
:
Array
.
isArray
(
data
.
domain_name
)
?
data
.
domain_name
:
(
data
.
domain_name
?
[
data
.
domain_name
]
:
[]),
// 政策领域完整选项列表 - 使用 bill_domain(用于筛选下拉框)
// 政策领域完整选项列表 - 使用 bill_domain(用于筛选下拉框)
...
...
src/components/base/moduleHeader/index.vue
浏览文件 @
bb765b60
...
@@ -10,9 +10,8 @@
...
@@ -10,9 +10,8 @@
<div
class=
"title-box"
v-show=
"!isShowSearchBar"
>
<div
class=
"title-box"
v-show=
"!isShowSearchBar"
>
<!--
<div
class=
"title-box"
v-if=
"false"
>
-->
<!--
<div
class=
"title-box"
v-if=
"false"
>
-->
<div
class=
"title"
v-for=
"(item, index) in homeTitleList"
:key=
"index"
<div
class=
"title"
v-for=
"(item, index) in homeTitleList"
:key=
"index"
@
mouseenter=
"handleShowMenu(index, true)"
@
mouseleave=
"handleShowMenu(index, false)"
@
mouseenter=
"handleShowMenu(index, true)"
@
click=
"handleClickTitle(item, index)"
>
@
click=
"handleClickTitle(item)"
>
<div
class=
"text text-title-1-show"
:class=
"
{ textActive: homeActiveTitleIndex === index }">
<div
class=
"text"
:class=
"
{ textActive: homeActiveTitleIndex === index }">
{{
item
.
name
}}
{{
item
.
name
}}
</div>
</div>
<div
class=
"bottom-line"
v-if=
"homeActiveTitleIndex === index"
></div>
<div
class=
"bottom-line"
v-if=
"homeActiveTitleIndex === index"
></div>
...
@@ -28,13 +27,24 @@
...
@@ -28,13 +27,24 @@
<div
class=
"user"
>
<div
class=
"user"
>
<img
src=
"@/assets/icons/overview/user.png"
alt=
""
/>
<img
src=
"@/assets/icons/overview/user.png"
alt=
""
/>
</div>
</div>
<div
class=
"name"
>
{{
"管理员"
}}
</div>
<div
class=
"name
text-regular
"
>
{{
"管理员"
}}
</div>
</div>
</div>
</div>
</div>
<div
class=
"menu-box"
v-show=
"isShowMenu"
@
mouseenter=
"handleHoverMenu(true)"
<div
class=
"menu-box"
v-show=
"isShowMenu"
@
mouseenter=
"handleHoverMenu(true)"
@
mouseleave=
"handleHoverMenu(false)"
>
@
mouseleave=
"handleHoverMenu(false)"
>
<div
class=
"menu-content"
>
<div
class=
"menu-content"
>
<div
class=
"menu-item"
v-for=
"(item, index) in menuList"
:key=
"index"
@
click=
"handleToModule(item)"
>
<div
class=
"menu-item"
v-for=
"(item, index) in menuList"
:key=
"index"
@
click=
"handleToModule(item, 1)"
>
<div
class=
"icon"
>
<img
:src=
"item.icon"
alt=
""
/>
</div>
<div
class=
"title"
>
{{
item
.
title
}}
</div>
</div>
</div>
</div>
<div
class=
"tool-box"
v-show=
"isShowTool"
@
mouseenter=
"handleHoverTool(true)"
@
mouseleave=
"handleHoverTool(false)"
>
<div
class=
"menu-content"
>
<div
class=
"menu-item"
v-for=
"(item, index) in toolList"
:key=
"index"
@
click=
"handleToModule(item, 2)"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
:src=
"item.icon"
alt=
""
/>
<img
:src=
"item.icon"
alt=
""
/>
</div>
</div>
...
@@ -47,7 +57,7 @@
...
@@ -47,7 +57,7 @@
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
,
watchEffect
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
,
watchEffect
,
onUnmounted
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
getPersonType
}
from
"@/api/common/index"
;
import
{
getPersonType
}
from
"@/api/common/index"
;
...
@@ -65,6 +75,8 @@ import Menu9 from "@/assets/icons/overview/menu9.png";
...
@@ -65,6 +75,8 @@ import Menu9 from "@/assets/icons/overview/menu9.png";
import
Menu10
from
"@/assets/icons/overview/menu10.png"
;
import
Menu10
from
"@/assets/icons/overview/menu10.png"
;
import
Menu11
from
"@/assets/icons/overview/menu11.png"
;
import
Menu11
from
"@/assets/icons/overview/menu11.png"
;
import
Menu12
from
"@/assets/icons/overview/menu12.png"
;
import
Menu12
from
"@/assets/icons/overview/menu12.png"
;
import
Tool1
from
'./tool1.svg'
import
Tool2
from
'./tool2.svg'
import
{
ElMessage
}
from
"element-plus"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
useWrittingAsstaintStore
}
from
"@/stores/writtingAsstaintStore"
;
import
{
useWrittingAsstaintStore
}
from
"@/stores/writtingAsstaintStore"
;
const
store
=
useWrittingAsstaintStore
();
const
store
=
useWrittingAsstaintStore
();
...
@@ -91,29 +103,43 @@ const handleGetPersonType = async () => {
...
@@ -91,29 +103,43 @@ const handleGetPersonType = async () => {
// 概览页标题列表
// 概览页标题列表
const
homeTitleList
=
ref
([
const
homeTitleList
=
ref
([
{
{
name
:
"
中美科技博弈
"
,
name
:
"
首页
"
,
path
:
"/ZMOverView"
,
path
:
"/ZMOverView"
,
disabled
:
false
disabled
:
false
},
},
// {
// name: "主要国家科技动向感知",
{
// path: "",
name
:
"中美科技博弈"
,
// disabled: true
path
:
"/billHome"
,
// },
disabled
:
false
// {
},
// name: "主要国家竞争科技安全",
{
// path: "",
name
:
"智能工具"
,
// disabled: true
path
:
"/chat"
,
// }
disabled
:
false
},
{
name
:
"数据资源库"
,
path
:
"/dataLibrary"
,
disabled
:
false
}
]);
]);
const
homeActiveTitleIndex
=
ref
(
0
);
const
homeActiveTitleIndex
=
ref
(
0
);
const
isShowMenu
=
ref
(
false
);
const
isShowMenu
=
ref
(
false
);
const
handleShowMenu
=
(
index
,
isShow
)
=>
{
const
handleShowMenu
=
(
index
,
isShow
)
=>
{
if
(
index
===
0
)
{
if
(
index
===
1
)
{
isShowMenu
.
value
=
isShow
;
isShowMenu
.
value
=
isShow
;
isShowTool
.
value
=
false
;
}
else
if
(
index
===
2
)
{
isShowMenu
.
value
=
false
isShowTool
.
value
=
isShow
;
}
else
{
isShowMenu
.
value
=
false
isShowTool
.
value
=
false
;
}
}
};
};
...
@@ -122,11 +148,11 @@ const handleHoverMenu = isShow => {
...
@@ -122,11 +148,11 @@ const handleHoverMenu = isShow => {
};
};
const
menuList
=
ref
([
const
menuList
=
ref
([
{
//
{
title
:
"中美科技博弈概览"
,
//
title: "中美科技博弈概览",
icon
:
Menu1
,
//
icon: Menu1,
path
:
"/ZMOverView"
//
path: "/ZMOverView"
},
//
},
{
{
title
:
"科技法案"
,
title
:
"科技法案"
,
icon
:
Menu2
,
icon
:
Menu2
,
...
@@ -184,29 +210,57 @@ const menuList = ref([
...
@@ -184,29 +210,57 @@ const menuList = ref([
}
}
]);
]);
const
handleToModule
=
item
=>
{
const
isShowTool
=
ref
(
false
);
const
curRoute
=
router
.
resolve
({
path
:
item
.
path
const
handleHoverTool
=
isShow
=>
{
});
isShowTool
.
value
=
isShow
;
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
const
searchText
=
ref
(
""
);
const
handleSearch
=
()
=>
{
const
toolList
=
ref
([
const
curRoute
=
router
.
resolve
({
{
path
:
"/searchResults"
,
title
:
"智能问答"
,
query
:
{
icon
:
Tool1
,
searchText
:
searchText
.
value
path
:
"/chat"
}
},
});
{
window
.
open
(
curRoute
.
href
,
"_blank"
);
title
:
"智能写报"
,
icon
:
Tool2
,
path
:
"/writtingAsstaint"
},
])
const
handleToModule
=
(
item
,
index
)
=>
{
homeActiveTitleIndex
.
value
=
index
if
(
index
===
1
)
{
router
.
push
({
path
:
item
.
path
})
}
else
{
const
curRoute
=
router
.
resolve
({
path
:
item
.
path
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
isShowMenu
.
value
=
false
isShowTool
.
value
=
false
};
};
const
handleClickTitle
=
item
=>
{
const
handleClickTitle
=
(
item
,
index
)
=>
{
if
(
item
.
name
===
"主要国家科技动向感知"
||
item
.
name
===
"主要国家竞争科技安全"
)
{
if
(
homeActiveTitleIndex
.
value
===
index
)
return
ElMessage
.
warning
(
"当前功能正在开发中,敬请期待!"
);
homeActiveTitleIndex
.
value
=
index
window
.
localStorage
.
setItem
(
'homeActiveTitleIndex'
,
homeActiveTitleIndex
.
value
)
if
(
item
.
name
===
'智能工具'
)
{
const
curRoute
=
router
.
resolve
({
path
:
item
.
path
,
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
else
{
router
.
push
(
item
.
path
)
}
}
};
};
const
handleClickToolBox
=
()
=>
{
const
handleClickToolBox
=
()
=>
{
...
@@ -215,7 +269,12 @@ const handleClickToolBox = () => {
...
@@ -215,7 +269,12 @@ const handleClickToolBox = () => {
onMounted
(()
=>
{
onMounted
(()
=>
{
handleGetPersonType
();
handleGetPersonType
();
homeActiveTitleIndex
.
value
=
Number
(
window
.
localStorage
.
getItem
(
'homeActiveTitleIndex'
))
});
});
onUnmounted
(()
=>
{
window
.
localStorage
.
removeItem
(
'homeActiveTitleIndex'
)
})
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
@@ -285,12 +344,7 @@ onMounted(() => {
...
@@ -285,12 +344,7 @@ onMounted(() => {
}
}
.text
{
.text
{
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
var
(
--
text-primary-80-color
);
font-family
:
YouSheBiaoTiHei
;
font-style
:
Regular
;
font-size
:
30px
;
font-weight
:
400
;
letter-spacing
:
0px
;
}
}
.textActive
{
.textActive
{
...
@@ -360,13 +414,7 @@ onMounted(() => {
...
@@ -360,13 +414,7 @@ onMounted(() => {
.name
{
.name
{
width
:
48px
;
width
:
48px
;
height
:
30px
;
height
:
30px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
var
(
--
text-primary-80-color
);
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
30px
;
letter-spacing
:
0px
;
}
}
}
}
}
}
...
@@ -406,18 +454,69 @@ onMounted(() => {
...
@@ -406,18 +454,69 @@ onMounted(() => {
width
:
562px
;
width
:
562px
;
height
:
348px
;
height
:
348px
;
margin-top
:
8px
;
margin-top
:
8px
;
margin-left
:
72px
;
margin-left
:
72px
;
display
:
flex
;
display
:
flex
;
flex-wrap
:
wrap
;
flex-wrap
:
wrap
;
.menu-item
{
.menu-item
{
margin-top
:
36px
;
margin-top
:
36px
;
width
:
280px
;
width
:
280px
;
height
:
24px
;
height
:
24px
;
display
:
flex
;
display
:
flex
;
cursor
:
pointer
;
cursor
:
pointer
;
&
:hover
{
.title
{
color
:
var
(
--
color-main-active
);
font-size
:
20px
;
}
}
.icon
{
width
:
24px
;
height
:
24px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.title
{
margin-left
:
16px
;
height
:
24px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-size
:
18px
;
font-weight
:
700
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
}
}
.tool-box
{
position
:
absolute
;
z-index
:
999999
;
width
:
273px
;
height
:
171px
;
top
:
52px
;
left
:
300px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
255
,
255
,
255
,
1
);
border-radius
:
10px
;
backdrop-filter
:
blur
(
30px
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
0
.8
);
.menu-content
{
width
:
562px
;
height
:
348px
;
margin-top
:
8px
;
margin-left
:
72px
;
.menu-item
{
margin-top
:
36px
;
width
:
280px
;
height
:
24px
;
display
:
flex
;
cursor
:
pointer
;
&
:hover
{
&
:hover
{
.title
{
.title
{
color
:
var
(
--
color-main-active
);
color
:
var
(
--
color-main-active
);
...
@@ -434,7 +533,6 @@ onMounted(() => {
...
@@ -434,7 +533,6 @@ onMounted(() => {
height
:
100%
;
height
:
100%
;
}
}
}
}
.title
{
.title
{
margin-left
:
16px
;
margin-left
:
16px
;
height
:
24px
;
height
:
24px
;
...
...
src/components/base/moduleHeader/tool1.svg
0 → 100644
浏览文件 @
bb765b60
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
customFrame=
"#000000"
>
<defs>
<linearGradient
id=
"paint_linear_1"
x1=
"12"
x2=
"12"
y1=
"1"
y2=
"23.0000019"
gradientUnits=
"userSpaceOnUse"
>
<stop
stop-color=
"rgb(0,91,244)"
offset=
"0"
stop-opacity=
"1"
/>
<stop
stop-color=
"rgb(101,0,253)"
offset=
"1"
stop-opacity=
"1"
/>
</linearGradient>
</defs>
<rect
id=
"ZM"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"合并"
d=
"M16.1924 8.34956L17.265 9.39747C16.1916 12.5467 12.973 15.696 8.68258 16.2219C5.81801 16.5715 2.54479 19.4738 1 23C2.07341 16.7015 4.39054 1 20.4837 1C19.4119 4.1461 18.3401 6.24507 17.2683 7.29535L16.1924 8.34956ZM16.9643 4.86177C17.4797 3.85558 19.0242 2.51052 19.0242 1.83869C18.5092 2.17461 16.9643 2.84605 15.9343 4.35789C14.9044 5.86972 12.3295 6.87729 12.3295 6.87729C13.3594 6.54137 16.4489 5.86795 16.9643 4.86177ZM15.4194 8.8928C15.4194 9.56464 15.1104 11.1099 13.8744 11.9161C12.6385 12.7223 10.2696 13.5957 9.23961 13.9316C9.23961 13.9316 12.0205 12.6215 12.8445 11.4122C13.6684 10.2029 14.9044 9.22872 15.4194 8.8928ZM19.254 14.3913C19.254 14.3913 18.5049 16.1842 17.0059 17.2593C15.507 18.3345 13.2582 18.6917 13.2582 18.6917C13.2582 18.6917 15.3188 19.0509 16.2555 20.128C17.1923 21.205 17.0051 23 17.0051 23C17.0051 23 17.7544 21.205 19.2532 20.128C20.7519 19.0509 23 18.6919 23 18.6919C23 18.6919 20.9401 18.3345 20.0036 17.2593C19.0671 16.1842 19.254 14.3913 19.254 14.3913Z"
fill=
"url(#paint_linear_1)"
fill-rule=
"evenodd"
/>
</svg>
src/components/base/moduleHeader/tool2.svg
0 → 100644
浏览文件 @
bb765b60
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
customFrame=
"#000000"
>
<defs>
<linearGradient
id=
"paint_linear_2"
x1=
"12"
x2=
"12"
y1=
"2"
y2=
"22"
gradientUnits=
"userSpaceOnUse"
>
<stop
stop-color=
"rgb(0,91,244)"
offset=
"0"
stop-opacity=
"1"
/>
<stop
stop-color=
"rgb(101,0,253)"
offset=
"1"
stop-opacity=
"1"
/>
</linearGradient>
</defs>
<rect
id=
"法案"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"减去顶层"
d=
"M1.00002 11.1429C1.00002 6.0934 5.66569 2 11.4211 2C17.1765 2 21.8421 6.0934 21.8421 11.1429C21.8421 16.1923 17.1765 20.2857 11.4211 20.2857C10.0795 20.2857 8.79726 20.0634 7.61946 19.6584C6.99335 19.443 5.83647 18.8635 5.83647 18.8635L1 19.6588L2.90775 16.417C2.90775 16.417 2.15952 15.3834 1.87639 14.8183C1.31279 13.6935 1.00002 12.4503 1.00002 11.1429ZM15.7969 6.57031C15.7969 6.57031 15.5142 7.22506 14.9487 7.61766C14.3831 8.01027 13.5347 8.14075 13.5347 8.14075C13.5347 8.14075 14.3121 8.2719 14.6656 8.66523C15.019 9.05855 14.9484 9.71404 14.9484 9.71404C14.9484 9.71404 15.2311 9.05854 15.7965 8.66523C16.362 8.27192 17.2102 8.14079 17.2102 8.14079C17.2102 8.14079 16.433 8.01028 16.0797 7.61766C15.7263 7.22505 15.7969 6.57031 15.7969 6.57031ZM12.5406 14.0703L11.6792 8.14197L7.22535 8.14197L7.55117 8.43609L5.05229 14.0703L6.89676 14.0703L7.65333 12.4565L10.3676 12.4565L10.594 14.0703L12.5406 14.0703ZM8.09512 11.4514L9.18027 9.14708L9.9396 9.14708L10.2654 11.4514L8.09512 11.4514ZM16.3866 9.83812L15.6492 14.0703L13.5921 14.0703L14.1004 10.2371L13.7718 9.83812L16.3866 9.83812ZM9.10525 20.5652C10.534 21.4701 12.266 22 14.1326 22C19.0299 22 23 18.3529 23 13.854C23 12.9035 22.8228 11.991 22.497 11.1429C22.5038 11.2826 22.5072 11.423 22.5072 11.5643C22.5072 16.7661 17.8755 20.9831 12.162 20.9831C11.0979 20.9831 10.0713 20.8368 9.10525 20.5652Z"
fill=
"url(#paint_linear_2)"
fill-rule=
"evenodd"
/>
</svg>
src/components/base/pageBtn/
l
eftBtn.vue
→
src/components/base/pageBtn/
L
eftBtn.vue
浏览文件 @
bb765b60
File moved
src/components/base/pageBtn/
r
ightBtn.vue
→
src/components/base/pageBtn/
R
ightBtn.vue
浏览文件 @
bb765b60
File moved
src/main.js
浏览文件 @
bb765b60
...
@@ -13,8 +13,8 @@ import '@/assets/fonts/font.css'
...
@@ -13,8 +13,8 @@ import '@/assets/fonts/font.css'
import
zhCn
from
'element-plus/dist/locale/zh-cn.mjs'
import
zhCn
from
'element-plus/dist/locale/zh-cn.mjs'
// import AreaTag from '@/components/base/AreaTag/index.vue'
// import AreaTag from '@/components/base/AreaTag/index.vue'
// import LeftBtn from "@/components/base/pageBtn/
l
eftBtn.vue";
// import LeftBtn from "@/components/base/pageBtn/
L
eftBtn.vue";
// import RightBtn from "@/components/base/pageBtn/
r
ightBtn.vue";
// import RightBtn from "@/components/base/pageBtn/
R
ightBtn.vue";
// import OverviewMainBox from "@/components/base/boxBackground/overviewMainBox.vue";
// import OverviewMainBox from "@/components/base/boxBackground/overviewMainBox.vue";
// import OverviewNormalBox from "@/components/base/boxBackground/overviewNormalBox.vue";
// import OverviewNormalBox from "@/components/base/boxBackground/overviewNormalBox.vue";
// import AnalysisBox from '@/components/base/boxBackground/analysisBox.vue'
// import AnalysisBox from '@/components/base/boxBackground/analysisBox.vue'
...
...
src/router/index.js
浏览文件 @
bb765b60
...
@@ -26,21 +26,33 @@ const routes = [
...
@@ -26,21 +26,33 @@ const routes = [
name
:
"Home"
,
name
:
"Home"
,
component
:
Home
,
component
:
Home
,
children
:
[
children
:
[
...
fileRoutes
...
fileRoutes
,
{
path
:
"/dataLibrary"
,
name
:
"DataLibrary"
,
redirect
:
"./dataLibrary/countryBill"
,
component
:
DataLibrary
,
meta
:
{
title
:
'数据资源库'
},
children
:
[
...
dataRoutes
]
},
]
]
},
},
{
//
{
path
:
"/dataLibrary"
,
//
path: "/dataLibrary",
name
:
"DataLibrary"
,
//
name: "DataLibrary",
component
:
DataLibrary
,
//
component: DataLibrary,
meta
:
{
//
meta: {
title
:
'数据资源库'
//
title: '数据资源库'
},
//
},
children
:
[
//
children: [
...
dataRoutes
//
...dataRoutes
]
//
]
},
//
},
];
];
...
...
src/styles/components/ActionButton/index.vue
浏览文件 @
bb765b60
...
@@ -27,8 +27,8 @@
...
@@ -27,8 +27,8 @@
<pre>
<pre>
{{
{{
`
`
import LeftBtn from '@/components/base/pageBtn/
l
eftBtn.vue'
import LeftBtn from '@/components/base/pageBtn/
L
eftBtn.vue'
import RightBtn from '@/components/base/pageBtn/
r
ightBtn.vue'
import RightBtn from '@/components/base/pageBtn/
R
ightBtn.vue'
<LeftBtn />
<LeftBtn />
<RightBtn />
<RightBtn />
...
@@ -48,8 +48,8 @@
...
@@ -48,8 +48,8 @@
<
script
setup
>
<
script
setup
>
import
'@/styles/common.scss'
import
'@/styles/common.scss'
import
LeftBtn
from
'@/components/base/pageBtn/
l
eftBtn.vue'
import
LeftBtn
from
'@/components/base/pageBtn/
L
eftBtn.vue'
import
RightBtn
from
'@/components/base/pageBtn/
r
ightBtn.vue'
import
RightBtn
from
'@/components/base/pageBtn/
R
ightBtn.vue'
const
span
=
12
const
span
=
12
</
script
>
</
script
>
...
...
src/views/bill/background/index.vue
浏览文件 @
bb765b60
...
@@ -83,7 +83,8 @@
...
@@ -83,7 +83,8 @@
</el-icon>
</el-icon>
</div>
</div>
<div
class=
"right-box1-main-bottom"
>
<div
class=
"right-box1-main-bottom"
>
<WordCloudMap
:data=
"wordCloudData"
:selectedName=
"selectedIndustryName"
shape=
"circle"
@
wordClick=
"handleWordClick"
/>
<WordCloudMap
:data=
"wordCloudData"
:selectedName=
"selectedIndustryName"
shape=
"circle"
@
wordClick=
"handleWordClick"
/>
</div>
</div>
</div>
</div>
<div
class=
"right-box2"
>
<div
class=
"right-box2"
>
...
@@ -125,9 +126,11 @@ import defaultNew from "../assets/images/default-icon-news.png";
...
@@ -125,9 +126,11 @@ import defaultNew from "../assets/images/default-icon-news.png";
import
defaultA
from
"../assets/images/default-icon1.png"
;
import
defaultA
from
"../assets/images/default-icon1.png"
;
import
{
getBillBackground
,
getBillPersonAnalyze
,
getBillInfoEvent
,
getBillPersonAnalyzeDy
}
from
"@/api/bill"
;
import
{
getBillBackground
,
getBillPersonAnalyze
,
getBillInfoEvent
,
getBillPersonAnalyzeDy
}
from
"@/api/bill"
;
import
{
useGotoNewsDetail
}
from
"@/router/modules/news"
;
const
route
=
useRoute
();
const
route
=
useRoute
();
const
router
=
useRouter
();
const
router
=
useRouter
();
const
gotoNewsDetail
=
useGotoNewsDetail
();
const
handleNewsImgError
=
e
=>
{
const
handleNewsImgError
=
e
=>
{
e
.
target
.
src
=
defaultNew
;
e
.
target
.
src
=
defaultNew
;
...
@@ -135,13 +138,9 @@ const handleNewsImgError = e => {
...
@@ -135,13 +138,9 @@ const handleNewsImgError = e => {
// 跳转到相关新闻
// 跳转到相关新闻
const
handleClickEvent
=
item
=>
{
const
handleClickEvent
=
item
=>
{
const
routeData
=
router
.
resolve
({
const
newsId
=
item
?.
id
||
item
?.
newsId
;
path
:
"/newsAnalysis"
,
if
(
!
newsId
)
return
;
query
:
{
gotoNewsDetail
(
newsId
);
newsId
:
item
.
id
}
});
window
.
open
(
routeData
.
href
,
"_blank"
);
};
};
...
@@ -149,13 +148,19 @@ const handleClickEvent = item => {
...
@@ -149,13 +148,19 @@ const handleClickEvent = item => {
// 跳转人员详情
// 跳转人员详情
const
handleClickUser
=
item
=>
{
const
handleClickUser
=
item
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
name
)
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
name
)
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/characterPage",
// query: {
// personId: item.id
// }
// });
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
personId
:
item
.
id
personId
:
item
.
id
}
}
});
})
window
.
open
(
routeData
.
href
,
"_blank"
);
};
};
const
box1BtnActive
=
ref
(
1
);
const
box1BtnActive
=
ref
(
1
);
...
@@ -281,7 +286,7 @@ const handleGetBillPersonAnalyze = async isOppose => {
...
@@ -281,7 +286,7 @@ const handleGetBillPersonAnalyze = async isOppose => {
const
{
members
,
industryCounts
}
=
res
.
data
;
const
{
members
,
industryCounts
}
=
res
.
data
;
// 更新人员列表
// 更新人员列表
personList
.
value
=
members
||
[];
personList
.
value
=
members
||
[];
personList
.
value
.
forEach
(
(
item
,
index
)
=>
{
personList
.
value
.
forEach
(
item
=>
{
// 优先使用接口返回的图片,没有则使用默认头像 defaultA
// 优先使用接口返回的图片,没有则使用默认头像 defaultA
item
.
image
=
item
.
imageUrl
||
defaultA
;
item
.
image
=
item
.
imageUrl
||
defaultA
;
item
.
icon
=
userIcon
;
item
.
icon
=
userIcon
;
...
@@ -400,6 +405,7 @@ onMounted(() => {
...
@@ -400,6 +405,7 @@ onMounted(() => {
.left-box--background
{
.left-box--background
{
height
:
auto
;
height
:
auto
;
.box1-main
{
.box1-main
{
.box1-main-center
{
.box1-main-center
{
margin
:
0
auto
;
margin
:
0
auto
;
...
@@ -497,6 +503,7 @@ onMounted(() => {
...
@@ -497,6 +503,7 @@ onMounted(() => {
.left-box--event
{
.left-box--event
{
margin-top
:
15px
;
margin-top
:
15px
;
height
:
auto
;
height
:
auto
;
.box2-main
{
.box2-main
{
--event-item-height
:
60px
;
--event-item-height
:
60px
;
...
...
src/views/bill/billHome/ResourceLibrarySection.vue
浏览文件 @
bb765b60
...
@@ -433,14 +433,21 @@ const handleClickAvatar = async member => {
...
@@ -433,14 +433,21 @@ const handleClickAvatar = async member => {
return
;
return
;
}
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
member
.
name
||
""
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
member
.
name
||
""
);
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve(
{
// path: "/characterPage",
// query:
{
// type,
// personId: member.id
//
}
//
}
);
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
type
,
type
,
personId
:
member
.
id
personId
:
member
.
id
}
}
}
);
}
)
window
.
open
(
routeData
.
href
,
"_blank"
);
}
else
{
}
else
{
personTypeName
=
""
;
personTypeName
=
""
;
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
...
...
src/views/bill/billHome/assets/icons/icon-commit.png
查看替换文件 @
23a7bd89
浏览文件 @
bb765b60
3.0 KB
|
W:
|
H:
5.2 KB
|
W:
|
H:
2-up
Swipe
Onion skin
src/views/bill/billHome/index.vue
浏览文件 @
bb765b60
...
@@ -25,7 +25,9 @@
...
@@ -25,7 +25,9 @@
</div>
</div>
<div
class=
"committee-cards-row"
>
<div
class=
"committee-cards-row"
>
<div
v-for=
"item in committeeCardList"
:key=
"item.id"
class=
"committee-card"
>
<div
v-for=
"item in committeeCardList"
:key=
"item.id"
class=
"committee-card"
>
<div
class=
"committee-card-icon"
></div>
<div
class=
"committee-card-icon"
>
<img
:src=
"iconCommit"
alt=
"委员会头像"
/>
</div>
<div
class=
"committee-card-content"
>
<div
class=
"committee-card-content"
>
<div
class=
"committee-card-name"
>
{{
item
.
name
}}
</div>
<div
class=
"committee-card-name"
>
{{
item
.
name
}}
</div>
<div
class=
"committee-card-chamber"
>
{{
item
.
chamber
}}
</div>
<div
class=
"committee-card-chamber"
>
{{
item
.
chamber
}}
</div>
...
@@ -38,7 +40,7 @@
...
@@ -38,7 +40,7 @@
<DivideHeader
id=
"position1"
class=
"divide1"
:titleText=
"'最新动态'"
></DivideHeader>
<DivideHeader
id=
"position1"
class=
"divide1"
:titleText=
"'最新动态'"
></DivideHeader>
<div
class=
"home-content-center"
>
<div
class=
"home-content-center"
>
<div
class=
"center-top"
>
<div
class=
"center-top"
>
<
o
verviewMainBox
class=
"box1"
title=
"热门法案"
@
toDetail=
"handleClickToDetail"
>
<
O
verviewMainBox
class=
"box1"
title=
"热门法案"
@
toDetail=
"handleClickToDetail"
>
<template
#
headerIcon
>
<template
#
headerIcon
>
<img
style=
"width: 100%; height: 100%"
src=
"./assets/images/box1-header-icon.png"
alt=
""
/>
<img
style=
"width: 100%; height: 100%"
src=
"./assets/images/box1-header-icon.png"
alt=
""
/>
</
template
>
</
template
>
...
@@ -114,14 +116,15 @@
...
@@ -114,14 +116,15 @@
</el-carousel-item>
</el-carousel-item>
</el-carousel>
</el-carousel>
</div>
</div>
</
o
verviewMainBox>
</
O
verviewMainBox>
<RiskSignal
:list=
"warningList"
@
more-click=
"handleToMoreRiskSignal"
@
item-click=
"handleClickToDetailO"
<RiskSignal
:list=
"warningList"
@
more-click=
"handleToMoreRiskSignal"
@
item-click=
"handleClickToDetailO"
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
</div>
</div>
<DivideHeader
id=
"position2"
class=
"divide2"
:titleText=
"'资讯要闻'"
></DivideHeader>
<DivideHeader
id=
"position2"
class=
"divide2"
:titleText=
"'资讯要闻'"
></DivideHeader>
<div
class=
"center-center"
>
<div
class=
"center-center"
>
<NewsList
:newsList=
"newsList"
img=
"newsImage"
title=
"newsTitle"
from=
"from"
content=
"newsContent"
/>
<NewsList
:newsList=
"newsList"
img=
"newsImage"
title=
"newsTitle"
from=
"from"
content=
"newsContent"
@
item-click=
"handleClickNewsDetail"
/>
<MessageBubble
:messageList=
"messageList"
imageUrl=
"personImage"
@
more-click=
"handleToSocialDetail"
<MessageBubble
:messageList=
"messageList"
imageUrl=
"personImage"
@
more-click=
"handleToSocialDetail"
@
person-click=
"handleClickToCharacter"
name=
"personName"
content=
"remarks"
source=
"orgName"
/>
@
person-click=
"handleClickToCharacter"
name=
"personName"
content=
"remarks"
source=
"orgName"
/>
</div>
</div>
...
@@ -287,10 +290,11 @@ import getDoublePieChart from "./utils/doublePieChart";
...
@@ -287,10 +290,11 @@ import getDoublePieChart from "./utils/doublePieChart";
import
box5HeaderIcon
from
"./assets/images/box5-header-icon.png"
;
import
box5HeaderIcon
from
"./assets/images/box5-header-icon.png"
;
import
box6HeaderIcon
from
"./assets/images/box6-header-icon.png"
;
import
box6HeaderIcon
from
"./assets/images/box6-header-icon.png"
;
import
box7HeaderIcon
from
"./assets/images/box7-header-icon.png"
;
import
box7HeaderIcon
from
"./assets/images/box7-header-icon.png"
;
import
iconCommit
from
"./assets/icons/icon-commit.png"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
Calendar
}
from
"@element-plus/icons-vue"
;
import
{
Calendar
}
from
"@element-plus/icons-vue"
;
import
{
useGotoNewsDetail
}
from
"@/router/modules/news"
;
// 跳转人物主页
// 跳转人物主页
const
handleClickToCharacter
=
async
(
id
,
name
)
=>
{
const
handleClickToCharacter
=
async
(
id
,
name
)
=>
{
...
@@ -327,14 +331,23 @@ const handleClickToCharacter = async (id, name) => {
...
@@ -327,14 +331,23 @@ const handleClickToCharacter = async (id, name) => {
return
;
return
;
}
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
name
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
name
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
path
:
"/characterPage"
,
// path: "/characterPage",
query
:
{
// query: {
type
:
type
,
// type=1为科技企业领袖,2为国会议员,3为智库研究人员
// type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId
:
id
// personId: id
// }
// });
// window.open(route.href, "_blank");
router
.
push
(
{
path
:
"/characterPage"
,
query
:
{
type
:
type
,
// type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId
:
id
}
}
}
});
)
window
.
open
(
route
.
href
,
"_blank"
);
}
else
{
}
else
{
personTypeName
=
""
;
personTypeName
=
""
;
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
...
@@ -420,28 +433,34 @@ const curBill = ref({
...
@@ -420,28 +433,34 @@ const curBill = ref({
const
handleClickToDetail
=
()
=>
{
const
handleClickToDetail
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
value
.
billId
);
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
value
.
billId
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
curBill
.
value
.
billName
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
curBill
.
value
.
billName
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/billLayout",
// query: {
// billId: curBill.value.billId
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/billLayout"
,
path
:
"/billLayout"
,
query
:
{
query
:
{
billId
:
curBill
.
value
.
billId
billId
:
curBill
.
value
.
billId
}
}
});
})
console
.
log
(
route
);
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 查看详情 传递参数
// 查看详情 传递参数
const
handleClickToDetailO
=
item
=>
{
const
handleClickToDetailO
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
item
.
billId
);
window
.
sessionStorage
.
setItem
(
"billId"
,
item
.
billId
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
||
item
.
signalTitle
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
||
item
.
signalTitle
);
const
route
=
router
.
resolve
(
"/billLayout?billId="
+
item
.
billId
);
// const route = router.resolve("/billLayout?billId=" + item.billId);
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/billLayout?billId="
+
item
.
billId
)
};
};
// 查看更多风险信号
// 查看更多风险信号
const
handleToMoreRiskSignal
=
()
=>
{
const
handleToMoreRiskSignal
=
()
=>
{
const
route
=
router
.
resolve
(
"/viewRiskSignal"
);
// const route = router.resolve("/viewRiskSignal");
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/viewRiskSignal"
)
};
};
// 风险信号
// 风险信号
const
warningList
=
ref
([]);
const
warningList
=
ref
([]);
...
@@ -498,18 +517,21 @@ const aiPaneLoading = ref({
...
@@ -498,18 +517,21 @@ const aiPaneLoading = ref({
box9
:
false
box9
:
false
});
});
const
gotoNewsDetail
=
useGotoNewsDetail
();
const
handleClickNewsDetail
=
news
=>
{
const
newsId
=
news
?.
newsId
||
news
?.
id
;
if
(
!
newsId
)
return
;
gotoNewsDetail
(
newsId
);
};
const
buildAiChartPayload
=
key
=>
{
const
buildAiChartPayload
=
key
=>
{
if
(
key
===
"box5"
)
{
if
(
key
===
"box5"
)
{
const
title
=
Array
.
isArray
(
box5Data
.
value
.
title
)
?
box5Data
.
value
.
title
:
[];
const
title
=
Array
.
isArray
(
box5Data
.
value
.
title
)
?
box5Data
.
value
.
title
:
[];
const
proposed
=
box5Data
.
value
?.
data
?.[
0
]?.
value
||
[];
const
proposed
=
box5Data
.
value
?.
data
?.[
0
]?.
value
||
[];
const
passed
=
box5Data
.
value
?.
data
?.[
1
]?.
value
||
[];
const
passed
=
box5Data
.
value
?.
data
?.[
1
]?.
value
||
[];
const
rate
=
const
housePassed
=
box5Data
.
value
?.
data
?.[
2
]?.
value
||
[];
box5Data
.
value
.
percent
||
const
senatePassed
=
box5Data
.
value
?.
data
?.[
3
]?.
value
||
[];
title
.
map
((
_
,
i
)
=>
{
const
hsPassed
=
box5Data
.
value
?.
data
?.[
4
]?.
value
||
[];
const
p
=
Number
(
proposed
[
i
]
||
0
);
const
pass
=
Number
(
passed
[
i
]
||
0
);
return
p
?
Number
(((
pass
/
p
)
*
100
).
toFixed
(
2
))
:
0
;
});
return
{
return
{
type
:
"折线图"
,
type
:
"折线图"
,
name
:
"涉华法案数量变化趋势"
,
name
:
"涉华法案数量变化趋势"
,
...
@@ -517,7 +539,9 @@ const buildAiChartPayload = key => {
...
@@ -517,7 +539,9 @@ const buildAiChartPayload = key => {
month
,
month
,
proposed
:
Number
(
proposed
[
i
]
||
0
),
proposed
:
Number
(
proposed
[
i
]
||
0
),
passed
:
Number
(
passed
[
i
]
||
0
),
passed
:
Number
(
passed
[
i
]
||
0
),
pass_rate
:
Number
(
rate
[
i
]
||
0
)
house_passed
:
Number
(
housePassed
[
i
]
||
0
),
senate_passed
:
Number
(
senatePassed
[
i
]
||
0
),
hs_passed
:
Number
(
hsPassed
[
i
]
||
0
)
}))
}))
};
};
}
}
...
@@ -750,6 +774,18 @@ const box5Data = ref({
...
@@ -750,6 +774,18 @@ const box5Data = ref({
{
{
name
:
"通过法案"
,
name
:
"通过法案"
,
value
:
[
6
,
3
,
4
,
6
,
11
,
5
,
2
,
14
,
16
,
27
,
28
,
44
]
value
:
[
6
,
3
,
4
,
6
,
11
,
5
,
2
,
14
,
16
,
27
,
28
,
44
]
},
{
name
:
"众议院通过"
,
value
:
[]
},
{
name
:
"参议院通过"
,
value
:
[]
},
{
name
:
"双院通过"
,
value
:
[]
}
}
]
]
});
});
...
@@ -772,11 +808,23 @@ const handleGetBillCount = async () => {
...
@@ -772,11 +808,23 @@ const handleGetBillCount = async () => {
data
:
[
data
:
[
{
{
name
:
"提出法案"
,
name
:
"提出法案"
,
value
:
sortedData
.
map
(
item
=>
item
.
total
Count
)
value
:
sortedData
.
map
(
item
=>
item
.
proposed
Count
)
},
},
{
{
name
:
"通过法案"
,
name
:
"通过法案"
,
value
:
sortedData
.
map
(
item
=>
item
.
passCount
)
value
:
sortedData
.
map
(
item
=>
item
.
passCount
)
},
{
name
:
"众议院通过"
,
value
:
sortedData
.
map
(
item
=>
item
.
houseCount
)
},
{
name
:
"参议院通过"
,
value
:
sortedData
.
map
(
item
=>
item
.
senateCount
)
},
{
name
:
"双院通过"
,
value
:
sortedData
.
map
(
item
=>
item
.
hscount
)
}
}
],
],
percent
:
sortedData
.
map
(
item
=>
item
.
percent
)
percent
:
sortedData
.
map
(
item
=>
item
.
percent
)
...
@@ -788,7 +836,10 @@ const handleGetBillCount = async () => {
...
@@ -788,7 +836,10 @@ const handleGetBillCount = async () => {
title
:
[],
title
:
[],
data
:
[
data
:
[
{
name
:
"提出法案"
,
value
:
[]
},
{
name
:
"提出法案"
,
value
:
[]
},
{
name
:
"通过法案"
,
value
:
[]
}
{
name
:
"通过法案"
,
value
:
[]
},
{
name
:
"众议院通过"
,
value
:
[]
},
{
name
:
"参议院通过"
,
value
:
[]
},
{
name
:
"双院通过"
,
value
:
[]
}
],
],
percent
:
[]
percent
:
[]
};
};
...
@@ -801,7 +852,10 @@ const handleGetBillCount = async () => {
...
@@ -801,7 +852,10 @@ const handleGetBillCount = async () => {
title
:
[],
title
:
[],
data
:
[
data
:
[
{
name
:
"提出法案"
,
value
:
[]
},
{
name
:
"提出法案"
,
value
:
[]
},
{
name
:
"通过法案"
,
value
:
[]
}
{
name
:
"通过法案"
,
value
:
[]
},
{
name
:
"众议院通过"
,
value
:
[]
},
{
name
:
"参议院通过"
,
value
:
[]
},
{
name
:
"双院通过"
,
value
:
[]
}
],
],
percent
:
[]
percent
:
[]
};
};
...
@@ -814,13 +868,17 @@ const handleBox5 = async () => {
...
@@ -814,13 +868,17 @@ const handleBox5 = async () => {
await
nextTick
();
await
nextTick
();
const
proposed
=
box5Data
.
value
.
data
[
0
].
value
;
const
proposed
=
box5Data
.
value
.
data
[
0
].
value
;
const
passed
=
box5Data
.
value
.
data
[
1
].
value
;
const
passed
=
box5Data
.
value
.
data
[
1
].
value
;
const
rate
=
const
housePassed
=
box5Data
.
value
.
data
[
2
].
value
;
box5Data
.
value
.
percent
||
const
senatePassed
=
box5Data
.
value
.
data
[
3
].
value
;
proposed
.
map
((
p
,
i
)
=>
{
const
hsPassed
=
box5Data
.
value
.
data
[
4
].
value
;
const
pass
=
passed
[
i
]
||
0
;
const
box5Chart
=
getMultiLineChart
(
return
p
?
((
pass
/
p
)
*
100
).
toFixed
(
2
)
:
0
;
box5Data
.
value
.
title
,
});
proposed
,
const
box5Chart
=
getMultiLineChart
(
box5Data
.
value
.
title
,
proposed
,
passed
,
rate
);
passed
,
housePassed
,
senatePassed
,
hsPassed
);
const
domain
=
categoryList
.
value
.
filter
(
item
=>
{
const
domain
=
categoryList
.
value
.
filter
(
item
=>
{
return
item
.
id
===
box5Select
.
value
return
item
.
id
===
box5Select
.
value
})[
0
]?.
name
})[
0
]?.
name
...
@@ -901,13 +959,19 @@ watch(box7selectetedTime, () => {
...
@@ -901,13 +959,19 @@ watch(box7selectetedTime, () => {
});
});
// 查看社交媒体详情
// 查看社交媒体详情
const
handleToSocialDetail
=
item
=>
{
const
handleToSocialDetail
=
item
=>
{
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/characterPage",
// query: {
// personId: item.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
personId
:
item
.
id
personId
:
item
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 关键条款
// 关键条款
const
wordCloudData
=
ref
([]);
const
wordCloudData
=
ref
([]);
...
@@ -922,10 +986,10 @@ const handleGetKeyTK = async () => {
...
@@ -922,10 +986,10 @@ const handleGetKeyTK = async () => {
.
sort
((
a
,
b
)
=>
(
b
.
count
??
0
)
-
(
a
.
count
??
0
))
.
sort
((
a
,
b
)
=>
(
b
.
count
??
0
)
-
(
a
.
count
??
0
))
.
slice
(
0
,
20
)
.
slice
(
0
,
20
)
.
map
(
item
=>
{
.
map
(
item
=>
{
return
{
return
{
name
:
item
.
clause
,
name
:
item
.
clause
,
value
:
item
.
count
value
:
item
.
count
};
};
});
});
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -1693,6 +1757,14 @@ onUnmounted(() => {
...
@@ -1693,6 +1757,14 @@ onUnmounted(() => {
border-radius
:
50%
;
border-radius
:
50%
;
background
:
var
(
--
color-primary-10
);
background
:
var
(
--
color-primary-10
);
flex-shrink
:
0
;
flex-shrink
:
0
;
overflow
:
hidden
;
img
{
width
:
100%
;
height
:
100%
;
display
:
block
;
object-fit
:
cover
;
}
}
}
.committee-card-content
{
.committee-card-content
{
...
...
src/views/bill/billHome/utils/multiLineChart.js
浏览文件 @
bb765b60
import
*
as
echarts
from
'echarts'
import
*
as
echarts
from
'echarts'
import
{
MUTICHARTCOLORS
}
from
'../../../../common/constant'
const
getMultiLineChart
=
(
dataX
,
proposedData
,
passData
,
houseData
,
senateData
,
hsData
)
=>
{
const
lineColors
=
MUTICHARTCOLORS
.
slice
(
0
,
5
)
const
hexToRgba
=
(
hex
,
alpha
)
=>
{
if
(
typeof
hex
!==
'string'
||
!
hex
.
startsWith
(
'#'
))
return
hex
const
normalized
=
hex
.
replace
(
'#'
,
''
)
const
full
=
normalized
.
length
===
3
?
normalized
.
split
(
''
).
map
(
c
=>
c
+
c
).
join
(
''
)
:
normalized
const
r
=
parseInt
(
full
.
slice
(
0
,
2
),
16
)
const
g
=
parseInt
(
full
.
slice
(
2
,
4
),
16
)
const
b
=
parseInt
(
full
.
slice
(
4
,
6
),
16
)
return
`rgba(
${
r
}
,
${
g
}
,
${
b
}
,
${
alpha
}
)`
}
const
getAreaColor
=
color
=>
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
offset
:
0
,
color
:
hexToRgba
(
color
,
0.35
)
},
{
offset
:
1
,
color
:
hexToRgba
(
color
,
0
)
}])
const
getMultiLineChart
=
(
dataX
,
dataY1
,
dataY2
,
dataY3
)
=>
{
return
{
return
{
tooltip
:
{
tooltip
:
{
trigger
:
'item'
,
trigger
:
'item'
,
...
@@ -28,7 +49,7 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -28,7 +49,7 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
containLabel
:
true
containLabel
:
true
},
},
legend
:
{
legend
:
{
data
:
[
'提出法案'
,
'通过法案'
,
'
通过率
'
],
data
:
[
'提出法案'
,
'通过法案'
,
'
众议院通过'
,
'参议院通过'
,
'双院通过
'
],
show
:
true
,
show
:
true
,
top
:
10
,
top
:
10
,
icon
:
'circle'
,
icon
:
'circle'
,
...
@@ -38,7 +59,7 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -38,7 +59,7 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
fontSize
:
'14px'
,
fontSize
:
'14px'
,
}
}
},
},
color
:
[
'#1677FF'
,
'#FA8C16'
,
'#D9001B'
]
,
color
:
lineColors
,
xAxis
:
[
xAxis
:
[
{
{
type
:
'category'
,
type
:
'category'
,
...
@@ -65,7 +86,6 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -65,7 +86,6 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
{
{
type
:
'value'
,
type
:
'value'
,
position
:
'left'
,
position
:
'left'
,
// 纵轴单位只在纵轴上方显示一次(通过 axis.name),避免每个刻度重复显示
name
:
'项'
,
name
:
'项'
,
nameLocation
:
'end'
,
nameLocation
:
'end'
,
nameGap
:
12
,
nameGap
:
12
,
...
@@ -73,51 +93,20 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -73,51 +93,20 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
color
:
'#666'
,
color
:
'#666'
,
fontSize
:
14
,
fontSize
:
14
,
fontWeight
:
400
,
fontWeight
:
400
,
// 给单位一点点下移空间,使其更贴近顶部刻度数字的视觉基线
padding
:
[
0
,
0
,
6
,
-
20
]
padding
:
[
0
,
0
,
6
,
-
20
]
},
},
axisLabel
:
{
axisLabel
:
{
formatter
:
'{value}'
,
formatter
:
'{value}'
,
color
:
'#666'
,
fontSize
:
14
,
fontWeight
:
400
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#e7f3ff'
,
type
:
'dashed'
,
}
},
},
{
type
:
'value'
,
position
:
'right'
,
min
:
0
,
max
:
100
,
interval
:
20
,
// 通过率单位仅展示一次
name
:
'%'
,
nameLocation
:
'end'
,
nameGap
:
12
,
nameTextStyle
:
{
color
:
'#666'
,
color
:
'#666'
,
fontSize
:
14
,
fontSize
:
14
,
fontWeight
:
400
,
fontWeight
:
400
padding
:
[
0
,
0
,
6
,
20
]
},
axisLabel
:
{
formatter
:
'{value}'
,
color
:
'#666'
,
fontSize
:
14
,
fontWeight
:
400
},
},
splitLine
:
{
splitLine
:
{
show
:
true
,
show
:
true
,
lineStyle
:
{
lineStyle
:
{
color
:
'#e7f3ff'
,
color
:
'#e7f3ff'
,
type
:
'dashed'
,
type
:
'dashed'
,
}
}
},
},
}
}
],
],
...
@@ -129,18 +118,12 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -129,18 +118,12 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
symbol
:
'emptyCircle'
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
symbolSize
:
6
,
areaStyle
:
{
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
color
:
getAreaColor
(
lineColors
[
0
])
offset
:
0
,
color
:
'rgba(22, 119, 255, 0.4)'
// 起始颜色
},
{
offset
:
1
,
color
:
'rgba(22, 119, 255, 0)'
// 结束颜色
}])
},
},
itemStyle
:
{
itemStyle
:
{
color
:
'#1677FF'
color
:
lineColors
[
0
]
},
},
data
:
dataY1
data
:
proposedData
},
},
{
{
name
:
'通过法案'
,
name
:
'通过法案'
,
...
@@ -149,34 +132,54 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
...
@@ -149,34 +132,54 @@ const getMultiLineChart = (dataX, dataY1, dataY2, dataY3) => {
symbol
:
'emptyCircle'
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
symbolSize
:
6
,
areaStyle
:
{
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
color
:
getAreaColor
(
lineColors
[
1
])
offset
:
0
,
color
:
'rgba(250, 140, 22, 0.4)'
// 起始颜色
},
{
offset
:
1
,
color
:
'rgba(250, 140, 22, 0)'
// 结束颜色
}])
},
},
itemStyle
:
{
itemStyle
:
{
color
:
'#FA8C16'
color
:
lineColors
[
1
]
},
},
data
:
dataY2
data
:
passData
},
},
{
{
name
:
'
通过率
'
,
name
:
'
众议院通过
'
,
type
:
'line'
,
type
:
'line'
,
yAxisIndex
:
1
,
smooth
:
true
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbol
:
'emptyCircle'
,
symbolSize
:
4
,
symbolSize
:
6
,
lineStyle
:
{
areaStyle
:
{
type
:
'dashed'
,
color
:
getAreaColor
(
lineColors
[
2
])
width
:
2
},
itemStyle
:
{
color
:
lineColors
[
2
]
},
data
:
houseData
},
{
name
:
'参议院通过'
,
type
:
'line'
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
areaStyle
:
{
color
:
getAreaColor
(
lineColors
[
3
])
},
itemStyle
:
{
color
:
lineColors
[
3
]
},
data
:
senateData
},
{
name
:
'双院通过'
,
type
:
'line'
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
areaStyle
:
{
color
:
getAreaColor
(
lineColors
[
4
])
},
},
itemStyle
:
{
itemStyle
:
{
color
:
'#D9001B'
color
:
lineColors
[
4
]
},
},
data
:
dataY3
data
:
hsData
}
}
]
]
}
}
...
...
src/views/bill/influence/ProgressForecast/components/FilterSection.vue
浏览文件 @
bb765b60
...
@@ -62,7 +62,6 @@
...
@@ -62,7 +62,6 @@
<div
class=
"field-content"
>
<div
class=
"field-content"
>
<el-select
<el-select
v-model=
"localValues.oppositionProposer"
v-model=
"localValues.oppositionProposer"
multiple
placeholder=
"请选择"
placeholder=
"请选择"
style=
"width: 420px"
style=
"width: 420px"
@
change=
"handleChange"
@
change=
"handleChange"
...
@@ -83,7 +82,6 @@
...
@@ -83,7 +82,6 @@
<div
class=
"field-content"
>
<div
class=
"field-content"
>
<el-select
<el-select
v-model=
"localValues.proposalTime"
v-model=
"localValues.proposalTime"
multiple
placeholder=
"请选择"
placeholder=
"请选择"
style=
"width: 420px"
style=
"width: 420px"
@
change=
"handleChange"
@
change=
"handleChange"
...
@@ -115,18 +113,18 @@ const props = defineProps<{
...
@@ -115,18 +113,18 @@ const props = defineProps<{
const
localValues
=
ref
({
const
localValues
=
ref
({
policyArea
:
[]
as
string
[],
policyArea
:
[]
as
string
[],
governmentType
:
[]
as
string
[],
governmentType
:
[]
as
string
[],
oppositionProposer
:
[]
as
string
[]
,
oppositionProposer
:
''
as
string
,
proposalTime
:
[]
as
string
[]
,
proposalTime
:
''
as
string
,
})
})
// 根据 proposalInfo 计算初始筛选值(即"设置为当前提案"的目标状态)
// 根据 proposalInfo 计算初始筛选值(即"设置为当前提案"的目标状态)
function
buildInitialValues
(
info
?:
ProposalInfo
|
null
):
Record
<
string
,
string
[]
>
{
function
buildInitialValues
(
info
?:
ProposalInfo
|
null
):
Record
<
string
,
string
[]
|
string
>
{
if
(
!
info
)
return
{
policyArea
:
[],
governmentType
:
[],
oppositionProposer
:
[],
proposalTime
:
[]
}
if
(
!
info
)
return
{
policyArea
:
[],
governmentType
:
[],
oppositionProposer
:
''
,
proposalTime
:
''
}
return
{
return
{
policyArea
:
info
.
defaultDomains
?.
length
?
[...
info
.
defaultDomains
]
:
[...(
info
.
areas
||
[])],
policyArea
:
info
.
defaultDomains
?.
length
?
[...
info
.
defaultDomains
]
:
[...(
info
.
areas
||
[])],
governmentType
:
info
.
patternType
?
[
info
.
patternType
]
:
[],
governmentType
:
info
.
patternType
?
[
info
.
patternType
]
:
[],
oppositionProposer
:
[]
,
oppositionProposer
:
''
,
proposalTime
:
[]
,
proposalTime
:
''
,
}
}
}
}
...
@@ -144,8 +142,8 @@ function reset() {
...
@@ -144,8 +142,8 @@ function reset() {
localValues
.
value
=
{
localValues
.
value
=
{
policyArea
:
[],
policyArea
:
[],
governmentType
:
[],
governmentType
:
[],
oppositionProposer
:
[]
,
oppositionProposer
:
''
,
proposalTime
:
[]
,
proposalTime
:
''
,
}
}
}
}
...
...
src/views/bill/influence/ProgressForecast/components/PredictionPhaseCard.vue
浏览文件 @
bb765b60
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
<div
v-if=
"phase"
class=
"phase-card"
:class=
"borderColorClass"
>
<div
v-if=
"phase"
class=
"phase-card"
:class=
"borderColorClass"
>
<div
class=
"phase-header flex-display-start"
>
<div
class=
"phase-header flex-display-start"
>
<div>
<div>
<
h3
class=
"phase-title main-color text-title-2-bold"
>
{{
phase
.
title
}}
</h3
>
<
div
class=
"phase-title main-color text-title-2-bold"
>
{{
phase
.
title
}}
</div
>
<
p
class=
"text-tip-2 text-primary-50-clor"
>
{{
phase
.
description
}}
</p
>
<
div
class=
"text-tip-2 text-primary-50-clor"
>
{{
phase
.
description
}}
</div
>
</div>
</div>
<div
class=
"phase-status"
>
<div
class=
"phase-status"
>
<span
class=
"risk-badge"
:class=
"riskColorClass"
>
{{
riskLabel
}}
</span>
<span
class=
"risk-badge"
:class=
"riskColorClass"
>
{{
riskLabel
}}
</span>
...
@@ -18,32 +18,41 @@
...
@@ -18,32 +18,41 @@
<p
v-if=
"phase.riskLevel !== 'passed'"
class=
"text-tip-2 text-primary-50-clor"
>
{{
phase
.
estimatedDays
}}
</p>
<p
v-if=
"phase.riskLevel !== 'passed'"
class=
"text-tip-2 text-primary-50-clor"
>
{{
phase
.
estimatedDays
}}
</p>
</div>
</div>
</div>
</div>
<div
style=
"display: flex;"
>
<div
class=
"box-title-row"
><img
src=
"../assets/input.svg"
/>
<span
class=
"text-compact-bold text-primary-80-clor"
style=
"margin-left: 8px;"
>
预测模型数据输入
</span></div>
<div
class=
"box-hint flex-display-center text-tip-2 text-primary-50-clor"
style=
"margin-left: auto;"
>
<img
src=
"../assets/importent.svg"
/>
<span>
此阶段预测基于以下多维特征
</span>
</div>
</div>
<div
class=
"model-inputs-box"
>
<div
class=
"model-inputs-box"
>
<div
class=
"box-header flex-display-start"
>
<div
class=
"box-header flex-display-start"
>
<div
class=
"box-title-row flex-display-center"
>
<div
class=
"box-title-row flex-display-center"
>
<img
src=
"../assets/input.svg"
/>
<span
class=
"text-compact-bold"
>
预测模型数据输入
</span>
</div>
<div
class=
"box-hint flex-display-center text-tip-2 text-primary-50-clor"
>
<img
src=
"../assets/importent.svg"
/>
<span>
此阶段预测基于以下多维特征
</span>
</div>
</div>
</div>
</div>
<div
class=
"model-inputs"
>
<div
class=
"model-inputs"
>
<
p
<
div
v-for=
"(input, index) in phase.modelInputs"
v-for=
"(input, index) in phase.modelInputs"
:key=
"index"
:key=
"index"
class=
"text-tip-2 text-primary-65-clor"
class=
"text-tip-2 text-primary-65-clor"
>
>
{{
input
}}
{{
input
}}
</
p
>
</
div
>
</div>
</div>
</div>
</div>
<div
v-if=
"phase.predictionBasis"
class=
"facts-section"
>
<div
v-if=
"phase.predictionBasis"
class=
"facts-section"
>
<div
class=
"box-header flex-display-start"
>
<div
class=
"box-header flex-display-start"
>
<div
class=
"box-title-row flex-display-center"
>
<div
class=
"box-title-row flex-display-center"
>
<img
src=
"../assets/icon1.svg"
/>
<img
src=
"../assets/icon1.svg"
/>
<span
class=
"text-compact-bold"
>
通过性预测依据
</span>
<span
class=
"text-compact-bold
text-primary-80-clor
"
>
通过性预测依据
</span>
</div>
</div>
<div
class=
"box-hint flex-display-center text-tip-2 text-primary-50-clor"
>
<div
class=
"box-hint flex-display-center text-tip-2 text-primary-50-clor"
>
<img
src=
"../assets/importent.svg"
/>
<img
src=
"../assets/importent.svg"
/>
...
@@ -51,9 +60,11 @@
...
@@ -51,9 +60,11 @@
</div>
</div>
</div>
</div>
<div
class=
"prediction-basis-content"
>
<div
class=
"prediction-basis-content"
>
<
p
class=
"text-tip-2 text-primary-65-clor"
>
{{
phase
.
predictionBasis
}}
</p
>
<
div
class=
"text-tip-2 text-primary-65-clor"
>
{{
phase
.
predictionBasis
}}
</div
>
</div>
</div>
</div>
</div>
<!-- 底部虚线分隔 -->
<div
class=
"phase-divider"
></div>
</div>
</div>
</
template
>
</
template
>
...
@@ -144,7 +155,8 @@ const riskLabel = computed(() => {
...
@@ -144,7 +155,8 @@ const riskLabel = computed(() => {
<
style
scoped
>
<
style
scoped
>
.phase-card
{
.phase-card
{
padding-left
:
24px
;
padding-left
:
24px
;
padding-bottom
:
32px
;
/* padding-bottom: 16px; */
/* padding-top: 16px; */
}
}
.border-primary
{
.border-primary
{
...
@@ -166,7 +178,7 @@ const riskLabel = computed(() => {
...
@@ -166,7 +178,7 @@ const riskLabel = computed(() => {
.phase-header
{
.phase-header
{
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
flex-start
;
align-items
:
flex-start
;
margin-bottom
:
16px
;
/* margin-bottom: 16px; */
}
}
.phase-header
>
div
:first-child
{
.phase-header
>
div
:first-child
{
...
@@ -288,4 +300,10 @@ const riskLabel = computed(() => {
...
@@ -288,4 +300,10 @@ const riskLabel = computed(() => {
height
:
16px
;
height
:
16px
;
color
:
var
(
--text-primary-65-color
);
color
:
var
(
--text-primary-65-color
);
}
}
/* 底部虚线分隔 */
.phase-divider
{
margin-top
:
16px
;
border-bottom
:
1px
solid
var
(
--bg-black-10
,
#e5e5e5
);
}
</
style
>
</
style
>
src/views/bill/influence/ProgressForecast/components/Step2FilterBills.vue
浏览文件 @
bb765b60
...
@@ -125,22 +125,23 @@ async function loadData() {
...
@@ -125,22 +125,23 @@ async function loadData() {
// 使用真实 API,传入 billIds、domains、patternType、proposalType
// 使用真实 API,传入 billIds、domains、patternType、proposalType
const
params
=
{
const
params
=
{
billIds
:
filterParams
?.
value
.
billIds
,
billIds
:
filterParams
?.
value
.
billIds
,
domains
:
JSON
.
stringify
(
filterParams
?.
value
.
domains
)
||
[],
domains
:
filterParams
?.
value
.
domains
||
[],
patternType
:
filterParams
?.
value
.
patternType
||
'统一政府'
,
patternType
:
filterParams
?.
value
.
patternType
||
'统一政府'
,
proposalType
:
filterParams
?.
value
.
proposalType
||
'两党共同提案'
proposalType
:
filterParams
?.
value
.
proposalType
||
'两党共同提案'
}
}
const
response
=
await
getSimiBills
(
params
)
const
response
=
await
getSimiBills
(
params
)
if
(
response
&&
response
.
data
)
{
if
(
response
&&
response
.
data
)
{
// 保存原始数据
// 保存原始数据
(新 API 返回结构中 simi_bills 是法案数组)
rawBillsData
.
value
=
response
.
data
rawBillsData
.
value
=
response
.
data
.
simi_bills
||
[]
const
{
stats
:
apiStats
,
bills
:
apiBills
}
=
transformSimiBillsData
(
response
)
const
{
stats
:
apiStats
,
bills
:
apiBills
}
=
transformSimiBillsData
(
response
)
stats
.
value
=
apiStats
stats
.
value
=
apiStats
bills
.
value
=
apiBills
bills
.
value
=
apiBills
}
else
{
}
else
{
stats
.
value
=
null
stats
.
value
=
null
bills
.
value
=
[]
bills
.
value
=
[]
rawBillsData
.
value
=
[]
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'获取相似法案失败:'
,
error
)
console
.
error
(
'获取相似法案失败:'
,
error
)
...
...
src/views/bill/influence/ProgressForecast/index.vue
浏览文件 @
bb765b60
...
@@ -90,7 +90,7 @@ onMounted(async () => {
...
@@ -90,7 +90,7 @@ onMounted(async () => {
// 获取提案信息
// 获取提案信息
const
predictionData
=
await
getProgressPrediction
(
billId
.
value
).
catch
(
err
=>
{
const
predictionData
=
await
getProgressPrediction
(
billId
.
value
).
catch
(
err
=>
{
console
.
error
(
'
[v0]
获取预测数据失败:'
,
err
)
console
.
error
(
' 获取预测数据失败:'
,
err
)
return
null
return
null
})
})
...
@@ -341,7 +341,7 @@ async function handleStep2Next(selectedBills: any[]) {
...
@@ -341,7 +341,7 @@ async function handleStep2Next(selectedBills: any[]) {
predictionResult
.
value
=
transformPredictionResult
(
response
.
data
)
predictionResult
.
value
=
transformPredictionResult
(
response
.
data
)
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'
[v0]
获取预测分析失败:'
,
error
)
console
.
error
(
' 获取预测分析失败:'
,
error
)
}
finally
{
}
finally
{
predictionLoading
.
value
=
false
predictionLoading
.
value
=
false
}
}
...
@@ -370,24 +370,26 @@ function transformPredictionResult(data: any) {
...
@@ -370,24 +370,26 @@ function transformPredictionResult(data: any) {
const
factors
=
data
?.
factor_analysis
||
[]
const
factors
=
data
?.
factor_analysis
||
[]
// 转换阶段分析
// 转换阶段分析
const
phases
=
stages
.
map
((
stage
:
any
,
index
:
number
)
=>
({
const
chineseNum
=
[
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
,
'七'
,
'八'
,
'九'
,
'十'
]
id
:
index
+
1
,
title
:
`阶段
${
index
+
1
}
:
${
stage
.
stage
}
`
,
const
phases
=
stages
.
map
((
stage
:
any
,
index
:
number
)
=>
({
description
:
stage
.
stage
,
id
:
index
+
1
,
riskLevel
:
probabilityToRisk
(
stage
.
predicted_pass_probability
),
title
:
`阶段
${
chineseNum
[
index
]
||
index
+
1
}
:
${
stage
.
stage
}
`
,
progressLevel
:
probabilityToProgressLevel
(
stage
.
predicted_pass_probability
),
description
:
stage
.
stage
,
estimatedDays
:
`预计耗时
${
stage
.
predicted_passing_time
}
天`
,
riskLevel
:
probabilityToRisk
(
stage
.
predicted_pass_probability
),
modelInputs
:
[
stage
.
analysis
],
progressLevel
:
probabilityToProgressLevel
(
stage
.
predicted_pass_probability
),
supportingFacts
:
{
estimatedDays
:
`预计耗时
${
stage
.
predicted_passing_time
}
天`
,
title
:
'通过性预测依据'
,
modelInputs
:
[
stage
.
analysis
],
basedOn
:
'此阶段预测基于以下观点'
,
supportingFacts
:
{
stats
:
[
title
:
'通过性预测依据'
,
{
value
:
`
${
stage
.
predicted_pass_probability
}
`
,
label
:
'通过概率'
},
basedOn
:
'此阶段预测基于以下观点'
,
{
value
:
`
${
stage
.
predicted_passing_time
}
天`
,
label
:
'预计耗时'
}
stats
:
[
]
{
value
:
`
${
stage
.
predicted_pass_probability
}
`
,
label
:
'通过概率'
},
},
{
value
:
`
${
stage
.
predicted_passing_time
}
天`
,
label
:
'预计耗时'
}
predictionBasis
:
stage
.
prediction_basis
]
}))
},
predictionBasis
:
stage
.
prediction_basis
}))
return
{
return
{
title
:
'立法进展阶段预测分析'
,
title
:
'立法进展阶段预测分析'
,
...
...
src/views/bill/influence/industry/index.vue
浏览文件 @
bb765b60
...
@@ -285,10 +285,22 @@ const onFormatNode = (item) => {
...
@@ -285,10 +285,22 @@ const onFormatNode = (item) => {
const
onDecreeRelatedEntitie
=
async
(
id
)
=>
{
const
onDecreeRelatedEntitie
=
async
(
id
)
=>
{
try
{
try
{
const
res
=
await
getDecreeRelatedEntitie
({
id
}
);
const
res
=
await
getDecreeRelatedEntitie
({
orgId
:
id
,
rule
:
false
,
withSanInfo
:
false
,
}
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
graphInfo
.
links
=
(
res
.
data
||
[]).
map
(
onFormatLink
);
const
data
=
res
.
data
||
{
}
;
graphInfo
.
nodes
=
(
res
.
data
||
[]).
map
(
onFormatNode
);
const
parentList
=
Array
.
isArray
(
data
.
parentOrgList
)
?
data
.
parentOrgList
:
[];
const
childrenList
=
Array
.
isArray
(
data
.
childrenOrgList
)
?
data
.
childrenOrgList
:
[];
const
relationList
=
[...
parentList
,
...
childrenList
].
map
((
item
)
=>
({
...
item
,
relation
:
item
.
description
||
""
,
companyName
:
item
.
companyName
||
item
.
name
||
""
,
}
));
graphInfo
.
links
=
relationList
.
map
(
onFormatLink
);
graphInfo
.
nodes
=
relationList
.
map
(
onFormatNode
);
if
(
entityInfo
.
node
?.
id
)
graphInfo
.
nodes
.
unshift
(
onFormatNode
(
entityInfo
.
node
));
if
(
entityInfo
.
node
?.
id
)
graphInfo
.
nodes
.
unshift
(
onFormatNode
(
entityInfo
.
node
));
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
...
...
src/views/bill/introdoction/index.vue
浏览文件 @
bb765b60
...
@@ -30,8 +30,7 @@
...
@@ -30,8 +30,7 @@
<div
class=
"box1-right-item"
>
<div
class=
"box1-right-item"
>
<div
class=
"item-left"
>
委员会报告:
</div>
<div
class=
"item-left"
>
委员会报告:
</div>
<div
class=
"item-right2"
v-if=
"reportList.length"
>
<div
class=
"item-right2"
v-if=
"reportList.length"
>
<div
class=
"right2-item"
v-for=
"(item, index) in reportList"
<div
class=
"right2-item"
v-for=
"(item, index) in reportList"
:key=
"getReportKey(item, index)"
>
:key=
"getReportKey(item, index)"
>
{{
item
}}
{{
item
}}
</div>
</div>
</div>
</div>
...
@@ -47,10 +46,9 @@
...
@@ -47,10 +46,9 @@
<
div
class
=
"box1-right-item"
>
<
div
class
=
"box1-right-item"
>
<
div
class
=
"item-left"
>
立案流程:
<
/div
>
<
div
class
=
"item-left"
>
立案流程:
<
/div
>
<
div
class
=
"item-right4"
>
<
div
class
=
"item-right4"
>
<
div
v
-
for
=
"(item, index) in reversedStageList"
:
key
=
"getStageKey(item, index)"
<
div
v
-
for
=
"(item, index) in reversedStageList"
:
key
=
"getStageKey(item, index)"
class
=
"step"
class
=
"step"
:
style
=
"{ zIndex: getStageZIndex(index)
}
"
>
:
style
=
"{ zIndex: getStageZIndex(index)
}
"
>
<
div
class
=
"step-box"
<
div
class
=
"step-box"
:
class
=
"{ 'step-box-active': index === stageActiveIndex
}
"
>
:
class
=
"{ 'step-box-active': index === stageActiveIndex
}
"
>
{{
item
}}
{{
item
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
@@ -79,8 +77,7 @@
...
@@ -79,8 +77,7 @@
<
div
class
=
"name-box"
>
<
div
class
=
"name-box"
>
<
div
class
=
"person-box"
>
<
div
class
=
"person-box"
>
<
div
class
=
"person-item"
:
class
=
"{ nameItemActive: box3BtnActive === item.name
}
"
<
div
class
=
"person-item"
:
class
=
"{ nameItemActive: box3BtnActive === item.name
}
"
@
click
=
"handleClcikBox3Btn(item.name, index)"
@
click
=
"handleClcikBox3Btn(item.name, index)"
v
-
for
=
"(item, index) in personList"
:
key
=
"index"
>
v
-
for
=
"(item, index) in personList"
:
key
=
"index"
>
{{
item
.
name
}}
{{
item
.
name
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
@@ -197,14 +194,21 @@ const handleClickAvatar = async item => {
...
@@ -197,14 +194,21 @@ const handleClickAvatar = async item => {
return
;
return
;
}
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
||
""
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
||
""
);
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve(
{
// path: "/characterPage",
// query:
{
// type,
// personId: item.id
//
}
//
}
);
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
type
,
type
,
personId
:
item
.
id
personId
:
item
.
id
}
}
}
);
}
)
window
.
open
(
routeData
.
href
,
"_blank"
);
}
else
{
}
else
{
personTypeName
=
""
;
personTypeName
=
""
;
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
...
@@ -212,7 +216,7 @@ const handleClickAvatar = async item => {
...
@@ -212,7 +216,7 @@ const handleClickAvatar = async item => {
}
else
{
}
else
{
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
}
}
}
catch
(
error
)
{
}
}
catch
(
error
)
{
}
}
;
}
;
// 获取URL地址里面的billId
// 获取URL地址里面的billId
const
billId
=
ref
(
route
.
query
.
billId
);
const
billId
=
ref
(
route
.
query
.
billId
);
...
@@ -253,7 +257,7 @@ const partyIconUrl = computed(() => {
...
@@ -253,7 +257,7 @@ const partyIconUrl = computed(() => {
const
reversedStageList
=
computed
(()
=>
{
const
reversedStageList
=
computed
(()
=>
{
const
list
=
Array
.
isArray
(
basicInfo
.
value
?.
stageList
)
?
basicInfo
.
value
.
stageList
:
[];
const
list
=
Array
.
isArray
(
basicInfo
.
value
?.
stageList
)
?
basicInfo
.
value
.
stageList
:
[];
return
[...
list
]
.
reverse
()
;
return
[...
list
];
}
);
}
);
const
stageListLength
=
computed
(()
=>
(
Array
.
isArray
(
basicInfo
.
value
?.
stageList
)
?
basicInfo
.
value
.
stageList
.
length
:
0
));
const
stageListLength
=
computed
(()
=>
(
Array
.
isArray
(
basicInfo
.
value
?.
stageList
)
?
basicInfo
.
value
.
stageList
.
length
:
0
));
const
stageActiveIndex
=
computed
(()
=>
stageListLength
.
value
-
1
);
const
stageActiveIndex
=
computed
(()
=>
stageListLength
.
value
-
1
);
...
...
src/views/dataLibrary/decree/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/dataLibrary/index.vue
浏览文件 @
bb765b60
<
template
>
<
template
>
<div
class=
"data-library-wrapper"
>
<div
class=
"data-library-wrapper"
>
<div
class=
"data-library-header"
>
<
!--
<
div
class=
"data-library-header"
>
<div
class=
"header-left"
>
<div
class=
"header-left"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/overview/logo.png"
alt=
""
>
<img
src=
"@/assets/icons/overview/logo.png"
alt=
""
>
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
<div
class=
"name"
>
{{
"管理员"
}}
</div>
<div
class=
"name"
>
{{
"管理员"
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
-->
<div
class=
"data-library-main"
>
<div
class=
"data-library-main"
>
<div
class=
"data-library-sider"
>
<div
class=
"data-library-sider"
>
<div
class=
"sider-item-box"
v-for=
"item, index in siderList"
:key=
"index"
>
<div
class=
"sider-item-box"
v-for=
"item, index in siderList"
:key=
"index"
>
...
@@ -96,7 +96,7 @@ const tagsViewStore = useTagsViewStore()
...
@@ -96,7 +96,7 @@ const tagsViewStore = useTagsViewStore()
// 在路由全局守卫中处理
// 在路由全局守卫中处理
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
// 路由允许添加标签(排除掉隐藏的布局页如 /404, /login 等)
// 路由允许添加标签(排除掉隐藏的布局页如 /404, /login 等)
if
(
to
.
meta
?.
title
&&
!
to
.
meta
?.
hiddenTag
)
{
if
(
to
.
path
.
indexOf
(
'dataLibrary'
)
>
-
1
)
{
tagsViewStore
.
addView
({
tagsViewStore
.
addView
({
path
:
to
.
path
,
path
:
to
.
path
,
name
:
to
.
name
,
// 对应组件的 name,用于缓存
name
:
to
.
name
,
// 对应组件的 name,用于缓存
...
@@ -479,7 +479,7 @@ const handleClickToolBox = () => {
...
@@ -479,7 +479,7 @@ const handleClickToolBox = () => {
onMounted
(()
=>
{
onMounted
(()
=>
{
const
path
=
route
.
path
const
path
=
route
.
path
console
.
log
(
decodeURI
(
route
.
fullPath
));
console
.
log
(
decodeURI
(
route
.
fullPath
));
switch
(
path
)
{
switch
(
path
)
{
case
'/dataLibrary/countryBill'
:
case
'/dataLibrary/countryBill'
:
siderList
.
value
[
0
].
active
=
true
siderList
.
value
[
0
].
active
=
true
...
...
src/views/decree/allOrganization/index.vue
浏览文件 @
bb765b60
...
@@ -3,13 +3,15 @@
...
@@ -3,13 +3,15 @@
<div
class=
"container-box"
>
<div
class=
"container-box"
>
<div
class=
"hard-box"
>
<div
class=
"hard-box"
>
<div
class=
"hard-name text-title-0-show"
>
美国政府机构
</div>
<div
class=
"hard-name text-title-0-show"
>
美国政府机构
</div>
<div
class=
"hard-num text-title-2-show"
>
{{
organizationInfo
.
total
}}
家
</div>
<div
class=
"hard-num text-title-2-show"
>
{{
organizationInfo
.
total
}}
家
</div>
<div
style=
"width: 0px; flex: auto;"
></div>
<div
style=
"width: 0px; flex: auto;"
></div>
<div
class=
"hard-input"
>
<div
class=
"hard-input"
>
<el-input
v-model=
"organizationInfo.keyWord"
@
keyup
.
enter=
"onAllOrganization()"
style=
"width:100%; height:100%;"
:suffix-icon=
"Search"
placeholder=
"搜索机构"
/>
<el-input
v-model=
"organizationInfo.keyWord"
@
keyup
.
enter=
"onAllOrganization()"
style=
"width:100%; height:100%;"
:suffix-icon=
"Search"
placeholder=
"搜索机构"
/>
</div>
</div>
<div
class=
"hard-time"
>
<div
class=
"hard-time"
>
<el-select
v-model=
"organizationInfo.isSort"
@
change=
"onAllOrganization()"
placeholder=
"发布时间"
style=
"width:160px; margin-left:8px;"
>
<el-select
v-model=
"organizationInfo.isSort"
@
change=
"onAllOrganization()"
placeholder=
"发布时间"
style=
"width:160px; margin-left:8px;"
>
<template
#
prefix
>
<template
#
prefix
>
<div
class=
"icon1"
>
<div
class=
"icon1"
>
<img
v-if=
"isSort"
src=
"@/assets/icons/shengxu1.png"
alt=
""
/>
<img
v-if=
"isSort"
src=
"@/assets/icons/shengxu1.png"
alt=
""
/>
...
@@ -28,29 +30,36 @@
...
@@ -28,29 +30,36 @@
<TimeTabPane
@
time-click=
"handleDateChange"
/>
<TimeTabPane
@
time-click=
"handleDateChange"
/>
</div>
</div>
<div
class=
"organization-list"
ref=
"refOrganization"
v-loading=
"organizationInfo.loading"
>
<div
class=
"organization-list"
ref=
"refOrganization"
v-loading=
"organizationInfo.loading"
>
<div
class=
"organization-item"
v-for=
"(item, index) in organizationInfo.list"
:key=
"index"
@
click=
"handleToInstitution(item)"
>
<div
class=
"organization-item"
v-for=
"(item, index) in organizationInfo.list"
:key=
"index"
@
click=
"handleToInstitution(item)"
>
<div
class=
"item-left"
>
<div
class=
"item-left"
>
<img
:src=
"item.orgImage || DefaultIcon2"
alt=
""
/>
<img
:src=
"item.orgImage || DefaultIcon2"
alt=
""
/>
</div>
</div>
<div
class=
"item-right one-line-ellipsis"
>
{{ item.orgName }}
</div>
<div
class=
"item-right one-line-ellipsis"
>
{{ item.orgName }}
</div>
<div
class=
"item-total"
>
{{ item.total }}项
</div>
<div
class=
"item-total"
>
{{ item.total }}项
</div>
<el-icon
color=
"var(--color-primary-100)"
><ArrowRightBold
/></el-icon>
<el-icon
color=
"var(--color-primary-100)"
>
<div
class=
"item-dot"
v-if=
"item.totalRecent"
>
+{{item.totalRecent}}
</div>
<ArrowRightBold
/>
</el-icon>
<div
class=
"item-dot"
v-if=
"item.totalRecent"
>
+{{ item.totalRecent }}
</div>
</div>
</div>
</div>
</div>
<div
class=
"pagination-box"
>
<div
class=
"pagination-box"
>
<el-pagination
@
current-change=
"onAllOrganization"
:pageSize=
"organizationInfo.pageSize"
:current-page=
"organizationInfo.pageNum"
background
layout=
"prev, pager, next"
:total=
"organizationInfo.total"
/>
<el-pagination
@
current-change=
"onAllOrganization"
:pageSize=
"organizationInfo.pageSize"
:current-page=
"organizationInfo.pageNum"
background
layout=
"prev, pager, next"
:total=
"organizationInfo.total"
/>
</div>
</div>
</div>
</div>
<div
class=
"back-bnt"
@
click=
"router.back()"
>
<div
class=
"back-bnt"
@
click=
"router.back()"
>
<el-icon><Back
/></el-icon>
<el-icon>
<Back
/>
</el-icon>
<div
style=
"margin-left: 6px;"
>
返回
</div>
<div
style=
"margin-left: 6px;"
>
返回
</div>
</div>
</div>
</div>
</div>
</template>
</template>
<
script
setup
name=
"index"
>
<
script
setup
name=
"index"
>
import
{
onMounted
,
reactive
,
ref
}
from
"vue"
import
{
onMounted
,
reactive
,
ref
}
from
"vue"
import
{
Search
}
from
'@element-plus/icons-vue'
import
{
Search
}
from
'@element-plus/icons-vue'
import
router
from
"@/router"
;
import
router
from
"@/router"
;
...
@@ -76,38 +85,44 @@ const onAllOrganization = async (num) => {
...
@@ -76,38 +85,44 @@ const onAllOrganization = async (num) => {
organizationInfo
.
pageNum
=
num
||
1
organizationInfo
.
pageNum
=
num
||
1
organizationInfo
.
loading
=
true
organizationInfo
.
loading
=
true
try
{
try
{
let
{
keyWord
,
pageNum
,
pageSize
,
day
}
=
organizationInfo
let
{
keyWord
,
pageNum
,
pageSize
,
day
}
=
organizationInfo
const
res
=
await
getDepartmentList
({
day
,
pageNum
:
pageNum
-
1
,
pageSize
,
keyWord
:
keyWord
||
undefined
});
const
res
=
await
getDepartmentList
({
day
,
pageNum
:
pageNum
-
1
,
pageSize
,
keyWord
:
keyWord
||
undefined
});
console
.
log
(
"机构列表"
,
res
);
console
.
log
(
"机构列表"
,
res
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
organizationInfo
.
list
=
res
.
data
.
orgList
||
[];
organizationInfo
.
list
=
res
.
data
.
orgList
||
[];
organizationInfo
.
total
=
res
.
data
.
total
||
0
;
organizationInfo
.
total
=
res
.
data
.
total
||
0
;
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"获取机构列表数据失败"
,
error
);
console
.
error
(
"获取机构列表数据失败"
,
error
);
organizationInfo
.
list
=
[];
organizationInfo
.
list
=
[];
organizationInfo
.
total
=
0
;
organizationInfo
.
total
=
0
;
}
}
organizationInfo
.
loading
=
false
organizationInfo
.
loading
=
false
}
}
const
handleDateChange
=
(
event
)
=>
{
const
handleDateChange
=
(
event
)
=>
{
if
(
event
?.
time
===
'近一周'
)
organizationInfo
.
day
=
7
if
(
event
?.
time
===
'近一周'
)
organizationInfo
.
day
=
7
if
(
event
?.
time
===
'近一月'
)
organizationInfo
.
day
=
30
if
(
event
?.
time
===
'近一月'
)
organizationInfo
.
day
=
30
if
(
event
?.
time
===
'近一年'
)
organizationInfo
.
day
=
365
if
(
event
?.
time
===
'近一年'
)
organizationInfo
.
day
=
365
onAllOrganization
()
onAllOrganization
()
}
}
// 跳转行政机构主页
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
const
handleToInstitution
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
orgName
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
orgName
);
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
path
:
"/institution"
,
// path: "/institution",
query
:
{
// query: {
id
:
item
.
orgId
// id: item.orgId
}
// }
});
// });
window
.
open
(
curRoute
.
href
,
"_blank"
);
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/institution"
,
query
:
{
id
:
item
.
orgId
}
})
};
};
const
refOrganization
=
ref
()
const
refOrganization
=
ref
()
...
@@ -115,9 +130,9 @@ onMounted(() => {
...
@@ -115,9 +130,9 @@ onMounted(() => {
// 根据元素的高度决定分页显示的机构数量
// 根据元素的高度决定分页显示的机构数量
let
height
=
2
;
let
height
=
2
;
if
(
refOrganization
.
value
)
{
if
(
refOrganization
.
value
)
{
height
=
Math
.
floor
(
refOrganization
.
value
?.
clientHeight
/
120
)
height
=
Math
.
floor
(
refOrganization
.
value
?.
clientHeight
/
120
)
}
}
organizationInfo
.
pageSize
=
height
*
4
organizationInfo
.
pageSize
=
height
*
4
onAllOrganization
()
onAllOrganization
()
})
})
...
@@ -157,7 +172,7 @@ onMounted(() => {
...
@@ -157,7 +172,7 @@ onMounted(() => {
flex-direction
:
column
;
flex-direction
:
column
;
.hard-box
{
.hard-box
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
width
:
100%
;
width
:
100%
;
...
@@ -166,6 +181,7 @@ onMounted(() => {
...
@@ -166,6 +181,7 @@ onMounted(() => {
height
:
62px
;
height
:
62px
;
line-height
:
62px
!
important
;
line-height
:
62px
!
important
;
}
}
.hard-num
{
.hard-num
{
height
:
36px
;
height
:
36px
;
background-color
:
var
(
--
color-primary-100
);
background-color
:
var
(
--
color-primary-100
);
...
@@ -175,6 +191,7 @@ onMounted(() => {
...
@@ -175,6 +191,7 @@ onMounted(() => {
padding
:
0
16px
;
padding
:
0
16px
;
margin-left
:
16px
;
margin-left
:
16px
;
}
}
.hard-input
{
.hard-input
{
background-color
:
var
(
--
el-fill-color-blank
);
background-color
:
var
(
--
el-fill-color-blank
);
border-radius
:
var
(
--
el-border-radius-base
);
border-radius
:
var
(
--
el-border-radius-base
);
...
@@ -184,6 +201,7 @@ onMounted(() => {
...
@@ -184,6 +201,7 @@ onMounted(() => {
width
:
160px
;
width
:
160px
;
height
:
32px
;
height
:
32px
;
}
}
.hard-time
{
.hard-time
{
height
:
42px
;
height
:
42px
;
padding
:
5px
0
;
padding
:
5px
0
;
...
@@ -192,6 +210,7 @@ onMounted(() => {
...
@@ -192,6 +210,7 @@ onMounted(() => {
width
:
11px
;
width
:
11px
;
height
:
14px
;
height
:
14px
;
font-size
:
0px
;
font-size
:
0px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
...
@@ -202,7 +221,7 @@ onMounted(() => {
...
@@ -202,7 +221,7 @@ onMounted(() => {
.date-box
{
.date-box
{
margin-top
:
6px
;
margin-top
:
6px
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
width
:
100%
;
width
:
100%
;
...
@@ -211,11 +230,13 @@ onMounted(() => {
...
@@ -211,11 +230,13 @@ onMounted(() => {
height
:
16px
;
height
:
16px
;
font-size
:
0px
;
font-size
:
0px
;
margin-right
:
6px
;
margin-right
:
6px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.date-text
{
.date-text
{
width
:
20px
;
width
:
20px
;
flex
:
auto
;
flex
:
auto
;
...
@@ -261,6 +282,7 @@ onMounted(() => {
...
@@ -261,6 +282,7 @@ onMounted(() => {
width
:
48px
;
width
:
48px
;
height
:
48px
;
height
:
48px
;
font-size
:
0px
;
font-size
:
0px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
bb765b60
...
@@ -514,13 +514,19 @@ const handleGetDepartmentList = async () => {
...
@@ -514,13 +514,19 @@ const handleGetDepartmentList = async () => {
// 跳转行政机构主页
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
const
handleToInstitution
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
orgName
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
orgName
);
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/institution",
// query: {
// id: item.orgId
// }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/institution"
,
path
:
"/institution"
,
query
:
{
query
:
{
id
:
item
.
orgId
id
:
item
.
orgId
}
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
// 跳转全部机构页面
// 跳转全部机构页面
const
onNavigateTo
=
()
=>
{
const
onNavigateTo
=
()
=>
{
...
@@ -529,14 +535,16 @@ const onNavigateTo = () => {
...
@@ -529,14 +535,16 @@ const onNavigateTo = () => {
// 查看更多风险信号
// 查看更多风险信号
const
handleToMoreRiskSignal
=
()
=>
{
const
handleToMoreRiskSignal
=
()
=>
{
const
route
=
router
.
resolve
(
"/viewRiskSignal"
);
// const route = router.resolve("/viewRiskSignal");
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/viewRiskSignal"
)
};
};
// 查看更多新闻资讯
// 查看更多新闻资讯
const
handleToMoreNews
=
()
=>
{
const
handleToMoreNews
=
()
=>
{
const
route
=
router
.
resolve
(
"/newsBrief"
);
// const route = router.resolve("/newsBrief");
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/newsBrief"
)
};
};
// 最新科技政令
// 最新科技政令
...
@@ -580,36 +588,55 @@ const handleClickToDetail = () => {
...
@@ -580,36 +588,55 @@ const handleClickToDetail = () => {
const
id
=
box1DataList
.
value
[
activeIndex
].
id
;
const
id
=
box1DataList
.
value
[
activeIndex
].
id
;
window
.
sessionStorage
.
setItem
(
"curTabName"
,
box1DataList
.
value
[
activeIndex
].
name
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
box1DataList
.
value
[
activeIndex
].
name
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/decreeLayout",
// query: {
// id: id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/decreeLayout"
,
path
:
"/decreeLayout"
,
query
:
{
query
:
{
id
:
id
id
:
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 点击政令库政令
// 点击政令库政令
const
handleClickDecree
=
decree
=>
{
const
handleClickDecree
=
decree
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/decreeLayout",
// query: {
// id: decree.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/decreeLayout"
,
path
:
"/decreeLayout"
,
query
:
{
query
:
{
id
:
decree
.
id
id
:
decree
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
const
handleKeyDecree
=
item
=>
{
const
handleKeyDecree
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
title
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
title
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/decreeLayout",
// query: {
// id: item.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/decreeLayout"
,
path
:
"/decreeLayout"
,
query
:
{
query
:
{
id
:
item
.
id
id
:
item
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 风险信号
// 风险信号
...
@@ -752,14 +779,23 @@ const handleClickPerson = async item => {
...
@@ -752,14 +779,23 @@ const handleClickPerson = async item => {
return
;
return
;
}
}
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/characterPage",
// query: {
// type: type, // type=1为科技企业领袖,2为国会议员,3为智库研究人员
// personId: item.personId
// }
// });
// window.open(route.href, "_blank");
router
.
push
(
{
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
type
:
type
,
// type=1为科技企业领袖,2为国会议员,3为智库研究人员
type
:
type
,
// type=1为科技企业领袖,2为国会议员,3为智库研究人员
personId
:
item
.
personId
personId
:
item
.
personId
}
}
}
);
}
window
.
open
(
route
.
href
,
"_blank"
);
)
}
else
{
}
else
{
personTypeName
=
""
;
personTypeName
=
""
;
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
ElMessage
.
warning
(
"找不到当前人员的类型值!"
);
...
@@ -1029,13 +1065,21 @@ const handleGetDecreeTypeList = async () => {
...
@@ -1029,13 +1065,21 @@ const handleGetDecreeTypeList = async () => {
};
};
// 查看社交媒体详情
// 查看社交媒体详情
const
handleToSocialDetail
=
item
=>
{
const
handleToSocialDetail
=
item
=>
{
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/characterPage",
// query: {
// personId: item.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
(
{
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
personId
:
item
.
id
personId
:
item
.
id
}
}
}
);
}
window
.
open
(
route
.
href
,
"_blank"
);
)
};
};
const
handleChangeCheckedDecreeType
=
()
=>
{
const
handleChangeCheckedDecreeType
=
()
=>
{
handleGetDecreeOrderList
();
handleGetDecreeOrderList
();
...
@@ -1197,14 +1241,21 @@ const handleSwithCurDecree = name => {
...
@@ -1197,14 +1241,21 @@ const handleSwithCurDecree = name => {
const
searchDecreeText
=
ref
(
""
);
const
searchDecreeText
=
ref
(
""
);
const
handleSearch
=
()
=>
{
const
handleSearch
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`搜索-
${
searchDecreeText
.
value
}
`
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`搜索-
${
searchDecreeText
.
value
}
`
);
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/searchResults",
// query: {
// searchText: searchDecreeText.value,
// areaName: "政令"
// }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/searchResults"
,
path
:
"/searchResults"
,
query
:
{
query
:
{
searchText
:
searchDecreeText
.
value
,
searchText
:
searchDecreeText
.
value
,
areaName
:
"政令"
areaName
:
"政令"
}
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
// 关键机构
// 关键机构
...
...
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
bb765b60
...
@@ -175,13 +175,19 @@ const onWordWrap = (word, num) => {
...
@@ -175,13 +175,19 @@ const onWordWrap = (word, num) => {
}
}
const
handleClickDecree
=
decree
=>
{
const
handleClickDecree
=
decree
=>
{
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/decreeLayout",
// query: {
// id: decree.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/decreeLayout"
,
path
:
"/decreeLayout"
,
query
:
{
query
:
{
id
:
decree
.
id
id
:
decree
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 关联关系
// 关联关系
...
...
src/views/decree/decreeLayout/index.vue
浏览文件 @
bb765b60
...
@@ -22,13 +22,8 @@
...
@@ -22,13 +22,8 @@
</div>
</div>
</div>
</div>
<div
class=
"left-box-bottom"
>
<div
class=
"left-box-bottom"
>
<div
<div
class=
"left-box-bottom-item"
:class=
"
{ leftBoxBottomItemActive: activeTitle === item.name }"
class=
"left-box-bottom-item"
v-for="(item, index) in mainHeaderBtnList" :key="index" @click="handleClickMainHeaderBtn(item)">
:class=
"
{ leftBoxBottomItemActive: activeTitle === item.name }"
v-for="(item, index) in mainHeaderBtnList"
:key="index"
@click="handleClickMainHeaderBtn(item)"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
v-if=
"activeTitle === item.name"
:src=
"item.activeIcon"
alt=
""
/>
<img
v-if=
"activeTitle === item.name"
:src=
"item.activeIcon"
alt=
""
/>
<img
v-else
:src=
"item.icon"
alt=
""
/>
<img
v-else
:src=
"item.icon"
alt=
""
/>
...
@@ -220,12 +215,12 @@ const handleClickMainHeaderBtn = item => {
...
@@ -220,12 +215,12 @@ const handleClickMainHeaderBtn = item => {
const
summaryInfo
=
ref
({});
const
summaryInfo
=
ref
({});
const
handleGetSummary
=
async
()
=>
{
const
handleGetSummary
=
async
()
=>
{
try
{
try
{
const
res
=
await
getDecreeSummary
({
id
:
route
.
query
.
id
});
const
res
=
await
getDecreeSummary
({
id
:
route
.
query
.
id
});
console
.
log
(
"全局信息"
,
res
);
console
.
log
(
"全局信息"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
summaryInfo
.
value
=
res
.
data
;
summaryInfo
.
value
=
res
.
data
;
}
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
};
// 获取报告原文
// 获取报告原文
...
@@ -248,13 +243,19 @@ const handleGetSummary = async () => {
...
@@ -248,13 +243,19 @@ const handleGetSummary = async () => {
// };
// };
const
handleShowReport
=
()
=>
{
const
handleShowReport
=
()
=>
{
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/decree/decreeOriginal",
// query: {
// id: route.query.id
// }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/decree/decreeOriginal"
,
path
:
"/decree/decreeOriginal"
,
query
:
{
query
:
{
id
:
route
.
query
.
id
id
:
route
.
query
.
id
}
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
const
handleToInstitution
=
()
=>
{
const
handleToInstitution
=
()
=>
{
...
@@ -297,6 +298,7 @@ onMounted(() => {
...
@@ -297,6 +298,7 @@ onMounted(() => {
height
:
100%
;
height
:
100%
;
overflow
:
hidden
;
overflow
:
hidden
;
overflow-y
:
auto
;
overflow-y
:
auto
;
.report
{
.report
{
padding
:
10px
150px
;
padding
:
10px
150px
;
position
:
absolute
;
position
:
absolute
;
...
@@ -306,6 +308,7 @@ onMounted(() => {
...
@@ -306,6 +308,7 @@ onMounted(() => {
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
background
:
#f7f8f9
;
background
:
#f7f8f9
;
.report-close
{
.report-close
{
position
:
absolute
;
position
:
absolute
;
top
:
20px
;
top
:
20px
;
...
@@ -313,11 +316,13 @@ onMounted(() => {
...
@@ -313,11 +316,13 @@ onMounted(() => {
width
:
20px
;
width
:
20px
;
height
:
20px
;
height
:
20px
;
cursor
:
pointer
;
cursor
:
pointer
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.report-header
{
.report-header
{
width
:
100%
;
width
:
100%
;
height
:
50px
;
height
:
50px
;
...
@@ -332,12 +337,15 @@ onMounted(() => {
...
@@ -332,12 +337,15 @@ onMounted(() => {
padding-left
:
30px
;
padding-left
:
30px
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
}
}
.report-main
{
.report-main
{
display
:
flex
;
display
:
flex
;
height
:
calc
(
100%
-
100px
);
height
:
calc
(
100%
-
100px
);
justify-content
:
space-between
;
justify-content
:
space-between
;
.left
{
.left
{
width
:
800px
;
width
:
800px
;
.noContent
{
.noContent
{
height
:
100px
;
height
:
100px
;
line-height
:
100px
;
line-height
:
100px
;
...
@@ -349,8 +357,10 @@ onMounted(() => {
...
@@ -349,8 +357,10 @@ onMounted(() => {
font-weight
:
400
;
font-weight
:
400
;
}
}
}
}
.right
{
.right
{
width
:
800px
;
width
:
800px
;
.noContent
{
.noContent
{
height
:
100px
;
height
:
100px
;
line-height
:
100px
;
line-height
:
100px
;
...
@@ -364,17 +374,20 @@ onMounted(() => {
...
@@ -364,17 +374,20 @@ onMounted(() => {
}
}
}
}
}
}
.layout-main
{
.layout-main
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
.header-main
{
.header-main
{
width
:
100%
;
width
:
100%
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
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
);
}
}
.layout-main-header
{
.layout-main-header
{
width
:
1600px
;
width
:
1600px
;
height
:
137px
;
height
:
137px
;
...
@@ -384,6 +397,7 @@ onMounted(() => {
...
@@ -384,6 +397,7 @@ onMounted(() => {
justify-content
:
space-between
;
justify-content
:
space-between
;
position
:
sticky
;
position
:
sticky
;
top
:
0
;
top
:
0
;
// z-index: 100;
// z-index: 100;
.layout-main-header-container
{
.layout-main-header-container
{
width
:
1600px
;
width
:
1600px
;
...
@@ -392,28 +406,34 @@ onMounted(() => {
...
@@ -392,28 +406,34 @@ onMounted(() => {
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
center
;
align-items
:
center
;
}
}
.layout-main-header-left-box
{
.layout-main-header-left-box
{
width
:
20px
;
width
:
20px
;
flex
:
auto
;
flex
:
auto
;
margin-top
:
12px
;
margin-top
:
12px
;
.left-box-top
{
.left-box-top
{
height
:
64px
;
height
:
64px
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
.icon
{
.icon
{
width
:
64px
;
width
:
64px
;
height
:
40px
;
height
:
40px
;
overflow
:
hidden
;
overflow
:
hidden
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.info
{
.info
{
margin-left
:
10px
;
margin-left
:
10px
;
margin-right
:
40px
;
margin-right
:
40px
;
width
:
20px
;
width
:
20px
;
flex
:
auto
;
flex
:
auto
;
.info-box1
{
.info-box1
{
width
:
100%
;
width
:
100%
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
...
@@ -425,6 +445,7 @@ onMounted(() => {
...
@@ -425,6 +445,7 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
margin-top
:
5px
;
margin-top
:
5px
;
}
}
.info-box2
{
.info-box2
{
margin-top
:
5px
;
margin-top
:
5px
;
height
:
22px
;
height
:
22px
;
...
@@ -442,31 +463,37 @@ onMounted(() => {
...
@@ -442,31 +463,37 @@ onMounted(() => {
white-space
:
nowrap
;
white-space
:
nowrap
;
padding
:
0
10px
;
padding
:
0
10px
;
}
}
.info-box2-item
:first-child
{
.info-box2-item
:first-child
{
padding-left
:
0px
;
padding-left
:
0px
;
}
}
}
}
}
}
}
}
.left-box-bottom
{
.left-box-bottom
{
display
:
flex
;
display
:
flex
;
height
:
40px
;
height
:
40px
;
margin-top
:
21px
;
margin-top
:
21px
;
.left-box-bottom-item
{
.left-box-bottom-item
{
display
:
flex
;
display
:
flex
;
margin-right
:
32px
;
margin-right
:
32px
;
margin-top
:
3px
;
margin-top
:
3px
;
height
:
35px
;
height
:
35px
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon
{
.icon
{
margin-top
:
4px
;
margin-top
:
4px
;
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.name
{
.name
{
height
:
24px
;
height
:
24px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
...
@@ -478,20 +505,24 @@ onMounted(() => {
...
@@ -478,20 +505,24 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
margin-left
:
3px
;
margin-left
:
3px
;
}
}
.nameActive
{
.nameActive
{
color
:
var
(
--
color-main-active
);
color
:
var
(
--
color-main-active
);
font-weight
:
700
;
font-weight
:
700
;
}
}
}
}
.leftBoxBottomItemActive
{
.leftBoxBottomItemActive
{
border-bottom
:
3px
solid
var
(
--
color-main-active
);
border-bottom
:
3px
solid
var
(
--
color-main-active
);
}
}
}
}
}
}
.layout-main-header-right-box
{
.layout-main-header-right-box
{
.right-box-top
{
.right-box-top
{
white-space
:
nowrap
;
white-space
:
nowrap
;
padding-top
:
11px
;
padding-top
:
11px
;
.time
{
.time
{
height
:
24px
;
height
:
24px
;
line-height
:
24px
;
line-height
:
24px
;
...
@@ -503,6 +534,7 @@ onMounted(() => {
...
@@ -503,6 +534,7 @@ onMounted(() => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
right
;
text-align
:
right
;
}
}
.name
{
.name
{
height
:
24px
;
height
:
24px
;
line-height
:
24px
;
line-height
:
24px
;
...
@@ -515,12 +547,14 @@ onMounted(() => {
...
@@ -515,12 +547,14 @@ onMounted(() => {
text-align
:
right
;
text-align
:
right
;
}
}
}
}
.right-box-bottom
{
.right-box-bottom
{
margin-top
:
24px
;
margin-top
:
24px
;
text-align
:
right
;
text-align
:
right
;
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
gap
:
8px
;
gap
:
8px
;
.btn
{
.btn
{
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
...
@@ -533,14 +567,17 @@ onMounted(() => {
...
@@ -533,14 +567,17 @@ onMounted(() => {
gap
:
8px
;
gap
:
8px
;
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
{
width
:
64px
;
width
:
64px
;
height
:
24px
;
height
:
24px
;
...
@@ -554,6 +591,7 @@ onMounted(() => {
...
@@ -554,6 +591,7 @@ onMounted(() => {
text-align
:
left
;
text-align
:
left
;
}
}
}
}
.btn-active
{
.btn-active
{
width
:
120px
;
width
:
120px
;
height
:
36px
;
height
:
36px
;
...
@@ -564,14 +602,17 @@ onMounted(() => {
...
@@ -564,14 +602,17 @@ onMounted(() => {
align-items
:
center
;
align-items
:
center
;
gap
:
8px
;
gap
:
8px
;
cursor
:
pointer
;
cursor
:
pointer
;
.icon-active
{
.icon-active
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text-active
{
.text-active
{
width
:
64px
;
width
:
64px
;
height
:
24px
;
height
:
24px
;
...
@@ -588,12 +629,14 @@ onMounted(() => {
...
@@ -588,12 +629,14 @@ onMounted(() => {
}
}
}
}
}
}
.layout-main-center
{
.layout-main-center
{
height
:
20px
;
height
:
20px
;
flex
:
auto
;
flex
:
auto
;
background-color
:
#f7f8f9
;
background-color
:
#f7f8f9
;
}
}
}
}
.layout-report-box
{
.layout-report-box
{
position
:
absolute
;
position
:
absolute
;
z-index
:
9999
;
z-index
:
9999
;
...
@@ -602,6 +645,7 @@ onMounted(() => {
...
@@ -602,6 +645,7 @@ onMounted(() => {
width
:
100%
;
width
:
100%
;
height
:
926px
;
height
:
926px
;
background
:
rgba
(
248
,
249
,
250
,
1
);
background
:
rgba
(
248
,
249
,
250
,
1
);
.report-close
{
.report-close
{
position
:
absolute
;
position
:
absolute
;
top
:
24px
;
top
:
24px
;
...
@@ -609,11 +653,13 @@ onMounted(() => {
...
@@ -609,11 +653,13 @@ onMounted(() => {
width
:
32px
;
width
:
32px
;
height
:
32px
;
height
:
32px
;
cursor
:
pointer
;
cursor
:
pointer
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.report-main
{
.report-main
{
width
:
1600px
;
width
:
1600px
;
height
:
926px
;
height
:
926px
;
...
@@ -621,13 +667,16 @@ onMounted(() => {
...
@@ -621,13 +667,16 @@ onMounted(() => {
background
:
#fff
;
background
:
#fff
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
padding
:
0
69px
;
padding
:
0
69px
;
.report-header
{
.report-header
{
height
:
77px
;
height
:
77px
;
border-bottom
:
1px
solid
rgba
(
240
,
242
,
244
,
1
);
border-bottom
:
1px
solid
rgba
(
240
,
242
,
244
,
1
);
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
.report-header-left
{
.report-header-left
{
display
:
flex
;
display
:
flex
;
.text
{
.text
{
margin-top
:
32px
;
margin-top
:
32px
;
width
:
70px
;
width
:
70px
;
...
@@ -638,14 +687,17 @@ onMounted(() => {
...
@@ -638,14 +687,17 @@ onMounted(() => {
font-weight
:
400
;
font-weight
:
400
;
line-height
:
14px
;
line-height
:
14px
;
}
}
.select-box
{
.select-box
{
margin-left
:
8px
;
margin-left
:
8px
;
margin-top
:
23px
;
margin-top
:
23px
;
}
}
}
}
.report-header-right
{
.report-header-right
{
display
:
flex
;
display
:
flex
;
margin-top
:
24px
;
margin-top
:
24px
;
.btn
{
.btn
{
display
:
flex
;
display
:
flex
;
width
:
88px
;
width
:
88px
;
...
@@ -658,14 +710,17 @@ onMounted(() => {
...
@@ -658,14 +710,17 @@ onMounted(() => {
display
:
flex
;
display
:
flex
;
justify-content
:
center
;
justify-content
:
center
;
align-items
:
center
;
align-items
:
center
;
.icon
{
.icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text
{
.text
{
margin-left
:
8px
;
margin-left
:
8px
;
height
:
32px
;
height
:
32px
;
...
@@ -678,21 +733,26 @@ onMounted(() => {
...
@@ -678,21 +733,26 @@ onMounted(() => {
}
}
}
}
}
}
.report-content
{
.report-content
{
display
:
flex
;
display
:
flex
;
margin-top
:
35px
;
margin-top
:
35px
;
.content-left
{
.content-left
{
width
:
680px
;
width
:
680px
;
height
:
786px
;
height
:
786px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.content-right
{
.content-right
{
margin-left
:
89px
;
margin-left
:
89px
;
width
:
680px
;
width
:
680px
;
height
:
786px
;
height
:
786px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
bb765b60
...
@@ -25,7 +25,8 @@
...
@@ -25,7 +25,8 @@
<div
class=
"box1-footer"
v-if=
"backgroundListNum > 10"
>
<div
class=
"box1-footer"
v-if=
"backgroundListNum > 10"
>
<div
class=
"box1-footer-left"
>
{{ `共 ${backgroundListNum} 项` }}
</div>
<div
class=
"box1-footer-left"
>
{{ `共 ${backgroundListNum} 项` }}
</div>
<div
class=
"box1-footer-right"
>
<div
class=
"box1-footer-right"
>
<el-pagination
:page-size=
"10"
@
current-change=
"handleCurrentChange"
:current-page=
"currentPage"
background
layout=
"prev, pager, next"
:total=
"backgroundListNum"
/>
<el-pagination
:page-size=
"10"
@
current-change=
"handleCurrentChange"
:current-page=
"currentPage"
background
layout=
"prev, pager, next"
:total=
"backgroundListNum"
/>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -39,8 +40,12 @@
...
@@ -39,8 +40,12 @@
<el-collapse
v-model=
"dependActive"
>
<el-collapse
v-model=
"dependActive"
>
<el-collapse-item
v-for=
"(item, index) in dependList"
:key=
"item.billId"
:name=
"item.billId"
>
<el-collapse-item
v-for=
"(item, index) in dependList"
:key=
"item.billId"
:name=
"item.billId"
>
<
template
#
icon
>
<
template
#
icon
>
<el-icon
v-if=
"dependActive.includes(item.billId)"
><ArrowDownBold
/></el-icon>
<el-icon
v-if=
"dependActive.includes(item.billId)"
>
<el-icon
v-else
><ArrowUpBold
/></el-icon>
<ArrowDownBold
/>
</el-icon>
<el-icon
v-else
>
<ArrowUpBold
/>
</el-icon>
</
template
>
</
template
>
<
template
#
title
>
<
template
#
title
>
<div
class=
"custom-collapse-title"
>
<div
class=
"custom-collapse-title"
>
...
@@ -73,7 +78,9 @@
...
@@ -73,7 +78,9 @@
<div
class=
"time-line-icon"
>
<div
class=
"time-line-icon"
>
<img
style=
"width: 100%; height: 100%;"
:src=
"item.orgImage || DefaultIcon1"
alt=
""
>
<img
style=
"width: 100%; height: 100%;"
:src=
"item.orgImage || DefaultIcon1"
alt=
""
>
</div>
</div>
<div
class=
"time-line-name text-click-hover"
@
click=
"handleToInstitution(item)"
>
{{ item.proposeOrgName }}
</div>
<div
class=
"time-line-name text-click-hover"
@
click=
"handleToInstitution(item)"
>
{{
item.proposeOrgName
}}
</div>
</div>
</div>
<div
class=
"timeline-content"
@
click=
"handleClickDecree(item)"
>
{{ item.describe }}
</div>
<div
class=
"timeline-content"
@
click=
"handleClickDecree(item)"
>
{{ item.describe }}
</div>
</div>
</div>
...
@@ -137,9 +144,9 @@ const handleGetBackground = async () => {
...
@@ -137,9 +144,9 @@ const handleGetBackground = async () => {
backgroundList
.
value
=
[];
backgroundList
.
value
=
[];
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
backgroundListNum
.
value
=
0
;
backgroundListNum
.
value
=
0
;
backgroundList
.
value
=
[];
backgroundList
.
value
=
[];
console
.
error
(
"获取提出背景数据失败"
,
error
);
console
.
error
(
"获取提出背景数据失败"
,
error
);
}
}
};
};
...
@@ -153,7 +160,7 @@ const prevList = ref([
...
@@ -153,7 +160,7 @@ const prevList = ref([
]);
]);
const
handleGetPrev
=
async
()
=>
{
const
handleGetPrev
=
async
()
=>
{
try
{
try
{
const
res
=
await
getDecreePrev
({
id
:
decreeId
.
value
});
const
res
=
await
getDecreePrev
({
id
:
decreeId
.
value
});
console
.
log
(
"前序政令"
,
res
);
console
.
log
(
"前序政令"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
prevList
.
value
=
res
.
data
;
prevList
.
value
=
res
.
data
;
...
@@ -167,23 +174,35 @@ const handleGetPrev = async () => {
...
@@ -167,23 +174,35 @@ const handleGetPrev = async () => {
};
};
// 跳转行政机构主页
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
const
handleToInstitution
=
item
=>
{
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/institution",
// query: {
// id: item.orgId
// }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/institution"
,
path
:
"/institution"
,
query
:
{
query
:
{
id
:
item
.
orgId
id
:
item
.
orgId
}
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
// 跳转科技政令详情页
// 跳转科技政令详情页
const
handleClickDecree
=
item
=>
{
const
handleClickDecree
=
item
=>
{
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/decreeLayout",
// query: {
// id: item.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/decreeLayout"
,
path
:
"/decreeLayout"
,
query
:
{
query
:
{
id
:
item
.
id
id
:
item
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 法律依据
// 法律依据
...
@@ -191,7 +210,7 @@ const dependList = ref([]);
...
@@ -191,7 +210,7 @@ const dependList = ref([]);
const
dependActive
=
ref
([]);
const
dependActive
=
ref
([]);
const
handleGetLaws
=
async
()
=>
{
const
handleGetLaws
=
async
()
=>
{
try
{
try
{
const
res
=
await
getDecreeDepend
({
id
:
decreeId
.
value
});
const
res
=
await
getDecreeDepend
({
id
:
decreeId
.
value
});
console
.
log
(
"法律依据"
,
res
);
console
.
log
(
"法律依据"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
dependList
.
value
=
res
.
data
;
dependList
.
value
=
res
.
data
;
...
@@ -208,15 +227,21 @@ const handleGetLaws = async () => {
...
@@ -208,15 +227,21 @@ const handleGetLaws = async () => {
const
handleClickBull
=
decree
=>
{
const
handleClickBull
=
decree
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
decree
.
billId
);
window
.
sessionStorage
.
setItem
(
"billId"
,
decree
.
billId
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/billLayout",
// query: {
// billId: decree.billId
// }
// });
// console.log(route);
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/billLayout"
,
path
:
"/billLayout"
,
query
:
{
query
:
{
billId
:
decree
.
billId
billId
:
decree
.
billId
}
}
});
})
console
.
log
(
route
);
window
.
open
(
route
.
href
,
"_blank"
);
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
...
@@ -345,20 +370,26 @@ onMounted(() => {
...
@@ -345,20 +370,26 @@ onMounted(() => {
.box2-main
{
.box2-main
{
padding
:
16px
20px
;
padding
:
16px
20px
;
.custom-collapse
{
.custom-collapse
{
padding-left
:
32px
;
padding-left
:
32px
;
:deep
(
.el-collapse
),
:deep
(
.el-collapse
),
:deep
(
.el-collapse-item__wrap
)
{
:deep
(
.el-collapse-item__wrap
)
{
border
:
none
!
important
;
border
:
none
!
important
;
}
}
:deep
(
.el-collapse-item__header
)
{
:deep
(
.el-collapse-item__header
)
{
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
}
}
:deep
(
.el-collapse-item__content
)
{
:deep
(
.el-collapse-item__content
)
{
padding-bottom
:
16px
;
padding-bottom
:
16px
;
}
}
.custom-collapse-title
{
.custom-collapse-title
{
position
:
relative
;
position
:
relative
;
.custom-collapse-index
{
.custom-collapse-index
{
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
var
(
--
font-size-base
);
font-size
:
var
(
--
font-size-base
);
...
@@ -373,12 +404,14 @@ onMounted(() => {
...
@@ -373,12 +404,14 @@ onMounted(() => {
background
:
#e7f3ff
;
background
:
#e7f3ff
;
color
:
#0a57a6
;
color
:
#0a57a6
;
}
}
.custom-collapse-name
{
.custom-collapse-name
{
font-weight
:
600
;
font-weight
:
600
;
font-size
:
18px
;
font-size
:
18px
;
color
:
var
(
--
el-collapse-header-text-color
);
color
:
var
(
--
el-collapse-header-text-color
);
}
}
}
}
.custom-collapse-content
{
.custom-collapse-content
{
margin-top
:
8px
;
margin-top
:
8px
;
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
...
@@ -392,6 +425,7 @@ onMounted(() => {
...
@@ -392,6 +425,7 @@ onMounted(() => {
.right
{
.right
{
width
:
520px
;
width
:
520px
;
.box3
{
.box3
{
.box3-bottom-main
{
.box3-bottom-main
{
...
...
src/views/decree/decreeLayout/overview/introduction/index.vue
浏览文件 @
bb765b60
...
@@ -318,22 +318,32 @@ const handleGetOrgnization = async () => {
...
@@ -318,22 +318,32 @@ const handleGetOrgnization = async () => {
};
};
// 跳转行政机构主页
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
const
handleToInstitution
=
item
=>
{
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/institution",
// query: { id: item.id }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/institution"
,
path
:
"/institution"
,
query
:
{
id
:
item
.
id
}
query
:
{
id
:
item
.
id
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
// 跳转人员详情
// 跳转人员详情
const
handleClickUser
=
item
=>
{
const
handleClickUser
=
item
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
name
)
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
name
)
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/characterPage",
// query: {
// personId: item.id
// }
// });
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
personId
:
item
.
id
personId
:
item
.
id
}
}
});
})
window
.
open
(
routeData
.
href
,
"_blank"
);
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
...
...
src/views/decree/decreeLayout/overview/measures/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/index.vue
浏览文件 @
bb765b60
...
@@ -822,14 +822,20 @@ const handleToPosi = id => {
...
@@ -822,14 +822,20 @@ const handleToPosi = id => {
// 跳转到单项制裁页面
// 跳转到单项制裁页面
const
handleToRiskSignalDetail
=
item
=>
{
const
handleToRiskSignalDetail
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
title
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
title
);
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/exportControl/singleSanction",
// query: {
// id: item.sanId
// }
// });
// // 打开新页面
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
id
:
item
.
sanId
id
:
item
.
sanId
}
}
});
})
// 打开新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
};
};
const
sanctionList
=
ref
([]);
const
sanctionList
=
ref
([]);
...
@@ -885,14 +891,21 @@ const checkedTime = ref(["全部时间"]);
...
@@ -885,14 +891,21 @@ const checkedTime = ref(["全部时间"]);
// 跳转到单条制裁页面,单独打开一个新页面
// 跳转到单条制裁页面,单独打开一个新页面
const
handleTitleClick
=
item
=>
{
const
handleTitleClick
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`
${
item
.
year
}
-
${
item
.
dateStr
}
《
${
item
.
title
}
》`
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`
${
item
.
year
}
-
${
item
.
dateStr
}
《
${
item
.
title
}
》`
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/exportControl/singleSanction",
// query: {
// id: item.id,
// sanTypeId: item.sanTypeId
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
id
:
item
.
id
,
id
:
item
.
id
,
sanTypeId
:
item
.
sanTypeId
sanTypeId
:
item
.
sanTypeId
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
const
handleCompClick
=
item
=>
{
const
handleCompClick
=
item
=>
{
...
@@ -1034,13 +1047,19 @@ onMounted(async () => {
...
@@ -1034,13 +1047,19 @@ onMounted(async () => {
});
});
// 查看社交媒体详情
// 查看社交媒体详情
const
handleToSocialDetail
=
item
=>
{
const
handleToSocialDetail
=
item
=>
{
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/characterPage",
// query: {
// personId: item.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
personId
:
item
.
id
personId
:
item
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 获取趋势图数据
// 获取趋势图数据
const
fetchTrendData
=
async
()
=>
{
const
fetchTrendData
=
async
()
=>
{
...
@@ -1156,37 +1175,55 @@ const handleToEntityList = item => {
...
@@ -1156,37 +1175,55 @@ const handleToEntityList = item => {
"curTabName"
,
"curTabName"
,
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
);
);
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/exportControl/singleSanction",
// query: {
// id: id
// }
// });
// // 打开一个新页面
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
id
:
id
id
:
id
}
}
});
})
// 打开一个新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
};
};
// 跳转到V2.0实体清单无ID
// 跳转到V2.0实体清单无ID
const
handleToEntityListNoId
=
item
=>
{
const
handleToEntityListNoId
=
item
=>
{
console
.
log
(
"这是什么数据 =>"
,
item
);
console
.
log
(
"这是什么数据 =>"
,
item
);
if
(
item
.
nameZh
==
"实体清单"
)
{
if
(
item
.
nameZh
==
"实体清单"
)
{
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/exportControl/entityList",
// query: {
// sanTypeId: item.id
// }
// });
// // 打开一个新页面
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/exportControl/entityList"
,
path
:
"/exportControl/entityList"
,
query
:
{
query
:
{
sanTypeId
:
item
.
id
sanTypeId
:
item
.
id
}
}
});
})
// 打开一个新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
}
else
if
(
item
.
nameZh
==
"商业管制清单"
)
{
}
else
if
(
item
.
nameZh
==
"商业管制清单"
)
{
const
routeData
=
router
.
resolve
({
// const routeData = router.resolve({
// path: "/exportControl/commercialControlList",
// query: {
// sanTypeId: item.id
// }
// });
// // 打开一个新页面
// window.open(routeData.href, "_blank");
router
.
push
({
path
:
"/exportControl/commercialControlList"
,
path
:
"/exportControl/commercialControlList"
,
query
:
{
query
:
{
sanTypeId
:
item
.
id
sanTypeId
:
item
.
id
}
}
});
})
// 打开一个新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
}
else
{
}
else
{
return
;
return
;
}
}
...
@@ -1660,14 +1697,21 @@ const fetchNewsInfo = async () => {
...
@@ -1660,14 +1697,21 @@ const fetchNewsInfo = async () => {
const
handlePerClick
=
item
=>
{
const
handlePerClick
=
item
=>
{
// console.log("点击了社交媒体消息:", item);
// console.log("点击了社交媒体消息:", item);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
name
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/characterPage",
// query: {
// type: item.type || [1, 2, 3][Math.floor(Math.random() * 3)],
// personId: item.personId
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/characterPage"
,
path
:
"/characterPage"
,
query
:
{
query
:
{
type
:
item
.
type
||
[
1
,
2
,
3
][
Math
.
floor
(
Math
.
random
()
*
3
)],
type
:
item
.
type
||
[
1
,
2
,
3
][
Math
.
floor
(
Math
.
random
()
*
3
)],
personId
:
item
.
personId
personId
:
item
.
personId
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 处理点击社交媒体消息的方法
// 处理点击社交媒体消息的方法
// const handleInfoClick = item => {
// const handleInfoClick = item => {
...
@@ -1749,26 +1793,35 @@ const chart1Data = ref({
...
@@ -1749,26 +1793,35 @@ const chart1Data = ref({
const
handleSanc
=
item
=>
{
const
handleSanc
=
item
=>
{
console
.
log
(
item
);
console
.
log
(
item
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`
${
item
.
postDate
}
《
${
item
.
title
}
》`
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`
${
item
.
postDate
}
《
${
item
.
title
}
》`
);
const
route
=
router
.
resolve
({
// const route = router.resolve({
// path: "/exportControl/singleSanction",
// query: {
// id: item.id,
// sanTypeId: activeResourceTabItem.value.id
// }
// });
// window.open(route.href, "_blank");
router
.
push
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
id
:
item
.
id
,
id
:
item
.
id
,
sanTypeId
:
activeResourceTabItem
.
value
.
id
sanTypeId
:
activeResourceTabItem
.
value
.
id
}
}
});
})
window
.
open
(
route
.
href
,
"_blank"
);
};
};
// 查看更多风险信号
// 查看更多风险信号
const
handleToMoreRiskSignal
=
()
=>
{
const
handleToMoreRiskSignal
=
()
=>
{
const
route
=
router
.
resolve
(
"/viewRiskSignal"
);
// const route = router.resolve("/viewRiskSignal");
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/viewRiskSignal"
)
};
};
// 查看更多新闻资讯
// 查看更多新闻资讯
const
handleToMoreNews
=
()
=>
{
const
handleToMoreNews
=
()
=>
{
const
route
=
router
.
resolve
(
"/newsBrief"
);
// const route = router.resolve("/newsBrief");
window
.
open
(
route
.
href
,
"_blank"
);
// window.open(route.href, "_blank");
router
.
push
(
"/newsBrief"
)
};
};
const
handleNewsInfoClick
=
item
=>
{
const
handleNewsInfoClick
=
item
=>
{
...
@@ -1795,14 +1848,21 @@ const handleSwithCurPolicy = name => {
...
@@ -1795,14 +1848,21 @@ const handleSwithCurPolicy = name => {
const
handleSearch
=
()
=>
{
const
handleSearch
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`搜索-
${
searchExportControlText
.
value
}
`
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`搜索-
${
searchExportControlText
.
value
}
`
);
const
curRoute
=
router
.
resolve
({
// const curRoute = router.resolve({
// path: "/searchResults",
// query: {
// searchText: searchExportControlText.value,
// areaName: "实体清单"
// }
// });
// window.open(curRoute.href, "_blank");
router
.
push
({
path
:
"/searchResults"
,
path
:
"/searchResults"
,
query
:
{
query
:
{
searchText
:
searchExportControlText
.
value
,
searchText
:
searchExportControlText
.
value
,
areaName
:
"实体清单"
areaName
:
"实体清单"
}
}
});
})
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
...
...
src/views/exportControl/v2.0CommercialControlList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/industrialImpact/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/researchImpact/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/innovationSubject/innovativeInstitutions/components/CooperationCases.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/innovationSubject/innovativeInstitutions/tabs/OtherInfo.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/marketAccessHome/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/MultiThinkTankViewAnalysis/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ReportDetail/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ReportDetail/policyTracking/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ReportDetail/reportAnalysis/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/allThinkTank/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/components/ThinkTankPolicyAdviceOverview.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/reportOriginal/index.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
src/views/thinkTank/reportOriginal/pdf.vue
浏览文件 @
bb765b60
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论