Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
cb0736e1
提交
cb0736e1
authored
3月 27, 2026
作者:
朱政
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pre' into zz-dev
上级
dcc1e867
bb991b9d
流水线
#113
已取消 于阶段
in 12 分 52 秒
变更
8
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
250 行增加
和
207 行删除
+250
-207
g2.mdc
.cursor/rules/g2.mdc
+2
-0
.gitlab-ci.yml
.gitlab-ci.yml
+67
-9
home.js
src/api/decree/home.js
+2
-11
influence.js
src/api/decree/influence.js
+4
-3
index.vue
src/views/bill/deepDig/processAnalysis/index.vue
+145
-158
index.vue
src/views/decree/allOrganization/index.vue
+5
-5
index.vue
src/views/decree/decreeHome/index.vue
+7
-7
index.vue
src/views/decree/decreeLayout/influence/index.vue
+18
-14
没有找到文件。
.cursor/rules/g2.mdc
浏览文件 @
cb0736e1
---
description:
alwaysApply: true
---
# Overview
Insert overview text here. The agent will only see this should they choose to apply the rule.
...
...
.gitlab-ci.yml
浏览文件 @
cb0736e1
...
...
@@ -2,10 +2,13 @@ stages:
-
build
-
deploy
# cache:
# key: "$CI_COMMIT_REF_SLUG"
# paths:
# - .npm/
cache
:
# cache:key 这里使用字符串,兼容性更好(部分 linter 不支持 key: { files: [...] })
# 预分支 pre 需要快速构建并实时同步,因此让 .npm 下载缓存跨分支复用
key
:
"
npm-cache-global"
paths
:
-
.npm/
policy
:
pull-push
build_pre
:
stage
:
build
...
...
@@ -17,8 +20,13 @@ build_pre:
script
:
-
node -v
-
npm -v
-
npm config set cache .npm --global
-
npm ci --prefer-offline --no-audit --no-fund
-
echo "cache dir sizes:"
-
du -sh "$CI_PROJECT_DIR/.npm" "$CI_PROJECT_DIR/.npm/_cacache" 2>/dev/null ||
true
-
echo "=== npm ci start ==="
-
date -Iseconds
-
npm ci --cache "$CI_PROJECT_DIR/.npm" --no-audit --no-fund --loglevel=verbose --timing --foreground-scripts
-
echo "=== npm ci end ==="
-
date -Iseconds
-
npm run build
artifacts
:
paths
:
...
...
@@ -35,5 +43,55 @@ deploy_pre:
dependencies
:
-
build_pre
script
:
-
apk add --no-cache rsync
-
rsync -av --delete dist/ /nas/kjb_service/zm/pre-project/html/
\ No newline at end of file
-
apk add --no-cache rsync curl jq
# 只允许“最新一次 pre pipeline”部署到 nginx(加二次确认,避免短时间多次推送导致重复 rsync)
-
>
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/
# 非 protected 分支:push 时先做 build 校验(避免合并 pre 时出现 build 报错)
build_check
:
stage
:
build
image
:
node:20-bullseye
tags
:
-
risk-monitor-frontend
# 只在 push 时做构建校验,且排除 protected 分支与目标分支 pre
only
:
-
pushes
except
:
-
pre
-
protected_branches
script
:
-
node -v
-
npm -v
-
echo "cache dir sizes:"
-
du -sh "$CI_PROJECT_DIR/.npm" "$CI_PROJECT_DIR/.npm/_cacache" 2>/dev/null ||
true
-
echo "=== npm ci start ==="
-
date -Iseconds
-
npm ci --cache "$CI_PROJECT_DIR/.npm" --no-audit --no-fund --loglevel=verbose --timing --foreground-scripts
-
echo "=== npm ci end ==="
-
date -Iseconds
-
npm run build
\ No newline at end of file
src/api/decree/home.js
浏览文件 @
cb0736e1
...
...
@@ -3,9 +3,9 @@ import request from "@/api/request.js";
// 最新科技政令
export
function
getDepartmentList
(
params
)
{
return
request
({
method
:
'
GE
T'
,
method
:
'
POS
T'
,
url
:
`/api/administrativeDict/department`
,
params
data
:
params
})
}
...
...
@@ -99,15 +99,6 @@ export function getKeyOrganization(params) {
})
}
// 所有机构
export
function
getAllOrganization
(
params
)
{
return
request
({
method
:
'POST'
,
url
:
`/api/administrativeOrderOverview/orderCount`
,
data
:
params
})
}
// AI智能总结
export
function
getChartInterpretation
(
params
)
{
return
request
({
...
...
src/api/decree/influence.js
浏览文件 @
cb0736e1
...
...
@@ -33,7 +33,7 @@ export function getDecreeEntities(params) {
export
function
getDecreeRelatedChain
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/
administrativeOrderInfo
/relatedChain/
${
params
.
id
}
`
,
url
:
`/api/
chain
/relatedChain/
${
params
.
id
}
`
,
})
}
...
...
@@ -41,7 +41,7 @@ export function getDecreeRelatedChain(params) {
export
function
getDecreeChainNodes
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/
administrativeOrderInfo
/relatedChainNodes/
${
params
.
id
}
`
,
url
:
`/api/
chain
/relatedChainNodes/
${
params
.
id
}
`
,
})
}
...
...
@@ -49,7 +49,8 @@ export function getDecreeChainNodes(params) {
export
function
getDecreeRelatedEntitie
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/administrativeOrderInfo/listRelatedEntitie/
${
params
.
id
}
`
,
url
:
`/api/organization/shareholding`
,
params
})
}
...
...
src/views/bill/deepDig/processAnalysis/index.vue
浏览文件 @
cb0736e1
...
...
@@ -384,8 +384,7 @@
<
/div
>
<
/div> --
>
<
AnalysisBox
title
=
"投票分析"
>
<
div
class
=
"analysis-ai-wrapper analysis-ai-wrapper--box3"
>
<
div
class
=
"vote-legend"
>
<
div
class
=
"vote-legend"
>
<
div
class
=
"vote-legend-item"
>
<
span
class
=
"vote-legend-dot agree"
><
/span
>
<
span
>
赞成票
<
/span
>
...
...
@@ -394,144 +393,151 @@
<
span
class
=
"vote-legend-dot against"
><
/span
>
<
span
>
反对票
<
/span
>
<
/div
>
<
/div
>
<
div
class
=
"box3-main"
:
class
=
"{ 'box3-main--full': !voteFooterText
}
"
>
<
div
class
=
"box3-main-center"
>
<
div
class
=
"box3-main-center-header"
>
<
div
class
=
"box3-main-center-header-box1"
>
立法阶段
<
/div
>
<
div
class
=
"box3-main-center-header-box2"
>
票数
<
/div
>
<
div
class
=
"box3-main-center-header-box3"
>
平均区间
<
/div
>
<
div
class
=
"box3-main-center-header-box4"
>
占比
<
/div
>
<
div
class
=
"box3-main-center-header-box5"
>
倒戈人数
<
span
style
=
"font-weight: normal; display: inline-block"
>
(
平均区间
)
<
/span
>
<
/div
>
<
div
class
=
"analysis-ai-wrapper analysis-ai-wrapper--box3"
>
<
div
class
=
"box3-main"
:
class
=
"{ 'box3-main--full': !voteFooterText
}
"
>
<
div
class
=
"box3-main-center"
>
<
div
class
=
"box3-main-center-header"
>
<
div
class
=
"box3-main-center-header-box1"
>
立法阶段
<
/div
>
<
div
class
=
"box3-main-center-header-box2"
>
票数
<
/div
>
<
div
class
=
"box3-main-center-header-box3"
>
平均区间
<
/div
>
<
div
class
=
"box3-main-center-header-box4"
>
占比
<
/div
>
<
div
class
=
"box3-main-center-header-box5"
>
倒戈人数
<
span
style
=
"font-weight: normal; display: inline-block"
>
(
平均区间
)
<
/span
>
<
/div
>
<
/div
>
<
div
class
=
"box3-main-center-
header-box6"
>
关键议员
<
/div
>
<
/div
>
<
div
class
=
"box3-main-center-content
"
>
<
div
class
=
"box3-main-center-content-box"
v
-
for
=
"item in voteAnalysisList"
:
key
=
"item.actionId
"
>
<
div
class
=
"item
"
>
<
div
class
=
"item-box1
"
>
<
div
class
=
"box1-left"
>
<
div
style
=
"width: 100%; display: flex; flex-direction: column; align-items: flex-end"
>
<
div
class
=
"name nameBlod"
:
title
=
"item.actionTitle"
style
=
"
<
div
class
=
"box3-main-center-
content"
>
<
div
class
=
"box3-main-center-content-box"
v
-
for
=
"item in voteAnalysisList"
:
key
=
"item.actionId
"
>
<
div
class
=
"item
"
>
<
div
class
=
"item-box1
"
>
<
div
class
=
"box1-left
"
>
<
div
style
=
"width: 100%; display: flex; flex-direction: column; align-items: flex-end"
>
<
div
class
=
"name nameBlod"
:
title
=
"item.actionTitle"
style
=
"
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
"
>
{{
item
.
actionTitle
}}
{{
item
.
actionTitle
}}
<
/div
>
<
div
class
=
"time"
>
{{
formatDate
(
item
.
actionDate
)
}}
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.agreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"time"
>
{{
formatDate
(
item
.
actionDate
)
}}
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.againstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.agreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.againstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
agreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
againstCount
+
"票"
}}
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
agreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
againstCount
+
"票"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box3"
>
<
div
class
=
"box3-1"
><
/div
>
<
div
class
=
"box3-2"
><
/div
>
<
/div
>
<
div
class
=
"item-box4"
>
<
div
class
=
"box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
agreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
againstPercent
+
"%"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5"
><
/div
>
<
div
class
=
"item-box6"
>
<
el
-
icon
size
=
"20"
color
=
"#555"
>
<
ArrowDownBold
/>
<
/el-icon
>
<
/div
>
<
/div
>
<
div
class
=
"item"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
<
div
class
=
"icon"
>
<
img
:
src
=
"MZD"
alt
=
""
/>
<
/div
>
<
div
class
=
"name"
>
民主党
<
/div
>
<
div
class
=
"item-box3"
>
<
div
class
=
"box3-1"
><
/div
>
<
div
class
=
"box3-2"
><
/div
>
<
/div
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.dagreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
div
class
=
"item-box4"
>
<
div
class
=
"box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
agreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
againstPercent
+
"%"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5"
><
/div
>
<
/div
>
<
div
class
=
"item"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
<
div
class
=
"icon"
>
<
img
:
src
=
"MZD"
alt
=
""
/>
<
/div
>
<
div
class
=
"name"
>
民主党
<
/div
>
<
/div
>
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.dagainstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.dagreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.dagainstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
dagreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
dagainstCount
+
"票"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box3"
><
/div
>
<
div
class
=
"item-box4"
>
<
div
class
=
"box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
dagreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
dagainstPercent
+
"%"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5"
>
<
div
class
=
"box5-1"
style
=
"color: #ce4f51"
>
{{
item
.
dreverseCount
+
"人"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box6"
>
<
div
class
=
"img-box"
v
-
if
=
"item.dpersonImageUrl"
>
<
img
:
src
=
"item.dpersonImageUrl"
alt
=
""
/>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
dagreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
dagainstCount
+
"票"
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
<
div
class
=
"icon"
>
<
img
:
src
=
"GHD"
alt
=
""
/>
<
/div
>
<
div
class
=
"name"
>
共和党
<
/div
>
<
div
class
=
"item-box3"
><
/div
>
<
div
class
=
"item-box4"
>
<
div
class
=
"box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
dagreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
dagainstPercent
+
"%"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5"
>
<
div
class
=
"box5-1"
style
=
"color: #ce4f51"
>
{{
item
.
dreverseCount
+
"人"
}}
<
/div
>
<
/div
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.ragreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"item"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
<
div
class
=
"icon"
>
<
img
:
src
=
"GHD"
alt
=
""
/>
<
/div
>
<
div
class
=
"name"
>
共和党
<
/div
>
<
/div
>
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.ragainstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
div
class
=
"box1-right"
>
<
div
class
=
"box1-right-top"
>
<
el
-
progress
:
percentage
=
"Number(item.ragreePercent)"
:
show
-
text
=
"false"
color
=
"rgb(33, 129, 57)"
>
<
/el-progress
>
<
/div
>
<
div
class
=
"box1-right-bottom"
>
<
el
-
progress
:
percentage
=
"Number(item.ragainstPercent)"
:
show
-
text
=
"false"
color
=
"rgb(206, 79, 81)"
>
<
/el-progress
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
ragreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
ragainstCount
+
"票"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box3"
>
<
/div
>
<
div
class
=
"item-box4"
>
<
div
class
=
"
box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
ragreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
ragainstPercent
+
"%"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5"
>
<
div
class
=
"box5-1"
style
=
"color: #ce4f51"
>
{{
item
.
rreverseCount
+
"人
"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box6
"
>
<
div
class
=
"img-box"
v
-
if
=
"item.rpersonImageUrl"
>
<
img
:
src
=
"item.rpersonImageUrl"
alt
=
""
/
>
<
div
class
=
"item-box2"
>
<
div
class
=
"box2-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
ragreeCount
+
"票"
}}
<
/div
>
<
div
class
=
"box2-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
ragainstCount
+
"票"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box3"
><
/div
>
<
div
class
=
"
item-box4"
>
<
div
class
=
"box4-1"
style
=
"color: rgb(33, 129, 57)"
>
{{
item
.
ragreePercent
+
"%"
}}
<
/div
>
<
div
class
=
"box4-2"
style
=
"color: rgb(206, 79, 81)"
>
{{
item
.
ragainstPercent
+
"%
"
}}
<
/div
>
<
/div
>
<
div
class
=
"item-box5
"
>
<
div
class
=
"box5-1"
style
=
"color: #ce4f51"
>
{{
item
.
rreverseCount
+
"人"
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<!--
<
div
class
=
"box3-main-center-content-box"
>
<!--
<
div
class
=
"box3-main-center-content-box"
>
<
div
class
=
"item"
v
-
for
=
"(item, index) in voteAnalysisList2"
:
key
=
"index"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
...
...
@@ -582,7 +588,7 @@
<
/div
>
<
/div
>
<
/div> --
>
<!--
<
div
class
=
"box3-main-center-content-box"
>
<!--
<
div
class
=
"box3-main-center-content-box"
>
<
div
class
=
"item"
v
-
for
=
"(item, index) in voteAnalysisList3"
:
key
=
"index"
>
<
div
class
=
"item-box1"
>
<
div
class
=
"box1-left"
>
...
...
@@ -684,28 +690,29 @@
<
/div
>
<
/div
>
<
/div> --
>
<
/div
>
<
/div
>
<
/div
>
<
div
v
-
if
=
"voteFooterText"
class
=
"box3-main-footer"
>
<
div
class
=
"box-footer-left"
>
<
img
src
=
"@/assets/icons/box-footer-left-icon.png"
alt
=
""
/>
<
div
v
-
if
=
"voteFooterText"
class
=
"box3-main-footer"
>
<
div
class
=
"box-footer-left"
>
<
img
src
=
"@/assets/icons/box-footer-left-icon.png"
alt
=
""
/>
<
/div
>
<
div
class
=
"box-footer-center"
>
{{
voteFooterText
}}
<
/div
>
<
div
class
=
"box-footer-right"
>
<
img
src
=
"../assets/icons/arrow-right.png"
alt
=
""
/>
<
/div
>
<
/div
>
<
div
class
=
"box-footer-center"
>
{{
voteFooterText
}}
<
div
v
-
if
=
"!aiPaneVisible.box3"
class
=
"analysis-ai-tip-row"
>
<
TipTab
class
=
"analysis-ai-tip"
/>
<
AiButton
class
=
"analysis-ai-tip-action"
@
mouseenter
=
"handleShowAiPane('box3')"
/>
<
/div
>
<
div
class
=
"box-footer-right"
>
<
img
src
=
"../assets/icons/arrow-right.png"
alt
=
""
/>
<
div
v
-
if
=
"aiPaneVisible.box3"
class
=
"analysis-ai-pane"
@
mouseleave
=
"handleHideAiPane('box3')"
>
<
AiPane
:
aiContent
=
"overviewAiContent.box3"
/>
<
/div
>
<
/div
>
<
div
v
-
if
=
"!aiPaneVisible.box3"
class
=
"analysis-ai-tip-row"
>
<
TipTab
class
=
"analysis-ai-tip"
/>
<
AiButton
class
=
"analysis-ai-tip-action"
@
mouseenter
=
"handleShowAiPane('box3')"
/>
<
/div
>
<
div
v
-
if
=
"aiPaneVisible.box3"
class
=
"analysis-ai-pane"
@
mouseleave
=
"handleHideAiPane('box3')"
>
<
AiPane
:
aiContent
=
"overviewAiContent.box3"
/>
<
/div
>
<
/div
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
<
/div
>
...
...
@@ -1248,6 +1255,7 @@ onMounted(async () => {
.
box1
{
width
:
792
px
;
height
:
415
px
;
.
box1
-
main
{
height
:
368
px
;
...
...
@@ -1393,6 +1401,7 @@ onMounted(async () => {
margin
-
top
:
17
px
;
width
:
792
px
;
height
:
415
px
;
.
box2
-
main
{
height
:
359
px
;
...
...
@@ -1640,6 +1649,7 @@ onMounted(async () => {
margin
-
top
:
16
px
;
width
:
792
px
;
height
:
847
px
;
.
box3
{
width
:
100
%
;
height
:
100
%
;
...
...
@@ -1647,7 +1657,7 @@ onMounted(async () => {
.
vote
-
legend
{
position
:
absolute
;
top
:
1
5
px
;
top
:
1
0
px
;
left
:
50
%
;
transform
:
translateX
(
-
50
%
);
display
:
inline
-
flex
;
...
...
@@ -1735,12 +1745,6 @@ onMounted(async () => {
min
-
width
:
0
;
text
-
align
:
center
;
}
.
box3
-
main
-
center
-
header
-
box6
{
flex
:
90
1
0
;
min
-
width
:
0
;
text
-
align
:
center
;
}
}
.
box3
-
main
-
center
-
content
{
...
...
@@ -1976,23 +1980,6 @@ onMounted(async () => {
line
-
height
:
14
px
;
}
}
.
item
-
box6
{
flex
:
90
1
0
;
min
-
width
:
0
;
text
-
align
:
center
;
.
img
-
box
{
width
:
30
px
;
height
:
30
px
;
margin
-
left
:
30
px
;
img
{
width
:
100
%
;
height
:
100
%
;
}
}
}
}
}
}
...
...
src/views/decree/allOrganization/index.vue
浏览文件 @
cb0736e1
...
...
@@ -30,12 +30,12 @@
<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=
"item-left"
>
<img
:src=
"item.
imgUrl
|| DefaultIcon2"
alt=
""
/>
<img
:src=
"item.
orgImage
|| DefaultIcon2"
alt=
""
/>
</div>
<div
class=
"item-right one-line-ellipsis"
>
{{ item.orgName }}
</div>
<div
class=
"item-total"
>
{{ item.total
OrderNum
}}项
</div>
<div
class=
"item-total"
>
{{ item.total }}项
</div>
<el-icon
color=
"var(--color-primary-100)"
><ArrowRightBold
/></el-icon>
<div
class=
"item-dot"
v-if=
"item.
recentOrderNum"
>
+{{item.recentOrderNum
}}
</div>
<div
class=
"item-dot"
v-if=
"item.
totalRecent"
>
+{{item.totalRecent
}}
</div>
</div>
</div>
<div
class=
"pagination-box"
>
...
...
@@ -56,7 +56,7 @@ import { Search } from '@element-plus/icons-vue'
import
router
from
"@/router"
;
import
TimeTabPane
from
'@/components/base/TimeTabPane/index.vue'
;
import
{
get
AllOrganization
}
from
"@/api/decree/home"
;
import
{
get
DepartmentList
}
from
"@/api/decree/home"
;
import
tipsTcon
from
"./assets/icons/tips-icon.png"
;
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
...
...
@@ -77,7 +77,7 @@ const onAllOrganization = async (num) => {
organizationInfo
.
loading
=
true
try
{
let
{
keyWord
,
pageNum
,
pageSize
,
day
}
=
organizationInfo
const
res
=
await
get
AllOrganization
({
day
,
pageNum
:
pageNum
-
1
,
pageSize
,
keyWord
:
keyWord
||
undefined
});
const
res
=
await
get
DepartmentList
({
day
,
pageNum
:
pageNum
-
1
,
pageSize
,
keyWord
:
keyWord
||
undefined
});
console
.
log
(
"机构列表"
,
res
);
if
(
res
.
code
===
200
)
{
organizationInfo
.
list
=
res
.
data
.
orgList
||
[];
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
cb0736e1
...
...
@@ -47,7 +47,7 @@
<div
class=
"item-dot"
v-if=
"item.recentOrderNum"
>
+
{{
item
.
recentOrderNum
}}
</div>
</div>
<div
class=
"organization-item"
@
click=
"onNavigateTo()"
>
<div
class=
"item-more"
>
查看全部机构 (
{{
govInsList
.
length
+
1
}}
家)
</div>
<div
class=
"item-more"
>
查看全部机构 (
{{
govInsList
.
length
}}
家)
</div>
<el-icon
color=
"var(--color-primary-100)"
><ArrowRightBold
/></el-icon>
</div>
</div>
...
...
@@ -233,7 +233,7 @@
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsTcon"
alt=
""
>
</div>
<div
class=
"data-origin-text"
>
科技政
领
领域分布情况,数据来源:美国各行政机构官网
</div>
<div
class=
"data-origin-text"
>
科技政
令
领域分布情况,数据来源:美国各行政机构官网
</div>
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
...
...
@@ -287,7 +287,7 @@
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsTcon"
alt=
""
>
</div>
<div
class=
"data-origin-text"
>
关键科技政
领
列表,数据来源:美国各行政机构官网
</div>
<div
class=
"data-origin-text"
>
关键科技政
令
列表,数据来源:美国各行政机构官网
</div>
</div>
</div>
<div
class=
"box8"
>
...
...
@@ -321,7 +321,7 @@
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsTcon"
alt=
""
>
</div>
<div
class=
"data-origin-text"
>
科技政
领
重点条款词云,数据来源:美国各行政机构官网
</div>
<div
class=
"data-origin-text"
>
科技政
令
重点条款词云,数据来源:美国各行政机构官网
</div>
</div>
</div>
</div>
...
...
@@ -502,10 +502,10 @@ const govInsList = ref([]);
const
checkedGovIns
=
ref
([]);
const
handleGetDepartmentList
=
async
()
=>
{
try
{
const
res
=
await
getDepartmentList
({
day
:
7
});
const
res
=
await
getDepartmentList
({});
console
.
log
(
"机构列表"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
govInsList
.
value
=
res
.
data
;
if
(
res
.
code
===
200
)
{
govInsList
.
value
=
res
.
data
.
orgList
;
}
}
catch
(
error
)
{
console
.
error
(
"获取机构列表error"
,
error
);
...
...
src/views/decree/decreeLayout/influence/index.vue
浏览文件 @
cb0736e1
...
...
@@ -100,7 +100,7 @@ import {
getDecreeRelatedEntitie
}
from
"@/api/decree/influence"
;
import
ChartChain
from
"./com/ChartChain.vue"
;
import
AiTips
from
"./com/AiTips.vue"
;
//
import AiTips from "./com/AiTips.vue";
import
GraphChart
from
"@/components/base/GraphChart/index.vue"
;
import
defaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
noticeIcon
from
"./assets/images/notice-icon.png"
;
...
...
@@ -186,7 +186,7 @@ const headerChartData = (row) => {
onDecreeRelatedChain
(
row
.
id
)
break
;
case
2
:
onDecreeRelatedEntitie
(
row
.
i
d
)
onDecreeRelatedEntitie
(
row
.
orgI
d
)
break
;
}
}
...
...
@@ -247,14 +247,17 @@ const graphInfo = reactive({
nodes
:
[],
links
:
[],
}
);
const
onDecreeRelatedEntitie
=
async
(
i
d
)
=>
{
const
onDecreeRelatedEntitie
=
async
(
orgI
d
)
=>
{
try
{
const
res
=
await
getDecreeRelatedEntitie
({
id
}
);
const
res
=
await
getDecreeRelatedEntitie
({
orgId
,
rule
:
false
,
withSanInfo
:
false
}
);
console
.
log
(
"实体关系:"
,
res
);
if
(
res
.
code
===
200
)
{
graphInfo
.
links
=
res
.
data
.
map
(
onFormatLink
)
graphInfo
.
nodes
=
res
.
data
.
map
(
onFormatNode
)
graphInfo
.
nodes
.
unshift
(
onFormatNode
(
entityInfo
.
node
))
let
arr1
=
res
.
data
.
parentOrgList
.
map
(
item
=>
({
...
item
,
level
:
1
}
))
let
arr3
=
res
.
data
.
childrenOrgList
.
map
(
item
=>
({
...
item
,
level
:
3
}
))
graphInfo
.
links
=
[...
arr1
,...
arr3
].
map
(
onFormatLink
)
graphInfo
.
nodes
=
[...
arr1
,...
arr3
].
map
(
onFormatNode
)
graphInfo
.
nodes
.
unshift
(
onFormatNode
({
name
:
res
.
data
.
orgName
,
id
:
res
.
data
.
orgId
}
,
-
1
))
}
}
catch
(
error
)
{
console
.
log
(
"获取实体关系失败"
,
error
);
...
...
@@ -262,17 +265,18 @@ const onDecreeRelatedEntitie = async (id) => {
}
const
onFormatLink
=
(
item
,
index
)
=>
{
return
{
id
:
`link-${index+1
}
`
,
source
:
item
.
id
+
''
,
target
:
entityInfo
.
id
+
''
,
label
:
{
show
:
true
,
color
:
"#055fc2"
,
backgroundColor
:
"#eef7ff"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
item
.
relation
}
,
id
:
`link-${index
}
-${item.id
}
`
,
target
:
item
.
level
==
3
?
`${index
}
-${item.id
}
`
:
`-1-${entityInfo.node.orgId
}
`
,
source
:
item
.
level
==
3
?
`-1-${entityInfo.node.orgId
}
`
:
`${index
}
-${item.id
}
`
,
label
:
{
show
:
true
,
color
:
"#055fc2"
,
backgroundColor
:
"#eef7ff"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
item
.
description
}
,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
,
opacity
:
1
}
}
}
const
onFormatNode
=
(
item
)
=>
{
let
leader
=
item
.
id
==
entityInfo
.
i
d
;
const
onFormatNode
=
(
item
,
index
)
=>
{
let
leader
=
item
.
id
==
entityInfo
.
node
.
orgI
d
;
return
{
id
:
item
.
id
+
''
,
name
:
onWordWrap
(
item
.
companyN
ame
,
7
),
id
:
`${index
}
-${item.id
}
`
,
name
:
onWordWrap
(
item
.
n
ame
,
7
),
label
:
{
show
:
true
,
color
:
"#3b414b"
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论