与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

206 lines
4.3 KiB

import http from '../../../utils/api'
const baseUrl = require('../../../utils/baseUrl')
Page({
data: {
// 搜索文本
searchText: '',
baseUrl: baseUrl,
// 当前选中的分类
activeCategory: '',
// 分类数据
categories: [],
// 经验分享列表
experienceList: [],
// 分页参数
pageNum: 1,
pageSize: 10,
total: 0,
// 加载状态
loading: false,
hasMore: true,
// 搜索防抖定时器
searchTimer: null
},
onLoad() {
// 获取分类数据
this.getCategories()
// 获取经验分享列表
this.getExperienceList(true)
},
// 获取经验分享列表
getExperienceList(isRefresh = false) {
if (this.data.loading) return
const params = {
pageNum: isRefresh ? 1 : this.data.pageNum,
pageSize: this.data.pageSize
}
// 添加搜索关键词
if (this.data.searchText) {
params.searchKey = this.data.searchText.trim()
}
// 添加分类筛选
if (this.data.activeCategory) {
params.categoryName = this.data.activeCategory
}
this.setData({ loading: true })
http.experience({
data: params,
success: res => {
console.log('经验列表数据:', res)
if (res.code === 200) {
const newList = isRefresh ? res.rows : [...this.data.experienceList, ...res.rows]
const total = res.total || 0
const hasMore = newList.length < total
this.setData({
experienceList: newList,
total: total,
hasMore: hasMore,
pageNum: isRefresh ? 2 : this.data.pageNum + 1,
loading: false
})
} else {
wx.showToast({
title: res.msg || '加载失败',
icon: 'none'
})
this.setData({ loading: false })
}
},
fail: err => {
console.error('请求失败:', err)
wx.showToast({
title: '网络错误,请重试',
icon: 'none'
})
this.setData({ loading: false })
}
})
},
// 获取分类数据
getCategories() {
http.experiencezd({
data: {
categoryName: 'category_id'
},
success: res => {
console.log('分类数据:', res)
if (res.code === 200) {
this.setData({
categories: res.data || []
})
}
},
fail: err => {
console.error('获取分类失败:', err)
}
})
},
// 处理搜索输入(带防抖)
onSearchInput(e) {
const searchText = e.detail.value
this.setData({
searchText: searchText
})
// 清除之前的定时器
if (this.data.searchTimer) {
clearTimeout(this.data.searchTimer)
}
// 设置新的定时器,500ms后执行搜索
const timer = setTimeout(() => {
this.handleSearch()
}, 500)
this.setData({
searchTimer: timer
})
},
// 搜索确认
onSearchConfirm() {
if (this.data.searchTimer) {
clearTimeout(this.data.searchTimer)
}
this.handleSearch()
},
// 执行搜索
handleSearch() {
this.setData({
pageNum: 1,
hasMore: true
})
this.getExperienceList(true)
},
// 清空搜索
clearSearch() {
this.setData({
searchText: '',
pageNum: 1,
hasMore: true
})
this.getExperienceList(true)
},
// 分类点击事件
onCategoryTap(e) {
const categoryId = e.currentTarget.dataset.id
if (this.data.activeCategory === categoryId) {
return
}
this.setData({
activeCategory: categoryId,
pageNum: 1,
hasMore: true
})
this.getExperienceList(true)
},
// 滚动到底部加载更多
onScrollToLower() {
if (!this.data.loading && this.data.hasMore) {
this.getExperienceList()
}
},
// 点击加载更多
loadMoreData() {
if (!this.data.loading && this.data.hasMore) {
this.getExperienceList()
}
},
// 经验分享点击事件
onExperienceTap(e) {
const id = e.currentTarget.dataset.id
wx.navigateTo({
url: `/pagesB/pages/experienceDetails/experienceDetails?id=${id}`,
})
},
onUnload() {
// 清理定时器
if (this.data.searchTimer) {
clearTimeout(this.data.searchTimer)
}
}
})