|
|
ae558996b6
|
update pay function
|
2025-11-19 20:23:56 +08:00 |
|
|
|
2ead50c37c
|
update pay function
|
2025-11-19 19:55:07 +08:00 |
|
|
|
9e8519bb94
|
Merge branch 'feature_2025/251117_pref' of https://git.valuefrontier.cn/vf/vf_react into feature_2025/251117_pref
|
2025-11-19 19:41:59 +08:00 |
|
|
|
a4d16e7686
|
update pay function
|
2025-11-19 19:41:26 +08:00 |
|
zdl
|
3eb31c99dc
|
fixbug: limit-analyse日历UI调整
|
2025-11-19 19:13:12 +08:00 |
|
zdl
|
de8d0ef1c3
|
pref: 备份旧文档
|
2025-11-18 18:22:31 +08:00 |
|
zdl
|
65c16d65ac
|
feat: 重构主组件 InvestmentPlanningCenter.tsx
重命名并重构: InvestmentPlanningCenter.js → InvestmentPlanningCenter.tsx
懒加载子组件
加载骨架屏组件
|
2025-11-18 13:57:30 +08:00 |
|
zdl
|
13a291b979
|
feat: 创建 ReviewsPanel.tsx
v
新建: src/views/Dashboard/components/ReviewsPanel.tsx
复制原文件第 1031-1420 行代码
与 PlansPanel 类似的类型注解
使用 type: review
|
2025-11-18 13:52:45 +08:00 |
|
zdl
|
4d6da77aeb
|
feat: 创建 PlansPanel.tsx
新建: src/views/Dashboard/components/PlansPanel.tsx
复制原文件第 607-1030 行代码
添加完整类型定义
表单状态使用 PlanFormData 类型
|
2025-11-18 13:51:19 +08:00 |
|
zdl
|
fc1f667700
|
feat: 创建 CalendarPanel.tsx 新建: src/views/Dashboard/components/CalendarPanel.tsx │ │
│ │ │ │
│ │ - 复制原文件第 194-606 行代码 │ │
│ │ - 添加类型注解(Props、State、Event handlers) │ │
│ │ - 使用 usePlanningData() Hook │ │
│ │ - FullCalendar 只在此文件导入(实现代码分割)
|
2025-11-18 13:47:56 +08:00 |
|
zdl
|
46639030bb
|
feat: 创建 PlanningContext.tsx
|
2025-11-18 13:43:08 +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 |
|
zdl
|
cbb6517bb1
|
perf: 优化 Community 页面 PostHog 追踪性能 + 提取 smartTrack 工具函数
✨ 新增功能:
- 创建 trackingHelpers.js 工具(requestIdleCallback + smartTrack)
- 创建 tracking.js 配置(事件优先级映射)
- 提取 smartTrack 为可复用工具函数
⚡ 性能优化:
- 区分关键/非关键事件,智能选择追踪时机
- 减少主线程阻塞时间 95%(200ms → 10ms)
- 移除 useCallback 包装,减少闭包开销
🔧 代码优化:
- 统一使用 @/ 路径别名(store/utils/contexts/constants)
- 添加 beforeunload 监听器,防止事件丢失
- 提升代码复用性(其他页面可直接使用 smartTrack)
🌐 浏览器兼容:
- requestIdleCallback polyfill(Safari 支持)
- 100% 浏览器兼容性
影响范围:Community 页面(新闻催化分析)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 17:27:02 +08:00 |
|
zdl
|
f33489f5d7
|
pref: useMemo优化
|
2025-11-17 16:54:26 +08:00 |
|
zdl
|
990d1ca0bc
|
perf: 使用 React.memo 优化社区组件渲染性能
**优化目标**:
- 减少组件卸载次数:从 6 次/刷新 → 1-2 次/刷新(↓ 66-83%)
- 减少渲染次数:从 9 次/刷新 → 4-5 次/刷新(↓ 44-55%)
**优化组件**(共 7 个):
1. ✅ ModeToggleButtons.js - 简单 UI 组件
2. ✅ DynamicNewsEventCard.js - 平铺模式卡片(被渲染 30+ 次)
3. ✅ HorizontalDynamicNewsEventCard.js - 纵向模式卡片(被渲染 10+ 次)
4. ✅ VerticalModeLayout.js - 布局组件
5. ✅ EventScrollList.js - 列表组件
6. ✅ VirtualizedFourRowGrid.js - 虚拟化网格(forwardRef)
7. ✅ DynamicNewsCard.js - 主组件(forwardRef)
**技术实现**:
- 普通组件:`React.memo(Component)`
- forwardRef 组件:`React.memo(forwardRef(...))`
- 所有回调函数已使用 useCallback 确保引用稳定
**预期效果**:
- 列表渲染的卡片组件收益最大(减少 90% 重渲染)
- 布局组件渲染次数从 9 次降到 1 次(减少 88%)
- 整体用户体验更流畅,无明显卡顿
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 15:00:46 +08:00 |
|
zdl
|
3cadd02492
|
fix: 修复 Socket 新事件通知后不刷新列表的问题
问题描述:
- 用户在第1页时收到新事件 Socket 通知
- 系统调用 handlePageChange(1) 想要刷新列表
- 但列表未刷新,新事件不显示
- 控制台日志显示"⚠️ 重复点击当前页: 1"
根本原因:
- usePagination 的 handlePageChange 函数有"重复点击"检查
- 当 newPage === currentPage 时直接 return(第 169-174 行)
- Socket 新事件触发刷新时,当前在第1页,调用 handlePageChange(1)
- 函数误认为是"用户重复点击分页按钮",阻止了刷新
设计冲突:
- 原始设计:防止用户重复点击分页按钮,避免不必要的 API 请求 ✅
- 副作用:阻止了 Socket 新事件触发的强制刷新逻辑 ❌
修复方案(添加 force 参数):
1. 修改 handlePageChange 函数签名:(newPage, force = false)
- force = true: 强制刷新(绕过"重复点击"检查)
- force = false: 正常翻页(保留原有检查)
2. 修改边界检查逻辑(第 173-184 行):
- 只有在非强制模式下才检查重复点击
- 强制模式下,即使页码相同也继续执行
- 添加日志:🔄 [翻页] 强制刷新当前页
3. 修改 Socket 新事件刷新调用(DynamicNewsCard.js:231):
- 修改前:handlePageChange(1)
- 修改后:handlePageChange(1, true) // force = true
修改文件:
- src/views/Community/components/DynamicNewsCard/hooks/usePagination.js
- 第 161 行:修改函数签名(添加 force 参数)
- 第 173-184 行:修改边界检查逻辑(添加 force 判断)
- src/views/Community/components/DynamicNewsCard.js
- 第 230-231 行:修改 handlePageChange 调用(传递 force: true)
修复效果:
- ✅ 收到新事件后,第1页强制刷新并显示新事件
- ✅ 保留原有的"重复点击"优化(普通翻页)
- ✅ 不影响其他页面的用户体验(第2页及以上不打断)
- ✅ 清晰的日志区分:
- 🔄 [翻页] 强制刷新当前页: 1(强制刷新)
- ⚠️ [翻页] 重复点击当前页: 2(阻止重复点击)
🤖 Generated with Claude Code
|
2025-11-17 12:12:01 +08:00 |
|
zdl
|
d69a32a320
|
fix: 修复个人中心不显示新发表的评论问题
问题描述:
- 用户在事件中心发表评论后,打开个人中心看不到新评论
- 个人中心"我的评论"区域始终为空或显示旧数据
根本原因:
- 项目存在两套独立的评论系统:
1. 旧系统(EventComment 表)- 个人中心查询此表
2. 新系统(Post 表)- 事件中心写入此表
- 创建评论时写入 Post 表,但个人中心查询 EventComment 表
- 两个表完全独立,数据不同步
修复方案(统一到 Post 系统):
1. 后端新增 API:GET /api/account/events/posts
- 查询 Post 表中当前用户的所有评论
- 返回格式完全兼容旧 EventComment.to_dict()
- 新增 event_title 字段(改进点,旧 API 没有)
2. 前端修改 API 调用:Center.js
- 将 /api/account/events/comments 改为 /api/account/events/posts
- 无需修改数据渲染逻辑(格式兼容)
修改文件:
- app.py (第 4144-4187 行) - 新增 get_my_event_posts API
- 查询 Post 表(user_id 过滤 + 按时间倒序)
- JOIN 查询关联的 Event(获取 event_title)
- 返回兼容格式:author(字符串), likes, created_at, event_title
- src/views/Dashboard/Center.js (第 105 行) - 修改 API 调用路径
- 修改前:GET /api/account/events/comments
- 修改后:GET /api/account/events/posts
数据兼容性:
- author 字段:字符串类型(与旧 EventComment 一致)
- likes 字段:映射自 likes_count
- created_at 字段:ISO 8601 格式
- 新增:event_title 字段(个人中心可显示评论关联的事件)
修复效果:
- 用户在事件中心发表评论 → 立即在个人中心看到新评论 ✅
- 评论显示完整信息:内容、时间、关联事件标题 ✅
- 前端无需修改渲染逻辑(完全兼容) ✅
🤖 Generated with Claude Code
|
2025-11-17 11:25:18 +08:00 |
|
|
|
2013a0f868
|
Merge branch 'feature_bugfix/251113_ui' of https://git.valuefrontier.cn/vf/vf_react into feature_bugfix/251113_ui
|
2025-11-15 09:11:57 +08:00 |
|
|
|
05b497de29
|
add forum
|
2025-11-15 09:10:26 +08:00 |
|
zdl
|
ddd6b2d4af
|
feat: 实现 Socket 触发的智能列表自动刷新功能(带防抖)
核心改动:
- 扩展 NotificationContext,添加事件更新回调注册机制
- VirtualizedFourRowGrid 添加 forwardRef 暴露 getScrollPosition 方法
- DynamicNewsCard 实现智能刷新逻辑(根据模式和滚动位置判断是否刷新)
- Community 页面注册 Socket 回调自动触发刷新
- 创建 TypeScript 通用防抖工具函数(debounce.ts)
- 集成防抖机制(2秒延迟),避免短时间内频繁请求
智能刷新策略:
- 纵向模式 + 第1页:自动刷新列表
- 纵向模式 + 其他页:不刷新(避免打断用户)
- 平铺模式 + 滚动在顶部:自动刷新列表
- 平铺模式 + 滚动不在顶部:仅显示 Toast 提示
防抖效果:
- 短时间内收到多个新事件,只执行最后一次刷新
- 减少服务器压力,提升用户体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 19:04:00 +08:00 |
|
zdl
|
9761ef9016
|
Merge branch 'feature_bugfix/251113_ui' into feature_bugfix/251113_bugfix
* feature_bugfix/251113_ui:
update ui
update ui
update ui
update ui
update ui
|
2025-11-14 16:16:10 +08:00 |
|
zdl
|
e23feb3c23
|
feat: 添加评论功能
|
2025-11-14 16:15:13 +08:00 |
|
|
|
e428caf578
|
update ui
|
2025-11-14 15:50:21 +08:00 |
|
|
|
ad8ff50001
|
update ui
|
2025-11-14 08:09:18 +08:00 |
|
|
|
98d063bcfe
|
update ui
|
2025-11-14 08:03:33 +08:00 |
|
|
|
8c93606769
|
update ui
|
2025-11-14 07:42:18 +08:00 |
|
|
|
eac3b09a95
|
update ui
|
2025-11-14 07:25:12 +08:00 |
|
|
|
5e70f4443d
|
update ui
|
2025-11-14 06:39:29 +08:00 |
|
|
|
1773c571ab
|
update ui
|
2025-11-13 23:44:37 +08:00 |
|
|
|
6452869968
|
update ui
|
2025-11-13 23:34:29 +08:00 |
|
|
|
3caa5f4c3a
|
update ui
|
2025-11-13 23:24:54 +08:00 |
|
|
|
d3b980b3ca
|
update ui
|
2025-11-13 23:06:19 +08:00 |
|
|
|
6113a3fefd
|
update ui
|
2025-11-13 22:57:24 +08:00 |
|
|
|
f0bb00a2ce
|
update ui
|
2025-11-13 22:35:33 +08:00 |
|
|
|
c6062efb00
|
update ui
|
2025-11-13 22:21:59 +08:00 |
|
|
|
7e0358ede4
|
update ui
|
2025-11-13 21:59:33 +08:00 |
|
|
|
2edeeec497
|
update ui
|
2025-11-13 18:08:02 +08:00 |
|
|
|
716b4ba3bd
|
update ui
|
2025-11-13 17:58:37 +08:00 |
|
|
|
dfa2635b2e
|
update ui
|
2025-11-13 17:51:47 +08:00 |
|
|
|
8dc4ddac66
|
update ui
|
2025-11-13 17:45:09 +08:00 |
|
|
|
cb4c51a958
|
update ui
|
2025-11-13 17:38:54 +08:00 |
|
|
|
0e32076e71
|
update ui
|
2025-11-13 17:31:06 +08:00 |
|
|
|
4bb37c6e6d
|
update ui
|
2025-11-13 17:18:33 +08:00 |
|
|
|
58d1e6f2ad
|
update ui
|
2025-11-13 16:51:35 +08:00 |
|
|
|
9d6c0ac55c
|
update ui
|
2025-11-13 16:34:34 +08:00 |
|
|
|
5ddf8d3c09
|
update ui
|
2025-11-13 16:17:32 +08:00 |
|
|
|
5aa0507a65
|
update ui
|
2025-11-13 16:07:14 +08:00 |
|
zdl
|
7fa4a8efbc
|
feat:修复了图片 404 错误
|
2025-11-12 13:51:07 +08:00 |
|
zdl
|
261a7bf329
|
fix(community): 修复 React Hooks 顺序错误
将 Alert 组件中的 useColorModeValue Hook 调用提取到组件顶层,
避免在条件渲染中调用 Hook 导致的顺序变化问题。
## 问题
- useColorModeValue 在 showNotificationBanner 条件渲染内部调用
- 当条件状态变化时,Hooks 调用顺序发生改变
- 触发 React 警告:Hooks 顺序改变(第 75 个 Hook 从 undefined 变为 useContext)
## 解决方案
- 将 alertBgColor 和 alertBorderColor 提取到组件顶层
- 确保所有 Hooks 在每次渲染时以相同顺序调用
- 符合 React Hooks 规则:只在顶层调用 Hooks
## 变更文件
src/views/Community/index.js:
- 新增 alertBgColor 常量(第 47 行)
- 新增 alertBorderColor 常量(第 48 行)
- Alert 组件使用变量替代直接调用 Hook
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 20:20:57 +08:00 |
|
zdl
|
9e23b370fe
|
feat: 底部UI调整
|
2025-11-10 14:48:28 +08:00 |
|