2025-04-21 15:19:28 +08:00
|
|
|
import {reactive, ref, watch} from 'vue';
|
2025-03-27 15:38:21 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param parameter
|
|
|
|
|
* @param api
|
|
|
|
|
* @param callback
|
|
|
|
|
* @param immediate
|
|
|
|
|
* @param watchParameter
|
|
|
|
|
*/
|
|
|
|
|
function useTableQuery({
|
|
|
|
|
parameter,
|
|
|
|
|
api,
|
|
|
|
|
callback,
|
|
|
|
|
immediate = true,
|
|
|
|
|
watchParameter = false,
|
|
|
|
|
}) {
|
|
|
|
|
const loading = ref(false);
|
2025-05-12 19:45:27 +08:00
|
|
|
const vo = reactive({
|
|
|
|
|
rows: [],
|
|
|
|
|
page: 0,
|
|
|
|
|
total: 0,
|
|
|
|
|
});
|
2025-03-27 15:38:21 +08:00
|
|
|
|
|
|
|
|
const pagination = reactive({
|
2025-05-12 19:45:27 +08:00
|
|
|
page: 1,
|
2025-05-13 10:45:51 +08:00
|
|
|
pageSize: 9,
|
2025-03-27 15:38:21 +08:00
|
|
|
total: 0
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const fetchData = async () => {
|
|
|
|
|
try {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
|
|
|
|
|
const params = {
|
|
|
|
|
...parameter,
|
2025-05-12 19:45:27 +08:00
|
|
|
page: pagination.page,
|
2025-03-27 15:38:21 +08:00
|
|
|
pageSize: pagination.pageSize
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const {data} = await api(params);
|
|
|
|
|
|
|
|
|
|
pagination.pageSize = data.page;
|
|
|
|
|
pagination.total = data.total;
|
|
|
|
|
|
2025-05-12 19:45:27 +08:00
|
|
|
const _vo = {
|
2025-03-27 15:38:21 +08:00
|
|
|
...data,
|
2025-05-12 19:45:27 +08:00
|
|
|
rows: data.list.map(v => ({...v, key: v.id})),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
vo.page = _vo.page;
|
|
|
|
|
vo.total = _vo.total;
|
|
|
|
|
vo.rows = [...vo.rows, ..._vo.rows];
|
|
|
|
|
|
|
|
|
|
callback && callback(vo);
|
2025-03-27 15:38:21 +08:00
|
|
|
} finally {
|
|
|
|
|
loading.value = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initFetchData = async () => {
|
2025-05-12 19:45:27 +08:00
|
|
|
pagination.page = 1;
|
|
|
|
|
pagination.total = 0;
|
|
|
|
|
vo.page = 0;
|
|
|
|
|
vo.total = 0;
|
|
|
|
|
vo.rows.length = 0;
|
|
|
|
|
await fetchData();
|
2025-03-27 15:38:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
watch(
|
2025-05-12 19:45:27 +08:00
|
|
|
() => [pagination.page, pagination.pageSize],
|
2025-03-27 15:38:21 +08:00
|
|
|
() => fetchData(),
|
|
|
|
|
{deep: true, immediate: immediate}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if (watchParameter) watch(
|
|
|
|
|
() => parameter,
|
2025-05-12 19:45:27 +08:00
|
|
|
() => fetchData(),
|
2025-03-27 15:38:21 +08:00
|
|
|
{deep: true}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
loading,
|
|
|
|
|
pagination,
|
|
|
|
|
fetchData,
|
|
|
|
|
initFetchData,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default useTableQuery;
|