import React, { useMemo } from 'react'; import { ExportRangeConfig, LabelTemplate, PaperConfig, RecordRow } from '../types'; import { buildPrintablePages, extractTemplateVariables } from '../utils'; import { PageInput } from './PreviewGrid'; import { FieldSelect } from './PsSelect'; import { VariableFilterRulesEditor } from './VariableFilterRulesEditor'; interface DataRangeFieldsProps { variant?: 'ps' | 'mobile'; exportRange: ExportRangeConfig; onChangeExportRange: (range: ExportRangeConfig) => void; rows: RecordRow[]; paper: PaperConfig; template: LabelTemplate; disabled?: boolean; } export const DataRangeFields: React.FC = ({ variant = 'ps', exportRange, onChangeExportRange, rows, paper, template, disabled = false, }) => { const isMobile = variant === 'mobile'; const variableDefaults = template.variableDefaults ?? null; const templateVariables = useMemo(() => extractTemplateVariables(template), [template]); const rangeStats = buildPrintablePages(rows, paper, template, exportRange, variableDefaults); const patchRange = (patch: Partial) => { onChangeExportRange({ ...exportRange, ...patch }); }; return (
{!isMobile &&
数据范围
}
{isMobile && } patchRange({ mode: e.target.value as ExportRangeConfig['mode'] })} className={isMobile ? 'mobile-field' : 'ps-field text-[11px]'} >
{exportRange.mode === 'custom' && (
{isMobile ? ( ) : ( )} patchRange({ custom: val })} placeholder="如 1,3,5-10" inputClassName={isMobile ? 'mobile-field font-mono' : 'ps-field font-mono text-[11px]'} />
)} {exportRange.mode === 'conditional' && ( patchRange({ filterRules })} /> )} {rows.length > 0 && (

当前范围:{rangeStats.selectedCount} / {rows.length} 行

)}
); };