MemberTerminalCard.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <el-card shadow="never" v-loading="loading">
  3. <template #header>
  4. <CardTitle title="会员终端" />
  5. </template>
  6. <Echart :height="300" :options="terminalChartOptions" />
  7. </el-card>
  8. </template>
  9. <script lang="ts" setup>
  10. import * as MemberStatisticsApi from '@/api/mall/statistics/member'
  11. import { EChartsOption } from 'echarts'
  12. import { MemberTerminalStatisticsRespVO } from '@/api/mall/statistics/member'
  13. import { DICT_TYPE, DictDataType, getIntDictOptions } from '@/utils/dict'
  14. import { CardTitle } from '@/components/Card'
  15. /** 会员终端卡片 */
  16. defineOptions({ name: 'MemberTerminalCard' })
  17. const loading = ref(true) // 加载中
  18. /** 会员终端统计图配置 */
  19. const terminalChartOptions = reactive<EChartsOption>({
  20. tooltip: {
  21. trigger: 'item',
  22. confine: true,
  23. formatter: '{a} <br/>{b} : {c} ({d}%)'
  24. },
  25. legend: {
  26. orient: 'vertical',
  27. left: 'right'
  28. },
  29. roseType: 'area',
  30. series: [
  31. {
  32. name: '会员终端',
  33. type: 'pie',
  34. label: {
  35. show: false
  36. },
  37. labelLine: {
  38. show: false
  39. },
  40. data: []
  41. }
  42. ]
  43. }) as EChartsOption
  44. /** 按照终端,查询会员统计列表 */
  45. const getMemberTerminalStatisticsList = async () => {
  46. loading.value = true
  47. const list = await MemberStatisticsApi.getMemberTerminalStatisticsList()
  48. const dictDataList = getIntDictOptions(DICT_TYPE.TERMINAL)
  49. terminalChartOptions.series![0].data = dictDataList.map((dictData: DictDataType) => {
  50. const userCount = list.find(
  51. (item: MemberTerminalStatisticsRespVO) => item.terminal === dictData.value
  52. )?.userCount
  53. return {
  54. name: dictData.label,
  55. value: userCount || 0
  56. }
  57. })
  58. loading.value = false
  59. }
  60. /** 初始化 **/
  61. onMounted(() => {
  62. getMemberTerminalStatisticsList()
  63. })
  64. </script>