|
|
|
|
const app = getApp<IAppOption>()
|
|
|
|
|
|
|
|
|
|
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 {}
|