12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { ref, reactive, unref } from "vue";
- import { ElMessage } from "element-plus";
- import { useNav } from "/@/layout/hooks/nav";
- import { IDataType } from "/@/api/types";
- type Params = {
- code: number;
- message: string;
- handler: () => void;
- };
- export function useResponseHandle() {
- const { logout } = useNav();
- function responseHandle({ code, message, handler }: Params) {
- const c = Number(code);
- if (c === 1) {
- handler();
- } else if (c >= 100 && c <= 140) {
- logout();
- } else {
- ElMessage.error(message);
- }
- }
- return responseHandle;
- }
- export function useAsync<D = any>({
- initalData,
- initalPagination,
- isList = false,
- success
- }: {
- initalData?: D;
- isList?: boolean;
- initalPagination?: any;
- success?: (data?: D) => void;
- } = {}) {
- const data = ref<D>(initalData);
- const isError = ref(false);
- const loading = ref(false);
- const pagination = reactive(initalPagination || {});
- const responseHandle = useResponseHandle();
- const setData = (_data: D) => (data.value = _data as any);
- const setloading = (_state: boolean) => (loading.value = _state);
- function getPaginationParams() {
- const { pageSize: size, currentPage: page } = pagination;
- return {
- size,
- page
- };
- }
- function run(promise: Promise<IDataType<D>>) {
- setloading(true);
- return promise.then(response => {
- setloading(false);
- const { code: _code, message, data } = response;
- if (String(_code) !== "0") isError.value = true;
- responseHandle({
- code: _code,
- message,
- handler: () => {
- setData(isList ? (data as any).list : data);
- isError.value = false;
- if (pagination && data && data.count) pagination.total = (data as any).count;
- success && success(unref(data));
- }
- });
- });
- }
- return {
- run,
- data,
- setData,
- loading,
- isError,
- setloading,
- pagination,
- getPaginationParams
- };
- }
|