diff --git a/frontend/src/views/AppLayout.vue b/frontend/src/views/AppLayout.vue
index 04a81235..cbd5bedd 100644
--- a/frontend/src/views/AppLayout.vue
+++ b/frontend/src/views/AppLayout.vue
@@ -40,9 +40,9 @@
Floor map
-
Upload your facility blueprint (light and dark), and set its native pixel size.
+
Upload your facility blueprint (light and dark) for the default level, and set its native pixel size. Additional levels can be added later in Settings.
@@ -203,14 +206,24 @@ const blueprintLight = ref('')
const blueprintDark = ref('')
const logoUploading = ref(false)
const siteLogo = ref('')
+// A file input shows the chosen name in the browser chrome, which the kiosk-
+// style full-screen wizard hides, so the operator had no confirmation that the
+// file they picked was the one being uploaded.
+const logoFilename = ref('')
+const blueprintLightFilename = ref('')
+const blueprintDarkFilename = ref('')
async function uploadSiteLogo(event) {
const file = event.target.files[0]
if (!file) return
+ logoFilename.value = file.name
logoUploading.value = true
try {
const { data } = await settingsApi.uploadBrandingLogo('site', file)
- siteLogo.value = data?.data?.value || ''
+ // Same path every time, so without a cache-buster the preview shows the
+ // PREVIOUS logo and the upload reads as having silently failed. Display
+ // only - nothing persists this value.
+ siteLogo.value = data?.data?.value ? `${data.data.value}?t=${Date.now()}` : ''
toast.success('Logo uploaded')
} catch (err) {
toast.error(apiError(err, 'Upload failed'))
@@ -223,10 +236,12 @@ async function uploadSiteLogo(event) {
async function uploadBlueprint(theme, event) {
const file = event.target.files[0]
if (!file) return
+ if (theme === 'light') blueprintLightFilename.value = file.name
+ else blueprintDarkFilename.value = file.name
mapUploading.value = true
try {
const { data } = await settingsApi.uploadMapBlueprint(theme, file)
- const url = data?.data?.value
+ const url = data?.data?.value ? `${data.data.value}?t=${Date.now()}` : ''
if (theme === 'light') blueprintLight.value = url
else blueprintDark.value = url
toast.success('Blueprint uploaded')
@@ -307,6 +322,17 @@ onMounted(async () => {
} catch (err) { /* not set yet */ }
}
}
+ // Show whatever logo the site is already on, so re-running the wizard does
+ // not present an empty slot as if branding had never been set. Stored as a
+ // root-absolute path; the template applies withBase, so do NOT prefix here or
+ // a subpath mount gets it twice (/shopdb/shopdb/...).
+ const SHIPPED_LOGO = '/ge-aerospace-logo.svg'
+ try {
+ const response = await settingsApi.get('site_logo')
+ siteLogo.value = response.data?.data?.value || SHIPPED_LOGO
+ } catch (err) {
+ siteLogo.value = SHIPPED_LOGO
+ }
})
async function saveStep() {