Files
hfb_sys/frontend/src/router/mobileHost.ts
T
yml2213 e241607535 支持号主与租客查看自己的发布/订单详情
新增卖家商品详情页;订单详情底部增加可折叠账号快照,已完成订单展示结账明细。
2026-07-16 20:47:33 +08:00

99 lines
3.1 KiB
TypeScript

import { isAdminPath } from '@/shared/utils/adminPath'
export function isMobileHost(hostname = window.location.hostname) {
return hostname === 'm.localhost' || hostname.startsWith('m.')
}
export function isMobileDevice() {
if (typeof window === 'undefined' || !window.navigator) return false
const ua = window.navigator.userAgent
const isMobileUA = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua)
const isSmallScreen = window.innerWidth < 768
return isMobileUA || isSmallScreen
}
export function getMobilePath(path: string): string {
if (path === '/' || path === '') {
return '/m'
}
if (path === '/m' || path.startsWith('/m/') || isAdminPath(path)) {
return path
}
if (path === '/listings' || path.startsWith('/listings/')) {
return `/m${path}`
}
if (path === '/mohong' || path.startsWith('/mohong/')) {
return `/m${path}`
}
if (path === '/orders' || path.startsWith('/orders/')) {
return `/m${path}`
}
if (path === '/realname') return '/m/realname'
if (path === '/notifications') return '/m/notifications'
if (path === '/login') return '/m/login'
if (path === '/register') return '/m/register'
if (path === '/seller/listings/create') {
return '/m/seller/listings/create'
}
if (path.startsWith('/seller/listings/') && path.endsWith('/edit')) {
return `/m${path}`
}
if (path === '/seller/listings' || path.startsWith('/seller/listings/')) {
return `/m${path}`
}
if (path === '/messages' || path.startsWith('/messages/')) {
return '/m/messages'
}
// PC-only views that don't have mobile counterparts go to mobile profile as fallback
if (path === '/wallet/withdrawal') return '/m/wallet/withdrawal'
if (path === '/wallet' || path.startsWith('/seller')) {
return '/m/profile'
}
return `/m${path}`
}
export function getPcPath(path: string): string {
if ((path !== '/m' && !path.startsWith('/m/')) || isAdminPath(path)) {
return path
}
if (path === '/m' || path === '/m/') {
return '/'
}
const subPath = path.substring(2)
if (subPath === '/listings' || subPath.startsWith('/listings/')) {
return subPath
}
if (subPath === '/mohong' || subPath.startsWith('/mohong/')) {
return subPath
}
if (subPath === '/orders' || subPath.startsWith('/orders/')) {
return subPath
}
if (subPath === '/login') return '/login'
if (subPath === '/register') return '/login' // PC uses /login for both auth actions
if (subPath === '/realname') return '/realname'
if (subPath === '/notifications') return '/notifications'
if (subPath === '/wallet/withdrawal') return '/wallet/withdrawal'
if (subPath === '/seller/listings/create') return '/seller/listings/create'
if (subPath.startsWith('/seller/listings/') && subPath.endsWith('/edit')) return subPath
if (subPath === '/seller/listings' || subPath.startsWith('/seller/listings/')) return subPath
if (subPath === '/messages') return '/messages'
if (subPath.startsWith('/chats/')) return '/messages/' + subPath.substring(7)
if (subPath === '/profile') return '/wallet'
return subPath || '/'
}
export function toMobilePath(path: string) {
return getMobilePath(path)
}