import { api } from '@/utils/request' import type { DashboardOverview, DashboardTrendPoint, DashboardTrendParams, DashboardBreakdownItem, DashboardBreakdownParams, } from '@/types/api' export const useDashboardStore = defineStore('dashboard', () => { // ─── Overview ─── const overview = ref(null) const overviewLoading = ref(false) const overviewError = ref('') // ─── Trend ─── const trendData = ref([]) const trendLoading = ref(false) const trendError = ref('') const trendGroupBy = ref<'day' | 'week' | 'month'>('day') const trendDataType = ref(undefined) const trendFrom = ref(undefined) const trendTo = ref(undefined) // ─── Breakdown ─── const breakdownData = ref([]) const breakdownLoading = ref(false) const breakdownError = ref('') const breakdownDimension = ref<'company' | 'platform' | 'store'>('company') const breakdownDataType = ref(undefined) const breakdownFrom = ref(undefined) const breakdownTo = ref(undefined) async function fetchOverview() { overviewLoading.value = true overviewError.value = '' try { overview.value = await api.get('/api/v1/dashboard/overview') } catch (err: unknown) { const msg = err instanceof Error ? err.message : '获取概览数据失败' overviewError.value = msg message.error(msg) } finally { overviewLoading.value = false } } async function fetchTrend() { trendLoading.value = true trendError.value = '' try { const params: DashboardTrendParams = { group_by: trendGroupBy.value, data_type: trendDataType.value, from: trendFrom.value, to: trendTo.value, } trendData.value = await api.get( '/api/v1/dashboard/trend', params as unknown as Record, ) } catch (err: unknown) { const msg = err instanceof Error ? err.message : '获取趋势数据失败' trendError.value = msg message.error(msg) } finally { trendLoading.value = false } } async function fetchBreakdown() { breakdownLoading.value = true breakdownError.value = '' try { const params: DashboardBreakdownParams = { dimension: breakdownDimension.value, data_type: breakdownDataType.value, from: breakdownFrom.value, to: breakdownTo.value, } breakdownData.value = await api.get( '/api/v1/dashboard/breakdown', params as unknown as Record, ) } catch (err: unknown) { const msg = err instanceof Error ? err.message : '获取分维度数据失败' breakdownError.value = msg message.error(msg) } finally { breakdownLoading.value = false } } async function fetchAll() { await Promise.allSettled([fetchOverview(), fetchTrend(), fetchBreakdown()]) } return { // Overview overview, overviewLoading, overviewError, // Trend trendData, trendLoading, trendError, trendGroupBy, trendDataType, trendFrom, trendTo, // Breakdown breakdownData, breakdownLoading, breakdownError, breakdownDimension, breakdownDataType, breakdownFrom, breakdownTo, // Actions fetchOverview, fetchTrend, fetchBreakdown, fetchAll, } })