feat: add mobile-responsive layout and card views across all pages
Build and Push Multi-Platform Images / build-and-push (push) Successful in 39s

- New useIsMobile hook and MobileCardList component
- AppLayout: hamburger menu + Drawer navigation on mobile
- All list pages (Inbox, Posteingang, Manuell, Mail, Freigabe, Zahlung, TaskLog)
  show card layout on mobile instead of tables
- CSS: responsive modal height, horizontal table scroll, text-size-adjust
- Backend: Agrarmonitor polling fixes, Zahlung service improvements,
  IMAP folder service extended, misc controller fixes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 09:22:58 +02:00
co-authored by Claude Sonnet 4.6
parent 0765d14d3b
commit 7076eef57b
28 changed files with 1081 additions and 462 deletions
@@ -181,7 +181,7 @@ export class PaperlessProcessorService {
doc.correspondent !== null && doc.correspondent !== undefined;
break;
case 2:
isFilled = !!doc.created || !!doc.created_date;
isFilled = !!doc.created;
break;
case 3:
isFilled =
@@ -155,7 +155,7 @@ export class PaperlessController {
asn: doc.archive_serial_number,
documentType: doc.document_type,
correspondent: doc.correspondent,
created: doc.created_date,
created: doc.created,
added: doc.added,
tags: doc.tags,
customFields: doc.custom_fields,
@@ -179,7 +179,7 @@ export class PaperlessController {
asn: doc.archive_serial_number,
documentType: doc.document_type,
correspondent: doc.correspondent,
created: doc.created_date,
created: doc.created,
added: doc.added,
tags: doc.tags,
customFields: doc.custom_fields,
@@ -338,7 +338,7 @@ export class PaperlessController {
docDate.getHours() * 60 * 60 * 1000,
);
}
oldDocument.created_date = docDate.toISOString().split('T')[0];
oldDocument.created = docDate.toISOString();
}
const cfDefinitions = await this.paperlessService.getCustomFields();
@@ -390,7 +390,7 @@ export class PaperlessController {
for (const req of reqs) {
let isFieldValid = false;
if (req.Type === 1) isFieldValid = oldDocument.correspondent !== null;
if (req.Type === 2) isFieldValid = oldDocument.created_date !== null;
if (req.Type === 2) isFieldValid = oldDocument.created !== null;
if (req.Type === 3)
isFieldValid = oldDocument.archive_serial_number !== null;
if (req.Type === 4)
@@ -446,10 +446,8 @@ export class PaperlessController {
);
}
}
titleTemplate = titleTemplate.replace(
'{{DATE}}',
oldDocument.created_date,
);
const createdDatePart = String(oldDocument.created ?? '').split('T')[0];
titleTemplate = titleTemplate.replace('{{DATE}}', createdDatePart);
oldDocument.title = titleTemplate;
}
} else {
@@ -471,6 +469,9 @@ export class PaperlessController {
}
}
// Veraltetes Feld nicht mit-PATCHen (löst Paperless-Deprecation-Warnung aus)
delete oldDocument.created_date;
await this.paperlessService.updateDocument(documentId, oldDocument);
return { success: true };
}