- 窗口分离: FileExplorer 可弹出独立 Tauri 窗口 - 行号显示: 文件预览左侧显示行号列 - 按后缀图标: rs/ts/js/vue/css/html 等 20+ 类型彩色图标 - Diff 视图: 有 Git 变更的文件可切换 diff 红绿视图 - Git 变更面板: 变更文件列表(按目录缩进分组)+提交历史(分页加载) - 提交详情: 点击提交查看变更文件列表及文件级 diff - 时间显示: 提交历史显示相对时间/具体日期 - 面包屑导航不丢预览: 导航时不改变当前预览文件 - 刷新保留选中文件: 只清树缓存不清预览 - 中文编码修复: git 命令注入 LANG/LC_ALL 环境变量 - 自适应布局: 弹性 flex 布局,窄窗口适配 - 滚动条优化: 内容区内部滚动,不溢出页面层 - 多工程管理: 工具栏添加工程按钮+弹窗表单 - 审批加载超时缩短: 130s 降至 30s - 文件变更自动刷新: write_file/patch_file 触发 df-data-changed
52 lines
2.4 KiB
Rust
52 lines
2.4 KiB
Rust
//! AR-11(方案A):数据变更联动刷新。
|
||
//!
|
||
//! 工具执行成功后按映射 emit "df-data-changed" { entity, action },
|
||
//! 前端 store listen 该事件按 entity 调 loadProjects/loadTasks/loadIdeas 刷新列表,
|
||
//! 取代工具执行后需手动刷新。
|
||
//!
|
||
//! 第四批从 audit/mod.rs 抽离,行为零变更。
|
||
|
||
use tauri::{AppHandle, Emitter};
|
||
|
||
/// AR-11(方案A):工具名 → (entity, action) 映射,用于数据变更联动刷新。
|
||
///
|
||
/// 仅数据变更类工具返回 Some,其余工具返回 None(不 emit df-data-changed)。
|
||
/// 映射规则:
|
||
/// - create_project/create_idea/create_task → (project/idea/task, create)
|
||
/// - update_project/update_task/update_idea → (..., update)
|
||
/// - delete_project/delete_task/delete_idea/purge_project → (..., delete)
|
||
/// - restore_project → (project, update)(恢复等同状态变更,前端走 update 刷新)
|
||
/// - bind_directory → (project, update)(绑定目录属项目字段更新)
|
||
pub(super) fn data_change_for_tool(name: &str) -> Option<(&'static str, &'static str)> {
|
||
let (entity, action) = match name {
|
||
"create_project" => ("project", "create"),
|
||
"create_task" => ("task", "create"),
|
||
"create_idea" => ("idea", "create"),
|
||
"update_project" => ("project", "update"),
|
||
"update_task" => ("task", "update"),
|
||
"update_idea" => ("idea", "update"),
|
||
"delete_project" | "purge_project" => ("project", "delete"),
|
||
"delete_task" => ("task", "delete"),
|
||
"delete_idea" => ("idea", "delete"),
|
||
"restore_project" => ("project", "update"),
|
||
"bind_directory" => ("project", "update"),
|
||
"write_file" | "patch_file" => ("file", "update"),
|
||
_ => return None,
|
||
};
|
||
Some((entity, action))
|
||
}
|
||
|
||
/// AR-11(方案A):工具执行成功后按映射 emit "df-data-changed" { entity, action }。
|
||
///
|
||
/// 前端 store listen 该事件,按 entity 调 loadProjects/loadTasks/loadIdeas 刷新列表,
|
||
/// 取代工具执行后需手动刷新。仅工具名命中 data_change_for_tool 映射才 emit,
|
||
/// 其余工具(run_workflow/list_tasks 等)不 emit。emit 失败不阻断(let _ =)。
|
||
pub(crate) fn emit_data_changed(app_handle: &AppHandle, tool_name: &str) {
|
||
if let Some((entity, action)) = data_change_for_tool(tool_name) {
|
||
let _ = app_handle.emit(
|
||
"df-data-changed",
|
||
serde_json::json!({ "entity": entity, "action": action }),
|
||
);
|
||
}
|
||
}
|