refactor(report): 优化报告样式和数据加载逻辑

- 调整了报告页面的CSS样式,包括颜色、阴影和布局,以提供更专业、现代的视觉效果。
- 改进了从后端向前端JavaScript传递图表数据的方式。现在通过一个独立的`<script>`标签注入JSON字符串,而不是直接嵌入到JS代码中,这增强了鲁棒性并避免了特殊字符导致的解析错误。
- 在JavaScript中增加了对JSON解析和图表数据有效性的检查,以防止因数据格式错误或缺失导致页面渲染失败。
- 将统计模块中的耗时相关键名统一为大写格式,以提高代码一致性。
This commit is contained in:
minecraft1024a
2025-11-13 14:31:54 +08:00
parent a9f4c422b1
commit 992a1129ce
5 changed files with 50 additions and 35 deletions

View File

@@ -11,9 +11,15 @@ function showTab(evt, tabName) {
}
document.addEventListener('DOMContentLoaded', function () {
// This is a placeholder for chart data which will be injected by python.
const allChartData = JSON.parse('{{ all_chart_data }}')
;
// Chart data is injected by python via the HTML template.
let allChartData = {};
try {
allChartData = JSON.parse(all_chart_data_json_string);
} catch (e) {
console.error("Failed to parse all_chart_data:", e);
console.error("Problematic all_chart_data string:", all_chart_data_json_string);
}
let currentCharts = {};
const chartConfigs = {
totalCost: { id: 'totalCostChart', title: '总花费', yAxisLabel: '花费 (¥)', dataKey: 'total_cost_data', fill: true },
@@ -73,8 +79,14 @@ document.addEventListener('DOMContentLoaded', function () {
}
// Static charts
const staticChartData = JSON.parse('{{ static_chart_data }}')
;
let staticChartData = {};
try {
staticChartData = JSON.parse(static_chart_data_json_string);
} catch (e) {
console.error("Failed to parse static_chart_data:", e);
console.error("Problematic static_chart_data string:", static_chart_data_json_string);
}
Object.keys(staticChartData).forEach(period_id => {
const providerCostData = staticChartData[period_id].provider_cost_data;
const modelCostData = staticChartData[period_id].model_cost_data;
@@ -82,7 +94,7 @@ document.addEventListener('DOMContentLoaded', function () {
// Provider Cost Pie Chart
const providerCtx = document.getElementById(`providerCostPieChart_${period_id}`);
if (providerCtx && providerCostData && providerCostData.data.length > 0) {
if (providerCtx && providerCostData && providerCostData.data && providerCostData.data.length > 0) {
new Chart(providerCtx, {
type: 'pie',
data: {
@@ -106,7 +118,7 @@ document.addEventListener('DOMContentLoaded', function () {
// Model Cost Bar Chart
const modelCtx = document.getElementById(`modelCostBarChart_${period_id}`);
if (modelCtx && modelCostData && modelCostData.data.length > 0) {
if (modelCtx && modelCostData && modelCostData.data && modelCostData.data.length > 0) {
new Chart(modelCtx, {
type: 'bar',
data: {