fix(tabBar): 修正“订单”页改为非tabBar页面的导航链接
- 将原来 switchTab 跳转“订单”页改为 navigateTo,以适配非 tabBar 页面 - 统一更新多个文件中关于订单页的跳转方式共计 6 处 - 更新 tabBar 配置,从包含“订单”页改为实际的四个 tabBar 页面 - 修正 isTabBarUrl 相关判断,去除不存在或非 tabBar 路径 - 调整多个 tabBar 判断列表,保证逻辑一致性与正确性 - 修改购物车页图片压缩宽度加入限制,优化资源加载 - 更新订单列表页注释,去除“tabBar 页”描述 - 备注遗留问题,部分积分页跳转仍用错误方式,待进一步修复
This commit is contained in:
@@ -330,3 +330,18 @@
|
|||||||
- `src/pages/store/center/index.tsx:218`:数字角标(20x20/11px/加粗)→ `<Badge count={getBadgeCount(card.key)} className='absolute -top-1 -right-1' size={20} fontSize={11} fontWeight='bold' />`
|
- `src/pages/store/center/index.tsx:218`:数字角标(20x20/11px/加粗)→ `<Badge count={getBadgeCount(card.key)} className='absolute -top-1 -right-1' size={20} fontSize={11} fontWeight='bold' />`
|
||||||
- 简化了外层判断:`card.showBadge && getBadgeCount > 0` → `card.showBadge`(Badge 内部已处理 0 不渲染)
|
- 简化了外层判断:`card.showBadge && getBadgeCount > 0` → `card.showBadge`(Badge 内部已处理 0 不渲染)
|
||||||
- 项目内联角标已全部统一为 Badge 组件,共 3 处(user.tsx / index/index.tsx / store/center/index.tsx)
|
- 项目内联角标已全部统一为 Badge 组件,共 3 处(user.tsx / index/index.tsx / store/center/index.tsx)
|
||||||
|
|
||||||
|
## tabBar「订单」换「购物车」后的链接修正(2026-07-15 23:31)
|
||||||
|
- 背景:tabBar 原「订单」(pages/order/list) 改为「购物车」(pages/shop/cart),order/list 不再是 tabBar 页
|
||||||
|
- A. 6 处 `switchTab(order/list)` → `navigateTo`(switchTab 只能跳 tabBar 页,否则失败):
|
||||||
|
- pages/shop/checkout.tsx:304(下单成功跳订单列表)
|
||||||
|
- pages/user/user.tsx:144,149(handleOrderTabClick / handleViewAllOrders)
|
||||||
|
- pages/user/index.tsx:158,175,190(订单概览数/全部订单/订单状态快捷入口)
|
||||||
|
- B. 4 处 tabBar 判断列表更新为实际 4 个 tabBar(index/shop/shop-cart/user):
|
||||||
|
- pages/user/index.tsx:11、pages/index/index.tsx:185(tabBarPages)
|
||||||
|
- passport/login.tsx(tabBarUrls,顺带去掉非 tabBar 的 points/index)
|
||||||
|
- passport/auth-flow.ts:12(TABBAR_URLS,原含错误路径 order/order)
|
||||||
|
- C. 2 处 isTabBarUrl 修正(原路径 cart/cart、category/index 不存在):
|
||||||
|
- passport/register.tsx:88、passport/sms-login.tsx:36
|
||||||
|
- D. pages/order/list.tsx:127 注释更新(去掉"tabBar 页"描述)
|
||||||
|
- 遗留(未改,预先存在):pages/user/index.tsx:140 `switchTab(points/index)` 积分页非 tabBar,会失败
|
||||||
|
|||||||
@@ -91,3 +91,9 @@
|
|||||||
- 建表 SQL:`/Users/gxwebsoft/JAVA/guilixu-java/sql/shop_goods_browse.sql`
|
- 建表 SQL:`/Users/gxwebsoft/JAVA/guilixu-java/sql/shop_goods_browse.sql`
|
||||||
- 后台管理前端:`/Users/gxwebsoft/VUE/guilixu-admin`(Vue3 + Ant Design Vue + Vite,非 RuoYi)
|
- 后台管理前端:`/Users/gxwebsoft/VUE/guilixu-admin`(Vue3 + Ant Design Vue + Vite,非 RuoYi)
|
||||||
- 注意:`BaseController.success()` 有 `success(IPage<T>)` 重载,泛型方法返回类型用 `ApiResult<?>` 而非 `ApiResult<PageResult<T>>`(否则 fail() 分支类型不兼容)
|
- 注意:`BaseController.success()` 有 `success(IPage<T>)` 重载,泛型方法返回类型用 `ApiResult<?>` 而非 `ApiResult<PageResult<T>>`(否则 fail() 分支类型不兼容)
|
||||||
|
|
||||||
|
## tabBar 配置(2026-07-15)
|
||||||
|
- 当前 4 个 tabBar:`/pages/index/index`(首页)、`/pages/shop/index`(分类)、`/pages/shop/cart`(购物车)、`/pages/user/user`(我的)
|
||||||
|
- 「订单」(pages/order/list) 已从 tabBar 移除,改为普通页,所有进入订单列表的地方用 `navigateTo` 而非 `switchTab`
|
||||||
|
- 多处 tabBar 判断列表(login/register/sms-login/auth-flow/user/index/index/index)已统一为实际 4 个 tabBar 路径
|
||||||
|
- ⚠️ pages/user/index.tsx:140 仍用 `switchTab(points/index)`,积分页非 tabBar,待修
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ const IndexPage: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// tabBar 页面列表
|
// tabBar 页面列表
|
||||||
const tabBarPages = ['/pages/index/index', '/pages/shop/index', '/pages/order/list', '/pages/user/user']
|
const tabBarPages = ['/pages/index/index', '/pages/shop/index', '/pages/shop/cart', '/pages/user/user']
|
||||||
|
|
||||||
const handleFeatureClick = (url: string) => {
|
const handleFeatureClick = (url: string) => {
|
||||||
if (tabBarPages.includes(url)) {
|
if (tabBarPages.includes(url)) {
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ const OrderListPage: React.FC = () => {
|
|||||||
}
|
}
|
||||||
}, [tabIndex, isLoggedIn, user?.userId])
|
}, [tabIndex, isLoggedIn, user?.userId])
|
||||||
|
|
||||||
// 页面每次显示时刷新数据(tabBar 页 switchTab 不会重新挂载组件)
|
// 页面每次显示时刷新数据(覆盖从订单详情页返回等再次显示场景)
|
||||||
const isFirstShow = useRef(true)
|
const isFirstShow = useRef(true)
|
||||||
Taro.useDidShow(() => {
|
Taro.useDidShow(() => {
|
||||||
// 首次显示由 useEffect 处理,跳过
|
// 首次显示由 useEffect 处理,跳过
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ const CartPage: React.FC = () => {
|
|||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
className='w-full rounded-md bg-gray-100'
|
className='w-full rounded-md bg-gray-100'
|
||||||
src={getCompressedImageUrl(goods.image || '')}
|
src={getCompressedImageUrl(goods.image || '', { width: 90 })}
|
||||||
mode='aspectFill'
|
mode='aspectFill'
|
||||||
style={{ height: '90px' }}
|
style={{ height: '90px' }}
|
||||||
/>
|
/>
|
||||||
@@ -179,7 +179,7 @@ const CartPage: React.FC = () => {
|
|||||||
</View>
|
</View>
|
||||||
<Image
|
<Image
|
||||||
className="w-20 h-20 rounded-md bg-gray-100 flex-shrink-0"
|
className="w-20 h-20 rounded-md bg-gray-100 flex-shrink-0"
|
||||||
src={getCompressedImageUrl(item.goodsImage || item.product?.image || (item.sku as any)?.image || '')}
|
src={getCompressedImageUrl(item.goodsImage || item.product?.image || (item.sku as any)?.image || '',{ width: 90 })}
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
/>
|
/>
|
||||||
<View className="flex-1 flex flex-col justify-between">
|
<View className="flex-1 flex flex-col justify-between">
|
||||||
@@ -231,7 +231,7 @@ const CartPage: React.FC = () => {
|
|||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
className="w-full rounded-md bg-gray-100"
|
className="w-full rounded-md bg-gray-100"
|
||||||
src={getCompressedImageUrl(goods.image || '')}
|
src={getCompressedImageUrl(goods.image || '',{ width: 90 })}
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
style={{ height: '90px' }}
|
style={{ height: '90px' }}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ const CheckoutPage: React.FC = () => {
|
|||||||
// 显示成功提示
|
// 显示成功提示
|
||||||
Taro.showToast({ title: '订单已提交', icon: 'success' })
|
Taro.showToast({ title: '订单已提交', icon: 'success' })
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
Taro.switchTab({ url: '/pages/order/list' })
|
Taro.navigateTo({ url: '/pages/order/list' })
|
||||||
}, 1500)
|
}, 1500)
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
const message = err.message || '提交失败'
|
const message = err.message || '提交失败'
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const UserPage: React.FC = () => {
|
|||||||
const { user, isLoggedIn } = useUser()
|
const { user, isLoggedIn } = useUser()
|
||||||
|
|
||||||
// TabBar 页面列表
|
// TabBar 页面列表
|
||||||
const tabBarPages = ['/pages/index/index', '/pages/shop/index', '/pages/order/list', '/pages/user/user']
|
const tabBarPages = ['/pages/index/index', '/pages/shop/index', '/pages/shop/cart', '/pages/user/user']
|
||||||
|
|
||||||
const handleNavigate = (url: string) => {
|
const handleNavigate = (url: string) => {
|
||||||
if (tabBarPages.includes(url)) {
|
if (tabBarPages.includes(url)) {
|
||||||
@@ -155,7 +155,7 @@ const UserPage: React.FC = () => {
|
|||||||
</View>
|
</View>
|
||||||
<View
|
<View
|
||||||
className='text-center py-2 rounded-lg'
|
className='text-center py-2 rounded-lg'
|
||||||
onClick={() => Taro.switchTab({ url: '/pages/order/list' })}
|
onClick={() => Taro.navigateTo({ url: '/pages/order/list' })}
|
||||||
>
|
>
|
||||||
<Text className='text-xl font-bold text-transparent' style={{ background: 'linear-gradient(135deg, #4facfe, #00f2fe)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent' }}>
|
<Text className='text-xl font-bold text-transparent' style={{ background: 'linear-gradient(135deg, #4facfe, #00f2fe)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent' }}>
|
||||||
0
|
0
|
||||||
@@ -172,7 +172,7 @@ const UserPage: React.FC = () => {
|
|||||||
<View className='bg-white rounded-xl mx-3 mt-3 p-4' style={{ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.05)' }}>
|
<View className='bg-white rounded-xl mx-3 mt-3 p-4' style={{ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.05)' }}>
|
||||||
<View className='flex justify-between items-center mb-3'>
|
<View className='flex justify-between items-center mb-3'>
|
||||||
<Text className='text-base font-medium text-gray-800'>我的订单</Text>
|
<Text className='text-base font-medium text-gray-800'>我的订单</Text>
|
||||||
<Text className='text-xs text-gray-400' onClick={() => Taro.switchTab({ url: '/pages/order/list' })}>
|
<Text className='text-xs text-gray-400' onClick={() => Taro.navigateTo({ url: '/pages/order/list' })}>
|
||||||
全部订单 {'>'}
|
全部订单 {'>'}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
@@ -187,7 +187,7 @@ const UserPage: React.FC = () => {
|
|||||||
key={item.status}
|
key={item.status}
|
||||||
className='flex flex-col items-center py-2 rounded-lg'
|
className='flex flex-col items-center py-2 rounded-lg'
|
||||||
style={{ background: `${item.color}10` }}
|
style={{ background: `${item.color}10` }}
|
||||||
onClick={() => { Taro.setStorageSync('order_tab', item.status); Taro.switchTab({ url: '/pages/order/list' }) }}
|
onClick={() => { Taro.setStorageSync('order_tab', item.status); Taro.navigateTo({ url: '/pages/order/list' }) }}
|
||||||
>
|
>
|
||||||
<Text className='text-xl mb-1'>{item.icon}</Text>
|
<Text className='text-xl mb-1'>{item.icon}</Text>
|
||||||
<Text className='text-xs text-gray-600'>{item.label}</Text>
|
<Text className='text-xs text-gray-600'>{item.label}</Text>
|
||||||
|
|||||||
@@ -141,12 +141,12 @@ const UserPage: React.FC = () => {
|
|||||||
const handleOrderTabClick = (status: number) => {
|
const handleOrderTabClick = (status: number) => {
|
||||||
if (!requireLogin({ action: 'viewOrder', redirect: '/pages/order/list', content: '登录后才能查看订单,是否前往登录?' })) return
|
if (!requireLogin({ action: 'viewOrder', redirect: '/pages/order/list', content: '登录后才能查看订单,是否前往登录?' })) return
|
||||||
Taro.setStorageSync('order_tab', status)
|
Taro.setStorageSync('order_tab', status)
|
||||||
Taro.switchTab({ url: '/pages/order/list' })
|
Taro.navigateTo({ url: '/pages/order/list' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleViewAllOrders = () => {
|
const handleViewAllOrders = () => {
|
||||||
if (!requireLogin({ action: 'viewOrder', redirect: '/pages/order/list', content: '登录后才能查看订单,是否前往登录?' })) return
|
if (!requireLogin({ action: 'viewOrder', redirect: '/pages/order/list', content: '登录后才能查看订单,是否前往登录?' })) return
|
||||||
Taro.switchTab({ url: '/pages/order/list' })
|
Taro.navigateTo({ url: '/pages/order/list' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const loading = cardStatsLoading || orderStatsLoading
|
const loading = cardStatsLoading || orderStatsLoading
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {
|
|||||||
trackInviteSource,
|
trackInviteSource,
|
||||||
} from '@/utils/invite'
|
} from '@/utils/invite'
|
||||||
|
|
||||||
const TABBAR_URLS = ['/pages/index/index', '/pages/order/order', '/pages/user/user']
|
const TABBAR_URLS = ['/pages/index/index', '/pages/shop/index', '/pages/shop/cart', '/pages/user/user']
|
||||||
|
|
||||||
export function decodeRedirect(input?: string): string {
|
export function decodeRedirect(input?: string): string {
|
||||||
if (!input) return ''
|
if (!input) return ''
|
||||||
|
|||||||
@@ -144,9 +144,8 @@ const Login = () => {
|
|||||||
const tabBarUrls = [
|
const tabBarUrls = [
|
||||||
'/pages/index/index',
|
'/pages/index/index',
|
||||||
'/pages/shop/index',
|
'/pages/shop/index',
|
||||||
'/pages/points/index',
|
|
||||||
'/pages/user/user',
|
'/pages/user/user',
|
||||||
'/pages/order/list',
|
'/pages/shop/cart',
|
||||||
]
|
]
|
||||||
const pure = redirectUrl.split('?')[0]
|
const pure = redirectUrl.split('?')[0]
|
||||||
|
|
||||||
|
|||||||
@@ -89,9 +89,9 @@ function isTabBarUrl(url: string) {
|
|||||||
const pure = url.split('?')[0]
|
const pure = url.split('?')[0]
|
||||||
return (
|
return (
|
||||||
pure === '/pages/index/index' ||
|
pure === '/pages/index/index' ||
|
||||||
pure === '/pages/cart/cart' ||
|
pure === '/pages/shop/index' ||
|
||||||
pure === '/pages/user/user' ||
|
pure === '/pages/shop/cart' ||
|
||||||
pure === '/pages/category/index'
|
pure === '/pages/user/user'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ const SmsLogin = () => {
|
|||||||
const pure = url.split('?')[0]
|
const pure = url.split('?')[0]
|
||||||
return (
|
return (
|
||||||
pure === '/pages/index/index' ||
|
pure === '/pages/index/index' ||
|
||||||
pure === '/pages/cart/cart' ||
|
pure === '/pages/shop/index' ||
|
||||||
pure === '/pages/user/user' ||
|
pure === '/pages/shop/cart' ||
|
||||||
pure === '/pages/category/index'
|
pure === '/pages/user/user'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user