diff --git a/src/utils/boxApi.ts b/src/utils/boxApi.ts index e288d38..abca082 100644 --- a/src/utils/boxApi.ts +++ b/src/utils/boxApi.ts @@ -1,4 +1,6 @@ import axios from 'axios'; +import type { CameraData } from '@/types/CameraData' +import type { RuleData } from '@/types/RuleData' class BoxApi { @@ -14,10 +16,14 @@ class BoxApi { private readonly apiAlgorithms: string = "/algorithms"; private readonly apiResetUser: string = "/auth/resetuser"; private readonly apiResetPassword: string = "/auth/reset_password"; - private readonly getMinCamerasApi: string = "/camera/cameras/get_all"; - private readonly getMinCamera: string = "/camera/cameras"; + private readonly apiAllCameras: string = "/camera/cameras/get_all"; + private readonly superCamera: string = "/camera/cameras"; + private readonly superRule: string = "/rules"; private readonly getEventByIdUrl: string = "/event/events/retrieves"; + + + private readonly loginConfig: object = { headers: { 'Content-Type': 'application/json', @@ -60,6 +66,7 @@ class BoxApi { this.createAxiosInstance(); } + public setPort(port: number) { this.port = port === 0 ? this.defaultPort : port; this.createAxiosInstance(); @@ -213,8 +220,8 @@ class BoxApi { return await this.getCamerasByUrl(url, token); } - public async getMinCameras(token: string | null = null): Promise { - const url = `${this.getMinCamerasApi}`; + public async getAllCameras(token: string | null = null): Promise { + const url = `${this.apiAllCameras}`; try { const res = await this.axios.get(url, this._authHeader(token)); if (res.data.err.ec === 0) { @@ -227,8 +234,106 @@ class BoxApi { } } + + + public async getCameraById(token: string | null = null, cameraId: number): Promise { + const url = `${this.superCamera}/${cameraId}`; + try { + const res = await this.axios.get(url, this._authHeader(token)); + if (res.data.err.ec === 0) { + return res.data.ret; + } else { + throw new Error(res.data.err.msg); + } + } catch (error) { + throw error; + } + } + + public async updateCamera(token: string | null = null, cameraId: number, jsonData: CameraData): Promise { + const url = `${this.superCamera}/${cameraId}`; + // const { rules, ...cameraData } = jsonData; + console.log("接口接收的摄像设置>>>>>>>>>>>>>>", jsonData); + + try { + const newCamera = { + name: jsonData.name, + mode: jsonData.mode, + } + const res = await this.axios.patch(url, newCamera); + if (res.data.err.ec === 0) { + return res.data.ret; + } else { + throw new Error(res.data.err.dm); + } + } catch (error) { + throw error; + } + } + + // public async updateCamera( + // token: string | null = null, + // cameraId: number, + // jsonData: CameraData + // ): Promise { + // const url = `${this.superCamera}/${cameraId}`; + + // // 确保 mode 为小写 + // const cameraData = { + // name: jsonData.name, + // mode: jsonData.mode?.toLowerCase() === "on" || jsonData.mode?.toLowerCase() === "off" + // ? jsonData.mode.toLowerCase() + // : undefined, // 非法值转为 undefined + // }; + + // console.log("接口接收的摄像头更新数据:", cameraData); + + // try { + // const res = await this.axios.patch(url, cameraData, this._authHeader(token)); + // if (res.data.err.ec === 0) { + // return res.data.ret; // 返回后端成功结果 + // } else { + // throw new Error(res.data.err.dm); // 抛出后端返回的错误消息 + // } + // } catch (error) { + // console.error("更新摄像头失败:", error); + // throw error; + // } + // } + + + public async updateRule(token: string | null = null, rules: RuleData[]): Promise { + const results: any[] = []; + + for (const rule of rules) { + const url = `${this.superRule}/${rule.id}`; + try { + const cleanedRule = { + ...rule, + schedule: rule.schedule || {}, + }; + console.log("接口接收的规则设置>>>>>>>>>>>>>>", cleanedRule); + const res = await this.axios.patch(url, cleanedRule, this._authHeader(token)); + if (res.data.err.ec === 0) { + results.push({ id: rule.id, success: true, data: res.data.ret }); + } else { + results.push({ id: rule.id, success: false, message: res.data.err.dm }); + } + } catch (error: any) { + console.error(`更新规则失败: rule.id=${rule.id}`, error); + results.push({ id: rule.id, success: false, message: error.message }); + } + } + + return results; // 返回所有规则更新结果 + } + + + + + public async startCameraStream(token: string | null = null, cameraId: number): Promise { - const url = `${this.getMinCamera}/${cameraId}/start_stream`; + const url = `${this.superCamera}/${cameraId}/start_stream`; try { const res = await this.axios.post(url, this._authHeader(token)); if (res.data.err.ec === 0) { @@ -242,7 +347,7 @@ class BoxApi { } public async stopCameraStream(token: string | null = null, cameraId: number): Promise { - const url = `${this.getMinCamera}/${cameraId}/stop_stream`; + const url = `${this.superCamera}/${cameraId}/stop_stream`; try { const res = await this.axios.post(url, this._authHeader(token)); if (res.data.err.ec === 0) { @@ -340,7 +445,7 @@ class BoxApi { if (types) { url += `&types=${encodeURIComponent(types)}`; } - if(camera_id){ + if (camera_id) { url += `&camera_id=${camera_id}`; } if (status) { @@ -380,7 +485,7 @@ class BoxApi { if (res.data.err.ec === 0) { // return res.data.ret.objects[0]; - return res.data.ret.objects[0]; + return res.data.ret.objects[0]; } else { throw new Error(res.data.err.dm); } @@ -406,13 +511,13 @@ class BoxApi { public async setEventStatus(eventId: number, status: string, remark: string | null = null, token: string | null = null): Promise { const url = `${this.apiEvents}/${eventId}`; - - + + const data: { status: string; remark?: string } = { status: status }; if (remark && remark.trim() !== "") { data.remark = remark; } - + try { const res = await this.axios.patch(url, data, this._authHeader(token)); if (res.data.err.ec === 0) {