修复: P1-b Dashboard统计源解耦(治翻页/筛选后统计数字错乱 H6/H7)

- 统计走后端 count_tasks 独立通道,不再 filter(state.tasks) 当前页数据

- state 加 activeTaskCount/projectTaskCounts 缓存,loadStats action 并发 count 填充 + df-data-changed task 分支联动刷新

- Dashboard loadAll 删 loadTasks 改 loadStats(不再消费 state.tasks 全量)

- ActiveProjectsPanel getProjectTaskCount 改读 store.projectTaskCounts

- 后端零改(复用已注册 count_tasks IPC + count_by_query)
This commit is contained in:
lxy
2026-08-02 12:29:44 +08:00
parent 9e85cadb3f
commit d1321af880
4 changed files with 45 additions and 4 deletions
+7 -2
View File
@@ -60,14 +60,19 @@ const { t } = useI18n()
const loading = ref(false)
const errorMsg = ref('')
// 统一加载入口(projects/tasks/ideas 并行),管理 loading + errorMsg
// 统一加载入口(projects/ideas 并行 + 统计独立通道),管理 loading + errorMsg
// refresh 与 onMounted 共用,避免两处 catch 逻辑重复
// P1-b A0:不再调 store.loadTasks() —— Dashboard 模板不消费 state.tasks,
// 统计(activeTaskCount/projectTaskCounts)走 loadStats() 独立通道(后端 count_tasks),
// 不被 Tasks 视图分页/筛选污染。Tasks.vue 自行 loadTasks(onMounted/筛选/变更)。
// loadStats 依赖 state.projects(算 projectTaskCounts),故 loadProjects 完成后再调。
async function loadAll() {
if (loading.value) return // 防重复触发
loading.value = true
errorMsg.value = ''
try {
await Promise.all([store.loadProjects(), store.loadTasks(), store.loadIdeas()])
await Promise.all([store.loadProjects(), store.loadIdeas()])
await store.loadStats()
} catch (e: any) {
console.error('Dashboard load failed:', e)
errorMsg.value = e?.toString() ?? t('dashboard.err.loadFailed')