1
0

BasicLoading.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <section class="basic-loading">
  3. <img
  4. src="/@/assets/images/loading.svg"
  5. alt=""
  6. :height="getLoadingIconSize"
  7. :width="getLoadingIconSize"
  8. />
  9. <span class="mt-4" v-if="tip"> {{ tip }}</span>
  10. </section>
  11. </template>
  12. <script lang="ts">
  13. import type { PropType } from 'vue';
  14. // components
  15. import { defineComponent, computed } from 'vue';
  16. import { SizeEnum, sizeMap } from '/@/enums/sizeEnum';
  17. import { BasicLoadingProps } from './type';
  18. export default defineComponent({
  19. inheritAttrs: false,
  20. name: 'BasicLoading',
  21. props: {
  22. tip: {
  23. type: String as PropType<string>,
  24. default: '',
  25. },
  26. size: {
  27. type: String as PropType<SizeEnum>,
  28. default: SizeEnum.DEFAULT,
  29. validator: (v: SizeEnum): boolean => {
  30. return [SizeEnum.DEFAULT, SizeEnum.SMALL, SizeEnum.LARGE].includes(v);
  31. },
  32. },
  33. },
  34. setup(props: BasicLoadingProps) {
  35. const getLoadingIconSize = computed(() => {
  36. const { size } = props;
  37. return sizeMap.get(size);
  38. });
  39. return { getLoadingIconSize };
  40. },
  41. });
  42. </script>
  43. <style lang="less" scoped>
  44. .basic-loading {
  45. display: flex;
  46. justify-content: center;
  47. align-items: center;
  48. flex-direction: column;
  49. }
  50. </style>