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
+17 -4
+17 -4
View File
@@ -6154,12 +6154,16 @@ async function openResourceManagement() {
await resourceTask(loadManagedResources);
}
async function resourceTask(action) {
async function resourceTask(action, delay = 0) {
if (resourceManager.busy) return;
resourceManager.busy = true;
resourceElements.List.inert = true;
resourceElements.List.inert = !delay;
updateResourceControls();
const showBusy = () => {
resourceElements.Status.textContent = "处理中";
};
const timer = delay ? setTimeout(showBusy, delay) : null;
if (!delay) showBusy();
resourceElements.Panel.setAttribute("aria-busy", "true");
try {
await action();
@@ -6167,6 +6171,7 @@ async function resourceTask(action) {
} catch (err) {
resourceElements.Status.textContent = resourceError(err.message);
} finally {
if (timer !== null) clearTimeout(timer);
resourceManager.busy = false;
resourceElements.List.inert = false;
resourceElements.Panel.removeAttribute("aria-busy");
@@ -6213,13 +6218,13 @@ async function renderResourceList() {
span.textContent = value;
button.append(span);
}
button.addEventListener("click", () => resourceTask(() => selectManagedResource(item)));
button.addEventListener("click", () => chooseManagedResource(item));
button.addEventListener("keydown", event => {
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];
if (target == null) return;
event.preventDefault();
resourceTask(() => selectManagedResource(items[target])).then(() => {
chooseManagedResource(items[target]).then(() => {
if (resourceElements.Panel.open && resourceManager.selected === items[target]) resourceElements.List.children[target]?.focus();
});
});
@@ -6235,6 +6240,14 @@ async function renderResourceList() {
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) {
const same = item?.id === resourceManager.selected?.id && item?.kind === resourceManager.selected?.kind;
const reference = same ? resourceElements.Reference.value : "0";