index.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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?.registerUserCount || 0"
  36. :reference="userComparison?.reference?.registerUserCount || 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 { DataComparisonRespVO } from '@/api/mall/statistics/common'
  70. import { TradeOrderSummaryRespVO } from '@/api/mall/statistics/trade'
  71. import { MemberCountRespVO } from '@/api/mall/statistics/member'
  72. import { fenToYuan } from '@/utils'
  73. import ComparisonCard from './components/ComparisonCard.vue'
  74. import MemberStatisticsCard from './components/MemberStatisticsCard.vue'
  75. import OperationDataCard from './components/OperationDataCard.vue'
  76. import ShortcutCard from './components/ShortcutCard.vue'
  77. import TradeTrendCard from './components/TradeTrendCard.vue'
  78. import MemberTerminalCard from '@/views/mall/statistics/member/components/MemberTerminalCard.vue'
  79. import MemberFunnelCard from '@/views/mall/statistics/member/components/MemberFunnelCard.vue'
  80. /** 商城首页 */
  81. defineOptions({ name: 'MallHome' })
  82. const loading = ref(true) // 加载中
  83. const orderComparison = ref<DataComparisonRespVO<TradeOrderSummaryRespVO>>() // 交易对照数据
  84. const userComparison = ref<DataComparisonRespVO<MemberCountRespVO>>() // 用户对照数据
  85. /** 查询交易对照卡片数据 */
  86. const getOrderComparison = async () => {
  87. orderComparison.value = await TradeStatisticsApi.getOrderComparison()
  88. }
  89. /** 查询会员用户数量对照卡片数据 */
  90. const getUserCountComparison = async () => {
  91. userComparison.value = await MemberStatisticsApi.getUserCountComparison()
  92. }
  93. /** 初始化 **/
  94. onMounted(async () => {
  95. loading.value = true
  96. await Promise.all([getOrderComparison(), getUserCountComparison()])
  97. loading.value = false
  98. })
  99. </script>
  100. <style lang="scss" scoped>
  101. .row {
  102. .el-col {
  103. margin-bottom: 1rem;
  104. }
  105. }
  106. </style>