fix: 愈心魔方顶栏 logo 移至页面外层 nav-bar(202608278)
弃用 web-view 内 cover 层,改为 yxg-nav-bar + web-view 兄弟结构; logo 使用包内静态图,H5 参数 nh=1&sbh=4。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+88
-47
@@ -1,70 +1,91 @@
|
||||
<template>
|
||||
<view class="yxg-page">
|
||||
<web-view class="yxg-webview" :src="h5Url" />
|
||||
<cover-view class="yxg-cover" :style="coverStyle">
|
||||
<cover-image class="yxg-cover-logo" :src="logoSrc" :style="logoStyle" />
|
||||
</cover-view>
|
||||
<view class="yxg-nav-bar" :style="navBarStyle">
|
||||
<view class="yxg-nav-row" :style="navRowStyle">
|
||||
<image
|
||||
class="yxg-nav-logo"
|
||||
:style="logoStyle"
|
||||
:src="YXG_MP_LOGO_URL"
|
||||
mode="aspectFit"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
<web-view
|
||||
class="yxg-webview"
|
||||
:style="webviewStyle"
|
||||
:src="h5Url"
|
||||
@load="onWebLoad"
|
||||
@error="onWebError"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { YXG_H5_BASE, YXG_H5_VERSION, YXG_H5_LOGO_URL } from '@/util/yxgConfig.js'
|
||||
import { computed } from 'vue'
|
||||
import { YXG_H5_BASE, YXG_H5_VERSION, YXG_MP_LOGO_URL } from '@/util/yxgConfig.js'
|
||||
|
||||
const sys = uni.getSystemInfoSync()
|
||||
const statusBarH = sys.statusBarHeight || 0
|
||||
const screenW = sys.windowWidth || 375
|
||||
function readWindow() {
|
||||
// #ifdef MP-WEIXIN
|
||||
if (typeof wx !== 'undefined' && wx.getWindowInfo) {
|
||||
return wx.getWindowInfo()
|
||||
}
|
||||
// #endif
|
||||
return uni.getSystemInfoSync()
|
||||
}
|
||||
|
||||
const win = readWindow()
|
||||
const statusBarH = win.statusBarHeight || 0
|
||||
const windowH = win.windowHeight || win.screenHeight || 667
|
||||
const screenW = win.windowWidth || win.screenWidth || 375
|
||||
let navBarH = 44
|
||||
let menuH = 32
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
try {
|
||||
const menu = uni.getMenuButtonBoundingClientRect()
|
||||
if (menu?.height) {
|
||||
navBarH = (menu.top - statusBarH) * 2 + menu.height
|
||||
menuH = menu.height
|
||||
}
|
||||
} catch (_) {}
|
||||
} catch (e) {
|
||||
console.warn('[yxg-magic] menuButton rect failed', e)
|
||||
}
|
||||
// #endif
|
||||
|
||||
const headH = statusBarH + navBarH
|
||||
const logoW = Math.min(148, Math.floor(screenW * 0.48))
|
||||
const logoH = 36
|
||||
const logoLeft = Math.floor((screenW - logoW) / 2)
|
||||
const logoTop = statusBarH + Math.floor((navBarH - logoH) / 2)
|
||||
const webviewH = windowH - headH
|
||||
const logoH = Math.min(menuH, 30)
|
||||
const logoW = Math.min(Math.round((logoH * 598) / 130), Math.floor(screenW * 0.4))
|
||||
|
||||
const logoSrc = ref(YXG_H5_LOGO_URL)
|
||||
|
||||
onMounted(() => {
|
||||
uni.downloadFile({
|
||||
url: YXG_H5_LOGO_URL,
|
||||
success(res) {
|
||||
if (res.statusCode === 200 && res.tempFilePath) {
|
||||
logoSrc.value = res.tempFilePath
|
||||
}
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
const coverStyle = {
|
||||
position: 'fixed',
|
||||
top: '0',
|
||||
left: '0',
|
||||
width: '100%',
|
||||
height: `${headH}px`,
|
||||
backgroundColor: '#ffd1c7',
|
||||
zIndex: '9999',
|
||||
}
|
||||
|
||||
const logoStyle = {
|
||||
position: 'absolute',
|
||||
left: `${logoLeft}px`,
|
||||
top: `${logoTop}px`,
|
||||
width: `${logoW}px`,
|
||||
height: `${logoH}px`,
|
||||
}
|
||||
const navBarStyle = `height:${headH}px;padding-top:${statusBarH}px;`
|
||||
const navRowStyle = `height:${navBarH}px;`
|
||||
const logoStyle = `width:${logoW}px;height:${logoH}px;`
|
||||
const webviewStyle = `height:${webviewH}px;`
|
||||
|
||||
const h5Url = computed(
|
||||
() => `${YXG_H5_BASE}?mp=1&nh=1&v=${YXG_H5_VERSION}`,
|
||||
() =>
|
||||
`${YXG_H5_BASE}?mp=1&nh=1&sbh=4&v=${YXG_H5_VERSION}#wechat_redirect`,
|
||||
)
|
||||
|
||||
function onWebLoad(e) {
|
||||
console.log('[yxg-magic] web-view load', e?.detail || e)
|
||||
}
|
||||
|
||||
function onWebError(e) {
|
||||
console.error('[yxg-magic] web-view error', e?.detail || e)
|
||||
uni.showToast({
|
||||
title: 'H5加载失败,请检查业务域名',
|
||||
icon: 'none',
|
||||
duration: 3000,
|
||||
})
|
||||
}
|
||||
|
||||
console.log('[yxg-magic] nav-bar + web-view', {
|
||||
headH,
|
||||
webviewH,
|
||||
logoW,
|
||||
logoH,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@@ -78,10 +99,30 @@ page {
|
||||
.yxg-page {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: #ffd1c7;
|
||||
}
|
||||
.yxg-webview {
|
||||
|
||||
.yxg-nav-bar {
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
background-color: #ffd1c7;
|
||||
}
|
||||
|
||||
.yxg-nav-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.yxg-nav-logo {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.yxg-webview {
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user