新增: AR-11 数据变更联动(AI 工具执行后 emit df-data-changed+store listen 刷新列表)

audit.rs data_change_for_tool 映射(create_project/idea/task→create,update_*→update,delete_*/purge→delete,restore/bind_directory→update)+emit_data_changed(process_tool_calls 已有 app_handle 无需透传);commands.rs ai_approve 成功路径 emit;types.ts DfDataChangedPayload;project.ts barrel listen df-data-changed + start/stopDataChangedListener 单例;App.vue onMounted 全局挂载+onUnmounted 清理。AI 工具(create/update/delete project/task/idea)执行后前端 Projects/Tasks/Ideas 列表自动刷新。批7,cargo+vue-tsc 0
This commit is contained in:
2026-06-15 05:54:15 +08:00
parent b08adcb9da
commit dc27e79fd2
5 changed files with 107 additions and 1 deletions

View File

@@ -1,9 +1,11 @@
import { reactive, computed } from 'vue'
import { listen } from '@tauri-apps/api/event'
import { createProjectsStore } from './project/projects'
import { createTasksStore } from './project/tasks'
import { createIdeasStore } from './project/ideas'
import { createWorkflowStore } from './project/workflow'
import { state, clearError } from './project/state'
import type { DfDataChangedPayload } from '../api/types'
// ── barrel 组合器(零行为变更,纯重构) ──
//
@@ -20,6 +22,39 @@ function createStore() {
const ideasStore = createIdeasStore()
const workflowStore = createWorkflowStore()
// ── AR-11方案A数据变更联动刷新 ──
// 后端 AI 工具(create/update/delete/restore/purge/bind_directory)执行成功后 emit
// "df-data-changed" { entity, action },前端按 entity 调对应 load 刷新列表,
// 取代工具执行后需手动刷新。
let _dataChangedUnlisten: (() => void) | null = null
async function startDataChangedListener() {
if (_dataChangedUnlisten) return _dataChangedUnlisten
_dataChangedUnlisten = await listen<DfDataChangedPayload>('df-data-changed', (event) => {
const { entity } = event.payload
// 按 entity 调对应 load 刷新action 仅语义标识,刷新统一走 load 全量拉取)
if (entity === 'project') {
void projectsStore.loadProjects()
} else if (entity === 'task') {
void tasksStore.loadTasks()
} else if (entity === 'idea') {
void ideasStore.loadIdeas()
}
})
return _dataChangedUnlisten
}
function stopDataChangedListener() {
if (_dataChangedUnlisten) {
try {
_dataChangedUnlisten()
} catch (e) {
console.error('停止数据变更监听失败:', e)
}
_dataChangedUnlisten = null
}
}
// ── 统计(跨领域,留在组合器) ──
const stats = computed(() => ({
ideas: state.ideas.length,
@@ -70,6 +105,9 @@ function createStore() {
clearLiveEvents: workflowStore.clearLiveEvents,
approveHumanApproval: workflowStore.approveHumanApproval,
cancelHumanApproval: workflowStore.cancelHumanApproval,
// AR-11方案A数据变更联动刷新监听(后端工具执行后 emit df-data-changed)
startDataChangedListener,
stopDataChangedListener,
pendingApproval: computed(() => state.pendingApproval),
// computed
stats,