import { getCurrentInstance, watch, ref } from 'vue' import mitt from './bus' export default function () { const data = ref([]) const total = ref(0) const currentPage = ref(1) const pageSize = ref(1) const { props } = getCurrentInstance() as any pageSize.value = props.pagination.pageSize let pages = { [props.pageKey.size]: props.pagination.currentPage, [props.pageKey.limit]: props.pagination.pageSize, } watch(props.toolValue, v => { const tempPages = { ...pages } for (const key in v) { if (v[key] !== '') { tempPages[key] = v[key] } else { if (tempPages[key]) delete tempPages[key] } } pages = tempPages }, { deep: true }) function getValueByKey (key, res) { return props .pageKey[key] .split('.') .reduce((pre: any, curr: any) => pre[curr], res) } async function getData () { const res = await props.getData(pages) data.value = getValueByKey('data', res) total.value = getValueByKey('total', res) mitt.emit('dataChange', data.value) } const handleSizeChange = (e: number) => { pages[props.pageKey.limit] = e pageSize.value = e getData() } const handleCurrentChange = (e: number) => { pages[props.pageKey.size] = e currentPage.value = e getData() } const search = () => getData() getData() return { handleSizeChange, handleCurrentChange, data, search, total, currentPage, pageSize, } }