feat: add SSE event stream for print jobs, implement batch printing in frontend, and update API documentation.
Build and Push Multi-Platform Images / build-and-push (push) Successful in 36s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 36s
This commit is contained in:
@@ -125,6 +125,15 @@ function DocumentPreviewPopover({ record, children }: { record: InboxFile; child
|
||||
);
|
||||
}
|
||||
|
||||
function buildInitialFieldValues(template: BarcodeTemplate | null): Record<string, string> {
|
||||
const today = dayjs().format('YYYY-MM-DD');
|
||||
const values: Record<string, string> = {};
|
||||
for (const field of template?.LabelInputFields ?? []) {
|
||||
if (field.type === 'date') values[field.name] = today;
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
export default function InboxPage() {
|
||||
const navigate = useNavigate();
|
||||
const [files, setFiles] = useState<InboxFile[]>([]);
|
||||
@@ -137,6 +146,7 @@ export default function InboxPage() {
|
||||
const [selectedTemplate, setSelectedTemplate] = useState<BarcodeTemplate | null>(null);
|
||||
const [fieldValues, setFieldValues] = useState<Record<string, string>>({});
|
||||
const [printing, setPrinting] = useState(false);
|
||||
const [labelCount, setLabelCount] = useState(1);
|
||||
|
||||
const openPrintDialog = async () => {
|
||||
try {
|
||||
@@ -148,21 +158,24 @@ export default function InboxPage() {
|
||||
}
|
||||
setSelectedTemplate(null);
|
||||
setFieldValues({});
|
||||
setLabelCount(1);
|
||||
setPrintDialogOpen(true);
|
||||
};
|
||||
|
||||
const handleTemplateSelect = (id: number) => {
|
||||
const t = labelTemplates.find((t) => t.Id === id) ?? null;
|
||||
setSelectedTemplate(t);
|
||||
setFieldValues({});
|
||||
setFieldValues(buildInitialFieldValues(t));
|
||||
};
|
||||
|
||||
const handlePrint = async () => {
|
||||
if (!selectedTemplate) return;
|
||||
setPrinting(true);
|
||||
try {
|
||||
await labelPrintAgentApi.createJob(selectedTemplate.Id, fieldValues);
|
||||
message.success('Druckauftrag erstellt');
|
||||
for (let i = 0; i < labelCount; i++) {
|
||||
await labelPrintAgentApi.createJob(selectedTemplate.Id, fieldValues);
|
||||
}
|
||||
message.success(labelCount === 1 ? 'Druckauftrag erstellt' : `${labelCount} Druckaufträge erstellt`);
|
||||
setPrintDialogOpen(false);
|
||||
} catch (err: any) {
|
||||
message.error(err?.response?.data?.message ?? 'Druckauftrag fehlgeschlagen');
|
||||
@@ -406,6 +419,16 @@ export default function InboxPage() {
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="Anzahl Etiketten">
|
||||
<InputNumber
|
||||
min={1}
|
||||
max={100}
|
||||
value={labelCount}
|
||||
onChange={(v) => setLabelCount(v ?? 1)}
|
||||
style={{ width: '100%' }}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{selectedTemplate?.LabelInputFields?.map((field) => (
|
||||
<Form.Item key={field.name} label={field.label || field.name}>
|
||||
{field.type === 'date' ? (
|
||||
|
||||
Reference in New Issue
Block a user