| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // 文件路径: /mixins/useListQuery.js
- import {
- ref,
- reactive
- } from 'vue'
- /**
- * 通用列表查询 composable
- * @param {Function} apiFunction - 执行查询的API函数
- * @param {Object} defaultQuery - 默认查询参数
- * @returns {Object} 包含查询相关状态和方法的对象
- */
- export function useListQuery(apiFunction, defaultQuery = {}) {
- // 列表数据
- const dataList = ref([])
- // 加载状态
- const loading = ref(false)
- // 是否没有更多数据
- const noMore = ref(false)
- // 当前页码
- const pageNum = ref(1)
- // 每页条数
- const pageSize = ref(10)
- // 查询表单
- const queryForm = reactive({
- ...defaultQuery
- })
- // 获取列表数据
- const getDataList = async (isReset = false) => {
- if (loading.value) return
- loading.value = true
- // 如果是重置操作,重置页码和数据
- if (isReset) {
- pageNum.value = 1
- dataList.value = []
- noMore.value = false
- }
- try {
- // 调用传入的API函数
- const params = {
- pageNum: pageNum.value,
- pageSize: pageSize.value,
- ...queryForm
- }
- uni.showLoading({
- mask: true,
- title: "加载中"
- })
- const res = await apiFunction(params)
- // 处理返回数据
- const list = res.rows || res.data?.list || res.data || []
- const total = res.total || 0
- if (pageNum.value === 1) {
- dataList.value = list
- } else {
- dataList.value = [...dataList.value, ...list]
- }
- // 判断是否还有更多数据
- noMore.value = dataList.value.length >= total
- return res
- } catch (error) {
- console.error('获取列表数据失败:', error)
- throw error
- } finally {
- uni.stopPullDownRefresh();
- uni.hideLoading();
- loading.value = false
- }
- }
- // 搜索功能
- const handleSearch = () => {
- getDataList(true) // 重置并重新查询
- }
- // 重置查询条件
- const resetQuery = () => {
- // 重置查询表单为默认值
- Object.keys(defaultQuery).forEach(key => {
- queryForm[key] = defaultQuery[key]
- })
- // 清理不在默认查询中的字段
- Object.keys(queryForm).forEach(key => {
- if (!(key in defaultQuery)) {
- delete queryForm[key]
- }
- })
- getDataList(true)
- }
- // 加载更多数据
- const loadMore = () => {
- if (noMore.value) return
- console.log("触底加载更多")
- pageNum.value++
- getDataList()
- }
- // 刷新当前页数据
- const refresh = () => {
- getDataList()
- }
- return {
- // 数据状态
- dataList,
- loading,
- noMore,
- pageNum,
- pageSize,
- queryForm,
- // 方法
- getDataList,
- handleSearch,
- resetQuery,
- loadMore,
- refresh
- }
- }
|