update pay function
This commit is contained in:
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user