From cf4fdf6a683b417d526e1b3c188ee7f512d5c98b Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Fri, 28 Nov 2025 07:14:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=A0=E5=AF=BC=E7=BB=83UI=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/TransmissionChainAnalysis.js | 245 ++++++++++-------- 1 file changed, 135 insertions(+), 110 deletions(-) diff --git a/src/views/EventDetail/components/TransmissionChainAnalysis.js b/src/views/EventDetail/components/TransmissionChainAnalysis.js index 87c4b4a9..cfe86023 100644 --- a/src/views/EventDetail/components/TransmissionChainAnalysis.js +++ b/src/views/EventDetail/components/TransmissionChainAnalysis.js @@ -1,18 +1,18 @@ import React, { useEffect, useState, useRef } from 'react'; -import { - Box, - Button, - Flex, - Spinner, - Alert, - AlertIcon, - Text, - Stat, - StatLabel, - StatNumber, - HStack, - VStack, - Tag, +import { + Box, + Button, + Flex, + Spinner, + Alert, + AlertIcon, + Text, + Stat, + StatLabel, + StatNumber, + HStack, + VStack, + Tag, Badge, List, ListItem, @@ -28,9 +28,11 @@ import { ModalCloseButton, Icon, useColorModeValue, - Tooltip + Tooltip, + Center } from '@chakra-ui/react'; import { InfoIcon, ViewIcon } from '@chakra-ui/icons'; +import { Share2, GitBranch, Inbox } from 'lucide-react'; import ReactECharts from 'echarts-for-react'; import { eventService } from '../../../services/eventService'; import CitedContent from '../../../components/Citation/CitedContent'; @@ -637,7 +639,7 @@ const TransmissionChainAnalysis = ({ eventId }) => { }; return ( - + {/* 统计信息条 */} { borderColor={PROFESSIONAL_COLORS.border.default} bg={PROFESSIONAL_COLORS.background.secondary} > - - - 总节点数 - {stats.totalNodes} + + + 总节点数 + {stats.totalNodes} - - 涉及行业 - {stats.involvedIndustries} + + 涉及行业 + {stats.involvedIndustries} - - 相关公司 - {stats.relatedCompanies} + + 相关公司 + {stats.relatedCompanies} - - 正向影响 - {stats.positiveImpact} + + 正向影响 + {stats.positiveImpact} - - 负向影响 - {stats.negativeImpact} + + 负向影响 + {stats.negativeImpact} - - 循环效应 - {stats.circularEffect} + + 循环效应 + {stats.circularEffect} - + {/* 自定义图例 */} - - - {Object.entries(NODE_STYLES).map(([type, style]) => ( - - - {NODE_TYPE_LABELS[type] || type} - - ))} - - + + {Object.entries(NODE_STYLES).map(([type, style]) => ( + + + {NODE_TYPE_LABELS[type] || type} + + ))} + {/* 视图切换按钮 */} - {loading && ( @@ -748,79 +751,101 @@ const TransmissionChainAnalysis = ({ eventId }) => { {!loading && !error && ( - {/* 提示信息 */} - - - - - 点击图表中的节点可以查看详细信息 - - - - {/* 图表容器 */} + {/* 图表容器 - 宽高比 2:1,H5 自适应 */} + + {/* 提示信息 - 固定在左上角 */} + + + 点击节点查看详情 + {chartReady && ( <> - {viewMode === 'graph' ? ( - { - // 减少不必要的重新渲染 - return JSON.stringify(prevProps.option) !== JSON.stringify(props.option); - }} - /> + {/* 空状态提示 */} + {(viewMode === 'graph' && (!graphData || !graphData.nodes || graphData.nodes.length === 0)) || + (viewMode === 'sankey' && (!sankeyData || !sankeyData.nodes || sankeyData.nodes.length === 0)) ? ( +
+ + + 暂无传导链数据 + +
) : ( - { - // 减少不必要的重新渲染 - return JSON.stringify(prevProps.option) !== JSON.stringify(props.option); - }} - /> + <> + {viewMode === 'graph' ? ( + { + // 减少不必要的重新渲染 + return JSON.stringify(prevProps.option) !== JSON.stringify(props.option); + }} + /> + ) : ( + { + // 减少不必要的重新渲染 + return JSON.stringify(prevProps.option) !== JSON.stringify(props.option); + }} + /> + )} + )} )} +
)} - + {/* 节点详情弹窗 */} {isModalOpen && (