Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
42c74a3f
提交
42c74a3f
authored
3月 12, 2026
作者:
张烨
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
科技政令-深度挖掘增加冲突关系弹出框
上级
9b312ae7
全部展开
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
76 行增加
和
37 行删除
+76
-37
index.vue
src/views/decree/decreeHome/index.vue
+7
-5
ai.png
src/views/decree/decreeLayout/assets/icons/ai.png
+0
-0
right.png
src/views/decree/decreeLayout/assets/icons/right.png
+0
-0
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+0
-0
ChartChain.vue
src/views/decree/decreeLayout/influence/ChartChain.vue
+2
-2
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+18
-14
index.vue
src/views/decree/decreeLayout/overview/index.vue
+0
-2
index.vue
src/views/decree/decreeLayout/overview/measures/index.vue
+10
-12
index.vue
src/views/decree/decreeOriginal/index.vue
+38
-1
vite.config.js
vite.config.js
+1
-1
没有找到文件。
src/views/decree/decreeHome/index.vue
浏览文件 @
42c74a3f
...
@@ -364,7 +364,7 @@
...
@@ -364,7 +364,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"select-box"
>
<
!-- <
div class="select-box">
<div class="select-box-header">
<div class="select-box-header">
<div class="icon"></div>
<div class="icon"></div>
<div class="title">{{ "涉及领域" }}</div>
<div class="title">{{ "涉及领域" }}</div>
...
@@ -378,7 +378,7 @@
...
@@ -378,7 +378,7 @@
</el-checkbox>
</el-checkbox>
</div>
</div>
</div>
</div>
</div>
</div>
-->
</div>
</div>
<div
class=
"right"
>
<div
class=
"right"
>
<div
class=
"content-header"
>
<div
class=
"content-header"
>
...
@@ -521,6 +521,7 @@ const pageSize = ref(10);
...
@@ -521,6 +521,7 @@ const pageSize = ref(10);
// 处理页码改变事件
// 处理页码改变事件
const
handleCurrentChange
=
page
=>
{
const
handleCurrentChange
=
page
=>
{
currentPage
.
value
=
page
;
currentPage
.
value
=
page
;
handleToPosi
(
'position4'
)
handleGetDecreeOrderList
();
handleGetDecreeOrderList
();
};
};
...
@@ -1235,7 +1236,8 @@ const handleGetDecreeOrderList = async () => {
...
@@ -1235,7 +1236,8 @@ const handleGetDecreeOrderList = async () => {
watch
([
activePubTime
,
activeAreaList
,
checkedGovIns
,
isSort
,
isChina
,
searchType
],
val
=>
{
watch
([
activePubTime
,
activeAreaList
,
checkedGovIns
,
isSort
,
isChina
,
searchType
],
val
=>
{
// 切换页码到第一页
// 切换页码到第一页
handleCurrentChange
(
1
);
currentPage
.
value
=
1
;
handleGetDecreeOrderList
();
});
});
// 切换当前政令
// 切换当前政令
...
@@ -3182,11 +3184,11 @@ onMounted(async () => {
...
@@ -3182,11 +3184,11 @@ onMounted(async () => {
border-radius
:
10px
;
border-radius
:
10px
;
.select-box
{
.select-box
{
margin-top
:
21
px
;
margin-top
:
16
px
;
.select-box-header
{
.select-box-header
{
display
:
flex
;
display
:
flex
;
gap
:
1
7
px
;
gap
:
1
6
px
;
.icon
{
.icon
{
margin-top
:
4px
;
margin-top
:
4px
;
...
...
src/views/decree/decreeLayout/
influence/assets/image
s/ai.png
→
src/views/decree/decreeLayout/
assets/icon
s/ai.png
浏览文件 @
42c74a3f
File moved
src/views/decree/decreeLayout/
influence/assets/image
s/right.png
→
src/views/decree/decreeLayout/
assets/icon
s/right.png
浏览文件 @
42c74a3f
File moved
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
42c74a3f
差异被折叠。
点击展开。
src/views/decree/decreeLayout/influence/ChartChain.vue
浏览文件 @
42c74a3f
...
@@ -328,7 +328,7 @@ onMounted(() => {
...
@@ -328,7 +328,7 @@ onMounted(() => {
.
icon1
{
.
icon1
{
width
:
19
px
;
width
:
19
px
;
height
:
20
px
;
height
:
20
px
;
background
-
image
:
url
(
".
/assets/image
s/ai.png"
);
background
-
image
:
url
(
".
./assets/icon
s/ai.png"
);
background
-
size
:
100
%
100
%
;
background
-
size
:
100
%
100
%
;
flex
-
shrink
:
0
;
flex
-
shrink
:
0
;
}
}
...
@@ -356,7 +356,7 @@ onMounted(() => {
...
@@ -356,7 +356,7 @@ onMounted(() => {
.
icon2
{
.
icon2
{
width
:
24
px
;
width
:
24
px
;
height
:
24
px
;
height
:
24
px
;
background
-
image
:
url
(
".
/assets/image
s/right.png"
);
background
-
image
:
url
(
".
./assets/icon
s/right.png"
);
background
-
size
:
100
%
100
%
;
background
-
size
:
100
%
100
%
;
}
}
}
}
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
42c74a3f
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<div
class=
"box1-container"
>
<div
class=
"box1-main"
>
<div
class=
"box1-main"
>
<el-empty
v-if=
"backgroundList.length === 0"
style=
"padding-top: 60px;"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"backgroundList.length === 0"
style=
"padding-top: 60px;"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box1-item"
v-for=
"(item, index) in backgroundList"
:key=
"index"
>
<div
class=
"box1-item"
v-for=
"(item, index) in backgroundList"
:key=
"index"
>
...
@@ -27,6 +28,7 @@
...
@@ -27,6 +28,7 @@
<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>
</AnalysisBox>
</AnalysisBox>
</div>
</div>
<div
class=
"box2"
>
<div
class=
"box2"
>
...
@@ -203,7 +205,6 @@ onMounted(() => {
...
@@ -203,7 +205,6 @@ onMounted(() => {
.introduction-wrap
{
.introduction-wrap
{
display
:
flex
;
display
:
flex
;
width
:
1600px
;
width
:
1600px
;
height
:
901px
;
padding
:
16px
0
;
padding
:
16px
0
;
gap
:
16px
;
gap
:
16px
;
...
@@ -215,8 +216,7 @@ onMounted(() => {
...
@@ -215,8 +216,7 @@ onMounted(() => {
gap
:
16px
;
gap
:
16px
;
.box1
{
.box1
{
height
:
50%
;
height
:
690px
;
flex
:
auto
;
.header-btn-box
{
.header-btn-box
{
display
:
flex
;
display
:
flex
;
...
@@ -245,12 +245,17 @@ onMounted(() => {
...
@@ -245,12 +245,17 @@ onMounted(() => {
}
}
}
}
.box1-container
{
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
padding
:
16px
;
}
.box1-main
{
.box1-main
{
margin-top
:
16px
;
margin-left
:
22px
;
width
:
1034px
;
width
:
1034px
;
height
:
2
9
0px
;
height
:
20px
;
overflow
:
hidden
;
flex
:
auto
;
overflow-y
:
auto
;
overflow-y
:
auto
;
.box1-item
{
.box1-item
{
...
@@ -300,7 +305,6 @@ onMounted(() => {
...
@@ -300,7 +305,6 @@ onMounted(() => {
}
}
.box1-footer
{
.box1-footer
{
margin
:
20px
22px
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
...
@@ -316,14 +320,11 @@ onMounted(() => {
...
@@ -316,14 +320,11 @@ onMounted(() => {
}
}
.box2
{
.box2
{
height
:
50%
;
height
:
500px
;
flex
:
auto
;
.box2-main
{
.box2-main
{
margin-top
:
3px
;
padding
:
16px
20px
;
margin-left
:
31px
;
height
:
100%
;
height
:
330px
;
width
:
1004px
;
overflow
:
hidden
;
overflow
:
hidden
;
overflow-y
:
auto
;
overflow-y
:
auto
;
.custom-collapse
{
.custom-collapse
{
...
@@ -335,6 +336,9 @@ onMounted(() => {
...
@@ -335,6 +336,9 @@ onMounted(() => {
: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
)
{
padding-bottom
:
16px
;
}
.custom-collapse-title
{
.custom-collapse-title
{
position
:
relative
;
position
:
relative
;
.custom-collapse-index
{
.custom-collapse-index
{
...
...
src/views/decree/decreeLayout/overview/index.vue
浏览文件 @
42c74a3f
...
@@ -114,7 +114,6 @@ onMounted(() => {
...
@@ -114,7 +114,6 @@ onMounted(() => {
}
}
.main
{
.main
{
width
:
1760px
;
width
:
1760px
;
height
:
901px
;
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/decree/decreeLayout/overview/measures/index.vue
浏览文件 @
42c74a3f
...
@@ -29,19 +29,19 @@
...
@@ -29,19 +29,19 @@
</div>
</div>
<!-- 渲染一级列表 -->
<!-- 渲染一级列表 -->
<div
class=
"numbered-list"
>
<div
class=
"numbered-list"
>
<div
v-for=
"(item, itemIndex) in section.
children
"
:key=
"itemIndex"
class=
"list-item"
>
<div
v-for=
"(item, itemIndex) in section.
slaver
"
:key=
"itemIndex"
class=
"list-item"
>
<div
class=
"list-item-dot"
>
{{
itemIndex
+
1
}}
.
</div>
<div
class=
"list-item-dot"
>
{{
itemIndex
+
1
}}
.
</div>
<div
class=
"list-item-word"
>
{{
item
.
content
}}
</div>
<div
class=
"list-item-word"
>
{{
item
.
content
}}
</div>
<!-- 渲染二级列表 -->
<!-- 渲染二级列表 -->
<div
v-if=
"item.
children
"
class=
"sub-list"
>
<div
v-if=
"item.
slaver
"
class=
"sub-list"
>
<div
v-for=
"(subItem, subIndex) in item.
children
"
:key=
"subIndex"
class=
"sub-item"
>
<div
v-for=
"(subItem, subIndex) in item.
slaver
"
:key=
"subIndex"
class=
"sub-item"
>
<div
class=
"sub-item-dot"
>
(
{{
subIndex
+
1
}}
)
</div>
<div
class=
"sub-item-dot"
>
(
{{
subIndex
+
1
}}
)
</div>
<div
class=
"sub-item-word"
>
{{
subItem
.
content
}}
</div>
<div
class=
"sub-item-word"
>
{{
subItem
.
content
}}
</div>
<!-- 渲染三级列表 -->
<!-- 渲染三级列表 -->
<div
v-if=
"subItem.
children
"
class=
"sub-sub-list"
>
<div
v-if=
"subItem.
slaver
"
class=
"sub-sub-list"
>
<div
v-for=
"(subSubItem, subSubIndex) in subItem.
children
"
:key=
"subSubIndex"
class=
"sub-sub-item"
>
<div
v-for=
"(subSubItem, subSubIndex) in subItem.
slaver
"
:key=
"subSubIndex"
class=
"sub-sub-item"
>
<div
class=
"sub-sub-item-dot"
>
{{
ALPHABET
[
subSubIndex
%
26
]
}}
.
</div>
<div
class=
"sub-sub-item-dot"
>
{{
ALPHABET
[
subSubIndex
%
26
]
}}
.
</div>
<div
class=
"sub-sub-item-word"
>
{{
subSubItem
.
content
}}
</div>
<div
class=
"sub-sub-item-word"
>
{{
subSubItem
.
content
}}
</div>
</div>
</div>
...
@@ -149,16 +149,16 @@ const commandWord = ref("");
...
@@ -149,16 +149,16 @@ const commandWord = ref("");
const
contentList
=
ref
([
const
contentList
=
ref
([
// {
// {
// content: "建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划",
// content: "建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划",
//
children
: [
//
slaver
: [
// {
// {
// content: '在本命令发布之日起 90 天内,商务部长应与国务卿及科学技术政策办公室(OSTP)主任协商,建立并实施美国人工智能出口计划(计划),以支持美国全栈人工智能出口软件包的开发和部署。'
// content: '在本命令发布之日起 90 天内,商务部长应与国务卿及科学技术政策办公室(OSTP)主任协商,建立并实施美国人工智能出口计划(计划),以支持美国全栈人工智能出口软件包的开发和部署。'
// },
// },
// {
// {
// content: '商务部长应公开征集由行业主导的联盟提案,以纳入该计划。公开征集要求每项提案必须:',
// content: '商务部长应公开征集由行业主导的联盟提案,以纳入该计划。公开征集要求每项提案必须:',
//
children
: [
//
slaver
: [
// {
// {
// content: '包含一套全栈人工智能技术包,涵盖:',
// content: '包含一套全栈人工智能技术包,涵盖:',
//
children
: [
//
slaver
: [
// {
// {
// content: 'AI 优化的计算机硬件(如芯片、服务器和加速器)、数据中心存储、云服务和网络,以及这些设备是否以及在多大程度上在美国制造的描述;'
// content: 'AI 优化的计算机硬件(如芯片、服务器和加速器)、数据中心存储、云服务和网络,以及这些设备是否以及在多大程度上在美国制造的描述;'
// },
// },
...
@@ -200,7 +200,7 @@ const contentList = ref([
...
@@ -200,7 +200,7 @@ const contentList = ref([
// },
// },
// {
// {
// content: "动员联邦融资工具",
// content: "动员联邦融资工具",
//
children
: [
//
slaver
: [
// {
// {
// content: '经济外交行动小组(EDAG),于 2024 年 6 月 21 日总统备忘录中成立,由国务卿主持,并与商务部长和美国贸易代表协商,并根据 2019 年《通过外交倡导美国企业法案》(公共法 116-94 J 部分第七章)第 708 条(CABDA)所述,应协调联邦融资工具的动员,以支持优先的人工智能出口方案。'
// content: '经济外交行动小组(EDAG),于 2024 年 6 月 21 日总统备忘录中成立,由国务卿主持,并与商务部长和美国贸易代表协商,并根据 2019 年《通过外交倡导美国企业法案》(公共法 116-94 J 部分第七章)第 708 条(CABDA)所述,应协调联邦融资工具的动员,以支持优先的人工智能出口方案。'
// },
// },
...
@@ -319,7 +319,6 @@ onMounted(() => {
...
@@ -319,7 +319,6 @@ onMounted(() => {
.introduction-wrap
{
.introduction-wrap
{
display
:
flex
;
display
:
flex
;
width
:
1600px
;
width
:
1600px
;
height
:
100%
;
padding
:
16px
0
;
padding
:
16px
0
;
gap
:
16px
;
gap
:
16px
;
...
@@ -723,8 +722,7 @@ onMounted(() => {
...
@@ -723,8 +722,7 @@ onMounted(() => {
}
}
.box4
{
.box4
{
height
:
20px
;
height
:
610px
;
flex
:
auto
;
.left-bottom-main
{
.left-bottom-main
{
padding
:
20px
20px
0
;
padding
:
20px
20px
0
;
...
...
src/views/decree/decreeOriginal/index.vue
浏览文件 @
42c74a3f
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
<
script
setup
>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
getDecreeSummary
}
from
"@/api/decree/introduction"
;
import
{
getDecreeSummary
}
from
"@/api/decree/introduction"
;
import
{
getDecreeReport
}
from
"@/api/decree/introduction"
;
import
{
getDecreeReport
}
from
"@/api/decree/introduction"
;
...
@@ -72,8 +73,44 @@ const summaryInfo = ref({});
...
@@ -72,8 +73,44 @@ const summaryInfo = ref({});
// 政令原文操作
// 政令原文操作
const
isHighlight
=
ref
(
true
);
const
isHighlight
=
ref
(
true
);
const
isTranslate
=
ref
(
true
);
const
isTranslate
=
ref
(
true
);
const
handleDownload
=
()
=>
{
const
handleDownload
=
async
()
=>
{
if
(
summaryInfo
.
value
?.
url
)
{
try
{
const
response
=
await
fetch
(
summaryInfo
.
value
.
url
,
{
method
:
'GET'
,
headers
:
{
'Content-Type'
:
'application/pdf'
},
});
if
(
!
response
.
ok
)
{
throw
new
Error
(
`HTTP error! status:
${
response
.
status
}
`
);
}
const
blob
=
await
response
.
blob
();
// 创建 Blob URL
const
blobUrl
=
window
.
URL
.
createObjectURL
(
blob
);
// 创建隐藏的下载链接
const
link
=
document
.
createElement
(
'a'
);
link
.
href
=
blobUrl
;
link
.
download
=
`
${
summaryInfo
.
value
.
name
}
.pdf`
;
// 添加到文档中并点击
document
.
body
.
appendChild
(
link
);
link
.
click
();
// 清理
document
.
body
.
removeChild
(
link
);
window
.
URL
.
revokeObjectURL
(
blobUrl
);
}
catch
(
error
)
{
console
.
error
(
'下载失败:'
,
error
);
// 可以在这里提示用户下载失败
alert
(
'PDF 下载失败,请稍后重试'
);
}
}
else
{
ElMessage
.
warning
(
"暂无下载链接!"
);
}
}
}
const
handleFindWord
=
()
=>
{
const
handleFindWord
=
()
=>
{
...
...
vite.config.js
浏览文件 @
42c74a3f
...
@@ -53,7 +53,7 @@ export default defineConfig({
...
@@ -53,7 +53,7 @@ export default defineConfig({
'/api'
:
{
'/api'
:
{
// target: 'http://8.140.26.4:9085/',
// target: 'http://8.140.26.4:9085/',
target
:
'http://192.168.0.
6
:28080/'
,
target
:
'http://192.168.0.
5
:28080/'
,
changeOrigin
:
true
,
changeOrigin
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
},
},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论