devices.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import request from '@/utils/http'
  2. import { getWater, type WaterPage } from './index'
  3. export type DeviceStatus = 'online' | 'offline' | 'fault' | 'unconnected'
  4. export interface DeviceFilters {
  5. keyword: string
  6. status: DeviceStatus | ''
  7. region: string
  8. firmware: string
  9. }
  10. export interface WaterDevice {
  11. id: number
  12. name: string
  13. sn: string
  14. enterprise_id: number
  15. enterprise_name: string | null
  16. region: string | null
  17. sku_id: number
  18. sku_name: string | null
  19. firmware: string
  20. connection_status: DeviceStatus
  21. today_liters: number | null
  22. last_seen: string | null
  23. last_seen_seconds: number | null
  24. fault: string
  25. }
  26. export interface DeviceSummary {
  27. total: number
  28. online: number
  29. offline: number
  30. fault: number
  31. unconnected: number
  32. new_month: number
  33. offline_long: number
  34. online_rate: number
  35. }
  36. export interface FirmwareVersion {
  37. version: string
  38. total: number
  39. }
  40. export interface DeviceDashboard {
  41. summary: DeviceSummary
  42. list: Omit<WaterPage, 'data'> & { data: WaterDevice[] }
  43. options: { regions: string[]; firmwares: FirmwareVersion[] }
  44. trend: { day: string; liters: number | null; reporting_devices: number }[]
  45. anomalies: { label: string; total: number; percentage: number }[]
  46. updated_at: string
  47. }
  48. export const getDeviceDashboard = (params: DeviceFilters & { page: number; limit: number }) =>
  49. getWater<DeviceDashboard>('devices/dashboard', params)
  50. export const exportDevices = (filters: DeviceFilters) =>
  51. request.post<Blob>({
  52. url: '/core/water/devices/export',
  53. data: filters,
  54. responseType: 'blob',
  55. timeout: 0,
  56. showErrorMessage: false
  57. })