更新Company页面的UI为FUI风格

This commit is contained in:
2025-12-22 15:31:10 +08:00
parent a6c8927adf
commit b86322d8e1
2 changed files with 98 additions and 25 deletions

66
app.py
View File

@@ -11279,35 +11279,60 @@ def get_events_by_mainline():
else:
ungrouped_events.append(event_data)
# ==================== 5. 获取 lv2 概念涨跌幅 ====================
lv2_price_map = {}
# ==================== 5. 获取概念涨跌幅(根据 group_by 参数) ====================
price_map = {}
# 确定当前分组层级和对应的数据库类型
if group_by == 'lv1' or group_by.startswith('L1_'):
current_level = 'lv1'
db_concept_type = 'lv1'
name_prefix = '[一级] '
name_field = 'lv1_name'
elif group_by == 'lv3' or group_by.startswith('L2_'):
current_level = 'lv3'
db_concept_type = 'lv3'
name_prefix = '[三级] '
name_field = 'lv3_name'
else: # lv2 或 L3_ 开头(查看 lv3 下的具体分类,显示 lv2 涨跌幅)
current_level = 'lv2'
db_concept_type = 'lv2'
name_prefix = '[二级] '
name_field = 'lv2_name'
try:
# 获取所有 lv2 名称
lv2_names = [group['lv2_name'] for group in mainline_groups.values() if group.get('lv2_name')]
if lv2_names:
# 数据库中的 concept_name 带有 "[二级] " 前缀,需要添加前缀来匹配
lv2_names_with_prefix = [f'[二级] {name}' for name in lv2_names]
# 获取所有对应层级的名称
group_names = [group.get('group_name') or group.get(name_field) for group in mainline_groups.values()]
group_names = [n for n in group_names if n] # 过滤掉空值
if group_names:
# 数据库中的 concept_name 带有前缀,需要添加前缀来匹配
names_with_prefix = [f'{name_prefix}{name}' for name in group_names]
# 查询 concept_daily_stats 表获取最新涨跌幅
price_sql = text('''
SELECT concept_name, avg_change_pct, trade_date
FROM concept_daily_stats
WHERE concept_type = 'lv2'
WHERE concept_type = :concept_type
AND concept_name IN :names
AND trade_date = (
SELECT MAX(trade_date) FROM concept_daily_stats WHERE concept_type = 'lv2'
SELECT MAX(trade_date) FROM concept_daily_stats WHERE concept_type = :concept_type
)
''')
price_result = db.session.execute(price_sql, {'names': tuple(lv2_names_with_prefix)}).fetchall()
price_result = db.session.execute(price_sql, {
'concept_type': db_concept_type,
'names': tuple(names_with_prefix)
}).fetchall()
for row in price_result:
# 去掉 "[二级] " 前缀,用原始名称作为 key
original_name = row.concept_name.replace('[二级] ', '') if row.concept_name else ''
lv2_price_map[original_name] = {
# 去掉前缀,用原始名称作为 key
original_name = row.concept_name.replace(name_prefix, '') if row.concept_name else ''
price_map[original_name] = {
'avg_change_pct': float(row.avg_change_pct) if row.avg_change_pct else None,
'trade_date': str(row.trade_date) if row.trade_date else None
}
app.logger.info(f'[mainline] 获取 lv2 涨跌幅: {len(lv2_price_map)} 条, lv2_names 数量: {len(lv2_names)}')
app.logger.info(f'[mainline] 获取 {current_level} 涨跌幅: {len(price_map)} 条, 查询名称数量: {len(group_names)}')
except Exception as price_err:
app.logger.warning(f'[mainline] 获取 lv2 涨跌幅失败: {price_err}')
app.logger.warning(f'[mainline] 获取 {current_level} 涨跌幅失败: {price_err}')
# ==================== 6. 整理返回数据 ====================
mainlines = []
@@ -11319,11 +11344,12 @@ def get_events_by_mainline():
reverse=True
)
group['event_count'] = len(group['events'])
# 添加涨跌幅数据(目前只支持 lv2
lv2_name = group.get('lv2_name', '') or group.get('group_name', '')
if lv2_name in lv2_price_map:
group['avg_change_pct'] = lv2_price_map[lv2_name]['avg_change_pct']
group['price_date'] = lv2_price_map[lv2_name]['trade_date']
# 添加涨跌幅数据(根据当前分组层级)
group_name = group.get('group_name') or group.get(name_field, '')
if group_name in price_map:
group['avg_change_pct'] = price_map[group_name]['avg_change_pct']
group['price_date'] = price_map[group_name]['trade_date']
else:
group['avg_change_pct'] = None
group['price_date'] = None