悠修复自定义实收金额和求和采集功能增强

This commit is contained in:
2026-07-28 14:16:46 +08:00
parent e72acb58ec
commit 4a1b0f71c3
9 changed files with 454 additions and 39 deletions

View File

@@ -24,12 +24,20 @@ function renderSumDataList(rawList) {
return;
}
// 收集所有动态求和字段(除了充电电量 charge_degree)
// 获取全局配置的允许显示字段(charge_degree 始终显示)
// 如果没有配置,则显示所有字段(向后兼容)
const hasConfig = sumDataConfigFields && sumDataConfigFields.length > 0;
const allowedFields = hasConfig ? new Set(sumDataConfigFields) : null;
// 收集所有动态求和字段(除了充电电量 charge_degree,且只收集允许显示的字段)
const fieldMap = {};
rawList.forEach(item => {
const key = item.sum_field_key;
if (key && key !== 'charge_degree' && !fieldMap[key]) {
fieldMap[key] = item.sum_field_name || key;
// 如果配置了允许字段,则只收集允许的字段;否则收集所有字段
if (!hasConfig || allowedFields.has(key)) {
fieldMap[key] = item.sum_field_name || key;
}
}
});
@@ -186,6 +194,17 @@ async function loadSumData(page = 1) {
if (listTbody) {
listTbody.innerHTML = '<tr><td colspan="12" class="loading">加载中...</td></tr>';
}
// 先加载全局配置
try {
const configResponse = await fetch('/api/global-config/sum-data-fields?_t=' + Date.now());
const configResult = await configResponse.json();
if (configResult.success) {
sumDataConfigFields = configResult.data || [];
}
} catch (error) {
console.log('加载全局配置失败:', error);
}
const params = new URLSearchParams();
params.append('page_size', '1000');
@@ -649,3 +668,109 @@ async function exportSumData() {
alert('导出失败: ' + error.message);
}
}
// 求和数据可配置的采集字段列表
const SUM_DATA_AVAILABLE_FIELDS = [
{ key: 'sharp_electricity', name: '尖时电量(kWh)' },
{ key: 'peak_electricity', name: '峰时电量(kWh)' },
{ key: 'flat_electricity', name: '平时电量(kWh)' },
{ key: 'valley_electricity', name: '谷时电量(kWh)' },
{ key: 'charge_elecfee_amount', name: '实收电费(元)' },
{ key: 'charge_servicefee_amount', name: '实收服务费(元)' },
{ key: 'charge_amount', name: '实收总金额(元)' },
{ key: 'charge_frequency', name: '充电次数' },
{ key: 'custom_service_fee', name: '自定义服务费(元)' },
{ key: 'custom_total_amount', name: '自定义实收总金额(元)' }
];
let sumDataConfigFields = [];
// 初始化全局配置
async function initSumDataConfig() {
try {
const response = await fetch('/api/global-config/sum-data-fields?_t=' + Date.now());
const result = await response.json();
if (result.success) {
sumDataConfigFields = result.data || [];
}
} catch (error) {
console.log('初始化全局配置失败:', error);
}
}
// 页面加载时初始化
document.addEventListener('DOMContentLoaded', initSumDataConfig);
// 显示求和数据全局配置模态框
async function showSumDataConfigModal() {
const modal = document.getElementById('sum-data-config-modal');
const fieldsList = document.getElementById('sum-data-config-fields-list');
fieldsList.innerHTML = '<div class="loading">加载中...</div>';
try {
const response = await fetch('/api/global-config/sum-data-fields?_t=' + Date.now());
const result = await response.json();
if (result.success) {
sumDataConfigFields = result.data || [];
renderSumDataConfigFields(sumDataConfigFields);
} else {
fieldsList.innerHTML = '<div class="empty">加载失败</div>';
}
} catch (error) {
fieldsList.innerHTML = '<div class="empty">加载失败: ' + error.message + '</div>';
}
modal.classList.add('active');
}
// 关闭求和数据全局配置模态框
function closeSumDataConfigModal() {
document.getElementById('sum-data-config-modal').classList.remove('active');
}
// 渲染求和数据配置字段列表
function renderSumDataConfigFields(selectedFields) {
const fieldsList = document.getElementById('sum-data-config-fields-list');
fieldsList.innerHTML = SUM_DATA_AVAILABLE_FIELDS.map(field => `
<div class="checkbox-item ${selectedFields.includes(field.key) ? 'checked' : ''}" onclick="toggleSumDataConfigField(this)">
<input type="checkbox" value="${field.key}"
${selectedFields.includes(field.key) ? 'checked' : ''}>
<label>${field.name} <span class="field-key-name">(${field.key})</span></label>
</div>
`).join('');
}
// 切换求和数据配置字段选中状态
function toggleSumDataConfigField(item) {
const checkbox = item.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
item.classList.toggle('checked', checkbox.checked);
}
// 保存求和数据全局配置
async function saveSumDataConfig() {
const checkboxes = document.querySelectorAll('#sum-data-config-fields-list input[type="checkbox"]');
const selectedFields = Array.from(checkboxes)
.filter(cb => cb.checked)
.map(cb => cb.value);
try {
const response = await fetch('/api/global-config/sum-data-fields', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ sum_data_fields: selectedFields })
});
const result = await response.json();
if (result.success) {
alert('配置保存成功');
sumDataConfigFields = selectedFields;
closeSumDataConfigModal();
loadSumData(sumDataCurrentPage);
} else {
alert('保存失败: ' + (result.message || '未知错误'));
}
} catch (error) {
alert('保存失败: ' + error.message);
}
}