3.0.1: fix
This commit is contained in:
@@ -40,15 +40,15 @@
|
||||
<!-- Mini Stats -->
|
||||
<div class="grid grid-cols-3 gap-x-4 gap-y-2 text-xs text-gray-600 dark:text-gray-300 mb-4 w-full text-center">
|
||||
<div>
|
||||
<span class="block font-bold">{{ "%.2f"|format(player.basic_avg_rating|default(0)) }}</span>
|
||||
<span class="block font-bold">{{ "%.2f"|format(player.core_avg_rating2 or player.core_avg_rating or 0) }}</span>
|
||||
<span class="text-gray-400">Rating</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="block font-bold">{{ "%.2f"|format(player.basic_avg_kd|default(0)) }}</span>
|
||||
<span class="block font-bold">{{ "%.2f"|format(player.core_avg_kd or 0) }}</span>
|
||||
<span class="text-gray-400">K/D</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="block font-bold">{{ "%.1f"|format((player.basic_avg_kast|default(0)) * 100) }}%</span>
|
||||
<span class="block font-bold">{{ "%.1f"|format((player.core_avg_kast or 0) * 100) }}%</span>
|
||||
<span class="text-gray-400">KAST</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -338,10 +338,10 @@ function tacticsBoard() {
|
||||
this.radarChart = new Chart(ctx, {
|
||||
type: 'radar',
|
||||
data: {
|
||||
labels: ['RTG', 'K/D', 'KST', 'ADR', 'IMP', 'UTL'],
|
||||
labels: ['枪法', '生存', '道具', '残局', '经济', '节奏', '手枪', '稳定'],
|
||||
datasets: [{
|
||||
label: 'Avg',
|
||||
data: [0, 0, 0, 0, 0, 0],
|
||||
data: [0, 0, 0, 0, 0, 0, 0, 0],
|
||||
backgroundColor: 'rgba(139, 92, 246, 0.2)',
|
||||
borderColor: 'rgba(139, 92, 246, 1)',
|
||||
pointBackgroundColor: 'rgba(139, 92, 246, 1)',
|
||||
@@ -354,7 +354,7 @@ function tacticsBoard() {
|
||||
scales: {
|
||||
r: {
|
||||
beginAtZero: true,
|
||||
max: 1.5,
|
||||
max: 100,
|
||||
grid: { color: 'rgba(156, 163, 175, 0.1)' },
|
||||
angleLines: { color: 'rgba(156, 163, 175, 0.1)' },
|
||||
pointLabels: { font: { size: 9 } },
|
||||
@@ -368,20 +368,22 @@ function tacticsBoard() {
|
||||
|
||||
updateRadar() {
|
||||
if (this.activePlayers.length === 0) {
|
||||
this.radarChart.data.datasets[0].data = [0, 0, 0, 0, 0, 0];
|
||||
this.radarChart.data.datasets[0].data = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
this.radarChart.update();
|
||||
return;
|
||||
}
|
||||
|
||||
let totals = [0, 0, 0, 0, 0, 0];
|
||||
let totals = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
this.activePlayers.forEach(p => {
|
||||
const s = p.stats || {};
|
||||
totals[0] += s.basic_avg_rating || 0;
|
||||
totals[1] += s.basic_avg_kd || 0;
|
||||
totals[2] += s.basic_avg_kast || 0;
|
||||
totals[3] += (s.basic_avg_adr || 0) / 100;
|
||||
totals[4] += s.bat_avg_impact || 1.0;
|
||||
totals[5] += s.util_usage_rate || 0.5;
|
||||
totals[0] += s.score_aim || 0;
|
||||
totals[1] += s.score_defense || 0;
|
||||
totals[2] += s.score_utility || 0;
|
||||
totals[3] += s.score_clutch || 0;
|
||||
totals[4] += s.score_economy || 0;
|
||||
totals[5] += s.score_pace || 0;
|
||||
totals[6] += s.score_pistol || 0;
|
||||
totals[7] += s.score_stability || 0;
|
||||
});
|
||||
|
||||
const count = this.activePlayers.length;
|
||||
@@ -393,4 +395,4 @@ function tacticsBoard() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
|
||||
<span class="text-sm font-bold truncate w-full text-center dark:text-white mb-1" x-text="p.username || p.name"></span>
|
||||
<div class="px-2.5 py-1 bg-white dark:bg-slate-900 rounded-full text-xs text-gray-500 dark:text-gray-400 shadow-inner border border-gray-100 dark:border-slate-700">
|
||||
Rating: <span class="font-bold text-yrtv-600" x-text="(p.stats?.basic_avg_rating || 0).toFixed(2)"></span>
|
||||
Rating: <span class="font-bold text-yrtv-600" x-text="(p.stats?.core_avg_rating2 || p.stats?.core_avg_rating || p.stats?.basic_avg_rating || 0).toFixed(2)"></span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -149,9 +149,15 @@
|
||||
<h4 class="font-bold text-xl text-gray-900 dark:text-white flex items-center gap-2">
|
||||
<span>📈</span> 综合评分
|
||||
</h4>
|
||||
<div class="flex items-baseline gap-2">
|
||||
<span class="text-sm text-gray-500">Team Rating</span>
|
||||
<span class="text-4xl font-black text-yrtv-600 tracking-tight" x-text="analysisResult.avg_stats.rating.toFixed(2)"></span>
|
||||
<div class="flex items-baseline gap-6">
|
||||
<div class="flex items-baseline gap-2">
|
||||
<span class="text-sm text-gray-500">Team Rating</span>
|
||||
<span class="text-4xl font-black text-yrtv-600 tracking-tight" x-text="analysisResult.avg_stats.rating.toFixed(2)"></span>
|
||||
</div>
|
||||
<div class="flex items-baseline gap-2">
|
||||
<span class="text-sm text-gray-500">Chemistry</span>
|
||||
<span class="text-3xl font-black text-yrtv-600 tracking-tight" x-text="analysisResult.chemistry.toFixed(1)"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -526,13 +532,10 @@ function tacticsApp() {
|
||||
// Unwrap proxy if needed
|
||||
const rawData = JSON.parse(JSON.stringify(this.dataResult));
|
||||
|
||||
const radarKeys = ['AIM', 'DEFENSE', 'UTILITY', 'CLUTCH', 'ECONOMY', 'PACE', 'PISTOL', 'STABILITY'];
|
||||
const datasets = rawData.map((p, idx) => {
|
||||
const color = this.getPlayerColor(idx);
|
||||
const d = [
|
||||
p.radar.BAT || 0, p.radar.PTL || 0, p.radar.HPS || 0,
|
||||
p.radar.SIDE || 0, p.radar.UTIL || 0, p.radar.STA || 0
|
||||
];
|
||||
|
||||
const d = radarKeys.map(k => (p.radar?.[k] || 0));
|
||||
return {
|
||||
label: p.username,
|
||||
data: d,
|
||||
@@ -543,12 +546,49 @@ function tacticsApp() {
|
||||
};
|
||||
});
|
||||
|
||||
const valuesByDim = radarKeys.map(() => []);
|
||||
rawData.forEach(p => {
|
||||
radarKeys.forEach((k, i) => {
|
||||
valuesByDim[i].push(Number(p.radar?.[k] || 0));
|
||||
});
|
||||
});
|
||||
const avgVals = valuesByDim.map(arr => arr.length ? arr.reduce((a, b) => a + b, 0) / arr.length : 0);
|
||||
const minVals = valuesByDim.map(arr => arr.length ? Math.min(...arr) : 0);
|
||||
const maxVals = valuesByDim.map(arr => arr.length ? Math.max(...arr) : 0);
|
||||
|
||||
datasets.push({
|
||||
label: 'Avg',
|
||||
data: avgVals,
|
||||
borderColor: '#64748b',
|
||||
backgroundColor: 'rgba(100, 116, 139, 0.08)',
|
||||
borderWidth: 2,
|
||||
pointRadius: 0
|
||||
});
|
||||
datasets.push({
|
||||
label: 'Max',
|
||||
data: maxVals,
|
||||
borderColor: '#16a34a',
|
||||
backgroundColor: 'rgba(22, 163, 74, 0.05)',
|
||||
borderWidth: 1,
|
||||
borderDash: [4, 3],
|
||||
pointRadius: 0
|
||||
});
|
||||
datasets.push({
|
||||
label: 'Min',
|
||||
data: minVals,
|
||||
borderColor: '#dc2626',
|
||||
backgroundColor: 'rgba(220, 38, 38, 0.05)',
|
||||
borderWidth: 1,
|
||||
borderDash: [4, 3],
|
||||
pointRadius: 0
|
||||
});
|
||||
|
||||
// Recreate Chart with Profile-aligned config
|
||||
const ctx = canvas.getContext('2d');
|
||||
this.radarChart = new Chart(ctx, {
|
||||
type: 'radar',
|
||||
data: {
|
||||
labels: ['BAT (火力)', 'PTL (手枪)', 'HPS (抗压)', 'SIDE (阵营)', 'UTIL (道具)', 'STA (稳定)'],
|
||||
labels: ['枪法 (Aim)', '生存 (Defense)', '道具 (Utility)', '残局 (Clutch)', '经济 (Economy)', '节奏 (Pace)', '手枪 (Pistol)', '稳定 (Stability)'],
|
||||
datasets: datasets
|
||||
},
|
||||
options: {
|
||||
@@ -595,7 +635,7 @@ function tacticsApp() {
|
||||
this.radarChart = new Chart(ctx, {
|
||||
type: 'radar',
|
||||
data: {
|
||||
labels: ['BAT (火力)', 'PTL (手枪)', 'HPS (抗压)', 'SIDE (阵营)', 'UTIL (道具)', 'STA (稳定)'],
|
||||
labels: ['枪法 (Aim)', '生存 (Defense)', '道具 (Utility)', '残局 (Clutch)', '经济 (Economy)', '节奏 (Pace)', '手枪 (Pistol)', '稳定 (Stability)'],
|
||||
datasets: []
|
||||
},
|
||||
options: {
|
||||
@@ -777,4 +817,4 @@ function tacticsApp() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Stats Grid -->
|
||||
<div class="grid grid-cols-2 gap-2 w-full text-center mb-auto">
|
||||
<div class="grid grid-cols-3 gap-2 w-full text-center mb-auto">
|
||||
<div class="bg-gray-50 dark:bg-slate-700 rounded p-1">
|
||||
<div class="text-xs text-gray-400">Rating</div>
|
||||
<div class="font-bold text-yrtv-600 dark:text-yrtv-400" x-text="(player.stats?.core_avg_rating || 0).toFixed(2)"></div>
|
||||
@@ -78,6 +78,10 @@
|
||||
<div class="text-xs text-gray-400">K/D</div>
|
||||
<div class="font-bold" x-text="(player.stats?.core_avg_kd || 0).toFixed(2)"></div>
|
||||
</div>
|
||||
<div class="bg-gray-50 dark:bg-slate-700 rounded p-1">
|
||||
<div class="text-xs text-gray-400">总评</div>
|
||||
<div class="font-bold" x-text="(player.stats?.score_overall || 0).toFixed(1)"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Actions -->
|
||||
|
||||
Reference in New Issue
Block a user