修复: aichat advance_task渲染显任务名 + 审批防双击 + time.ts销账
- UX-260618-14: advance_task 工具结果/审批卡显任务名替代UUID 前端 ToolCard 取 r.title fallback r.id + TASK_ID_TOOL_ARG 审批卡 task_id→title 回显 + i18n 后端 audit resolve_task_label 查 tasks 表(原误查 projects恒报不存在) + 删 tool_display_hint 短路让模板生效 - UX-260618-16: time.ts formatDate .value 已修(CR-24/25闭环),漏销账补登 - UX-260618-17: ProjectDetail handleApprovalMulti 补 submitting try/finally + 模板联动防双击
This commit is contained in:
@@ -8,7 +8,7 @@ use tauri::{AppHandle, Emitter, State};
|
||||
|
||||
use df_ai::ai_tools::{AiToolRegistry, RiskLevel};
|
||||
use df_ai::provider::ChatMessage;
|
||||
use df_storage::crud::{AiToolExecutionRepo, ProjectRepo};
|
||||
use df_storage::crud::{AiToolExecutionRepo, ProjectRepo, TaskRepo};
|
||||
use df_storage::db::Database;
|
||||
use df_storage::models::AiToolExecutionRecord;
|
||||
|
||||
@@ -143,6 +143,26 @@ async fn resolve_project_label(db: &Arc<Database>, id: &str) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
/// 查任务可读标签:id → "「任务标题」(id=x)",对齐 resolve_project_label 三臂语义。
|
||||
///
|
||||
/// UX-260618-14:advance_task 审批卡的 id 是 task_id,原 build_approval_reason 把 "id"
|
||||
/// 统一走 resolve_project_label(查 projects 表),误把任务 id 当项目 id 解析,永远落到
|
||||
/// "项目已不存在"。本方法改查 tasks 表,与 resolve_project_label 同 Ok(None)/Err 分流。
|
||||
async fn resolve_task_label(db: &Arc<Database>, id: &str) -> String {
|
||||
if id.is_empty() {
|
||||
return String::new();
|
||||
}
|
||||
let repo = TaskRepo::new(db);
|
||||
match repo.get_by_id(id).await {
|
||||
Ok(Some(t)) => format!("「{}」(id={})", t.title, id),
|
||||
Ok(None) => format!("(任务已不存在, id={})", id),
|
||||
Err(e) => {
|
||||
tracing::warn!("resolve_task_label: 查询任务 id={} 失败,回退裸 id: {}", id, e);
|
||||
format!("(id={})", id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 拼审批 reason:按工具名 + args 取可读字段,让用户知道"审批要做什么"。
|
||||
///
|
||||
/// 主要审批工具特化(带对象名/标识):
|
||||
@@ -170,6 +190,8 @@ async fn build_approval_reason(
|
||||
let val = s(key);
|
||||
if val.is_empty() { values.clear(); break; }
|
||||
match key {
|
||||
// advance_task 的 id 是 task_id(非项目 id),改查 tasks 表,避免误报"项目已不存在"
|
||||
"id" if tool_name == "advance_task" => values.push(resolve_task_label(db, &val).await),
|
||||
"id" | "project_id" => values.push(resolve_project_label(db, &val).await),
|
||||
_ => values.push(val.to_string()),
|
||||
}
|
||||
|
||||
@@ -1572,7 +1572,8 @@ pub(crate) fn tool_display_hint(name: &str) -> Option<&'static str> {
|
||||
"bind_directory" => Some("绑定目录"),
|
||||
"create_idea" => Some("捕获灵感"),
|
||||
"update_task" => Some("修改任务"),
|
||||
"advance_task" => Some("推进任务状态"),
|
||||
// advance_task 不在此轻量映射:让 build_approval_reason 走 display_hint_for_tool
|
||||
// 模板(含 target_status 详情),否则轻量命中"推进任务状态"丢失目标态信息(UX-260618-14)
|
||||
"run_workflow" => Some("触发工作流"),
|
||||
"delete_task" => Some("删除任务"),
|
||||
"update_idea" => Some("修改灵感"),
|
||||
|
||||
Reference in New Issue
Block a user