提交 1d17e391 authored 作者: yanpeng's avatar yanpeng

finance api

上级 cb0a0e8a
流水线 #331 已通过 于阶段
in 1 分 39 秒
...@@ -30,7 +30,7 @@ import { http } from "./service.js"; ...@@ -30,7 +30,7 @@ import { http } from "./service.js";
/** /**
* 总次数统计 * 总次数统计
*/ */
export function getDataCount() { export function getDataCount() {
return http.get("/api/sanctionList/invFin/getTotalInfo"); return http.get("/api/sanctionList/invFin/getTotalInfo");
} }
...@@ -38,7 +38,7 @@ export function getDataCount() { ...@@ -38,7 +38,7 @@ export function getDataCount() {
/** /**
* 最新出口管制政策 * 最新出口管制政策
* url:/sanctionList/invFin/getLatestEntityListInfo * url:/sanctionList/invFin/getLatestEntityListInfo
*/ */
export function getLatestEntityListInfo() { export function getLatestEntityListInfo() {
return http.get("/api/sanctionList/invFin/getLatestEntityListInfo"); return http.get("/api/sanctionList/invFin/getLatestEntityListInfo");
} }
...@@ -46,31 +46,31 @@ export function getLatestEntityListInfo() { ...@@ -46,31 +46,31 @@ export function getLatestEntityListInfo() {
/** /**
* 风险信号 * 风险信号
* url:/commonFeature/riskSignal/{moduleId} * url:/commonFeature/riskSignal/{moduleId}
*/ */
export function getRiskSignal(moduleId='0104') { export function getRiskSignal(moduleId = "0104") {
return http.get(`/api/commonFeature/riskSignal/${moduleId}`); return http.get(`/api/commonFeature/riskSignal/${moduleId}`);
} }
/** /**
* 新闻资讯 * 新闻资讯
* url:/commonFeature/news/{moduleId} * url:/commonFeature/news/{moduleId}
*/ */
export function getNewsInfo(moduleId='0104') { export function getNewsInfo(moduleId = "0104") {
return http.get(`/api/commonFeature/news/${moduleId}`); return http.get(`/api/commonFeature/news/${moduleId}`);
} }
/** /**
* 社交媒体信息 * 社交媒体信息
* url:/commonFeature/remarks/{moduleId} * url:/commonFeature/remarks/{moduleId}
*/ */
export function getSocialMediaInfo(moduleId='0104') { export function getSocialMediaInfo(moduleId = "0104") {
return http.get(`/api/commonFeature/remarks/${moduleId}`); return http.get(`/api/commonFeature/remarks/${moduleId}`);
} }
/** /**
* 发布频度 * 发布频度
* url:/entitiesDataCount/getAnnualCount * url:/entitiesDataCount/getAnnualCount
*/ */
export function getReleaseCount(id) { export function getReleaseCount(id) {
return http.get(`/api/entitiesDataCount/getAnnualCount?sanTypeId=${id}`); return http.get(`/api/entitiesDataCount/getAnnualCount?sanTypeId=${id}`);
} }
...@@ -78,7 +78,7 @@ export function getReleaseCount(id) { ...@@ -78,7 +78,7 @@ export function getReleaseCount(id) {
/** /**
* 制裁领域分析 * 制裁领域分析
* url:/entitiesDataCount/getSanDomainCount * url:/entitiesDataCount/getSanDomainCount
*/ */
export function getSanDomainCount(sanTypeIds) { export function getSanDomainCount(sanTypeIds) {
return http.get(`/api/entitiesDataCount/getSanDomainCount?sanTypeIds=${sanTypeIds}`); return http.get(`/api/entitiesDataCount/getSanDomainCount?sanTypeIds=${sanTypeIds}`);
} }
...@@ -86,7 +86,7 @@ export function getSanDomainCount(sanTypeIds) { ...@@ -86,7 +86,7 @@ export function getSanDomainCount(sanTypeIds) {
/** /**
* 制裁清单增长趋势 * 制裁清单增长趋势
* url:/entitiesDataCount/getAnnualSanDomain * url:/entitiesDataCount/getAnnualSanDomain
*/ */
export function getAnnualSanDomain(params) { export function getAnnualSanDomain(params) {
return http.post("/api/entitiesDataCount/getAnnualSanDomain", params); return http.post("/api/entitiesDataCount/getAnnualSanDomain", params);
} }
...@@ -94,13 +94,37 @@ export function getAnnualSanDomain(params) { ...@@ -94,13 +94,37 @@ export function getAnnualSanDomain(params) {
/** /**
* 全部制裁(历史制裁过程) * 全部制裁(历史制裁过程)
* url:/entitiesDataCount/getSanctionProcess * url:/entitiesDataCount/getSanctionProcess
*/ */
export function getSanctionProcess(sanTypeIds = "1", pageNum = 1, pageSize = 10, isCn = false) { export function getSanctionProcess(sanTypeIds = "1", pageNum = 1, pageSize = 10, isCn = false) {
return http.post("/api/entitiesDataCount/getSanctionProcess",{ return http.post("/api/entitiesDataCount/getSanctionProcess", {
sanTypeIds, sanTypeIds,
// typeName: tabMap[sanTypeId], // typeName: tabMap[sanTypeId],
pageNum, pageNum,
pageSize, pageSize,
isCn 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}`);
}
// 出口管制 // 出口管制
const ExportControl = () => import('@/views/exportControl/index.vue') const ExportControl = () => import("@/views/exportControl/index.vue");
const exportControlRoutes = [ const exportControlRoutes = [
// 出口管制首页 // 出口管制首页
{ {
path: "/exportControl", path: "/exportControl",
name: "ExportControl", name: "ExportControl",
component: ExportControl, component: ExportControl,
meta: { meta: {
title: "出口管制概览", title: "出口管制概览",
isShowHeader: true isShowHeader: true
} }
}, },
{ {
path: "/exportControlAnalysis", path: "/exportControlAnalysis",
name: "exportControlAnalysis", name: "exportControlAnalysis",
component: () => import("@/views/exportControl/analysis/index.vue"), component: () => import("@/views/exportControl/analysis/index.vue"),
redirect: "/exportControlAnalysis/overview", redirect: "/exportControlAnalysis/overview",
meta: { meta: {
title: "分析页" title: "分析页"
}, },
children: [ children: [
{ {
path: "overview", path: "overview",
name: "exportControlAnalysisOverview", name: "exportControlAnalysisOverview",
component: () => import("@/views/exportControl/analysis/content/overview.vue"), component: () => import("@/views/exportControl/analysis/content/overview.vue"),
meta: { meta: {
title: "制裁概况" title: "制裁概况"
} }
}, },
{ {
path: "deepDig", path: "deepDig",
name: "exportControlAnalysisDeepDig", name: "exportControlAnalysisDeepDig",
component: () => import("@/views/exportControl/analysis/content/deepDig.vue"), component: () => import("@/views/exportControl/analysis/content/deepDig.vue"),
meta: { meta: {
title: "深度挖掘" title: "深度挖掘"
} }
}, },
{ {
path: "influence", path: "influence",
name: "exportControlAnalysisInfluence", name: "exportControlAnalysisInfluence",
component: () => import("@/views/exportControl/analysis/content/influence.vue"), component: () => import("@/views/exportControl/analysis/content/influence.vue"),
meta: { meta: {
title: "影响分析" title: "影响分析"
} }
}, }
] ]
}, },
{ {
path: "/exportControl/analysis", path: "/exportControl/analysis",
name: "analysis", name: "analysis",
component: () => import("@/views/exportControl/analysis/index.vue"), component: () => import("@/views/exportControl/analysis/index.vue"),
meta: { meta: {
title: "分析页" title: "分析页"
} }
}, },
{ {
path: "/exportControl/infoplatform", path: "/exportControl/infoplatform",
name: "infoplatform", name: "infoplatform",
component: () => import("@/views/exportControl/infoPlatform/index.vue"), component: () => import("@/views/exportControl/infoPlatform/index.vue"),
meta: { meta: {
title: "信息平台" title: "信息平台"
} }
}, },
{ {
path: "/exportControl/rulelimit", path: "/exportControl/rulelimit",
name: "rulelimit", name: "rulelimit",
component: () => import("@/views/exportControl/ruleLimit/index.vue"), component: () => import("@/views/exportControl/ruleLimit/index.vue"),
meta: { meta: {
title: "规则限制" title: "规则限制"
} }
}, },
{ {
path: "/exportControl/ruledetail", path: "/exportControl/ruledetail",
name: "ruledetail", name: "ruledetail",
component: () => import("@/views/exportControl/ruleDetail/index.vue"), component: () => import("@/views/exportControl/ruleDetail/index.vue"),
meta: { meta: {
title: "规则详情" title: "规则详情"
} }
}, },
{ {
path: "/exportControl/researchfunding", path: "/exportControl/researchfunding",
name: "researchfunding", name: "researchfunding",
component: () => import("@/views/exportControl/researchFunding/index.vue"), component: () => import("@/views/exportControl/researchFunding/index.vue"),
meta: { meta: {
title: "科研资助" title: "科研资助"
} }
}, },
// V2.0全部实体清单 // V2.0全部实体清单
{ {
path: "/exportControl/entityList", path: "/exportControl/entityList",
name: "entityList", name: "entityList",
component: () => import("@/views/exportControl/v2.0EntityList/index.vue"), component: () => import("@/views/exportControl/v2.0EntityList/index.vue"),
meta: { meta: {
title: "实体清单概览" title: "实体清单概览"
} }
}, },
// V2.0单条制裁详情 // V2.0单条制裁详情
{ {
path: "/exportControl/singleSanction", path: "/exportControl/singleSanction",
name: "singleSanction", name: "singleSanction",
component: () => import("@/views/exportControl/v2.0SingleSanction/index.vue"), component: () => import("@/views/exportControl/v2.0SingleSanction/index.vue"),
meta: { meta: {
title: "单条制裁详情", title: "单条制裁详情",
dynamicTitle: true dynamicTitle: true
} }
}, },
// V2.0单条制裁详情-实体清单原文 // V2.0单条制裁详情-实体清单原文
{ {
path: "/exportControl/origin", path: "/exportControl/origin",
name: "entityListOrigin", name: "entityListOrigin",
component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue"), component: () => import("@/views/exportControl/v2.0SingleSanction/originPage/index.vue")
// meta: { // meta: {
// title: "实体清单原文" // title: "实体清单原文"
// } // }
}, },
// V2.0全部实体清单 // V2.0商业制裁清单
{ {
path: "/exportControl/commercialControlList", path: "/exportControl/commercialControlList",
name: "commercialControlList", name: "commercialControlList",
component: () => import("@/views/exportControl/v2.0CommercialControlList/index.vue"), component: () => import("@/views/exportControl/v2.0CommercialControlList/index.vue"),
meta: { meta: {
title: "商业管制清单概览" title: "商业管制清单概览"
} }
} }
] ];
export default exportControlRoutes export default exportControlRoutes;
\ No newline at end of file
// 投融资限制 // 投融资限制
const Finance = () => import('@/views/finance/index.vue') const Finance = () => import("@/views/finance/index.vue");
const financeRoutes = [ const financeRoutes = [
// 投融资限制 // 投融资限制
{ {
path: "/finance", path: "/finance",
name: "Finance", name: "Finance",
component: Finance, component: Finance,
meta: { meta: {
title: "投融资限制概览", title: "投融资限制概览",
isShowHeader: true 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;
export default financeRoutes
\ No newline at end of file
...@@ -1045,7 +1045,7 @@ const handleToEntityList = item => { ...@@ -1045,7 +1045,7 @@ const handleToEntityList = item => {
entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目》" entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目》"
); );
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/singleSanction", path: "/finance/singleSanction",
query: { query: {
id, id,
sanTypeId sanTypeId
...@@ -1057,19 +1057,18 @@ const handleToEntityList = item => { ...@@ -1057,19 +1057,18 @@ const handleToEntityList = item => {
// 跳转到V2.0实体清单无ID // 跳转到V2.0实体清单无ID
const handleToEntityListNoId = item => { const handleToEntityListNoId = item => {
console.log("这是什么数据 =>", item); if (item.id == allSanTypeIds.value[0]) {
if (item.nameZh == "实体清单") {
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/entityList", path: "/finance/sdnlistoverview",
query: { query: {
sanTypeId: item.id sanTypeId: item.id
} }
}); });
// 打开一个新页面 // 打开一个新页面
window.open(routeData.href, "_blank"); window.open(routeData.href, "_blank");
} else if (item.nameZh == "商业管制清单") { } else if (item.id == allSanTypeIds.value[1]) {
const routeData = router.resolve({ const routeData = router.resolve({
path: "/exportControl/commercialControlList", path: "/finance/cmccontrolList",
query: { query: {
sanTypeId: item.id sanTypeId: item.id
} }
......
...@@ -104,19 +104,8 @@ ...@@ -104,19 +104,8 @@
</div> </div>
</div> </div>
</template> </template>
<!-- <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' }" />
<!-- <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-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
<img :src="tipsIcon" alt="" /> <img :src="tipsIcon" alt="" />
...@@ -129,7 +118,7 @@ ...@@ -129,7 +118,7 @@
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
<div class="main-item"> <!-- <div class="main-item">
<AnalysisBox title="制裁实体各省分布情况"> <AnalysisBox title="制裁实体各省分布情况">
<template #header-btn> <template #header-btn>
<el-select v-model="regionTime" class="time-select" placeholder="请选择" @change="getRegionCountData"> <el-select v-model="regionTime" class="time-select" placeholder="请选择" @change="getRegionCountData">
...@@ -155,17 +144,6 @@ ...@@ -155,17 +144,6 @@
</div> </div>
</div> </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-box">
<div class="data-origin-icon"> <div class="data-origin-icon">
<img :src="tipsIcon" alt="" /> <img :src="tipsIcon" alt="" />
...@@ -177,7 +155,7 @@ ...@@ -177,7 +155,7 @@
<AiPane :aiContent="rankChart.interpretation" /> <AiPane :aiContent="rankChart.interpretation" />
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div> -->
<div class="main-item"> <div class="main-item">
<AnalysisBox title="制裁实体领域分布情况"> <AnalysisBox title="制裁实体领域分布情况">
<template #header-btn> <template #header-btn>
...@@ -185,19 +163,47 @@ ...@@ -185,19 +163,47 @@
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</template> </template>
<!-- <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' }" />
<!-- <div class="bottom">
<div class="ai"> <div class="data-origin-box">
<div class="left"> <div class="data-origin-icon">
<img :src="ai" alt="" class="icon1" /> <img :src="tipsIcon" alt="" />
<div class="text">美国对中国的制裁集中在半导体、人工智能等领域。</div> </div>
<div class="data-origin-text">进入实体清单的中国实体领域分布情况,数据来源:美国商务部官网</div>
</div>
<div class="ai-pane">
<AiButton />
<AiPane :aiContent="domainChart.interpretation" />
</div>
</AnalysisBox>
</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>
<div class="right"> <div
<img :src="right" alt="" class="icon2" /> class="t-btn"
:class="{ active: activeDomainTab === 'sanction' }"
@click="handleDomainTabChange('sanction')"
>
按制裁
</div> </div>
</div> </div>
</div> --> </template>
<EChart :option="domainNumChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<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="" />
...@@ -206,7 +212,7 @@ ...@@ -206,7 +212,7 @@
</div> </div>
<div class="ai-pane"> <div class="ai-pane">
<AiButton /> <AiButton />
<AiPane :aiContent="domainChart.interpretation" /> <AiPane :aiContent="domainNumChart.interpretation" />
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
...@@ -259,6 +265,8 @@ import { ...@@ -259,6 +265,8 @@ import {
getTechDomainCount, getTechDomainCount,
getEntityTypeCount getEntityTypeCount
} from "@/api/exportControlV2.0"; } 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 EChart from "@/components/Chart/index.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import tipsIcon from "../../../assets/icons/info-icon.png"; import tipsIcon from "../../../assets/icons/info-icon.png";
...@@ -267,6 +275,7 @@ import AiPane from "@/components/base/Ai/AiPane/index.vue"; ...@@ -267,6 +275,7 @@ import AiPane from "@/components/base/Ai/AiPane/index.vue";
import { useChartInterpretation } from "@/views/exportControl/utils/common"; import { useChartInterpretation } from "@/views/exportControl/utils/common";
const sanctionCountChart = useChartInterpretation(); const sanctionCountChart = useChartInterpretation();
const domainChart = useChartInterpretation(); const domainChart = useChartInterpretation();
const domainNumChart = useChartInterpretation();
const typeChart = useChartInterpretation(); const typeChart = useChartInterpretation();
const rankChart = useChartInterpretation(); const rankChart = useChartInterpretation();
...@@ -285,14 +294,15 @@ const getTypeCountData = async () => { ...@@ -285,14 +294,15 @@ const getTypeCountData = async () => {
try { try {
const res = await getEntityTypeCount(param); const res = await getEntityTypeCount(param);
console.log("制裁实体类型分布情况", res.data);
if (res && res.code === 200) { if (res && res.code === 200) {
const data = res.data || []; const data = res.data || [];
typeData.value = data.map(item => ({ typeData.value = data.map(item => ({
name: item.name, name: item.name,
value: item.count || item.value value: item.count || item.value
})); }));
typeChart.interpret({ type: "饼图", name: "制裁实体类型分布情况", data: data });
updateTypeChart(); updateTypeChart();
typeChart.interpret({ type: "饼图", name: "制裁实体类型分布情况", data: data });
} }
} catch (error) { } catch (error) {
console.error("获取实体清单-数据统计-制裁实体类型分布情况失败:", error); console.error("获取实体清单-数据统计-制裁实体类型分布情况失败:", error);
...@@ -365,6 +375,35 @@ const getRegionCountData = async () => { ...@@ -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([]); const sanctionCountChange = ref([]);
// 获取实体清单-数据统计-制裁实体数量变化情况 // 获取实体清单-数据统计-制裁实体数量变化情况
...@@ -967,12 +1006,6 @@ const typeChartOption = ref({ ...@@ -967,12 +1006,6 @@ const typeChartOption = ref({
] ]
}); });
const updateTypeChart = () => { const updateTypeChart = () => {
// if (!typeChartRef.value) return;
// let chart = echarts.getInstanceByDom(typeChartRef.value);
// if (!chart) {
// chart = echarts.init(typeChartRef.value);
// }
let data = typeData.value.length let data = typeData.value.length
? [...typeData.value] ? [...typeData.value]
: [ : [
...@@ -989,20 +1022,20 @@ const updateTypeChart = () => { ...@@ -989,20 +1022,20 @@ const updateTypeChart = () => {
totalValue = data.reduce((sum, item) => sum + (item.value || 0), 0); 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 topData = data.slice(0, TOP_N);
const otherData = data.slice(TOP_N); const otherData = data.slice(TOP_N);
const otherValue = otherData.reduce((sum, item) => sum + (item.value || 0), 0); const otherValue = otherData.reduce((sum, item) => sum + (item.value || 0), 0);
// if (otherValue > 0) { // if (otherValue > 0) {
// topData.push({ // topData.push({
// name: "其他", // name: "其他",
// value: otherValue, // value: otherValue,
// extra: otherData // extra: otherData
// }); // });
// } // }
typeChartOption.value.series[0].data = topData; typeChartOption.value.series[0].data = topData;
} // }
// const option = { // const option = {
// tooltip: { // tooltip: {
...@@ -1117,15 +1150,12 @@ onMounted(() => { ...@@ -1117,15 +1150,12 @@ onMounted(() => {
getDomainCountData(); getDomainCountData();
// 获取实体清单-数据统计-制裁实体类型分布情况 // 获取实体清单-数据统计-制裁实体类型分布情况
getTypeCountData(); getTypeCountData();
// 获取实体清单-数据统计-制裁实体领域数量变化趋势
getDomainNumData();
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
* {
margin: 0;
padding: 0;
}
.data-statistics { .data-statistics {
width: 1601px; width: 1601px;
margin: 0 auto; margin: 0 auto;
......
...@@ -16,18 +16,18 @@ ...@@ -16,18 +16,18 @@
<div class="label">发布时间:</div> <div class="label">发布时间:</div>
<div class="value">{{ formattedData.postDate }}</div> <div class="value">{{ formattedData.postDate }}</div>
</div> </div>
<div class="info-row"> <!-- <div class="info-row">
<div class="label">生效时间:</div> <div class="label">生效时间:</div>
<div class="value">{{ formattedData.effectiveDate }}</div> <div class="value">{{ formattedData.effectiveDate }}</div>
</div> </div> -->
<div class="info-row"> <div class="info-row">
<div class="label">发布文件:</div> <div class="label">发布文件:</div>
<div class="value">{{ formattedData.fileCode }}</div> <div class="value">{{ formattedData.fileCode }}</div>
</div> </div>
<div class="info-row"> <!-- <div class="info-row">
<div class="label">案卷号:</div> <div class="label">案卷号:</div>
<div class="value">{{ formattedData.administrativeOrderId }}</div> <div class="value">{{ formattedData.administrativeOrderId }}</div>
</div> </div> -->
<div class="info-row"> <div class="info-row">
<div class="label">发布人:</div> <div class="label">发布人:</div>
<div class="value link"> <div class="value link">
...@@ -42,6 +42,15 @@ ...@@ -42,6 +42,15 @@
</div> </div>
</div> </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="left-top-content">
<div class="content-title">制裁实体分布:</div> <div class="content-title">制裁实体分布:</div>
<div class="distribution-list"> <div class="distribution-list">
...@@ -231,11 +240,13 @@ import { debounce } from "lodash"; ...@@ -231,11 +240,13 @@ import { debounce } from "lodash";
import title from "../../assets/title.png"; import title from "../../assets/title.png";
import defaultTitle from "../../assets/default-icon1.png"; import defaultTitle from "../../assets/default-icon1.png";
import flag from "../../assets/default-icon2.png"; import flag from "../../assets/default-icon2.png";
import openIcon from "../../../assets/icons/icon-open.png";
import { import {
getSingleSanctionEntityCountry, getSingleSanctionEntityCountry,
getSingleSanctionBackground, getSingleSanctionBackground,
getSingleSanctionOverviewList getSingleSanctionOverviewList
} from "@/api/exportControlV2.0"; } from "@/api/exportControlV2.0";
import { getRelateNews } from "@/api/finance";
import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue"; import RuleSubsidiaryDialog from "../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
...@@ -420,6 +431,19 @@ const getEntityCountry = async () => { ...@@ -420,6 +431,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({ const props = defineProps({
data: { data: {
type: Object, type: Object,
...@@ -562,6 +586,8 @@ onMounted(() => { ...@@ -562,6 +586,8 @@ onMounted(() => {
getUrlParams(); getUrlParams();
// 单次制裁-制裁概况-制裁实体国家分布 // 单次制裁-制裁概况-制裁实体国家分布
getEntityCountry(); getEntityCountry();
// 新闻链接
getNewsList();
// 单次制裁-制裁概况-制裁背景 // 单次制裁-制裁概况-制裁背景
getSanctionBackground(); getSanctionBackground();
// 单次制裁-制裁概况-制裁清单 // 单次制裁-制裁概况-制裁清单
...@@ -751,6 +777,35 @@ onMounted(() => { ...@@ -751,6 +777,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;
}
}
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论