From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/mall/statistics/member/components/MemberTerminalCard.vue | 68 ++++++++++++++++++++++++++++++++++
1 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/src/views/mall/statistics/member/components/MemberTerminalCard.vue b/src/views/mall/statistics/member/components/MemberTerminalCard.vue
new file mode 100644
index 0000000..5451f49
--- /dev/null
+++ b/src/views/mall/statistics/member/components/MemberTerminalCard.vue
@@ -0,0 +1,68 @@
+<template>
+ <el-card shadow="never" v-loading="loading">
+ <template #header>
+ <CardTitle title="浼氬憳缁堢" />
+ </template>
+ <Echart :height="300" :options="terminalChartOptions" />
+ </el-card>
+</template>
+<script lang="ts" setup>
+import * as MemberStatisticsApi from '@/api/mall/statistics/member'
+import { EChartsOption } from 'echarts'
+import { MemberTerminalStatisticsRespVO } from '@/api/mall/statistics/member'
+import { DICT_TYPE, DictDataType, getIntDictOptions } from '@/utils/dict'
+import { CardTitle } from '@/components/Card'
+
+/** 浼氬憳缁堢鍗$墖 */
+defineOptions({ name: 'MemberTerminalCard' })
+
+const loading = ref(true) // 鍔犺浇涓�
+
+/** 浼氬憳缁堢缁熻鍥鹃厤缃� */
+const terminalChartOptions = reactive<EChartsOption>({
+ tooltip: {
+ trigger: 'item',
+ confine: true,
+ formatter: '{a} <br/>{b} : {c} ({d}%)'
+ },
+ legend: {
+ orient: 'vertical',
+ left: 'right'
+ },
+ series: [
+ {
+ name: '浼氬憳缁堢',
+ type: 'pie',
+ label: {
+ show: false
+ },
+ labelLine: {
+ show: false
+ },
+ data: []
+ }
+ ]
+}) as EChartsOption
+
+/** 鎸夌収缁堢锛屾煡璇細鍛樼粺璁″垪琛� */
+const getMemberTerminalStatisticsList = async () => {
+ loading.value = true
+ const list = await MemberStatisticsApi.getMemberTerminalStatisticsList()
+ const dictDataList = getIntDictOptions(DICT_TYPE.TERMINAL)
+ terminalChartOptions.series![0].data = dictDataList.map((dictData: DictDataType) => {
+ const userCount = list.find(
+ (item: MemberTerminalStatisticsRespVO) => item.terminal === dictData.value
+ )?.userCount
+ return {
+ name: dictData.label,
+ value: userCount || 0
+ }
+ })
+ loading.value = false
+}
+
+/** 鍒濆鍖� **/
+onMounted(() => {
+ getMemberTerminalStatisticsList()
+})
+</script>
--
Gitblit v1.8.0