Add print badges, pagination, route splitting, JWT auth fixes, and list page alignment

- Fix equipment badge barcode not rendering (loading race condition)
- Fix printer QR code not rendering on initial load (same race condition)
- Add model image to equipment badge via imageurl from Model table
- Fix white-on-white machine number text on badge, tighten barcode spacing
- Add PaginationBar component used across all list pages
- Split monolithic router into per-plugin route modules
- Fix 25 GET API endpoints returning 401 (jwt_required -> optional=True)
- Align list page columns across Equipment, PCs, and Network pages
- Add print views: EquipmentBadge, PrinterQRSingle, PrinterQRBatch, USBLabelBatch
- Add PC Relationships report, migration docs, and CLAUDE.md project guide
- Various plugin model, API, and frontend refinements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-02-04 07:32:44 -05:00
parent c4bfdc2db2
commit 9efdb5f52d
89 changed files with 3951 additions and 1138 deletions

View File

@@ -23,7 +23,7 @@ def get_pagination_params(req=None) -> Tuple[int, int]:
page = 1
try:
per_page = int(req.args.get('per_page', default_size))
per_page = int(req.args.get('perpage', req.args.get('per_page', default_size)))
per_page = max(1, min(per_page, max_size))
except (TypeError, ValueError):
per_page = default_size

View File

@@ -44,7 +44,7 @@ def api_response(
'status': status,
'meta': {
'timestamp': datetime.utcnow().isoformat() + 'Z',
'request_id': str(uuid.uuid4())[:8],
'requestid': str(uuid.uuid4())[:8],
**(meta or {})
}
}
@@ -161,11 +161,11 @@ def paginated_response(
meta={
'pagination': {
'page': page,
'per_page': per_page,
'perpage': per_page,
'total': total,
'total_pages': total_pages,
'has_next': page < total_pages,
'has_prev': page > 1
'totalpages': total_pages,
'hasnext': page < total_pages,
'hasprev': page > 1
}
}
)