154 lines
4.7 KiB
JavaScript
154 lines
4.7 KiB
JavaScript
|
|
/**
|
|||
|
|
* Soul创业实验 - 自定义TabBar组件
|
|||
|
|
* 根据后台配置动态显示/隐藏"找伙伴"按钮
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
console.log('[TabBar] ===== 组件文件开始加载 =====')
|
|||
|
|
|
|||
|
|
const app = getApp()
|
|||
|
|
console.log('[TabBar] App 对象:', app)
|
|||
|
|
|
|||
|
|
Component({
|
|||
|
|
data: {
|
|||
|
|
selected: 0,
|
|||
|
|
color: '#8e8e93',
|
|||
|
|
selectedColor: '#00CED1',
|
|||
|
|
matchEnabled: false, // 找伙伴功能开关,默认关闭
|
|||
|
|
list: [
|
|||
|
|
{
|
|||
|
|
pagePath: '/pages/index/index',
|
|||
|
|
text: '首页',
|
|||
|
|
iconType: 'home'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
pagePath: '/pages/chapters/chapters',
|
|||
|
|
text: '目录',
|
|||
|
|
iconType: 'list'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
pagePath: '/pages/match/match',
|
|||
|
|
text: '找伙伴',
|
|||
|
|
iconType: 'match',
|
|||
|
|
isSpecial: true
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
pagePath: '/pages/my/my',
|
|||
|
|
text: '我的',
|
|||
|
|
iconType: 'user'
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
lifetimes: {
|
|||
|
|
attached() {
|
|||
|
|
console.log('[TabBar] Component attached 生命周期触发')
|
|||
|
|
this.loadFeatureConfig()
|
|||
|
|
},
|
|||
|
|
ready() {
|
|||
|
|
console.log('[TabBar] Component ready 生命周期触发')
|
|||
|
|
// 如果 attached 中没有成功加载,在 ready 中再次尝试
|
|||
|
|
if (this.data.matchEnabled === undefined || this.data.matchEnabled === null) {
|
|||
|
|
console.log('[TabBar] 在 ready 中重新加载配置')
|
|||
|
|
this.loadFeatureConfig()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 页面加载时也调用(兼容性更好)
|
|||
|
|
attached() {
|
|||
|
|
console.log('[TabBar] attached() 方法触发')
|
|||
|
|
this.loadFeatureConfig()
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
methods: {
|
|||
|
|
// 加载功能配置
|
|||
|
|
async loadFeatureConfig() {
|
|||
|
|
try {
|
|||
|
|
console.log('[TabBar] 开始加载功能配置...')
|
|||
|
|
console.log('[TabBar] API地址:', app.globalData.baseUrl + '/api/miniprogram/config')
|
|||
|
|
|
|||
|
|
// app.request 的第一个参数是 url 字符串,第二个参数是 options 对象
|
|||
|
|
const res = await app.request('/api/miniprogram/config', {
|
|||
|
|
method: 'GET'
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 兼容两种返回格式
|
|||
|
|
let matchEnabled = false
|
|||
|
|
|
|||
|
|
if (res && res.success && res.features) {
|
|||
|
|
console.log('[TabBar] features配置:', JSON.stringify(res.features))
|
|||
|
|
matchEnabled = res.features.matchEnabled === true
|
|||
|
|
console.log('[TabBar] matchEnabled值:', matchEnabled)
|
|||
|
|
} else if (res && res.configs && res.configs.feature_config) {
|
|||
|
|
// 备用格式:从 configs.feature_config 读取
|
|||
|
|
console.log('[TabBar] 使用备用格式,从configs读取')
|
|||
|
|
matchEnabled = res.configs.feature_config.matchEnabled === true
|
|||
|
|
console.log('[TabBar] matchEnabled值:', matchEnabled)
|
|||
|
|
} else {
|
|||
|
|
console.log('[TabBar] ⚠️ 未找到features配置,使用默认值false')
|
|||
|
|
console.log('[TabBar] res对象keys:', Object.keys(res || {}))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.setData({ matchEnabled }, () => {
|
|||
|
|
console.log('[TabBar] ✅ matchEnabled已设置为:', this.data.matchEnabled)
|
|||
|
|
// 配置加载完成后,根据当前路由设置选中状态
|
|||
|
|
this.updateSelected()
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 如果当前在找伙伴页面,但功能已关闭,跳转到首页
|
|||
|
|
if (!matchEnabled) {
|
|||
|
|
const pages = getCurrentPages()
|
|||
|
|
const currentPage = pages[pages.length - 1]
|
|||
|
|
if (currentPage && currentPage.route === 'pages/match/match') {
|
|||
|
|
console.log('[TabBar] 找伙伴功能已关闭,从match页面跳转到首页')
|
|||
|
|
wx.switchTab({ url: '/pages/index/index' })
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log('[TabBar] ❌ 加载功能配置失败:', error)
|
|||
|
|
console.log('[TabBar] 错误详情:', error.message || error)
|
|||
|
|
// 默认关闭找伙伴功能
|
|||
|
|
this.setData({ matchEnabled: false }, () => {
|
|||
|
|
this.updateSelected()
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 根据当前路由更新选中状态
|
|||
|
|
updateSelected() {
|
|||
|
|
const pages = getCurrentPages()
|
|||
|
|
if (pages.length === 0) return
|
|||
|
|
|
|||
|
|
const currentPage = pages[pages.length - 1]
|
|||
|
|
const route = currentPage.route
|
|||
|
|
|
|||
|
|
let selected = 0
|
|||
|
|
const { matchEnabled } = this.data
|
|||
|
|
|
|||
|
|
// 根据路由匹配对应的索引
|
|||
|
|
if (route === 'pages/index/index') {
|
|||
|
|
selected = 0
|
|||
|
|
} else if (route === 'pages/chapters/chapters') {
|
|||
|
|
selected = 1
|
|||
|
|
} else if (route === 'pages/match/match') {
|
|||
|
|
selected = 2
|
|||
|
|
} else if (route === 'pages/my/my') {
|
|||
|
|
selected = matchEnabled ? 3 : 2
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.setData({ selected })
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
switchTab(e) {
|
|||
|
|
const data = e.currentTarget.dataset
|
|||
|
|
const url = data.path
|
|||
|
|
const index = data.index
|
|||
|
|
|
|||
|
|
if (this.data.selected === index) return
|
|||
|
|
|
|||
|
|
wx.switchTab({ url })
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|