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

This commit is contained in:
2026-05-09 09:04:20 +02:00
parent 3683fe9487
commit f4428afb9b
4 changed files with 181 additions and 100 deletions
+26 -3
View File
@@ -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' ? (