index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <div class="flex flex-col">
  3. <!-- 数据对照 -->
  4. <el-row :gutter="16" class="row">
  5. <el-col :md="6" :sm="12" :xs="24" :loading="loading">
  6. <ComparisonCard
  7. tag="今日"
  8. title="销售额"
  9. prefix="¥"
  10. ::decimals="2"
  11. :value="fenToYuan(orderComparison?.value?.orderPayPrice || 0)"
  12. :reference="fenToYuan(orderComparison?.reference?.orderPayPrice || 0)"
  13. />
  14. </el-col>
  15. <el-col :md="6" :sm="12" :xs="24" :loading="loading">
  16. <ComparisonCard
  17. tag="今日"
  18. title="用户访问量"
  19. :value="userComparison?.value?.visitUserCount || 0"
  20. :reference="userComparison?.reference?.visitUserCount || 0"
  21. />
  22. </el-col>
  23. <el-col :md="6" :sm="12" :xs="24" :loading="loading">
  24. <ComparisonCard
  25. tag="今日"
  26. title="订单量"
  27. :value="fenToYuan(orderComparison?.value?.orderPayCount || 0)"
  28. :reference="fenToYuan(orderComparison?.reference?.orderPayCount || 0)"
  29. />
  30. </el-col>
  31. <el-col :md="6" :sm="12" :xs="24" :loading="loading">
  32. <ComparisonCard
  33. tag="今日"
  34. title="新增用户"
  35. :value="userComparison?.value?.createUserCount || 0"
  36. :reference="userComparison?.reference?.createUserCount || 0"
  37. />
  38. </el-col>
  39. </el-row>
  40. <el-row :gutter="16" class="row">
  41. <el-col :md="12">
  42. <!-- 快捷入口 -->
  43. <ShortcutCard />
  44. </el-col>
  45. <el-col :md="12">
  46. <!-- 运营数据 -->
  47. <OperationDataCard />
  48. </el-col>
  49. </el-row>
  50. <el-row :gutter="16" class="mb-4">
  51. <el-col :md="18" :sm="24">
  52. <!-- 会员概览 -->
  53. <MemberFunnelCard />
  54. </el-col>
  55. <el-col :md="6" :sm="24">
  56. <!-- 会员终端 -->
  57. <MemberTerminalCard />
  58. </el-col>
  59. </el-row>
  60. <!-- 交易量趋势 -->
  61. <TradeTrendCard class="mb-4" />
  62. <!-- 会员统计 -->
  63. <MemberStatisticsCard />
  64. </div>
  65. </template>
  66. <script lang="ts" setup>
  67. import * as TradeStatisticsApi from '@/api/mall/statistics/trade'
  68. import * as MemberStatisticsApi from '@/api/mall/statistics/member'
  69. import {
  70. TradeOrderSummaryRespVO,
  71. TradeStatisticsComparisonRespVO
  72. } from '@/api/mall/statistics/trade'
  73. import { MemberCountRespVO } from '@/api/mall/statistics/member'
  74. import { fenToYuan } from '@/utils'
  75. import ComparisonCard from './components/ComparisonCard.vue'
  76. import MemberStatisticsCard from './components/MemberStatisticsCard.vue'
  77. import OperationDataCard from './components/OperationDataCard.vue'
  78. import ShortcutCard from './components/ShortcutCard.vue'
  79. import TradeTrendCard from './components/TradeTrendCard.vue'
  80. import MemberTerminalCard from '@/views/mall/statistics/member/components/MemberTerminalCard.vue'
  81. import MemberFunnelCard from '@/views/mall/statistics/member/components/MemberFunnelCard.vue'
  82. /** 商城首页 */
  83. defineOptions({ name: 'MallHome' })
  84. const loading = ref(true) // 加载中
  85. const orderComparison = ref<TradeStatisticsComparisonRespVO<TradeOrderSummaryRespVO>>() // 交易对照数据
  86. const userComparison = ref<TradeStatisticsComparisonRespVO<MemberCountRespVO>>() // 用户对照数据
  87. /** 查询交易对照卡片数据 */
  88. const getOrderComparison = async () => {
  89. orderComparison.value = await TradeStatisticsApi.getOrderComparison()
  90. }
  91. /** 查询会员用户数量对照卡片数据 */
  92. const getUserCountComparison = async () => {
  93. userComparison.value = await MemberStatisticsApi.getUserCountComparison()
  94. }
  95. /** 初始化 **/
  96. onMounted(async () => {
  97. loading.value = true
  98. await Promise.all([getOrderComparison(), getUserCountComparison()])
  99. loading.value = false
  100. })
  101. </script>
  102. <style lang="scss" scoped>
  103. .row {
  104. .el-col {
  105. margin-bottom: 1rem;
  106. }
  107. }
  108. </style>