feat(housekeeping): add per-hotel theme manager with import/export and background
CI / check (push) Failing after 20s
CI / preflight (push) Skipped
CI / deploy (push) Skipped

Theme Manager under /admin-next/hotel/theme-manager lets the owner save, apply, rename, delete, import, and export custom themes, plus set a custom site background by URL or upload. Themes are stored in WebsiteSetting/custom_themes JSON so they survive CMS updates.
This commit is contained in:
openhands committed 2026-09-16 19:45:57 +02:00
1 parent 55c13b533c
commit 5b4b275b2a
13 files changed
+1376 -1

No files matched your search

+49
View File
@@ -4772,6 +4772,55 @@
"title": "Hotel",
"description": "Stanze, radio e strumenti per gli asset",
"routes": {
"themeManager": {
"title": "Gestione temi",
"description": "Salva, attiva, importa, esporta e pubblica temi personalizzati per l'hotel (sopravvivono agli aggiornamenti)",
"currentThemeTitle": "Tema corrente",
"currentThemeHint": "La palette e lo sfondo attualmente mostrati ai tuoi visitatori.",
"saveLabel": "Salva tema",
"savePlaceholder": "Nome del tema (es. Oro estivo)",
"exportCurrent": "Esporta",
"savedThemesTitle": "Temi salvati",
"savedThemesHint": "Attiva un tema salvato in qualsiasi momento. I temi sono salvati nel database e restano attivi dopo gli aggiornamenti CMS.",
"noThemes": "Nessun tema salvato — salvane uno qui sopra.",
"active": "Attivo",
"apply": "Applica",
"export": "Esporta",
"rename": "Rinomina",
"renameSave": "OK",
"delete": "Elimina",
"deleteConfirm": "Eliminare il tema \"{name}\"?",
"importTitle": "Importa un tema",
"importHint": "Carica un file `.atom-theme.json` esportato qui, oppure un tema esportato dal Theme Builder.",
"importNameLabel": "Nome",
"importNamePlaceholder": "Sostituzione opzionale",
"importFileLabel": "File del tema",
"importApplyLabel": "Applica dopo l'importazione",
"importButton": "Importa",
"invalidFile": "Il file non è un tema JSON valido.",
"presetsTitle": "Preset di partenza",
"backgroundTitle": "Sfondo",
"backgroundHint": "Imposta un'immagine di sfondo personalizzata per il sito pubblico usando un URL o caricando un file.",
"backgroundPreviewLabel": "Anteprima",
"backgroundUrlLabel": "URL immagine",
"backgroundPositionLabel": "Posizione",
"backgroundSizeLabel": "Dimensione",
"backgroundRepeatLabel": "Ripetizione",
"applyBackground": "Applica sfondo",
"uploadButton": "Carica immagine…",
"clearBackground": "Rimuovi sfondo",
"notice": {
"saved": "Tema salvato.",
"applied": "Tema applicato.",
"renamed": "Tema rinominato.",
"deleted": "Tema eliminato.",
"imported": "Tema importato.",
"preset": "Preset applicato.",
"background": "Sfondo aggiornato.",
"importError": "Impossibile importare il file. Potrebbe essere troppo grande o non essere un'esportazione di un tema.",
"backgroundError": "Immagine non caricata. Usa PNG, JPEG, GIF o WebP fino a 10MB."
}
},
"nitroCleanup": {
"title": "Pulizia nitro",
"description": "Scansiona e rimuovi i file asset furni falsi, danneggiati o orfani"