From 0599e2dad3165bf0ed91cd497129ad8a831c20b5 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Thu, 11 Dec 2025 17:00:05 +0800 Subject: [PATCH] update pay ui --- app.py | 26 +++++- src/constants/homeFeatures.ts | 21 +++-- src/views/Settings/SettingsPage.js | 124 +++++++++++++++-------------- 3 files changed, 103 insertions(+), 68 deletions(-) diff --git a/app.py b/app.py index 275f3e79..f5208491 100755 --- a/app.py +++ b/app.py @@ -9142,6 +9142,13 @@ def api_get_events(): # ==================== 构建查询 ==================== query = Event.query + + # 只返回有关联股票的事件(没有关联股票的事件不计入列表) + from sqlalchemy import exists + query = query.filter( + exists().where(RelatedStock.event_id == Event.id) + ) + if event_status != 'all': query = query.filter_by(status=event_status) if event_type != 'all': @@ -10284,17 +10291,28 @@ def poll_new_events(): if new_events: print(f'[轮询] 发现 {len(new_events)} 个新事件') + pushed_count = 0 for event in new_events: + # 检查事件是否有关联股票(只推送有关联股票的事件) + related_stocks_count = event.related_stocks.count() + print(f'[轮询 DEBUG] 新事件详情:') print(f'[轮询 DEBUG] - ID: {event.id}') print(f'[轮询 DEBUG] - 标题: {event.title}') print(f'[轮询 DEBUG] - 事件发生时间(created_at): {event.created_at}') print(f'[轮询 DEBUG] - 事件类型: {event.event_type}') + print(f'[轮询 DEBUG] - 关联股票数量: {related_stocks_count}') - # 推送新事件 - print(f'[轮询 DEBUG] 准备推送事件 ID={event.id}') - broadcast_new_event(event) - print(f'[轮询] ✓ 已推送事件 ID={event.id}, 标题={event.title}') + # 只推送有关联股票的事件 + if related_stocks_count > 0: + print(f'[轮询 DEBUG] 准备推送事件 ID={event.id}(有 {related_stocks_count} 个关联股票)') + broadcast_new_event(event) + pushed_count += 1 + print(f'[轮询] ✓ 已推送事件 ID={event.id}, 标题={event.title}') + else: + print(f'[轮询 DEBUG] 跳过事件 ID={event.id}(暂无关联股票)') + + print(f'[轮询] 本轮共推送 {pushed_count}/{len(new_events)} 个事件') # 更新已知事件ID集合(所有近24小时内的事件ID) known_event_ids_in_24h = set(event.id for event in events_in_24h) diff --git a/src/constants/homeFeatures.ts b/src/constants/homeFeatures.ts index 5781cc2a..ccf109ac 100644 --- a/src/constants/homeFeatures.ts +++ b/src/constants/homeFeatures.ts @@ -55,12 +55,21 @@ export const CORE_FEATURES: Feature[] = [ badge: '专业' }, { - id: 'trading-simulation', - title: '模拟盘交易', - description: '100万起始资金,体验真实交易环境', - icon: '💰', + id: 'value-forum', + title: '价值论坛', + description: '投资者交流社区,分享投资心得', + icon: '💬', color: 'teal', - url: '/trading-simulation', - badge: '实战' + url: '/value-forum', + badge: '交流' + }, + { + id: 'agent-chat', + title: 'AI助手', + description: '智能投资助手,解答投资疑问', + icon: '🤖', + color: 'cyan', + url: '/agent-chat', + badge: 'AI' } ]; diff --git a/src/views/Settings/SettingsPage.js b/src/views/Settings/SettingsPage.js index d592d316..aa5de8b6 100644 --- a/src/views/Settings/SettingsPage.js +++ b/src/views/Settings/SettingsPage.js @@ -34,6 +34,7 @@ import { Textarea, Select, useColorMode, + useColorModeValue, Tabs, TabList, TabPanels, @@ -66,6 +67,13 @@ export default function SettingsPage() { const { colorMode, toggleColorMode } = useColorMode(); const toast = useToast(); + // 深色模式适配颜色 + const headingColor = useColorModeValue('gray.800', 'white'); + const textColor = useColorModeValue('gray.800', 'gray.100'); + const subTextColor = useColorModeValue('gray.600', 'gray.400'); + const cardBg = useColorModeValue('white', 'gray.800'); + const borderColor = useColorModeValue('gray.200', 'gray.600'); + // 🎯 初始化设置页面埋点Hook const profileEvents = useProfileEvents({ pageType: 'settings' }); @@ -501,15 +509,15 @@ export default function SettingsPage() { {/* 页面标题 */} - 账户设置 + 账户设置 - 账户安全 - 通知设置 - 隐私设置 - 界面设置 - 危险操作 + 账户安全 + 通知设置 + 隐私设置 + 界面设置 + 危险操作 @@ -517,17 +525,17 @@ export default function SettingsPage() { {/* 密码设置 */} - + - 密码设置 + 密码设置 - + {passwordStatus.needsFirstTimeSetup ? '设置登录密码' : '登录密码'} - + {passwordStatus.needsFirstTimeSetup ? '您通过微信登录,建议设置密码以便其他方式登录' : '定期更换密码,保护账户安全' @@ -551,23 +559,23 @@ export default function SettingsPage() { {/* 手机号绑定 */} - + - 手机号绑定 + 手机号绑定 - + {user?.phone || '未绑定手机号'} {user?.phone_confirmed && ( 已验证 )} - + 绑定手机号可用于登录和接收重要通知 @@ -607,21 +615,21 @@ export default function SettingsPage() { {/* 邮箱绑定 */} - + - 邮箱设置 + 邮箱设置 - {user?.email} + {user?.email} {user?.email_confirmed && ( 已验证 )} - + 邮箱用于登录和接收重要通知 @@ -633,23 +641,23 @@ export default function SettingsPage() { {/* 微信绑定 */} - + - 微信绑定 + 微信绑定 - + {user?.has_wechat ? '已绑定微信' : '未绑定微信'} {user?.has_wechat && ( 已绑定 )} - + 绑定微信可使用微信一键登录 @@ -724,15 +732,15 @@ export default function SettingsPage() { {/* 两步验证 */} - + - 两步验证 + 两步验证 - 安全验证 - + 安全验证 + 开启两步验证,提高账户安全性 @@ -746,16 +754,16 @@ export default function SettingsPage() { {/* 通知设置 */} - + - 通知方式 + 通知方式 - 邮件通知 - + 邮件通知 + 接收邮件通知 @@ -770,8 +778,8 @@ export default function SettingsPage() { - 短信通知 - + 短信通知 + 接收短信通知(需绑定手机号) @@ -787,8 +795,8 @@ export default function SettingsPage() { - 微信通知 - + 微信通知 + 接收微信通知(需绑定微信) @@ -805,9 +813,9 @@ export default function SettingsPage() { - + - 通知类型 + 通知类型 @@ -873,9 +881,9 @@ export default function SettingsPage() { {/* 隐私设置 */} - + - 隐私级别 + 隐私级别 @@ -934,9 +942,9 @@ export default function SettingsPage() { - + - 屏蔽设置 + 屏蔽设置 @@ -969,16 +977,16 @@ export default function SettingsPage() { {/* 界面设置 */} - + - 外观设置 + 外观设置 - 深色模式 - + 深色模式 + 切换到深色主题 @@ -990,8 +998,8 @@ export default function SettingsPage() { - 语言 - + 语言 + 选择界面语言 @@ -1005,16 +1013,16 @@ export default function SettingsPage() { - + - 数据管理 + 数据管理 - 数据导出 - + 数据导出 + 导出您的个人数据 @@ -1025,8 +1033,8 @@ export default function SettingsPage() { - 清除缓存 - + 清除缓存 + 清除本地缓存数据 @@ -1051,20 +1059,20 @@ export default function SettingsPage() { - + 注销账户 - + 注销账户将永久删除您的所有数据,包括: - • 个人资料和设置 - • 投资记录和分析数据 - • 社区发布的内容 - • 关注和粉丝关系 + • 个人资料和设置 + • 投资记录和分析数据 + • 社区发布的内容 + • 关注和粉丝关系 此操作不可恢复,请确认您真的要注销账户。