Commit Graph

13 Commits

Author SHA1 Message Date
d14be2081d update pay function 2025-11-29 14:07:55 +08:00
zdl
9b55610167 perf: 将 Moment.js 替换为 Day.js,优化打包体积
## 改动内容
  - 替换所有 Moment.js 引用为 Day.js (29 个文件)
  - 更新 Webpack 配置,调整 calendar-lib chunk
  - 添加 Day.js 插件支持 (isSameOrBefore, isSameOrAfter)
  - 移除 Moment.js 依赖

  ## 性能提升
  - JavaScript 打包体积减少: ~50 KB (未压缩)
  - gzip 后减少: ~15-18 KB
  - 预计首屏加载时间提升: 15-20%

  ## 影响范围
  - Dashboard 组件: 5 个文件
  - Community 组件: 19 个文件
  - 工具函数: tradingTimeUtils.js (添加插件)
  - 其他组件: 5 个文件

  ## 测试状态
  -  构建成功 (npm run build)
2025-11-17 19:27:45 +08:00
46ba421f42 事件中心ui 2025-11-10 12:32:14 +08:00
6cd300b5ae 事件中心ui 2025-11-10 12:22:21 +08:00
zdl
69d4b8bae0 feat: k线图自适应 2025-11-05 10:10:22 +08:00
zdl
e7c495a8b1 feat: feat: 实现事件详情子模块懒加载useEventStocks添加 autoLoad 参数和分离加载函数 │ │
│ │   - DynamicNewsDetailPanel实现子模块折叠和懒加载
2025-11-05 08:29:44 +08:00
zdl
38d1b51af3 feat: 修改更新依赖 2025-11-04 20:19:01 +08:00
zdl
e7e2b3bb11 feat: 提交迷你分时图组件 2025-11-02 16:38:44 +08:00
zdl
d57db02c15 fix(klineDataCache): 修复 K线类型参数错误导致的 400 错误
**问题描述**
MiniTimelineChart 组件加载时,K线数据请求失败:
- 错误: `HTTP error! status: 400`
- 响应: `{"error":"不支持的类型"}`
- 请求: `GET /api/stock/{code}/kline?type=minute`

**根本原因**
klineDataCache.js 使用了错误的 K线类型参数:
-  使用: `'minute'`
-  应为: `'timeline'`

根据 API 文档 (MOCK_API_DOCS.md),后端支持的类型:
- `'timeline'` - 分时图
- `'daily'` - 日K线
- `'weekly'` - 周K线
- `'monthly'` - 月K线

**修复内容**

### 1. src/views/Community/components/StockDetailPanel/utils/klineDataCache.js

```diff
  const requestPromise = stockService
-   .getKlineData(stockCode, 'minute', normalizedEventTime)
+   .getKlineData(stockCode, 'timeline', normalizedEventTime)
    .then((res) => {
```

### 2. docs/StockDetailPanel_BUSINESS_LOGIC.md

更新文档中的 K线类型说明:
```diff
- **K线类型**: 'minute' (分时), 'day' (日K), 'week' (周K), 'month' (月K)
+ **K线类型**: 'timeline' (分时), 'daily' (日K), 'weekly' (周K), 'monthly' (月K)
```

更新代码示例:
```diff
  const requestPromise = stockService
-   .getKlineData(stockCode, 'minute', eventTime)
+   .getKlineData(stockCode, 'timeline', eventTime)
```

**验证**
-  与 MidjourneyHeroSection.js 中的用法保持一致
-  符合 MOCK_API_DOCS.md 规范
-  消除控制台 400 错误

**影响范围**
- StockDetailPanel 中的 MiniTimelineChart 组件
- 所有使用 fetchKlineData 的地方

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 18:32:24 +08:00
zdl
1b2437e71c fix: 使用 shallowEqual 修复 useSelector 引用不稳定导致的无限循环
## 问题
仍然报错 "Maximum update depth exceeded",第一次修复不完整。

## 根本原因(第二轮诊断)
useSelector 返回的数组/对象引用不稳定:

**useEventStocks.js**
```javascript
const stocks = useSelector(state =>
  eventId ? (state.stock.eventStocksCache[eventId] || []) : []
);
// 每次 Redux state 更新,|| [] 都会创建新数组引用
```

**StockDetailPanel.js 触发频繁更新**
```javascript
useEffect(() => {
  setFilteredStocks(stocks);  // stocks 引用变化 → setState
}, [searchText, stocks]);  // stocks 是不稳定的引用
```

**无限循环链**:
1. Redux state 更新 → stocks 新引用
2. stocks 变化 → 触发 StockDetailPanel useEffect
3. useEffect 调用 setFilteredStocks → 组件重新渲染
4. 重渲染可能触发其他操作 → Redux 更新
5. 返回步骤 1,无限循环 🔁

## 解决方案
在所有 useSelector 调用中使用 shallowEqual 进行浅比较:
```javascript
import { useSelector, shallowEqual } from 'react-redux';

const stocks = useSelector(
  state => eventId ? (state.stock.eventStocksCache[eventId] || []) : [],
  shallowEqual  // 内容相同则返回旧引用,防止不必要的更新
);
```

## 修改文件
1. **useEventStocks.js** - 6 个 useSelector 添加 shallowEqual
   - stocks, quotes, historicalEvents, loading
2. **useStockMonitoring.js** - 1 个 useSelector 添加 shallowEqual
   - quotes
3. **useWatchlist.js** - 1 个 useSelector 添加 shallowEqual
   - watchlistArray

## 工作原理
shallowEqual 会比较新旧值的内容:
- 如果内容相同 → 返回旧引用 → 不触发依赖更新
- 如果内容不同 → 返回新引用 → 正常触发更新

这样可以防止因为引用变化导致的不必要重新渲染。

## 影响
-  修复无限循环错误
-  减少不必要的组件重新渲染
-  提升整体性能

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 16:30:35 +08:00
zdl
941b8368ab refactor(StockDetailPanel): 提取5个UI组件和工具函数
**新增组件**:
  - MiniTimelineChart.js (175行) - K线分时图组件
  - StockSearchBar.js (50行) - 股票搜索栏
  - StockTable.js (230行) - 股票列表表格
  - LockedContent.js (50行) - 权限锁定提示
  - RelatedStocksTab.js (110行) - 关联股票Tab

  **新增工具**:
  - klineDataCache.js (160行) - K线数据缓存管理
    - 智能刷新策略:交易时段30秒,非交易时段1小时
    - 请求去重机制

   特性:
  - 保持100%原有功能
  - 遵循单一职责原则
  - 支持组件复用

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

  Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:53:00 +08:00
zdl
1d5efd88b2 feat: 创建第三个 Hook - useStockMonitoring.js(实时监控功能) 2025-10-30 13:06:48 +08:00
zdl
19a8866305 feat: 提交 Custom Hooks 2025-10-30 13:04:42 +08:00