修复求和数据统计的问题

This commit is contained in:
2026-07-23 14:57:29 +08:00
parent 03098a553e
commit fa884ae782
11 changed files with 550 additions and 184 deletions

View File

@@ -34,7 +34,8 @@ function renderSumDataList(rawList) {
});
// 排序:峰平谷按顺序
const fieldOrder = ['sharp_electricity', 'peak_electricity', 'flat_electricity', 'valley_electricity'];
const fieldOrder = ['sharp_electricity', 'peak_electricity', 'flat_electricity', 'valley_electricity',
'peak_degree', 'peak_time_degree', 'normal_time_degree', 'valley_time_degree'];
sumDataDynamicFields = Object.keys(fieldMap).sort((a, b) => {
const idxA = fieldOrder.indexOf(a);
const idxB = fieldOrder.indexOf(b);
@@ -188,15 +189,15 @@ async function loadSumData(page = 1) {
}
const params = new URLSearchParams();
params.append('page', '1');
params.append('page_size', '5000');
params.append('page', page);
params.append('page_size', '50');
if (startDate) params.append('start_date', startDate);
if (endDate) params.append('end_date', endDate);
if (configName) params.append('config_name', configName);
if (dataSource) params.append('data_source', dataSource);
try {
const response = await fetch(`/api/sum-data?${params.toString()}`);
const response = await fetch(`/api/sum-data?${params.toString()}&_t=${Date.now()}`);
const result = await response.json();
if (result.success) {
renderSumDataList(result.data.list || []);
@@ -266,9 +267,11 @@ function showAddSumDataModal() {
document.getElementById('sum-data-split-type-input').value = 'company_id';
document.getElementById('sum-data-split-value-input').value = '';
document.getElementById('sum-data-split-name-input').value = '';
document.getElementById('sum-data-field-key-input').value = '';
document.getElementById('sum-data-field-name-input').value = '';
document.getElementById('sum-data-value-input').value = '';
document.getElementById('sum-data-charge-degree-input').value = '';
document.getElementById('sum-data-peak-degree-input').value = '';
document.getElementById('sum-data-peak-time-input').value = '';
document.getElementById('sum-data-normal-time-input').value = '';
document.getElementById('sum-data-valley-time-input').value = '';
document.getElementById('sum-data-total-orders-input').value = 0;
document.getElementById('sum-data-remark-input').value = '';
document.getElementById('sum-data-modal').classList.add('active');
@@ -280,8 +283,11 @@ let editingGroupData = null;
async function showEditSumDataGroup(ids) {
try {
// 获取所有选中的记录详情
const response = await fetch(`/api/sum-data?page=1&page_size=5000`);
const response = await fetch('/api/sum-data/batch-query', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ids: ids })
});
const result = await response.json();
if (!result.success) {
@@ -289,8 +295,7 @@ async function showEditSumDataGroup(ids) {
return;
}
const allList = result.data.list || [];
const groupItems = allList.filter(item => ids.includes(item.id));
const groupItems = result.data || [];
if (groupItems.length === 0) {
alert('未找到该记录');
@@ -300,7 +305,6 @@ async function showEditSumDataGroup(ids) {
editingGroupIds = ids;
editingGroupData = groupItems;
// 找到充电电量那条作为主记录
const chargeItem = groupItems.find(i => i.sum_field_key === 'charge_degree') || groupItems[0];
document.getElementById('sum-data-modal-title').textContent = '编辑求和数据';
@@ -311,11 +315,10 @@ async function showEditSumDataGroup(ids) {
document.getElementById('sum-data-split-value-input').value = chargeItem.split_value || '';
document.getElementById('sum-data-split-name-input').value = chargeItem.split_name || '';
// 动态生成字段输入区域
renderEditGroupFields(groupItems);
document.getElementById('sum-data-total-orders-input').value = chargeItem.total_orders || 0;
document.getElementById('sum-data-remark-input').value = '';
document.getElementById('sum-data-remark-input').value = chargeItem.remark || '';
document.getElementById('sum-data-modal').classList.add('active');
} catch (error) {
alert('加载详情失败: ' + error.message);
@@ -324,9 +327,11 @@ async function showEditSumDataGroup(ids) {
// 渲染编辑分组时的动态字段输入
function renderEditGroupFields(items) {
const fieldKeyInput = document.getElementById('sum-data-field-key-input');
const fieldNameInput = document.getElementById('sum-data-field-name-input');
const valueInput = document.getElementById('sum-data-value-input');
// 隐藏静态字段输入区域(整个求和字段值区域)
const chargeDegreeInput = document.getElementById('sum-data-charge-degree-input');
if (chargeDegreeInput) {
chargeDegreeInput.parentElement.parentElement.parentElement.style.display = 'none';
}
// 先构造动态字段区域
let fieldsHtml = '<div style="margin-bottom: 15px;"><label style="display: block; margin-bottom: 8px; font-weight: 600;">求和字段值:</label>';
@@ -363,11 +368,6 @@ function renderEditGroupFields(items) {
fieldsHtml += '</div></div>';
// 替换掉原来的单字段输入
fieldKeyInput.parentElement.style.display = 'none';
fieldNameInput.parentElement.style.display = 'none';
valueInput.parentElement.style.display = 'none';
// 插入到订单数前面
const totalOrdersGroup = document.getElementById('sum-data-total-orders-input').parentElement;
@@ -404,6 +404,8 @@ async function saveSumData() {
const fieldId = input.getAttribute('data-field-id');
const fieldValue = input.value;
console.log(`更新字段ID: ${fieldId}, 值: ${fieldValue}`);
const response = await fetch(`/api/sum-data/${fieldId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
@@ -414,6 +416,7 @@ async function saveSumData() {
})
});
const result = await response.json();
console.log(`更新结果: ${JSON.stringify(result)}`);
if (result.success) successCount++;
}
@@ -427,34 +430,73 @@ async function saveSumData() {
return;
}
// 单条新增模式
// 单条新增模式(批量添加多个字段)
const fieldsData = [];
const chargeDegree = document.getElementById('sum-data-charge-degree-input').value;
const peakDegree = document.getElementById('sum-data-peak-degree-input').value;
const peakTime = document.getElementById('sum-data-peak-time-input').value;
const normalTime = document.getElementById('sum-data-normal-time-input').value;
const valleyTime = document.getElementById('sum-data-valley-time-input').value;
if (!chargeDegree && !peakDegree && !peakTime && !normalTime && !valleyTime) {
alert('请至少输入一个求和字段值');
return;
}
if (chargeDegree) {
fieldsData.push({
sum_field_key: 'charge_degree',
sum_field_name: '充电电量(kWh)',
sum_value: chargeDegree
});
}
if (peakDegree) {
fieldsData.push({
sum_field_key: 'peak_degree',
sum_field_name: '尖时电量(kWh)',
sum_value: peakDegree
});
}
if (peakTime) {
fieldsData.push({
sum_field_key: 'peak_time_degree',
sum_field_name: '峰时电量(kWh)',
sum_value: peakTime
});
}
if (normalTime) {
fieldsData.push({
sum_field_key: 'normal_time_degree',
sum_field_name: '平时电量(kWh)',
sum_value: normalTime
});
}
if (valleyTime) {
fieldsData.push({
sum_field_key: 'valley_time_degree',
sum_field_name: '谷时电量(kWh)',
sum_value: valleyTime
});
}
const data = {
report_date: document.getElementById('sum-data-report-date-input').value,
config_name: document.getElementById('sum-data-config-name-input').value,
split_type: document.getElementById('sum-data-split-type-input').value,
split_value: document.getElementById('sum-data-split-value-input').value,
split_name: document.getElementById('sum-data-split-name-input').value,
sum_field_key: document.getElementById('sum-data-field-key-input').value,
sum_field_name: document.getElementById('sum-data-field-name-input').value,
sum_value: document.getElementById('sum-data-value-input').value,
total_orders: totalOrders,
remark: remark
remark: remark,
fields: fieldsData
};
if (!data.report_date) {
alert('请选择报表日期');
return;
}
if (!data.sum_field_key) {
alert('请输入求和字段键名');
return;
}
if (data.sum_value === '' || data.sum_value === null) {
alert('请输入求和值');
return;
}
const response = await fetch('/api/sum-data', {
const response = await fetch('/api/sum-data/batch-add', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
@@ -478,12 +520,22 @@ function closeSumDataModal() {
document.getElementById('sum-data-modal').classList.remove('active');
editingGroupIds = [];
editingGroupData = null;
// 恢复单字段输入的显示
document.querySelector('#sum-data-field-key-input').parentElement.style.display = '';
document.querySelector('#sum-data-field-name-input').parentElement.style.display = '';
document.querySelector('#sum-data-value-input').parentElement.style.display = '';
// 清空新增字段输入
document.getElementById('sum-data-charge-degree-input').value = '';
document.getElementById('sum-data-peak-degree-input').value = '';
document.getElementById('sum-data-peak-time-input').value = '';
document.getElementById('sum-data-normal-time-input').value = '';
document.getElementById('sum-data-valley-time-input').value = '';
// 恢复静态字段区域显示
const chargeDegreeInput = document.getElementById('sum-data-charge-degree-input');
if (chargeDegreeInput) {
chargeDegreeInput.parentElement.parentElement.parentElement.style.display = '';
}
// 清理动态区域
const dynamicArea = document.getElementById('sum-data-dynamic-fields');
if (dynamicArea) dynamicArea.innerHTML = '';
if (dynamicArea) {
dynamicArea.remove();
}
}
// 删除单条(分组)