34 lines
806 B
JavaScript
34 lines
806 B
JavaScript
import { computed, ref, watch } from "vue";
|
|
import useDebounce from '@/utils/useDebounce'
|
|
|
|
export default function usePageList(callback, options = {}) {
|
|
const keyword = ref('')
|
|
const list = ref([])
|
|
const page = ref(1)
|
|
const pageSize = ref(options.pageSize || 20)
|
|
const pages = ref(0);
|
|
const loading = ref(false)
|
|
const total = ref(0)
|
|
|
|
const hasMore = computed(() => page.value < pages.value)
|
|
|
|
const handleKeywordChange = useDebounce(() => {
|
|
getList()
|
|
}, options.debounce || 1000)
|
|
|
|
function changePage(p) {
|
|
if (loading.value) return
|
|
page.value = p
|
|
getList()
|
|
}
|
|
|
|
function getList() {
|
|
typeof callback === 'function' && callback()
|
|
}
|
|
|
|
watch(keyword, handleKeywordChange);
|
|
|
|
return { total, page, pageSize, keyword, list, pages, changePage, loading, hasMore }
|
|
|
|
}
|