diff --git a/src/App.tsx b/src/App.tsx index 1280962..69ef157 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,6 +17,7 @@ import { LabelDesigner } from './components/LabelDesigner'; import { PropSidebar } from './components/PropSidebar'; import { ExportSidebar } from './components/ExportSidebar'; import { MobileExportView } from './components/MobileExportView'; +import { MobileDesignView } from './components/MobileDesignView'; import { LayoutPreview } from './components/PreviewGrid'; import { CanvasLabelImage } from './components/CanvasLabelImage'; import { renderLabelToDataUrl } from './labelRenderer'; @@ -153,6 +154,9 @@ export default function App() { const [editTmplName, setEditTmplName] = useState(''); const [templateMenuId, setTemplateMenuId] = useState(null); const templateMenuRef = useRef(null); + const [headerTemplateMenuOpen, setHeaderTemplateMenuOpen] = useState(false); + const headerTemplateMenuRef = useRef(null); + const importTemplateInputRef = useRef(null); const designHistory = useUndoRedo(); const skipDesignHistoryRef = useRef(false); const designHistorySessionRef = useRef<{ step: string; templateId: string | null }>({ @@ -396,6 +400,16 @@ export default function App() { return () => document.removeEventListener('pointerdown', handlePointerDown); }, [templateMenuId]); + useEffect(() => { + if (!headerTemplateMenuOpen) return; + const handlePointerDown = (e: PointerEvent) => { + if (headerTemplateMenuRef.current?.contains(e.target as Node)) return; + setHeaderTemplateMenuOpen(false); + }; + document.addEventListener('pointerdown', handlePointerDown); + return () => document.removeEventListener('pointerdown', handlePointerDown); + }, [headerTemplateMenuOpen]); + const handleEditTemplateSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!editingTemplateId) return; @@ -770,7 +784,7 @@ export default function App() { className={`flex flex-col font-sans h-dvh max-h-dvh overflow-hidden ${workflowStep === 'template-design' || (workflowStep === 'print-view' && !isMobile) ? 'bg-[#323232] text-[#e8e8e8]' : workflowStep === 'print-view' && isMobile - ? 'bg-slate-100 text-slate-800' + ? 'bg-[#323232] text-[#e8e8e8]' : 'bg-slate-50 text-slate-800' }`} > @@ -779,7 +793,7 @@ export default function App() { SCREEN HEADER ========================================= */} - {!(isMobile && workflowStep === 'print-view') && ( + {workflowStep === 'template-select' && (
- {!isMobile && ( - + {isMobile ? ( + <> + +
+ + {headerTemplateMenuOpen && ( +
+ + +
+ )} +
+ + ) : ( + <> + + + )} - )}
@@ -871,16 +937,14 @@ export default function App() { : '创建模板开始可视化设计,或导入已有的模板文件。'}

- {!isMobile && ( - - )} +