diff --git a/database/Web/Web_App.sqlite b/database/Web/Web_App.sqlite index 9daf785..28e7df1 100644 Binary files a/database/Web/Web_App.sqlite and b/database/Web/Web_App.sqlite differ diff --git a/web/routes/tactics.py b/web/routes/tactics.py index b56235c..dcf5d5c 100644 --- a/web/routes/tactics.py +++ b/web/routes/tactics.py @@ -52,11 +52,40 @@ def api_analyze(): 'kd': total_kd / count if count else 0, 'adr': total_adr / count if count else 0 } + + # 4. Map Stats Calculation + map_stats = {} # {map_name: {'count': 0, 'wins': 0}} + total_shared_matches = len(shared_matches) + + for m in shared_matches: + map_name = m['map_name'] + if map_name not in map_stats: + map_stats[map_name] = {'count': 0, 'wins': 0} + + map_stats[map_name]['count'] += 1 + if m['is_win']: + map_stats[map_name]['wins'] += 1 + + # Convert to list for frontend + map_stats_list = [] + for k, v in map_stats.items(): + win_rate = (v['wins'] / v['count'] * 100) if v['count'] > 0 else 0 + map_stats_list.append({ + 'map_name': k, + 'count': v['count'], + 'wins': v['wins'], + 'win_rate': win_rate + }) + + # Sort by count desc + map_stats_list.sort(key=lambda x: x['count'], reverse=True) return jsonify({ 'players': player_data, 'shared_matches': [dict(m) for m in shared_matches], - 'avg_stats': avg_stats + 'avg_stats': avg_stats, + 'map_stats': map_stats_list, + 'total_shared_matches': total_shared_matches }) # API: Save Board diff --git a/web/services/stats_service.py b/web/services/stats_service.py index aefa487..8a9fb3e 100644 --- a/web/services/stats_service.py +++ b/web/services/stats_service.py @@ -345,7 +345,6 @@ class StatsService: GROUP BY m.match_id HAVING COUNT(DISTINCT mp.steam_id_64) = ? ORDER BY m.start_time DESC - LIMIT 20 """ args = list(steam_ids) diff --git a/web/templates/tactics/index.html b/web/templates/tactics/index.html index 020ea0d..3f06454 100644 --- a/web/templates/tactics/index.html +++ b/web/templates/tactics/index.html @@ -91,101 +91,154 @@

阵容化学反应分析

-
+
-
-

- 阵容构建 (0/5) - +

+ + 🏗️ + 阵容构建 (0/5) + +

-
+
- -
- -
-
+