3.0.3: Cant fix team avg. removed.

This commit is contained in:
2026-01-29 23:44:02 +08:00
parent 3bb3d61c2e
commit ba5bf14ee2
10 changed files with 220 additions and 84 deletions

View File

@@ -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?.basic_avg_rating) || 0).toFixed(2)"></span>
</div>
</div>
</template>
@@ -153,6 +153,15 @@
<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 Score</span>
<span class="text-4xl font-black text-blue-600 tracking-tight" x-text="(analysisResult.chemistry_score || 0).toFixed(0)"></span>
</div>
</div>
<!-- Analysis Radar Chart -->
<div class="bg-gray-50 dark:bg-slate-700 p-4 rounded-xl border border-gray-100 dark:border-slate-600 h-[300px]">
<canvas id="analysisRadarChart"></canvas>
</div>
<div class="grid grid-cols-3 gap-6 text-center">
@@ -336,6 +345,7 @@ function tacticsApp() {
// Analysis State
analysisLineup: [],
analysisResult: null,
analysisChart: null,
debounceTimer: null,
// Data Center State
@@ -410,7 +420,8 @@ function tacticsApp() {
steam_id_64: player.steam_id_64,
username: player.username || player.name,
name: player.name || player.username,
avatar_url: player.avatar_url
avatar_url: player.avatar_url,
stats: player.stats || { basic_avg_rating: 0.0 } // Include stats for drag preview
};
event.dataTransfer.setData('text/plain', JSON.stringify(payload));
event.dataTransfer.effectAllowed = 'copy';
@@ -529,8 +540,9 @@ function tacticsApp() {
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
p.radar.AIM || 0, p.radar.DEFENSE || 0, p.radar.UTILITY || 0,
p.radar.CLUTCH || 0, p.radar.ECONOMY || 0, p.radar.PACE || 0,
p.radar.PISTOL || 0, p.radar.STABILITY || 0
];
return {
@@ -548,7 +560,7 @@ function tacticsApp() {
this.radarChart = new Chart(ctx, {
type: 'radar',
data: {
labels: ['BAT (火力)', 'PTL (手枪)', 'HPS (抗压)', 'SIDE (阵营)', 'UTIL (道具)', 'STA (稳定)'],
labels: ['AIM (枪法)', 'DEF (生存)', 'UTIL (道具)', 'CLUTCH (残局)', 'ECO (经济)', 'PACE (节奏)', 'PISTOL (手枪)', 'STA (稳定)'],
datasets: datasets
},
options: {
@@ -595,7 +607,7 @@ function tacticsApp() {
this.radarChart = new Chart(ctx, {
type: 'radar',
data: {
labels: ['BAT (火力)', 'PTL (手枪)', 'HPS (抗压)', 'SIDE (阵营)', 'UTIL (道具)', 'STA (稳定)'],
labels: ['AIM (枪法)', 'DEF (生存)', 'UTIL (道具)', 'CLUTCH (残局)', 'ECO (经济)', 'PACE (节奏)', 'PISTOL (手枪)', 'STA (稳定)'],
datasets: []
},
options: {
@@ -659,6 +671,59 @@ function tacticsApp() {
.then(res => res.json())
.then(data => {
this.analysisResult = data;
this.$nextTick(() => {
this.updateAnalysisChart();
});
});
},
updateAnalysisChart() {
if (this.analysisChart) {
this.analysisChart.destroy();
this.analysisChart = null;
}
const canvas = document.getElementById('analysisRadarChart');
if (!canvas || !this.analysisResult || !this.analysisResult.radar_stats) return;
const stats = this.analysisResult.radar_stats;
const data = [
stats.AIM || 0, stats.DEFENSE || 0, stats.UTILITY || 0,
stats.CLUTCH || 0, stats.ECONOMY || 0, stats.PACE || 0,
stats.PISTOL || 0, stats.STABILITY || 0
];
const ctx = canvas.getContext('2d');
this.analysisChart = new Chart(ctx, {
type: 'radar',
data: {
labels: ['AIM (枪法)', 'DEF (生存)', 'UTIL (道具)', 'CLUTCH (残局)', 'ECO (经济)', 'PACE (节奏)', 'PISTOL (手枪)', 'STA (稳定)'],
datasets: [{
label: 'Team Average',
data: data,
backgroundColor: 'rgba(59, 130, 246, 0.2)',
borderColor: '#3b82f6',
borderWidth: 2,
pointRadius: 3
}]
},
options: {
maintainAspectRatio: false,
scales: {
r: {
min: 0, max: 100,
ticks: { display: false, stepSize: 20 },
pointLabels: {
font: { size: 11, weight: 'bold' },
color: (ctx) => document.documentElement.classList.contains('dark') ? '#cbd5e1' : '#374151'
},
grid: {
color: (ctx) => document.documentElement.classList.contains('dark') ? 'rgba(51, 65, 85, 0.5)' : 'rgba(229, 231, 235, 0.8)'
}
}
},
plugins: { legend: { display: false } }
}
});
},