|
|
@@ -1,4 +1,4 @@
|
|
|
-import { get, post, ptzGet, ptzPost } from '@/utils/request'
|
|
|
+import { get, post } from '@/utils/request'
|
|
|
import type {
|
|
|
IBaseResponse,
|
|
|
IListResponse,
|
|
|
@@ -10,214 +10,171 @@ import type {
|
|
|
CameraAddRequest,
|
|
|
CameraUpdateRequest,
|
|
|
CameraListRequest,
|
|
|
- SwitchChannelRequest,
|
|
|
- PTZAction,
|
|
|
- PTZControlRequest,
|
|
|
- AdminPTZRequest
|
|
|
+ SwitchChannelRequest
|
|
|
} from '@/types'
|
|
|
|
|
|
-// ==================== Controller APIs (MVP) ====================
|
|
|
+// ==================== Controller APIs ====================
|
|
|
|
|
|
-// 获取摄像头列表 (POST)
|
|
|
-export function listCameras(machineId?: string): Promise<IListResponse<CameraDTO>> {
|
|
|
- return post('/camera/list', machineId ? { machineId } : {})
|
|
|
+// 获取摄像头列表
|
|
|
+export interface ListCamerasRequest {
|
|
|
+ machineId?: string
|
|
|
}
|
|
|
|
|
|
-// 获取摄像头信息 (主API)
|
|
|
-export function getCamera(cameraId: string): Promise<IBaseResponse<CameraDTO>> {
|
|
|
- return get(`/cameras/${cameraId}`)
|
|
|
+export function listCameras(data?: ListCamerasRequest): Promise<IListResponse<CameraDTO>> {
|
|
|
+ return post('/camera/list', data || {})
|
|
|
}
|
|
|
|
|
|
-// 切换摄像头通道 (MVP核心)
|
|
|
-export function switchChannel(data: SwitchChannelRequest): Promise<IBaseResponse<ChannelDTO>> {
|
|
|
- return post('/camera/switch', data)
|
|
|
+// 获取摄像头信息
|
|
|
+export interface GetCameraRequest {
|
|
|
+ cameraId: string
|
|
|
}
|
|
|
|
|
|
-// 获取当前活动通道
|
|
|
-export function getCurrentChannel(machineId: string): Promise<IBaseResponse<ChannelDTO>> {
|
|
|
- return get('/camera/current', { machineId })
|
|
|
+export function getCamera(data: GetCameraRequest): Promise<IBaseResponse<CameraDTO>> {
|
|
|
+ return get(`/cameras/${data.cameraId}`)
|
|
|
}
|
|
|
|
|
|
-// 开始PTZ控制 (PTZ服务)
|
|
|
-// 使用 /ptz/control 端点,通过 body 传递 cameraId
|
|
|
-export function ptzStart(cameraId: string, action: PTZAction, speed: number = 50): Promise<BaseResponse> {
|
|
|
- // 映射 action 到 PTZ 服务支持的 command
|
|
|
- const commandMap: Record<PTZAction, string> = {
|
|
|
- up: 'up',
|
|
|
- down: 'down',
|
|
|
- left: 'left',
|
|
|
- right: 'right',
|
|
|
- zoom_in: 'zoom_in',
|
|
|
- zoom_out: 'zoom_out',
|
|
|
- stop: 'stop'
|
|
|
- }
|
|
|
- return ptzPost('/ptz/control', {
|
|
|
- host: cameraId,
|
|
|
- command: commandMap[action] || 'stop',
|
|
|
- speed
|
|
|
- })
|
|
|
+// 切换摄像头通道
|
|
|
+export function switchChannel(data: SwitchChannelRequest): Promise<IBaseResponse<ChannelDTO>> {
|
|
|
+ return post('/camera/switch', data)
|
|
|
}
|
|
|
|
|
|
-// 停止PTZ控制 (PTZ服务)
|
|
|
-export function ptzStop(cameraId: string): Promise<BaseResponse> {
|
|
|
- return ptzPost('/ptz/control', {
|
|
|
- host: cameraId,
|
|
|
- command: 'stop'
|
|
|
- })
|
|
|
+// 获取当前活动通道
|
|
|
+export interface GetCurrentChannelRequest {
|
|
|
+ machineId: string
|
|
|
}
|
|
|
|
|
|
-// PTZ 直接控制 (pan/tilt/zoom 方式, PTZ服务)
|
|
|
-export function ptzDirectControl(cameraId: string, data: PTZControlRequest): Promise<BaseResponse> {
|
|
|
- return ptzPost('/ptz/control', {
|
|
|
- host: cameraId,
|
|
|
- ...data
|
|
|
- })
|
|
|
+export function getCurrentChannel(data: GetCurrentChannelRequest): Promise<IBaseResponse<ChannelDTO>> {
|
|
|
+ return get('/camera/current', data)
|
|
|
}
|
|
|
|
|
|
-// 获取预置位列表 (PTZ服务)
|
|
|
-export function presetList(cameraId: string): Promise<BaseResponse> {
|
|
|
- return ptzGet(`/${cameraId}/preset/list`)
|
|
|
-}
|
|
|
+// ==================== PTZ 控制 (代理到 PTZ 服务) ====================
|
|
|
|
|
|
-// 获取PTZ能力 (PTZ服务)
|
|
|
-export function getPTZCapabilities(cameraId: string): Promise<BaseResponse> {
|
|
|
- return ptzGet(`/${cameraId}/ptz/capabilities`)
|
|
|
+// PTZ 控制
|
|
|
+export interface PTZControlRequest {
|
|
|
+ cameraId: string
|
|
|
+ command: string
|
|
|
+ speed?: number
|
|
|
}
|
|
|
|
|
|
-// 跳转到预置位 (PTZ服务)
|
|
|
-export function presetGoto(cameraId: string, presetId: number): Promise<BaseResponse> {
|
|
|
- return ptzPost(`/${cameraId}/preset/goto`, { presetId })
|
|
|
+export function ptzControl(data: PTZControlRequest): Promise<BaseResponse> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/ptz/control`, data)
|
|
|
}
|
|
|
|
|
|
-// 设置预置位 (PTZ服务)
|
|
|
-export function presetSet(cameraId: string, presetId: number, presetName?: string): Promise<BaseResponse> {
|
|
|
- return ptzPost(`/${cameraId}/preset/set`, { presetId, presetName })
|
|
|
+// PTZ 能力
|
|
|
+export interface PTZCapabilitiesRequest {
|
|
|
+ cameraId: string
|
|
|
}
|
|
|
|
|
|
-// 删除预置位 (PTZ服务)
|
|
|
-export function presetRemove(cameraId: string, presetId: number): Promise<BaseResponse> {
|
|
|
- return ptzPost(`/${cameraId}/preset/remove`, { presetId })
|
|
|
+export function getPTZCapabilities(data: PTZCapabilitiesRequest): Promise<BaseResponse> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/ptz/capabilities`, data)
|
|
|
}
|
|
|
|
|
|
-// ==================== Admin APIs ====================
|
|
|
+// ==================== 预置位 ====================
|
|
|
|
|
|
-// 获取摄像头列表 (管理后台,分页)
|
|
|
-export function adminListCameras(params?: CameraListRequest): Promise<IPageResponse<CameraInfoDTO>> {
|
|
|
- return post('/admin/cameras/list', params || {})
|
|
|
+export interface PresetInfo {
|
|
|
+ id: string
|
|
|
+ name: string
|
|
|
+ time: number
|
|
|
}
|
|
|
|
|
|
-// 获取摄像头列表 (全部,不分页)
|
|
|
-export function adminListAllCameras(machineId?: string): Promise<IListResponse<CameraInfoDTO>> {
|
|
|
- return get('/admin/cameras/listAll', machineId ? { machineId } : undefined)
|
|
|
+// 获取预置位列表
|
|
|
+export interface PresetListRequest {
|
|
|
+ cameraId: string
|
|
|
}
|
|
|
|
|
|
-// 获取摄像头详情
|
|
|
-export function adminGetCamera(id: number): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
- return get('/admin/cameras/detail', { id })
|
|
|
+export function presetList(data: PresetListRequest): Promise<IBaseResponse<PresetInfo[]>> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/preset/list`, data)
|
|
|
}
|
|
|
|
|
|
-// 添加摄像头
|
|
|
-export function adminAddCamera(data: CameraAddRequest): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
- return post('/admin/cameras/add', data)
|
|
|
+// 跳转预置位
|
|
|
+export interface PresetGotoRequest {
|
|
|
+ cameraId: string
|
|
|
+ presetId: number
|
|
|
}
|
|
|
|
|
|
-// 更新摄像头
|
|
|
-export function adminUpdateCamera(data: CameraUpdateRequest): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
- return post('/admin/cameras/update', data)
|
|
|
+export function presetGoto(data: PresetGotoRequest): Promise<IBaseResponse<boolean>> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/preset/goto`, data)
|
|
|
}
|
|
|
|
|
|
-// 删除摄像头
|
|
|
-export function adminDeleteCamera(id: number): Promise<BaseResponse> {
|
|
|
- return post('/admin/cameras/delete', undefined, {
|
|
|
- params: { id }
|
|
|
- })
|
|
|
+// 设置预置位
|
|
|
+export interface PresetSetRequest {
|
|
|
+ cameraId: string
|
|
|
+ presetId: number
|
|
|
+ presetName?: string
|
|
|
}
|
|
|
|
|
|
-// 检测摄像头连通性
|
|
|
-export function adminCheckCamera(id: number): Promise<IBaseResponse<boolean>> {
|
|
|
- return post('/admin/cameras/check', undefined, {
|
|
|
- params: { id }
|
|
|
- })
|
|
|
+export function presetSet(data: PresetSetRequest): Promise<BaseResponse> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/preset/set`, data)
|
|
|
}
|
|
|
|
|
|
-// 获取摄像头快照
|
|
|
-export function adminGetSnapshot(id: number): Promise<IBaseResponse<Blob>> {
|
|
|
- return get('/admin/cameras/snapshot', { id }, { responseType: 'blob' })
|
|
|
+// 删除预置位
|
|
|
+export interface PresetRemoveRequest {
|
|
|
+ cameraId: string
|
|
|
+ presetId: number
|
|
|
}
|
|
|
|
|
|
-// PTZ 控制 (Admin)
|
|
|
-export function adminPTZControl(data: AdminPTZRequest): Promise<IBaseResponse<boolean>> {
|
|
|
- return post('/admin/cameras/ptz', data)
|
|
|
+export function presetRemove(data: PresetRemoveRequest): Promise<BaseResponse> {
|
|
|
+ return post(`/camera/control/${data.cameraId}/preset/remove`, data)
|
|
|
}
|
|
|
|
|
|
-// ==================== Preset APIs (PTZ服务) ====================
|
|
|
+// ==================== Admin APIs ====================
|
|
|
|
|
|
-// 预置位类型
|
|
|
-export interface PresetInfo {
|
|
|
- token: string
|
|
|
- name: string
|
|
|
+// 获取摄像头列表 (分页)
|
|
|
+export function adminListCameras(data?: CameraListRequest): Promise<IPageResponse<CameraInfoDTO>> {
|
|
|
+ return post('/admin/cameras/list', data || {})
|
|
|
}
|
|
|
|
|
|
-// 获取预置位列表 (兼容旧API)
|
|
|
-export function getPresets(cameraId: string): Promise<IListResponse<PresetInfo>> {
|
|
|
- return ptzGet(`/${cameraId}/preset/list`)
|
|
|
+// 获取摄像头列表 (全部)
|
|
|
+export interface AdminListAllCamerasRequest {
|
|
|
+ machineId?: string
|
|
|
}
|
|
|
|
|
|
-// 跳转到预置位 (兼容旧API)
|
|
|
-export function gotoPreset(cameraId: string, presetToken: string): Promise<BaseResponse> {
|
|
|
- return ptzPost(`/${cameraId}/preset/goto`, { presetId: parseInt(presetToken) || 1 })
|
|
|
+export function adminListAllCameras(data?: AdminListAllCamerasRequest): Promise<IListResponse<CameraInfoDTO>> {
|
|
|
+ return get('/admin/cameras/listAll', data)
|
|
|
}
|
|
|
|
|
|
-// 设置预置位 (保存当前位置, 兼容旧API)
|
|
|
-export function setPreset(cameraId: string, presetName?: string): Promise<IBaseResponse<PresetInfo>> {
|
|
|
- // 旧API不指定presetId,这里使用一个默认值
|
|
|
- return ptzPost(`/${cameraId}/preset/set`, { presetId: 1, presetName })
|
|
|
+// 获取摄像头详情
|
|
|
+export interface AdminGetCameraRequest {
|
|
|
+ id: number
|
|
|
}
|
|
|
|
|
|
-// 删除预置位 (兼容旧API)
|
|
|
-export function removePreset(cameraId: string, presetToken: string): Promise<BaseResponse> {
|
|
|
- return ptzPost(`/${cameraId}/preset/remove`, { presetId: parseInt(presetToken) || 1 })
|
|
|
+export function adminGetCamera(data: AdminGetCameraRequest): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
+ return get('/admin/cameras/detail', data)
|
|
|
}
|
|
|
|
|
|
-// ==================== 兼容旧代码的别名 ====================
|
|
|
+// 添加摄像头
|
|
|
+export function adminAddCamera(data: CameraAddRequest): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
+ return post('/admin/cameras/add', data)
|
|
|
+}
|
|
|
|
|
|
-// 获取设备列表 (兼容 - 使用不分页接口)
|
|
|
-export const listDevice = adminListAllCameras
|
|
|
+// 更新摄像头
|
|
|
+export function adminUpdateCamera(data: CameraUpdateRequest): Promise<IBaseResponse<CameraInfoDTO>> {
|
|
|
+ return post('/admin/cameras/update', data)
|
|
|
+}
|
|
|
|
|
|
-// 获取设备详情 (兼容)
|
|
|
-export const getDevice = (deviceId: string) => getCamera(deviceId)
|
|
|
+// 删除摄像头
|
|
|
+export interface AdminDeleteCameraRequest {
|
|
|
+ id: number
|
|
|
+}
|
|
|
|
|
|
-// 添加设备 (兼容)
|
|
|
-export const addDevice = adminAddCamera
|
|
|
+export function adminDeleteCamera(data: AdminDeleteCameraRequest): Promise<BaseResponse> {
|
|
|
+ return post('/admin/cameras/delete', undefined, { params: data })
|
|
|
+}
|
|
|
|
|
|
-// 修改设备 (兼容)
|
|
|
-export const updateDevice = adminUpdateCamera
|
|
|
+// 检测摄像头连通性
|
|
|
+export interface AdminCheckCameraRequest {
|
|
|
+ id: number
|
|
|
+}
|
|
|
|
|
|
-// 删除设备 (兼容)
|
|
|
-export const delDevice = (id: number) => adminDeleteCamera(id)
|
|
|
+export function adminCheckCamera(data: AdminCheckCameraRequest): Promise<IBaseResponse<boolean>> {
|
|
|
+ return post('/admin/cameras/check', undefined, { params: data })
|
|
|
+}
|
|
|
|
|
|
-// PTZ控制 (兼容旧API)
|
|
|
-export function ptzControl(
|
|
|
- _deviceId: string,
|
|
|
- channelId: string,
|
|
|
- command: string,
|
|
|
- horizonSpeed?: number,
|
|
|
- _verticalSpeed?: number,
|
|
|
- _zoomSpeed?: number
|
|
|
-): Promise<BaseResponse> {
|
|
|
- // 映射旧的命令到新的 action
|
|
|
- const actionMap: Record<string, PTZAction> = {
|
|
|
- up: 'up',
|
|
|
- down: 'down',
|
|
|
- left: 'left',
|
|
|
- right: 'right',
|
|
|
- zoomin: 'zoom_in',
|
|
|
- zoomout: 'zoom_out',
|
|
|
- stop: 'stop'
|
|
|
- }
|
|
|
- const action = actionMap[command.toLowerCase()] || 'stop'
|
|
|
- const speed = horizonSpeed || 50
|
|
|
+// 获取摄像头快照
|
|
|
+export interface AdminGetSnapshotRequest {
|
|
|
+ id: number
|
|
|
+}
|
|
|
|
|
|
- // 使用 channelId 关联的 cameraId 进行 PTZ 控制
|
|
|
- return ptzStart(channelId, action, speed)
|
|
|
+export function adminGetSnapshot(data: AdminGetSnapshotRequest): Promise<IBaseResponse<Blob>> {
|
|
|
+ return get('/admin/cameras/snapshot', data, { responseType: 'blob' })
|
|
|
}
|