// custom-tab-bar/index.js const app = getApp(); const roleCfg = { normal: { name: '点单老板', defaultPage: '/pages/index/index', tabList: [ { pagePath: 'pages/index/index', text: '商城', iconPath: '/images/zhuye.png', selectedIconPath: '/images/zhuye.png' }, { pagePath: 'pages/fenlei/fenlei', text: '分类', iconPath: '/images/fenlei.png', selectedIconPath: '/images/fenlei.png' }, { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/wode/wode', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] }, dashou: { name: '打手', defaultPage: '/pages/jiedan/jiedan', tabList: [ { pagePath: 'pages/jiedan/jiedan', text: '接单池', iconPath: '/images/jiedanchi.png', selectedIconPath: '/images/jiedanchi.png' }, { pagePath: 'pages/dashoudingdan/dashoudingdan', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' }, { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/dashouduan/dashouduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] }, shangjia: { name: '商家', defaultPage: 'pages/sjdingdan/sjdingdan', tabList: [ { pagePath: 'pages/sjdingdan/sjdingdan', text: '订单', iconPath: '/images/dingdan.png', selectedIconPath: '/images/dingdan.png' }, { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/shangjiaduan/shangjiaduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] }, guanshi: { name: '管事', defaultPage: '/pages/guanshiduan/guanshiduan', tabList: [ { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/guanshiduan/guanshiduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] }, zuzhang: { name: '组长', defaultPage: '/pages/zuzhangduan/zuzhangduan', tabList: [ { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/zuzhangduan/zuzhangduan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] }, kaoheguan: { name: '考核官', defaultPage: '/pages/kaoheguan/kaoheguan', tabList: [ { pagePath: 'pages/xiaoxi/xiaoxi', text: '消息', iconPath: '/images/xiaoxi.png', selectedIconPath: '/images/xiaoxi.png' }, { pagePath: 'pages/kaoheguan/kaoheguan', text: '我的', iconPath: '/images/wode.png', selectedIconPath: '/images/wode.png' } ] } }; Component({ data: { selectedIndex: 0, tabList: [], currentRole: 'normal', showRolePicker: false, availableRoles: [], badgeText: '' }, lifetimes: { attached() { this.refresh(); this._badgeListener = (data) => { if (data.badgeText !== undefined) { this.setData({ badgeText: data.badgeText }); } }; app.on('tabBarBadgeChanged', this._badgeListener); }, detached() { if (this._badgeListener) { app.off('tabBarBadgeChanged', this._badgeListener); } } }, pageLifetimes: { show() { this.refresh(); const globalBadge = app.globalData.messageManager?.tabBarBadgeText || ''; if (this.data.badgeText !== globalBadge) { this.setData({ badgeText: globalBadge }); } this._syncUnreadWithDebounce(); } }, methods: { _syncUnreadWithDebounce() { if (this._syncTimer) clearTimeout(this._syncTimer); this._syncTimer = setTimeout(() => { if (app && app.loadConversations) { app.loadConversations(); } }, 300); }, refresh() { const role = app.globalData.currentRole || 'normal'; let cfg = roleCfg[role]; if (!cfg) return; // 打手身份下,如果 isJinpai=1,悄悄把“我的”页面换成金牌页面 if (role === 'dashou') { const isJinpai = wx.getStorageSync('isJinpai') === 1; if (isJinpai) { cfg = { ...cfg, tabList: cfg.tabList.map(item => { if (item.pagePath === 'pages/dashouduan/dashouduan') { return { ...item, pagePath: 'pages/jinpaids/jinpaids' }; } return { ...item }; }) }; } } const list = cfg.tabList.map((v, i) => ({ ...v, index: i })); const pages = getCurrentPages(); const curRoute = pages.length ? pages[pages.length - 1].route : ''; let idx = list.findIndex(t => t.pagePath === curRoute); if (idx === -1) idx = 0; const avail = this._getAvail(); this.setData({ currentRole: role, tabList: list, selectedIndex: idx, availableRoles: avail }); }, _getAvail() { const arr = [{ key: 'normal', name: '点单老板' }]; if (wx.getStorageSync('dashoustatus') === 1) arr.push({ key: 'dashou', name: '打手' }); if (wx.getStorageSync('shangjiastatus') === 1) arr.push({ key: 'shangjia', name: '商家' }); if (wx.getStorageSync('guanshistatus') === 1) arr.push({ key: 'guanshi', name: '管事' }); if (wx.getStorageSync('zuzhangstatus') === 1) arr.push({ key: 'zuzhang', name: '组长' }); if (wx.getStorageSync('kaoheguanstatus') === 1) arr.push({ key: 'kaoheguan', name: '考核官' }); return arr; }, toggleRolePicker() { this.setData({ showRolePicker: !this.data.showRolePicker }); }, async selectRole(e) { const newRole = e.currentTarget.dataset.role; if (newRole === this.data.currentRole) { this.setData({ showRolePicker: false }); return; } this.setData({ showRolePicker: false }); // 1. 立即更新角色并保存 app.globalData.currentRole = newRole; wx.setStorageSync('currentRole', newRole); // 2. 🔥 确定跳转页面:所有角色都去“我的”页面 let targetPage = ''; if (newRole === 'dashou') { // 打手需要根据金牌状态决定跳转 const isJinpai = wx.getStorageSync('isJinpai') === 1; targetPage = isJinpai ? '/pages/jinpaids/jinpaids' : '/pages/dashouduan/dashouduan'; } else { // 其他角色直接取 tabList 最后一个页面 const cfg = roleCfg[newRole]; if (cfg && cfg.tabList.length > 0) { targetPage = '/' + cfg.tabList[cfg.tabList.length - 1].pagePath; } } // 3. 跳转 if (targetPage) { wx.reLaunch({ url: targetPage }); } // 4. 后台异步切换连接 app.switchRoleAndReconnect(newRole).catch(err => { console.error('后台切换连接失败:', err); }); }, switchTab(e) { const path = e.currentTarget.dataset.path; const idx = e.currentTarget.dataset.index; if (idx === this.data.selectedIndex) return; wx.redirectTo({ url: '/' + path }); } } });