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 个修改的文件
包含
105 行增加
和
49 行删除
+105
-49
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
+0
-0
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
差异被折叠。
点击展开。
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论