修复编辑配置,保存和回显的问题

This commit is contained in:
2026-07-15 14:35:03 +08:00
parent 96cca34de0
commit d34dd82bd5
5 changed files with 125 additions and 41 deletions

View File

@@ -42,7 +42,9 @@ async function loadEntities(page = 1, search = '') {
if (entities.length === 0) {
container.innerHTML = '<div class="empty">无数据</div>';
} else {
container.innerHTML = entities.map(e => {
const selected = [];
const unselected = [];
entities.forEach(e => {
let value = '';
let name = '';
let typeLabel = '';
@@ -62,11 +64,23 @@ async function loadEntities(page = 1, search = '') {
name = e.station_name;
}
const isChecked = selectedEntityIds.has(String(value)) ? 'checked' : '';
const item = { value, name, typeLabel };
if (selectedEntityIds.has(String(value))) {
selected.push(item);
} else {
unselected.push(item);
}
});
const sortedEntities = [...selected, ...unselected];
container.innerHTML = sortedEntities.map(e => {
const isChecked = selectedEntityIds.has(String(e.value)) ? 'checked' : '';
const isSelectedTop = selectedEntityIds.has(String(e.value));
return `
<div class="checkbox-item ${isChecked}" onclick="toggleEntityCheckbox(this, '${value}')">
<input type="checkbox" value="${value}" ${isChecked} onclick="event.stopPropagation()">
<span>${name} ${typeLabel}</span>
<div class="checkbox-item ${isChecked} ${isSelectedTop ? 'entity-selected-top' : ''}" onclick="toggleEntityCheckbox(this, '${e.value}')">
<input type="checkbox" value="${e.value}" ${isChecked} onclick="event.stopPropagation()">
<span>${e.name} ${e.typeLabel}</span>
</div>
`;
}).join('');
@@ -89,15 +103,45 @@ function toggleEntityCheckbox(item, value) {
if (checkbox.checked) {
item.classList.add('checked');
item.classList.add('entity-selected-top');
selectedEntityIds.add(String(value));
} else {
item.classList.remove('checked');
item.classList.remove('entity-selected-top');
selectedEntityIds.delete(String(value));
}
updateSelectedCount();
}
// 重新排序列表(已选的在前面)
function reorderEntityList() {
const container = document.getElementById('entity-list');
const items = Array.from(container.querySelectorAll('.checkbox-item'));
if (items.length === 0) return;
const selected = [];
const unselected = [];
items.forEach(item => {
const checkbox = item.querySelector('input[type="checkbox"]');
if (checkbox.checked) {
selected.push(item);
item.classList.add('entity-selected-top');
} else {
unselected.push(item);
item.classList.remove('entity-selected-top');
}
});
// 用文档片段移动,避免 innerHTML 清空导致状态丢失
const fragment = document.createDocumentFragment();
[...selected, ...unselected].forEach(item => {
fragment.appendChild(item);
});
container.appendChild(fragment);
}
// 更新已选数量显示
function updateSelectedCount() {
const countSpan = document.getElementById('selected-count');
@@ -125,6 +169,7 @@ function toggleSelectAllEntities() {
});
updateSelectedCount();
reorderEntityList();
}
// 更新实体分页UI