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