打印模块

This commit is contained in:
iqudoo
2026-06-14 03:16:39 +08:00
parent fff6cb98ae
commit 833eda5621
8 changed files with 904 additions and 282 deletions

View File

@@ -1,5 +1,5 @@
import React, { useState } from 'react';
import { Database, Layout, Settings } from 'lucide-react';
import { Database, Layout, Printer, Settings } from 'lucide-react';
import { ImportData, PaperConfig, LabelTemplate, RecordRow, ExportRangeConfig, CutLineConfig } from '../types';
import { DataImporter } from './DataImporter';
import { VariableMappingPanel } from './VariableMappingPanel';
@@ -7,6 +7,7 @@ import { PaperSettingsPanel, PageInput } from './PreviewGrid';
import { CollapsiblePanelSection } from './CollapsiblePanelSection';
import { DataRangeFields } from './DataRangeFields';
import { FieldSelect } from './PsSelect';
import { PrintModule } from './PrintModule';
interface ExportSidebarProps {
importData: ImportData | null;
@@ -32,6 +33,10 @@ interface ExportSidebarProps {
onApplyData: () => void;
onRedrawPreview: () => void;
draftSelectedCount: number;
printing: boolean;
onPrint: (printerId: string) => void;
printDisabled: boolean;
printDisabledReason?: string | null;
/** 移动端精简:仅数据、映射、数据范围 */
compact?: boolean;
}
@@ -60,12 +65,17 @@ export const ExportSidebar: React.FC<ExportSidebarProps> = ({
onApplyData,
onRedrawPreview,
draftSelectedCount,
printing,
onPrint,
printDisabled,
printDisabledReason = null,
compact = false,
}) => {
type ExportPanelKey = 'data' | 'layout';
type ExportPanelKey = 'data' | 'layout' | 'print';
const [activePanel, setActivePanel] = useState<ExportPanelKey | null>('data');
const dataCollapsed = activePanel !== 'data';
const layoutCollapsed = activePanel !== 'layout';
const printCollapsed = activePanel !== 'print';
const toggleExportPanel = (key: ExportPanelKey) => {
setActivePanel((prev) => (prev === key ? null : key));
};
@@ -283,6 +293,22 @@ export const ExportSidebar: React.FC<ExportSidebarProps> = ({
</fieldset>
</div>
</CollapsiblePanelSection>
<CollapsiblePanelSection
sectionClassName="export-print-panel"
collapsed={printCollapsed}
onToggle={() => toggleExportPanel('print')}
icon={<Printer className="w-3.5 h-3.5 shrink-0 text-[#31a8ff]" />}
title="打印"
bodyClassName="ps-panel-body p-3 min-h-0 space-y-3"
>
<PrintModule
disabled={printDisabled}
disabledReason={printDisabledReason}
printing={printing}
onPrint={onPrint}
/>
</CollapsiblePanelSection>
</aside>
);
};