loading.ts 858 B

12345678910111213141516171819202122232425
  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. if (ret.finally) {
  8. ret.finally(() => Loading.hide())
  9. } else {
  10. ret.then(() => Loading.hide())
  11. ret.catch(() => Loading.hide())
  12. }
  13. return ret
  14. }
  15. export const createLoadPack = <T, K extends (...args: any) => Promise<T>>(fn: K): K =>
  16. ((...args) => loadPack(() => fn(...args))) as K
  17. export const loadComponent = <T extends Component>(loader: AsyncComponentLoader<T>) =>
  18. defineAsyncComponent(createLoadPack(loader))
  19. export const showLoad = () => Loading.show()
  20. export const hideLoad = () => Loading.hide()