update pay ui

This commit is contained in:
2025-12-14 16:06:06 +08:00
parent b6b9a6b5dd
commit 024a34cdd0
6 changed files with 1034 additions and 50 deletions

View File

@@ -28,36 +28,36 @@ import {
} from '@chakra-ui/react';
import { StarIcon, TriangleUpIcon } from '@chakra-ui/icons';
import { logger } from '../../../utils/logger';
import { getApiBase } from '../../../utils/apiConfig';
import ztStaticService from '../../../services/ztStaticService';
const HighPositionStocks = ({ dateStr }) => {
const [highPositionData, setHighPositionData] = useState(null);
const [loading, setLoading] = useState(true);
const cardBg = useColorModeValue('white', 'gray.800');
const accentColor = useColorModeValue('blue.500', 'blue.300');
useEffect(() => {
fetchHighPositionStocks();
if (dateStr) {
fetchHighPositionStocks();
}
}, [dateStr]);
const fetchHighPositionStocks = async () => {
setLoading(true);
try {
const API_URL = process.env.NODE_ENV === 'production' ? `${getApiBase()}/report-api` : 'http://111.198.58.126:5001';
const response = await fetch(`${API_URL}/api/limit-analyse/high-position-stocks?date=${dateStr}`);
const data = await response.json();
const data = await ztStaticService.fetchHighPositionStocks(dateStr);
logger.debug('HighPositionStocks', 'API响应', {
logger.debug('HighPositionStocks', '静态数据响应', {
date: dateStr,
success: data.success,
dataLength: data.data?.length
stockCount: data.data?.stocks?.length
});
if (data.success) {
setHighPositionData(data.data);
} else {
logger.warn('HighPositionStocks', 'API返回失败', {
logger.warn('HighPositionStocks', '数据获取失败', {
date: dateStr,
error: data.error
});

View File

@@ -33,10 +33,8 @@ import {
// 注意:在实际使用中,这些组件应该被拆分到独立的文件中
// 这里为了演示,我们假设它们已经被正确导出
import { getApiBase } from '../../utils/apiConfig';
// API配置
const API_URL = process.env.NODE_ENV === 'production' ? `${getApiBase()}/report-api` : 'http://111.198.58.126:5001';
// 使用静态数据服务(从 /data/zt/ 读取 JSON 文件)
import ztStaticService from '../../services/ztStaticService';
// 导入的组件(实际使用时应该从独立文件导入)
// 恢复使用本页自带的轻量日历
@@ -112,14 +110,13 @@ export default function LimitAnalyse() {
}
}, [availableDates]);
// API调用函数
// 使用静态数据服务获取数据
const fetchAvailableDates = async () => {
try {
const response = await fetch(`${API_URL}/api/v1/dates/available`);
const data = await response.json();
const data = await ztStaticService.fetchAvailableDates();
if (data.success) {
setAvailableDates(data.events);
logger.debug('LimitAnalyse', '可用日期加载成功', {
logger.debug('LimitAnalyse', '可用日期加载成功(静态文件)', {
count: data.events?.length || 0
});
}
@@ -131,47 +128,29 @@ export default function LimitAnalyse() {
const fetchDailyAnalysis = async (date) => {
setLoading(true);
try {
const response = await fetch(`${API_URL}/api/v1/analysis/daily/${date}`);
const data = await response.json();
const data = await ztStaticService.fetchDailyAnalysis(date);
if (data.success) {
setDailyData(data.data);
// 🎯 追踪每日统计数据查看
trackDailyStatsViewed(data.data, date);
// 获取词云数据
fetchWordCloudData(date);
// 词云数据已包含在分析数据中
setWordCloudData(data.data.word_freq_data || []);
logger.debug('LimitAnalyse', '每日分析数据加载成功', {
logger.debug('LimitAnalyse', '每日分析数据加载成功(静态文件)', {
date,
totalStocks: data.data?.total_stocks || 0
totalStocks: data.data?.total_stocks || 0,
fromCache: data.from_cache
});
// ❌ 移除数据加载成功 toast非关键操作
}
} catch (error) {
logger.error('LimitAnalyse', 'fetchDailyAnalysis', error, { date });
// ❌ 移除数据加载失败 toast非关键操作
} finally {
setLoading(false);
}
};
const fetchWordCloudData = async (date) => {
try {
const response = await fetch(`${API_URL}/api/v1/analysis/wordcloud/${date}`);
const data = await response.json();
if (data.success) {
setWordCloudData(data.data);
logger.debug('LimitAnalyse', '词云数据加载成功', {
date,
count: data.data?.length || 0
});
}
} catch (error) {
logger.error('LimitAnalyse', 'fetchWordCloudData', error, { date });
}
};
// 格式化日期
const formatDateStr = (date) => {
const year = date.getFullYear();
@@ -193,27 +172,22 @@ export default function LimitAnalyse() {
fetchDailyAnalysis(dateString);
};
// 处理搜索
// 处理搜索(使用静态数据关键词搜索)
const handleSearch = async (searchParams) => {
// 🎯 追踪搜索开始
trackSearchInitiated(
searchParams.query,
searchParams.type || 'all',
searchParams.mode || 'hybrid'
searchParams.mode || 'keyword' // 静态模式只支持关键词搜索
);
setLoading(true);
try {
const response = await fetch(`${API_URL}/api/v1/stocks/search/hybrid`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(searchParams),
});
const data = await response.json();
const data = await ztStaticService.searchStocks(searchParams);
if (data.success) {
setSearchResults(data.data);
setIsSearchOpen(true);
logger.info('LimitAnalyse', '搜索完成', {
logger.info('LimitAnalyse', '搜索完成(静态文件)', {
resultCount: data.data?.total || 0,
searchParams
});
@@ -223,6 +197,13 @@ export default function LimitAnalyse() {
status: 'success',
duration: 3000,
});
} else {
toast({
title: '搜索失败',
description: data.error || '请稍后重试',
status: 'error',
duration: 3000,
});
}
} catch (error) {
logger.error('LimitAnalyse', 'handleSearch', error, { searchParams });