This commit is contained in:
hangyu.tao 2026-01-08 19:33:42 +08:00
parent a778b0b62c
commit 558d51abe8
3 changed files with 47 additions and 47 deletions

View File

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

View File

@ -218,7 +218,7 @@
<h3><i class="fas fa-chart-pie"></i> 数据分布</h3> <h3><i class="fas fa-chart-pie"></i> 数据分布</h3>
<div class="chart-controls"> <div class="chart-controls">
<select id="chartFieldSelect" class="chart-field-select"> <select id="chartFieldSelect" class="chart-field-select">
<option value="intendedProduct">客户</option> <option value="customerName">客户</option>
<option value="type">类型</option> <option value="type">类型</option>
<option value="module">模块</option> <option value="module">模块</option>
<option value="reporter">报告人</option> <option value="reporter">报告人</option>
@ -236,7 +236,7 @@
<h3><i class="fas fa-chart-doughnut"></i> 客户类型</h3> <h3><i class="fas fa-chart-doughnut"></i> 客户类型</h3>
<div class="chart-controls"> <div class="chart-controls">
<select id="typeChartFieldSelect" class="chart-field-select"> <select id="typeChartFieldSelect" class="chart-field-select">
<option value="intendedProduct">客户</option> <option value="customerName">客户</option>
<option value="type">类型</option> <option value="type">类型</option>
<option value="module">模块</option> <option value="module">模块</option>
<option value="reporter">报告人</option> <option value="reporter">报告人</option>

View File

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