feat(前端界面): 修复资源选择闪烁
build.yaml / build (push) Successful in 54s

This commit is contained in:
xiaoqidun committed 2026-10-16 09:04:54 +08:00
1 parent bb3abdea1d
commit 33ae0b1a98
1 file changed
+18 -5
+18 -5
View File
@@ -6154,12 +6154,16 @@ async function openResourceManagement() {
await resourceTask(loadManagedResources); await resourceTask(loadManagedResources);
} }
async function resourceTask(action) { async function resourceTask(action, delay = 0) {
if (resourceManager.busy) return; if (resourceManager.busy) return;
resourceManager.busy = true; resourceManager.busy = true;
resourceElements.List.inert = true; resourceElements.List.inert = !delay;
updateResourceControls(); updateResourceControls();
resourceElements.Status.textContent = "处理中"; const showBusy = () => {
resourceElements.Status.textContent = "处理中";
};
const timer = delay ? setTimeout(showBusy, delay) : null;
if (!delay) showBusy();
resourceElements.Panel.setAttribute("aria-busy", "true"); resourceElements.Panel.setAttribute("aria-busy", "true");
try { try {
await action(); await action();
@@ -6167,6 +6171,7 @@ async function resourceTask(action) {
} catch (err) { } catch (err) {
resourceElements.Status.textContent = resourceError(err.message); resourceElements.Status.textContent = resourceError(err.message);
} finally { } finally {
if (timer !== null) clearTimeout(timer);
resourceManager.busy = false; resourceManager.busy = false;
resourceElements.List.inert = false; resourceElements.List.inert = false;
resourceElements.Panel.removeAttribute("aria-busy"); resourceElements.Panel.removeAttribute("aria-busy");
@@ -6213,13 +6218,13 @@ async function renderResourceList() {
span.textContent = value; span.textContent = value;
button.append(span); button.append(span);
} }
button.addEventListener("click", () => resourceTask(() => selectManagedResource(item))); button.addEventListener("click", () => chooseManagedResource(item));
button.addEventListener("keydown", event => { button.addEventListener("keydown", event => {
const index = items.indexOf(item); const index = items.indexOf(item);
const target = { ArrowDown: Math.min(items.length - 1, index + 1), ArrowUp: Math.max(0, index - 1), Home: 0, End: items.length - 1 }[event.key]; const target = { ArrowDown: Math.min(items.length - 1, index + 1), ArrowUp: Math.max(0, index - 1), Home: 0, End: items.length - 1 }[event.key];
if (target == null) return; if (target == null) return;
event.preventDefault(); event.preventDefault();
resourceTask(() => selectManagedResource(items[target])).then(() => { chooseManagedResource(items[target]).then(() => {
if (resourceElements.Panel.open && resourceManager.selected === items[target]) resourceElements.List.children[target]?.focus(); if (resourceElements.Panel.open && resourceManager.selected === items[target]) resourceElements.List.children[target]?.focus();
}); });
}); });
@@ -6235,6 +6240,14 @@ async function renderResourceList() {
await selectManagedResource(selected); await selectManagedResource(selected);
} }
async function chooseManagedResource(item) {
if (item === resourceManager.selected) return;
await resourceTask(() => {
resourceElements.Status.textContent = "";
return selectManagedResource(item);
}, 150);
}
async function selectManagedResource(item) { async function selectManagedResource(item) {
const same = item?.id === resourceManager.selected?.id && item?.kind === resourceManager.selected?.kind; const same = item?.id === resourceManager.selected?.id && item?.kind === resourceManager.selected?.kind;
const reference = same ? resourceElements.Reference.value : "0"; const reference = same ? resourceElements.Reference.value : "0";