optimize status fetch
This commit is contained in:
@@ -280,7 +280,7 @@ export const useSoftwareStore = defineStore('software', {
|
||||
if ((window as any).__tauri_listener_init) return;
|
||||
(window as any).__tauri_listener_init = true;
|
||||
|
||||
listen('install-status', (event: any) => {
|
||||
listen('install-status', async (event: any) => {
|
||||
const { id, status, progress } = event.payload
|
||||
const task = this.activeTasks[id];
|
||||
|
||||
@@ -290,17 +290,38 @@ export const useSoftwareStore = defineStore('software', {
|
||||
// 当任务达到终态(成功或失败)时。注意:'configuring' 不是终态。
|
||||
if (status === 'success' || status === 'error') {
|
||||
if (status === 'success') {
|
||||
this.lastFetched = 0;
|
||||
// 立即更新勾选状态,提升响应感
|
||||
// 立即进行局部刷新
|
||||
try {
|
||||
const latestInfo = await invoke('get_software_info', { id }) as any;
|
||||
if (latestInfo) {
|
||||
const index = this.allSoftware.findIndex(s => s.id.toLowerCase() === id.toLowerCase());
|
||||
if (index !== -1) {
|
||||
this.allSoftware[index] = { ...this.allSoftware[index], ...latestInfo };
|
||||
} else {
|
||||
this.allSoftware.push(latestInfo);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Partial refresh failed:', err);
|
||||
}
|
||||
|
||||
// 立即更新勾选状态
|
||||
this.selectedEssentialIds = this.selectedEssentialIds.filter(i => i !== id);
|
||||
this.selectedUpdateIds = this.selectedUpdateIds.filter(i => i !== id);
|
||||
|
||||
// 保持绿色“已完成”状态 3 秒,然后自动回归真实状态
|
||||
setTimeout(() => {
|
||||
if (this.activeTasks[id]?.status === 'success') {
|
||||
delete this.activeTasks[id];
|
||||
}
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
// 检查是否属于正在进行的批量任务
|
||||
const index = this.batchQueue.indexOf(id);
|
||||
if (index !== -1) {
|
||||
this.batchQueue.splice(index, 1);
|
||||
// 如果这是批量任务中的最后一个,则触发延迟刷新
|
||||
// 只有批量任务全部结束后,才执行一次全量刷新作为保障
|
||||
if (this.batchQueue.length === 0) {
|
||||
this.scheduleDataRefresh();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user