提交 4a198500 authored 作者: 付康's avatar 付康

合并分支 'fk-dev' 到 'pre'

Fk dev 查看合并请求 !324
流水线 #389 已通过 于阶段
in 3 分 30 秒
...@@ -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('routeQuery', JSON.stringify(query)); sessionStorage.setItem('countryRouteQuery', JSON.stringify(query));
} }
} else { } else {
const savedQuery = JSON.parse(sessionStorage.getItem('routeQuery') || '{}'); const savedQuery = JSON.parse(sessionStorage.getItem('countryRouteQuery') || '{}');
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 = '自定义'
......
...@@ -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('decreeRouteQuery', JSON.stringify(query)); sessionStorage.setItem('commerceRouteQuery', JSON.stringify(query));
} }
} else { } else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}'); const savedQuery = JSON.parse(sessionStorage.getItem('commerceRouteQuery') || '{}');
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 = '自定义'
......
...@@ -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('decreeRouteQuery', JSON.stringify(query)); sessionStorage.setItem('commerceEventRouteQuery', JSON.stringify(query));
} }
} else { } else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}'); const savedQuery = JSON.parse(sessionStorage.getItem('commerceEventRouteQuery') || '{}');
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 = '自定义'
......
...@@ -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('decreeRouteQuery', JSON.stringify(query)); sessionStorage.setItem('entityRouteQuery', JSON.stringify(query));
} }
} else { } else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}'); const savedQuery = JSON.parse(sessionStorage.getItem('entityRouteQuery') || '{}');
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()
......
...@@ -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('decreeRouteQuery', JSON.stringify(query)); sessionStorage.setItem('entityEventRouteQuery', JSON.stringify(query));
} }
} else { } else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}'); const savedQuery = JSON.parse(sessionStorage.getItem('entityEventRouteQuery') || '{}');
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 = '自定义'
......
...@@ -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/dataCommerceControlList": case "/dataLibrary/dataEntityListEvent":
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/dataEntityListEvent": case "/dataLibrary/dataCommerceControlList":
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;
......
...@@ -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;
} }
......
...@@ -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"
} }
......
...@@ -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;
} }
......
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论