From 6c314f98083b02d97256cc787ff3c7e709a1dc26 Mon Sep 17 00:00:00 2001 From: iqudoo Date: Sat, 13 Jun 2026 02:23:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 203 +++++++++----- src/components/ExportSidebar.tsx | 4 +- src/components/LabelDesigner.tsx | 230 +++++++++------- src/components/MobileDesignView.tsx | 100 +++++++ src/components/MobileExportLayoutPanel.tsx | 115 ++++++++ src/components/MobileExportPropsPanel.tsx | 146 ---------- src/components/MobileExportView.tsx | 300 ++++++++++++--------- src/components/PreviewGrid.tsx | 73 +++-- src/components/PropSidebar.tsx | 169 ++++++++---- src/index.css | 251 ++++++++++++++--- 10 files changed, 1058 insertions(+), 533 deletions(-) create mode 100644 src/components/MobileDesignView.tsx create mode 100644 src/components/MobileExportLayoutPanel.tsx delete mode 100644 src/components/MobileExportPropsPanel.tsx 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 && ( - - )} +