优化: 所有剩余UI/UX待办一批完成(持久化+AuditLog+解耦+total+原12大改+P2)

持久化(P1-c):新建 usePersistedRef composable,Tasks/AuditLog/ProjectDetail 等接入 localStorage

AuditLog(P1-d):后端 list_tool_executions 加 WHERE 筛选+返 {items,total,has_more},前端对接+长列折叠+筛选持久化

数据源解耦(P1-g):ProjectDetail projectTasks 按 project_id 独立加载 + ChatInput @项目联想独立加载(不读 store.tasks 当前页)

GitChanges(12a):后端 get_module_commits 加 git rev-list --count 返 total,前端显真实总数

原12大改:Dashboard 统计卡压底行(1)/Projects 列表卡片视图(2)/project_event 埋点排序(3)/TaskDetail 重设计(4)/IdeaDetail 重设计(5)/KnowledgeDetail 重设计(6)/界面持久化+侧栏Ctrl+B+审批数字键(7)/ProjectDetail 三栏改两栏(10)

P2打磨:文件浏览器(FileTree去重/FilePreview行号.md Diff/selectedFilePath归位)/settings反馈(假保存/端口校验)/AI会话(try-catch/scrollIntoView)/后端计数(move_queue事件/timeline total/workflow分页/import_batch分块)/杂项(TopBar/ConfirmDialog键盘/CIStatus i18n/ToolResultBody/ModuleNode/ApprovalDialog全选)
This commit is contained in:
lxy
2026-08-02 13:11:06 +08:00
parent caaabf0c15
commit f736f435bc
70 changed files with 2645 additions and 576 deletions
+8
View File
@@ -41,6 +41,14 @@ export default {
// UX-260617-08: conversation load/switch failure feedback (network jitter/IPC down → empty list/blank, was silent)
loadConvFail: 'Failed to load conversations. Please check your network or backend connection.',
switchConvFail: 'Failed to switch conversation. Please retry.',
// M30: rename/archive/pin IPC failure feedback (was no try/catch, exceptions leaked to unhandledrejection)
renameConvFail: 'Failed to rename. Please retry.',
archiveConvFail: 'Failed to {action}. Please retry.',
pinConvFail: 'Failed to {action}. Please retry.',
archiveAction: 'archive',
unarchiveAction: 'unarchive',
pinAction: 'pin',
unpinAction: 'unpin',
// AE-2025-07: Agentic loop progress bar copy
// Note: max round / completed tool count are not surfaced by backend this round;
// template conditionally omits them. Add *WithMax keys once backend exposes them.
+6
View File
@@ -240,5 +240,11 @@ export default {
// ── AE-2025-04 Session Trust ──
// Auto-approval toast (same-session already approved same-kind op: same tool + same dir)
autoApprovedToast: 'Auto-approved: {tool}({dir})',
// ── CIStatus.vue (commit CI checks status card) ──
ciTitle: 'CI Checks',
ciNFailed: '{n} failed',
ciNPending: '{n} pending',
ciNPassed: '{n} passed',
},
}
+2
View File
@@ -27,6 +27,7 @@ export default {
next: 'Next',
page: 'Page {n}',
last: '(last)',
total: '{n} total',
},
risk: {
@@ -42,6 +43,7 @@ export default {
executing: 'Executing',
completed: 'Completed',
failed: 'Failed',
interrupted: 'Interrupted',
},
decided: {
+3
View File
@@ -14,6 +14,9 @@ export default {
close: 'Close',
loading: 'Loading…',
unknownError: 'Unknown error',
// Collapse/expand (reusable generic verbs for description/log/future long content)
expand: 'Expand',
collapse: 'Collapse',
// Pagination UI (F-260621-02 P3 baseline; off by default, opt-in per-page)
pagination: {
prev: 'Prev',
+2
View File
@@ -135,6 +135,8 @@ export default {
// Native dialog text (confirm / alert)
confirmDelete: 'Delete idea "{title}"? This cannot be undone.',
// ⑥ Status change confirm (terminal promoted/rejected/archived or leaving approved)
confirmStatus: 'Change idea "{title}" status from {from} to {to}?',
promoteFailed: 'Promotion failed',
evalFailed: 'Evaluation failed',
},
+7
View File
@@ -15,6 +15,12 @@ export default {
publish: 'Publish',
reject: 'Reject',
archive: 'Archive',
// ⑤ Operation feedback toast
savedToast: 'Saved',
publishedToast: 'Published to library',
rejectedToast: 'Rejected',
archivedToast: 'Archived',
createdToast: 'Created, moved to pending',
reuseCount: '🔄 Reused {n} times',
confidenceBadge: 'Confidence: {label}',
contentLabel: 'Content',
@@ -83,6 +89,7 @@ export default {
createFailed: 'Failed to create knowledge',
updateStatusFailed: 'Failed to update status',
archiveFailed: 'Failed to archive',
saveFailed: 'Failed to save',
loadConfigFailed: 'Failed to load config',
saveConfigFailed: 'Failed to save config',
extractFailed: 'Extraction failed',
+2
View File
@@ -64,6 +64,8 @@ export default {
// Approval actions
approvalConfirm: 'Confirm ({count})',
approvalCancel: 'Cancel',
approvalSelectAll: 'Select all',
approvalInvert: 'Invert',
// Tech stack
techStackLabel: 'Tech Stack',
// Tab navigation
+4
View File
@@ -4,6 +4,10 @@ export default {
// Header actions
create: '+ New Project',
trash: '🗑 Trash',
// View mode toggle (compact list default / spacious card)
viewModeTitle: 'Switch view mode',
viewList: 'List view',
viewCard: 'Card view',
// New project modal
createTitle: 'New Project',
nameLabel: 'Project Name',
+5 -1
View File
@@ -67,8 +67,9 @@ export default {
fetchHintSaveFirst: 'Save the provider first, then fetch models',
labelWeight: 'Weight',
modelListTitle: 'Fetched models ({count})',
modelListHint: 'Enabled / weight are session-local edits; the next "Test connection" overwrites with fresh probe results',
modelListHint: 'After toggling enabled / weight, click "Save" below to write them into the provider config; the next "Test connection" overwrites with fresh probe results',
saveModels: 'Save model config',
modelListUnsavedHint: 'Model list has unsaved changes (enabled / weight) — closing or navigating away will discard them',
toastFetchOk: 'Fetched {count} models',
toastFetchFail: 'Fetch failed: {msg}',
fetchFailedTimeout: 'Fetch timed out, check that the Base URL is reachable: {msg}',
@@ -213,6 +214,8 @@ export default {
// ===== Toast =====
toastLoadProviderFail: 'Failed to load providers',
toastSaveIncomplete: 'Please fill in all fields (Name / Base URL / API Key / Model)',
// L19: confirm before discarding an edited form
confirmDiscardUnsaved: 'The form has unsaved changes. Discard them?',
toastSaved: 'Saved',
toastSaveFail: 'Save failed: {msg}',
// P0-2: save-failure classified guidance (persistent banner, not raw Err text)
@@ -225,6 +228,7 @@ export default {
toastSetDefaultOk: 'Set as default',
toastSetDefaultFail: 'Failed to set default: {msg}',
toastConnIncomplete: 'Please fill in Name and Host',
toastConnPortInvalid: 'Port must be between 1 and 65535',
// ===== Import / Export (phase 6) =====
export: 'Export',
+5
View File
@@ -62,5 +62,10 @@ export default {
workflowEdgeDetail: 'Edge Condition Editor',
workflowUnconditional: 'Unconditional',
workflowCondPlaceholder: 'Enter condition expression (e.g. outputs.done == true)',
// Description collapse (show expand button beyond 400px, Problem4 redesign)
expand: 'Expand',
collapse: 'Collapse',
// Related info panel title (wide-screen right column / info grouping)
relatedTitle: 'Related',
},
}
+8
View File
@@ -41,6 +41,14 @@ export default {
// UX-260617-08:对话加载/切换失败反馈(网络抖动/IPC 断开 → 列表空/切换空白,原静默无反馈)
loadConvFail: '对话列表加载失败,请检查网络或后端连接',
switchConvFail: '对话切换失败,请重试',
// M30:重命名/归档/置顶 IPC 失败反馈(原无 try/catch 异常进 unhandledrejection,用户无感)
renameConvFail: '重命名失败,请重试',
archiveConvFail: '{action}失败,请重试',
pinConvFail: '{action}失败,请重试',
archiveAction: '归档',
unarchiveAction: '取消归档',
pinAction: '置顶',
unpinAction: '取消置顶',
// AE-2025-07: Agentic 循环进度条文案
// 注:max 轮次/已完成工具数本轮后端暂不透传,模板条件渲染省略;后端补全后新增 *WithMax key
agenticProgress: '🔄 循环 {round} · ⏳{pending}待审批',
+6
View File
@@ -241,5 +241,11 @@ export default {
// ── AE-2025-04 会话级信任(Session Trust) ──
// 自动放行 toast(同会话已批准过同类操作:同工具+同目录,轻量 info 非审批气泡)
autoApprovedToast: '已自动放行: {tool}({dir})',
// ── CIStatus.vue(代码提交 CI 检查状态卡)──
ciTitle: 'CI 检查',
ciNFailed: '{n} 项失败',
ciNPending: '{n} 项进行中',
ciNPassed: '{n} 项通过',
},
}
+2
View File
@@ -27,6 +27,7 @@ export default {
next: '下一页',
page: '第 {n} 页',
last: '(末页)',
total: '共 {n} 条',
},
risk: {
@@ -42,6 +43,7 @@ export default {
executing: '执行中',
completed: '已完成',
failed: '失败',
interrupted: '已中断',
},
decided: {
+3
View File
@@ -14,6 +14,9 @@ export default {
close: '关闭',
loading: '加载中…',
unknownError: '未知错误',
// 折叠/展开(可复用通用词,描述折叠/日志折叠/未来长内容)
expand: '展开',
collapse: '收起',
// 分页 UI(F-260621-02 P3 基建,默认不分页,用户选每页 N 条才触发)
pagination: {
prev: '上一页',
+2
View File
@@ -135,6 +135,8 @@ export default {
// 原生对话框文案(confirm / alert
confirmDelete: '确定删除灵感「{title}」?此操作不可撤销。',
// ⑥ 状态切换确认(终态 promoted/rejected/archived 或离开 approved 失去立项入口)
confirmStatus: '将灵感「{title}」状态从 {from} 改为 {to}?',
promoteFailed: '立项失败',
evalFailed: '评估失败',
},
+7
View File
@@ -20,6 +20,12 @@ export default {
publish: '发布',
reject: '拒绝',
archive: '归档',
// ⑤ 操作反馈 toast
savedToast: '已保存',
publishedToast: '已发布到知识库',
rejectedToast: '已拒绝',
archivedToast: '已归档',
createdToast: '已创建,进入待处理',
// 详情徽章
reuseCount: '🔄 复用 {n} 次',
confidenceBadge: '置信度: {label}',
@@ -99,6 +105,7 @@ export default {
createFailed: '创建知识失败',
updateStatusFailed: '更新状态失败',
archiveFailed: '归档失败',
saveFailed: '保存失败',
loadConfigFailed: '加载配置失败',
saveConfigFailed: '保存配置失败',
extractFailed: '立即抽取失败',
+2
View File
@@ -64,6 +64,8 @@ export default {
// 审批操作
approvalConfirm: '确认({count})',
approvalCancel: '取消',
approvalSelectAll: '全选',
approvalInvert: '反选',
// 技术栈
techStackLabel: '技术栈',
// Tab 导航
+4
View File
@@ -4,6 +4,10 @@ export default {
// 头部操作
create: '+ 新建项目',
trash: '🗑 回收站',
// 视图模式切换(list 紧凑单列默认 / card 宽松双列)
viewModeTitle: '切换视图模式',
viewList: '列表视图',
viewCard: '卡片视图',
// 新建项目模态框
createTitle: '新建项目',
nameLabel: '项目名称',
+5 -1
View File
@@ -66,8 +66,9 @@ export default {
fetchHintSaveFirst: '请先保存 Provider 后再拉取模型',
labelWeight: '权重',
modelListTitle: '已拉取模型({count} 个)',
modelListHint: '已启用 / 权重为本次会话内调整,下次「测试连接」会以最新探测结果覆盖',
modelListHint: '勾选 / 权重调整后,请点下方「保存」一并写入 Provider 配置;下次「测试连接」会以最新探测结果覆盖',
saveModels: '保存模型配置',
modelListUnsavedHint: '模型列表有未保存的调整(启用 / 权重),关闭或切走将丢弃',
toastFetchOk: '已拉取 {count} 个模型',
toastFetchFail: '拉取模型失败:{msg}',
fetchFailedTimeout: '拉取超时,请检查 Base URL 是否可达:{msg}',
@@ -212,6 +213,8 @@ export default {
// ===== Toast 提示 =====
toastLoadProviderFail: '加载提供商失败',
toastSaveIncomplete: '请填写完整(名称 / Base URL / API Key / 模型)',
// L19: 表单有改动时取消/关闭的二次确认
confirmDiscardUnsaved: '表单有未保存的改动,确定放弃吗?',
toastSaved: '已保存',
toastSaveFail: '保存失败:{msg}',
// P0-2: 保存失败分类建议(常驻错误横幅,非裸 Err 文本)
@@ -224,6 +227,7 @@ export default {
toastSetDefaultOk: '已设为默认',
toastSetDefaultFail: '设置默认失败:{msg}',
toastConnIncomplete: '请填写名称和 Host',
toastConnPortInvalid: '端口必须在 1-65535 范围内',
// ===== 导入 / 导出(阶段6) =====
export: '导出',
+5
View File
@@ -62,5 +62,10 @@ export default {
workflowEdgeDetail: '边条件编辑',
workflowUnconditional: '无条件',
workflowCondPlaceholder: '输入条件表达式(如 outputs.done == true)',
// 描述折叠(超 400px 显展开按钮,Problem4 重设计)
expand: '展开',
collapse: '收起',
// 关联信息面板标题(宽屏右栏 / 信息分组)
relatedTitle: '关联信息',
},
}