1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { ref, reactive } from "vue";
- import { ElMessage } from "element-plus";
- import { useNav } from "/@/layout/hooks/nav";
- 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 === 0) {
- handler();
- } else if (c >= 100 && c <= 140) {
- logout();
- } else {
- ElMessage.error(message);
- }
- }
- return responseHandle;
- }
- interface ResponseType<D> {
- data: D;
- message: string;
- code: number;
- }
- export function useAsync<D>({
- initalData,
- initalPagination,
- isList = false,
- success,
- fall
- }: {
- initalData?: D;
- isList?: boolean;
- initalPagination?: any;
- success?: () => void;
- fall?: () => void;
- }) {
- const data = ref<D>(initalData);
- 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<ResponseType<D>>) {
- setloading(true);
- return promise
- .then(response => {
- setloading(false);
- const { code, message, data } = response;
- responseHandle({
- code,
- message,
- handler: () => {
- setData(isList ? (data as any).list : data);
- pagination.total = (data as any).count;
- success && success();
- }
- });
- })
- .catch(() => {
- fall && fall();
- });
- }
- return {
- run,
- data,
- loading,
- pagination,
- setData,
- getPaginationParams
- };
- }
|