TradeStatisticValue.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <template>
  2. <div class="flex flex-col gap-2 bg-[var(--el-bg-color-overlay)] p-6">
  3. <div class="flex items-center justify-between text-gray-500">
  4. <span>{{ title }}</span>
  5. <el-tooltip :content="tooltip" placement="top-start" v-if="tooltip">
  6. <Icon icon="ep:warning" />
  7. </el-tooltip>
  8. </div>
  9. <div class="mb-4 text-3xl">
  10. <CountTo :prefix="prefix" :end-val="value" :decimals="decimals" />
  11. </div>
  12. <div class="flex flex-row gap-1 text-sm">
  13. <span class="text-gray-500">环比</span>
  14. <span :class="toNumber(percent) > 0 ? 'text-red-500' : 'text-green-500'">
  15. {{ Math.abs(toNumber(percent)) }}%
  16. <Icon :icon="toNumber(percent) > 0 ? 'ep:caret-top' : 'ep:caret-bottom'" class="!text-sm" />
  17. </span>
  18. </div>
  19. </div>
  20. </template>
  21. <script lang="ts" setup>
  22. import { propTypes } from '@/utils/propTypes'
  23. import { toNumber } from 'lodash-es'
  24. /** 交易统计值组件 */
  25. defineOptions({ name: 'TradeStatisticValue' })
  26. defineProps({
  27. tooltip: propTypes.string.def(''),
  28. title: propTypes.string.def(''),
  29. prefix: propTypes.string.def(''),
  30. value: propTypes.number.def(0),
  31. decimals: propTypes.number.def(0),
  32. percent: propTypes.oneOfType([Number, String]).def(0)
  33. })
  34. </script>