This commit is contained in:
2025-03-27 15:38:21 +08:00
parent 3c85d9e0e7
commit 15b26ab2d9
31 changed files with 1003 additions and 22 deletions

View File

@@ -0,0 +1,75 @@
import {ref, reactive, watch} from 'vue';
/**
*
* @param parameter
* @param api
* @param callback
* @param immediate
* @param watchParameter
*/
function useTableQuery({
parameter,
api,
callback,
immediate = true,
watchParameter = false,
}) {
const loading = ref(false);
const pagination = reactive({
current: 1,
pageSize: 20,
total: 0
});
const fetchData = async () => {
try {
loading.value = true;
const params = {
...parameter,
current: pagination.current,
pageSize: pagination.pageSize
}
const {data} = await api(params);
pagination.pageSize = data.page;
pagination.total = data.total;
callback && callback({
...data,
rows: data.rows.map(v => ({...v, key: v.id})),
});
} finally {
loading.value = false;
}
}
const initFetchData = async () => {
pagination.current = 1;
pagination.total = 0;
}
watch(
() => [pagination.current, pagination.pageSize],
() => fetchData(),
{deep: true, immediate: immediate}
)
if (watchParameter) watch(
() => parameter,
() => fetchData(),
{deep: true}
);
return {
loading,
pagination,
fetchData,
initFetchData,
}
}
export default useTableQuery;