vue3 管理后台,列表查询基础封装

429 阅读1分钟

vue3 管理后台,列表查询基础封装

// 列表初始化查询
export const useList = ({
  params, // 查询参数
  query, // 查询方法
  immediate = true, // 是否立即执行
}) => {
  const { proxy } = getCurrentInstance()
  
  const dataList = ref([]) // 列表数据
  const loading = ref(false) // 是否加载
  const total = ref(0) // 总数
  
  // 查询参数
  const queryParams = reactive({
    ...params,
    pageNum: 1,
    pageSize: 10,
  })
  
  // 获取列表
  const getList = async () => {
    try {
      loading.value = true
      const {
        data: { records = [], total: totalNumber = 0 },
      } = await query({
        ...queryParams,
      })
      dataList.value = records
      total.value = totalNumber
    } catch (e) {
      dataList.value = []
      total.value = 0
      throw e
    } finally {
      loading.value = false
    }
  }
  
  // 查询筛选条件
  const handleQuery = async () => {
    queryParams.pageNum = 1
    await getList()
  }
  
  // 重置筛选条件
  const resetQuery = async () => {
    proxy.resetForm('queryRef')
    await handleQuery()
  }
  
  onMounted(() => immediate && getList())
  
  return {
    dataList,
    loading,
    total,
    queryParams,
    getList,
    handleQuery,
    resetQuery,
  }
}

使用方法:

// 列表
const table = useList({
  params: { // 表示筛选条件
      name: ''
  },
  // getVillageListApi 表示封装的接口请求方法
  query: (params) => getVillageListApi(params),
})
const { dataList, loading, total, queryParams, getList, handleQuery, resetQuery } = table