Browse Source

♻️ refactor(stock-chart): 重构股票数据查询逻辑

- 替换API客户端为stockDataClient和dateNotesClient
- 添加查询参数支持,包括筛选条件、分页和每页大小
- 引入类型定义StockDataListResponse和DateNotesListResponse
- 实现数据转换逻辑,将API响应转换为图表所需格式
- 优化查询键和查询函数实现

🐛 fix(stock-chart): 修复数据处理错误

- 修复stockData和memoData的默认值处理
- 确保在API响应为空时返回正确的空数组格式
yourname 5 months ago
parent
commit
81bdc34cae

+ 49 - 12
src/client/mobile/components/stock/components/stock-chart/src/hooks/useStockQueries.ts

@@ -1,35 +1,72 @@
 import { useQuery } from '@tanstack/react-query';
-import { stockApi } from '../services/api';
+import { stockDataClient } from '@/client/api';
+import { dateNotesClient } from '@/client/api';
 import type { StockData, DateMemo } from '../types/index';
 import { toast } from 'react-toastify';
 import { useEffect } from 'react';
+import type { InferResponseType } from 'hono/client';
+
+// 定义响应类型
+type StockDataListResponse = InferResponseType<typeof stockDataClient.$get, 200>;
+type DateNotesListResponse = InferResponseType<typeof dateNotesClient.$get, 200>;
 
 export function useStockQueries(code?: string) {
   // 查询股票历史数据
-  const { 
-    data: stockData = [], 
+  const {
+    data: stockDataResponse,
     isLoading: isLoadingStock,
     error: stockError,
     refetch: refetchStock
-  } = useQuery<StockData[]>({
+  } = useQuery<StockDataListResponse>({
     queryKey: ['stockHistory', code],
-    queryFn: () => stockApi.getStockHistory(code),
-    enabled: false, // 默认不自动查询
+    queryFn: () => stockDataClient.$get({
+      query: {
+        filters: JSON.stringify(code ? { code } : {}),
+        page: 1,
+        pageSize: 1000
+      }
+    }).then(res => res.json()),
+    enabled: false,
     retry: 0,
   });
 
   // 查询备忘录数据
-  const { 
-    data: memoData = [], 
+  const {
+    data: memoDataResponse,
     isLoading: isLoadingMemo,
     error: memoError,
     refetch: refetchMemo
-  } = useQuery<DateMemo[]>({
+  } = useQuery<DateNotesListResponse>({
     queryKey: ['memoData', code],
-    queryFn: () => stockApi.getMemoData(code),
-    enabled: false, // 默认不自动查询
+    queryFn: () => dateNotesClient.$get({
+      query: {
+        filters: JSON.stringify(code ? { code } : {}),
+        page: 1,
+        pageSize: 1000
+      }
+    }).then(res => res.json()),
+    enabled: false,
   });
 
+  // 转换数据格式
+  const stockData = stockDataResponse?.data?.map(item => ({
+    o: String(item.data.o),
+    c: String(item.data.c),
+    h: String(item.data.h),
+    l: String(item.data.l),
+    v: String(item.data.v),
+    d: String(item.data.d),
+    zd: String(item.data.zd),
+    pc: item.data.pc ? String(item.data.pc) : undefined,
+  })) as StockData[] || [];
+
+  const memoData = memoDataResponse?.data?.map(item => ({
+    _id: item.id,
+    代码: item.code,
+    日期: item.noteDate,
+    提示: item.note,
+  })) as DateMemo[] || [];
+
   const isLoading = isLoadingStock || isLoadingMemo;
   const error = stockError || memoError;
 
@@ -60,4 +97,4 @@ export function useStockQueries(code?: string) {
     error,
     fetchData,
   };
-} 
+}