diff --git a/docs/develop-guides/roadmap.md b/docs/develop-guides/roadmap.md index 41b884af..ae23faa4 100644 --- a/docs/develop-guides/roadmap.md +++ b/docs/develop-guides/roadmap.md @@ -53,6 +53,7 @@ ### 修复 +- 调整前端工作台文件预览交互:恢复默认侧边/弹窗预览,并新增显式“全屏预览”入口;全屏模式下由预览内容直接覆盖整页,仅保留右上角悬浮关闭按钮 - 兼容旧版已安装的内置 `reporter` 技能记录:`update_builtin_skill` 现在会识别由 `system` 或 `builtin-system` 管理的历史记录,避免更新时误报“技能 `reporter` 不是内置 skill” - 调整沙盒 user-data 目录隔离策略:`workspace` 改为共享目录 `saves/threads/shared/workspace`,`uploads/outputs` 继续保持 thread 级隔离;同时更新 thread artifact 权限校验、viewer 文件系统列举逻辑,以及对应的 router/E2E 测试 - 重构聊天接口请求模型:流式与非流式聊天统一使用 `query + agent_config_id` 请求体,并移除路径中的 `agent_id`;同时修复非流式接口实际误走流式执行链路的问题,改为调用 `invoke_messages` 一次性执行,并补充对应测试 diff --git a/web/src/components/AgentPanel.vue b/web/src/components/AgentPanel.vue index ac33e0b3..97ba13e4 100644 --- a/web/src/components/AgentPanel.vue +++ b/web/src/components/AgentPanel.vue @@ -136,6 +136,9 @@ + + + @@ -207,7 +210,6 @@ - + + + @@ -290,9 +300,7 @@ - {{ - formatContent(currentFile.content) - }} + {{ formatContent(currentFile.content) }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ currentFile?.message || '当前文件暂不支持预览,请下载后查看' }} + + + + {{ + formatContent(currentFile.content) + }} + + {{ + currentFile.content + }} + {{ JSON.stringify(currentFile, null, 2) }} + + + + + @@ -316,6 +406,7 @@ import { Download, FolderCode, Globe, + Maximize2, RefreshCw, X } from 'lucide-vue-next' @@ -380,6 +471,7 @@ const INLINE_PREVIEW_MIN_WIDTH = 920 const panelRef = ref(null) const activeTab = ref('files') const modalVisible = ref(false) +const fullscreenPreviewVisible = ref(false) const currentFile = ref(null) const currentFilePath = ref('') const htmlPreviewMode = ref('render') @@ -717,6 +809,7 @@ const onFileSelect = async (nextSelectedKeys, { node }) => { } const closePreview = () => { + fullscreenPreviewVisible.value = false revokeCurrentPreviewUrl() modalVisible.value = false currentFile.value = null @@ -725,6 +818,15 @@ const closePreview = () => { selectedKeys.value = [] } +const openFullscreenPreview = () => { + if (!currentFile.value) return + fullscreenPreviewVisible.value = true +} + +const closeFullscreenPreview = () => { + fullscreenPreviewVisible.value = false +} + const downloadFile = async (fileItem) => { if (!props.threadId || !fileItem?.path) return @@ -847,6 +949,7 @@ onUnmounted(() => { window.removeEventListener('pointercancel', stopResize) document.body.style.cursor = '' document.body.style.userSelect = '' + document.body.style.overflow = '' revokeCurrentPreviewUrl() }) @@ -869,6 +972,14 @@ watch(useInlinePreview, (isInline) => { modalVisible.value = !isInline }) + +watch([modalVisible, fullscreenPreviewVisible], ([modalOpen, fullscreenOpen]) => { + document.body.style.overflow = fullscreenOpen ? 'hidden' : '' + + if (fullscreenOpen && modalOpen) { + modalVisible.value = false + } +})
{{ - formatContent(currentFile.content) - }}
{{ formatContent(currentFile.content) }}
{{ + formatContent(currentFile.content) + }}
{{ + currentFile.content + }}
{{ JSON.stringify(currentFile, null, 2) }}