useDashboardDataApi.ts 2.09 KB
import type {
  DashboardOverviewExportResponse,
  DashboardOverviewQuery,
  DashboardOverviewResponse,
  Mail,
  Notification,
  User
} from '~/types'
import { createSharedComposable } from '@vueuse/core'

const _useDashboardDataApi = () => {
  const api = useApiGateway()

  const buildDashboardQuery = (query: DashboardOverviewQuery) => {
    const params = new URLSearchParams()

    if (query.start) {
      params.set('start', query.start)
    }

    if (query.end) {
      params.set('end', query.end)
    }

    if (query.line) {
      params.set('line', query.line)
    }

    if (query.workOrderStatus) {
      params.set('workOrderStatus', query.workOrderStatus)
    }

    const search = params.toString()
    return search.length > 0 ? `?${search}` : ''
  }

  const getCustomers = () => {
    return api.useApiFetch<User[]>('/api/customers', {
      default: () => []
    })
  }

  const getMails = () => {
    return api.useApiFetch<Mail[]>('/api/mails', {
      default: () => []
    })
  }

  const getNotifications = () => {
    return api.useApiFetch<Notification[]>('/api/notifications', {
      default: () => []
    })
  }

  const getDashboardOverview = async (query: DashboardOverviewQuery) => {
    const suffix = buildDashboardQuery(query)

    return api.request<DashboardOverviewResponse>(`/api/dashboard/overview${suffix}`, {
      method: 'GET',
      auth: true
    })
  }

  const exportDashboardOverview = async (query: DashboardOverviewQuery) => {
    const suffix = buildDashboardQuery(query)

    try {
      const result = await api.request<DashboardOverviewExportResponse>(`/api/dashboard/overview/export${suffix}`, {
        method: 'GET',
        auth: true
      })

      return result
    } catch {
      return {
        success: false,
        errorCode: 'REQUEST_FAILED',
        message: '导出失败,请稍后重试。'
      } satisfies DashboardOverviewExportResponse
    }
  }

  return {
    getCustomers,
    getMails,
    getNotifications,
    getDashboardOverview,
    exportDashboardOverview
  }
}

export const useDashboardDataApi = createSharedComposable(_useDashboardDataApi)