修复编辑配置,保存和回显的问题
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user