You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Global-sales/src/views/MobileApp.jsx

130 lines
3.9 KiB
React

import { useEffect } from 'react'
import '@/assets/App.css'
import AppLogo from '@/assets/highlights_travel_300_300.png'
import { useThemeContext } from '@/stores/ThemeContext'
import useAuthStore from '@/stores/AuthStore'
import { Layout, theme, Space, Avatar, Dropdown, Flex } from 'antd'
import { DownOutlined } from '@ant-design/icons'
import { NavLink, Outlet, Link } from 'react-router-dom'
import ReloadPrompt from './ReloadPrompt'
import ClearCache from './ClearCache'
import useStyleStore from '@/stores/StyleStore';
import { BUILD_VERSION } from '@/config'
const { Header, Content } = Layout
function MobileApp() {
const { colorPrimary } = useThemeContext()
const loginUser = useAuthStore((state) => state.loginUser)
const {
token: { colorBgContainer },
} = theme.useToken()
const [setMobile] = useStyleStore((state) => [state.setMobile]);
useEffect(() => {
setMobile(true);
const handleLoad = () => {
const isPWAInstalled =
window.matchMedia('(display-mode: window-controls-overlay)').matches ||
window.matchMedia('(display-mode: standalone)').matches
const isStandalone = navigator.standalone || window.navigator.standalone
if (isPWAInstalled || isStandalone) {
document.getElementById('install-button').disabled = true
} else {
document.getElementById('about-dialog').showModal()
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault()
document
.getElementById('about-dialog')
.addEventListener('close', () => {
if (
document.getElementById('about-dialog').returnValue ===
'install'
) {
e.prompt()
}
})
})
}
}
window.addEventListener('load', handleLoad)
return () => window.removeEventListener('load', handleLoad)
}, [])
return (
<Layout>
<Header
className="header px-2"
style={{
position: 'sticky',
top: 0,
zIndex: 1,
width: '100%',
background: 'white',
}}
>
<Flex justify={'space-between'}>
<NavLink to="/">
<img src={AppLogo} className="logo" alt="App logo" />
{!('Notification' in window) && <span>🔕</span>}
</NavLink>
<ReloadPrompt />
<Dropdown
menu={{
items: [
{ label: <ReloadPrompt force />, key: 'reload' },
{ type: 'divider' },
{ label: <ClearCache />, key: 'clearcache' },
{ type: 'divider' },
{ label: <Link to="/p/dingding/logout">退出</Link>, key: '3' },
{ type: 'divider' },
{ label: <>v{BUILD_VERSION}</>, key: 'BUILD_VERSION' },
],
}}
trigger={['click']}
>
<a
onClick={(e) => e.preventDefault()}
style={{ color: colorPrimary }}
>
<Space>
<Avatar src={loginUser.avatarUrl}>
{loginUser?.username?.substring(1)}
</Avatar>
{loginUser.username}
<DownOutlined />
</Space>
</a>
</Dropdown>
</Flex>
{/* <Row gutter={{ md: 24 }} align='middle'>
<Col flex="auto" style={{ color: "white", marginBottom: "0", display: "flex", justifyContent: "center" }}>
</Col>
</Row> */}
</Header>
<Layout>
<Content
style={{
padding: 0,
margin: 0,
minHeight: 200,
background: colorBgContainer,
}}
>
<Outlet />
</Content>
</Layout>
{/* <Footer>桂林海纳国际旅行社有限公司</Footer> */}
</Layout>
)
}
export default MobileApp