update pay function

This commit is contained in:
2025-11-25 11:22:34 +08:00
parent ce0e91a5fb
commit f76bd17160
2 changed files with 39 additions and 18 deletions

View File

@@ -1,5 +1,6 @@
// src/components/StockChart/KLineChartModal.tsx - K线图弹窗组件 // src/components/StockChart/KLineChartModal.tsx - K线图弹窗组件
import React, { useEffect, useRef, useState } from 'react'; import React, { useEffect, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
import { import {
Modal, Modal,
ModalOverlay, ModalOverlay,
@@ -15,10 +16,12 @@ import {
CircularProgress, CircularProgress,
Alert, Alert,
AlertIcon, AlertIcon,
ChakraProvider,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { stockService } from '@services/eventService'; import { stockService } from '@services/eventService';
import { logger } from '@utils/logger'; import { logger } from '@utils/logger';
import theme from '@theme/theme';
/** /**
* 股票信息 * 股票信息
@@ -453,26 +456,44 @@ const KLineChartModal: React.FC<KLineChartModalProps> = ({
} }
}, [isOpen, stock?.stock_code, eventTime]); }, [isOpen, stock?.stock_code, eventTime]);
// 创建或获取 Portal 容器
useEffect(() => {
let container = document.getElementById('kline-modal-root');
if (!container) {
container = document.createElement('div');
container.id = 'kline-modal-root';
container.style.cssText = 'position: fixed; top: 0; left: 0; z-index: 10000;';
document.body.appendChild(container);
}
return () => {
// 组件卸载时不删除容器,因为可能会被复用
};
}, []);
if (!stock) return null; if (!stock) return null;
console.log('[KLineChartModal] 渲染 Modal, isOpen:', isOpen); console.log('[KLineChartModal] 渲染 Modal, isOpen:', isOpen);
return ( // 获取 Portal 容器
<Modal const portalContainer = document.getElementById('kline-modal-root') || document.body;
isOpen={isOpen}
onClose={onClose} const modalContent = (
size={size} <ChakraProvider theme={theme}>
blockScrollOnMount={false} <Modal
isCentered isOpen={isOpen}
> onClose={onClose}
<ModalOverlay bg="blackAlpha.700" /> size={size}
<ModalContent blockScrollOnMount={false}
maxW="90vw" isCentered
maxH="85vh"
bg="#1a1a1a"
border="2px solid #ffd700"
boxShadow="0 0 30px rgba(255, 215, 0, 0.5)"
> >
<ModalOverlay bg="blackAlpha.700" />
<ModalContent
maxW="90vw"
maxH="85vh"
bg="#1a1a1a"
border="2px solid #ffd700"
boxShadow="0 0 30px rgba(255, 215, 0, 0.5)"
>
<ModalHeader pb={3} borderBottomWidth="1px" borderColor="#404040"> <ModalHeader pb={3} borderBottomWidth="1px" borderColor="#404040">
<VStack align="flex-start" spacing={1}> <VStack align="flex-start" spacing={1}>
<HStack spacing={3}> <HStack spacing={3}>
@@ -528,7 +549,10 @@ const KLineChartModal: React.FC<KLineChartModalProps> = ({
</ModalBody> </ModalBody>
</ModalContent> </ModalContent>
</Modal> </Modal>
</ChakraProvider>
); );
return createPortal(modalContent, portalContainer);
}; };
export default KLineChartModal; export default KLineChartModal;

View File

@@ -296,9 +296,6 @@ const InvestmentCalendar = () => {
formattedEventTime: formattedEventTime formattedEventTime: formattedEventTime
}); });
// 先关闭相关股票模态框,避免 z-index 冲突
setStockModalVisible(false);
setSelectedStock({ setSelectedStock({
stock_code: stockCode, // 添加交易所后缀 stock_code: stockCode, // 添加交易所后缀
stock_name: stock[1] stock_name: stock[1]