Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
dc99c723
提交
dc99c723
authored
4月 07, 2026
作者:
朱政
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pre' into zz-dev
上级
63fa7533
95d83001
流水线
#336
已通过 于阶段
in 1 分 36 秒
变更
15
流水线
1
全部展开
显示空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
288 行增加
和
104 行删除
+288
-104
package-lock.json
package-lock.json
+18
-2
exportControl.js
src/api/exportControl.js
+3
-3
index.js
src/api/finance/index.js
+45
-13
exportControl.js
src/router/modules/exportControl.js
+7
-8
finance.js
src/router/modules/finance.js
+40
-5
index.vue
src/views/exportControl/v2.0SingleSanction/index.vue
+1
-0
mock.json
src/views/exportControl/v2.0SingleSanction/mock.json
+0
-0
icon-open.png
src/views/finance/assets/icons/icon-open.png
+0
-0
index.vue
src/views/finance/index.vue
+7
-7
index.vue
...inance/v2.0EntityList/components/dataStatistics/index.vue
+79
-49
index.vue
...inance/v2.0SingleSanction/components/deepMining/index.vue
+1
-1
index.vue
...ce/v2.0SingleSanction/components/impactAnalysis/index.vue
+4
-2
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+81
-9
index.vue
src/views/finance/v2.0SingleSanction/index.vue
+2
-5
mock.json
src/views/finance/v2.0SingleSanction/mock.json
+0
-0
没有找到文件。
package-lock.json
浏览文件 @
dc99c723
...
...
@@ -199,6 +199,7 @@
"resolved"
:
"https://registry.npmmirror.com/@antv/g6/-/g6-4.8.25.tgz"
,
"integrity"
:
"sha512-8mdTnN9QMVNQZtlXmftL8fvRsa4L+GajK58Zp51wyrGLFyjeop8R0QSkCALW45DWP2TaQeZAPtjhQUU/wf5hIg=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@antv/g6-pc"
:
"0.8.25"
}
...
...
@@ -2171,6 +2172,7 @@
"resolved"
:
"https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz"
,
"integrity"
:
"sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@types/lodash"
:
"*"
}
...
...
@@ -2287,6 +2289,7 @@
"resolved"
:
"https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz"
,
"integrity"
:
"sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@babel/parser"
:
"^7.28.3"
,
"@vue/compiler-core"
:
"3.5.21"
,
...
...
@@ -2893,6 +2896,7 @@
}
],
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"baseline-browser-mapping"
:
"^2.9.0"
,
"caniuse-lite"
:
"^1.0.30001759"
,
...
...
@@ -3251,6 +3255,7 @@
"resolved"
:
"https://registry.npmmirror.com/cytoscape/-/cytoscape-3.33.1.tgz"
,
"integrity"
:
"sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"engines"
:
{
"node"
:
">=0.10"
}
...
...
@@ -3648,6 +3653,7 @@
"resolved"
:
"https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz"
,
"integrity"
:
"sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
,
"license"
:
"ISC"
,
"peer"
:
true
,
"engines"
:
{
"node"
:
">=12"
}
...
...
@@ -3736,6 +3742,7 @@
"version"
:
"0.8.5"
,
"resolved"
:
"https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz"
,
"integrity"
:
"sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw=="
,
"peer"
:
true
,
"dependencies"
:
{
"graphlib"
:
"^2.1.8"
,
"lodash"
:
"^4.17.15"
...
...
@@ -3943,6 +3950,7 @@
"resolved"
:
"https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz"
,
"integrity"
:
"sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA=="
,
"license"
:
"Apache-2.0"
,
"peer"
:
true
,
"dependencies"
:
{
"tslib"
:
"2.3.0"
,
"zrender"
:
"5.6.1"
...
...
@@ -5334,13 +5342,15 @@
"version"
:
"4.18.1"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz"
,
"integrity"
:
"sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="
,
"license"
:
"MIT"
"license"
:
"MIT"
,
"peer"
:
true
},
"node_modules/lodash-es"
:
{
"version"
:
"4.18.1"
,
"resolved"
:
"https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz"
,
"integrity"
:
"sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="
,
"license"
:
"MIT"
"license"
:
"MIT"
,
"peer"
:
true
},
"node_modules/lodash-unified"
:
{
"version"
:
"1.0.3"
,
...
...
@@ -5388,6 +5398,7 @@
"resolved"
:
"https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz"
,
"integrity"
:
"sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"argparse"
:
"^2.0.1"
,
"entities"
:
"^4.4.0"
,
...
...
@@ -6467,6 +6478,7 @@
"integrity"
:
"sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peer"
:
true
,
"engines"
:
{
"node"
:
">=12"
},
...
...
@@ -6563,6 +6575,7 @@
}
],
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"nanoid"
:
"^3.3.11"
,
"picocolors"
:
"^1.1.1"
,
...
...
@@ -6964,6 +6977,7 @@
"integrity"
:
"sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@types/estree"
:
"1.0.8"
},
...
...
@@ -8134,6 +8148,7 @@
"integrity"
:
"sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"esbuild"
:
"^0.21.3"
,
"postcss"
:
"^8.4.43"
,
...
...
@@ -8193,6 +8208,7 @@
"resolved"
:
"https://registry.npmmirror.com/vue/-/vue-3.5.21.tgz"
,
"integrity"
:
"sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA=="
,
"license"
:
"MIT"
,
"peer"
:
true
,
"dependencies"
:
{
"@vue/compiler-dom"
:
"3.5.21"
,
"@vue/compiler-sfc"
:
"3.5.21"
,
...
...
src/api/exportControl.js
浏览文件 @
dc99c723
...
...
@@ -4,7 +4,7 @@ import { ElMessage } from "element-plus";
const
request200
=
requestP
=>
{
return
requestP
.
then
(
data
=>
{
if
(
data
.
code
===
200
)
{
console
.
log
(
'返回的数据结构 =>'
,
data
.
data
)
console
.
log
(
"返回的数据结构 =>"
,
data
.
data
);
return
data
.
data
;
}
ElMessage
({
...
...
@@ -393,13 +393,13 @@ export function getDomainDistribution(sanctionDate = "2025-11-11") {
* startTime: string
* }[]>}
*/
export
function
getEntitiesList
(
sanTypeId
=
1
,
pageNum
=
1
,
pageSize
=
10
,
sanctionDate
=
""
,
isCn
=
false
)
{
export
function
getEntitiesList
(
sanTypeId
s
=
[
"1"
]
,
pageNum
=
1
,
pageSize
=
10
,
sanctionDate
=
""
,
isCn
=
false
)
{
return
request200
(
request
({
method
:
"POST"
,
url
:
"/api/sanctionList/pageQuery"
,
data
:
{
sanTypeId
,
sanTypeId
s
,
pageNum
,
pageSize
,
sanctionDate
,
...
...
src/api/finance/index.js
浏览文件 @
dc99c723
...
...
@@ -30,7 +30,7 @@ import { http } from "./service.js";
/**
* 总次数统计
*/
*/
export
function
getDataCount
()
{
return
http
.
get
(
"/api/sanctionList/invFin/getTotalInfo"
);
}
...
...
@@ -38,7 +38,7 @@ export function getDataCount() {
/**
* 最新出口管制政策
* url:/sanctionList/invFin/getLatestEntityListInfo
*/
*/
export
function
getLatestEntityListInfo
()
{
return
http
.
get
(
"/api/sanctionList/invFin/getLatestEntityListInfo"
);
}
...
...
@@ -46,31 +46,31 @@ export function getLatestEntityListInfo() {
/**
* 风险信号
* url:/commonFeature/riskSignal/{moduleId}
*/
export
function
getRiskSignal
(
moduleId
=
'0104'
)
{
*/
export
function
getRiskSignal
(
moduleId
=
"0104"
)
{
return
http
.
get
(
`/api/commonFeature/riskSignal/
${
moduleId
}
`
);
}
/**
* 新闻资讯
* url:/commonFeature/news/{moduleId}
*/
export
function
getNewsInfo
(
moduleId
=
'0104'
)
{
*/
export
function
getNewsInfo
(
moduleId
=
"0104"
)
{
return
http
.
get
(
`/api/commonFeature/news/
${
moduleId
}
`
);
}
/**
* 社交媒体信息
* url:/commonFeature/remarks/{moduleId}
*/
export
function
getSocialMediaInfo
(
moduleId
=
'0104'
)
{
*/
export
function
getSocialMediaInfo
(
moduleId
=
"0104"
)
{
return
http
.
get
(
`/api/commonFeature/remarks/
${
moduleId
}
`
);
}
/**
* 发布频度
* url:/entitiesDataCount/getAnnualCount
*/
*/
export
function
getReleaseCount
(
id
)
{
return
http
.
get
(
`/api/entitiesDataCount/getAnnualCount?sanTypeId=
${
id
}
`
);
}
...
...
@@ -78,7 +78,7 @@ export function getReleaseCount(id) {
/**
* 制裁领域分析
* url:/entitiesDataCount/getSanDomainCount
*/
*/
export
function
getSanDomainCount
(
sanTypeIds
)
{
return
http
.
get
(
`/api/entitiesDataCount/getSanDomainCount?sanTypeIds=
${
sanTypeIds
}
`
);
}
...
...
@@ -86,7 +86,7 @@ export function getSanDomainCount(sanTypeIds) {
/**
* 制裁清单增长趋势
* url:/entitiesDataCount/getAnnualSanDomain
*/
*/
export
function
getAnnualSanDomain
(
params
)
{
return
http
.
post
(
"/api/entitiesDataCount/getAnnualSanDomain"
,
params
);
}
...
...
@@ -94,9 +94,9 @@ export function getAnnualSanDomain(params) {
/**
* 全部制裁(历史制裁过程)
* url:/entitiesDataCount/getSanctionProcess
*/
*/
export
function
getSanctionProcess
(
sanTypeIds
=
"1"
,
pageNum
=
1
,
pageSize
=
10
,
isCn
=
false
)
{
return
http
.
post
(
"/api/entitiesDataCount/getSanctionProcess"
,{
return
http
.
post
(
"/api/entitiesDataCount/getSanctionProcess"
,
{
sanTypeIds
,
// typeName: tabMap[sanTypeId],
pageNum
,
...
...
@@ -104,3 +104,35 @@ export function getSanctionProcess(sanTypeIds = "1", pageNum = 1, pageSize = 10,
isCn
});
}
/**
* 制裁实体领域数量变化情况
* url:/sanctionList/statistics/domainNum
*/
export
function
getDomainNum
(
params
)
{
return
http
.
get
(
"/api/sanctionList/statistics/domainNum"
,
params
);
}
/**
* 获取制裁实体类型分布列表
* url:/sanctionList/statistics/entityTypeId
*/
export
function
getEntityTypeCount
(
params
)
{
return
http
.
get
(
"/api/sanctionList/statistics/entityTypeId"
,
params
);
}
/**
* 新闻链接
* url:/sanctionList/invFin/getRelateNews
*/
export
function
getRelateNews
(
sanRecordId
)
{
return
http
.
get
(
`/api/sanctionList/invFin/getRelateNews?sanRecordId=
${
sanRecordId
}
`
);
}
/**
* 制裁原因及相关历史制裁
* url:/sanctionList/invFin/getReasonAndSan
*/
export
function
getReasonAndSan
(
sanRecordId
)
{
return
http
.
get
(
`/api/sanctionList/invFin/getReasonAndSan?sanRecordId=
${
sanRecordId
}
`
);
}
src/router/modules/exportControl.js
浏览文件 @
dc99c723
// 出口管制
const
ExportControl
=
()
=>
import
(
'@/views/exportControl/index.vue'
)
const
ExportControl
=
()
=>
import
(
"@/views/exportControl/index.vue"
);
const
exportControlRoutes
=
[
// 出口管制首页
...
...
@@ -44,7 +44,7 @@ const exportControlRoutes = [
meta
:
{
title
:
"影响分析"
}
},
}
]
},
{
...
...
@@ -102,7 +102,7 @@ const exportControlRoutes = [
name
:
"singleSanction"
,
component
:
()
=>
import
(
"@/views/exportControl/v2.0SingleSanction/index.vue"
),
meta
:
{
title
:
"单条
制裁详情"
,
title
:
"单次
制裁详情"
,
dynamicTitle
:
true
}
},
...
...
@@ -110,12 +110,12 @@ const exportControlRoutes = [
{
path
:
"/exportControl/origin"
,
name
:
"entityListOrigin"
,
component
:
()
=>
import
(
"@/views/exportControl/v2.0SingleSanction/originPage/index.vue"
),
component
:
()
=>
import
(
"@/views/exportControl/v2.0SingleSanction/originPage/index.vue"
)
// meta: {
// title: "实体清单原文"
// }
},
// V2.0全部实体
清单
// V2.0商业制裁
清单
{
path
:
"/exportControl/commercialControlList"
,
name
:
"commercialControlList"
,
...
...
@@ -124,6 +124,6 @@ const exportControlRoutes = [
title
:
"商业管制清单概览"
}
}
]
]
;
export
default
exportControlRoutes
\ No newline at end of file
export
default
exportControlRoutes
;
src/router/modules/finance.js
浏览文件 @
dc99c723
// 投融资限制
const
Finance
=
()
=>
import
(
'@/views/finance/index.vue'
)
const
Finance
=
()
=>
import
(
"@/views/finance/index.vue"
);
const
financeRoutes
=
[
// 投融资限制
...
...
@@ -12,7 +12,43 @@ const financeRoutes = [
isShowHeader
:
true
}
},
// SDN制裁清单概览
{
path
:
"/finance/sdnlistoverview"
,
name
:
"sdnlistOverview"
,
component
:
()
=>
import
(
"@/views/finance/v2.0EntityList/index.vue"
),
meta
:
{
title
:
"SDN制裁清单概览"
}
},
// V2.0单条制裁详情
{
path
:
"/finance/singleSanction"
,
name
:
"singleSanction"
,
component
:
()
=>
import
(
"@/views/finance/v2.0SingleSanction/index.vue"
),
meta
:
{
title
:
"单条制裁详情"
,
dynamicTitle
:
true
}
},
// V2.0单条制裁详情-实体清单原文
{
path
:
"/exportControl/origin"
,
name
:
"entityListOrigin"
,
component
:
()
=>
import
(
"@/views/exportControl/v2.0SingleSanction/originPage/index.vue"
)
// meta: {
// title: "实体清单原文"
// }
},
// V2.0商业制裁清单
{
path
:
"/finance/cmccontrolList"
,
name
:
"cmccontrolList"
,
component
:
()
=>
import
(
"@/views/finance/v2.0CommercialControlList/index.vue"
),
meta
:
{
title
:
"涉军企业清单概览"
}
}
];
]
export
default
financeRoutes
\ No newline at end of file
export
default
financeRoutes
;
src/views/exportControl/v2.0SingleSanction/index.vue
浏览文件 @
dc99c723
...
...
@@ -267,6 +267,7 @@ const resetModal = () => {
};
onMounted
(()
=>
{
console
.
log
(
"出口管制-单次制裁"
);
getUrlParams
();
getSingleSanctionOverviewData
();
});
...
...
src/views/exportControl/v2.0SingleSanction/mock.json
deleted
100644 → 0
浏览文件 @
63fa7533
差异被折叠。
点击展开。
src/views/finance/assets/icons/icon-open.png
0 → 100644
浏览文件 @
dc99c723
662 Bytes
src/views/finance/index.vue
浏览文件 @
dc99c723
...
...
@@ -1045,7 +1045,7 @@ const handleToEntityList = item => {
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
);
const
routeData
=
router
.
resolve
({
path
:
"/
exportControl
/singleSanction"
,
path
:
"/
finance
/singleSanction"
,
query
:
{
id
,
sanTypeId
...
...
@@ -1057,19 +1057,18 @@ const handleToEntityList = item => {
// 跳转到V2.0实体清单无ID
const
handleToEntityListNoId
=
item
=>
{
console
.
log
(
"这是什么数据 =>"
,
item
);
if
(
item
.
nameZh
==
"实体清单"
)
{
if
(
item
.
id
==
allSanTypeIds
.
value
[
0
])
{
const
routeData
=
router
.
resolve
({
path
:
"/
exportControl/entityList
"
,
path
:
"/
finance/sdnlistoverview
"
,
query
:
{
sanTypeId
:
item
.
id
}
});
// 打开一个新页面
window
.
open
(
routeData
.
href
,
"_blank"
);
}
else
if
(
item
.
nameZh
==
"商业管制清单"
)
{
}
else
if
(
item
.
id
==
allSanTypeIds
.
value
[
1
]
)
{
const
routeData
=
router
.
resolve
({
path
:
"/
exportControl/commercialC
ontrolList"
,
path
:
"/
finance/cmcc
ontrolList"
,
query
:
{
sanTypeId
:
item
.
id
}
...
...
@@ -1378,7 +1377,7 @@ watch(
const
fetchEntitiesList
=
async
(
page
=
1
,
size
=
10
)
=>
{
try
{
console
.
log
(
"activeResourceTabItem.value.id"
,
activeResourceTabItem
.
value
.
id
);
const
res
=
await
getEntitiesList
(
activeResourceTabItem
.
value
.
id
.
join
(
","
)
,
page
,
size
);
const
res
=
await
getEntitiesList
(
activeResourceTabItem
.
value
.
id
,
page
,
size
);
if
(
res
)
{
entitiesList
.
value
=
res
.
content
.
map
(
item
=>
({
...
item
,
...
...
@@ -1781,6 +1780,7 @@ onMounted(async () => {
// 获取出口管制制裁措施
await
fetchSanctionList
();
}
catch
(
err
)
{
console
.
log
(
"此处报错?"
);
console
.
log
(
err
);
}
handleGetHylyList
();
...
...
src/views/finance/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
dc99c723
...
...
@@ -104,19 +104,8 @@
</div>
</div>
</
template
>
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
<img :src="ai" alt="" class="icon1" />
<div class="text">美国对中国的制裁近年来呈现显著增长趋势。</div>
</div>
<div class="right">
<img :src="right" alt="" class="icon2" />
</div>
</div>
</div> -->
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -129,7 +118,7 @@
</div>
</AnalysisBox>
</div>
<div
class=
"main-item"
>
<
!-- <
div class="main-item">
<AnalysisBox title="制裁实体各省分布情况">
<template #header-btn>
<el-select v-model="regionTime" class="time-select" placeholder="请选择" @change="getRegionCountData">
...
...
@@ -155,17 +144,6 @@
</div>
</div>
</div>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
<img :src="ai" alt="" class="icon1" />
<div class="text">我国被制裁实体多分布于沿海经济活跃省份。</div>
</div>
<div class="right">
<img :src="right" alt="" class="icon2" />
</div>
</div>
</div> -->
<div class="data-origin-box">
<div class="data-origin-icon">
<img :src="tipsIcon" alt="" />
...
...
@@ -177,7 +155,7 @@
<AiPane :aiContent="rankChart.interpretation" />
</div>
</AnalysisBox>
</div>
</div>
-->
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体领域分布情况"
>
<
template
#
header-btn
>
...
...
@@ -185,19 +163,47 @@
<el-option
v-for=
"item in timeOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</
template
>
<!-- <div class="echarts" ref="domainChartRef"></div> -->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
<img :src="ai" alt="" class="icon1" />
<div class="text">美国对中国的制裁集中在半导体、人工智能等领域。</div>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
</div>
<div class="right">
<img :src="right" alt="" class="icon2" />
<div
class=
"data-origin-text"
>
进入实体清单的中国实体领域分布情况,数据来源:美国商务部官网
</div>
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"domainChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
</div> -->
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体领域数量变化情况"
>
<!-- <template #header-btn>
<el-select v-model="domainTime" class="time-select" placeholder="请选择" @change="getDomainCountData">
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template> -->
<
template
#
header-btn
>
<div
class=
"toggle-btns"
>
<div
class=
"t-btn"
:class=
"
{ active: activeDomainTab === 'year' }"
@click="handleDomainTabChange('year')"
>
按年度
</div>
<div
class=
"t-btn"
:class=
"
{ active: activeDomainTab === 'sanction' }"
@click="handleDomainTabChange('sanction')"
>
按制裁
</div>
</div>
</
template
>
<EChart
:option=
"domainNumChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -206,7 +212,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"domainChart.interpretation"
/>
<AiPane
:aiContent=
"domain
Num
Chart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -259,6 +265,8 @@ import {
getTechDomainCount
,
getEntityTypeCount
}
from
"@/api/exportControlV2.0"
;
import
{
getDomainNum
}
from
"@/api/finance"
;
import
getMultiLineChart
from
"@/views/ZMOverView/components/fourSuppress/components/addDomain/multiLineChart"
;
import
EChart
from
"@/components/Chart/index.vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
tipsIcon
from
"../../../assets/icons/info-icon.png"
;
...
...
@@ -267,6 +275,7 @@ import AiPane from "@/components/base/Ai/AiPane/index.vue";
import
{
useChartInterpretation
}
from
"@/views/exportControl/utils/common"
;
const
sanctionCountChart
=
useChartInterpretation
();
const
domainChart
=
useChartInterpretation
();
const
domainNumChart
=
useChartInterpretation
();
const
typeChart
=
useChartInterpretation
();
const
rankChart
=
useChartInterpretation
();
...
...
@@ -285,14 +294,15 @@ const getTypeCountData = async () => {
try
{
const
res
=
await
getEntityTypeCount
(
param
);
console
.
log
(
"制裁实体类型分布情况"
,
res
.
data
);
if
(
res
&&
res
.
code
===
200
)
{
const
data
=
res
.
data
||
[];
typeData
.
value
=
data
.
map
(
item
=>
({
name
:
item
.
name
,
value
:
item
.
count
||
item
.
value
}));
typeChart
.
interpret
({
type
:
"饼图"
,
name
:
"制裁实体类型分布情况"
,
data
:
data
});
updateTypeChart
();
typeChart
.
interpret
({
type
:
"饼图"
,
name
:
"制裁实体类型分布情况"
,
data
:
data
});
}
}
catch
(
error
)
{
console
.
error
(
"获取实体清单-数据统计-制裁实体类型分布情况失败:"
,
error
);
...
...
@@ -365,6 +375,35 @@ const getRegionCountData = async () => {
}
};
// 实体清单-数据统计- 制裁实体领域数量变化趋势
const
domainNumChartOption
=
ref
({});
const
activeDomainTab
=
ref
(
"year"
);
const
handleDomainTabChange
=
tab
=>
{
activeDomainTab
.
value
=
tab
;
getDomainNumData
();
};
const
getDomainNumData
=
async
()
=>
{
// 参数
const
param
=
{
IDsanTypeId
:
activeDomainTab
.
value
===
"year"
?
"year"
:
"record"
,
type
:
sanTypeId
.
value
};
try
{
const
res
=
await
getDomainNum
(
param
);
if
(
res
&&
res
.
code
===
200
)
{
domainNumChartOption
.
value
=
getMultiLineChart
({
data
:
res
.
data
||
[],
xAxis
:
res
.
xAxis
||
[],
yAxis
:
res
.
yAxis
||
[],
title
:
"制裁实体领域数量变化趋势"
,
xAxisName
:
"时间"
,
yAxisName
:
"数量"
});
}
}
catch
(
error
)
{
console
.
error
(
"获取实体清单-数据统计-制裁实体领域数量变化趋势失败:"
,
error
);
}
};
// 实体清单-数据统计-制裁实体数量变化情况
const
sanctionCountChange
=
ref
([]);
// 获取实体清单-数据统计-制裁实体数量变化情况
...
...
@@ -967,12 +1006,6 @@ const typeChartOption = ref({
]
});
const
updateTypeChart
=
()
=>
{
// if (!typeChartRef.value) return;
// let chart = echarts.getInstanceByDom(typeChartRef.value);
// if (!chart) {
// chart = echarts.init(typeChartRef.value);
// }
let
data
=
typeData
.
value
.
length
?
[...
typeData
.
value
]
:
[
...
...
@@ -989,7 +1022,7 @@ const updateTypeChart = () => {
totalValue
=
data
.
reduce
((
sum
,
item
)
=>
sum
+
(
item
.
value
||
0
),
0
);
}
if
(
data
.
length
>
TOP_N
)
{
//
if (data.length > TOP_N) {
const
topData
=
data
.
slice
(
0
,
TOP_N
);
const
otherData
=
data
.
slice
(
TOP_N
);
const
otherValue
=
otherData
.
reduce
((
sum
,
item
)
=>
sum
+
(
item
.
value
||
0
),
0
);
...
...
@@ -1002,7 +1035,7 @@ const updateTypeChart = () => {
// });
// }
typeChartOption
.
value
.
series
[
0
].
data
=
topData
;
}
//
}
// const option = {
// tooltip: {
...
...
@@ -1117,15 +1150,12 @@ onMounted(() => {
getDomainCountData
();
// 获取实体清单-数据统计-制裁实体类型分布情况
getTypeCountData
();
// 获取实体清单-数据统计-制裁实体领域数量变化趋势
getDomainNumData
();
});
</
script
>
<
style
scoped
lang=
"scss"
>
*
{
margin
:
0
;
padding
:
0
;
}
.data-statistics
{
width
:
1601px
;
margin
:
0
auto
;
...
...
src/views/finance/v2.0SingleSanction/components/deepMining/index.vue
浏览文件 @
dc99c723
...
...
@@ -565,7 +565,7 @@ onMounted(async () => {
display
:
flex
;
flex-direction
:
column
;
gap
:
16px
;
display
:
none
;
.tab-item
{
cursor
:
pointer
;
padding
:
4px
20px
;
...
...
src/views/finance/v2.0SingleSanction/components/impactAnalysis/index.vue
浏览文件 @
dc99c723
...
...
@@ -13,7 +13,7 @@
</div>
</div>
<industrial-impact
v-if=
"activeIndex === 0"
></industrial-impact>
<
research-impact
v-if=
"activeIndex === 1"
></research-impact
>
<
!--
<research-impact
v-if=
"activeIndex === 1"
></research-impact>
--
>
</div>
</
template
>
...
...
@@ -23,7 +23,8 @@ import { ref } from "vue";
import
industrialImpact
from
"./components/industrialImpact/index.vue"
;
import
researchImpact
from
"./components/researchImpact/index.vue"
;
const
activeTab
=
ref
([
"对华产业影响"
,
"对华科研影响"
]);
// const activeTab = ref(["对华产业影响", "对华科研影响"]);
const
activeTab
=
ref
([
"对华产业影响"
]);
const
activeIndex
=
ref
(
0
);
</
script
>
...
...
@@ -44,6 +45,7 @@ const activeIndex = ref(0);
display
:
flex
;
flex-direction
:
column
;
gap
:
16px
;
display
:
none
;
.tab-item
{
cursor
:
pointer
;
padding
:
4px
20px
;
...
...
src/views/finance/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
dc99c723
...
...
@@ -16,18 +16,18 @@
<div
class=
"label"
>
发布时间:
</div>
<div
class=
"value"
>
{{
formattedData
.
postDate
}}
</div>
</div>
<div
class=
"info-row"
>
<
!--
<
div
class=
"info-row"
>
<div
class=
"label"
>
生效时间:
</div>
<div
class=
"value"
>
{{
formattedData
.
effectiveDate
}}
</div>
</div>
</div>
-->
<div
class=
"info-row"
>
<div
class=
"label"
>
发布文件:
</div>
<div
class=
"value"
>
{{
formattedData
.
fileCode
}}
</div>
</div>
<div
class=
"info-row"
>
<
!--
<
div
class=
"info-row"
>
<div
class=
"label"
>
案卷号:
</div>
<div
class=
"value"
>
{{
formattedData
.
administrativeOrderId
}}
</div>
</div>
</div>
-->
<div
class=
"info-row"
>
<div
class=
"label"
>
发布人:
</div>
<div
class=
"value link"
>
...
...
@@ -42,6 +42,15 @@
</div>
</div>
</div>
<div
class=
"left-top-content"
>
<div
class=
"content-title"
>
新闻链接:
</div>
<div
class=
"distribution-list"
>
<div
class=
"list-item news-item"
v-for=
"item in newsList"
:key=
"item.newsId"
>
<div
class=
"item-title"
>
{{
item
.
newsTitle
}}
</div>
<img
:src=
"openIcon"
class=
"flag"
/>
</div>
</div>
</div>
<div
class=
"left-top-content"
>
<div
class=
"content-title"
>
制裁实体分布:
</div>
<div
class=
"distribution-list"
>
...
...
@@ -158,7 +167,7 @@
<el-table-column
label=
"实体名称"
min-width=
"280"
>
<template
#
default=
"scope"
>
<div
class=
"name-cell"
>
<
div
class=
"dot"
></div
>
<
!--
<div
class=
"dot"
></div>
--
>
<img
:src=
"defaultTitle"
class=
"company-icon"
/>
<span
class=
"company-name"
@
click=
"handleCompClick(scope.row)"
>
{{
scope
.
row
.
name
...
...
@@ -187,7 +196,22 @@
</el-table-column>
<el-table-column
prop=
"location"
label=
"上市地点"
width=
"90"
align=
"center"
/>
<el-table-column
prop=
"date"
label=
"制裁时间"
width=
"150"
align=
"center"
/>
<el-table-column
prop=
"revenue"
label=
"营收(亿元)"
width=
"110"
align=
"center"
/>
<el-table-column
prop=
"entityTypeId"
label=
"类型"
width=
"120"
align=
"center"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; gap: 4px; justify-content: center"
>
<AreaTag
:tagName=
"
scope.row.entityType === 1
? '个人'
: scope.row.entityType === 2
? '实体'
: '公司'
"
/>
</div>
</
template
>
</el-table-column>
<!-- <el-table-column prop="revenue" label="营收(亿元)" width="110" align="center" /> -->
<el-table-column
label=
"50%规则子企业"
width=
"180"
align=
"center"
>
<
template
#
default=
"scope"
>
<span
...
...
@@ -209,6 +233,8 @@
</div>
</div>
</AnalysisBox>
<div
:style=
"{ height: '20px' }"
></div>
<AnalysisBox
title=
"制裁原因及相关历史制裁"
:showAllBtn=
"false"
></AnalysisBox>
</div>
</div>
<!-- 50%规则子企业弹框 -->
...
...
@@ -231,11 +257,13 @@ import { debounce } from "lodash";
import
title
from
"../../assets/title.png"
;
import
defaultTitle
from
"../../assets/default-icon1.png"
;
import
flag
from
"../../assets/default-icon2.png"
;
import
openIcon
from
"../../../assets/icons/icon-open.png"
;
import
{
getSingleSanctionEntityCountry
,
getSingleSanctionBackground
,
getSingleSanctionOverviewList
}
from
"@/api/exportControlV2.0"
;
import
{
getRelateNews
}
from
"@/api/finance"
;
import
RuleSubsidiaryDialog
from
"../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue"
;
import
{
useRoute
}
from
"vue-router"
;
...
...
@@ -420,6 +448,19 @@ const getEntityCountry = async () => {
}
};
const
newsList
=
ref
([]);
// 调用新闻链接接口
const
getNewsList
=
async
()
=>
{
try
{
const
res
=
await
getRelateNews
(
sanRecordId
.
value
);
console
.
log
(
"res --:"
,
res
);
newsList
.
value
=
res
;
}
catch
(
error
)
{
console
.
log
(
error
);
}
};
const
props
=
defineProps
({
data
:
{
type
:
Object
,
...
...
@@ -562,6 +603,8 @@ onMounted(() => {
getUrlParams
();
// 单次制裁-制裁概况-制裁实体国家分布
getEntityCountry
();
// 新闻链接
getNewsList
();
// 单次制裁-制裁概况-制裁背景
getSanctionBackground
();
// 单次制裁-制裁概况-制裁清单
...
...
@@ -751,6 +794,35 @@ onMounted(() => {
}
}
}
.news-item
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
border-radius
:
20px
;
width
:
460px
;
background-color
:
rgb
(
246
,
250
,
255
);
padding
:
5px
15px
;
font-size
:
14px
;
height
:
36px
;
cursor
:
pointer
;
.item-title
{
font-size
:
14px
;
font-weight
:
400
;
color
:
rgba
(
5
,
95
,
194
,
1
);
font-family
:
Source
Han
Sans
CN
;
line-height
:
24px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
max-width
:
90%
;
}
.flag
{
width
:
16px
;
height
:
16px
;
margin-right
:
0px
;
}
}
}
}
}
...
...
@@ -1015,10 +1087,10 @@ onMounted(() => {
:deep
(
.el-table__header-wrapper
)
{
th
{
background-color
:
var
(
--
color-primary-100
)
!
important
;
//
background-color: var(--color-primary-100) !important;
height
:
48px
;
padding
:
0
;
color
:
#fff
;
color
:
rgb
(
34
,
41
,
52
)
;
font-weight
:
700
;
font-size
:
16px
;
font-family
:
"Microsoft YaHei"
;
...
...
@@ -1079,7 +1151,7 @@ onMounted(() => {
font-size
:
16px
;
font-weight
:
700
;
line-height
:
24px
;
font-family
:
"
Microsoft YaHei
"
;
font-family
:
"
Source Han Sans CN
"
;
color
:
rgba
(
59
,
65
,
75
,
1
);
cursor
:
pointer
;
}
...
...
src/views/finance/v2.0SingleSanction/index.vue
浏览文件 @
dc99c723
...
...
@@ -273,15 +273,12 @@ onMounted(() => {
</
script
>
<
style
scoped
lang=
"scss"
>
*
{
margin
:
0
;
padding
:
0
;
}
.entity-list
{
width
:
100%
;
height
:
100%
;
overflow-y
:
auto
;
padding-bottom
:
50px
;
padding-bottom
:
10px
;
background
:
#f7f8f9
;
.header
{
width
:
100%
;
height
:
148px
;
...
...
src/views/finance/v2.0SingleSanction/mock.json
deleted
100644 → 0
浏览文件 @
63fa7533
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论