修正文件处理

main
mula.liu 2026-03-02 13:47:45 +08:00
parent a71b092ffb
commit 500dc23489
2 changed files with 43 additions and 12 deletions

View File

@ -1409,6 +1409,26 @@
max-height: calc(100vh - 170px); max-height: calc(100vh - 170px);
} }
.workspace-preview-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
}
.workspace-preview-header-text {
min-width: 0;
display: grid;
gap: 4px;
}
.workspace-preview-header-actions {
display: inline-flex;
align-items: center;
gap: 6px;
flex: 0 0 auto;
}
.workspace-preview-body { .workspace-preview-body {
border: 1px solid var(--line); border: 1px solid var(--line);
border-radius: 10px; border-radius: 10px;

View File

@ -2531,9 +2531,29 @@ export function BotDashboardModule({
{workspacePreview && ( {workspacePreview && (
<div className="modal-mask" onClick={closeWorkspacePreview}> <div className="modal-mask" onClick={closeWorkspacePreview}>
<div className={`modal-card modal-preview ${workspacePreviewFullscreen ? 'modal-preview-fullscreen' : ''}`} onClick={(e) => e.stopPropagation()}> <div className={`modal-card modal-preview ${workspacePreviewFullscreen ? 'modal-preview-fullscreen' : ''}`} onClick={(e) => e.stopPropagation()}>
<div className="modal-title-row"> <div className="modal-title-row workspace-preview-header">
<h3>{t.filePreview}</h3> <div className="workspace-preview-header-text">
<span className="modal-sub mono">{workspacePreview.path}</span> <h3>{t.filePreview}</h3>
<span className="modal-sub mono">{workspacePreview.path}</span>
</div>
<div className="workspace-preview-header-actions">
<button
className="btn btn-secondary btn-sm icon-btn"
onClick={() => setWorkspacePreviewFullscreen((v) => !v)}
title={workspacePreviewFullscreen ? (isZh ? '退出全屏' : 'Exit full screen') : (isZh ? '全屏预览' : 'Full screen')}
aria-label={workspacePreviewFullscreen ? (isZh ? '退出全屏' : 'Exit full screen') : (isZh ? '全屏预览' : 'Full screen')}
>
{workspacePreviewFullscreen ? <Minimize2 size={14} /> : <Maximize2 size={14} />}
</button>
<button
className="btn btn-secondary btn-sm icon-btn"
onClick={closeWorkspacePreview}
title={t.close}
aria-label={t.close}
>
<X size={14} />
</button>
</div>
</div> </div>
<div className={`workspace-preview-body ${workspacePreview.isMarkdown ? 'markdown' : ''}`}> <div className={`workspace-preview-body ${workspacePreview.isMarkdown ? 'markdown' : ''}`}>
{workspacePreview.isImage ? ( {workspacePreview.isImage ? (
@ -2562,14 +2582,6 @@ export function BotDashboardModule({
<div className="row-between"> <div className="row-between">
<span className="workspace-preview-meta mono">{workspacePreview.ext || '-'}</span> <span className="workspace-preview-meta mono">{workspacePreview.ext || '-'}</span>
<div style={{ display: 'inline-flex', alignItems: 'center', gap: 8 }}> <div style={{ display: 'inline-flex', alignItems: 'center', gap: 8 }}>
<button
className="btn btn-secondary"
onClick={() => setWorkspacePreviewFullscreen((v) => !v)}
title={workspacePreviewFullscreen ? (isZh ? '退出全屏' : 'Exit full screen') : (isZh ? '全屏预览' : 'Full screen')}
aria-label={workspacePreviewFullscreen ? (isZh ? '退出全屏' : 'Exit full screen') : (isZh ? '全屏预览' : 'Full screen')}
>
{workspacePreviewFullscreen ? <Minimize2 size={14} /> : <Maximize2 size={14} />}
</button>
<a <a
className="btn btn-secondary" className="btn btn-secondary"
href={`${APP_ENDPOINTS.apiBase}/bots/${selectedBotId}/workspace/download?path=${encodeURIComponent(workspacePreview.path)}&download=1`} href={`${APP_ENDPOINTS.apiBase}/bots/${selectedBotId}/workspace/download?path=${encodeURIComponent(workspacePreview.path)}&download=1`}
@ -2579,7 +2591,6 @@ export function BotDashboardModule({
> >
{t.download} {t.download}
</a> </a>
<button className="btn btn-primary" onClick={closeWorkspacePreview}>{t.close}</button>
</div> </div>
</div> </div>
</div> </div>