Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
4a198500
提交
4a198500
authored
4月 09, 2026
作者:
付康
浏览文件
操作
浏览文件
下载
差异文件
合并分支 'fk-dev' 到 'pre'
Fk dev 查看合并请求
!324
上级
6f3ae4a0
68717834
流水线
#389
已通过 于阶段
in 3 分 30 秒
变更
10
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
371 行增加
和
229 行删除
+371
-229
index.vue
src/views/dataLibrary/bill/countryBill/index.vue
+2
-2
index.vue
...s/dataLibrary/exportControl/commerceControlList/index.vue
+2
-2
index.vue
...aLibrary/exportControl/commerceControlListEvent/index.vue
+2
-2
index.vue
src/views/dataLibrary/exportControl/entityList/index.vue
+23
-20
index.vue
...views/dataLibrary/exportControl/entityListEvent/index.vue
+2
-2
index.vue
src/views/dataLibrary/index.vue
+4
-3
index.vue
src/views/exportControl/index.vue
+142
-164
charts.js
src/views/exportControl/utils/charts.js
+1
-1
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+93
-15
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+100
-18
没有找到文件。
src/views/dataLibrary/bill/countryBill/index.vue
浏览文件 @
4a198500
...
@@ -1131,10 +1131,10 @@ const initParam = () => {
...
@@ -1131,10 +1131,10 @@ const initParam = () => {
const
query
=
route
.
query
;
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
r
outeQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
countryR
outeQuery'
,
JSON
.
stringify
(
query
));
}
}
}
else
{
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
r
outeQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
countryR
outeQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/commerceControlList/index.vue
浏览文件 @
4a198500
...
@@ -876,10 +876,10 @@ const initParam = () => {
...
@@ -876,10 +876,10 @@ const initParam = () => {
const
query
=
route
.
query
;
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decre
eRouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
commerc
eRouteQuery'
,
JSON
.
stringify
(
query
));
}
}
}
else
{
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decre
eRouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
commerc
eRouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/commerceControlListEvent/index.vue
浏览文件 @
4a198500
...
@@ -803,10 +803,10 @@ const initParam = () => {
...
@@ -803,10 +803,10 @@ const initParam = () => {
const
query
=
route
.
query
;
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
commerceEvent
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
}
else
{
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
commerceEvent
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/entityList/index.vue
浏览文件 @
4a198500
...
@@ -191,7 +191,7 @@ const route = useRoute();
...
@@ -191,7 +191,7 @@ const route = useRoute();
const
isShowProvinceBox
=
computed
(()
=>
{
const
isShowProvinceBox
=
computed
(()
=>
{
let
isShow
=
false
let
isShow
=
false
if
(
isFolderAll
.
value
&&
(
selectedCountry
.
value
===
'0101'
||
selectedCountry
.
value
===
'全部国家'
))
{
if
(
isFolderAll
.
value
&&
(
selectedCountry
.
value
===
'0101'
||
selectedCountry
.
value
===
'全部国家'
))
{
isShow
=
true
isShow
=
true
}
}
return
isShow
return
isShow
...
@@ -207,18 +207,18 @@ const handleSwitchChartData = () => {
...
@@ -207,18 +207,18 @@ const handleSwitchChartData = () => {
return
item
.
name
===
curDemension
.
value
return
item
.
name
===
curDemension
.
value
}
)[
0
]
}
)[
0
]
// setTimeout(() =>
{
// setTimeout(() =>
{
activeChart
.
value
=
curDemensionItem
.
chartTypeList
[
0
]
activeChart
.
value
=
curDemensionItem
.
chartTypeList
[
0
]
if
(
curDemension
.
value
===
'制裁时间'
)
{
if
(
curDemension
.
value
===
'制裁时间'
)
{
if
(
selectedTime
.
value
===
'按月度统计'
)
{
if
(
selectedTime
.
value
===
'按月度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
data
}
else
if
(
selectedTime
.
value
===
'按季度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
quatarData
}
else
{
curChartData
.
value
=
curDemensionItem
.
yearData
}
}
else
{
curChartData
.
value
=
curDemensionItem
.
data
curChartData
.
value
=
curDemensionItem
.
data
}
else
if
(
selectedTime
.
value
===
'按季度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
quatarData
}
else
{
curChartData
.
value
=
curDemensionItem
.
yearData
}
}
}
else
{
curChartData
.
value
=
curDemensionItem
.
data
}
//
}
)
//
}
)
}
}
}
}
...
@@ -686,7 +686,7 @@ const handleGetProvinceList = async () => {
...
@@ -686,7 +686,7 @@ const handleGetProvinceList = async () => {
try
{
try
{
const
res
=
await
getProvinceList
()
const
res
=
await
getProvinceList
()
console
.
log
(
'获取省份列表'
,
res
);
console
.
log
(
'获取省份列表'
,
res
);
if
(
res
&&
res
.
length
)
{
if
(
res
&&
res
.
length
)
{
provinceList
.
value
=
res
.
map
(
item
=>
{
provinceList
.
value
=
res
.
map
(
item
=>
{
return
{
return
{
name
:
item
,
name
:
item
,
...
@@ -1051,30 +1051,33 @@ const initParam = () => {
...
@@ -1051,30 +1051,33 @@ const initParam = () => {
customTime
.
value
=
JSON
.
parse
(
route
.
query
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
route
.
query
.
selectedDate
)
}
}
selectedCountry
.
value
=
route
.
query
.
orgnizationName
?
route
.
query
.
orgnizationName
:
'全部国家'
selectedProvince
.
value
=
route
.
query
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
route
.
query
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
query
.
selectedCountryId
:
'全部国家'
isHalfRule
.
value
=
route
.
query
.
isHalfRule
?
true
:
false
isHalfRule
.
value
=
route
.
query
.
isHalfRule
?
true
:
false
isCnEntityOnly
.
value
=
route
.
query
.
isCnEntityOnly
?
true
:
false
isCnEntityOnly
.
value
=
route
.
query
.
isCnEntityOnly
?
true
:
false
selectedEntityType
.
value
=
route
.
query
.
selectedEntityType
?
route
.
query
.
selectedEntityType
:
'全部实体类型'
selectedEntityType
.
value
=
route
.
query
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
route
.
query
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
const
query
=
route
.
query
;
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
entity
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
}
else
{
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
entity
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
savedQuery
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
savedQuery
.
selectedDate
)
}
}
isHalfRule
.
value
=
savedQuery
.
isHalfRule
?
true
:
false
isHalfRule
.
value
=
savedQuery
.
isHalfRule
?
true
:
false
selectedProvince
.
value
=
savedQuery
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
savedQuery
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
query
.
selectedCountryId
:
'全部国家'
isCnEntityOnly
.
value
=
savedQuery
.
isCnEntityOnly
?
true
:
false
isCnEntityOnly
.
value
=
savedQuery
.
isCnEntityOnly
?
true
:
false
selectedEntityType
.
value
=
savedQuery
.
selectedEntityType
?
savedQuery
.
selectedEntityType
:
'全部实体类型'
selectedEntityType
.
value
=
savedQuery
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
savedQuery
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
}
}
}
}
...
@@ -1129,9 +1132,9 @@ const handleExport = () => {
...
@@ -1129,9 +1132,9 @@ const handleExport = () => {
}
;
}
;
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
handleGetProvinceList
()
// 获取省份列表
await
handleGetProvinceList
()
// 获取省份列表
handleGetCountryList
()
// 获取国家列表
await
handleGetCountryList
()
// 获取国家列表
handleGetEntityTypes
()
// 获取实体类型列表
await
handleGetEntityTypes
()
// 获取实体类型列表
initParam
()
initParam
()
// 初始化
// 初始化
await
fetchTableData
()
await
fetchTableData
()
...
...
src/views/dataLibrary/exportControl/entityListEvent/index.vue
浏览文件 @
4a198500
...
@@ -803,10 +803,10 @@ const initParam = () => {
...
@@ -803,10 +803,10 @@ const initParam = () => {
const
query
=
route
.
query
;
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
entityEvent
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
}
else
{
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
entityEvent
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/index.vue
浏览文件 @
4a198500
...
@@ -393,7 +393,7 @@ const timer = ref(null);
...
@@ -393,7 +393,7 @@ const timer = ref(null);
// 关闭当前标签页
// 关闭当前标签页
const
handleCloseCurTab
=
(
tab
,
index
)
=>
{
const
handleCloseCurTab
=
(
tab
,
index
)
=>
{
if
(
tagsViewStore
.
visitedViews
.
length
===
1
)
{
if
(
tagsViewStore
.
visitedViews
.
length
===
1
)
{
ElMessage
.
warning
(
'至少保留一个标签页'
)
ElMessage
.
warning
(
'至少保留一个标签页'
)
return
return
}
}
...
@@ -494,16 +494,17 @@ onMounted(() => {
...
@@ -494,16 +494,17 @@ onMounted(() => {
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
0
].
active
=
true
;
siderList
.
value
[
3
].
children
[
0
].
active
=
true
;
break
;
break
;
case
"/dataLibrary/data
CommerceControlLis
t"
:
case
"/dataLibrary/data
EntityListEven
t"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
1
].
active
=
true
;
siderList
.
value
[
3
].
children
[
1
].
active
=
true
;
break
;
break
;
case
"/dataLibrary/data
EntityListEven
t"
:
case
"/dataLibrary/data
CommerceControlLis
t"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
2
].
active
=
true
;
siderList
.
value
[
3
].
children
[
2
].
active
=
true
;
break
;
break
;
case
"/dataLibrary/dataCommerceControlListEvent"
:
case
"/dataLibrary/dataCommerceControlListEvent"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
...
...
src/views/exportControl/index.vue
浏览文件 @
4a198500
...
@@ -3,25 +3,12 @@
...
@@ -3,25 +3,12 @@
<div
class=
"home-main"
ref=
"homeMainRef"
>
<div
class=
"home-main"
ref=
"homeMainRef"
>
<div
class=
"home-top-bg"
></div>
<div
class=
"home-top-bg"
></div>
<div
class=
"home-main-header"
>
<div
class=
"home-main-header"
>
<SearchContainer
<SearchContainer
style=
"margin-bottom: 0; margin-top: 48px; height: fit-content"
v-if=
"homeMainRef"
style=
"margin-bottom: 0; margin-top: 48px; height: fit-content"
placeholder=
"搜索出口管制"
:containerRef=
"homeMainRef"
areaName=
"实体清单"
/>
v-if=
"homeMainRef"
placeholder=
"搜索出口管制"
:containerRef=
"homeMainRef"
areaName=
"实体清单"
/>
<div
class=
"home-main-header-footer-info"
>
<div
class=
"home-main-header-footer-info"
>
<InfoCard
<InfoCard
v-for=
"(item, index) in infoList"
:key=
"item.id"
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
v-for=
"(item, index) in infoList"
:description=
"item.description"
:quantity=
"item.postCount"
:unit=
"item.unit"
:color=
"infoListColor[index]"
:key=
"item.id"
@
click=
"handleToEntityListNoId(item)"
/>
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
:description=
"item.description"
:quantity=
"item.postCount"
:unit=
"item.unit"
:color=
"infoListColor[index]"
@
click=
"handleToEntityListNoId(item)"
/>
</div>
</div>
</div>
</div>
...
@@ -47,15 +34,8 @@
...
@@ -47,15 +34,8 @@
<img
src=
"./assets/images/box1-right.png"
alt=
""
/>
<img
src=
"./assets/images/box1-right.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<el-carousel
<el-carousel
ref=
"carouselRef"
height=
"370px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
ref=
"carouselRef"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
height=
"370px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel-item
v-for=
"(item, index) in entitiesDataInfoList"
:key=
"item.id + index"
>
<el-carousel-item
v-for=
"(item, index) in entitiesDataInfoList"
:key=
"item.id + index"
>
<div>
<div>
<div
class=
"box1-top"
>
<div
class=
"box1-top"
>
...
@@ -80,29 +60,17 @@
...
@@ -80,29 +60,17 @@
>
>
<el-tag
:type=
"getTagType(domainItem)"
>
{{
domainItem
}}
</el-tag>
<el-tag
:type=
"getTagType(domainItem)"
>
{{
domainItem
}}
</el-tag>
</div>
-->
</div>
-->
<AreaTag
<AreaTag
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
:tagName=
"domainItem"
/>
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
:tagName=
"domainItem"
/>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"box1-bottom"
>
<div
class=
"box1-bottom"
>
<div
class=
"box1-bottom-title"
>
· 涉及主要实体:
</div>
<div
class=
"box1-bottom-title"
>
· 涉及主要实体:
</div>
<div
class=
"box1-bottom-content"
>
<div
class=
"box1-bottom-content"
>
<div
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in item.sanEntities"
:key=
"index"
class=
"box1-bottom-content-item"
@
click=
"handleEntityClick(ett)"
>
v-for=
"(ett, index) in item.sanEntities"
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
:key=
"index"
alt=
""
></el-image>
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
{{
(
ett
.
orgName
||
ett
.
orgNameZh
)?.
match
(
(
ett
.
orgName
||
ett
.
orgNameZh
)?.
match
(
...
@@ -175,14 +143,8 @@
...
@@ -175,14 +143,8 @@
</div>
</div>
</template>
</template>
</custom-container> -->
</custom-container> -->
<RiskSignal
<RiskSignal
:list=
"warningList"
@
item-click=
"handleToRiskSignalDetail"
@
more-click=
"handleToMoreRiskSignal"
:list=
"warningList"
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
@
item-click=
"handleToRiskSignalDetail"
@
more-click=
"handleToMoreRiskSignal"
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
</el-col>
</el-col>
</el-row>
</el-row>
...
@@ -205,19 +167,11 @@
...
@@ -205,19 +167,11 @@
</custom-container>
</custom-container>
</el-col> -->
</el-col> -->
<div
class=
"center-center"
>
<div
class=
"center-center"
>
<NewsList
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
:newsList=
"newsList"
content=
"newsContent"
/>
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
content=
"newsContent"
@
more-click=
"handleToSocialDetail"
/>
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
<!-- <custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<!-- <custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<template #default>
<template #default>
<div class="dialog-list">
<div class="dialog-list">
...
@@ -237,25 +191,20 @@
...
@@ -237,25 +191,20 @@
<div
class=
"box3"
>
<div
class=
"box3"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
实体清单发布频次统计
</div>
<div
class=
"box3-content-title"
>
实体清单发布频次统计
</div>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleEntityRowClick"
>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
label=
"发布次数"
width=
"300"
>
<el-table-column
label=
"发布次数"
width=
"300"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:percentage=
"scope.row.percent * 100"
:status=
"getStatus(scope.row.percent)"
/>
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<div
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<AreaTag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:tagName=
"tag"
/>
<AreaTag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:tagName=
"tag"
/>
<!--
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
<!--
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
tag
...
@@ -277,25 +226,21 @@
...
@@ -277,25 +226,21 @@
</div>
</div>
<div
class=
"box3-content"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
商业管制清单发布频次统计
</div>
<div
class=
"box3-content-title"
>
商业管制清单发布频次统计
</div>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleCommercialRowClick"
>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
label=
"发布次数"
width=
"300"
>
<el-table-column
label=
"发布次数"
width=
"300"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:percentage=
"scope.row.percent * 100"
:status=
"getStatus(scope.row.percent)"
/>
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<div
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
tag
}}
</el-tag>
}}
</el-tag>
...
@@ -324,11 +269,8 @@
...
@@ -324,11 +269,8 @@
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:percentage=
"scope.row.percent * 100"
:status=
"getStatus(scope.row.percent)"
/>
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
...
@@ -356,7 +298,8 @@
...
@@ -356,7 +298,8 @@
<el-checkbox
v-model=
"domainChecked"
label=
"50%规则"
size=
"large"
/>
<el-checkbox
v-model=
"domainChecked"
label=
"50%规则"
size=
"large"
/>
</
template
>
</
template
>
<
template
#
default
>
<
template
#
default
>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }" />
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
<img
:src=
"tipsIcon"
alt=
""
/>
...
@@ -381,7 +324,8 @@
...
@@ -381,7 +324,8 @@
</div>
</div>
</
template
>
</
template
>
<
template
#
default
>
<
template
#
default
>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }" />
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
<img
:src=
"tipsIcon"
alt=
""
/>
...
@@ -400,13 +344,9 @@
...
@@ -400,13 +344,9 @@
<el-row
:gutter=
"20"
style=
"width: 1600px; margin: 0 auto; margin-top: 39px; padding-bottom: 60px"
>
<el-row
:gutter=
"20"
style=
"width: 1600px; margin: 0 auto; margin-top: 39px; padding-bottom: 60px"
>
<CustomTitle
id=
"position4"
title=
"资源库"
style=
"margin-top: 0px"
/>
<CustomTitle
id=
"position4"
title=
"资源库"
style=
"margin-top: 0px"
/>
<div
class=
"resource-tabs"
>
<div
class=
"resource-tabs"
>
<div
<div
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
:class=
"{ active: activeResourceTab == tab.value, disabled: tab.disabled }"
:class=
"{ active: activeResourceTab == tab.value, disabled: tab.disabled }"
@
click=
"handleResourceTabClick(tab)"
@
click=
"handleResourceTabClick(tab)"
>
>
{{ tab.label }}
{{ tab.label }}
</div>
</div>
</div>
</div>
...
@@ -419,25 +359,15 @@
...
@@ -419,25 +359,15 @@
<div
class=
"box4-item"
v-for=
"(item, idx) in sanctionProcessList"
:key=
"item.title"
>
<div
class=
"box4-item"
v-for=
"(item, idx) in sanctionProcessList"
:key=
"item.title"
>
<div
class=
"box4-item-left"
>
<div
class=
"box4-item-left"
>
<el-image
:src=
"dotIcon"
alt=
"图片"
class=
"box4-item-left-icon"
/>
<el-image
:src=
"dotIcon"
alt=
"图片"
class=
"box4-item-left-icon"
/>
<div
<div
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
</div>
</div>
<div
class=
"box4-item-right"
>
<div
class=
"box4-item-right"
>
<div
class=
"box4-item-right-header"
@
click=
"handleSanc(item)"
>
<div
class=
"box4-item-right-header"
@
click=
"handleSanc(item)"
>
<span
class=
"box4-item-right-header-title"
<span
class=
"box4-item-right-header-title"
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span>
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span
>
<span
class=
"box4-item-right-header-desc"
>
{{
item
.
desc
}}
</span>
<span
class=
"box4-item-right-header-desc"
>
{{
item
.
desc
}}
</span>
</div>
</div>
<el-tooltip
<el-tooltip
effect=
"dark"
:content=
"item.content"
popper-class=
"common-prompt-popper"
effect=
"dark"
placement=
"top"
:show-after=
"500"
>
:content=
"item.content"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<div
class=
"box4-item-right-content"
>
<div
class=
"box4-item-right-content"
>
{{
item
.
content
}}
{{
item
.
content
}}
</div>
</div>
...
@@ -445,12 +375,8 @@
...
@@ -445,12 +375,8 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
class=
"box4-footer"
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<el-icon>
<el-icon>
<DArrowRight
/>
<DArrowRight
/>
</el-icon>
</el-icon>
...
@@ -467,24 +393,13 @@
...
@@ -467,24 +393,13 @@
</
template
>
</
template
>
<
template
#
default
>
<
template
#
default
>
<div
class=
"box5"
>
<div
class=
"box5"
>
<el-table
<el-table
:data=
"entitiesList"
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
:data=
"entitiesList"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
<el-table-column
prop=
"name"
label=
"实体名称"
min-width=
"200"
>
<el-table-column
prop=
"name"
label=
"实体名称"
min-width=
"200"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<div
class=
"tableName"
@
click=
"handleCompClick(scope.row)"
>
<div
class=
"tableName"
@
click=
"handleCompClick(scope.row)"
>
<el-image
<el-image
v-if=
"scope.row.img"
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
v-if=
"scope.row.img"
alt=
""
></el-image>
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
{{
(
scope
.
row
.
name
||
scope
.
row
.
enName
)?.
match
(
(
scope
.
row
.
name
||
scope
.
row
.
enName
)?.
match
(
...
@@ -538,19 +453,13 @@
...
@@ -538,19 +453,13 @@
<el-table-column
prop=
"revenue"
label=
"50%规则子企业"
width=
"280"
align=
"right"
>
<el-table-column
prop=
"revenue"
label=
"50%规则子企业"
width=
"280"
align=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<div
class=
"num-item"
v-if=
"scope.row.ruleOrgCount > 0"
>
<div
class=
"num-item"
v-if=
"scope.row.ruleOrgCount > 0"
>
<div
<div
class=
"name-item"
:class=
"[
class=
"name-item"
'revenue-cell',
:class=
"[
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
'revenue-cell',
]"
>
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
{{
scope
.
row
.
ruleOrgList
[
0
].
orgName
}}
...等
{{
scope
.
row
.
ruleOrgList
[
0
].
orgName
}}
...等
</div>
</div>
<div
<div
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
{{
scope
.
row
.
ruleOrgCount
}}
家>
{{
scope
.
row
.
ruleOrgCount
}}
家>
</div>
</div>
</div>
</div>
...
@@ -562,15 +471,8 @@
...
@@ -562,15 +471,8 @@
<!-- <div class="pagination-info">
<!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页
第{{ currentPage }}页,共{{ totalPages }}页
</div> -->
</div> -->
<el-pagination
<el-pagination
v-model:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"total"
v-model:current-page=
"currentPage"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
:page-size=
"pageSize"
:total=
"total"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
</div>
</div>
</div>
</div>
</template>
</template>
...
@@ -636,14 +538,8 @@
...
@@ -636,14 +538,8 @@
</div>
</div>
<div
class=
"right-footer"
>
<div
class=
"right-footer"
>
<div
class=
"total-count"
>
共
{{
totalAll
}}
项
</div>
<div
class=
"total-count"
>
共
{{
totalAll
}}
项
</div>
<el-pagination
<el-pagination
v-model:current-page=
"currentPageAll"
:page-size=
"pageSizeAll"
:total=
"totalAll"
v-model:current-page=
"currentPageAll"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChangeAll"
/>
:page-size=
"pageSizeAll"
:total=
"totalAll"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChangeAll"
/>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -1130,11 +1026,13 @@ const handleToEntityList = item => {
...
@@ -1130,11 +1026,13 @@ const handleToEntityList = item => {
"curTabName"
,
"curTabName"
,
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
);
);
let
date
=
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
const
routeData
=
router
.
resolve
({
const
routeData
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
path
:
"/exportControl/singleSanction"
,
query
:
{
query
:
{
id
,
id
,
sanTypeId
sanTypeId
,
date
}
}
});
});
// 打开一个新页面
// 打开一个新页面
...
@@ -1182,8 +1080,20 @@ const radarOption = ref({
...
@@ -1182,8 +1080,20 @@ const radarOption = ref({
text
:
""
text
:
""
},
},
tooltip
:
{
tooltip
:
{
trigger
:
"item"
,
// trigger: "item",
confine
:
true
confine
:
true
,
trigger
:
'axis'
,
formatter
:
function
(
params
)
{
// params 包含所有系列的数据
if
(
!
params
||
params
.
length
===
0
)
return
''
;
const
radarData
=
params
[
0
];
const
indicator
=
radarData
.
axisValue
;
// 当前角度对应的指标名
const
value
=
radarData
.
value
;
// 只显示当前角度对应的指标
return
`
${
indicator
}
:
${
value
}
`
;
}
},
},
legend
:
{
legend
:
{
show
:
false
,
show
:
false
,
...
@@ -1400,7 +1310,7 @@ const fetchSanctionList = async () => {
...
@@ -1400,7 +1310,7 @@ const fetchSanctionList = async () => {
});
});
totalAll
.
value
=
res
.
totalElements
;
totalAll
.
value
=
res
.
totalElements
;
}
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
};
const
handlePageChangeAll
=
val
=>
{
const
handlePageChangeAll
=
val
=>
{
...
@@ -1694,7 +1604,7 @@ const handleGetHylyList = async () => {
...
@@ -1694,7 +1604,7 @@ const handleGetHylyList = async () => {
hylymc
:
"全部分类"
hylymc
:
"全部分类"
};
};
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
};
const
chart1Data
=
ref
({
const
chart1Data
=
ref
({
...
@@ -1785,6 +1695,64 @@ const handleSearch = () => {
...
@@ -1785,6 +1695,64 @@ const handleSearch = () => {
window
.
open
(
curRoute
.
href
,
"_blank"
);
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
};
// 点击实体清单发布频次统计
const
handleEntityRowClick
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
const
params
=
{
domains
:
row
.
tags
[
0
],
selectedDate
:
JSON
.
stringify
([
row
.
year
+
'-01-01'
,
row
.
year
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击商业管制清单发布频次统计
const
handleCommercialRowClick
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
const
params
=
{
domains
:
row
.
tags
[
0
],
selectedDate
:
JSON
.
stringify
([
row
.
year
+
'-01-01'
,
row
.
year
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataCommerceControlListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击实体清单领域分布情况
const
handleRadarChartClick
=
(
value
)
=>
{
// console.log('value', value);
// alert(domainChecked.value)
const
params
=
{
isHalfRule
:
domainChecked
.
value
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击制裁清单数量增长趋势
const
handleMultiBarChartClick
=
(
val
)
=>
{
// console.log('value', val);
const
params
=
{
domains
:
val
.
seriesName
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
'-01-01'
,
val
.
name
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
handleGetHylyList
();
handleGetHylyList
();
let
chart1
=
getMultiLineChart
(
chart1Data
.
value
.
title
,
chart1Data
.
value
.
data
[
0
].
value
,
chart1Data
.
value
.
data
[
1
].
value
);
let
chart1
=
getMultiLineChart
(
chart1Data
.
value
.
title
,
chart1Data
.
value
.
data
[
0
].
value
,
chart1Data
.
value
.
data
[
1
].
value
);
...
@@ -2203,6 +2171,7 @@ const handleMediaClick = item => {
...
@@ -2203,6 +2171,7 @@ const handleMediaClick = item => {
}
}
.box3-content
{
.box3-content
{
// flex: 1;
// flex: 1;
.el-progress--line
{
.el-progress--line
{
width
:
82px
;
width
:
82px
;
...
@@ -3597,6 +3566,7 @@ const handleMediaClick = item => {
...
@@ -3597,6 +3566,7 @@ const handleMediaClick = item => {
height
:
450px
;
height
:
450px
;
display
:
flex
;
display
:
flex
;
gap
:
20px
;
gap
:
20px
;
.center-center-news
{
.center-center-news
{
flex-shrink
:
0
;
flex-shrink
:
0
;
}
}
...
@@ -3617,16 +3587,19 @@ const handleMediaClick = item => {
...
@@ -3617,16 +3587,19 @@ const handleMediaClick = item => {
align-items
:
center
;
align-items
:
center
;
justify-content
:
flex-start
;
justify-content
:
flex-start
;
padding
:
22px
0
;
padding
:
22px
0
;
.data-origin-icon
{
.data-origin-icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
font-size
:
0px
;
font-size
:
0px
;
margin-right
:
8px
;
margin-right
:
8px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.data-origin-text
{
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
font-size
:
14px
;
...
@@ -3639,18 +3612,23 @@ const handleMediaClick = item => {
...
@@ -3639,18 +3612,23 @@ const handleMediaClick = item => {
right
:
0px
;
right
:
0px
;
bottom
:
15px
;
bottom
:
15px
;
z-index
:
2
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
display
:
flex
;
}
}
&
:hover
{
&
:hover
{
width
:
100%
;
width
:
100%
;
bottom
:
0px
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
display
:
block
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
...
...
src/views/exportControl/utils/charts.js
浏览文件 @
4a198500
...
@@ -973,7 +973,7 @@ export const getMultipleBarChart_m = object => {
...
@@ -973,7 +973,7 @@ export const getMultipleBarChart_m = object => {
const
option
=
{
const
option
=
{
tooltip
:
{
tooltip
:
{
trigger
:
"
axis
"
,
trigger
:
"
item
"
,
axisPointer
:
{
axisPointer
:
{
type
:
"shadow"
type
:
"shadow"
}
}
...
...
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
4a198500
...
@@ -105,7 +105,8 @@
...
@@ -105,7 +105,8 @@
</div>
</div>
</
template
>
</
template
>
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleBarChartClick"
/>
<!-- <div class="bottom">
<!-- <div class="bottom">
<div class="ai">
<div class="ai">
<div class="left">
<div class="left">
...
@@ -139,17 +140,14 @@
...
@@ -139,17 +140,14 @@
<div
class=
"map-wrapper"
>
<div
class=
"map-wrapper"
>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"rank-list"
>
<div
class=
"rank-list"
>
<div
class=
"rank-item"
v-for=
"(item, index) in rankData"
:key=
"index"
>
<div
class=
"rank-item"
v-for=
"(item, index) in rankData"
:key=
"index"
@
click=
"handleClickRankChart(item)"
>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{ index + 1 }}
</div>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{ index + 1 }}
</div>
<div
class=
"rank-name"
>
{{ item.name }}
</div>
<div
class=
"rank-name"
>
{{ item.name }}
</div>
<div
class=
"rank-bar-bg"
>
<div
class=
"rank-bar-bg"
>
<div
<div
class=
"rank-bar-fill"
:style=
"{
class=
"rank-bar-fill"
width: (item.value / maxRankValue) * 100 + '%',
:style=
"{
background: getBarColor(index)
width: (item.value / maxRankValue) * 100 + '%',
}"
></div>
background: getBarColor(index)
}"
></div>
</div>
</div>
<div
class=
"rank-value"
>
{{ item.value }}家
</div>
<div
class=
"rank-value"
>
{{ item.value }}家
</div>
</div>
</div>
...
@@ -186,7 +184,8 @@
...
@@ -186,7 +184,8 @@
</el-select>
</el-select>
</
template
>
</
template
>
<!-- <div class="echarts" ref="domainChartRef"></div> -->
<!-- <div class="echarts" ref="domainChartRef"></div> -->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handlePieChartClick"
/>
<!-- <div class="bottom">
<!-- <div class="bottom">
<div class="ai">
<div class="ai">
<div class="left">
<div class="left">
...
@@ -218,7 +217,7 @@
...
@@ -218,7 +217,7 @@
</el-select>
</el-select>
</
template
>
</
template
>
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handlePieChartClick1"
/>
<!-- <div class="bottom">
<!-- <div class="bottom">
<div class="ai">
<div class="ai">
<div class="left">
<div class="left">
...
@@ -261,6 +260,7 @@ import {
...
@@ -261,6 +260,7 @@ import {
}
from
"@/api/exportControlV2.0"
;
}
from
"@/api/exportControlV2.0"
;
import
EChart
from
"@/components/Chart/index.vue"
;
import
EChart
from
"@/components/Chart/index.vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
tipsIcon
from
"../../../assets/icons/info-icon.png"
;
import
tipsIcon
from
"../../../assets/icons/info-icon.png"
;
import
AiButton
from
"@/components/base/Ai/AiButton/index.vue"
;
import
AiButton
from
"@/components/base/Ai/AiButton/index.vue"
;
import
AiPane
from
"@/components/base/Ai/AiPane/index.vue"
;
import
AiPane
from
"@/components/base/Ai/AiPane/index.vue"
;
...
@@ -271,6 +271,7 @@ const typeChart = useChartInterpretation();
...
@@ -271,6 +271,7 @@ const typeChart = useChartInterpretation();
const
rankChart
=
useChartInterpretation
();
const
rankChart
=
useChartInterpretation
();
const
route
=
useRoute
();
const
route
=
useRoute
();
const
router
=
useRouter
()
// 实体清单-数据统计-制裁实体类型分布情况
// 实体清单-数据统计-制裁实体类型分布情况
const
typeData
=
ref
([]);
const
typeData
=
ref
([]);
const
getTypeCountData
=
async
()
=>
{
const
getTypeCountData
=
async
()
=>
{
...
@@ -637,6 +638,17 @@ const updateMapChart = () => {
...
@@ -637,6 +638,17 @@ const updateMapChart = () => {
};
};
mapChartInstance
.
setOption
(
option
);
mapChartInstance
.
setOption
(
option
);
mapChartInstance
.
on
(
'click'
,
function
(
params
)
{
const
param
=
{
selectedProvince
:
params
.
name
,
selectedDate
:
regionTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
regionTime
.
value
+
'-01-01'
,
regionTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
param
});
window
.
open
(
route
.
href
,
"_blank"
);
});
};
};
const
initMapChart
=
()
=>
{
const
initMapChart
=
()
=>
{
...
@@ -976,10 +988,10 @@ const updateTypeChart = () => {
...
@@ -976,10 +988,10 @@ const updateTypeChart = () => {
let
data
=
typeData
.
value
.
length
let
data
=
typeData
.
value
.
length
?
[...
typeData
.
value
]
?
[...
typeData
.
value
]
:
[
:
[
{
value
:
50
,
name
:
"企业"
},
{
value
:
50
,
name
:
"企业"
},
{
value
:
32
,
name
:
"高校"
},
{
value
:
32
,
name
:
"高校"
},
{
value
:
32
,
name
:
"科研院所"
}
{
value
:
32
,
name
:
"科研院所"
}
];
];
// 2. 聚合逻辑:保留前5项,其余合并为“其他”
// 2. 聚合逻辑:保留前5项,其余合并为“其他”
data
.
sort
((
a
,
b
)
=>
b
.
value
-
a
.
value
);
data
.
sort
((
a
,
b
)
=>
b
.
value
-
a
.
value
);
...
@@ -1100,6 +1112,64 @@ const initTypeChart = () => {
...
@@ -1100,6 +1112,64 @@ const initTypeChart = () => {
};
};
const
sanTypeId
=
ref
(
""
);
const
sanTypeId
=
ref
(
""
);
// 点击制裁实体数量变化情况
const
handleBarChartClick
=
(
val
)
=>
{
console
.
log
(
'value'
,
val
);
const
params
=
{
selectedDate
:
activeTab
.
value
===
'year'
?
JSON
.
stringify
([
val
.
name
+
'-01-01'
,
val
.
name
+
'-12-31'
])
:
JSON
.
stringify
([
val
.
name
,
val
.
name
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体各省分布情况
const
handleClickRankChart
=
(
item
)
=>
{
// console.log('item', item);
const
params
=
{
selectedProvince
:
item
.
name
,
selectedDate
:
regionTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
regionTime
.
value
+
'-01-01'
,
regionTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体领域分布情况
const
handlePieChartClick
=
(
val
)
=>
{
console
.
log
(
'val'
,
val
);
const
params
=
{
domains
:
val
.
name
,
selectedDate
:
domainTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
domainTime
.
value
+
'-01-01'
,
domainTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体类型分布情况
const
handlePieChartClick1
=
(
val
)
=>
{
console
.
log
(
'val'
,
val
);
const
params
=
{
selectedEntityType
:
val
.
name
,
selectedDate
:
typeTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
typeTime
.
value
+
'-01-01'
,
typeTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
onMounted
(()
=>
{
onMounted
(()
=>
{
sanTypeId
.
value
=
route
.
query
.
sanTypeId
||
""
;
sanTypeId
.
value
=
route
.
query
.
sanTypeId
||
""
;
console
.
log
(
"数据统计页面接收到的 sanTypeId:"
,
sanTypeId
.
value
);
console
.
log
(
"数据统计页面接收到的 sanTypeId:"
,
sanTypeId
.
value
);
...
@@ -1536,16 +1606,19 @@ onMounted(() => {
...
@@ -1536,16 +1606,19 @@ onMounted(() => {
align-items
:
center
;
align-items
:
center
;
justify-content
:
flex-start
;
justify-content
:
flex-start
;
padding
:
22px
;
padding
:
22px
;
.data-origin-icon
{
.data-origin-icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
font-size
:
0px
;
font-size
:
0px
;
margin-right
:
8px
;
margin-right
:
8px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.data-origin-text
{
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
font-size
:
14px
;
...
@@ -1558,18 +1631,23 @@ onMounted(() => {
...
@@ -1558,18 +1631,23 @@ onMounted(() => {
right
:
0px
;
right
:
0px
;
bottom
:
15px
;
bottom
:
15px
;
z-index
:
2
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
display
:
flex
;
}
}
&
:hover
{
&
:hover
{
width
:
100%
;
width
:
100%
;
bottom
:
0px
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
display
:
block
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
...
...
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
4a198500
...
@@ -54,7 +54,8 @@
...
@@ -54,7 +54,8 @@
</div>
</div>
</div>
</div>
</div>
-->
</div>
-->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }" />
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
<img
:src=
"tipsIcon"
alt=
""
/>
...
@@ -104,7 +105,8 @@
...
@@ -104,7 +105,8 @@
</div>
</div>
</div>
</div>
</div>
-->
</div>
-->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }" />
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick1" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
<img
:src=
"tipsIcon"
alt=
""
/>
...
@@ -120,17 +122,15 @@
...
@@ -120,17 +122,15 @@
<div
class=
"main-item"
>
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体国家地区分布情况"
>
<AnalysisBox
title=
"制裁实体国家地区分布情况"
>
<div
class=
"country-list"
>
<div
class=
"country-list"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
@
click=
"handleClickRankChart(item)"
>
<img
:src=
"flag"
alt=
""
class=
"flag"
/>
<img
:src=
"flag"
alt=
""
class=
"flag"
/>
<div
class=
"country-name"
>
{{
item
.
name
}}
</div>
<div
class=
"country-name"
>
{{
item
.
name
}}
</div>
<div
class=
"progress-bar-container"
>
<div
class=
"progress-bar-container"
>
<div
<div
class=
"progress-bar"
:style=
"
{
class=
"progress-bar"
width: item.width,
:style=
"
{
background: item.gradient
width: item.width,
}">
</div>
background: item.gradient
}"
>
</div>
</div>
</div>
<div
class=
"count"
:class=
"
{ highlight: index === 0 }">
{{
item
.
count
}}
家
</div>
<div
class=
"count"
:class=
"
{ highlight: index === 0 }">
{{
item
.
count
}}
家
</div>
</div>
</div>
...
@@ -163,17 +163,15 @@
...
@@ -163,17 +163,15 @@
<div
class=
"map-wrapper"
>
<div
class=
"map-wrapper"
>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"rank-list"
>
<div
class=
"rank-list"
>
<div
class=
"rank-item"
v-for=
"(item, index) in regionDistribution"
:key=
"index"
>
<div
class=
"rank-item"
v-for=
"(item, index) in regionDistribution"
:key=
"index"
@
click=
"handleRankChartClick(item)"
>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{
index
+
1
}}
</div>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{
index
+
1
}}
</div>
<div
class=
"rank-name"
>
{{
item
.
name
}}
</div>
<div
class=
"rank-name"
>
{{
item
.
name
}}
</div>
<div
class=
"rank-bar-bg"
>
<div
class=
"rank-bar-bg"
>
<div
<div
class=
"rank-bar-fill"
:style=
"
{
class=
"rank-bar-fill"
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
:style=
"
{
background: getBarColor(index)
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
}">
</div>
background: getBarColor(index)
}"
>
</div>
</div>
</div>
<div
class=
"rank-value"
>
{{
item
.
count
}}
家
</div>
<div
class=
"rank-value"
>
{{
item
.
count
}}
家
</div>
</div>
</div>
...
@@ -474,6 +472,18 @@ const initMapChart = () => {
...
@@ -474,6 +472,18 @@ const initMapChart = () => {
chart
.
setOption
(
option
);
chart
.
setOption
(
option
);
chart
.
on
(
'click'
,
function
(
params
)
{
const
param
=
{
selectedProvince
:
params
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
param
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
});
window
.
addEventListener
(
"resize"
,
()
=>
{
window
.
addEventListener
(
"resize"
,
()
=>
{
chart
.
resize
();
chart
.
resize
();
});
});
...
@@ -841,6 +851,64 @@ const initTypeChart = () => {
...
@@ -841,6 +851,64 @@ const initTypeChart = () => {
// });
// });
};
};
const
sanTypeId
=
ref
(
""
);
const
sanTypeId
=
ref
(
""
);
// 制裁实体领域分布情况
const
handlePieChartClick
=
(
val
)
=>
{
// console.log('val', val);
const
params
=
{
domains
:
val
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体类型分布情况
const
handlePieChartClick1
=
(
val
)
=>
{
// console.log('val', val);
const
params
=
{
selectedEntityType
:
val
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体国家地区分布情况
const
handleClickRankChart
=
(
item
)
=>
{
// console.log('item', item);
const
params
=
{
selectedCountryId
:
item
.
id
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体各省分布情况
const
handleRankChartClick
=
(
item
)
=>
{
console
.
log
(
'item'
,
item
);
const
params
=
{
selectedProvince
:
item
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
onMounted
(()
=>
{
onMounted
(()
=>
{
// 获取路由参数id
// 获取路由参数id
sanTypeId
.
value
=
route
.
query
.
sanTypeId
;
sanTypeId
.
value
=
route
.
query
.
sanTypeId
;
...
@@ -986,6 +1054,11 @@ onMounted(() => {
...
@@ -986,6 +1054,11 @@ onMounted(() => {
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
margin-bottom
:
16px
;
margin-bottom
:
16px
;
cursor
:
pointer
;
&
:hover
{
background
:
var
(
--
color-primary-2
);
}
&
:last-child
{
&
:last-child
{
margin-bottom
:
0
;
margin-bottom
:
0
;
...
@@ -1284,22 +1357,26 @@ onMounted(() => {
...
@@ -1284,22 +1357,26 @@ onMounted(() => {
}
}
}
}
}
}
.data-origin-box
{
.data-origin-box
{
width
:
100%
;
width
:
100%
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
flex-start
;
justify-content
:
flex-start
;
padding
:
22px
;
padding
:
22px
;
.data-origin-icon
{
.data-origin-icon
{
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
font-size
:
0px
;
font-size
:
0px
;
margin-right
:
8px
;
margin-right
:
8px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.data-origin-text
{
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
font-size
:
14px
;
...
@@ -1312,18 +1389,23 @@ onMounted(() => {
...
@@ -1312,18 +1389,23 @@ onMounted(() => {
right
:
0px
;
right
:
0px
;
bottom
:
15px
;
bottom
:
15px
;
z-index
:
2
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
display
:
flex
;
}
}
&
:hover
{
&
:hover
{
width
:
100%
;
width
:
100%
;
bottom
:
0px
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
display
:
block
;
}
}
:deep
(
.ai-button-wrapper
)
{
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
display
:
none
;
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论