UsageProgressLine.vue 972 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <script setup lang="ts">
  2. import { computed } from 'vue'
  3. const props = withDefaults(defineProps<{
  4. percent?: number
  5. }>(), {
  6. percent: 0,
  7. })
  8. const color = computed(() => {
  9. if (props.percent < 80)
  10. return '#1890ff'
  11. else if (props.percent >= 80 && props.percent < 90)
  12. return '#faad14'
  13. else
  14. return '#ff6385'
  15. })
  16. const fixed_percent = computed(() => {
  17. return Number.parseFloat(props.percent.toFixed(2))
  18. })
  19. </script>
  20. <template>
  21. <div>
  22. <div>
  23. <span class="slot-icon"><slot name="icon" /></span>
  24. <span class="slot">
  25. <slot />
  26. </span>
  27. <span class="dot"> ·</span> {{ `${fixed_percent}%` }}
  28. </div>
  29. <AProgress
  30. :percent="fixed_percent"
  31. :stroke-color="color"
  32. :show-info="false"
  33. />
  34. </div>
  35. </template>
  36. <style scoped lang="less">
  37. .slot-icon {
  38. margin-right: 5px;
  39. }
  40. @media (max-width: 1000px) and (min-width: 600px) {
  41. .dot {
  42. display: none;
  43. }
  44. .slot {
  45. display: none;
  46. }
  47. }
  48. </style>