import { get, post } from '@/utils/request' import type { IBaseResponse, IListResponse, IPageResponse, BaseResponse, CameraDTO, ChannelDTO, CameraInfoDTO, CameraAddRequest, CameraUpdateRequest, CameraListRequest, SwitchChannelRequest } from '@/types' // ==================== Controller APIs ==================== // 获取摄像头列表 export interface ListCamerasRequest { machineId?: string } export function listCameras(data?: ListCamerasRequest): Promise> { return post('/camera/list', data || {}) } // 获取摄像头信息 export interface GetCameraRequest { cameraId: string } export function getCamera(data: GetCameraRequest): Promise> { return get(`/cameras/${data.cameraId}`) } // 切换摄像头通道 export function switchChannel(data: SwitchChannelRequest): Promise> { return post('/camera/switch', data) } // 获取当前活动通道 export interface GetCurrentChannelRequest { machineId: string } export function getCurrentChannel(data: GetCurrentChannelRequest): Promise> { return get('/camera/current', data) } // ==================== PTZ 控制 (代理到 PTZ 服务) ==================== // PTZ 控制 // PTZ 方向动作 // up: 向上, down: 向下, left: 向左, right: 向右 // up_left: 左上, up_right: 右上, down_left: 左下, down_right: 右下 // zoom_in: 放大, zoom_out: 缩小 // stop: 停止 export interface PTZControlRequest { cameraId: string action: | 'up' | 'down' | 'left' | 'right' | 'up_left' | 'up_right' | 'down_left' | 'down_right' | 'zoom_in' | 'zoom_out' | 'stop' speed: number } export function ptzControl(data: PTZControlRequest): Promise { return post(`/camera/control/ptz/control`, data) } // PTZ 能力 export interface PTZCapabilitiesRequest { cameraId: string } export function getPTZCapabilities(data: PTZCapabilitiesRequest): Promise { return post(`/camera/control/ptz/capabilities`, data) } // ==================== 预置位 ==================== export interface PresetInfo { id: string name: string time: number } // 获取预置位列表 export interface PresetListRequest { cameraId: string } export function presetList(data: PresetListRequest): Promise> { return post(`/camera/control/preset/list`, data) } // 跳转预置位 export interface PresetGotoRequest { cameraId: string presetId: number } export function presetGoto(data: PresetGotoRequest): Promise> { return post(`/camera/control/preset/goto`, data) } // 设置预置位 export interface PresetSetRequest { cameraId: string presetId: number presetName?: string presetTime?: number // 该预置位停留时间(秒) presetTotalTime?: number // 巡航总时长(秒) } export function presetSet(data: PresetSetRequest): Promise { return post(`/camera/control/preset/set`, data) } // 删除预置位 export interface PresetRemoveRequest { cameraId: string presetId: number } export function presetRemove(data: PresetRemoveRequest): Promise { return post(`/camera/control/preset/remove`, data) } // ==================== Admin APIs ==================== // 获取摄像头列表 (分页) export function adminListCameras(data?: CameraListRequest): Promise> { return post('/admin/cameras/list', data || {}) } // 获取摄像头列表 (全部) export interface AdminListAllCamerasRequest { machineId?: string } export function adminListAllCameras(data?: AdminListAllCamerasRequest): Promise> { return get('/admin/cameras/listAll', data) } // 获取摄像头详情 export interface AdminGetCameraRequest { id: number } export function adminGetCamera(data: AdminGetCameraRequest): Promise> { return get('/admin/cameras/detail', data) } // 添加摄像头 export function adminAddCamera(data: CameraAddRequest): Promise> { return post('/admin/cameras/add', data) } // 更新摄像头 export function adminUpdateCamera(data: CameraUpdateRequest): Promise> { return post('/admin/cameras/update', data) } // 删除摄像头 export interface AdminDeleteCameraRequest { id: number } export function adminDeleteCamera(data: AdminDeleteCameraRequest): Promise { return post('/admin/cameras/delete', undefined, { params: data }) } // 检测摄像头连通性 export interface AdminCheckCameraRequest { id: number } export function adminCheckCamera(data: AdminCheckCameraRequest): Promise> { return post('/admin/cameras/check', undefined, { params: data }) } // 获取摄像头快照 export interface AdminGetSnapshotRequest { id: number } export function adminGetSnapshot(data: AdminGetSnapshotRequest): Promise> { return get('/admin/cameras/snapshot', data, { responseType: 'blob' }) }