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' && (
@@ -871,16 +937,14 @@ export default function App() {
: '创建模板开始可视化设计,或导入已有的模板文件。'}
- {!isMobile && (
-
- )}
+