update pay function

This commit is contained in:
2025-11-23 16:57:02 +08:00
parent a778f94b68
commit acb7862789
2 changed files with 186 additions and 35 deletions

View File

@@ -468,34 +468,126 @@ const ValueChainNodeCard = ({ node, isCompany = false, level = 0 }) => {
<Spinner size="md" />
</Center>
) : relatedCompanies.length > 0 ? (
<VStack align="stretch" spacing={2} maxH="300px" overflowY="auto">
{relatedCompanies.map((company, idx) => (
<Card key={idx} variant="outline" size="sm">
<CardBody p={3}>
<HStack justify="space-between">
<VStack align="start" spacing={1}>
<HStack>
<Text fontSize="sm" fontWeight="medium">{company.stock_name}</Text>
<Badge size="sm" colorScheme="blue">{company.stock_code}</Badge>
<VStack align="stretch" spacing={3} maxH="400px" overflowY="auto">
{relatedCompanies.map((company, idx) => {
// 获取节点层级标签
const getLevelLabel = (level) => {
if (level < 0) return { text: '上游', color: 'orange' };
if (level === 0) return { text: '核心', color: 'blue' };
if (level > 0) return { text: '下游', color: 'green' };
return { text: '未知', color: 'gray' };
};
const levelInfo = getLevelLabel(company.node_info?.node_level);
return (
<Card key={idx} variant="outline" size="sm">
<CardBody p={3}>
<VStack align="stretch" spacing={2}>
{/* 公司基本信息 */}
<HStack justify="space-between">
<VStack align="start" spacing={1} flex={1}>
<HStack flexWrap="wrap">
<Text fontSize="sm" fontWeight="bold">{company.stock_name}</Text>
<Badge size="sm" colorScheme="blue">{company.stock_code}</Badge>
<Badge size="sm" colorScheme={levelInfo.color} variant="solid">
{levelInfo.text}
</Badge>
{company.node_info?.node_type && (
<Badge size="sm" colorScheme="purple" variant="outline">
{company.node_info.node_type}
</Badge>
)}
</HStack>
{company.company_name && (
<Text fontSize="xs" color="gray.500" noOfLines={1}>
{company.company_name}
</Text>
)}
</VStack>
<IconButton
size="sm"
icon={<ExternalLinkIcon />}
variant="ghost"
colorScheme="blue"
onClick={() => {
window.location.href = `/company?stock_code=${company.stock_code}`;
}}
aria-label="查看公司详情"
/>
</HStack>
{company.company_name && (
<Text fontSize="xs" color="gray.500">{company.company_name}</Text>
{/* 节点描述 */}
{company.node_info?.node_description && (
<Text fontSize="xs" color="gray.600" noOfLines={2}>
{company.node_info.node_description}
</Text>
)}
{/* 节点指标 */}
{(company.node_info?.importance_score || company.node_info?.market_share || company.node_info?.dependency_degree) && (
<HStack spacing={3} pt={1} borderTop="1px" borderColor="gray.100">
{company.node_info.importance_score && (
<HStack spacing={1}>
<Text fontSize="xs" color="gray.500">重要度:</Text>
<Badge size="xs" colorScheme="red">{company.node_info.importance_score}</Badge>
</HStack>
)}
{company.node_info.market_share && (
<HStack spacing={1}>
<Text fontSize="xs" color="gray.500">市场份额:</Text>
<Text fontSize="xs" fontWeight="medium">{company.node_info.market_share}%</Text>
</HStack>
)}
{company.node_info.dependency_degree && (
<HStack spacing={1}>
<Text fontSize="xs" color="gray.500">依赖度:</Text>
<Text fontSize="xs" fontWeight="medium">{company.node_info.dependency_degree}%</Text>
</HStack>
)}
</HStack>
)}
{/* 流向关系 */}
{company.relationships && company.relationships.length > 0 && (
<Box pt={2} borderTop="1px" borderColor="gray.100">
<Text fontSize="xs" fontWeight="bold" color="gray.600" mb={1}>
产业链关系:
</Text>
<VStack align="stretch" spacing={1}>
{company.relationships.map((rel, ridx) => (
<HStack key={ridx} fontSize="xs" spacing={2}>
<Icon
as={rel.role === 'source' ? FaArrowRight : FaArrowLeft}
color={rel.role === 'source' ? 'green.500' : 'orange.500'}
boxSize={3}
/>
<Text color="gray.700" noOfLines={1}>
{rel.role === 'source' ? '流向' : '来自'}
<Text as="span" fontWeight="medium" mx={1}>
{rel.connected_node}
</Text>
</Text>
{rel.relationship_desc && (
<Badge size="xs" colorScheme="cyan" variant="subtle" noOfLines={1}>
{rel.relationship_desc}
</Badge>
)}
{rel.flow_ratio && (
<Text color="purple.600" fontWeight="medium">
{rel.flow_ratio}%
</Text>
)}
</HStack>
))}
</VStack>
</Box>
)}
</VStack>
<IconButton
size="sm"
icon={<ExternalLinkIcon />}
variant="ghost"
colorScheme="blue"
onClick={() => {
window.location.href = `/company?stock_code=${company.stock_code}`;
}}
aria-label="查看公司详情"
/>
</HStack>
</CardBody>
</Card>
))}
</CardBody>
</Card>
);
})}
</VStack>
) : (
<Center py={4}>