ClickShow.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <div>
  3. <div class="click-header">
  4. <div class="click-title">点击量</div>
  5. <el-tag type="success" class="click-time">日</el-tag>
  6. </div>
  7. <el-divider />
  8. <div>
  9. <div class="click-number">{{ clickData?.todayClicks }}</div>
  10. <div class="click-compare">
  11. <div class="click-detail">日同比</div>
  12. <div>{{ ratio === undefined? '':ratio + '%' }}</div>
  13. <el-icon v-if="Number(ratio) > 0" class="ratio-ico-up"><Top /></el-icon>
  14. <el-icon v-else-if="Number(ratio) < 0" class="ratio-ico-down"><Bottom /></el-icon>
  15. </div>
  16. </div>
  17. <el-divider />
  18. <div class="click-total">
  19. <div class="click-detail">总点击量</div>
  20. <div style="margin-left: 22px">{{ clickData?.allClicks }}</div>
  21. </div>
  22. </div>
  23. </template>
  24. <script setup lang="ts">
  25. import { Top, Bottom } from '@element-plus/icons-vue';
  26. import { computed, onMounted } from 'vue';
  27. import usePanel from '../hooks/usePanel';
  28. const usePanelInfo = usePanel();
  29. const { getPanelUserRecord, clickData } = usePanelInfo;
  30. onMounted(() => {
  31. getPanelUserRecord();
  32. });
  33. const ratio = computed(() => {
  34. if (!clickData.value?.yesterdayClicks) {
  35. return undefined;
  36. }
  37. if (clickData.value?.yesterdayClicks! === 0 && clickData.value?.todayClicks! !== 0) {
  38. return 100;
  39. } else if (clickData.value?.yesterdayClicks! === 0 && clickData.value?.todayClicks! === 0) {
  40. return 0;
  41. } else {
  42. return Number(
  43. ((clickData.value?.todayClicks! - clickData.value?.yesterdayClicks!) * 100) /
  44. clickData.value?.yesterdayClicks!,
  45. ).toFixed(2);
  46. }
  47. });
  48. </script>
  49. <style scoped>
  50. .click-header {
  51. display: flex;
  52. justify-content: space-between;
  53. }
  54. .click-title {
  55. font-size: 16px;
  56. margin-left: 24px;
  57. margin-top: 17px;
  58. margin-bottom: 10px;
  59. }
  60. .click-time {
  61. margin-top: 18px;
  62. margin-right: 23px;
  63. font-size: 12px;
  64. }
  65. .el-divider--horizontal {
  66. margin: 0px;
  67. }
  68. .click-number {
  69. margin-top: 8px;
  70. margin-left: 24px;
  71. margin-bottom: 20px;
  72. font-size: 30px;
  73. }
  74. .click-compare {
  75. margin-left: 24px;
  76. margin-bottom: 20px;
  77. display: flex;
  78. }
  79. .click-detail {
  80. font-size: 14px;
  81. margin-right: 8px;
  82. color: rgba(0, 0, 0, 0.65);
  83. }
  84. .ratio-ico-up {
  85. color: red;
  86. margin-top: 4px;
  87. }
  88. .ratio-ico-right {
  89. margin-top: 4px;
  90. }
  91. .ratio-ico-down {
  92. color: green;
  93. margin-top: 3px;
  94. }
  95. .click-total {
  96. margin-left: 24px;
  97. margin-top: 8px;
  98. display: flex;
  99. }
  100. </style>