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' />`
|
||||
- 简化了外层判断:`card.showBadge && getBadgeCount > 0` → `card.showBadge`(Badge 内部已处理 0 不渲染)
|
||||
- 项目内联角标已全部统一为 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`
|
||||
- 后台管理前端:`/Users/gxwebsoft/VUE/guilixu-admin`(Vue3 + Ant Design Vue + Vite,非 RuoYi)
|
||||
- 注意:`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 页面列表
|
||||
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) => {
|
||||
if (tabBarPages.includes(url)) {
|
||||
|
||||
@@ -124,7 +124,7 @@ const OrderListPage: React.FC = () => {
|
||||
}
|
||||
}, [tabIndex, isLoggedIn, user?.userId])
|
||||
|
||||
// 页面每次显示时刷新数据(tabBar 页 switchTab 不会重新挂载组件)
|
||||
// 页面每次显示时刷新数据(覆盖从订单详情页返回等再次显示场景)
|
||||
const isFirstShow = useRef(true)
|
||||
Taro.useDidShow(() => {
|
||||
// 首次显示由 useEffect 处理,跳过
|
||||
|
||||
@@ -112,7 +112,7 @@ const CartPage: React.FC = () => {
|
||||
>
|
||||
<Image
|
||||
className='w-full rounded-md bg-gray-100'
|
||||
src={getCompressedImageUrl(goods.image || '')}
|
||||
src={getCompressedImageUrl(goods.image || '', { width: 90 })}
|
||||
mode='aspectFill'
|
||||
style={{ height: '90px' }}
|
||||
/>
|
||||
@@ -179,7 +179,7 @@ const CartPage: React.FC = () => {
|
||||
</View>
|
||||
<Image
|
||||
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"
|
||||
/>
|
||||
<View className="flex-1 flex flex-col justify-between">
|
||||
@@ -231,7 +231,7 @@ const CartPage: React.FC = () => {
|
||||
>
|
||||
<Image
|
||||
className="w-full rounded-md bg-gray-100"
|
||||
src={getCompressedImageUrl(goods.image || '')}
|
||||
src={getCompressedImageUrl(goods.image || '',{ width: 90 })}
|
||||
mode="aspectFill"
|
||||
style={{ height: '90px' }}
|
||||
/>
|
||||
|
||||
@@ -301,7 +301,7 @@ const CheckoutPage: React.FC = () => {
|
||||
// 显示成功提示
|
||||
Taro.showToast({ title: '订单已提交', icon: 'success' })
|
||||
setTimeout(() => {
|
||||
Taro.switchTab({ url: '/pages/order/list' })
|
||||
Taro.navigateTo({ url: '/pages/order/list' })
|
||||
}, 1500)
|
||||
} catch (err: any) {
|
||||
const message = err.message || '提交失败'
|
||||
|
||||
@@ -8,7 +8,7 @@ const UserPage: React.FC = () => {
|
||||
const { user, isLoggedIn } = useUser()
|
||||
|
||||
// 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) => {
|
||||
if (tabBarPages.includes(url)) {
|
||||
@@ -155,7 +155,7 @@ const UserPage: React.FC = () => {
|
||||
</View>
|
||||
<View
|
||||
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' }}>
|
||||
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='flex justify-between items-center mb-3'>
|
||||
<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>
|
||||
</View>
|
||||
@@ -187,7 +187,7 @@ const UserPage: React.FC = () => {
|
||||
key={item.status}
|
||||
className='flex flex-col items-center py-2 rounded-lg'
|
||||
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-xs text-gray-600'>{item.label}</Text>
|
||||
|
||||
@@ -141,12 +141,12 @@ const UserPage: React.FC = () => {
|
||||
const handleOrderTabClick = (status: number) => {
|
||||
if (!requireLogin({ action: 'viewOrder', redirect: '/pages/order/list', content: '登录后才能查看订单,是否前往登录?' })) return
|
||||
Taro.setStorageSync('order_tab', status)
|
||||
Taro.switchTab({ url: '/pages/order/list' })
|
||||
Taro.navigateTo({ url: '/pages/order/list' })
|
||||
}
|
||||
|
||||
const handleViewAllOrders = () => {
|
||||
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
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
trackInviteSource,
|
||||
} 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 {
|
||||
if (!input) return ''
|
||||
|
||||
@@ -144,9 +144,8 @@ const Login = () => {
|
||||
const tabBarUrls = [
|
||||
'/pages/index/index',
|
||||
'/pages/shop/index',
|
||||
'/pages/points/index',
|
||||
'/pages/user/user',
|
||||
'/pages/order/list',
|
||||
'/pages/shop/cart',
|
||||
]
|
||||
const pure = redirectUrl.split('?')[0]
|
||||
|
||||
|
||||
@@ -89,9 +89,9 @@ function isTabBarUrl(url: string) {
|
||||
const pure = url.split('?')[0]
|
||||
return (
|
||||
pure === '/pages/index/index' ||
|
||||
pure === '/pages/cart/cart' ||
|
||||
pure === '/pages/user/user' ||
|
||||
pure === '/pages/category/index'
|
||||
pure === '/pages/shop/index' ||
|
||||
pure === '/pages/shop/cart' ||
|
||||
pure === '/pages/user/user'
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ const SmsLogin = () => {
|
||||
const pure = url.split('?')[0]
|
||||
return (
|
||||
pure === '/pages/index/index' ||
|
||||
pure === '/pages/cart/cart' ||
|
||||
pure === '/pages/user/user' ||
|
||||
pure === '/pages/category/index'
|
||||
pure === '/pages/shop/index' ||
|
||||
pure === '/pages/shop/cart' ||
|
||||
pure === '/pages/user/user'
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user