Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
b16fe10d
提交
b16fe10d
authored
3月 19, 2026
作者:
张伊明
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'zy-dev' 到 'master'
从 zy-dev 合并到 master 查看合并请求
!187
上级
3dea68fc
3042de15
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
217 行增加
和
304 行删除
+217
-304
App.vue
src/App.vue
+14
-0
home.js
src/api/decree/home.js
+3
-3
decree.js
src/router/modules/decree.js
+1
-1
index.vue
src/views/decree/decreeHome/index.vue
+0
-0
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+2
-1
index.vue
src/views/decree/decreeLayout/index.vue
+32
-86
ChartRelation.vue
src/views/decree/decreeLayout/influence/ChartRelation.vue
+0
-0
AiTips.vue
src/views/decree/decreeLayout/influence/com/AiTips.vue
+62
-0
ChartChain.vue
src/views/decree/decreeLayout/influence/com/ChartChain.vue
+0
-0
index.vue
src/views/decree/decreeLayout/influence/index.vue
+59
-181
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+32
-12
index.vue
...views/decree/decreeLayout/overview/introduction/index.vue
+11
-18
index.vue
src/views/decree/decreeLayout/overview/measures/index.vue
+0
-0
download.png
src/views/decree/decreeOriginal/assets/icons/download.png
+0
-0
search.png
src/views/decree/decreeOriginal/assets/icons/search.png
+0
-0
index.vue
src/views/decree/decreeOriginal/index.vue
+0
-1
vite.config.js
vite.config.js
+1
-1
没有找到文件。
src/App.vue
浏览文件 @
b16fe10d
...
@@ -235,12 +235,26 @@ body {
...
@@ -235,12 +235,26 @@ body {
display
:
none
;
display
:
none
;
}
}
/* #region 公共样式类名 */
/* 单行文本溢出隐藏显示省略号 */
/* 单行文本溢出隐藏显示省略号 */
.one-line-ellipsis
{
.one-line-ellipsis
{
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
/* 多行文本两端对齐 最后一行正常显示 */
.text-align-justify
{
text-align
:
justify
;
text-align-last
:
left
;
-webkit-text-align-last
:
left
;
}
/* 可点击文本 鼠标悬浮样式 */
#app
.text-click-hover
:hover
{
text-decoration
:
underline
;
color
:
rgb
(
5
,
95
,
194
);
cursor
:
pointer
;
}
/* #endregion 公共样式类名 */
</
style
>
</
style
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
src/api/decree/home.js
浏览文件 @
b16fe10d
import
request
from
"@/api/request.js"
;
import
request
from
"@/api/request.js"
;
// 最新科技政令
// 最新科技政令
export
function
getDepartmentList
()
{
export
function
getDepartmentList
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/administrativeDict/department`
,
url
:
`/api/administrativeDict/department`
,
...
@@ -43,10 +43,10 @@ export function getDecreeArea(params) {
...
@@ -43,10 +43,10 @@ export function getDecreeArea(params) {
}
}
// 关键行政令
// 关键行政令
export
function
getKeyDecree
()
{
export
function
getKeyDecree
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/administrativeOrderOverview/action`
,
url
:
`/api/administrativeOrderOverview/action
?pageSize=
${
params
.
pageSize
}
&pageNum=
${
params
.
pageNum
}
`
,
})
})
}
}
...
...
src/router/modules/decree.js
浏览文件 @
b16fe10d
...
@@ -18,7 +18,7 @@ const decreeRoutes = [
...
@@ -18,7 +18,7 @@ const decreeRoutes = [
name
:
"Decree"
,
name
:
"Decree"
,
component
:
Decree
,
component
:
Decree
,
meta
:
{
meta
:
{
title
:
"
政令概览
"
title
:
"
科技政令概况
"
}
}
},
},
{
{
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
b16fe10d
差异被折叠。
点击展开。
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
b16fe10d
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
<div
class=
"box1"
>
<div
class=
"box1"
>
<AnalysisBox
title=
"相关政令"
:showAllBtn=
"false"
>
<AnalysisBox
title=
"相关政令"
:showAllBtn=
"false"
>
<div
class=
"box1-main"
>
<div
class=
"box1-main"
>
<el-empty
v-if=
"
siderList.length===0"
style=
"padding-top: 30%
"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"
!siderList?.length"
style=
"padding-top: 40%;
"
description=
"暂无数据"
:image-size=
"100"
/>
<el-scrollbar
height=
"100%"
always
>
<el-scrollbar
height=
"100%"
always
>
<div
class=
"left-item"
:class=
"
{ 'item-active': false }" v-for="(item, index) in siderList" :key="index" @click="handleClickDecree(item)">
<div
class=
"left-item"
:class=
"
{ 'item-active': false }" v-for="(item, index) in siderList" :key="index" @click="handleClickDecree(item)">
<div
class=
"item-head"
>
<div
class=
"item-head"
>
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
</div>
</div>
<div
class=
"box2"
>
<div
class=
"box2"
>
<AnalysisBox
title=
"政令关系挖掘"
:showAllBtn=
"false"
>
<AnalysisBox
title=
"政令关系挖掘"
:showAllBtn=
"false"
>
<el-empty
v-if=
"!siderList?.length"
style=
"padding-top: 20%;"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<div
ref=
"containerRef"
class=
"graph-container"
></div>
<div
ref=
"containerRef"
class=
"graph-container"
></div>
</div>
</div>
...
...
src/views/decree/decreeLayout/index.vue
浏览文件 @
b16fe10d
...
@@ -8,22 +8,16 @@
...
@@ -8,22 +8,16 @@
<div
class=
"layout-main-header-left-box"
>
<div
class=
"layout-main-header-left-box"
>
<div
class=
"left-box-top"
>
<div
class=
"left-box-top"
>
<div
class=
"icon"
>
<div
class=
"icon"
>
<img
<img
:src=
"summaryInfo.imageUrl || USALogo"
alt=
""
/>
v-if=
"summaryInfo.imageUrl"
:src=
"summaryInfo.imageUrl"
alt=
""
style=
"height: 40px; margin-top: 12px"
/>
<img
v-else
:src=
"USALogo"
alt=
""
/>
</div>
</div>
<div
class=
"info"
>
<div
class=
"info"
>
<div
class=
"info-box1
"
>
{{
summaryInfo
.
name
}}
</div>
<div
class=
"info-box1
one-line-ellipsis"
>
{{
summaryInfo
.
name
||
"--"
}}
</div>
<div
class=
"info-box2"
>
<div
class=
"info-box2"
>
<div
class=
"info-box2-item
item1"
>
{{
summaryInfo
.
postDate
}}
</div>
<div
class=
"info-box2-item
"
>
{{
summaryInfo
.
postDate
||
"--"
}}
</div>
|
|
<div
class=
"info-box2-item
item2"
>
{{
summaryInfo
.
orgName
}}
</div>
<div
class=
"info-box2-item
"
>
{{
summaryInfo
.
orgName
||
"--"
}}
</div>
|
|
<div
class=
"info-box2-item
item3"
>
{{
summaryInfo
.
ename
}}
</div>
<div
class=
"info-box2-item
one-line-ellipsis"
>
{{
summaryInfo
.
ename
||
"--"
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -47,8 +41,8 @@
...
@@ -47,8 +41,8 @@
</div>
</div>
<div
class=
"layout-main-header-right-box"
>
<div
class=
"layout-main-header-right-box"
>
<div
class=
"right-box-top"
>
<div
class=
"right-box-top"
>
<div
class=
"time"
>
{{
summaryInfo
.
postDate
}}
</div>
<div
class=
"time"
>
{{
summaryInfo
.
postDate
||
"--"
}}
</div>
<div
class=
"name"
>
{{
summaryInfo
.
orgName
}}
</div>
<div
class=
"name"
>
{{
summaryInfo
.
orgName
||
"--"
}}
</div>
</div>
</div>
<div
class=
"right-box-bottom"
>
<div
class=
"right-box-bottom"
>
<div
class=
"btn"
@
click=
"handleShowReport"
>
<div
class=
"btn"
@
click=
"handleShowReport"
>
...
@@ -203,12 +197,12 @@ const mainHeaderBtnList = ref([
...
@@ -203,12 +197,12 @@ const mainHeaderBtnList = ref([
name
:
"深度挖掘"
,
name
:
"深度挖掘"
,
path
:
"/decreeLayout/deepDig"
path
:
"/decreeLayout/deepDig"
},
},
//
{
{
//
icon: icon3,
icon
:
icon3
,
//
activeIcon: icon3Active,
activeIcon
:
icon3Active
,
//
name: "影响分析",
name
:
"影响分析"
,
//
path: "/decreeLayout/influence"
path
:
"/decreeLayout/influence"
//
},
},
]);
]);
const
activeTitle
=
ref
(
"政令概况"
);
const
activeTitle
=
ref
(
"政令概况"
);
...
@@ -377,9 +371,9 @@ onMounted(() => {
...
@@ -377,9 +371,9 @@ onMounted(() => {
flex-direction
:
column
;
flex-direction
:
column
;
.header-main
{
.header-main
{
width
:
100%
;
width
:
100%
;
b
ackground-color
:
#fff
;
b
order-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
)
;
box-shadow
:
0px
4px
10px
0px
rgba
(
0
,
0
,
0
,
0
.05
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
overflow
:
hidden
;
background
:
rgba
(
255
,
255
,
255
,
1
)
;
}
}
.layout-main-header
{
.layout-main-header
{
width
:
1600px
;
width
:
1600px
;
...
@@ -396,30 +390,32 @@ onMounted(() => {
...
@@ -396,30 +390,32 @@ onMounted(() => {
margin
:
0
auto
;
margin
:
0
auto
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
align-items
:
center
;
}
}
.layout-main-header-left-box
{
.layout-main-header-left-box
{
width
:
1100px
;
width
:
20px
;
margin-top
:
13px
;
flex
:
auto
;
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
:
64px
;
height
:
40px
;
border-radius
:
4px
;
overflow
:
hidden
;
overflow
:
hidden
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
object-fit
:
fill
;
}
}
}
}
.info
{
.info
{
width
:
700px
;
margin-left
:
10px
;
margin-left
:
9px
;
margin-right
:
40px
;
width
:
20px
;
flex
:
auto
;
.info-box1
{
.info-box1
{
width
:
700px
;
width
:
100%
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-size
:
20px
;
...
@@ -428,9 +424,6 @@ onMounted(() => {
...
@@ -428,9 +424,6 @@ onMounted(() => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
margin-top
:
5px
;
margin-top
:
5px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
}
.info-box2
{
.info-box2
{
margin-top
:
5px
;
margin-top
:
5px
;
...
@@ -444,15 +437,13 @@ onMounted(() => {
...
@@ -444,15 +437,13 @@ onMounted(() => {
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
display
:
flex
;
display
:
flex
;
margin-left
:
-10px
;
.info-box2-item
{
.info-box2-item
{
white-space
:
nowrap
;
padding
:
0
10px
;
padding
:
0
10px
;
}
}
.item3
{
.info-box2-item
:first-child
{
max-width
:
420px
;
padding-left
:
0px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
}
}
}
}
}
...
@@ -498,9 +489,9 @@ onMounted(() => {
...
@@ -498,9 +489,9 @@ onMounted(() => {
}
}
}
}
.layout-main-header-right-box
{
.layout-main-header-right-box
{
width
:
450px
;
margin-top
:
19px
;
.right-box-top
{
.right-box-top
{
white-space
:
nowrap
;
padding-top
:
11px
;
.time
{
.time
{
height
:
24px
;
height
:
24px
;
line-height
:
24px
;
line-height
:
24px
;
...
@@ -710,49 +701,5 @@ onMounted(() => {
...
@@ -710,49 +701,5 @@ onMounted(() => {
}
}
}
}
}
}
// .tool-box {
// position: fixed;
// z-index: 10000;
// bottom: 80px;
// left: 0;
// width: 48px;
// height: 144px;
// border-radius: 0px 10px 10px 0px;
// box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
// background: rgba(255, 255, 255, 1);
// .tool1 {
// width: 17px;
// height: 18px;
// margin-top: 17px;
// margin-left: 16px;
// cursor: pointer;
// img {
// width: 100%;
// height: 100%;
// }
// }
// .tool2 {
// width: 22px;
// height: 20px;
// margin-top: 26px;
// margin-left: 14px;
// cursor: pointer;
// img {
// width: 100%;
// height: 100%;
// }
// }
// .tool3 {
// width: 20px;
// height: 20px;
// margin-top: 25px;
// margin-left: 15px;
// cursor: pointer;
// img {
// width: 100%;
// height: 100%;
// }
// }
// }
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/decree/decreeLayout/influence/ChartRelation.vue
deleted
100644 → 0
浏览文件 @
3dea68fc
差异被折叠。
点击展开。
src/views/decree/decreeLayout/influence/com/AiTips.vue
0 → 100644
浏览文件 @
b16fe10d
<
template
>
<div
class=
"view-box"
>
<div
class=
"icon-left"
>
<img
src=
"../../assets/icons/ai.png"
alt=
""
>
</div>
<div
class=
"tips-content"
>
{{
props
.
tips
}}
</div>
<div
class=
"icon-right"
>
<img
src=
"../../assets/icons/right.png"
alt=
""
>
</div>
</div>
</
template
>
<
script
setup
lang=
"ts"
name=
"AiTips"
>
const
props
=
defineProps
({
tips
:
{
type
:
String
,
default
:
''
}
});
</
script
>
<
style
scoped
lang=
"scss"
>
.view-box
{
width
:
100%
;
display
:
flex
;
align-items
:
center
;
padding
:
7px
12px
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
border-radius
:
4px
;
background
:
rgba
(
246
,
250
,
255
,
1
);
.icon-left
{
width
:
20px
;
height
:
20px
;
img
{
width
:
100%
;
height
:
100%
;
object-fit
:
contain
;
}
}
.tips-content
{
color
:
rgb
(
5
,
95
,
194
);
font-size
:
16px
;
font-weight
:
400
;
line-height
:
24px
;
margin-left
:
13px
;
flex
:
1
;
}
.icon-right
{
width
:
24px
;
height
:
24px
;
img
{
width
:
100%
;
height
:
100%
;
object-fit
:
contain
;
}
}
}
</
style
>
\ No newline at end of file
src/views/decree/decreeLayout/influence/ChartChain.vue
→
src/views/decree/decreeLayout/influence/
com/
ChartChain.vue
浏览文件 @
b16fe10d
差异被折叠。
点击展开。
src/views/decree/decreeLayout/influence/index.vue
浏览文件 @
b16fe10d
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
</div>
</div>
<div
class=
"data-title"
>
实体名称
</div>
<div
class=
"data-title"
>
实体名称
</div>
<div
style=
"height: 20px; flex: auto;"
>
<div
style=
"height: 20px; flex: auto;"
>
<el-empty
v-if=
"
showCompanyList.length === 0"
style=
"padding-top: 30%
"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"
!showCompanyList?.length"
style=
"padding-top: 35%;
"
description=
"暂无数据"
:image-size=
"100"
/>
<el-scrollbar
height=
"100%"
always
>
<el-scrollbar
height=
"100%"
always
>
<div
class=
"list-data"
>
<div
class=
"list-data"
>
<div
class=
"list-item"
v-for=
"item in showCompanyList"
:key=
"item.id"
:class=
"
{ 'item-active': activeEntityId === item.id }" @click="handleToCompanyDetail(item)">
<div
class=
"list-item"
v-for=
"item in showCompanyList"
:key=
"item.id"
:class=
"
{ 'item-active': activeEntityId === item.id }" @click="handleToCompanyDetail(item)">
...
@@ -75,18 +75,14 @@
...
@@ -75,18 +75,14 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/template
>
<
/template
>
<
div
class
=
"box2-main"
v
-
if
=
"contentType==1"
>
<
div
class
=
"box2-main"
>
<
ChartChain
/>
<
AiTips
:
tips
=
"tips"
/>
<
/div
>
<
div
class
=
"graph-box"
v
-
if
=
"contentType==1"
>
<
div
class
=
"box2-main"
v
-
if
=
"contentType==2"
>
<
ChartChain
/>
<!--
<
ChartRelation
<
/div
>
:
graph
-
data
=
"graphData"
<
div
class
=
"graph-box"
v
-
if
=
"contentType==2"
>
:
tree
-
data
=
"treeData"
<
GraphChart
:
nodes
=
"testData.nodes"
:
links
=
"testData.links"
layoutType
=
"force"
/>
:
control
-
active
=
"1"
<
/div
>
@
node
-
click
=
"handleNodeClick"
@
layout
-
change
=
"handleLayoutChange"
/>
-->
<
GraphChart
:
nodes
=
"testData.nodes"
:
links
=
"testData.links"
layoutType
=
"force"
/>
<
/div
>
<
/div
>
<
/AnalysisBox
>
<
/AnalysisBox
>
<
/div
>
<
/div
>
...
@@ -101,9 +97,9 @@ import getBarChart from "./utils/barChart";
...
@@ -101,9 +97,9 @@ import getBarChart from "./utils/barChart";
import
{
getDecreeIndustry
,
getDecreehylyList
,
getDecreeCompany
}
from
"@/api/decree/influence"
;
import
{
getDecreeIndustry
,
getDecreehylyList
,
getDecreeCompany
}
from
"@/api/decree/influence"
;
import
{
getCnEntityOnChain
,
getChainInfoByDomainId
}
from
"@/api/exportControl"
;
import
{
getCnEntityOnChain
,
getChainInfoByDomainId
}
from
"@/api/exportControl"
;
import
{
getSingleSanctionEntitySupplyChain
}
from
"@/api/exportControlV2.0"
;
import
{
getSingleSanctionEntitySupplyChain
}
from
"@/api/exportControlV2.0"
;
import
ChartChain
from
"./ChartChain.vue"
;
import
ChartChain
from
"./com/ChartChain.vue"
;
import
AiTips
from
"./com/AiTips.vue"
;
import
GraphChart
from
"@/components/base/GraphChart/index.vue"
;
import
GraphChart
from
"@/components/base/GraphChart/index.vue"
;
import
ChartRelation
from
"./ChartRelation.vue"
;
import
defaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
defaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
noticeIcon
from
"./assets/images/notice-icon.png"
;
import
noticeIcon
from
"./assets/images/notice-icon.png"
;
import
icon422
from
"./assets/images/icon422.png"
;
import
icon422
from
"./assets/images/icon422.png"
;
...
@@ -113,191 +109,65 @@ import icon1621 from "./assets/images/icon1621.png";
...
@@ -113,191 +109,65 @@ import icon1621 from "./assets/images/icon1621.png";
import
company
from
"./assets/images/company.png"
;
import
company
from
"./assets/images/company.png"
;
import
companyActive
from
"./assets/images/company-active.png"
;
import
companyActive
from
"./assets/images/company-active.png"
;
const
tips
=
"这项政令标志着中美AI竞争进入一个新阶段,其核心特征是 “精准封锁”与“体系输出”相结合。它短期内无疑会给中国AI产业链带来压力,但长期看,这场竞争更可能是一场围绕技术路线、生态系统和治理规则的持久战。"
// 关系图数据
// 关系图数据
const
testData
=
{
const
testData
=
{
// 节点数据
// 节点数据
nodes
:
[
nodes
:
[
{
{
id
:
0
,
name
:
"泰丰先行"
,
symbolSize
:
60
,
symbol
:
`image://${company
}
`
,
x
:
0
,
y
:
0
}
,
id
:
0
,
{
id
:
1
,
name
:
"国轩高科"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
name
:
"泰丰先行"
,
{
id
:
2
,
name
:
"智方纳米"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
// category: 0,
{
id
:
3
,
name
:
"香百科技"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
symbolSize
:
30
,
{
id
:
4
,
name
:
"格林滨"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
value
:
8
,
{
id
:
5
,
name
:
"江西紫宸"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
symbol
:
`image://${company
}
`
,
{
id
:
6
,
name
:
"紫江企业"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
x
:
50
,
{
id
:
7
,
name
:
"大而美法案"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
y
:
10
{
id
:
8
,
name
:
"比亚迪"
,
symbolSize
:
40
,
symbol
:
`image://${company
}
`
}
,
}
,
],
{
id
:
1
,
// 关系数据
name
:
"国轩高科"
,
links
:
[
// category: 0,
symbolSize
:
30
,
value
:
9
,
symbol
:
`image://${company
}
`
,
x
:
150
,
y
:
10
}
,
{
id
:
2
,
name
:
"智方纳米"
,
// category: 2,
symbolSize
:
30
,
value
:
7
,
symbol
:
`image://${company
}
`
,
x
:
250
,
y
:
10
}
,
{
id
:
3
,
name
:
"香百科技"
,
// category: 1,
symbolSize
:
30
,
value
:
6
,
symbol
:
`image://${company
}
`
,
x
:
350
,
y
:
10
}
,
{
id
:
4
,
name
:
"格林滨"
,
// category: 2,
symbolSize
:
30
,
value
:
6
,
symbol
:
`image://${company
}
`
,
x
:
450
,
y
:
10
}
,
{
id
:
5
,
name
:
"江西紫宸"
,
// category: 2,
symbolSize
:
30
,
value
:
7
,
symbol
:
`image://${company
}
`
,
x
:
550
,
y
:
10
}
,
{
id
:
6
,
name
:
"紫江企业"
,
// category: 4,
symbolSize
:
30
,
value
:
6
,
symbol
:
`image://${company
}
`
,
x
:
650
,
y
:
10
}
,
{
id
:
7
,
name
:
"大而美法案"
,
// category: 4,
symbolSize
:
50
,
value
:
5
,
symbol
:
`image://${company
}
`
,
x
:
300
,
y
:
200
}
,
{
{
id
:
8
,
source
:
1
,
target
:
0
,
name
:
"比亚迪"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'持股'
}
,
// category: 0,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
10
,
symbol
:
`image://${company
}
`
,
x
:
50
,
y
:
400
}
,
}
,
{
{
id
:
9
,
source
:
2
,
target
:
0
,
name
:
"铜陵有色"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'持股'
}
,
// category: 3,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
8
,
symbol
:
`image://${company
}
`
,
x
:
150
,
y
:
400
}
,
}
,
{
{
id
:
10
,
source
:
3
,
target
:
0
,
name
:
"长盛精密"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'合作'
}
,
// category: 1,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
7
,
symbol
:
`image://${company
}
`
,
x
:
250
,
y
:
400
}
,
}
,
{
{
id
:
11
,
source
:
4
,
target
:
0
,
name
:
"天合光能"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'从属'
}
,
// category: 0,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
8
,
symbol
:
`image://${company
}
`
,
x
:
350
,
y
:
400
}
,
}
,
{
{
id
:
12
,
source
:
5
,
target
:
0
,
name
:
"昆仑化学"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'合作'
}
,
// category: 2,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
6
,
symbol
:
`image://${company
}
`
,
x
:
250
,
y
:
400
}
,
}
,
{
{
id
:
13
,
source
:
6
,
target
:
0
,
name
:
"嘉源科技"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'持股'
}
,
// category: 1,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
6
,
symbol
:
`image://${company
}
`
,
x
:
450
,
y
:
400
}
,
}
,
{
{
id
:
14
,
source
:
7
,
target
:
0
,
name
:
"华阳集团"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'合作'
}
,
// category: 4,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
7
,
symbol
:
`image://${company
}
`
,
x
:
550
,
y
:
400
}
,
}
,
{
{
id
:
15
,
source
:
8
,
target
:
0
,
name
:
"海辰智能"
,
label
:
{
show
:
true
,
color
:
"#055FC2"
,
backgroundColor
:
"#E7F3FF"
,
borderWidth
:
0
,
offset
:
[
0
,
15
],
formatter
:
'合作'
}
,
// category: 1,
lineStyle
:
{
color
:
'#B9DCFF'
,
type
:
"solid"
}
symbolSize
:
30
,
value
:
7
,
symbol
:
`image://${company
}
`
,
x
:
650
,
y
:
400
}
,
}
,
],
],
// 关系数据
links
:
[
{
source
:
1
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
2
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'持股'
}
}
,
{
source
:
3
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
4
,
target
:
7
,
lineStyle
:
{
type
:
'dashed'
,
color
:
'#d32f2f'
}
,
label
:
{
show
:
true
,
formatter
:
'从属'
}
}
,
{
source
:
5
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
6
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'持股'
}
}
,
{
source
:
0
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'持股'
}
}
,
{
source
:
8
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
9
,
target
:
7
,
lineStyle
:
{
type
:
'dashed'
,
color
:
'#d32f2f'
}
,
label
:
{
show
:
true
,
formatter
:
'从属'
}
}
,
{
source
:
10
,
target
:
7
,
lineStyle
:
{
type
:
'dashed'
,
color
:
'#d32f2f'
}
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
11
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
12
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
13
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
14
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
}
}
,
{
source
:
15
,
target
:
7
,
label
:
{
show
:
true
,
formatter
:
'合作'
,
color
:
'red'
,
borderColor
:
'red'
}
}
,
],
}
;
}
;
// 受影响实体
// 受影响实体
...
@@ -374,7 +244,7 @@ const handleGetHylyList = async () => {
...
@@ -374,7 +244,7 @@ const handleGetHylyList = async () => {
}
;
}
;
// 产业链/实体关系
// 产业链/实体关系
const
contentType
=
ref
(
2
);
const
contentType
=
ref
(
1
);
const
headerContentType
=
(
type
)
=>
{
const
headerContentType
=
(
type
)
=>
{
contentType
.
value
=
type
;
contentType
.
value
=
type
;
}
;
}
;
...
@@ -693,7 +563,7 @@ onMounted(() => {
...
@@ -693,7 +563,7 @@ onMounted(() => {
align
-
items
:
flex
-
end
;
align
-
items
:
flex
-
end
;
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
padding
:
0
16
px
;
padding
:
0
20
px
;
.
title
-
left
{
.
title
-
left
{
display
:
flex
;
display
:
flex
;
border
:
1
px
solid
rgb
(
5
,
95
,
194
);
border
:
1
px
solid
rgb
(
5
,
95
,
194
);
...
@@ -734,6 +604,14 @@ onMounted(() => {
...
@@ -734,6 +604,14 @@ onMounted(() => {
.
box2
-
main
{
.
box2
-
main
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
display
:
flex
;
flex
-
direction
:
column
;
padding
:
16
px
20
px
;
.
graph
-
box
{
height
:
20
px
;
flex
:
auto
;
margin
-
top
:
16
px
;
}
}
}
}
}
}
}
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
b16fe10d
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
<div
class=
"box1-main"
>
<div
class=
"box1-main"
>
<div
class=
"box1-item"
v-for=
"(item, index) in backgroundList"
:key=
"index"
>
<div
class=
"box1-item"
v-for=
"(item, index) in backgroundList"
:key=
"index"
>
<div
class=
"id"
>
{{ index + 1 }}
</div>
<div
class=
"id"
>
{{ index + 1 }}
</div>
<div
class=
"title"
>
{{ item.content }}
</div>
<div
class=
"title
text-align-justify
"
>
{{ item.content }}
</div>
<div
class=
"open"
>
<div
class=
"open"
>
<img
src=
"./assets/images/open-icon.png"
alt=
""
/>
<img
src=
"./assets/images/open-icon.png"
alt=
""
/>
</div>
</div>
...
@@ -37,14 +37,17 @@
...
@@ -37,14 +37,17 @@
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<div
class=
"custom-collapse"
>
<div
class=
"custom-collapse"
>
<el-collapse
v-model=
"dependActive"
>
<el-collapse
v-model=
"dependActive"
>
<el-collapse-item
v-for=
"(item, index) in dependList"
:key=
"item.billId"
title=
"Consistency"
:name=
"item.billId"
>
<el-collapse-item
v-for=
"(item, index) in dependList"
:key=
"item.billId"
:name=
"item.billId"
>
<
template
#
icon
>
<
template
#
icon
>
<el-icon><ArrowDownBold
/></el-icon>
<el-icon
v-if=
"dependActive.includes(item.billId)"
><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"
>
<div
class=
"custom-collapse-index"
>
{{
index
+
1
}}
</div>
<div
class=
"custom-collapse-index"
>
{{
index
+
1
}}
</div>
<div
class=
"custom-collapse-name one-line-ellipsis"
>
{{
item
.
title
}}
</div>
<div
class=
"custom-collapse-name one-line-ellipsis"
>
<span
class=
"text-click-hover"
@
click
.
stop=
"handleClickDecree(item)"
>
{{
item
.
title
}}
</span>
</div>
</div>
</div>
</
template
>
</
template
>
<div
class=
"custom-collapse-content"
>
<div
class=
"custom-collapse-content"
>
...
@@ -192,6 +195,20 @@ const handleGetLaws = async () => {
...
@@ -192,6 +195,20 @@ const handleGetLaws = async () => {
console
.
error
(
"获取法律依据数据失败"
,
error
);
console
.
error
(
"获取法律依据数据失败"
,
error
);
}
}
};
};
// 跳转科技法案详情页
const
handleClickDecree
=
decree
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
decree
.
billId
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
decree
.
title
);
const
route
=
router
.
resolve
({
path
:
"/billLayout"
,
query
:
{
billId
:
decree
.
billId
}
});
console
.
log
(
route
);
window
.
open
(
route
.
href
,
"_blank"
);
};
onMounted
(()
=>
{
onMounted
(()
=>
{
handleGetBackground
();
handleGetBackground
();
...
@@ -261,29 +278,31 @@ onMounted(() => {
...
@@ -261,29 +278,31 @@ onMounted(() => {
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
padding
:
1
2
px
0
;
padding
:
1
8
px
0
;
.id
{
.id
{
margin-right
:
16px
;
margin-left
:
15px
;
margin-left
:
15px
;
width
:
24px
;
width
:
24px
;
height
:
24px
;
height
:
24px
;
text-align
:
center
;
text-align
:
center
;
line-height
:
30px
;
border-radius
:
12px
;
background
:
#e7f3ff
;
background
:
#e7f3ff
;
color
:
#0a57a6
;
color
:
#0a57a6
;
font-size
:
15px
;
line-height
:
24px
;
border-radius
:
50%
;
}
}
.title
{
.title
{
width
:
914
px
;
width
:
20
px
;
line-height
:
24px
;
flex
:
auto
;
margin-left
:
13
px
;
line-height
:
30
px
;
}
}
.open
{
.open
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
margin
-left
:
16px
;
margin
:
0
16px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
...
@@ -332,7 +351,8 @@ onMounted(() => {
...
@@ -332,7 +351,8 @@ onMounted(() => {
.custom-collapse-title
{
.custom-collapse-title
{
position
:
relative
;
position
:
relative
;
.custom-collapse-index
{
.custom-collapse-index
{
font-size
:
15px
;
font-family
:
Microsoft
YaHei
;
font-size
:
var
(
--
font-size-base
);
position
:
absolute
;
position
:
absolute
;
top
:
12px
;
top
:
12px
;
left
:
-32px
;
left
:
-32px
;
...
...
src/views/decree/decreeLayout/overview/introduction/index.vue
浏览文件 @
b16fe10d
...
@@ -37,9 +37,6 @@
...
@@ -37,9 +37,6 @@
<div
class=
"item"
>
<div
class=
"item"
>
<div
class=
"item-left"
>
{{ "相关领域:" }}
</div>
<div
class=
"item-left"
>
{{ "相关领域:" }}
</div>
<div
class=
"item-right tag-box"
>
<div
class=
"item-right tag-box"
>
<!-- <div class="tag" v-for="(area, index) in basicInfo.areaList" :key="index">
{{ area.industryName }}
</div> -->
<AreaTag
v-for=
"(area, index) in basicInfo.areaList"
:key=
"index"
:tagName=
"area.industryName"
></AreaTag>
<AreaTag
v-for=
"(area, index) in basicInfo.areaList"
:key=
"index"
:tagName=
"area.industryName"
></AreaTag>
</div>
</div>
</div>
</div>
...
@@ -120,7 +117,7 @@
...
@@ -120,7 +117,7 @@
<img
:src=
"item.avatar ? item.avatar : DefaultIcon1"
alt=
""
/>
<img
:src=
"item.avatar ? item.avatar : DefaultIcon1"
alt=
""
/>
</div>
</div>
<div
class=
"box3-top-bottom-item-right"
>
<div
class=
"box3-top-bottom-item-right"
>
<div
class=
"name"
@
click=
"handleClickUser(item)"
>
{{ item.name }}
</div>
<div
class=
"name
text-click-hover one-line-ellipsis
"
@
click=
"handleClickUser(item)"
>
{{ item.name }}
</div>
<div
class=
"position"
>
{{ item.job }}
</div>
<div
class=
"position"
>
{{ item.job }}
</div>
</div>
</div>
</div>
</div>
...
@@ -336,22 +333,20 @@ onMounted(() => {
...
@@ -336,22 +333,20 @@ onMounted(() => {
.box1-main
{
.box1-main
{
display
:
flex
;
display
:
flex
;
padding
:
0
24px
;
.box1-main-left
{
.box1-main-left
{
width
:
395px
;
width
:
395px
;
height
:
332px
;
height
:
332px
;
margin-left
:
24px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
// height: 100%;
}
}
}
}
.box1-main-left-img-mock
{
.box1-main-left-img-mock
{
width
:
240px
;
width
:
240px
;
height
:
332px
;
height
:
332px
;
margin-left
:
24px
;
background-color
:
#0b1932
;
background-color
:
#0b1932
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
...
@@ -378,7 +373,8 @@ onMounted(() => {
...
@@ -378,7 +373,8 @@ onMounted(() => {
}
}
.box1-main-right
{
.box1-main-right
{
width
:
590px
;
width
:
20px
;
flex
:
auto
;
margin-left
:
20px
;
margin-left
:
20px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
...
@@ -387,24 +383,22 @@ onMounted(() => {
...
@@ -387,24 +383,22 @@ onMounted(() => {
line-height
:
24px
;
line-height
:
24px
;
.item
{
.item
{
height
:
30px
;
display
:
flex
;
display
:
flex
;
margin-bottom
:
17
px
;
margin-bottom
:
22
px
;
.item-left
{
.item-left
{
width
:
100px
;
width
:
100px
;
}
}
.item-right
{
.item-right
{
width
:
470px
;
width
:
20px
;
overflow
:
hidden
;
flex
:
auto
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
}
.tag-box
{
.tag-box
{
display
:
flex
;
display
:
flex
;
gap
:
8px
;
gap
:
8px
;
flex-wrap
:
wrap
;
.tag
{
.tag
{
height
:
24px
;
height
:
24px
;
...
@@ -423,6 +417,9 @@ onMounted(() => {
...
@@ -423,6 +417,9 @@ onMounted(() => {
}
}
.text
{
.text
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
font-weight
:
normal
!
important
;
font-weight
:
normal
!
important
;
}
}
}
}
...
@@ -697,10 +694,6 @@ onMounted(() => {
...
@@ -697,10 +694,6 @@ onMounted(() => {
line-height
:
24px
;
line-height
:
24px
;
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
cursor
:
pointer
;
}
}
.position
{
.position
{
...
...
src/views/decree/decreeLayout/overview/measures/index.vue
浏览文件 @
b16fe10d
差异被折叠。
点击展开。
src/views/decree/decreeOriginal/assets/icons/download.png
deleted
100644 → 0
浏览文件 @
3dea68fc
350 Bytes
src/views/decree/decreeOriginal/assets/icons/search.png
deleted
100644 → 0
浏览文件 @
3dea68fc
399 Bytes
src/views/decree/decreeOriginal/index.vue
浏览文件 @
b16fe10d
...
@@ -135,7 +135,6 @@ onMounted(() => {
...
@@ -135,7 +135,6 @@ onMounted(() => {
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
align-items
:
center
;
align-items
:
center
;
.header-main
{
.header-main
{
padding
:
17px
0
;
padding
:
17px
0
;
width
:
100%
;
width
:
100%
;
...
...
vite.config.js
浏览文件 @
b16fe10d
...
@@ -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.
5
:28080/',
// target: 'http://192.168.0.
6
:28080/',
changeOrigin
:
true
,
changeOrigin
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
},
},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论