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
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() {
|
|
// 空函数,仅用于阻止事件冒泡
|
|
}
|
|
})
|