Port modular price, product, and PWA fixes into boursecu
Sync live quote handling, SSE product images, store hours, file URL normalization, PWA icon cache, TV monitor, about software, SuperAdmin menu gates, price alerts, and related UX from modular while preserving boursecu branding and config constraints. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+39
-6
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
</AConfigProvider>
|
||||
<div
|
||||
v-if="showSupportButton && !showSplash && route.name !== 'support'"
|
||||
v-if="showSupportButton && !showSplash && route.name !== 'support' && !isTvBoardRoute"
|
||||
id="support-button"
|
||||
ref="supportButtonEl"
|
||||
class="fixed z-[5100] cursor-grab select-none rounded-full"
|
||||
@@ -71,15 +71,19 @@
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="!showSplash && !isDesktop"
|
||||
v-if="!showSplash && !isDesktop && !isTvBoardRoute"
|
||||
class="app-credit-footer app-credit-footer--mobile"
|
||||
:class="{ 'app-credit-footer--login': isLoginRoute }"
|
||||
>
|
||||
<EnamadBadge v-if="isLoginRoute" size="sm" />
|
||||
<AppCreditLink variant="mobile" />
|
||||
</div>
|
||||
<div
|
||||
v-if="!showSplash && showDesktopFloatingCredit"
|
||||
v-if="!showSplash && showDesktopFloatingCredit && !isTvBoardRoute"
|
||||
class="app-credit-footer app-credit-footer--desktop-float"
|
||||
:class="{ 'app-credit-footer--login': isLoginRoute }"
|
||||
>
|
||||
<EnamadBadge v-if="isLoginRoute" size="sm" />
|
||||
<AppCreditLink variant="float" />
|
||||
</div>
|
||||
|
||||
@@ -93,7 +97,7 @@
|
||||
<VersionUpdateModal />
|
||||
|
||||
<PwaInstallBanner
|
||||
v-if="!showSplash"
|
||||
v-if="!showSplash && !isTvBoardRoute"
|
||||
:visible="bannerVisible && !guideOpen"
|
||||
@install="openGuide()"
|
||||
@dismiss="dismissBanner()"
|
||||
@@ -104,6 +108,8 @@
|
||||
:platform="platform"
|
||||
@complete="completeGuide()"
|
||||
/>
|
||||
|
||||
<GoldDayCalculatorModal />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
@@ -118,12 +124,14 @@ import { useSupportMessenger } from '@/composables/useSupportMessenger'
|
||||
import { loadSupportMessengerFromSettings } from '@/utils/supportMessenger'
|
||||
import { useDraggableFloatingButton } from '@/utils/useDraggableFloatingButton'
|
||||
import AppCreditLink from '@/components/AppCreditLink.vue'
|
||||
import EnamadBadge from '@/components/EnamadBadge.vue'
|
||||
import SupportMessengerPicker from '@/components/SupportMessengerPicker.vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { recoverMobileViewportAfterAuth } from '@/layouts/composables/useMobileScrollReset'
|
||||
import { usePwaInstall } from '@/composables/usePwaInstall'
|
||||
import PwaInstallBanner from '@/components/pwa/PwaInstallBanner.vue'
|
||||
import PwaInstallGuideModal from '@/components/pwa/PwaInstallGuideModal.vue'
|
||||
import GoldDayCalculatorModal from '@/components/GoldDayCalculatorModal.vue'
|
||||
import { useUserStore } from '@/store/userStore'
|
||||
import { useSettingsStore } from '@/store/settingsStore'
|
||||
import {
|
||||
@@ -149,9 +157,19 @@ const showDesktopFloatingCredit = computed(() => {
|
||||
if (!isDesktop.value) return false
|
||||
return route.name === 'login' || !!route.meta.hideMenu
|
||||
})
|
||||
const isLoginRoute = computed(() => route.name === 'login')
|
||||
|
||||
const config = useConfigStore()
|
||||
const showSplash = ref(true)
|
||||
|
||||
function isTvBoardPath() {
|
||||
const path = window.location.pathname.replace(/\/+$/, '')
|
||||
return path.endsWith('/tv') || path.endsWith('/monitor')
|
||||
}
|
||||
|
||||
const showSplash = ref(!isTvBoardPath())
|
||||
const isTvBoardRoute = computed(
|
||||
() => route.name === 'tvMonitor' || route.meta.hideChrome === true || isTvBoardPath(),
|
||||
)
|
||||
const popVisible = ref(false)
|
||||
|
||||
const {
|
||||
@@ -404,19 +422,34 @@ watch(latestIncomingNotification, (payload) => {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
min-height: var(--app-credit-bar-inner);
|
||||
padding-bottom: var(--app-safe-bottom);
|
||||
padding: 4px 0 var(--app-safe-bottom);
|
||||
background: #fff;
|
||||
box-shadow: 0 -2px 4px -2px #0000001a;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
.app-credit-footer--login.app-credit-footer--mobile {
|
||||
min-height: 72px;
|
||||
}
|
||||
|
||||
:root:has(.app-credit-footer--login) {
|
||||
--app-credit-bar-inner: 72px;
|
||||
}
|
||||
|
||||
.app-credit-footer--desktop-float {
|
||||
left: auto;
|
||||
right: 20px;
|
||||
bottom: 16px;
|
||||
width: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.app-credit-link {
|
||||
|
||||
Reference in New Issue
Block a user