const app = getApp() Page({ data: { statusBarHeight: 44, activeTab: 0, // 首页聚合数据 searchPlaceholder: '请搜索你想要的内容', notifications: [] as any[], quickEntries: [] as any[], hotActivities: [] as any[], recommendAgents: [] as any[], bannerItems: [] as any[], currentBannerIndex: 0, currentBannerImage: '', // 推荐活动分页数据 latestActivities: [] as any[], activityPagination: { page: 1, pages: 1, count: 0, }, activityLoading: false, // 智能体数据 agentList: [] as any[], }, bannerTimer: null as number | null, onLoad() { const sysInfo = wx.getSystemInfoSync() this.setData({ statusBarHeight: sysInfo.statusBarHeight || 44 }) app.waitLogin().then(() => { this.fetchHomeData() this.fetchRecommendedActivities(1) // 智能体推荐列表暂不联调 // this.fetchAgentList() }) }, onUnload() { if (this.bannerTimer) { clearInterval(this.bannerTimer) this.bannerTimer = null } }, onReachBottom() { // 触底加载更多推荐活动 if (this.data.activeTab === 0) { this.loadMoreActivities() } }, fetchHomeData() { wx.ajax({ url: '/home/index', method: 'GET', }).then((res: any) => { const data: any = {} // 搜索模块 if (res.searchModule?.config?.placeholder) { data.searchPlaceholder = res.searchModule.config.placeholder } // Banner 模块 if (res.bannerModule?.items?.length) { data.bannerItems = res.bannerModule.items data.currentBannerImage = res.bannerModule.items[0].imageUrl this.startBannerRotation(res.bannerModule.items) } // 快捷入口模块 if (res.quickEntryModule?.items?.length) { data.quickEntries = res.quickEntryModule.items } // 通知栏模块 if (res.notificationModule?.data?.length) { data.notifications = res.notificationModule.data } // 热门活动模块 - 处理mainImages JSON字符串解析 if (res.hotActivityModule?.data?.length) { const hotActivities = res.hotActivityModule.data.map((item: any) => { let mainImages = item.mainImages // 如果mainImages是字符串,解析为数组 if (typeof mainImages === 'string') { try { mainImages = JSON.parse(mainImages) } catch (e) { console.error('解析mainImages失败', e) mainImages = [] } } return { ...item, mainImages } }) data.hotActivities = hotActivities } // 推荐智能体模块 if (res.recommendAgentModule?.data?.length) { data.recommendAgents = res.recommendAgentModule.data } this.setData(data) }).catch((err) => { console.error('获取首页数据失败', err) }) }, fetchRecommendedActivities(page: number) { if (this.data.activityLoading) return this.setData({ activityLoading: true }) wx.ajax({ url: '/activity/list', method: 'GET', data: { getRecommended: 1, page, pageSize: 10 }, }).then((res: any) => { const list = res.list || [] const pagination = res.pagination || {} // 处理mainImages JSON字符串解析 const activities = list.map((item: any) => { let mainImages = item.mainImages if (typeof mainImages === 'string') { try { mainImages = JSON.parse(mainImages) } catch (e) { console.error('解析mainImages失败', e) mainImages = [] } } return { ...item, mainImages } }) // 如果是第一页,直接替换;否则追加 const latestActivities = page === 1 ? activities : [...this.data.latestActivities, ...activities] this.setData({ latestActivities, activityPagination: { page: pagination.page || page, pages: pagination.totalPages || 1, count: pagination.total || 0, }, activityLoading: false, }) }).catch((err) => { console.error('获取推荐活动失败', err) this.setData({ activityLoading: false }) }) }, loadMoreActivities() { const { activityPagination, activityLoading } = this.data if (activityLoading || activityPagination.page >= activityPagination.pages) return this.fetchRecommendedActivities(activityPagination.page + 1) }, fetchAgentList() { wx.ajax({ url: '/agent/list', method: 'GET', data: { page: 1, pageSize: 10 }, }).then((res: any) => { if (res.list?.length) { this.setData({ agentList: res.list }) } }).catch((err) => { console.error('获取智能体列表失败', err) }) }, startBannerRotation(bannerItems: any[]) { if (bannerItems.length <= 1) return this.bannerTimer = setInterval(() => { const currentIndex = this.data.currentBannerIndex const nextIndex = (currentIndex + 1) % bannerItems.length this.setData({ currentBannerIndex: nextIndex, currentBannerImage: bannerItems[nextIndex].imageUrl, }) }, 3000) }, onSearchTap() { wx.showToast({ title: '搜索功能开发中', icon: 'none' }) }, onNavTap(e: WechatMiniprogram.TouchEvent) { const type = e.currentTarget.dataset.type wx.showToast({ title: `${type}功能开发中`, icon: 'none' }) }, onAnnounceTap() { wx.showToast({ title: '公告详情开发中', icon: 'none' }) }, onMoreAgentsTap() { wx.showToast({ title: '更多智能体开发中', icon: 'none' }) }, onAgentTap(e: WechatMiniprogram.TouchEvent) { const id = e.currentTarget.dataset.id wx.navigateTo({ url: `/pages/agent/index?id=${id}` }) }, onActivityTap(e: WechatMiniprogram.TouchEvent) { const id = e.currentTarget.dataset.id wx.navigateTo({ url: `/pages/activity-detail/index?id=${id}` }) }, onTabTap(e: WechatMiniprogram.TouchEvent) { const index = e.currentTarget.dataset.index if (index === this.data.activeTab) return this.setData({ activeTab: index }) if (index === 4) { wx.switchTab({ url: '/pages/my/index' }) } }, }) export {}