camera.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import { get, post } from '@/utils/request'
  2. import type {
  3. IBaseResponse,
  4. IListResponse,
  5. IPageResponse,
  6. BaseResponse,
  7. CameraDTO,
  8. ChannelDTO,
  9. CameraInfoDTO,
  10. CameraAddRequest,
  11. CameraUpdateRequest,
  12. CameraListRequest,
  13. SwitchChannelRequest
  14. } from '@/types'
  15. // ==================== Controller APIs ====================
  16. // 获取摄像头列表
  17. export interface ListCamerasRequest {
  18. machineId?: string
  19. }
  20. export function listCameras(data?: ListCamerasRequest): Promise<IListResponse<CameraDTO>> {
  21. return post('/camera/list', data || {})
  22. }
  23. // 获取摄像头信息
  24. export interface GetCameraRequest {
  25. cameraId: string
  26. }
  27. export function getCamera(data: GetCameraRequest): Promise<IBaseResponse<CameraDTO>> {
  28. return get(`/cameras/${data.cameraId}`)
  29. }
  30. // 切换摄像头通道
  31. export function switchChannel(data: SwitchChannelRequest): Promise<IBaseResponse<ChannelDTO>> {
  32. return post('/camera/switch', data)
  33. }
  34. // 获取当前活动通道
  35. export interface GetCurrentChannelRequest {
  36. machineId: string
  37. }
  38. export function getCurrentChannel(data: GetCurrentChannelRequest): Promise<IBaseResponse<ChannelDTO>> {
  39. return get('/camera/current', data)
  40. }
  41. // ==================== PTZ 控制 (代理到 PTZ 服务) ====================
  42. // PTZ 控制
  43. // PTZ 方向动作
  44. // up: 向上, down: 向下, left: 向左, right: 向右
  45. // up_left: 左上, up_right: 右上, down_left: 左下, down_right: 右下
  46. // zoom_in: 放大, zoom_out: 缩小
  47. // stop: 停止
  48. export interface PTZControlRequest {
  49. cameraId: string
  50. action:
  51. | 'up'
  52. | 'down'
  53. | 'left'
  54. | 'right'
  55. | 'up_left'
  56. | 'up_right'
  57. | 'down_left'
  58. | 'down_right'
  59. | 'zoom_in'
  60. | 'zoom_out'
  61. | 'stop'
  62. speed: number
  63. }
  64. export function ptzControl(data: PTZControlRequest): Promise<BaseResponse> {
  65. return post(`/camera/control/ptz/control`, data)
  66. }
  67. // PTZ 能力
  68. export interface PTZCapabilitiesRequest {
  69. cameraId: string
  70. }
  71. export function getPTZCapabilities(data: PTZCapabilitiesRequest): Promise<BaseResponse> {
  72. return post(`/camera/control/ptz/capabilities`, data)
  73. }
  74. // ==================== 预置位 ====================
  75. export interface PresetInfo {
  76. id: string
  77. name: string
  78. time: number
  79. }
  80. // 获取预置位列表
  81. export interface PresetListRequest {
  82. cameraId: string
  83. }
  84. export function presetList(data: PresetListRequest): Promise<IBaseResponse<PresetInfo[]>> {
  85. return post(`/camera/control/preset/list`, data)
  86. }
  87. // 跳转预置位
  88. export interface PresetGotoRequest {
  89. cameraId: string
  90. presetId: number
  91. }
  92. export function presetGoto(data: PresetGotoRequest): Promise<IBaseResponse<boolean>> {
  93. return post(`/camera/control/preset/goto`, data)
  94. }
  95. // 设置预置位
  96. export interface PresetSetRequest {
  97. cameraId: string
  98. presetId: number
  99. presetName?: string
  100. presetTime?: number // 该预置位停留时间(秒)
  101. presetTotalTime?: number // 巡航总时长(秒)
  102. }
  103. export function presetSet(data: PresetSetRequest): Promise<BaseResponse> {
  104. return post(`/camera/control/preset/set`, data)
  105. }
  106. // 删除预置位
  107. export interface PresetRemoveRequest {
  108. cameraId: string
  109. presetId: number
  110. }
  111. export function presetRemove(data: PresetRemoveRequest): Promise<BaseResponse> {
  112. return post(`/camera/control/preset/remove`, data)
  113. }
  114. // ==================== Admin APIs ====================
  115. // 获取摄像头列表 (分页)
  116. export function adminListCameras(data?: CameraListRequest): Promise<IPageResponse<CameraInfoDTO>> {
  117. return post('/admin/cameras/list', data || {})
  118. }
  119. // 获取摄像头列表 (全部)
  120. export interface AdminListAllCamerasRequest {
  121. machineId?: string
  122. }
  123. export function adminListAllCameras(data?: AdminListAllCamerasRequest): Promise<IListResponse<CameraInfoDTO>> {
  124. return get('/admin/cameras/listAll', data)
  125. }
  126. // 获取摄像头详情
  127. export interface AdminGetCameraRequest {
  128. id: number
  129. }
  130. export function adminGetCamera(data: AdminGetCameraRequest): Promise<IBaseResponse<CameraInfoDTO>> {
  131. return get('/admin/cameras/detail', data)
  132. }
  133. // 添加摄像头
  134. export function adminAddCamera(data: CameraAddRequest): Promise<IBaseResponse<CameraInfoDTO>> {
  135. return post('/admin/cameras/add', data)
  136. }
  137. // 更新摄像头
  138. export function adminUpdateCamera(data: CameraUpdateRequest): Promise<IBaseResponse<CameraInfoDTO>> {
  139. return post('/admin/cameras/update', data)
  140. }
  141. // 删除摄像头
  142. export interface AdminDeleteCameraRequest {
  143. id: number
  144. }
  145. export function adminDeleteCamera(data: AdminDeleteCameraRequest): Promise<BaseResponse> {
  146. return post('/admin/cameras/delete', undefined, { params: data })
  147. }
  148. // 检测摄像头连通性
  149. export interface AdminCheckCameraRequest {
  150. id: number
  151. }
  152. export function adminCheckCamera(data: AdminCheckCameraRequest): Promise<IBaseResponse<boolean>> {
  153. return post('/admin/cameras/check', undefined, { params: data })
  154. }
  155. // 获取摄像头快照
  156. export interface AdminGetSnapshotRequest {
  157. id: number
  158. }
  159. export function adminGetSnapshot(data: AdminGetSnapshotRequest): Promise<IBaseResponse<Blob>> {
  160. return get('/admin/cameras/snapshot', data, { responseType: 'blob' })
  161. }