优化: 所有剩余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:
@@ -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.
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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}待审批',
|
||||
|
||||
@@ -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} 项通过',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ export default {
|
||||
next: '下一页',
|
||||
page: '第 {n} 页',
|
||||
last: '(末页)',
|
||||
total: '共 {n} 条',
|
||||
},
|
||||
|
||||
risk: {
|
||||
@@ -42,6 +43,7 @@ export default {
|
||||
executing: '执行中',
|
||||
completed: '已完成',
|
||||
failed: '失败',
|
||||
interrupted: '已中断',
|
||||
},
|
||||
|
||||
decided: {
|
||||
|
||||
@@ -14,6 +14,9 @@ export default {
|
||||
close: '关闭',
|
||||
loading: '加载中…',
|
||||
unknownError: '未知错误',
|
||||
// 折叠/展开(可复用通用词,描述折叠/日志折叠/未来长内容)
|
||||
expand: '展开',
|
||||
collapse: '收起',
|
||||
// 分页 UI(F-260621-02 P3 基建,默认不分页,用户选每页 N 条才触发)
|
||||
pagination: {
|
||||
prev: '上一页',
|
||||
|
||||
@@ -135,6 +135,8 @@ export default {
|
||||
|
||||
// 原生对话框文案(confirm / alert)
|
||||
confirmDelete: '确定删除灵感「{title}」?此操作不可撤销。',
|
||||
// ⑥ 状态切换确认(终态 promoted/rejected/archived 或离开 approved 失去立项入口)
|
||||
confirmStatus: '将灵感「{title}」状态从 {from} 改为 {to}?',
|
||||
promoteFailed: '立项失败',
|
||||
evalFailed: '评估失败',
|
||||
},
|
||||
|
||||
@@ -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: '立即抽取失败',
|
||||
|
||||
@@ -64,6 +64,8 @@ export default {
|
||||
// 审批操作
|
||||
approvalConfirm: '确认({count})',
|
||||
approvalCancel: '取消',
|
||||
approvalSelectAll: '全选',
|
||||
approvalInvert: '反选',
|
||||
// 技术栈
|
||||
techStackLabel: '技术栈',
|
||||
// Tab 导航
|
||||
|
||||
@@ -4,6 +4,10 @@ export default {
|
||||
// 头部操作
|
||||
create: '+ 新建项目',
|
||||
trash: '🗑 回收站',
|
||||
// 视图模式切换(list 紧凑单列默认 / card 宽松双列)
|
||||
viewModeTitle: '切换视图模式',
|
||||
viewList: '列表视图',
|
||||
viewCard: '卡片视图',
|
||||
// 新建项目模态框
|
||||
createTitle: '新建项目',
|
||||
nameLabel: '项目名称',
|
||||
|
||||
@@ -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: '导出',
|
||||
|
||||
@@ -62,5 +62,10 @@ export default {
|
||||
workflowEdgeDetail: '边条件编辑',
|
||||
workflowUnconditional: '无条件',
|
||||
workflowCondPlaceholder: '输入条件表达式(如 outputs.done == true)',
|
||||
// 描述折叠(超 400px 显展开按钮,Problem4 重设计)
|
||||
expand: '展开',
|
||||
collapse: '收起',
|
||||
// 关联信息面板标题(宽屏右栏 / 信息分组)
|
||||
relatedTitle: '关联信息',
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user