diff --git a/frontend/src/components/DashboardByTypeCards.vue b/frontend/src/components/DashboardByTypeCards.vue index 71445bc..7db4f5a 100644 --- a/frontend/src/components/DashboardByTypeCards.vue +++ b/frontend/src/components/DashboardByTypeCards.vue @@ -5,6 +5,7 @@ import { DollarOutlined, DatabaseOutlined, } from '@ant-design/icons-vue' +import type { Component } from 'vue' import type { DataTypeCount } from '@/types/api' defineProps<{ @@ -12,7 +13,7 @@ defineProps<{ loading: boolean }>() -const iconMap: Record> = { +const iconMap: Record = { order: ShoppingCartOutlined, product: ShoppingOutlined, refund: DollarOutlined, diff --git a/frontend/src/components/DashboardTrendChart.vue b/frontend/src/components/DashboardTrendChart.vue index b58084f..5c51997 100644 --- a/frontend/src/components/DashboardTrendChart.vue +++ b/frontend/src/components/DashboardTrendChart.vue @@ -66,11 +66,16 @@ function handleDataTypeChange(val: unknown) { emit('update:dataType', (val as string) || undefined) } -watch(flatData, () => { - if (chart) { - chart.changeData(flatData.value) +watch(flatData, (newData) => { + if (newData.length === 0 && chart) { + chart.destroy() + chart = null + } else if (!chart && chartRef.value && newData.length > 0) { + nextTick(() => createChart()) + } else if (chart) { + chart.changeData(newData) } -}) +}, { flush: 'post' }) onMounted(() => { if (props.data.length > 0) { @@ -78,15 +83,6 @@ onMounted(() => { } }) -watch( - () => props.data, - (newVal) => { - if (newVal.length > 0 && !chart) { - nextTick(() => createChart()) - } - }, -) - onBeforeUnmount(() => { if (chart) { chart.destroy() diff --git a/frontend/src/stores/dashboard.ts b/frontend/src/stores/dashboard.ts index 5b89480..4f3f194 100644 --- a/frontend/src/stores/dashboard.ts +++ b/frontend/src/stores/dashboard.ts @@ -2,9 +2,7 @@ import { api } from '@/utils/request' import type { DashboardOverview, DashboardTrendPoint, - DashboardTrendParams, DashboardBreakdownItem, - DashboardBreakdownParams, } from '@/types/api' export const useDashboardStore = defineStore('dashboard', () => { @@ -49,7 +47,7 @@ export const useDashboardStore = defineStore('dashboard', () => { trendLoading.value = true trendError.value = '' try { - const params: DashboardTrendParams = { + const params: Record = { group_by: trendGroupBy.value, data_type: trendDataType.value, from: trendFrom.value, @@ -57,7 +55,7 @@ export const useDashboardStore = defineStore('dashboard', () => { } trendData.value = await api.get( '/api/v1/dashboard/trend', - params as unknown as Record, + params, ) } catch (err: unknown) { const msg = err instanceof Error ? err.message : '获取趋势数据失败' @@ -72,7 +70,7 @@ export const useDashboardStore = defineStore('dashboard', () => { breakdownLoading.value = true breakdownError.value = '' try { - const params: DashboardBreakdownParams = { + const params: Record = { dimension: breakdownDimension.value, data_type: breakdownDataType.value, from: breakdownFrom.value, @@ -80,7 +78,7 @@ export const useDashboardStore = defineStore('dashboard', () => { } breakdownData.value = await api.get( '/api/v1/dashboard/breakdown', - params as unknown as Record, + params, ) } catch (err: unknown) { const msg = err instanceof Error ? err.message : '获取分维度数据失败' diff --git a/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json b/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json new file mode 100644 index 0000000..cc7716c --- /dev/null +++ b/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json @@ -0,0 +1 @@ +{"version":"4.1.0","results":[[":frontend/src/pages/failed-messages/__tests__/index.spec.ts",{"duration":0,"failed":true}]]} \ No newline at end of file