Files
hfb_sys/frontend/src/features/admin/composables/useAdminTable.ts
T

44 lines
1020 B
TypeScript

import { ref, type Ref } from 'vue'
import { debugError } from '@/shared/utils/debug'
interface AdminQueryOptions<T> {
fetchFn: () => Promise<T>
immediate?: boolean
initialData?: T
}
interface AdminQueryResult<T> {
loading: Ref<boolean>
error: Ref<string | null>
data: Ref<T>
load: () => Promise<void>
}
export function useAdminQuery<T>(options: AdminQueryOptions<T>): AdminQueryResult<T> {
const loading = ref(false)
const error = ref<string | null>(null)
const data = ref<T>(options.initialData as T) as Ref<T>
async function load() {
loading.value = true
error.value = null
try {
data.value = await options.fetchFn()
} catch (e) {
error.value = e instanceof Error ? e.message : '加载失败'
debugError('加载后台表格数据失败', e)
} finally {
loading.value = false
}
}
if (options.immediate !== false) {
load()
}
return { loading, error, data, load }
}
// 保持向后兼容
export const useAdminTable = useAdminQuery