与牧同行-小程序用户端
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.
 

248 lines
5.7 KiB

import http from '../../../utils/api'
Page({
data: {
currentDate: '2023年11月15日',
searchKeyword: '',
activeFilter: '全部',
activeFilterValue: '',
showPolicyDetail: false,
currentPolicy: {},
filteredPolicies: [],
dictType: [],
// 分页相关
pageNum: 1,
pageSize: 10,
total: 0,
hasMore: true,
isLoading: false,
isLoadingMore: false,
// 滚动区域高度
scrollHeight: 0,
// 搜索定时器
searchTimer: null
},
onLoad: function(options) {
this.getpolicyeZd()
this.getpolicyelucidation()
// 计算滚动区域高度
this.calculateScrollHeight()
},
onReady: function() {
// 确保获取正确的高度
this.calculateScrollHeight()
},
// 计算滚动区域高度
calculateScrollHeight: function() {
const systemInfo = wx.getSystemInfoSync()
const query = wx.createSelectorQuery()
query.select('.search-section').boundingClientRect()
query.select('.bottom-tip').boundingClientRect()
query.exec((res) => {
if (res[0] && res[1]) {
const searchHeight = res[0].height
const bottomHeight = res[1].height
const windowHeight = systemInfo.windowHeight
const scrollHeight = windowHeight - searchHeight - bottomHeight - 40
this.setData({
scrollHeight: Math.max(scrollHeight, 400) // 设置最小高度
})
}
})
},
// 政策解读列表(支持分页和筛选)
getpolicyelucidation: function(isLoadMore = false) {
if (isLoadMore && (!this.data.hasMore || this.data.isLoadingMore)) {
return
}
if (!isLoadMore) {
this.setData({ isLoading: true })
} else {
this.setData({ isLoadingMore: true })
}
const params = {
pageNum: isLoadMore ? this.data.pageNum : 1,
pageSize: this.data.pageSize,
searchKey: this.data.searchKeyword || undefined
}
// 如果选择了分类(不是"全部"),则添加分类参数
if (this.data.activeFilterValue && this.data.activeFilter !== '全部') {
params.policyCategory = this.data.activeFilterValue
}
http.policyelucidation({
data: params,
success: res => {
console.log('政策列表:', res)
const newList = isLoadMore
? [...this.data.filteredPolicies, ...res.rows]
: res.rows
const total = res.total || 0
const currentTotal = newList.length
const hasMore = currentTotal < total
this.setData({
filteredPolicies: newList,
total: total,
hasMore: hasMore,
pageNum: isLoadMore ? this.data.pageNum + 1 : 2,
isLoading: false,
isLoadingMore: false
})
},
fail: (err) => {
console.error('获取政策列表失败:', err)
this.setData({
isLoading: false,
isLoadingMore: false
})
if (!isLoadMore) {
wx.showToast({
title: '加载失败',
icon: 'none'
})
}
}
})
},
// 类型
getpolicyeZd: function() {
http.policyeZd({
data: {
dictType: 'policy_category'
},
success: res => {
console.log('分类数据:', res)
this.setData({
dictType: res.rows
})
},
fail: (err) => {
console.error('获取分类失败:', err)
wx.showToast({
title: '加载分类失败',
icon: 'none'
})
}
})
},
// 搜索输入处理(防抖)
onSearchInput: function(e) {
const searchKeyword = e.detail.value.trim()
this.setData({
searchKeyword: searchKeyword
})
// 清除之前的定时器
if (this.data.searchTimer) {
clearTimeout(this.data.searchTimer)
}
// 设置新的定时器(500ms防抖)
this.data.searchTimer = setTimeout(() => {
// 重置分页
this.setData({
pageNum: 1,
hasMore: true
}, () => {
this.getpolicyelucidation()
})
}, 500)
},
// 清空搜索
onClearSearch: function() {
this.setData({
searchKeyword: '',
pageNum: 1,
hasMore: true
}, () => {
this.getpolicyelucidation()
})
},
// 搜索按钮点击(键盘搜索键)
onSearch: function() {
this.setData({
pageNum: 1,
hasMore: true
}, () => {
this.getpolicyelucidation()
})
},
// 筛选标签点击
onFilterTap: function(e) {
const filter = e.currentTarget.dataset.filter
const value = e.currentTarget.dataset.value
this.setData({
activeFilter: filter,
activeFilterValue: value,
pageNum: 1,
hasMore: true
}, () => {
this.getpolicyelucidation()
})
},
// 政策卡片点击
onPolicyTap: function(e) {
const policyId = e.currentTarget.dataset.id
http.policyeDetails({
data: {
id: policyId
},
success: res => {
console.log('政策详情:', res)
this.setData({
showPolicyDetail: true,
currentPolicy: res.data
})
},
fail: (err) => {
console.error('获取政策详情失败:', err)
wx.showToast({
title: '加载详情失败',
icon: 'none'
})
}
})
},
// 上拉加载更多
onReachBottom: function() {
if (this.data.hasMore && !this.data.isLoadingMore) {
this.getpolicyelucidation(true)
}
},
// 隐藏政策详情
hidePolicyDetail: function() {
this.setData({
showPolicyDetail: false
})
},
// 阻止事件冒泡
stopPropagation: function() {
// 空函数,仅用于阻止事件冒泡
}
})