Browse Source

feat: 防止多次点击导致多次跳转

蛋吧eggbar
徐飞洋 1 month ago
parent
commit
424a1a65e7
  1. 232
      custom-tab-bar/index.js
  2. 58
      pages/evaluate2/index.js
  3. 4
      pages/goods-detail/goods-detail.js

232
custom-tab-bar/index.js

@ -12,6 +12,7 @@ Component({
selected: 'index', selected: 'index',
show: true, show: true,
badges: {}, badges: {},
navigating: false,
tabBarItems: [ tabBarItems: [
{ key: 'index', route: 'pages/index/index' }, { key: 'index', route: 'pages/index/index' },
{ key: 'chat', route: 'pages/chat/index', badgeKey: 'chat' }, { key: 'chat', route: 'pages/chat/index', badgeKey: 'chat' },
@ -21,11 +22,24 @@ Component({
{ key: 'profile', route: 'pages/profile/index' } { key: 'profile', route: 'pages/profile/index' }
] ]
}, },
/** /**
* 组件的方法列表 * 组件的方法列表
*/ */
methods: { methods: {
// 导航锁机制,防止多次点击导致多次跳转
navigateLock: function(cb) {
if (this.data.navigating) {
return false;
}
this.setData({ navigating: true });
cb();
// 延迟重置导航锁,确保导航操作有足够时间完成
setTimeout(() => {
this.setData({ navigating: false });
}, 5000);
return true;
},
// 切换tab页面的方法 - 增强版,改进状态管理 // 切换tab页面的方法 - 增强版,改进状态管理
switchTab(e) { switchTab(e) {
try { try {
@ -117,51 +131,53 @@ Component({
// 跳转到tab页面的通用方法 // 跳转到tab页面的通用方法
navigateToTabPage(url) { navigateToTabPage(url) {
// 定义tabBar页面列表 this.navigateLock(() => {
const tabBarPages = [ // 定义tabBar页面列表
'pages/index/index', const tabBarPages = [
'pages/chat/index', 'pages/index/index',
'pages/evaluate2/one', 'pages/chat/index',
'pages/eggbar/eggbar', 'pages/evaluate2/one',
'pages/favorites/index', 'pages/eggbar/eggbar',
'pages/profile/index' 'pages/favorites/index',
]; 'pages/profile/index'
];
// 检查是否为tabBar页面
if (tabBarPages.includes(url)) { // 检查是否为tabBar页面
console.log('使用switchTab跳转到tabbar页面:', url) if (tabBarPages.includes(url)) {
wx.switchTab({ console.log('使用switchTab跳转到tabbar页面:', url)
url: '/' + url, wx.switchTab({
success: (res) => { url: '/' + url,
console.log('switchTab成功:', url, res) success: (res) => {
}, console.log('switchTab成功:', url, res)
fail: (err) => { },
console.error('switchTab失败:', url, err) fail: (err) => {
console.log('尝试使用reLaunch跳转...') console.error('switchTab失败:', url, err)
wx.reLaunch({ console.log('尝试使用reLaunch跳转...')
url: '/' + url, wx.reLaunch({
success: (res) => { url: '/' + url,
console.log('reLaunch成功:', url, res) success: (res) => {
}, console.log('reLaunch成功:', url, res)
fail: (err) => { },
console.error('reLaunch也失败:', url, err) fail: (err) => {
} console.error('reLaunch也失败:', url, err)
}) }
} })
}) }
} else { })
// 非tabBar页面,使用navigateTo跳转 } else {
console.log('使用navigateTo跳转到非tabbar页面:', url) // 非tabBar页面,使用navigateTo跳转
wx.navigateTo({ console.log('使用navigateTo跳转到非tabbar页面:', url)
url: '/' + url, wx.navigateTo({
success: (res) => { url: '/' + url,
console.log('navigateTo成功:', url, res) success: (res) => {
}, console.log('navigateTo成功:', url, res)
fail: (err) => { },
console.error('navigateTo失败:', url, err) fail: (err) => {
} console.error('navigateTo失败:', url, err)
}) }
} })
}
});
}, },
// 强制更新选中状态 // 强制更新选中状态
@ -198,74 +214,78 @@ Component({
// 跳转到收藏页面 // 跳转到收藏页面
goToFavoritesPage() { goToFavoritesPage() {
wx.navigateTo({ this.navigateLock(() => {
url: '/pages/favorites/index' wx.navigateTo({
}) url: '/pages/favorites/index'
})
});
}, },
// 跳转到估价页面 // 跳转到估价页面
goToEvaluatePage() { goToEvaluatePage() {
console.log('点击了估价按钮,跳转到evaluate2/one页面') this.navigateLock(() => {
console.log('点击了估价按钮,跳转到evaluate2/one页面')
// 判断partnerstatus是否为approved
const app = getApp()
const userInfo = app.globalData.userInfo || wx.getStorageSync('userInfo') || {}
const partnerstatus = userInfo.partnerstatus
console.log('用户partnerstatus:', partnerstatus)
// 如果partnerstatus不是approved,提示用户并跳转到入驻页面
if (partnerstatus !== 'approved') {
wx.showToast({
title: '该功能需要入驻之后才能使用',
icon: 'none',
duration: 5000
})
// 5秒后自动跳转到入驻页面 // 判断idcardstatus是否为1
setTimeout(() => { const app = getApp()
wx.navigateTo({ const userInfo = app.globalData.userInfo || wx.getStorageSync('userInfo') || {}
url: '/pages/settlement/index' const idcardstatus = userInfo.idcardstatus
})
}, 5000)
return console.log('用户idcardstatus:', idcardstatus)
}
// 如果idcardstatus不是1,提示用户并跳转到入驻页面
wx.switchTab({ if (idcardstatus !== 1) {
url: '/pages/evaluate2/one', wx.showToast({
success: (res) => { title: '请先完成身份认证',
console.log('switchTab到evaluate2/one成功:', res) icon: 'none',
// 更新选中状态 duration: 3000
this.setData({ selected: 'evaluate' })
// 更新全局数据
const app = getApp()
if (app && app.globalData) {
app.globalData.currentTab = 'evaluate'
}
},
fail: (err) => {
console.error('switchTab到evaluate2/one失败:', err)
// 失败时尝试使用reLaunch
console.log('尝试使用reLaunch跳转到evaluate2/one...')
wx.reLaunch({
url: '/pages/evaluate2/one',
success: (res) => {
console.log('reLaunch到evaluate2/one成功:', res)
// 更新选中状态
this.setData({ selected: 'evaluate' })
// 更新全局数据
const app = getApp()
if (app && app.globalData) {
app.globalData.currentTab = 'evaluate'
}
},
fail: (err) => {
console.error('reLaunch到evaluate2/one也失败:', err)
}
}) })
// 3秒后自动跳转到认证页面
setTimeout(() => {
wx.navigateTo({
url: '/pages/profile/authentication/index'
})
}, 3000)
return
} }
})
wx.switchTab({
url: '/pages/evaluate2/one',
success: (res) => {
console.log('switchTab到evaluate2/one成功:', res)
// 更新选中状态
this.setData({ selected: 'evaluate' })
// 更新全局数据
const app = getApp()
if (app && app.globalData) {
app.globalData.currentTab = 'evaluate'
}
},
fail: (err) => {
console.error('switchTab到evaluate2/one失败:', err)
// 失败时尝试使用reLaunch
console.log('尝试使用reLaunch跳转到evaluate2/one...')
wx.reLaunch({
url: '/pages/evaluate2/one',
success: (res) => {
console.log('reLaunch到evaluate2/one成功:', res)
// 更新选中状态
this.setData({ selected: 'evaluate' })
// 更新全局数据
const app = getApp()
if (app && app.globalData) {
app.globalData.currentTab = 'evaluate'
}
},
fail: (err) => {
console.error('reLaunch到evaluate2/one也失败:', err)
}
})
}
})
});
}, },
// 从全局数据同步状态的方法 - 增强版 // 从全局数据同步状态的方法 - 增强版

58
pages/evaluate2/index.js

@ -3,7 +3,21 @@ Page({
productName: '', productName: '',
specifications: [], specifications: [],
loading: false, loading: false,
error: '' error: '',
navigating: false
},
// 导航锁机制,防止多次点击导致多次跳转
navigateLock: function(cb) {
if (this.data.navigating) {
return false;
}
this.setData({ navigating: true });
cb();
// 延迟重置导航锁,确保导航操作有足够时间完成
setTimeout(() => {
this.setData({ navigating: false });
}, 1000);
return true;
}, },
onLoad(options) { onLoad(options) {
let productName = ''; let productName = '';
@ -454,33 +468,39 @@ Page({
// 跳转到规格详情页面 // 跳转到规格详情页面
goToSpecDetail(e) { goToSpecDetail(e) {
const specItem = e.currentTarget.dataset.spec; this.navigateLock(() => {
console.log('点击的规格项:', specItem); const specItem = e.currentTarget.dataset.spec;
console.log('传递的价格:', specItem.finalPriceText); console.log('点击的规格项:', specItem);
wx.navigateTo({ console.log('传递的价格:', specItem.finalPriceText);
url: `/pages/evaluate2/spec-detail?productName=${encodeURIComponent(this.data.productName)}&specification=${encodeURIComponent(specItem.name)}&price=${encodeURIComponent(specItem.finalPriceText)}` wx.navigateTo({
url: `/pages/evaluate2/spec-detail?productName=${encodeURIComponent(this.data.productName)}&specification=${encodeURIComponent(specItem.name)}&price=${encodeURIComponent(specItem.finalPriceText)}`
});
}); });
}, },
// 返回上一页 // 返回上一页
goBack() { goBack() {
wx.navigateBack(); this.navigateLock(() => {
wx.navigateBack();
});
}, },
// 返回商品列表页面 // 返回商品列表页面
goBackToProductList() { goBackToProductList() {
// 从本地存储中获取之前选择的分类 this.navigateLock(() => {
const selectedCategory = wx.getStorageSync('selectedCategory') || ''; // 从本地存储中获取之前选择的分类
console.log('返回商品列表页面,之前选择的分类:', selectedCategory); const selectedCategory = wx.getStorageSync('selectedCategory') || '';
console.log('返回商品列表页面,之前选择的分类:', selectedCategory);
// 构建跳转URL,如果有分类参数就传递
let url = '/pages/evaluate2/product-list'; // 构建跳转URL,如果有分类参数就传递
if (selectedCategory) { let url = '/pages/evaluate2/product-list';
url += '?category=' + encodeURIComponent(selectedCategory); if (selectedCategory) {
} url += '?category=' + encodeURIComponent(selectedCategory);
}
wx.redirectTo({
url: url wx.redirectTo({
url: url
});
}); });
}, },

4
pages/goods-detail/goods-detail.js

@ -3046,7 +3046,7 @@ Page({
duration: 2000 duration: 2000
}); });
// 延迟5秒跳转到认证页面 // 延迟3秒跳转到认证页面
setTimeout(() => { setTimeout(() => {
wx.navigateTo({ wx.navigateTo({
url: '/pages/profile/authentication/index', url: '/pages/profile/authentication/index',
@ -3057,7 +3057,7 @@ Page({
console.error('跳转到认证页面失败:', error); console.error('跳转到认证页面失败:', error);
} }
}); });
}, 5000); }, 3000);
return; return;
} }

Loading…
Cancel
Save