2026-01-26 02:13:06 +08:00
|
|
|
{% extends "base.html" %}
|
|
|
|
|
|
|
|
|
|
{% block content %}
|
|
|
|
|
<div class="bg-white dark:bg-slate-800 shadow rounded-lg p-6">
|
|
|
|
|
<div class="flex justify-between items-center mb-6">
|
|
|
|
|
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">比赛列表</h2>
|
|
|
|
|
<!-- Filters (Simple placeholders) -->
|
|
|
|
|
<div class="flex space-x-2">
|
|
|
|
|
<!-- <input type="text" placeholder="Map..." class="border rounded px-2 py-1"> -->
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="overflow-x-auto">
|
|
|
|
|
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
|
|
|
|
|
<thead class="bg-gray-50 dark:bg-slate-700">
|
|
|
|
|
<tr>
|
|
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">时间</th>
|
|
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">地图</th>
|
|
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">比分</th>
|
2026-01-26 02:53:31 +08:00
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">ELO</th>
|
|
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">Party</th>
|
2026-01-26 02:13:06 +08:00
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">时长</th>
|
|
|
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">操作</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody class="bg-white dark:bg-slate-800 divide-y divide-gray-200 dark:divide-gray-700">
|
|
|
|
|
{% for match in matches %}
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
|
|
|
|
<script>document.write(new Date({{ match.start_time }} * 1000).toLocaleString())</script>
|
|
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-white font-medium">
|
|
|
|
|
{{ match.map_name }}
|
|
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-white">
|
2026-01-26 02:53:31 +08:00
|
|
|
<div class="flex items-center space-x-2">
|
|
|
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {% if match.winner_team == 1 %}bg-green-100 text-green-800 border border-green-200{% else %}bg-gray-100 text-gray-500{% endif %}">
|
|
|
|
|
{{ match.score_team1 }}
|
|
|
|
|
{% if match.winner_team == 1 %}
|
|
|
|
|
<svg class="ml-1 h-3 w-3" fill="currentColor" viewBox="0 0 20 20"><path d="M11.3 1.046A1 1 0 0112 2v5h4a1 1 0 01.82 1.573l-7 10A1 1 0 018 18v-5H4a1 1 0 01-.82-1.573l7-10a1 1 0 011.12-.38z" /></svg>
|
|
|
|
|
{% endif %}
|
|
|
|
|
</span>
|
|
|
|
|
<span class="text-gray-400">-</span>
|
|
|
|
|
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {% if match.winner_team == 2 %}bg-green-100 text-green-800 border border-green-200{% else %}bg-gray-100 text-gray-500{% endif %}">
|
|
|
|
|
{{ match.score_team2 }}
|
|
|
|
|
{% if match.winner_team == 2 %}
|
|
|
|
|
<svg class="ml-1 h-3 w-3" fill="currentColor" viewBox="0 0 20 20"><path d="M11.3 1.046A1 1 0 0112 2v5h4a1 1 0 01.82 1.573l-7 10A1 1 0 018 18v-5H4a1 1 0 01-.82-1.573l7-10a1 1 0 011.12-.38z" /></svg>
|
|
|
|
|
{% endif %}
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
<!-- Our Team Result Badge -->
|
|
|
|
|
{% if match.our_result %}
|
|
|
|
|
{% if match.our_result == 'win' %}
|
|
|
|
|
<span class="ml-2 inline-flex items-center px-2 py-0.5 rounded text-xs font-bold bg-green-500 text-white">
|
|
|
|
|
VICTORY
|
|
|
|
|
</span>
|
|
|
|
|
{% elif match.our_result == 'loss' %}
|
|
|
|
|
<span class="ml-2 inline-flex items-center px-2 py-0.5 rounded text-xs font-bold bg-red-500 text-white">
|
|
|
|
|
DEFEAT
|
|
|
|
|
</span>
|
|
|
|
|
{% elif match.our_result == 'mixed' %}
|
|
|
|
|
<span class="ml-2 inline-flex items-center px-2 py-0.5 rounded text-xs font-bold bg-yellow-500 text-white">
|
|
|
|
|
CIVIL WAR
|
|
|
|
|
</span>
|
|
|
|
|
{% endif %}
|
|
|
|
|
{% endif %}
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
|
|
|
|
{% if match.avg_elo and match.avg_elo > 0 %}
|
|
|
|
|
<span class="font-mono">{{ "%.0f"|format(match.avg_elo) }}</span>
|
|
|
|
|
{% else %}
|
|
|
|
|
<span class="text-xs text-gray-300">-</span>
|
|
|
|
|
{% endif %}
|
|
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
|
|
|
|
{% if match.max_party and match.max_party > 1 %}
|
|
|
|
|
{% set p = match.max_party %}
|
|
|
|
|
{% set party_class = 'bg-gray-100 text-gray-800' %}
|
|
|
|
|
{% if p == 2 %} {% set party_class = 'bg-indigo-100 text-indigo-800 border border-indigo-200' %}
|
|
|
|
|
{% elif p == 3 %} {% set party_class = 'bg-blue-100 text-blue-800 border border-blue-200' %}
|
|
|
|
|
{% elif p == 4 %} {% set party_class = 'bg-purple-100 text-purple-800 border border-purple-200' %}
|
|
|
|
|
{% elif p >= 5 %} {% set party_class = 'bg-orange-100 text-orange-800 border border-orange-200' %}
|
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium {{ party_class }}">
|
|
|
|
|
👥 {{ match.max_party }}
|
|
|
|
|
</span>
|
|
|
|
|
{% else %}
|
|
|
|
|
<span class="text-xs text-gray-300">Solo</span>
|
|
|
|
|
{% endif %}
|
2026-01-26 02:13:06 +08:00
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
|
|
|
|
{{ (match.duration / 60) | int }} min
|
|
|
|
|
</td>
|
|
|
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
|
|
|
|
|
<a href="{{ url_for('matches.detail', match_id=match.match_id) }}" class="text-yrtv-600 hover:text-yrtv-900">详情</a>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
{% endfor %}
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Pagination -->
|
|
|
|
|
<div class="mt-4 flex justify-between items-center">
|
|
|
|
|
<div class="text-sm text-gray-700 dark:text-gray-400">
|
|
|
|
|
Total {{ total }} matches
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex space-x-2">
|
|
|
|
|
{% if page > 1 %}
|
|
|
|
|
<a href="{{ url_for('matches.index', page=page-1) }}" class="px-3 py-1 border rounded bg-white text-gray-700 hover:bg-gray-50 dark:bg-slate-700 dark:text-white dark:border-slate-600 dark:hover:bg-slate-600">Prev</a>
|
|
|
|
|
{% endif %}
|
|
|
|
|
{% if page < total_pages %}
|
|
|
|
|
<a href="{{ url_for('matches.index', page=page+1) }}" class="px-3 py-1 border rounded bg-white text-gray-700 hover:bg-gray-50 dark:bg-slate-700 dark:text-white dark:border-slate-600 dark:hover:bg-slate-600">Next</a>
|
|
|
|
|
{% endif %}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{% endblock %}
|