diff --git a/data/customers.json b/data/customers.json index a35e955..554fd4c 100644 --- a/data/customers.json +++ b/data/customers.json @@ -1,7 +1,7 @@ [ { - "id": "b933a0edb8cb4d1a85fdd6ca50fc4376", - "createdAt": "2026-01-07T16:40:38.094131+08:00", + "id": "2ae2925481d541edbd29f7342f77d7a9", + "createdAt": "2026-01-08T19:29:51.290189+08:00", "customerName": "予芯", "intendedProduct": "2025/12/22", "version": "1.9.4", @@ -13,8 +13,8 @@ "reporter": "" }, { - "id": "179dd08fe93d4fbf9c078c362486aa65", - "createdAt": "2026-01-07T16:40:38.095578+08:00", + "id": "90f51409cdfb412dbeb679124c40d714", + "createdAt": "2026-01-08T19:29:51.291596+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/23", "version": "1.9.4", @@ -26,8 +26,8 @@ "reporter": "" }, { - "id": "2700f88f74c94903a48369c86e05221a", - "createdAt": "2026-01-07T16:40:38.096324+08:00", + "id": "b46a3544f2f34122a44ba48a9c115010", + "createdAt": "2026-01-08T19:29:51.292431+08:00", "customerName": "良业", "intendedProduct": "2025/12/23", "version": "1.9.4", @@ -39,8 +39,8 @@ "reporter": "" }, { - "id": "7ae437bfeaa84e579b012a4ec5fae794", - "createdAt": "2026-01-07T16:40:38.097176+08:00", + "id": "326ef5f696fc4517ad971f3c18c09d3c", + "createdAt": "2026-01-08T19:29:51.293332+08:00", "customerName": "斯蒂尔", "intendedProduct": "2025/12/25", "version": "1.9.4", @@ -52,8 +52,8 @@ "reporter": "" }, { - "id": "e45d0a13be724c129a3c4e446517a940", - "createdAt": "2026-01-07T16:40:38.098053+08:00", + "id": "2ea5ba08d65e4161b2a6d0f7bf0fdc65", + "createdAt": "2026-01-08T19:29:51.293906+08:00", "customerName": "求之", "intendedProduct": "2025/12/26", "version": "1.9.4", @@ -65,8 +65,8 @@ "reporter": "" }, { - "id": "157ee3180f9c47efb38ab52e3a3b2b4f", - "createdAt": "2026-01-07T16:40:38.099239+08:00", + "id": "c526ea3480054f28960643808bb53ef9", + "createdAt": "2026-01-08T19:29:51.294402+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/26", "version": "1.9.4", @@ -78,8 +78,8 @@ "reporter": "" }, { - "id": "b7371743ec5549af8ce643e136334ccf", - "createdAt": "2026-01-07T16:40:38.100073+08:00", + "id": "4efd8a041ba54782a939c4ce7081b4a3", + "createdAt": "2026-01-08T19:29:51.29499+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/26", "version": "1.9.4", @@ -91,8 +91,8 @@ "reporter": "" }, { - "id": "c87211e0dc6b42f1bb2127259cf64e81", - "createdAt": "2026-01-07T16:40:38.101288+08:00", + "id": "f90a391c662c4110b757366471a25b74", + "createdAt": "2026-01-08T19:29:51.295487+08:00", "customerName": "斯蒂尔", "intendedProduct": "2025/12/26", "version": "1.9.4", @@ -104,8 +104,8 @@ "reporter": "" }, { - "id": "d14245e86d3d4ee399996ba6d26b23de", - "createdAt": "2026-01-07T16:40:38.101877+08:00", + "id": "2b18c018d30145f184e52bfcb04e82b5", + "createdAt": "2026-01-08T19:29:51.295938+08:00", "customerName": "良业", "intendedProduct": "2025/12/26", "version": "1.9.4", @@ -117,8 +117,8 @@ "reporter": "" }, { - "id": "e6fe3693b67d406e9edd056fc48c7119", - "createdAt": "2026-01-07T16:40:38.102556+08:00", + "id": "e95a8e18feb84e8782aaa927c6019871", + "createdAt": "2026-01-08T19:29:51.296574+08:00", "customerName": "良业", "intendedProduct": "2025/12/29", "version": "1.9.4", @@ -130,8 +130,8 @@ "reporter": "" }, { - "id": "ec24619e11014cb4a3e2f6d9e4b2d618", - "createdAt": "2026-01-07T16:40:38.103257+08:00", + "id": "7b08b842f8bb43de99b19b19c480eee3", + "createdAt": "2026-01-08T19:29:51.29745+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/29", "version": "1.9.4", @@ -143,8 +143,8 @@ "reporter": "" }, { - "id": "a9fc0da9bee44acba2d43d15e06079ed", - "createdAt": "2026-01-07T16:40:38.10396+08:00", + "id": "7288f08cb73b4c1ba498c28cda3bf55e", + "createdAt": "2026-01-08T19:29:51.298267+08:00", "customerName": "良业", "intendedProduct": "2025/12/30", "version": "1.9.4", @@ -156,8 +156,8 @@ "reporter": "" }, { - "id": "0bd2e8d859d7466293182181490d56b4", - "createdAt": "2026-01-07T16:40:38.104695+08:00", + "id": "259770db2c75419f99ee0d15b226c28d", + "createdAt": "2026-01-08T19:29:51.299503+08:00", "customerName": "良业", "intendedProduct": "2025/12/30", "version": "1.9.4", @@ -169,8 +169,8 @@ "reporter": "" }, { - "id": "3576f30f7b7d489e91f2c638b9aae7af", - "createdAt": "2026-01-07T16:40:38.105387+08:00", + "id": "f62e3bcaaf884a1e9f694d5b5a609477", + "createdAt": "2026-01-08T19:29:51.300399+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/30", "version": "1.9.4", @@ -182,8 +182,8 @@ "reporter": "" }, { - "id": "1cdb5f53ee734caf859fc0597a60f13a", - "createdAt": "2026-01-07T16:40:38.106029+08:00", + "id": "02926ba82c834267a6911a15e4b3847d", + "createdAt": "2026-01-08T19:29:51.301521+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/31", "version": "1.9.4", @@ -195,8 +195,8 @@ "reporter": "" }, { - "id": "e01001a4667d45e0872d506df39be397", - "createdAt": "2026-01-07T16:40:38.106833+08:00", + "id": "bb4087f2ae9940fdb7ab994b8b5f4136", + "createdAt": "2026-01-08T19:29:51.302148+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/31", "version": "1.9.4", @@ -208,8 +208,8 @@ "reporter": "" }, { - "id": "e52a8badaab840a2a6dd27a614d1e929", - "createdAt": "2026-01-07T16:40:38.107656+08:00", + "id": "d89faa6bbbb448a4bbe8b68b9cb7a5a9", + "createdAt": "2026-01-08T19:29:51.302779+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/31", "version": "1.9.4", @@ -221,8 +221,8 @@ "reporter": "" }, { - "id": "bbf8dd91213b4d96b96bbeb43ed9930e", - "createdAt": "2026-01-07T16:40:38.108654+08:00", + "id": "a52d112c39ac4dadb1bb80a567feaf69", + "createdAt": "2026-01-08T19:29:51.303529+08:00", "customerName": "诺因智能", "intendedProduct": "2025/12/31", "version": "1.9.4", diff --git a/frontend/index.html b/frontend/index.html index 10d4a71..054bc3e 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -218,7 +218,7 @@

数据分布

- + diff --git a/frontend/js/main.js b/frontend/js/main.js index 03cde0c..405ffe2 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -534,16 +534,16 @@ document.addEventListener('DOMContentLoaded', function () { if (startDate) { filteredData = filteredData.filter(c => { - if (!c.customerName) return false; - const date = normalizeDateValue(c.customerName); + if (!c.intendedProduct) return false; + const date = normalizeDateValue(c.intendedProduct); return date && date >= startDate; }); } if (endDate) { filteredData = filteredData.filter(c => { - if (!c.customerName) return false; - const date = normalizeDateValue(c.customerName); + if (!c.intendedProduct) return false; + const date = normalizeDateValue(c.intendedProduct); return date && date <= endDate; }); } @@ -854,7 +854,7 @@ document.addEventListener('DOMContentLoaded', function () { // Update dashboard statistics function updateDashboardStats(customers) { - const totalCustomers = new Set(customers.map(c => c.intendedProduct).filter(c => c)).size; + const totalCustomers = new Set(customers.map(c => c.customerName).filter(c => c)).size; const now = new Date(); const currentMonth = String(now.getMonth() + 1).padStart(2, '0'); @@ -862,20 +862,20 @@ document.addEventListener('DOMContentLoaded', function () { const newCustomers = new Set( customers.filter(customer => { if (!customer.customerName) return false; - const normalized = normalizeDateValue(customer.customerName); + const normalized = normalizeDateValue(customer.intendedProduct); if (!normalized) return false; const year = parseInt(normalized.slice(0, 4), 10); const month = normalized.slice(5, 7); return year === currentYear && month === currentMonth; - }).map(c => c.intendedProduct).filter(c => c) + }).map(c => c.customerName).filter(c => c) ).size; - const products = new Set(customers.map(c => c.intendedProduct)).size; + const products = new Set(customers.map(c => c.version)).size; const completed = new Set( customers.filter(c => c.statusProgress && (c.statusProgress.includes('已修复') || c.statusProgress.includes('完成') || c.statusProgress.toLowerCase().includes('complete')) - ).map(c => c.intendedProduct).filter(c => c) + ).map(c => c.customerName).filter(c => c) ).size; document.getElementById('totalCustomers').textContent = totalCustomers;