修复: 页面反馈真实性与竞态守卫八处
- 知识创建失败不再误关弹窗弹成功提示(补返回值检查) - AuditLog 翻页补请求序号守卫防慢响应覆盖新页 - TaskDrawer 切任务慢响应校验 taskId 才写入 - GitChanges 竞态序号+moduleId 双校验,三处静默失败补错误提示 - 回收站恢复/彻底删除操作中禁用防双击重复提交 - 灵感状态切换失败补错误反馈(原 unhandled rejection) - FileExplorer 三处失败仅 console 补 Message 提示 - Dashboard 消费 store.error 故障不再伪装空数据
This commit is contained in:
+10
-1
@@ -282,21 +282,28 @@ function buildQuery() {
|
||||
return q
|
||||
}
|
||||
|
||||
// 请求序号守卫(对齐 project/tasks store 的 _tasksSeq 模式):快速切筛选/翻页时
|
||||
// 旧响应晚到不覆盖新结果,旧请求的失败也不污染当前视图
|
||||
let _loadSeq = 0
|
||||
|
||||
async function load() {
|
||||
const seq = ++_loadSeq
|
||||
loading.value = true
|
||||
errorMsg.value = ''
|
||||
try {
|
||||
const result = await invoke<ToolExecutionPage>('list_tool_executions', {
|
||||
query: buildQuery(),
|
||||
})
|
||||
if (seq !== _loadSeq) return // 旧响应丢弃,只取最新
|
||||
records.value = result.items
|
||||
total.value = result.total
|
||||
hasMore.value = result.has_more
|
||||
// 后端 total 已正确,空结果即真无数据(不再像旧"满页推断"需回退)
|
||||
} catch (e) {
|
||||
if (seq !== _loadSeq) return // 旧请求的失败不污染当前视图
|
||||
errorMsg.value = String(e)
|
||||
} finally {
|
||||
loading.value = false
|
||||
if (seq === _loadSeq) loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,12 +385,14 @@ function reloadAudit() {
|
||||
void load()
|
||||
}
|
||||
function prevPage() {
|
||||
if (loading.value) return // 加载中禁止翻页,防并发请求互踩
|
||||
if (offset.value === 0) return
|
||||
offset.value = Math.max(0, offset.value - PAGE_SIZE)
|
||||
expandedId.value = null
|
||||
void load()
|
||||
}
|
||||
function nextPage() {
|
||||
if (loading.value) return // 加载中禁止翻页,防并发请求互踩
|
||||
if (!hasMore.value) return
|
||||
offset.value += PAGE_SIZE
|
||||
expandedId.value = null
|
||||
|
||||
Reference in New Issue
Block a user