fix(tabBar): 修正“订单”页改为非tabBar页面的导航链接

- 将原来 switchTab 跳转“订单”页改为 navigateTo,以适配非 tabBar 页面
- 统一更新多个文件中关于订单页的跳转方式共计 6 处
- 更新 tabBar 配置,从包含“订单”页改为实际的四个 tabBar 页面
- 修正 isTabBarUrl 相关判断,去除不存在或非 tabBar 路径
- 调整多个 tabBar 判断列表,保证逻辑一致性与正确性
- 修改购物车页图片压缩宽度加入限制,优化资源加载
- 更新订单列表页注释,去除“tabBar 页”描述
- 备注遗留问题,部分积分页跳转仍用错误方式,待进一步修复
This commit is contained in:
2026-07-15 23:42:27 +08:00
parent c12bba66eb
commit fbaa5c32bc
12 changed files with 41 additions and 21 deletions

View File

@@ -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,149handleOrderTabClick / handleViewAllOrders
- pages/user/index.tsx:158,175,190订单概览数/全部订单/订单状态快捷入口)
- B. 4 处 tabBar 判断列表更新为实际 4 个 tabBarindex/shop/shop-cart/user
- pages/user/index.tsx:11、pages/index/index.tsx:185tabBarPages
- passport/login.tsxtabBarUrls顺带去掉非 tabBar 的 points/index
- passport/auth-flow.ts:12TABBAR_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会失败

View File

@@ -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待修

View File

@@ -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)) {

View File

@@ -124,7 +124,7 @@ const OrderListPage: React.FC = () => {
}
}, [tabIndex, isLoggedIn, user?.userId])
// 页面每次显示时刷新数据(tabBar 页 switchTab 不会重新挂载组件
// 页面每次显示时刷新数据(覆盖从订单详情页返回等再次显示场景
const isFirstShow = useRef(true)
Taro.useDidShow(() => {
// 首次显示由 useEffect 处理,跳过

View File

@@ -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' }}
/>

View File

@@ -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 || '提交失败'

View File

@@ -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>

View File

@@ -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

View File

@@ -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 ''

View File

@@ -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]

View File

@@ -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'
)
}

View File

@@ -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'
)
}