buddhism/pages/institutionalStructure/mixins/data-manager.js

90 lines
2.2 KiB
JavaScript
Raw Normal View History

/**
* 数据管理 Mixin
* 提供通用的数据获取分页加载功能
*/
export const dataManagerMixin = {
data() {
return {
// 数据数组
dataList: [],
// 加载状态
loading: false,
// 分页参数
pageNum: 1,
pageSize: 10,
hasMore: true
}
},
methods: {
/**
* 获取数据
* @param {boolean} isLoadMore 是否为加载更多
* @param {Function} apiCall API调用函数
* @param {Function} dataTransformer 数据转换函数
*/
async fetchData(isLoadMore = false, apiCall, dataTransformer) {
this.loading = true
try {
if (isLoadMore) {
this.pageNum++
} else {
this.pageNum = 1
}
// 调用API
const response = await apiCall({
pageNum: this.pageNum,
pageSize: this.pageSize
})
if (response.code === 200) {
// 转换数据
const newData = dataTransformer ? dataTransformer(response.rows) : response.rows || []
if (isLoadMore) {
this.dataList = [...this.dataList, ...newData]
} else {
this.dataList = newData
}
// 判断是否还有更多数据
this.hasMore = response.rows.length === this.pageSize
} else {
uni.showToast({
title: response.msg || '获取数据失败',
icon: 'none'
})
}
} catch (error) {
console.error('获取数据失败:', error)
uni.showToast({
title: '网络错误',
icon: 'none'
})
} finally {
this.loading = false
}
},
/**
* 刷新数据
* @param {Function} apiCall API调用函数
* @param {Function} dataTransformer 数据转换函数
*/
refreshData(apiCall, dataTransformer) {
this.fetchData(false, apiCall, dataTransformer)
},
/**
* 加载更多数据
* @param {Function} apiCall API调用函数
* @param {Function} dataTransformer 数据转换函数
*/
loadMoreData(apiCall, dataTransformer) {
if (this.hasMore && !this.loading) {
this.fetchData(true, apiCall, dataTransformer)
}
}
}
}