loading.ts 737 B

1234567891011121314151617181920
  1. import { Loading } from 'bill/index'
  2. import { defineAsyncComponent } from 'vue'
  3. import type { AsyncComponentLoader, Component } from 'vue'
  4. export const loadPack = <T, K extends (...args: any) => Promise<T>>(fn: K | Promise<T>): Promise<T> => {
  5. Loading.show()
  6. const ret = typeof fn === 'function' ? fn() : fn
  7. ret.finally(() => Loading.hide())
  8. return ret
  9. }
  10. export const createLoadPack = <T, K extends (...args: any) => Promise<T>>(fn: K): K =>
  11. ((...args) => loadPack(() => fn(...args))) as K
  12. export const loadComponent = <T extends Component>(loader: AsyncComponentLoader<T>) =>
  13. defineAsyncComponent(createLoadPack(loader))
  14. export const showLoad = () => Loading.show()
  15. export const hideLoad = () => Loading.hide()