dashboard: resolve employee names from directory/user, GE monogram photo fallback, kiosk sweep + label

- notifications shopfloor feed: resolve the employee name live when the stored
  value is a bare SSO (WJ notifications imported as SSOs, never converted), for
  both single and split-per-employee cards
- employee name resolver: after a directory miss, fall back to the shopdb User
  account (firstname/lastname, keyed by SSO username) so users from other
  locations still show a name
- shopfloor dashboard: employee photo falls back to the GE monogram (own asset,
  independent of the site_logo setting) with a loop-guarded onerror; recognition
  + recert tiles both covered
- shopfloor dashboard: 'All Business Units' filter label -> 'All Locations'
- geenforce display dispatcher: startup sweep also matches the imaging
  installers' 'GE Aerospace Dashboard/Lobby' shortcuts by name
This commit is contained in:
cproudlock
2026-07-28 18:21:47 -04:00
parent 3a8df166cf
commit 9a2d0ccebb
4 changed files with 63 additions and 25 deletions

View File

@@ -14,7 +14,7 @@
<div class="header-right">
<div class="clock">{{ currentTime }}</div>
<select v-model="businessUnit" class="filter-select" @change="loadData">
<option value="">All Business Units</option>
<option value="">All Locations</option>
<option v-for="bu in businessUnits" :key="bu.businessunitid" :value="bu.businessunitid">
{{ bu.businessunit }}
</option>
@@ -55,8 +55,8 @@
/>
<img
v-else
:src="siteLogo"
alt="Site logo"
:src="employeePhotoFallback"
alt="No photo"
class="recognition-photo ge-logo-fallback"
/>
</div>
@@ -99,8 +99,8 @@
/>
<img
v-else
:src="siteLogo"
alt="Site logo"
:src="employeePhotoFallback"
alt="No photo"
class="recert-photo ge-logo-fallback"
/>
<div class="recert-name">{{ rec.employeename || rec.employeesso }}</div>
@@ -193,6 +193,10 @@ import { withBase } from '@/utils/basePath'
const loading = ref(true)
const facilityName = ref('ShopDB')
const siteLogo = ref(withBase('/ge-aerospace-logo.svg'))
// Employee photo placeholder: the shipped GE monogram (square avatar). Kept
// separate from siteLogo so a blank/broken site_logo setting never leaves an
// employee tile with no image.
const employeePhotoFallback = ref(withBase('/ge-monogram.svg'))
// ServiceNow ticket-link config; loaded on mount. Empty/disabled = plain text.
const servicenowConfig = ref({ enabled: true, incidentUrl: '', changeUrl: '' })
const businessUnit = ref('')
@@ -436,7 +440,11 @@ function getTicketUrl(ticketnumber) {
}
function handlePhotoError(e) {
e.target.src = siteLogo.value
// Photo URL 404'd (e.g. no photo file for this SSO): fall back to the GE
// monogram. Guard against a loop if the fallback itself fails to load.
if (e.target.dataset.fellback) { return }
e.target.dataset.fellback = '1'
e.target.src = employeePhotoFallback.value
e.target.classList.add('ge-logo-fallback')
}
</script>