diff --git a/frontend/index.html b/frontend/index.html index 8f146ca..ec584b2 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -279,15 +279,6 @@

本月新增

-
-
- -
-
-

0

-

产品数

-
-
@@ -297,6 +288,15 @@

已完成

+
+
+ +
+
+

0

+

客户总数

+
+
diff --git a/frontend/js/main.js b/frontend/js/main.js index eac8810..d45408b 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -1045,7 +1045,8 @@ document.addEventListener('DOMContentLoaded', function () { }).map(c => c.customerName).filter(c => c) ).size; - const products = new Set(customers.map(c => c.version)).size; + // 客户总数:统计去重的客户名称数量(与totalCustomers一致) + const totalCustomersCount = new Set(customers.map(c => c.customerName).filter(c => c)).size; const completed = new Set( customers.filter(c => @@ -1055,7 +1056,7 @@ document.addEventListener('DOMContentLoaded', function () { document.getElementById('totalCustomers').textContent = totalCustomers; document.getElementById('newCustomers').textContent = newCustomers; - document.getElementById('totalProducts').textContent = products; + document.getElementById('totalProducts').textContent = totalCustomersCount; document.getElementById('completedTasks').textContent = completed; } @@ -1119,7 +1120,24 @@ document.addEventListener('DOMContentLoaded', function () { responsive: true, plugins: { legend: { - position: 'bottom' + position: 'left', + labels: { + generateLabels: function (chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + return data.labels.map((label, i) => { + const value = data.datasets[0].data[i]; + return { + text: `${label}: ${value}`, + fillStyle: data.datasets[0].backgroundColor[i], + hidden: false, + index: i + }; + }); + } + return []; + } + } }, title: { display: true, @@ -1144,12 +1162,13 @@ document.addEventListener('DOMContentLoaded', function () { formatter: (value, ctx) => { const total = ctx.dataset.data.reduce((a, b) => a + b, 0); const percentage = ((value / total) * 100).toFixed(1); - return percentage + '%'; + // 显示具体数值和百分比 + return `${value}\n(${percentage}%)`; }, color: '#fff', font: { weight: 'bold', - size: 14 + size: 12 } } } @@ -1208,7 +1227,24 @@ document.addEventListener('DOMContentLoaded', function () { responsive: true, plugins: { legend: { - position: 'bottom' + position: 'left', + labels: { + generateLabels: function (chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + return data.labels.map((label, i) => { + const value = data.datasets[0].data[i]; + return { + text: `${label}: ${value}`, + fillStyle: data.datasets[0].backgroundColor[i], + hidden: false, + index: i + }; + }); + } + return []; + } + } }, title: { display: true, @@ -1233,12 +1269,13 @@ document.addEventListener('DOMContentLoaded', function () { formatter: (value, ctx) => { const total = ctx.dataset.data.reduce((a, b) => a + b, 0); const percentage = ((value / total) * 100).toFixed(1); - return percentage + '%'; + // 显示具体数值和百分比 + return `${value}\n(${percentage}%)`; }, color: '#fff', font: { weight: 'bold', - size: 14 + size: 12 } } }