Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
72613fb4
提交
72613fb4
authored
4月 23, 2026
作者:
张伊明
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'zy-dev' 到 'pre'
Zy dev 查看合并请求
!388
上级
f0e97fcd
7f1372db
流水线
#640
已通过 于阶段
变更
42
流水线
2
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
42 个修改的文件
包含
552 行增加
和
478 行删除
+552
-478
index.js
src/api/marketAccessRestrictions/index.js
+9
-0
newOriginal.vue
src/components/base/DecreeOriginal/newOriginal.vue
+2
-1
decree.js
src/router/modules/decree.js
+1
-1
index.vue
src/views/decree/allOrganization/index.vue
+26
-24
icon_1596.png
src/views/decree/decreeHome/assets/images/icon_1596.png
+0
-0
index.vue
src/views/decree/decreeHome/index.vue
+0
-0
barChart.js
src/views/decree/decreeHome/utils/barChart.js
+50
-32
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+2
-2
index.vue
src/views/decree/decreeLayout/index.vue
+7
-70
ChartChain.vue
src/views/decree/decreeLayout/influence/com/ChartChain.vue
+21
-11
index.vue
src/views/decree/decreeLayout/influence/index.vue
+66
-23
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+0
-0
index.vue
src/views/decree/decreeLayout/overview/index.vue
+0
-1
index.vue
...views/decree/decreeLayout/overview/introduction/index.vue
+30
-10
index.vue
src/views/decree/decreeLayout/overview/measures/index.vue
+0
-0
RelatedEvent.vue
src/views/marketAccessRestrictions/com/RelatedEvent.vue
+1
-1
SurveyHistory.vue
src/views/marketAccessRestrictions/com/SurveyHistory.vue
+1
-1
icon2.svg
...ccessRestrictions/marketAccessHome/assets/icons/icon2.svg
+2
-2
icon3.svg
...ccessRestrictions/marketAccessHome/assets/icons/icon3.svg
+7
-3
icon4.svg
...ccessRestrictions/marketAccessHome/assets/icons/icon4.svg
+2
-2
icon5.svg
...ccessRestrictions/marketAccessHome/assets/icons/icon5.svg
+3
-5
AiReport.vue
...arketAccessRestrictions/marketAccessHome/com/AiReport.vue
+116
-0
index.vue
...views/marketAccessRestrictions/marketAccessHome/index.vue
+0
-0
barChart1.js
...ketAccessRestrictions/marketAccessHome/utils/barChart1.js
+2
-7
radarChart.js
...etAccessRestrictions/marketAccessHome/utils/radarChart.js
+1
-12
index.vue
...tAccessRestrictions/marketAccessLayout/case/232/index.vue
+42
-25
index.vue
...tAccessRestrictions/marketAccessLayout/case/301/index.vue
+47
-27
index.vue
...tAccessRestrictions/marketAccessLayout/case/337/index.vue
+43
-24
index.vue
...ews/marketAccessRestrictions/marketAccessLayout/index.vue
+3
-7
index.vue
...essRestrictions/marketAccessLayout/overview/232/index.vue
+18
-58
index.vue
...essRestrictions/marketAccessLayout/overview/301/index.vue
+19
-59
index.vue
...essRestrictions/marketAccessLayout/overview/337/index.vue
+19
-59
reportOriginal.vue
src/views/marketAccessRestrictions/pages/reportOriginal.vue
+11
-10
index.vue
...AccessRestrictions/singleCaseLayout/deepdig/232/index.vue
+1
-1
index.vue
...AccessRestrictions/singleCaseLayout/deepdig/337/index.vue
+0
-0
index.vue
...views/marketAccessRestrictions/singleCaseLayout/index.vue
+0
-0
index.vue
...ccessRestrictions/singleCaseLayout/overview/232/index.vue
+0
-0
index.vue
...ccessRestrictions/singleCaseLayout/overview/301/index.vue
+0
-0
index.vue
...ccessRestrictions/singleCaseLayout/overview/337/index.vue
+0
-0
baseLineChart.js
src/views/marketAccessRestrictions/utils/baseLineChart.js
+0
-0
basePiechart.js
src/views/marketAccessRestrictions/utils/basePiechart.js
+0
-0
index.ts
src/views/marketAccessRestrictions/utils/index.ts
+0
-0
没有找到文件。
src/api/marketAccessRestrictions/index.js
浏览文件 @
72613fb4
...
...
@@ -305,4 +305,12 @@ export function getNetProfit(params) {
url
:
`/api/organization/scale/netProfit`
,
params
})
}
// 获取调查进展状态列表
export
function
getAllProgressStatus
()
{
return
request
({
method
:
'GET'
,
url
:
`/api/marketsearchHome/getAllInvestProgressStatus`
,
})
}
\ No newline at end of file
src/components/base/DecreeOriginal/newOriginal.vue
浏览文件 @
72613fb4
...
...
@@ -265,12 +265,13 @@ const onHighlightedText = (text, nounList) => {
const
key
=
`
${
searchInterval
.
start
}
-
${
searchInterval
.
end
}
`
;
if
(
end
===
searchInterval
.
end
&&
!
pointAdded
.
has
(
key
))
{
findWordMax
.
value
++
;
list
.
push
({
point
:
tr
ue
,
class
:
""
});
list
.
push
({
point
:
findWordMax
.
val
ue
,
class
:
""
});
pointAdded
.
add
(
key
);
break
;
}
}
}
console
.
log
(
'看看格式'
,
list
);
return
list
;
};
...
...
src/router/modules/decree.js
浏览文件 @
72613fb4
...
...
@@ -19,7 +19,7 @@ const decreeRoutes = [
name
:
"Decree"
,
component
:
Decree
,
meta
:
{
title
:
"科技政令概
况
"
,
title
:
"科技政令概
览
"
,
isShowHeader
:
true
}
},
...
...
src/views/decree/allOrganization/index.vue
浏览文件 @
72613fb4
...
...
@@ -6,19 +6,19 @@
<div
class=
"hard-num text-title-2-show"
>
{{
organizationInfo
.
total
}}
家
</div>
<div
style=
"width: 0px; flex: auto;"
></div>
<div
class=
"hard-input"
>
<el-input
v-model=
"organizationInfo.keyWord"
@
keyup
.
enter=
"onAllOrganization()"
style=
"width:100%; height:100%;"
:
suffix-icon=
"Search"
placeholder=
"搜索机构"
/>
<el-input
v-model=
"organizationInfo.keyWord"
@
keyup
.
enter=
"onAllOrganization()"
@
clear=
"onAllOrganization()"
style=
"width:100%; height:100%;"
:
prefix-icon=
"Search"
placeholder=
"搜索机构"
clearable
/>
</div>
<div
class=
"hard-time"
>
<el-select
v-model=
"organizationInfo.isSort"
@
change=
"onAllOrganization()"
placeholder=
"发布时间"
style=
"width:160px; margin-left:8px;"
>
<el-select
v-model=
"organizationInfo.isSort"
@
change=
"onAllOrganization()"
style=
"width:100%;"
>
<template
#
prefix
>
<div
class=
"icon1"
>
<img
v-if=
"isSort"
src=
"@/assets/icons/she
ngxu1.png"
alt=
""
/>
<
img
v-else
src=
"@/assets/icons/jiangxu1.png"
alt=
""
/
>
<img
src=
"@/assets/icons/jia
ngxu1.png"
alt=
""
/>
<
!--
<img
src=
"@/assets/icons/shengxu1.png"
alt=
""
/>
--
>
</div>
</
template
>
<el-option
label=
"政令数量"
:value=
"1"
/>
<el-option
label=
"政令数据总量"
:value=
"1"
/>
<el-option
label=
"政令新增数量"
:value=
"2"
/>
</el-select>
</div>
</div>
...
...
@@ -30,13 +30,12 @@
<TimeTabPane
@
time-click=
"handleDateChange"
activeTime=
"近一年"
/>
</div>
<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=
"organization-item"
v-for=
"item in organizationInfo.list"
:key=
"item.orgId"
>
<div
class=
"item-left"
>
<img
:src=
"item.orgImage || DefaultIcon2"
alt=
""
/>
</div>
<div
class=
"item-right one-line-ellipsis"
>
{{ item.orgName }}
</div>
<div
class=
"item-total"
>
{{ item.total }}项
</div>
<div
class=
"item-right one-line-ellipsis
text-click-hover"
@
click=
"handleToInstitution(item)
"
>
{{ item.orgName }}
</div>
<div
class=
"item-total
text-click-hover"
@
click=
"handleToDataLibrary(item)
"
>
{{ item.total }}项
</div>
<el-icon
color=
"var(--color-primary-100)"
>
<ArrowRightBold
/>
</el-icon>
...
...
@@ -50,17 +49,15 @@
</div>
</div>
<div
class=
"back-bnt"
@
click=
"router.back()"
>
<el-icon>
<Back
/>
</el-icon>
<el-icon>
<Back
/>
</el-icon>
<div
style=
"margin-left: 6px;"
>
返回
</div>
</div>
</div>
</template>
<
script
setup
name=
"index"
>
<
script
setup
>
import
{
onMounted
,
reactive
,
ref
}
from
"vue"
import
{
Search
}
from
'@element-plus/icons-vue'
import
{
Search
,
Back
}
from
'@element-plus/icons-vue'
import
router
from
"@/router"
;
import
TimeTabPane
from
'@/components/base/TimeTabPane/index.vue'
;
...
...
@@ -112,9 +109,7 @@ const handleToInstitution = item => {
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
orgName
);
const
curRoute
=
router
.
resolve
({
path
:
"/institution"
,
query
:
{
id
:
item
.
orgId
}
query
:
{
id
:
item
.
orgId
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// router.push({
...
...
@@ -125,6 +120,15 @@ const handleToInstitution = item => {
// })
};
// 下钻至数据资源库
const
handleToDataLibrary
=
(
item
)
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataDecree"
,
query
:
{
orgnizationName
:
item
.
orgName
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
const
refOrganization
=
ref
()
onMounted
(()
=>
{
// 根据元素的高度决定分页显示的机构数量
...
...
@@ -196,15 +200,14 @@ onMounted(() => {
background-color
:
var
(
--
el-fill-color-blank
);
border-radius
:
var
(
--
el-border-radius-base
);
box-shadow
:
0
0
0
1px
var
(
--
el-border-color
)
inset
;
box-sizing
:
border-box
;
margin-left
:
20px
;
width
:
160px
;
height
:
32px
;
}
.hard-time
{
height
:
42px
;
padding
:
5px
0
;
height
:
32px
;
width
:
160px
;
margin-left
:
8px
;
.icon1
{
width
:
11px
;
...
...
@@ -269,7 +272,6 @@ onMounted(() => {
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
align-items
:
center
;
justify-content
:
center
;
cursor
:
pointer
;
transition
:
transform
0
.3s
ease
,
box-shadow
0
.3s
ease
;
position
:
relative
;
...
...
src/views/decree/decreeHome/assets/images/icon_1596.png
0 → 100644
浏览文件 @
72613fb4
446 Bytes
src/views/decree/decreeHome/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/decree/decreeHome/utils/barChart.js
浏览文件 @
72613fb4
import
*
as
echarts
from
"echarts"
;
import
{
DOUBLECHARTCOLORS
}
from
'@/common/constant'
import
{
hexToRgba
}
from
'@/views/marketAccessRestrictions/utils/index.ts'
const
getBarChart
=
(
nameList
,
valueList
)
=>
{
const
getSerie
=
(
index
,
data
)
=>
{
return
{
name
:
data
[
index
].
name
,
type
:
'bar'
,
data
:
data
[
index
].
list
,
label
:
{
show
:
true
,
position
:
'top'
,
color
:
DOUBLECHARTCOLORS
[
index
],
fontWeight
:
'bold'
,
// 文字加粗
fontSize
:
14
,
formatter
:
(
params
)
=>
params
.
value
,
},
barWidth
:
20
,
itemStyle
:
{
color
:
function
(
params
)
{
return
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
offset
:
0
,
color
:
hexToRgba
(
DOUBLECHARTCOLORS
[
index
],
0.3
)
},
{
offset
:
1
,
color
:
hexToRgba
(
DOUBLECHARTCOLORS
[
index
],
1
)
}
]);
},
barBorderRadius
:
10
,
}
}
}
const
getBarChart
=
(
dataX
,
dataY
)
=>
{
const
option
=
{
color
:
DOUBLECHARTCOLORS
,
legend
:
{
show
:
true
,
top
:
0
,
icon
:
'circle'
,
textStyle
:
{
color
:
'rgba(95, 101, 108, 1)'
,
fontFamily
:
'Microsoft YaHei'
,
fontSize
:
'14px'
,
}
},
tooltip
:
{},
grid
:
{
top
:
'8%'
,
...
...
@@ -12,6 +57,8 @@ const getBarChart = (nameList, valueList) => {
},
yAxis
:
{
type
:
'value'
,
name
:
'项'
,
nameTextStyle
:
{
align
:
'right'
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
...
...
@@ -34,7 +81,7 @@ const getBarChart = (nameList, valueList) => {
},
xAxis
:
{
type
:
'category'
,
data
:
nameList
,
data
:
dataX
,
splitLine
:
{
show
:
false
},
...
...
@@ -56,36 +103,7 @@ const getBarChart = (nameList, valueList) => {
}
}
},
series
:
[{
type
:
'bar'
,
data
:
valueList
,
label
:
{
show
:
true
,
position
:
'top'
,
color
:
'rgba(5, 95, 194, 1)'
,
fontWeight
:
'bold'
,
// 文字加粗
fontSize
:
14
,
formatter
:
function
(
params
)
{
return
params
.
value
},
},
barWidth
:
20
,
itemStyle
:
{
color
:
function
(
params
)
{
return
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
offset
:
0
,
color
:
'rgba(10, 87, 166, 0)'
},
{
offset
:
1
,
color
:
'rgba(5, 95, 194, 1)'
}
]);
},
barBorderRadius
:
10
,
}
}]
series
:
[
getSerie
(
0
,
dataY
),
getSerie
(
1
,
dataY
)
]
}
return
option
}
...
...
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
72613fb4
...
...
@@ -3,7 +3,7 @@
<div
class=
"box1"
>
<AnalysisBox
title=
"相关政令"
:showAllBtn=
"false"
>
<div
class=
"box1-main"
v-loading=
"isLoading"
>
<el-empty
v-if=
"!siderList?.length"
style=
"
padding: 60px 0
;"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!siderList?.length"
style=
"
height: 100%
;"
description=
"暂无数据"
:image-size=
"100"
/>
<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=
"item-head"
>
...
...
@@ -19,7 +19,7 @@
<div
class=
"box2"
>
<AnalysisBox
title=
"政令关系挖掘"
:showAllBtn=
"false"
>
<div
style=
"height: 100%; width: 100%;"
v-loading=
"isLoading"
>
<el-empty
v-if=
"!siderList?.length"
style=
"
padding: 60px 0
;"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!siderList?.length"
style=
"
height: 100%
;"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box2-main"
v-if=
"graphData.nodes?.length"
>
<GraphChart
:nodes=
"graphData.nodes"
:links=
"graphData.links"
layoutType=
"force"
@
handleClickNode=
"handleClickNode"
/>
</div>
...
...
src/views/decree/decreeLayout/index.vue
浏览文件 @
72613fb4
...
...
@@ -2,7 +2,7 @@
<div
class=
"layout-container"
>
<!-- 导航菜单 -->
<div
class=
"layout-main"
>
<div
class=
"
header-main
"
>
<div
class=
"
layout-head
"
>
<div
class=
"layout-main-header"
>
<div
class=
"layout-main-header-container"
>
<div
class=
"layout-main-header-left-box"
>
...
...
@@ -65,7 +65,7 @@
</div>
</div>
</div>
<div
class=
"layout-
main-center
"
>
<div
class=
"layout-
down
"
>
<router-view
/>
</div>
</div>
...
...
@@ -236,68 +236,7 @@ onMounted(() => {
height
:
100%
;
overflow
:
hidden
;
overflow-y
:
auto
;
.report
{
padding
:
10px
150px
;
position
:
absolute
;
left
:
0
;
top
:
0
;
z-index
:
999999
;
width
:
100%
;
height
:
100%
;
background
:
#f7f8f9
;
.report-header
{
width
:
100%
;
height
:
50px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
50px
;
letter-spacing
:
0px
;
text-align
:
left
;
padding-left
:
30px
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
}
.report-main
{
display
:
flex
;
height
:
calc
(
100%
-
100px
);
justify-content
:
space-between
;
.left
{
width
:
800px
;
.noContent
{
height
:
100px
;
line-height
:
100px
;
text-align
:
center
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
font-size
:
20px
;
font-weight
:
400
;
}
}
.right
{
width
:
800px
;
.noContent
{
height
:
100px
;
line-height
:
100px
;
text-align
:
center
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
font-size
:
20px
;
font-weight
:
400
;
}
}
}
}
background-color
:
white
;
.layout-main
{
width
:
100%
;
...
...
@@ -305,10 +244,10 @@ onMounted(() => {
display
:
flex
;
flex-direction
:
column
;
.
header-main
{
.
layout-head
{
width
:
100%
;
border-bottom
:
1px
solid
rgb
a
(
234
,
236
,
238
,
1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
)
;
border-bottom
:
1px
solid
rgb
(
234
,
236
,
238
);
box-shadow
:
0
0
20px
#194582
1a
;
background
:
rgba
(
255
,
255
,
255
,
1
);
}
...
...
@@ -316,7 +255,6 @@ onMounted(() => {
width
:
1600px
;
height
:
137px
;
margin
:
0
auto
;
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
justify-content
:
space-between
;
position
:
sticky
;
...
...
@@ -554,10 +492,9 @@ onMounted(() => {
}
}
.layout-
main-center
{
.layout-
down
{
height
:
20px
;
flex
:
auto
;
background-color
:
#f7f8f9
;
}
}
}
...
...
src/views/decree/decreeLayout/influence/com/ChartChain.vue
浏览文件 @
72613fb4
<
template
>
<div
class=
"view-box"
>
<el-empty
v-if=
"!listData?.length"
style=
"
padding: 60px 0
"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!listData?.length"
style=
"
height: 100%;
"
description=
"暂无数据"
:image-size=
"100"
/>
<div
v-if=
"listData.length"
class=
"main-content-main"
...
...
@@ -10,12 +10,8 @@
@
mouseleave=
"handleMouseUp"
@
mousemove=
"handleMouseMove"
>
<div
class=
"fishbone-container"
:style=
"
{
transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,
transformOrigin: 'center center'
}"
<div
class=
"fishbone-container"
:style=
"
{ transform: `translate(${translateX}px, ${translateY}px) scale(${scale})` }"
>
<!-- 主轴上的标签 -->
<div
class=
"main-line"
:style=
"
{ width: listData.length * 200 + 300 + 'px' }">
...
...
@@ -152,18 +148,18 @@
<
/template
>
<
script
setup
name
=
"ChartChain"
>
import
{
ref
}
from
"vue"
;
import
{
onBeforeUnmount
,
ref
,
watch
}
from
"vue"
;
import
defaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
noticeIcon
from
"../assets/images/notice-icon.png"
;
const
props
=
defineProps
({
baseData
:
{
type
:
Object
,
default
:
()
=>
[]
type
:
Array
,
default
:
()
=>
([])
}
,
listData
:
{
type
:
Array
,
default
:
()
=>
[]
default
:
()
=>
([])
}
}
);
...
...
@@ -211,6 +207,15 @@ const handleMouseUp = () => {
}
;
// #endregion 移动功能处理
// 初始化布局
const
watchInfo
=
watch
(()
=>
props
.
listData
,
val
=>
{
scale
.
value
=
1
;
translateX
.
value
=
0
;
translateY
.
value
=
0
;
}
)
onBeforeUnmount
(()
=>
{
watchInfo
()
}
);
// 奇数索引的数据组放在上方, 偶数索引的数据组放在下方
const
onFilterData
=
num
=>
{
return
props
.
listData
.
filter
((
_
,
index
)
=>
index
%
2
===
num
);
...
...
@@ -247,9 +252,14 @@ const formatRate = (item, key) => {
align
-
items
:
center
;
justify
-
content
:
center
;
overflow
:
hidden
;
-
webkit
-
user
-
select
:
none
;
/* Safari/Chrome */
-
moz
-
user
-
select
:
none
;
/* Firefox */
-
ms
-
user
-
select
:
none
;
/* IE/Edge */
user
-
select
:
none
;
/* 标准语法 */
.
fishbone
-
container
{
position
:
relative
;
transform
-
origin
:
center
center
;
.
main
-
line
{
height
:
3
px
;
...
...
src/views/decree/decreeLayout/influence/index.vue
浏览文件 @
72613fb4
<
template
>
<div
class=
"wrapper"
>
<div
class=
"box1"
>
<div
class=
"box1"
v-loading=
"entityInfo.loading"
>
<AnalysisBox
title=
"受影响实体"
:showAllBtn=
"false"
>
<div
class=
"box1-main"
>
<div
class=
"data-filter"
>
...
...
@@ -16,7 +16,7 @@
</div>
<div
class=
"data-title"
>
实体名称
</div>
<div
style=
"height: 20px; flex: auto;"
>
<el-empty
v-if=
"!entityInfo.list?.length"
style=
"
padding: 60px 0
;"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!entityInfo.list?.length"
style=
"
height: 100%
;"
description=
"暂无数据"
:image-size=
"100"
/>
<el-scrollbar
height=
"100%"
always
>
<div
class=
"list-data"
>
<div
class=
"list-item"
v-for=
"item in entityInfo.list"
:key=
"item.id"
:class=
"
{ 'item-active': entityInfo.id==item.id }" @click="headerChartData(item)">
...
...
@@ -49,7 +49,7 @@
<
/div
>
<
/AnalysisBox
>
<
/div
>
<
div
class
=
"box2"
>
<
div
class
=
"box2"
v
-
loading
=
"box2Params.loading"
>
<
AnalysisBox
:
showAllBtn
=
"false"
>
<
template
#
custom
-
title
>
<
div
class
=
"custom-title"
>
...
...
@@ -80,8 +80,9 @@
<
ChartChain
:
listData
=
"fishbone.list"
:
baseData
=
"fishbone.base"
/>
<
/div
>
<
div
class
=
"graph-box"
v
-
if
=
"contentType==2"
>
<
GraphChart
v
-
if
=
"graphInfo.nodes?.length"
:
nodes
=
"graphInfo.nodes"
:
links
=
"graphInfo.links"
layoutType
=
"force"
/>
<
el
-
empty
v
-
else
style
=
"padding: 60px 0"
description
=
"暂无数据"
:
image
-
size
=
"100"
/>
<!--
<
GraphChart
v
-
if
=
"graphInfo.nodes?.length"
:
nodes
=
"graphInfo.nodes"
:
links
=
"graphInfo.links"
layoutType
=
"force"
/>
-->
<
RelationChart
v
-
if
=
"graphInfo.nodes?.length"
:
graphData
=
"graphInfo"
><
/RelationChart
>
<
el
-
empty
v
-
else
style
=
"height: 100%;"
description
=
"暂无数据"
:
image
-
size
=
"100"
/>
<
/div
>
<
/div
>
<
/AnalysisBox
>
...
...
@@ -103,6 +104,7 @@ import {
import
ChartChain
from
"./com/ChartChain.vue"
;
// import AiTips from "./com/AiTips.vue";
import
GraphChart
from
"@/components/base/GraphChart/index.vue"
;
import
RelationChart
from
"@/components/base/RelationChart/index.vue"
import
defaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
noticeIcon
from
"./assets/images/notice-icon.png"
;
import
icon422
from
"./assets/images/icon422.png"
;
...
...
@@ -134,6 +136,7 @@ const handleGetHylyList = async () => {
// 受影响实体
const
entityInfo
=
reactive
({
loading
:
false
,
keyword
:
""
,
pageSize
:
10
,
pageNum
:
1
,
...
...
@@ -144,6 +147,7 @@ const entityInfo = reactive({
}
)
const
onDecreeEntities
=
async
(
page
=
1
)
=>
{
entityInfo
.
pageNum
=
page
;
entityInfo
.
loading
=
true
;
try
{
let
params
=
{
id
:
route
.
query
.
id
,
...
...
@@ -154,19 +158,31 @@ const onDecreeEntities = async (page=1) => {
}
const
res
=
await
getDecreeEntities
(
params
);
console
.
log
(
"受影响实体:"
,
res
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
entityInfo
.
list
=
res
.
data
.
companyInfos
;
entityInfo
.
total
=
res
.
data
.
total
;
if
(
entityInfo
.
total
&&
entityInfo
.
list
.
every
(
item
=>
item
.
id
!=
entityInfo
.
id
))
{
headerChartData
(
entityInfo
.
list
[
0
])
}
}
else
{
entityInfo
.
list
=
[];
entityInfo
.
total
=
0
;
fishbone
.
list
=
[];
graphInfo
.
nodes
=
[];
}
}
catch
(
error
)
{
console
.
log
(
"获取受影响实体失败"
,
error
);
entityInfo
.
list
=
[];
entityInfo
.
total
=
0
;
fishbone
.
list
=
[];
graphInfo
.
nodes
=
[];
}
entityInfo
.
loading
=
false
;
}
;
const
contentType
=
ref
(
1
);
const
box2Params
=
reactive
({
loading
:
false
,
}
)
const
headerContentType
=
(
type
)
=>
{
contentType
.
value
=
type
;
if
(
!
entityInfo
.
total
)
return
;
...
...
@@ -206,9 +222,7 @@ const onDecreeRelatedChain = async (id) => {
industryChain
.
list
=
res
.
data
;
if
(
industryChain
.
list
.
length
)
onDecreeChainNodes
(
industryChain
.
list
[
0
].
id
)
}
}
catch
(
error
)
{
console
.
log
(
"获取产业链失败"
,
error
);
}
}
catch
(
error
)
{
}
}
;
// 产业链鱼骨图
...
...
@@ -217,6 +231,7 @@ const fishbone = reactive({
base
:
[],
}
)
const
onDecreeChainNodes
=
async
(
id
)
=>
{
box2Params
.
loading
=
true
;
industryChain
.
id
=
id
;
try
{
const
res
=
await
getDecreeChainNodes
({
id
}
);
...
...
@@ -234,36 +249,61 @@ const onDecreeChainNodes = async (id) => {
}
}
)
fishbone
.
list
=
Object
.
values
(
obj
);
console
.
log
(
"fishbone.list:"
,
fishbone
.
list
);
fishbone
.
base
=
res
.
data
.
levelInfos
.
map
((
item
,
index
)
=>
{
return
{...
item
,
name
:
[
'上游'
,
'中游'
,
'下游'
][
index
]
}
}
);
}
}
catch
(
error
)
{
console
.
log
(
"获取产业链鱼骨图失败"
,
error
);
}
}
catch
(
error
)
{
}
box2Params
.
loading
=
false
;
}
;
// 实体关系
const
graphInfo
=
reactive
({
nodes
:
[],
links
:
[],
rootId
:
""
,
}
);
const
onDecreeRelatedEntitie
=
async
(
orgId
)
=>
{
box2Params
.
loading
=
true
;
try
{
const
res
=
await
getDecreeRelatedEntitie
({
orgId
,
rule
:
false
,
withSanInfo
:
false
}
);
console
.
log
(
"实体关系:"
,
res
);
if
(
res
.
code
===
200
)
{
let
arr1
=
res
.
data
.
parentOrgList
.
map
(
item
=>
({
...
item
,
level
:
1
}
))
let
arr3
=
res
.
data
.
childrenOrgList
.
map
(
item
=>
({
...
item
,
level
:
3
}
))
let
arr1
=
res
.
data
.
parentOrgList
.
map
((
item
,
index
)
=>
{
return
{
id
:
`1-${index
}
`
,
text
:
item
.
name
,
description
:
item
.
description
,
level
:
1
,
}
}
)
let
arr3
=
res
.
data
.
childrenOrgList
.
map
((
item
,
index
)
=>
{
return
{
id
:
`3-${index
}
`
,
text
:
item
.
name
,
description
:
item
.
description
,
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
))
graphInfo
.
links
=
[...
arr1
,...
arr3
].
map
((
item
=>
{
return
{
from
:
'0-0'
,
to
:
item
.
id
,
text
:
(
item
.
level
==
1
?
'被'
:
''
)
+
item
.
description
,
fontColor
:
(
item
.
level
==
1
?
'#ff954d'
:
'#218139'
),
color
:
(
item
.
level
==
1
?
'#fbf0e9'
:
'#e4eee7'
),
textOffset_x
:
-
20
,
lineWidth
:
5
}
}
))
graphInfo
.
nodes
=
[...
arr1
,...
arr3
]
graphInfo
.
nodes
.
unshift
({
text
:
res
.
data
.
orgName
,
id
:
'0-0'
,
level
:
2
}
)
graphInfo
.
rootId
=
'0-0'
console
.
log
(
'graphInfo'
,
graphInfo
)
}
}
catch
(
error
)
{
console
.
log
(
"获取实体关系失败"
,
error
);
}
}
catch
(
error
)
{
}
box2Params
.
loading
=
false
}
const
onFormatLink
=
(
item
,
index
)
=>
{
return
{
...
...
@@ -448,10 +488,13 @@ onMounted(() => {
:
deep
(.
header
-
icon
)
{
display
:
none
;
}
:
deep
(.
wrapper
-
header
)
{
padding
-
top
:
8
px
;
}
.
custom
-
title
{
display
:
flex
;
justify
-
content
:
space
-
between
;
align
-
items
:
flex
-
end
;
align
-
items
:
center
;
width
:
100
%
;
height
:
100
%
;
padding
:
0
20
px
;
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/decree/decreeLayout/overview/index.vue
浏览文件 @
72613fb4
...
...
@@ -96,7 +96,6 @@ onMounted(() => {
.decree-overview-wrap
{
width
:
100%
;
overflow
:
hidden
;
background
:
rgba
(
247
,
248
,
249
,
1
);
.main
{
position
:
relative
;
width
:
1600px
;
...
...
src/views/decree/decreeLayout/overview/introduction/index.vue
浏览文件 @
72613fb4
...
...
@@ -74,7 +74,7 @@
</div>
</AnalysisBox>
</div>
<div>
<div
v-loading=
"relateParams.loading"
>
<AnalysisBox
title=
"相关事件"
:showAllBtn=
"false"
>
<div
class=
"box2-main"
>
<el-empty
v-if=
"!relatedData.length"
description=
"暂无数据"
:image-size=
"100"
/>
...
...
@@ -90,6 +90,7 @@
<div
class=
"content"
>
{{ item.sjnr }}
</div>
</div>
</div>
<SimplePagination
v-model:current-page=
"relateParams.page"
:page-size=
"relateParams.size"
:total=
"relateParams.total"
@
page-change=
"onDecreeRelatedEvent"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -106,12 +107,12 @@
<div
class=
"box3"
>
<AnalysisBox
title=
"发布机构"
:showAllBtn=
"false"
>
<div
class=
"box3-top"
>
<div
class=
"box3-top-top"
@
click=
"handleToInstitution(box3TopTopData)"
>
<div
class=
"box3-top-top"
>
<div
class=
"left"
>
<img
:src=
"box3TopTopData?.logo || DefaultIcon2"
alt=
""
/>
</div>
<div
class=
"right"
>
<div
class=
"name"
>
{{ box3TopTopData.name + " >" }}
</div>
<div
class=
"name
text-click-hover"
@
click=
"handleToInstitution(box3TopTopData)
"
>
{{ box3TopTopData.name + " >" }}
</div>
<div
class=
"ename"
>
{{ box3TopTopData.eName }}
</div>
</div>
</div>
...
...
@@ -145,7 +146,7 @@
<div
class=
"box3-bottom-main"
>
<el-timeline
style=
"max-width: 500px"
>
<el-timeline-item
:timestamp=
"item.postDate"
placement=
"top"
v-for=
"(item, index) in eventList?.slice(0, 3)"
:key=
"index"
>
<div
class=
"timeline-content"
>
{{ item.describe }}
</div>
<div
class=
"timeline-content
text-align-justify
"
>
{{ item.describe }}
</div>
</el-timeline-item>
</el-timeline>
</div>
...
...
@@ -158,7 +159,7 @@
</template>
<
script
setup
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
,
reactive
}
from
"vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
router
from
"@/router"
;
import
WarnningPane
from
'@/components/base/WarningPane/index.vue'
...
...
@@ -171,7 +172,8 @@ import {
getOverview
,
}
from
"@/api/decree/introduction"
;
import
{
getDecreeRelatedEvent
}
from
"@/api/decree/background"
;
import
AiSummary
from
'@/components/base/Ai/AiSummary/index.vue'
import
AiSummary
from
'@/components/base/Ai/AiSummary/index.vue'
;
import
SimplePagination
from
"@/components/SimplePagination.vue"
;
import
DefaultIcon1
from
"@/assets/icons/default-icon1.png"
;
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
...
...
@@ -296,9 +298,21 @@ const onOverview = async () => {
// 相关事件
const
relatedData
=
ref
([]);
const
handleGetRelateEvents
=
async
()
=>
{
const
relateParams
=
reactive
({
size
:
5
,
page
:
1
,
total
:
0
,
loading
:
false
,
})
const
onDecreeRelatedEvent
=
async
(
page
)
=>
{
if
(
page
)
keyDecreeInfo
.
page
=
page
relateParams
.
loading
=
true
;
try
{
const
res
=
await
getDecreeRelatedEvent
({
id
:
decreeId
.
value
});
const
res
=
await
getDecreeRelatedEvent
({
id
:
decreeId
.
value
,
pageNum
:
relateParams
.
page
-
1
,
pageSize
:
relateParams
.
size
,
});
console
.
log
(
"相关事件"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
relatedData
.
value
=
res
.
data
;
...
...
@@ -307,8 +321,8 @@ const handleGetRelateEvents = async () => {
}
}
catch
(
error
)
{
relatedData
.
value
=
[];
console
.
error
(
"获取相关事件数据失败"
,
error
);
}
relateParams
.
loading
=
false
;
};
// 发布机构
...
...
@@ -382,7 +396,7 @@ onMounted(() => {
onOverview
()
onKeyWordUp
()
onRiskSignalData
()
handleGetRelateEvents
();
onDecreeRelatedEvent
();
handleGetOrgnization
();
});
</
script
>
...
...
@@ -825,6 +839,12 @@ onMounted(() => {
font-size
:
14px
;
font-weight
:
400
;
line-height
:
26px
;
max-height
:
78px
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
3
;
-webkit-box-orient
:
vertical
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
}
}
...
...
src/views/decree/decreeLayout/overview/measures/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/com/RelatedEvent.vue
浏览文件 @
72613fb4
<
template
>
<AnalysisBox
:title=
"props.title"
:showAllBtn=
"false"
height=
"auto"
>
<div
class=
"box-main"
>
<el-empty
v-if=
"!props.listData?.length"
description=
"暂无数据"
:image-size=
"
2
00"
/>
<el-empty
v-if=
"!props.listData?.length"
description=
"暂无数据"
:image-size=
"
1
00"
/>
<div
v-for=
"(item, index) in props.listData"
:key=
"index"
class=
"box-item"
>
<div
class=
"item-tag"
:class=
"getClassName(item)"
>
{{
item
.
TYPE
}}
</div>
<div
class=
"item-right"
@
click=
"onNavigateTo(item)"
>
...
...
src/views/marketAccessRestrictions/com/SurveyHistory.vue
浏览文件 @
72613fb4
<
template
>
<div
class=
"view-box"
>
<el-empty
v-if=
"!props.surveyList?.length"
description=
"暂无数据"
:image-size=
"100"
/>
<el-empty
v-if=
"!props.surveyList?.length"
description=
"暂无数据"
style=
"padding-top: 200px;"
:image-size=
"100"
/>
<div
class=
"timeline-item"
v-for=
"(item, index) in props.surveyList"
:key=
"item.searchid"
@
click=
"onNavigateToDetail(item)"
>
<div
class=
"timeline-date"
>
<div
class=
"date-text"
>
{{
item
.
searchdatezh
.
slice
(
0
,
4
)
}}
</div>
...
...
src/views/marketAccessRestrictions/marketAccessHome/assets/icons/icon2.svg
浏览文件 @
72613fb4
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
customFrame=
"#000000"
>
<rect
id=
"
折线图
"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"合并"
d=
"M2
0.5419 4.83623L13.1957 9.57293C13.0388 9.6741 12.867 9.72717 12.6804 9.73213C12.4937 9.7371 12.3194 9.69325 12.1573 9.60057L8.08207 7.27011L4.50424 9.35944C4.02065 9.64183 3.41881 9.48376 3.13642 9.00018C2.85402 8.51659 3.0121 7.91475 3.49568 7.63236L7.57254 5.25161C7.72693 5.16146 7.8935 5.11598 8.07228 5.11516C8.25106 5.11435 8.41804 5.15832 8.57324 5.24707L12.6226 7.56272L19.4581 3.15534C19.9287 2.85188 20.537 2.98324 20.8404 3.45388C21.1439 3.92453 21.0125 4.53276 20.5419 4.83623ZM4.00352 13.6788L7.58044 11.6333C7.88802 11.4574 8.2657 11.4574 8.57327 11.6333L12.1169 13.6597C12.4459 13.8478 12.853 13.8338 13.1683 13.6234L18.9449 9.76933C19.6095 9.32597 20.4999 9.80233 20.4999 10.6012L20.4999 19.4969C20.4999 20.0492 20.0522 20.4969 19.4999 20.4969L4.49997 20.4971C3.94769 20.4971 3.49997 20.0494 3.49997 19.4971L3.49993 14.5468C3.49993 14.1881 3.6921 13.8568 4.00352 13.6788
Z"
fill=
"rgb(5,95,194)"
fill-rule=
"evenodd"
/>
<rect
id=
"
容器 239
"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"合并"
d=
"M2
1.582 2.81364L14.582 7.81329C14.42 7.92898 14.2396 7.9908 14.0407 7.99874C13.8418 8.00668 13.657 7.95945 13.4863 7.85704L9.00066 5.16578L4.5155 7.8569C4.0353 8.14502 3.43163 7.99411 3.14351 7.51391C2.85539 7.03372 3.0063 6.43004 3.4865 6.14192L8.48614 3.1421C8.64448 3.0471 8.81598 2.99959 9.00063 2.99959C9.18528 2.99959 9.35678 3.04709 9.51512 3.14209L13.9531 5.80474L20.4196 1.18613C20.8753 0.860653 21.4891 0.962974 21.8146 1.41868C22.1401 1.87438 22.0377 2.48816 21.582 2.81364ZM3.00092 12.7841L8.11631 9.89203L13.2317 12.784L22.0009 6.99978L22.0009 19.9995L3.00096 19.9998L3.00092 12.7841
Z"
fill=
"rgb(5,95,194)"
fill-rule=
"evenodd"
/>
</svg>
src/views/marketAccessRestrictions/marketAccessHome/assets/icons/icon3.svg
浏览文件 @
72613fb4
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
customFrame=
"#000000"
>
<rect
id=
"容器 1714"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"合并"
d=
"M12 2.72656C10.6193 2.72656 9.5 3.84585 9.5 5.22656C9.5 6.60727 10.6193 7.72656 12 7.72656C13.3807 7.72656 14.5 6.60727 14.5 5.22656C14.5 3.84585 13.3807 2.72656 12 2.72656ZM8.5 5.28283C8.5 5.19541 8.5032 5.10875 8.5095 5.02295C5.55588 6.35486 3.5 9.32509 3.5 12.7755C3.5 13.5624 3.60693 14.3243 3.80705 15.0475C4.32848 14.6278 4.97275 14.3546 5.67741 14.2902C5.56142 13.8042 5.5 13.297 5.5 12.7755C5.5 10.2821 6.90397 8.11655 8.9645 7.02635C8.66902 6.51302 8.5 5.91766 8.5 5.28283ZM15.5 5.28283C15.5 5.19542 15.4968 5.10875 15.4905 5.02295C18.4441 6.35485 20.5 9.32509 20.5 12.7755C20.5 13.5624 20.3931 14.3243 20.193 15.0475C19.6715 14.6278 19.0273 14.3546 18.3226 14.2902C18.4386 13.8042 18.5 13.297 18.5 12.7755C18.5 10.2821 17.096 8.11655 15.0355 7.02635C15.331 6.51302 15.5 5.91766 15.5 5.28283ZM8.5 17.7754C8.5 16.3947 7.38071 15.2754 6 15.2754C4.61929 15.2754 3.5 16.3947 3.5 17.7754C3.5 19.1561 4.61929 20.2754 6 20.2754C7.38071 20.2754 8.5 19.1561 8.5 17.7754ZM18 15.2754C19.3807 15.2754 20.5 16.3947 20.5 17.7754C20.5 19.1561 19.3807 20.2754 18 20.2754C16.6193 20.2754 15.5 19.1561 15.5 17.7754C15.5 16.3947 16.6193 15.2754 18 15.2754ZM14.6294 18.7217C14.8172 19.3922 15.1997 19.9813 15.7121 20.4242C14.5905 20.9696 13.331 21.2755 12 21.2755C10.669 21.2755 9.40951 20.9696 8.28791 20.4242C8.80027 19.9813 9.18277 19.3922 9.3706 18.7217C10.1745 19.0777 11.0642 19.2755 12 19.2755C12.9358 19.2755 13.8255 19.0777 14.6294 18.7217Z"
fill=
"rgb(5,95,194)"
fill-rule=
"evenodd"
/>
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
>
<rect
id=
"雷达图_图表-雷达图 1"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<g
id=
"组合 1062"
>
<path
id=
"多边形 25"
d=
"M19.7942 7.5L19.7942 16.5L12 21L4.20577 16.5L4.20577 7.5L12 3L19.7942 7.5Z"
fill-rule=
"evenodd"
stroke=
"rgb(5,95,194)"
stroke-linejoin=
"round"
stroke-width=
"2.000000"
/>
<path
id=
"多边形 26"
d=
"M16.3301 9.5L16.3301 14.5L12 17L7.66987 14.5L7.66987 9.5L12 7L16.3301 9.5Z"
fill-rule=
"evenodd"
stroke=
"rgb(5,95,194)"
stroke-width=
"2.000000"
/>
<path
id=
"多边形 27"
d=
"M13.7321 11L13.7321 13L12 14L10.2679 13L10.2679 11L12 10L13.7321 11Z"
fill=
"rgb(5,95,194)"
fill-rule=
"evenodd"
/>
</g>
</svg>
src/views/marketAccessRestrictions/marketAccessHome/assets/icons/icon4.svg
浏览文件 @
72613fb4
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
>
<rect
id=
"
定位
"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"矢量 5
73"
d=
"M11.7453 2.01562C8.03585 2.01562 5.02783 5.03994 5.02783 8.77327C5.02783 10.6381 5.78079 12.3271 6.99554 13.5507L11.7453 18.3294L16.4964 13.5507C16.6523 13.394 16.8001 13.2301 16.9399 13.0589C17.0797 12.8877 17.2107 12.7101 17.3331 12.526C17.4554 12.3419 17.5685 12.1523 17.6722 11.9572C17.776 11.7621 17.8699 11.5623 17.954 11.3579C18.0382 11.1536 18.1121 10.9456 18.1758 10.7339C18.2396 10.5223 18.2928 10.3081 18.3355 10.0913C18.3782 9.87441 18.4102 9.65599 18.4315 9.43601C18.4527 9.21603 18.4632 8.99553 18.4628 8.77452C18.4628 5.04119 15.4561 2.01687 11.7453 2.01687L11.7453 2.01562ZM11.7453 11.775C11.6473 11.7748 11.5495 11.7697 11.4519 11.7598C11.3543 11.75 11.2575 11.7354 11.1613 11.716C11.0652 11.6966 10.9703 11.6726 10.8765 11.6439C10.7827 11.6152 10.6906 11.582 10.6001 11.5442C10.5096 11.5064 10.4211 11.4643 10.3348 11.4179C10.2484 11.3715 10.1645 11.3209 10.0831 11.2662C10.0017 11.2115 9.92319 11.153 9.84754 11.0906C9.77189 11.0282 9.69948 10.9622 9.63031 10.8927C9.56115 10.8232 9.49555 10.7504 9.43353 10.6745C9.37151 10.5985 9.31337 10.5197 9.25909 10.438C9.20481 10.3564 9.15467 10.2722 9.10866 10.1856C9.06265 10.099 9.021 10.0104 8.9837 9.91968C8.9464 9.82898 8.91364 9.73668 8.8854 9.64277C8.85717 9.54885 8.83362 9.45378 8.81473 9.35756C8.79584 9.26133 8.78171 9.16441 8.77234 9.06679C8.76298 8.96917 8.75842 8.87133 8.75867 8.77327L8.75867 8.77077C8.75838 8.67272 8.7629 8.57489 8.77222 8.47729C8.78155 8.37969 8.79564 8.28277 8.81449 8.18655C8.83334 8.09033 8.85686 7.99527 8.88506 7.90136C8.91325 7.80745 8.94598 7.71515 8.98324 7.62446C9.02051 7.53377 9.06213 7.44512 9.10811 7.35852C9.15409 7.27192 9.2042 7.18778 9.25844 7.1061C9.31269 7.02443 9.37081 6.94561 9.4328 6.86964C9.4948 6.79368 9.56036 6.72094 9.62951 6.65142C9.69865 6.5819 9.77103 6.51593 9.84666 6.45353C9.92228 6.39112 10.0008 6.33257 10.0822 6.27788C10.1635 6.22319 10.2474 6.17262 10.3338 6.12617C10.4201 6.07972 10.5085 6.03762 10.599 5.99986C10.6895 5.9621 10.7816 5.92887 10.8754 5.90017C10.9691 5.87146 11.0641 5.84742 11.1602 5.82805C11.2563 5.80867 11.3531 5.79405 11.4507 5.7842C11.5482 5.77434 11.646 5.76929 11.7441 5.76904L11.7453 5.76904C11.8434 5.76929 11.9412 5.77434 12.0388 5.7842C12.1363 5.79405 12.2332 5.80867 12.3293 5.82804C12.4255 5.84741 12.5204 5.87145 12.6142 5.90015C12.708 5.92885 12.8001 5.96208 12.8906 5.99984C12.9811 6.03759 13.0695 6.07969 13.1559 6.12614C13.2423 6.17258 13.3262 6.22315 13.4076 6.27783C13.489 6.33252 13.5675 6.39106 13.6431 6.45346C13.7188 6.51587 13.7912 6.58182 13.8604 6.65134C13.9295 6.72086 13.9951 6.7936 14.0571 6.86956C14.1192 6.94552 14.1773 7.02433 14.2316 7.10601C14.2859 7.18768 14.336 7.27182 14.382 7.35842C14.428 7.44502 14.4697 7.53367 14.507 7.62436C14.5443 7.71506 14.577 7.80736 14.6053 7.90127C14.6335 7.99519 14.6571 8.09026 14.6759 8.18649C14.6948 8.28271 14.709 8.37963 14.7183 8.47725C14.7277 8.57487 14.7322 8.67271 14.732 8.77077L14.732 8.77327C14.7322 8.87124 14.7277 8.96899 14.7183 9.06651C14.709 9.16404 14.6949 9.26087 14.676 9.35701C14.6572 9.45315 14.6336 9.54813 14.6055 9.64196C14.5773 9.73579 14.5445 9.82801 14.5073 9.91862C14.4701 10.0092 14.4285 10.0978 14.3825 10.1843C14.3366 10.2709 14.2865 10.3549 14.2323 10.4366C14.1781 10.5182 14.12 10.5969 14.0581 10.6728C13.9962 10.7488 13.9307 10.8215 13.8616 10.8909C13.7925 10.9604 13.7202 11.0263 13.6447 11.0887C13.5691 11.1511 13.4907 11.2096 13.4094 11.2643C13.3281 11.319 13.2443 11.3695 13.1581 11.416C13.0718 11.4624 12.9835 11.5046 12.8931 11.5423C12.8027 11.5801 12.7107 11.6134 12.617 11.6421C12.5233 11.6708 12.4285 11.6949 12.3325 11.7143C12.2365 11.7338 12.1397 11.7484 12.0422 11.7584C11.9448 11.7683 11.8471 11.7734 11.7491 11.7737L11.7453 11.7737L11.7453 11.775ZM8.75867 20.5254C8.75867 20.5665 8.76346 20.6075 8.77305 20.6484C8.78264 20.6893 8.79697 20.7299 8.81605 20.7703C8.83514 20.8106 8.85888 20.8504 8.88727 20.8897C8.91567 20.929 8.94858 20.9677 8.98601 21.0057C9.02345 21.0436 9.06522 21.0807 9.11133 21.117C9.15744 21.1532 9.20767 21.1884 9.26201 21.2226C9.31635 21.2568 9.37455 21.2898 9.43661 21.3215C9.49866 21.3533 9.56427 21.3837 9.63344 21.4128C9.70261 21.4418 9.775 21.4694 9.85061 21.4955C9.92623 21.5216 10.0047 21.546 10.086 21.5688C10.1674 21.5917 10.2512 21.6128 10.3374 21.6322C10.4237 21.6515 10.512 21.6691 10.6024 21.6848C10.6928 21.7005 10.7847 21.7144 10.8783 21.7263C10.972 21.7382 11.0667 21.7482 11.1627 21.7562C11.2586 21.7642 11.3552 21.7703 11.4526 21.7743C11.5499 21.7783 11.6475 21.7803 11.7453 21.7803C11.8432 21.7803 11.9407 21.7783 12.0381 21.7743C12.1354 21.7703 12.2321 21.7642 12.328 21.7562C12.4239 21.7482 12.5187 21.7382 12.6123 21.7263C12.7059 21.7144 12.7979 21.7005 12.8883 21.6848C12.9787 21.6691 13.067 21.6515 13.1532 21.6322C13.2395 21.6128 13.3233 21.5917 13.4046 21.5688C13.486 21.546 13.5644 21.5216 13.6401 21.4955C13.7157 21.4694 13.7881 21.4418 13.8572 21.4128C13.9264 21.3837 13.992 21.3533 14.0541 21.3215C14.1161 21.2898 14.1743 21.2568 14.2287 21.2226C14.283 21.1884 14.3332 21.1532 14.3793 21.117C14.4254 21.0807 14.4672 21.0436 14.5047 21.0057C14.5421 20.9677 14.575 20.929 14.6034 20.8897C14.6318 20.8504 14.6555 20.8106 14.6746 20.7703C14.6937 20.7299 14.708 20.6893 14.7176 20.6484C14.7272 20.6075 14.732 20.5665 14.732 20.5254C14.732 20.4843 14.7272 20.4433 14.7176 20.4024C14.708 20.3615 14.6937 20.3209 14.6746 20.2806C14.6555 20.2403 14.6318 20.2005 14.6034 20.1612C14.575 20.1218 14.5421 20.0832 14.5047 20.0452C14.4672 20.0072 14.4254 19.9701 14.3793 19.9339C14.3332 19.8976 14.283 19.8624 14.2287 19.8283C14.1743 19.7941 14.1161 19.7611 14.0541 19.7293C13.992 19.6976 13.9264 19.6672 13.8572 19.6381C13.7881 19.609 13.7157 19.5815 13.6401 19.5554C13.5644 19.5293 13.486 19.5049 13.4046 19.482C13.3233 19.4592 13.2395 19.4381 13.1532 19.4187C13.067 19.3993 12.9787 19.3818 12.8883 19.3661C12.7979 19.3503 12.7059 19.3365 12.6123 19.3246C12.5187 19.3126 12.4239 19.3027 12.328 19.2947C12.2321 19.2866 12.1354 19.2806 12.0381 19.2766C11.9407 19.2726 11.8432 19.2705 11.7453 19.2705C11.6475 19.2705 11.5499 19.2726 11.4526 19.2766C11.3552 19.2806 11.2586 19.2866 11.1627 19.2947C11.0667 19.3027 10.972 19.3126 10.8784 19.3246C10.7847 19.3365 10.6928 19.3503 10.6024 19.3661C10.512 19.3818 10.4237 19.3993 10.3374 19.4187C10.2512 19.4381 10.1674 19.4592 10.086 19.482C10.0047 19.5049 9.92623 19.5293 9.85061 19.5554C9.775 19.5815 9.70261 19.609 9.63344 19.6381C9.56427 19.6672 9.49866 19.6976 9.43661 19.7293C9.37455 19.7611 9.31635 19.7941 9.26201 19.8283C9.20767 19.8624 9.15744 19.8976 9.11133 19.9339C9.06522 19.9701 9.02345 20.0072 8.98601 20.0452C8.94858 20.0832 8.91567 20.1218 8.88727 20.1612C8.85888 20.2005 8.83514 20.2403 8.81605 20.2806C8.79697 20.3209 8.78264 20.3615 8.77305 20.4024C8.76346 20.4433 8.75867 20.4843 8.75867 20.5254L8.75867 20.5254
Z"
fill=
"rgb(5,95,194)"
fill-rule=
"nonzero"
/>
<rect
id=
"
位置 1
"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"矢量 5
44"
d=
"M12 3C8.17162 3 5.05724 6.114 5.05762 9.942C5.05762 11.364 5.48474 12.7312 6.28424 13.8821C6.32437 13.9511 6.36487 14.0179 6.41249 14.0828L11.4799 20.7623C11.6175 20.9156 11.8024 21 12.0004 21C12.1957 21 12.3817 20.9149 12.5426 20.7345L17.5867 14.0816C17.6366 14.0156 17.679 13.9432 17.7022 13.9009C18.5134 12.7339 18.9427 11.3651 18.9427 9.94275C18.9427 6.114 15.8284 3 12 3ZM12 12.4249C10.6327 12.4249 9.52012 11.3123 9.52012 9.94462C9.52012 8.57737 10.6327 7.46513 12 7.46513C13.3672 7.46513 14.4799 8.57775 14.4799 9.94462C14.4799 11.3123 13.3672 12.4249 12 12.4249
Z"
fill=
"rgb(5,95,194)"
fill-rule=
"nonzero"
/>
</svg>
src/views/marketAccessRestrictions/marketAccessHome/assets/icons/icon5.svg
浏览文件 @
72613fb4
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
>
<rect
id=
"热门"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<g
id=
"组合 130"
>
<path
id=
"矢量 473"
d=
"M8.5148 21C7.29316 18.4839 7.95351 17.0645 8.91101 15.7419C9.93455 14.2258 10.1987 12.8065 10.1987 12.8065C10.1987 12.8065 11.0241 13.8065 10.727 15.4516C12.1467 13.871 12.3778 11.3871 12.2127 10.4516C15.4154 12.6452 16.8352 17.4516 14.9532 20.9677C24.8253 15.4516 17.3964 7.25807 16.1088 6.3871C16.571 7.32258 16.637 8.90323 15.7126 9.64516C14.2268 4.06452 10.5619 3 10.5619 3C11.0241 5.80645 9.01006 8.87097 7.09506 11.1935C7.02903 10.0645 6.96299 9.32258 6.33566 8.19355C6.2036 10.2581 4.61877 11.9032 4.15653 13.9677C3.56221 16.8065 4.58575 18.8064 8.5148 21Z"
fill=
"rgb(5,95,194)"
fill-rule=
"nonzero"
/>
</g>
<svg
viewBox=
"0 0 24 24"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"24.000000"
height=
"24.000000"
fill=
"none"
customFrame=
"#000000"
>
<rect
id=
"容器 239"
width=
"24.000000"
height=
"24.000000"
x=
"0.000000"
y=
"0.000000"
/>
<path
id=
"合并"
d=
"M17.822 5.13656C19.2945 6.38564 20.3262 8.07517 20.7648 9.95562C21.2033 11.8361 21.0255 13.8077 20.2576 15.5793C19.4896 17.351 18.1722 18.8286 16.5 19.7941L14.25 15.897C15.0861 15.4142 15.7448 14.6754 16.1288 13.7896C16.5128 12.9038 16.6017 11.918 16.3824 10.9777C16.1631 10.0375 15.6472 9.19274 14.911 8.5682C14.1747 7.94366 13.2572 7.57247 12.2938 7.50944L12.5875 3.01904C14.5143 3.14509 16.3495 3.88748 17.822 5.13656ZM4.97144 6.37851C4.19446 7.35001 3.62731 8.47202 3.30579 9.67374C2.98428 10.8755 2.91538 12.1308 3.10345 13.3605L7.55172 12.6802C7.45769 12.0653 7.49214 11.4377 7.6529 10.8368C7.81365 10.2359 8.09723 9.67493 8.48572 9.18918C8.87422 8.70343 9.35919 8.3035 9.91003 8.01462C10.4609 7.72574 11.0656 7.5542 11.6861 7.51081L11.3722 3.02177C10.1312 3.10855 8.92174 3.45164 7.82006 4.0294C6.71837 4.60715 5.74843 5.40702 4.97144 6.37851ZM11.6528 20.9931C10.4138 20.9453 9.19809 20.642 8.08187 20.1022C6.96565 19.5624 5.973 18.7978 5.16618 17.8564C4.35936 16.9149 3.75577 15.8169 3.39326 14.6312L7.69663 13.3155C7.87788 13.9084 8.17968 14.4574 8.58309 14.9281C8.9865 15.3988 9.48283 15.7811 10.0409 16.051C10.599 16.3209 11.2069 16.4726 11.8264 16.4965C12.4459 16.5204 13.0636 16.4161 13.6409 16.19L15.2817 20.3802C14.1272 20.8323 12.8917 21.041 11.6528 20.9931Z"
fill=
"rgb(5,95,194)"
fill-rule=
"evenodd"
/>
</svg>
src/views/marketAccessRestrictions/marketAccessHome/com/AiReport.vue
0 → 100644
浏览文件 @
72613fb4
<
template
>
<div
class=
"view-box"
@
mouseenter=
"handleMouseEnter"
@
mouseleave=
"handleMouseLeave"
>
<AiButton
/>
<AiPane
:aiContent=
"myParams.content"
/>
</div>
</
template
>
<
script
setup
lang=
"ts"
name=
"AiReport"
>
import
{
reactive
}
from
"vue"
import
AiButton
from
'@/components/base/Ai/AiButton/index.vue'
;
import
AiPane
from
'@/components/base/Ai/AiPane/index.vue'
;
const
myParams
=
reactive
({
data
:
""
,
content
:
""
,
isState
:
false
,
})
const
onDataInfo
=
(
event
:
any
)
=>
{
console
.
log
(
"需要分析的数据"
,
event
);
myParams
.
isState
=
false
;
myParams
.
data
=
JSON
.
stringify
(
event
);
}
let
controller
=
null
;
let
reader
=
null
;
// 鼠标进入监听
const
handleMouseEnter
=
async
()
=>
{
if
(
myParams
.
isState
)
return
;
myParams
.
content
=
"正在生成..."
;
if
(
controller
)
controller
.
abort
();
controller
=
new
AbortController
();
try
{
const
res
=
await
fetch
(
'/aiAnalysis/chart_interpretation'
,
{
method
:
'POST'
,
headers
:
{
"X-API-Key"
:
"aircasKEY19491001"
,
'Content-Type'
:
'application/json'
,
},
body
:
JSON
.
stringify
({
text
:
myParams
.
data
}),
signal
:
controller
.
signal
});
if
(
!
res
.
ok
)
throw
new
Error
(
`HTTP
${
res
.
status
}
`
);
reader
=
res
.
body
.
getReader
();
const
decoder
=
new
TextDecoder
();
while
(
true
)
{
const
{
done
,
value
}
=
await
reader
.
read
();
if
(
done
)
break
;
const
chunk
=
decoder
.
decode
(
value
,
{
stream
:
true
});
const
match
=
chunk
.
match
(
/"解读":
\s
*"
([^
"
]
*
)
"/
);
if
(
match
?.[
1
])
{
myParams
.
content
=
match
[
1
];
myParams
.
isState
=
true
;
return
;
// 获取到结果直接返回
}
}
myParams
.
content
=
"未获取到解读内容"
;
}
catch
(
err
)
{
myParams
.
content
=
"系统异常,生成失败"
;
}
finally
{
reader
?.
cancel
();
reader
=
null
;
}
};
// 鼠标离开监听
const
handleMouseLeave
=
()
=>
{
controller
?.
abort
();
reader
?.
cancel
();
controller
=
null
;
reader
=
null
;
};
defineExpose
({
onDataInfo
})
</
script
>
<
style
scoped
lang=
"scss"
>
.view-box
{
position
:
absolute
;
right
:
0px
;
bottom
:
15px
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
}
&
:hover
{
width
:
100%
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
}
}
}
</
style
>
\ No newline at end of file
src/views/marketAccessRestrictions/marketAccessHome/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/marketAccessHome/utils/barChart1.js
浏览文件 @
72613fb4
...
...
@@ -83,13 +83,8 @@ const getBarChart = (nameList, valueList) => {
xAxis
:
index
,
yAxis
:
valueList
[
index
],
symbol
:
`image://
${
item
.
img
}
`
,
symbolSize
:
20
,
symbolCircle
:
20
,
itemStyle
:
{
borderRadius
:
'50%'
,
borderColor
:
'#fff'
,
borderWidth
:
2
}
symbolSize
:
[
20
,
20
],
symbolOffset
:
[
0
,
10
]
});
});
return
data
;
...
...
src/views/marketAccessRestrictions/marketAccessHome/utils/radarChart.js
浏览文件 @
72613fb4
const
getRadarChart
=
(
data
)
=>
{
// const indicators = [
// { name: "集成电路", max: 10 },
// { name: "能源领域", max: 10 },
// { name: "量子科技", max: 10 },
// { name: "通信网络", max: 10 },
// { name: "人工智能", max: 10 },
// { name: "生物科技", max: 10 }
// ];
const
indicators
=
data
.
title
.
map
(
item
=>
{
return
{
name
:
item
,
max
:
data
.
maxNum
}
})
const
data337
=
[
9
,
6
,
6
,
6
,
9
,
7
];
const
data301
=
[
5
,
3
,
7
,
8
,
7
,
9
];
const
data232
=
[
4
,
10
,
3
,
4
,
2
,
5
];
const
option
=
{
color
:
[
"rgba(5, 95, 194, 1)"
,
"rgba(250, 140, 22, 1)"
,
"rgba(146, 84, 222, 1)"
],
legend
:
{
top
:
8
,
left
:
30
,
left
:
'center'
,
icon
:
"circle"
,
itemWidth
:
12
,
itemHeight
:
12
,
...
...
src/views/marketAccessRestrictions/marketAccessLayout/case/232/index.vue
浏览文件 @
72613fb4
...
...
@@ -8,8 +8,7 @@
<div
class=
"dropdown-filters"
>
<el-select
v-model=
"filterStage"
placeholder=
"全部阶段"
class=
"filter-select"
clearable
>
<el-option
label=
"全部阶段"
value=
""
/>
<el-option
label=
"调查中"
value=
"1"
/>
<el-option
label=
"调查结束"
value=
"0"
/>
<el-option
v-for=
"item in stateList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
<!--
<el-select
v-model=
"filterParty"
placeholder=
"全部原告/被告"
class=
"filter-select"
clearable
>
<el-option
label=
"全部原告/被告"
value=
""
/>
...
...
@@ -19,17 +18,7 @@
</el-select>
-->
</div>
</div>
<div
class=
"select-box"
>
<el-select
v-model=
"isSort"
placeholder=
"发布时间"
style=
"width: 166px"
>
<template
#
prefix
>
<div
style=
"display: flex; align-items: center; height: 100%"
>
<img
src=
"@/assets/icons/jiangxu1.png"
style=
"width: 14px; height: 14px"
/>
</div>
</
template
>
<el-option
label=
"按发布时间降序"
value=
"desc"
/>
<el-option
label=
"按发布时间升序"
value=
"asc"
/>
</el-select>
</div>
<TimeSortSelectBox
@
handle-px-change=
"handlePxChange"
></TimeSortSelectBox>
</div>
<div
class=
"wrapper-main"
>
<div
class=
"left"
>
...
...
@@ -89,25 +78,44 @@
<
script
setup
>
import
{
ref
,
onMounted
,
watch
}
from
"vue"
;
import
{
Search
}
from
"@element-plus/icons-vue"
;
import
{
getSearchAllArea
,
getSearchAllYear
,
getSurveyList
}
from
"@/api/marketAccessRestrictions"
;
import
{
getHylyList
,
getSearchAllYear
,
getSurveyList
,
getAllProgressStatus
,
}
from
"@/api/marketAccessRestrictions"
;
import
SurveyHistory
from
"@/views/marketAccessRestrictions/com/SurveyHistory.vue"
import
TimeSortSelectBox
from
'@/components/base/TimeSortSelectBox/index.vue'
;
// 顶部过滤项
const
searchText
=
ref
(
""
);
const
filterStage
=
ref
(
""
);
const
filterParty
=
ref
(
""
);
const
filterReason
=
ref
(
""
);
const
isSort
=
ref
(
'desc'
);
// 降序
const
isSort
=
ref
(
true
);
const
handlePxChange
=
(
event
)
=>
{
isSort
.
value
=
event
==
1
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
}
;
// 获取阶段列表
const
stateList
=
ref
([]);
const
onAllProgressStatus
=
async
()
=>
{
try
{
const
res
=
await
getAllProgressStatus
();
console
.
log
(
"阶段列表"
,
res
)
if
(
res
.
code
===
200
)
stateList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
}
// 科技领域过滤
const
surveyAreaList
=
ref
([]);
const
checkedAreaList
=
ref
([
''
]);
const
handleGetSearchAllArea
=
async
()
=>
{
try
{
const
res
=
await
getSearchAllArea
({
sortCode
:
"232"
});
if
(
res
.
code
===
200
)
{
surveyAreaList
.
value
=
res
.
data
.
map
(
item
=>
({
name
:
item
.
AREANAME
,
id
:
item
.
AREACODE
}));
}
const
res
=
await
getHylyList
();
if
(
res
.
code
===
200
)
surveyAreaList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
surveyAreaList
.
value
.
unshift
({
name
:
"全部领域"
,
id
:
""
}
);
}
;
...
...
@@ -163,17 +171,23 @@ const handleFetchSurveyList = async () => {
sortCode
:
"232"
,
publishYear
:
checkedYearList
.
value
.
join
(
','
)
||
null
,
Area
:
checkedAreaList
.
value
.
join
(
','
)
||
null
,
caseStatus
:
filterStage
.
value
,
caseStatus
:
filterStage
.
value
||
null
,
keywords
:
searchText
.
value
||
null
,
sortField
:
"date"
,
sortOrder
:
isSort
.
value
sortOrder
:
isSort
.
value
?
"desc"
:
"asc"
}
;
const
res
=
await
getSurveyList
(
params
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
surveyInfoList
.
value
=
res
.
data
.
content
;
totalDiscussNum
.
value
=
res
.
data
.
totalElements
||
0
;
}
else
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
listLoading
.
value
=
false
;
}
;
...
...
@@ -188,14 +202,16 @@ const handleSearch = () => {
}
;
// 监听过滤条件
watch
([
isSort
,
filterStage
,
filterParty
,
filterReason
],
()
=>
{
watch
([
filterStage
,
filterParty
,
filterReason
],
()
=>
{
if
(
isInitializing
.
value
)
return
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
}
);
onMounted
(
async
()
=>
{
await
Promise
.
all
([
handleGetSearchAllArea
(),
handleGetSearchAllYear
()]);
onMounted
(()
=>
{
onAllProgressStatus
()
handleGetSearchAllArea
()
handleGetSearchAllYear
()
isInitializing
.
value
=
false
;
handleFetchSurveyList
();
}
);
...
...
@@ -287,6 +303,7 @@ onMounted(async () => {
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
color
:
var
(
--
text
-
primary
-
65
-
color
);
font
-
weight
:
400
;
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessLayout/case/301/index.vue
浏览文件 @
72613fb4
...
...
@@ -5,18 +5,14 @@
<div
class=
"search-box"
>
<el-input
v-model=
"searchText"
style=
"width: 360px; height: 32px"
placeholder=
"搜索调查案件"
@
keyup
.
enter=
"handleSearch"
:suffix-icon=
"Search"
></el-input>
</div>
<div
class=
"dropdown-filters"
>
<el-select
v-model=
"filterStage"
placeholder=
"全部阶段"
class=
"filter-select"
clearable
@
change=
"handleSearch()"
>
<el-option
label=
"全部阶段"
value=
""
/>
<el-option
v-for=
"item in stateList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</div>
</div>
<div
class=
"select-box"
>
<el-select
v-model=
"isSort"
placeholder=
"发布时间"
style=
"width: 166px"
>
<template
#
prefix
>
<div
style=
"display: flex; align-items: center; height: 100%"
>
<img
src=
"@/assets/icons/jiangxu1.png"
style=
"width: 14px; height: 14px"
/>
</div>
</
template
>
<el-option
label=
"按发布时间降序"
value=
"desc"
/>
<el-option
label=
"按发布时间升序"
value=
"asc"
/>
</el-select>
</div>
<TimeSortSelectBox
@
handle-px-change=
"handlePxChange"
></TimeSortSelectBox>
</div>
<div
class=
"wrapper-main"
>
<div
class=
"left"
>
...
...
@@ -67,21 +63,41 @@
<
script
setup
>
import
{
ref
,
onMounted
,
watch
}
from
"vue"
;
import
{
Search
}
from
"@element-plus/icons-vue"
;
import
{
getSearchAllArea
,
getSearchAllYear
,
getSurveyList
}
from
"@/api/marketAccessRestrictions"
;
import
{
getHylyList
,
getSearchAllYear
,
getSurveyList
,
getAllProgressStatus
,
}
from
"@/api/marketAccessRestrictions"
;
import
SurveyHistory
from
"@/views/marketAccessRestrictions/com/SurveyHistory.vue"
import
TimeSortSelectBox
from
'@/components/base/TimeSortSelectBox/index.vue'
;
const
searchText
=
ref
(
''
);
// 搜索文本
const
isSort
=
ref
(
'desc'
);
// 降序
const
filterStage
=
ref
(
""
);
const
isSort
=
ref
(
true
);
const
handlePxChange
=
(
event
)
=>
{
isSort
.
value
=
event
==
1
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
}
;
// 获取阶段列表
const
stateList
=
ref
([]);
const
onAllProgressStatus
=
async
()
=>
{
try
{
const
res
=
await
getAllProgressStatus
();
console
.
log
(
"阶段列表"
,
res
)
if
(
res
.
code
===
200
)
stateList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
}
// 科技领域过滤
const
surveyAreaList
=
ref
([]);
const
checkedAreaList
=
ref
([
''
]);
const
handleGetSearchAllArea
=
async
()
=>
{
try
{
const
res
=
await
getSearchAllArea
({
sortCode
:
"301"
});
if
(
res
.
code
===
200
)
{
surveyAreaList
.
value
=
res
.
data
.
map
(
item
=>
({
name
:
item
.
AREANAME
,
id
:
item
.
AREACODE
}));
}
const
res
=
await
getHylyList
();
if
(
res
.
code
===
200
)
surveyAreaList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
surveyAreaList
.
value
.
unshift
({
name
:
"全部领域"
,
id
:
""
}
);
}
;
...
...
@@ -137,16 +153,23 @@ const handleFetchSurveyList = async () => {
sortCode
:
"301"
,
publishYear
:
checkedYearList
.
value
.
join
(
','
)
||
null
,
Area
:
checkedAreaList
.
value
.
join
(
','
)
||
null
,
caseStatus
:
filterStage
.
value
||
null
,
keywords
:
searchText
.
value
||
null
,
sortField
:
"date"
,
sortOrder
:
isSort
.
value
sortOrder
:
isSort
.
value
?
"desc"
:
"asc"
}
;
const
res
=
await
getSurveyList
(
params
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
surveyInfoList
.
value
=
res
.
data
.
content
;
totalDiscussNum
.
value
=
res
.
data
.
totalElements
||
0
;
}
else
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
listLoading
.
value
=
false
;
}
;
...
...
@@ -160,14 +183,10 @@ const handleSearch = () => {
handleFetchSurveyList
();
}
;
watch
([
isSort
],
()
=>
{
if
(
isInitializing
.
value
)
return
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
});
onMounted
(
async
()
=>
{
await
Promise
.
all
([
handleGetSearchAllArea
(),
handleGetSearchAllYear
()]);
onMounted
(()
=>
{
onAllProgressStatus
()
handleGetSearchAllArea
()
handleGetSearchAllYear
()
isInitializing
.
value
=
false
;
handleFetchSurveyList
();
}
);
...
...
@@ -258,6 +277,7 @@ onMounted(async () => {
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
color
:
var
(
--
text
-
primary
-
65
-
color
);
font
-
weight
:
400
;
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessLayout/case/337/index.vue
浏览文件 @
72613fb4
...
...
@@ -8,8 +8,7 @@
<div
class=
"dropdown-filters"
>
<el-select
v-model=
"filterStage"
placeholder=
"全部阶段"
class=
"filter-select"
clearable
>
<el-option
label=
"全部阶段"
value=
""
/>
<el-option
label=
"调查中"
value=
"1"
/>
<el-option
label=
"调查结束"
value=
"0"
/>
<el-option
v-for=
"item in stateList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
<!--
<el-select
v-model=
"filterParty"
placeholder=
"全部原告/被告"
class=
"filter-select"
clearable
>
<el-option
label=
"全部原告/被告"
value=
""
/>
...
...
@@ -19,17 +18,7 @@
</el-select>
-->
</div>
</div>
<div
class=
"select-box"
>
<el-select
v-model=
"isSort"
placeholder=
"发布时间"
style=
"width: 166px"
>
<template
#
prefix
>
<div
style=
"display: flex; align-items: center; height: 100%"
>
<img
src=
"@/assets/icons/jiangxu1.png"
style=
"width: 14px; height: 14px"
/>
</div>
</
template
>
<el-option
label=
"按发布时间降序"
value=
"desc"
/>
<el-option
label=
"按发布时间升序"
value=
"asc"
/>
</el-select>
</div>
<TimeSortSelectBox
@
handle-px-change=
"handlePxChange"
></TimeSortSelectBox>
</div>
<div
class=
"wrapper-main"
>
<div
class=
"left"
>
...
...
@@ -90,27 +79,47 @@
<
script
setup
>
import
{
ref
,
onMounted
,
watch
}
from
"vue"
;
import
{
Search
}
from
"@element-plus/icons-vue"
;
import
{
getSearchAllArea
,
getSearchAllYear
,
getSurveyList
,
getSearchAllCountry
}
from
"@/api/marketAccessRestrictions"
;
import
{
getHylyList
,
getSearchAllYear
,
getSurveyList
,
getSearchAllCountry
,
getAllProgressStatus
,
}
from
"@/api/marketAccessRestrictions"
;
import
AnalysisBox
from
"@/components/base/boxBackground/analysisBox.vue"
import
SurveyHistory
from
"@/views/marketAccessRestrictions/com/SurveyHistory.vue"
import
TimeSortSelectBox
from
'@/components/base/TimeSortSelectBox/index.vue'
;
// 顶部过滤项
const
searchText
=
ref
(
""
);
const
filterStage
=
ref
(
""
);
const
filterParty
=
ref
(
""
);
const
filterReason
=
ref
(
""
);
const
isSort
=
ref
(
'desc'
);
// 降序
const
isSort
=
ref
(
true
);
const
handlePxChange
=
(
event
)
=>
{
isSort
.
value
=
event
==
1
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
}
;
// 获取阶段列表
const
stateList
=
ref
([]);
const
onAllProgressStatus
=
async
()
=>
{
try
{
const
res
=
await
getAllProgressStatus
();
console
.
log
(
"阶段列表"
,
res
)
if
(
res
.
code
===
200
)
stateList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
}
// 科技领域过滤
const
surveyAreaList
=
ref
([]);
const
checkedAreaList
=
ref
([
''
]);
const
handleGetSearchAllArea
=
async
()
=>
{
try
{
const
res
=
await
getSearchAllArea
({
sortCode
:
"337"
});
if
(
res
.
code
===
200
)
{
surveyAreaList
.
value
=
res
.
data
.
map
(
item
=>
({
name
:
item
.
AREANAME
,
id
:
item
.
AREACODE
}));
}
const
res
=
await
getHylyList
();
if
(
res
.
code
===
200
)
surveyAreaList
.
value
=
res
.
data
;
}
catch
(
error
)
{
}
surveyAreaList
.
value
.
unshift
({
name
:
"全部领域"
,
id
:
""
}
);
}
;
...
...
@@ -192,14 +201,20 @@ const handleFetchSurveyList = async () => {
caseStatus
:
filterStage
.
value
||
null
,
keywords
:
searchText
.
value
||
null
,
sortField
:
"date"
,
sortOrder
:
isSort
.
value
sortOrder
:
isSort
.
value
?
"desc"
:
"asc"
}
;
const
res
=
await
getSurveyList
(
params
);
if
(
res
.
code
===
200
)
{
surveyInfoList
.
value
=
res
.
data
?.
content
||
[];
totalDiscussNum
.
value
=
res
.
data
?.
totalElements
||
0
;
}
else
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
surveyInfoList
.
value
=
[]
totalDiscussNum
.
value
=
0
}
listLoading
.
value
=
false
;
}
;
...
...
@@ -214,14 +229,17 @@ const handleSearch = () => {
}
;
// 监听过滤条件
watch
([
isSort
,
filterStage
,
filterParty
,
filterReason
],
()
=>
{
watch
([
filterStage
,
filterParty
,
filterReason
],
()
=>
{
if
(
isInitializing
.
value
)
return
;
currentPage
.
value
=
1
;
handleFetchSurveyList
();
}
);
onMounted
(
async
()
=>
{
await
Promise
.
all
([
handleGetSearchAllArea
(),
handleGetSearchAllYear
(),
handleGetSearchAllCountry
()]);
onMounted
(()
=>
{
onAllProgressStatus
()
handleGetSearchAllArea
()
handleGetSearchAllYear
()
handleGetSearchAllCountry
()
isInitializing
.
value
=
false
;
handleFetchSurveyList
();
}
);
...
...
@@ -315,6 +333,7 @@ onMounted(async () => {
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
color
:
var
(
--
text
-
primary
-
65
-
color
);
font
-
weight
:
400
;
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessLayout/index.vue
浏览文件 @
72613fb4
...
...
@@ -92,7 +92,7 @@ const handleClickBtn = item => {
const
codeInfo
=
reactive
({
sortCode
:
route
.
query
.
id
,
sortName
:
"调查
主页
"
,
sortName
:
"调查"
,
sortImageUrl
:
""
,
sortDescription
:
""
,
})
...
...
@@ -102,7 +102,7 @@ const onSurvyInfo = async () => {
if
(
res
.
code
==
200
)
{
Object
.
assign
(
codeInfo
,
res
.
data
)
}
document
.
title
=
codeInfo
.
sortName
;
document
.
title
=
codeInfo
.
sortName
+
'概览'
;
}
onMounted
(()
=>
{
...
...
@@ -119,9 +119,8 @@ onMounted(() => {
.page-box
{
width
:
100%
;
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
background
:
rgba
(
255
,
255
,
255
,
1
);
overflow-y
:
auto
;
.page-top
{
width
:
1600px
;
margin
:
0
auto
;
...
...
@@ -241,8 +240,6 @@ onMounted(() => {
border-top
:
1px
solid
rgba
(
230
,
231
,
232
,
1
);
background-color
:
#f7f8f9
;
width
:
100%
;
height
:
20px
;
flex
:
auto
;
}
}
</
style
>
\ No newline at end of file
src/views/marketAccessRestrictions/marketAccessLayout/overview/232/index.vue
浏览文件 @
72613fb4
...
...
@@ -32,11 +32,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart1"
><
/div
>
<
TipTab
text
=
"美对华232调查案件的数量变化趋势,数据来源:美国商务部官网"
style
=
"margin-top: 16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content1"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国商务部官网"
style
=
"margin-top: 16px;"
/>
<
AiReport
ref
=
"refAiReport1"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -49,11 +46,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart2"
><
/div
>
<
TipTab
text
=
"美对华232调查案件的领域分布情况,数据来源:美国商务部官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content2"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国商务部官网"
/>
<
AiReport
ref
=
"refAiReport2"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -68,11 +62,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart3"
><
/div
>
<
TipTab
text
=
"美对华232调查案件导致的关税变化分布,数据来源:美国商务部官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content3"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国商务部官网"
/>
<
AiReport
ref
=
"refAiReport3"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -85,11 +76,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart4"
><
/div
>
<
TipTab
text
=
"美232调查所涉及的国家分布情况,数据来源:美国商务部官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content4"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国商务部官网"
/>
<
AiReport
ref
=
"refAiReport4"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -108,21 +96,15 @@ import {
import
createLineChart
from
"@/views/marketAccessRestrictions/utils/baseLineChart"
;
import
createPieChart
from
"@/views/marketAccessRestrictions/utils/basePiechart.js"
;
import
AiButton
from
'@/components/base/Ai/AiButton/index.vue'
;
import
AiPane
from
'@/components/base/Ai/AiPane/index.vue'
;
import
{
getNearYearList
,
getAIReport
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
import
AiReport
from
'@/views/marketAccessRestrictions/marketAccessHome/com/AiReport.vue'
;
import
{
getNearYearList
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
const
yearList
=
getNearYearList
();
// 获取AI智能报告
const
aiContent
=
reactive
({
content1
:
"正在生成..."
,
content2
:
"正在生成..."
,
content3
:
"正在生成..."
,
content4
:
"正在生成..."
,
}
)
const
onAIReport
=
(
data
,
key
)
=>
{
getAIReport
(
data
).
then
(
res
=>
{
aiContent
[
key
]
=
res
}
)
}
const
refAiReport1
=
ref
(
null
)
const
refAiReport2
=
ref
(
null
)
const
refAiReport3
=
ref
(
null
)
const
refAiReport4
=
ref
(
null
)
// 数量统计
const
totalCaseNum
=
ref
(
0
)
...
...
@@ -163,7 +145,7 @@ const onStatNum = async (event) => {
chartData
.
title
=
[];
chartData
.
list
=
[];
}
onAIReport
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
,
"content1"
)
refAiReport1
.
value
?.
onDataInfo
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createLineChart
(
chart1
,
chartData
)
}
);
box1Loading
.
value
=
false
;
}
...
...
@@ -188,7 +170,7 @@ const handleGetStatArea = async () => {
}
catch
(
error
)
{
chartData
=
[];
}
onAIReport
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
,
"content2"
)
refAiReport2
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
chart2
,
chartData
)
}
);
box2Loading
.
value
=
false
;
}
;
...
...
@@ -218,7 +200,7 @@ const onSearchTariff = async () => {
}
catch
(
error
)
{
chartData
=
[];
}
onAIReport
({
type
:
"环形图"
,
name
:
"关税变化分布"
,
data
:
chartData
}
,
"content3"
)
refAiReport3
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"关税变化分布"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
chart3
,
chartData
)
}
);
box3Loading
.
value
=
false
;
}
...
...
@@ -243,7 +225,7 @@ const handleGetSearchCountry = async () => {
}
catch
(
error
)
{
chartData
=
[]
}
onAIReport
({
type
:
"环形图"
,
name
:
"国家分布情况"
,
data
:
chartData
}
,
"content4"
)
refAiReport4
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"国家分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
chart4
,
chartData
)
}
);
box4Loading
.
value
=
false
;
}
;
...
...
@@ -350,28 +332,6 @@ onMounted(() => {
height
:
20
px
;
flex
:
auto
;
}
.
ai
-
pane
{
position
:
absolute
;
right
:
0
px
;
bottom
:
15
px
;
z
-
index
:
2
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
none
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
flex
;
}
&
:
hover
{
width
:
100
%
;
bottom
:
0
px
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
block
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
none
;
}
}
}
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessLayout/overview/301/index.vue
浏览文件 @
72613fb4
...
...
@@ -8,11 +8,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"box1Chart"
><
/div
>
<
TipTab
text
=
"美对华301调查案件的数量变化趋势,数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content1"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px"
/>
<
AiReport
ref
=
"refAiReport1"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -25,11 +22,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
id
=
"box2Chart"
><
/div
>
<
TipTab
text
=
"美301调查所涉及的国家分布情况,数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content2"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px"
/>
<
AiReport
ref
=
"refAiReport2"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -39,11 +33,8 @@
<
AnalysisBox
title
=
"调查方向及结果分布"
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
id
=
"box3Chart"
><
/div
>
<
TipTab
text
=
"美301调查方向及结果分布情况,数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content3"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国贸易代表办公室官网"
style
=
"margin-top: 16px;"
/>
<
AiReport
ref
=
"refAiReport3"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -56,11 +47,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"box4Chart"
><
/div
>
<
TipTab
text
=
"美对华301调查案件的领域分布情况,数据来源:美国贸易代表办公室官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content4"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国贸易代表办公室官网"
/>
<
AiReport
ref
=
"refAiReport4"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -71,7 +59,7 @@
<
script
setup
>
import
{
ref
,
onMounted
,
nextTick
,
reactive
}
from
"vue"
;
import
setChart
from
"@/utils/setChart"
;
import
getBarChart
from
"
./utils/barChart
"
;
import
getBarChart
from
"
@/views/marketAccessRestrictions/marketAccessHome/utils/barChart1.js
"
;
import
getSankeyChart
from
"./utils/sankey"
;
import
{
getSearchCountry
,
...
...
@@ -81,21 +69,15 @@ import {
}
from
"@/api/marketAccessRestrictions"
;
import
createLineChart
from
"@/views/marketAccessRestrictions/utils/baseLineChart"
;
import
createPieChart
from
"@/views/marketAccessRestrictions/utils/basePiechart.js"
;
import
AiButton
from
'@/components/base/Ai/AiButton/index.vue'
;
import
AiPane
from
'@/components/base/Ai/AiPane/index.vue'
;
import
{
getNearYearList
,
getAIReport
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
import
AiReport
from
'@/views/marketAccessRestrictions/marketAccessHome/com/AiReport.vue'
;
import
{
getNearYearList
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
const
yearList
=
getNearYearList
();
// 获取AI智能报告
const
aiContent
=
reactive
({
content1
:
"正在生成..."
,
content2
:
"正在生成..."
,
content3
:
"正在生成..."
,
content4
:
"正在生成..."
,
}
)
const
onAIReport
=
(
data
,
key
)
=>
{
getAIReport
(
data
).
then
(
res
=>
{
aiContent
[
key
]
=
res
}
)
}
const
refAiReport1
=
ref
(
null
)
const
refAiReport2
=
ref
(
null
)
const
refAiReport3
=
ref
(
null
)
const
refAiReport4
=
ref
(
null
)
const
inProgressCount
=
ref
(
0
);
...
...
@@ -122,7 +104,7 @@ const handleGetStatNum = async () => {
chartData
.
list
=
[]
inProgressCount
.
value
=
0
}
onAIReport
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
,
"content1"
)
refAiReport1
.
value
?.
onDataInfo
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createLineChart
(
box1Chart
,
chartData
)
}
)
box1Loading
.
value
=
false
;
}
;
...
...
@@ -153,7 +135,7 @@ const handleGetSearchCountry = async () => {
chartData
.
title
=
[]
chartData
.
data
=
[]
}
onAIReport
({
type
:
"柱状图"
,
name
:
"国家分布情况"
,
data
:
chartData
}
,
"content2"
)
refAiReport2
.
value
?.
onDataInfo
({
type
:
"柱状图"
,
name
:
"国家分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
const
box2Chart
=
getBarChart
(
chartData
.
title
,
chartData
.
data
);
setChart
(
box2Chart
,
"box2Chart"
);
...
...
@@ -190,7 +172,7 @@ const handleGetSearchDirection = async () => {
chartData
.
nodes
=
[];
chartData
.
links
=
[];
}
onAIReport
({
type
:
"桑基图"
,
name
:
"调查方向及结果分布"
,
data
:
chartData
}
,
"content3"
)
refAiReport3
.
value
?.
onDataInfo
({
type
:
"桑基图"
,
name
:
"调查方向及结果分布"
,
data
:
chartData
}
)
nextTick
(()
=>
{
const
box3Chart
=
getSankeyChart
(
chartData
.
nodes
,
chartData
.
links
);
setChart
(
box3Chart
,
"box3Chart"
);
...
...
@@ -218,7 +200,7 @@ const handleGetStatArea = async () => {
}
catch
(
error
)
{
chartData
=
[]
}
onAIReport
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
,
"content4"
)
refAiReport4
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
box4Chart
,
chartData
)
}
)
box4Loading
.
value
=
false
;
}
;
...
...
@@ -260,28 +242,6 @@ onMounted(() => {
height
:
20
px
;
flex
:
auto
;
}
.
ai
-
pane
{
position
:
absolute
;
right
:
0
px
;
bottom
:
15
px
;
z
-
index
:
2
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
none
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
flex
;
}
&
:
hover
{
width
:
100
%
;
bottom
:
0
px
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
block
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
none
;
}
}
}
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessLayout/overview/337/index.vue
浏览文件 @
72613fb4
...
...
@@ -32,11 +32,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart1"
><
/div
>
<
TipTab
text
=
"美对华337调查案件的数量变化趋势,数据来源:美国国际贸易委员会官网"
style
=
"margin-top: 16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content1"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国国际贸易委员会官网"
style
=
"margin-top: 16px;"
/>
<
AiReport
ref
=
"refAiReport1"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -49,11 +46,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart2"
><
/div
>
<
TipTab
text
=
"美对华337调查案件的领域分布情况,数据来源:美国国际贸易委员会官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content2"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国国际贸易委员会官网"
/>
<
AiReport
ref
=
"refAiReport2"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -84,11 +78,8 @@
<
/div
>
<
div
class
=
"map-box-right"
id
=
"chartMap"
><
/div
>
<
/div
>
<
TipTab
text
=
"美对华337调查案件的中国实体分布情况,数据来源:美国国际贸易委员会官网"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content3"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国国际贸易委员会官网"
/>
<
AiReport
ref
=
"refAiReport3"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -101,11 +92,8 @@
<
/template
>
<
div
class
=
"box-main"
>
<
div
class
=
"box-head"
ref
=
"chart4"
><
/div
>
<
TipTab
text
=
"美对华337调查案件的调查结果分布情况,数据来源:美国国际贸易委员会官网"
style
=
"margin-top: -16px;"
/>
<
div
class
=
"ai-pane"
>
<
AiButton
/>
<
AiPane
:
aiContent
=
"aiContent.content4"
/>
<
/div
>
<
TipTab
text
=
"数据来源:美国国际贸易委员会官网"
/>
<
AiReport
ref
=
"refAiReport4"
><
/AiReport
>
<
/div
>
<
/AnalysisBox
>
<
/div
>
...
...
@@ -129,21 +117,15 @@ import createLineChart from "@/views/marketAccessRestrictions/utils/baseLineChar
import
createPieChart
from
"@/views/marketAccessRestrictions/utils/basePiechart.js"
;
import
getBarChart
from
"./utils/barChart"
;
import
getMapChart
from
"./utils/mapChart"
;
import
AiButton
from
'@/components/base/Ai/AiButton/index.vue'
;
import
AiPane
from
'@/components/base/Ai/AiPane/index.vue'
;
import
{
getNearYearList
,
getAIReport
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
import
AiReport
from
'@/views/marketAccessRestrictions/marketAccessHome/com/AiReport.vue'
;
import
{
getNearYearList
}
from
"@/views/marketAccessRestrictions/utils/index.ts"
;
const
yearList
=
getNearYearList
();
// 获取AI智能报告
const
aiContent
=
reactive
({
content1
:
"正在生成..."
,
content2
:
"正在生成..."
,
content3
:
"正在生成..."
,
content4
:
"正在生成..."
,
}
)
const
onAIReport
=
(
data
,
key
)
=>
{
getAIReport
(
data
).
then
(
res
=>
{
aiContent
[
key
]
=
res
}
)
}
const
refAiReport1
=
ref
(
null
)
const
refAiReport2
=
ref
(
null
)
const
refAiReport3
=
ref
(
null
)
const
refAiReport4
=
ref
(
null
)
const
provinceCoords
=
{
"北京"
:
[
116.46
,
39.92
],
...
...
@@ -227,7 +209,7 @@ const handleGetStatNum = async (type) => {
chartData
.
title
=
[];
chartData
.
list
=
[];
}
onAIReport
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
,
"content1"
)
refAiReport1
.
value
?.
onDataInfo
({
type
:
"折线图"
,
name
:
"数量变化趋势"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createLineChart
(
chart1
,
chartData
)
}
);
box1Loading
.
value
=
false
;
}
;
...
...
@@ -252,7 +234,7 @@ const handleGetStatArea = async () => {
}
catch
(
error
)
{
chartData
=
[];
}
onAIReport
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
,
"content2"
)
refAiReport2
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"领域分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
chart2
,
chartData
)
}
);
box2Loading
.
value
=
false
;
}
;
...
...
@@ -282,7 +264,7 @@ const handleGetStatcnOrgCount = async () => {
chartData
.
name
=
[];
chartData
.
value
=
[];
}
onAIReport
({
type
:
"柱状图"
,
name
:
"中国实体分布情况"
,
data
:
chartData
}
,
"content3"
)
refAiReport3
.
value
?.
onDataInfo
({
type
:
"柱状图"
,
name
:
"中国实体分布情况"
,
data
:
chartData
}
)
nextTick
(()
=>
{
let
chart3
=
getBarChart
(
chartData
.
name
,
chartData
.
value
);
setChart
(
chart3
,
"chart3"
);
...
...
@@ -305,7 +287,7 @@ const handleGetStatcnOrgCount = async () => {
}
catch
(
error
)
{
mapData
.
value
=
[];
}
onAIReport
({
type
:
"地图"
,
name
:
"中国实体分布情况"
,
data
:
mapData
.
value
}
,
"content3"
)
refAiReport3
.
value
?.
onDataInfo
({
type
:
"地图"
,
name
:
"中国实体分布情况"
,
data
:
mapData
.
value
}
)
nextTick
(()
=>
{
let
chartMap
=
getMapChart
(
mapData
.
value
);
setChart
(
chartMap
,
"chartMap"
);
...
...
@@ -334,7 +316,7 @@ const handleGetSearchResult = async () => {
}
catch
(
error
)
{
chartData
=
[];
}
onAIReport
({
type
:
"环形图"
,
name
:
"调查结果分布"
,
data
:
chartData
}
,
"content4"
)
refAiReport4
.
value
?.
onDataInfo
({
type
:
"环形图"
,
name
:
"调查结果分布"
,
data
:
chartData
}
)
nextTick
(()
=>
{
createPieChart
(
chart4
,
chartData
)
}
);
box4Loading
.
value
=
false
;
}
;
...
...
@@ -441,28 +423,6 @@ onMounted(() => {
height
:
20
px
;
flex
:
auto
;
}
.
ai
-
pane
{
position
:
absolute
;
right
:
0
px
;
bottom
:
15
px
;
z
-
index
:
2
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
none
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
flex
;
}
&
:
hover
{
width
:
100
%
;
bottom
:
0
px
;
:
deep
(.
ai
-
pane
-
wrapper
)
{
display
:
block
;
}
:
deep
(.
ai
-
button
-
wrapper
)
{
display
:
none
;
}
}
}
}
}
}
...
...
src/views/marketAccessRestrictions/pages/reportOriginal.vue
浏览文件 @
72613fb4
...
...
@@ -37,7 +37,7 @@
<img
class=
"translate-icon"
src=
"@/views/thinkTank/ReportDetail/images/image-translate.png"
alt=
""
style=
"width: 16px; height: 16px; max-width: 16px; max-height: 16px; display: block; object-fit: contain;"
/>
</div>
<div
class=
"translate-text"
>
{{
"显示
原
文"
}}
</div>
<div
class=
"translate-text"
>
{{
"显示
译
文"
}}
</div>
</div>
<div
class=
"btn"
@
click=
"handleDownload"
>
<div
class=
"icon"
>
...
...
@@ -53,8 +53,7 @@
<pdf
ref=
"leftPdfRef"
:pdfUrl=
"reportUrlEnWithPage"
class=
"pdf-pane-inner"
/>
</div>
<div
class=
"pdf-pane-wrap"
:class=
"
{ 'is-full': !valueSwitch }" v-if="reportUrlWithPage">
<pdf
:key=
"`right-pdf-$
{valueSwitch ? 'split' : 'full'}`" ref="rightPdfRef" :pdfUrl="reportUrlWithPage"
class="pdf-pane-inner" />
<pdf
:key=
"`right-pdf-$
{valueSwitch ? 'split' : 'full'}`" ref="rightPdfRef" :pdfUrl="reportUrlWithPage" class="pdf-pane-inner" />
</div>
</div>
</div>
...
...
@@ -371,15 +370,15 @@ onMounted(() => {
margin
:
0
auto
;
background
:
rgb
(
255
,
255
,
255
);
width
:
1600px
;
height
:
20px
;
flex
:
auto
;
height
:
948px
;
margin-bottom
:
86px
;
border
:
1px
,
solid
,
rgb
(
234
,
236
,
238
);
box-shadow
:
0
0
20px
0
rgba
(
25
,
69
,
130
,
0
.1
);
display
:
flex
;
flex-direction
:
column
;
.main-header
{
height
:
64px
;
/* box-sizing: border-box; */
border-bottom
:
1px
solid
rgb
(
234
,
236
,
238
);
background
:
rgb
(
255
,
255
,
255
);
margin
:
0
70px
;
...
...
@@ -463,6 +462,8 @@ onMounted(() => {
.btn
{
width
:
88px
;
height
:
32px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
230
,
231
,
232
,
1
);
border-radius
:
6px
;
background
:
rgba
(
255
,
255
,
255
,
1
);
...
...
@@ -516,6 +517,7 @@ onMounted(() => {
.search-input
{
width
:
160px
;
height
:
24px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
border-radius
:
4px
;
...
...
@@ -543,6 +545,7 @@ onMounted(() => {
.search-nav-btn
{
width
:
68px
;
height
:
24px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
border-radius
:
4px
;
...
...
@@ -565,13 +568,11 @@ onMounted(() => {
}
.report-box
{
height
:
20px
;
flex
:
auto
;
margin-left
:
70px
;
width
:
1456px
;
height
:
881px
;
display
:
flex
;
overflow-y
:
auto
;
/* 右侧统一滚动条,控制两侧原文+译文一起滚动 */
overflow-x
:
hidden
;
}
...
...
src/views/marketAccessRestrictions/singleCaseLayout/deepdig/232/index.vue
浏览文件 @
72613fb4
...
...
@@ -155,7 +155,7 @@ onMounted(() => {
<
style
lang=
"scss"
scoped
>
.wrapper
{
width
:
1600px
;
margin
:
20
px
auto
;
margin
:
16
px
auto
;
display
:
flex
;
flex-direction
:
column
;
gap
:
16px
;
...
...
src/views/marketAccessRestrictions/singleCaseLayout/deepdig/337/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/singleCaseLayout/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/singleCaseLayout/overview/232/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/singleCaseLayout/overview/301/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/singleCaseLayout/overview/337/index.vue
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/utils/baseLineChart.js
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/utils/basePiechart.js
浏览文件 @
72613fb4
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/utils/index.ts
浏览文件 @
72613fb4
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论