UNPKG

@oiij/naive-ui

Version:

Some Composable Functions And Components for Vue 3

101 lines (99 loc) 2.75 kB
import { createEventHook } from "@vueuse/core"; import { computed, ref } from "vue"; import useRequest from "vue-hooks-plus/es/useRequest"; //#region src/composables/useDataRequest.ts function useDataRequest(api, options) { const { defaultParams, manual, fields, requestOptions, requestPlugins } = options ?? {}; const _fields = { page: "page", pageSize: "pageSize", list: "list", count: "count", ...fields }; const pagination = ref({ page: defaultParams?.[_fields.page] ?? 1, pageSize: defaultParams?.[_fields.pageSize] ?? 10, itemCount: 0 }); const onBeforeEvent = createEventHook(); const onSuccessEvent = createEventHook(); const onErrorEvent = createEventHook(); const onFinallyEvent = createEventHook(); const { loading, data, error, params, run, runAsync, refresh, refreshAsync, cancel, mutate } = useRequest(api, { defaultParams: [{ [_fields.page]: pagination.value.page, [_fields.pageSize]: pagination.value.pageSize, ...defaultParams }], manual, ...requestOptions, onBefore: (params$1) => { requestOptions?.onBefore?.(params$1); onBeforeEvent.trigger(params$1); }, onSuccess: (data$1, params$1) => { requestOptions?.onSuccess?.(data$1, params$1); onSuccessEvent.trigger(data$1, params$1); if (_fields.page in params$1?.[0]) { const _page = Number(params$1?.[0][_fields.page]); if (!Number.isNaN(_page)) pagination.value.page = _page; } if (_fields.pageSize in params$1?.[0]) { const _pageSize = Number(params$1?.[0][_fields.pageSize]); if (!Number.isNaN(_pageSize)) pagination.value.pageSize = _pageSize; } if (_fields.count in data$1) { const _count = Number(data$1[_fields.count]); if (!Number.isNaN(_count)) pagination.value.itemCount = _count; } }, onError: (err, params$1) => { requestOptions?.onError?.(err, params$1); onErrorEvent.trigger(err, params$1); }, onFinally: (params$1, data$1, err) => { requestOptions?.onFinally?.(params$1, data$1, err); onFinallyEvent.trigger(params$1, data$1, err); } }, requestPlugins); const list = computed(() => data.value?.[_fields.list] ?? []); function setParams(_params) { Object.assign(params.value?.[0], _params); } function runParams(_params) { return run({ ...params.value?.[0], ..._params }); } function runParamsAsync(_params) { return runAsync({ ...params.value?.[0], ..._params }); } return { loading, data, error, params, list, pagination, run, runAsync, refresh, refreshAsync, cancel, mutate, setParams, runParams, runParamsAsync, onBefore: onBeforeEvent.on, onSuccess: onSuccessEvent.on, onError: onErrorEvent.on, onFinally: onFinallyEvent.on }; } //#endregion export { useDataRequest };