Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
26101b65
提交
26101b65
authored
3月 25, 2026
作者:
张烨
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:政令对接思维导图接口
上级
dec75869
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
74 行增加
和
88 行删除
+74
-88
background.js
src/api/decree/background.js
+11
-0
index.vue
src/views/decree/allOrganization/index.vue
+11
-6
MindGraph.vue
src/views/decree/com/MindGraph.vue
+2
-2
index.vue
src/views/decree/decreeHome/index.vue
+1
-0
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+0
-1
index.vue
src/views/decree/decreeLayout/influence/index.vue
+1
-1
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+16
-7
index.vue
src/views/decree/decreeLayout/overview/measures/index.vue
+32
-71
没有找到文件。
src/api/decree/background.js
浏览文件 @
26101b65
...
...
@@ -60,6 +60,17 @@ export function getDecreeMainContent(params) {
})
}
// 思维导图
/**
* @param { id }
*/
export
function
getDecreeMindMap
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/administrativeOrderInfo/mindMap/
${
params
.
id
}
`
,
})
}
// 相关实体
/**
* @param { id }
...
...
src/views/decree/allOrganization/index.vue
浏览文件 @
26101b65
...
...
@@ -27,15 +27,15 @@
<div
class=
"date-text"
>
近期美国各联邦政府机构发布涉华政令数量汇总
</div>
<TimeTabPane
@
time-click=
"handleDateChange"
/>
</div>
<div
class=
"organization-list"
ref=
"refOrganization"
>
<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.
orgImage
|| DefaultIcon2"
alt=
""
/>
<img
:src=
"item.
imgUrl
|| DefaultIcon2"
alt=
""
/>
</div>
<div
class=
"item-right one-line-ellipsis"
>
{{ item.orgName }}
</div>
<div
class=
"item-total"
>
{{ item.total }}项
</div>
<div
class=
"item-total"
>
{{ item.total
OrderNum
}}项
</div>
<el-icon
color=
"var(--color-primary-100)"
><ArrowRightBold
/></el-icon>
<div
class=
"item-dot"
v-if=
"item.
totalRecent"
>
+{{item.totalRecent
}}
</div>
<div
class=
"item-dot"
v-if=
"item.
recentOrderNum"
>
+{{item.recentOrderNum
}}
</div>
</div>
</div>
<div
class=
"pagination-box"
>
...
...
@@ -62,6 +62,7 @@ import tipsTcon from "./assets/icons/tips-icon.png";
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
const
organizationInfo
=
reactive
({
loading
:
false
,
pageNum
:
1
,
pageSize
:
8
,
total
:
0
,
...
...
@@ -73,18 +74,21 @@ const organizationInfo = reactive({
const
onAllOrganization
=
async
(
num
)
=>
{
organizationInfo
.
pageNum
=
num
||
1
organizationInfo
.
loading
=
true
try
{
let
{
keyWord
,
pageNum
,
pageSize
,
day
}
=
organizationInfo
const
res
=
await
getAllOrganization
({
day
,
pageNum
:
pageNum
-
1
,
pageSize
,
keyWord
:
keyWord
||
undefined
});
console
.
log
(
"机构列表"
,
res
);
if
(
res
.
code
===
200
)
{
organizationInfo
.
list
=
res
.
data
.
orgList
||
[];
organizationInfo
.
total
=
res
.
data
.
total
||
0
;
}
}
catch
(
error
)
{
console
.
error
(
"获取机构列表数据失败"
,
error
);
organizationInfo
.
list
=
[];
organizationInfo
.
total
=
0
;
}
organizationInfo
.
loading
=
false
}
const
handleDateChange
=
(
event
)
=>
{
...
...
@@ -225,7 +229,8 @@ onMounted(() => {
.organization-list
{
width
:
100%
;
height
:
20px
;
margin
:
26px
0
16px
;
padding
:
16px
0
;
margin-top
:
10px
;
flex
:
auto
;
display
:
grid
;
grid-template-columns
:
repeat
(
4
,
1fr
);
...
...
src/views/decree/com/MindGraph.vue
浏览文件 @
26101b65
...
...
@@ -18,8 +18,8 @@ const onInitGraph = () => {
graph
=
new
G6
.
Graph
({
container
:
container
,
width
,
height
,
fitView
:
true
,
fitViewPadding
:
50
,
//
fitView: true,
//
fitViewPadding: 50,
defaultNode
:
{
type
:
"rect"
,
size
:
[
250
,
45
],
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
26101b65
...
...
@@ -2202,6 +2202,7 @@ onMounted(async () => {
.box5-main
{
flex
:
auto
;
height
:
20px
;
padding-top
:
16px
;
.box5-chart
{
height
:
100%
;
}
...
...
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
26101b65
...
...
@@ -170,7 +170,6 @@ const onWordWrap = (word, num) => {
}
const
handleClickDecree
=
decree
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
name
);
const
route
=
router
.
resolve
({
path
:
"/decreeLayout"
,
query
:
{
...
...
src/views/decree/decreeLayout/influence/index.vue
浏览文件 @
26101b65
...
...
@@ -75,7 +75,7 @@
<
/div
>
<
/template
>
<
div
class
=
"box2-main"
>
<
AiTips
:
tips
=
"tips"
/
>
<
!--
<
AiTips
:
tips
=
"tips"
/>
--
>
<
div
class
=
"graph-box"
v
-
if
=
"contentType==1"
>
<
ChartChain
:
listData
=
"fishbone.list"
:
baseData
=
"fishbone.base"
/>
<
/div
>
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
26101b65
...
...
@@ -46,7 +46,7 @@
<div
class=
"custom-collapse-title"
>
<div
class=
"custom-collapse-index"
>
{{
index
+
1
}}
</div>
<div
class=
"custom-collapse-name one-line-ellipsis"
>
<span
class=
"text-click-hover"
@
click
.
stop=
"handleClick
Decree
(item)"
>
{{
item
.
title
}}
</span>
<span
class=
"text-click-hover"
@
click
.
stop=
"handleClick
Bull
(item)"
>
{{
item
.
title
}}
</span>
</div>
</div>
</
template
>
...
...
@@ -73,9 +73,9 @@
<div
class=
"time-line-icon"
>
<img
style=
"width: 100%; height: 100%;"
:src=
"item.orgImage || DefaultIcon1"
alt=
""
>
</div>
<div
class=
"time-line-name"
@
click=
"handleToInstitution(item)"
>
{{ item.proposeOrgName }}
</div>
<div
class=
"time-line-name
text-click-hover
"
@
click=
"handleToInstitution(item)"
>
{{ item.proposeOrgName }}
</div>
</div>
<div
class=
"timeline-content"
>
{{ item.describe }}
</div>
<div
class=
"timeline-content"
@
click=
"handleClickDecree(item)"
>
{{ item.describe }}
</div>
</div>
</el-timeline-item>
</el-timeline>
...
...
@@ -167,15 +167,24 @@ const handleGetPrev = async () => {
};
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
proposeOrgName
);
const
curRoute
=
router
.
resolve
({
path
:
"/institution"
,
query
:
{
id
:
item
.
i
d
id
:
item
.
orgI
d
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
// 跳转科技政令详情页
const
handleClickDecree
=
item
=>
{
const
route
=
router
.
resolve
({
path
:
"/decreeLayout"
,
query
:
{
id
:
item
.
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 法律依据
const
dependList
=
ref
([]);
...
...
@@ -196,7 +205,7 @@ const handleGetLaws = async () => {
}
};
// 跳转科技法案详情页
const
handleClick
Decree
=
decree
=>
{
const
handleClick
Bull
=
decree
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
decree
.
billId
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
const
route
=
router
.
resolve
({
...
...
@@ -414,7 +423,6 @@ onMounted(() => {
.time-line-name
{
color
:
rgba
(
59
,
65
,
75
,
1
);
font-size
:
15px
;
cursor
:
pointer
;
}
}
...
...
@@ -445,6 +453,7 @@ onMounted(() => {
font-size
:
16px
;
font-weight
:
400
;
line-height
:
26px
;
cursor
:
pointer
;
}
}
}
...
...
src/views/decree/decreeLayout/overview/measures/index.vue
浏览文件 @
26101b65
...
...
@@ -4,7 +4,7 @@
<div
class=
"box1"
>
<AnalysisBox
title=
"主要指令"
:showAllBtn=
"false"
>
<template
#
header-btn
>
<div
class=
"mind-bnt"
@
click=
"
headerTreeDialog
()"
>
<div
class=
"mind-bnt"
@
click=
"
onDecreeMindMap
()"
>
<div
class=
"mind-icon"
>
<img
src=
"./assets/images/edit-line.png"
alt=
""
>
</div>
...
...
@@ -123,7 +123,7 @@
</div>
</div>
<el-dialog
v-model=
"isTreeDialog"
width=
"1
40
0px"
top=
"8vh"
class=
"viewpoint-dialog"
destroy-on-close
>
<el-dialog
v-model=
"isTreeDialog"
width=
"1
54
0px"
top=
"8vh"
class=
"viewpoint-dialog"
destroy-on-close
>
<
template
#
header
>
<div
class=
"viewpoint-header"
>
<div
class=
"viewpoint-title"
>
政令举措思维导图
</div>
...
...
@@ -144,7 +144,7 @@ import router from "@/router";
import
{
Search
}
from
'@element-plus/icons-vue'
import
MindGraph
from
"@/views/decree/com/MindGraph.vue"
import
{
getDecreeOrganization
}
from
"@/api/decree/introduction"
;
import
{
getDecreeRelatedEntity
,
getDecreeMainContent
}
from
"@/api/decree/background"
;
import
{
getDecreeRelatedEntity
,
getDecreeMainContent
,
getDecreeMindMap
}
from
"@/api/decree/background"
;
import
{
getDecreehylyList
}
from
"@/api/decree/home"
;
import
ActionButton
from
'@/components/base/ActionButton/index.vue'
import
DefaultIcon1
from
"@/assets/icons/default-icon1.png"
;
...
...
@@ -300,62 +300,7 @@ const simpleNumToChinese = (num) => {
// 思维导图
const
isTreeDialog
=
ref
(
false
);
const
refMindGraph
=
ref
(
null
);
let
mindData
=
[
{
id
:
1
,
label
:
"在本命令发布之日起90天内,商务部长应与国务卿和白宫科学技术政策办公室(OSTP)主任协商,建立并实施“美国人工智能出口计划”(Program),以支持美国全栈人工智能出口包的开发和部署。执行期限:在本命令发布之日起90天内完成计划的建立与实施。"
,
children
:
[
{
id
:
5
,
label
:
"商务部"
,
},
{
id
:
6
,
label
:
"国务院"
,
},
]
},
{
id
:
2
,
label
:
"商务部长应向由产业界主导的联合体发布公开征集提案,以纳入该计划。提案必须包括全栈人工智能技术包、目标出口国家或区域集团、数据中心及基础设施的建设运营模式、所需联邦激励和支持机制,并遵守所有相关美国出口管制制度、对外投资法规和最终用户政策。执行期限:提案须在公开征集发布后90天内提交,商务部将滚动审议提案。"
,
children
:
[
{
id
:
7
,
label
:
"白宫科学和技术政策办公室"
,
},
{
id
:
8
,
label
:
"国防部"
,
},
]
},
{
id
:
3
,
label
:
"制定并执行统一的联邦政府战略,以促进美国人工智能技术和标准的出口;协调技术、金融和外交资源以加速优先人工智能出口项目包的部署;协调美国参与多边倡议和国别伙伴关系;支持伙伴国家营造有利于美国人工智能系统部署的监管、数据和基础设施环境;分析市场准入障碍;并与小企业管理局投资与创新办公室协调促进对美国小型企业的人工智能技术研发和基础设施制造的投资。执行期限:持续执行,无明确终止日期"
,
children
:
[
{
id
:
9
,
label
:
"能源部"
,
},
{
id
:
10
,
label
:
"美国贸易代表办公室"
,
},
]
},
{
id
:
4
,
label
:
"商务部长应与国务卿、国防部长、能源部长和OSTP主任协商,评估提交的提案。经选定的提案将被指定为优先人工智能出口包,并通过优先获得本命令第4节所述工具予以支持。执行期限:提案评估将在提案提交后持续进行,无明确截止日期。"
,
children
:
[
{
id
:
11
,
label
:
"小企业管理局"
,
},
]
},
]
const
headerTreeDialog
=
()
=>
{
isTreeDialog
.
value
=
true
;
const
onDecreeMindMap
=
async
()
=>
{
let
labelCfg
=
{
position
:
'left'
,
offset
:
-
20
,
...
...
@@ -366,18 +311,34 @@ const headerTreeDialog = () => {
autoWrap
:
true
}
}
let
nodes
=
[{
id
:
"0"
,
label
:
"人工智能领域举措"
}]
let
edges
=
[]
mindData
.
forEach
(
item
=>
{
nodes
.
push
({
id
:
String
(
item
.
id
),
label
:
item
.
label
,
maxWidth
:
600
,
labelCfg
})
item
.
children
?.
forEach
(
child
=>
{
nodes
.
push
({
id
:
String
(
child
.
id
),
label
:
child
.
label
})
edges
.
push
({
id
:
`
${
child
.
id
}
-
${
item
.
id
}
`
,
source
:
String
(
child
.
id
),
target
:
String
(
item
.
id
)})
edges
.
push
({
id
:
`0-
${
child
.
id
}
`
,
source
:
"0"
,
target
:
String
(
child
.
id
)})
})
})
console
.
log
(
"思维导图数据"
,
nodes
,
edges
)
setTimeout
(()
=>
{
refMindGraph
.
value
.
onMindGraphData
(
nodes
,
edges
)
},
300
)
isTreeDialog
.
value
=
true
;
try
{
let
res
=
await
getDecreeMindMap
({
id
:
route
.
query
.
id
});
console
.
log
(
"思维导图"
,
res
);
if
(
res
.
code
===
200
)
{
let
nodes
=
[]
let
edges
=
[]
Object
.
keys
(
res
.
data
||
{}).
forEach
((
label
,
count
)
=>
{
nodes
.
push
({
id
:
`node-
${
count
}
`
,
label
})
})
Object
.
values
(
res
.
data
||
{}).
forEach
((
list
,
count
)
=>
{
list
.
forEach
((
item
,
index
)
=>
{
if
(
item
.
execAgent
?.
length
)
{
nodes
.
push
({
id
:
`node-
${
count
}
-
${
index
}
`
,
label
:
item
.
textZh
,
maxWidth
:
600
,
labelCfg
})
item
.
execAgent
.
forEach
((
label
,
num
)
=>
{
nodes
.
push
({
id
:
`node-
${
count
}
-
${
index
}
-
${
num
}
`
,
label
})
edges
.
push
({
id
:
`edge1-
${
count
}
-
${
index
}
-
${
num
}
`
,
source
:
`node-
${
count
}
-
${
index
}
-
${
num
}
`
,
target
:
`node-
${
count
}
-
${
index
}
`
})
edges
.
push
({
id
:
`edge2-
${
count
}
-
${
index
}
-
${
num
}
`
,
source
:
`node-
${
count
}
`
,
target
:
`node-
${
count
}
-
${
index
}
-
${
num
}
`
})
})
}
})
})
setTimeout
(()
=>
{
refMindGraph
.
value
.
onMindGraphData
(
nodes
,
edges
)
},
100
)
}
}
catch
(
error
)
{
console
.
error
(
"获取思维导图数据失败:"
,
error
);
}
}
// 相关实体
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论