You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

147 lines
4.7 KiB

// 汇聚门户(跨站点汇总)接口。
// 这些接口由中心端后端提供,返回"所有站"的汇总数据;
// 与单站业务接口不同,它们不依赖当前登录用户所属站。
// 后端未就绪时页面以空态展示,不影响其它功能。
import axios from "axios";
import request from "@/utils/request";
import { limitVideoRequest } from "@/utils/videoRequestLimit";
// 场站列表
// 返回 data: [{ id, stationCode, stationName, baseUrl, portalUrl, enabled }]
export function getStationList(query, config = {}) {
return request({
url: "/agg/station/all",
method: "get",
params: query,
noAlert: true,
cancelToken: config.cancelToken
});
}
// 本轮巡检任务统计(表计/外观/红外)
// 返回 data: [{ algCategory, inspectedTaskCount, completedTaskCount, defectCount, ... }]
export function getInspectionOverview(query, config = {}) {
return request({
url: "/agg/statistic/inspection",
method: "get",
params: query,
noAlert: true,
cancelToken: config.cancelToken
});
}
// 缺陷发现趋势(最近 12 个月或 4 个季度)
// 返回 data: [{ date, minorCount, generalCount, seriousCount, urgentCount, ... }]
export function getDefectTrend(query, config = {}) {
return request({
url: "/agg/statistic/defect",
method: "get",
params: query,
noAlert: true,
cancelToken: config.cancelToken
});
}
// 通道设备来源统计
// 返回 data: { totalCount, deviceSourceCounts: [{ deviceSource, count }] }
export function getChannelStats(query, config = {}) {
return request({
url: "/agg/statistic/channel",
method: "get",
params: query,
noAlert: true,
cancelToken: config.cancelToken
});
}
// 通道树
// 返回 data: 区域、巡检设备、通道三级树
export function getChannelTree(query, config = {}) {
return request({
url: "/agg/tree/channel",
method: "get",
params: query,
noAlert: true,
skipWorkspaceStation: !!config.skipWorkspaceStation,
cancelToken: config.cancelToken
});
}
// 汇聚侧实时视频启动
// 返回 data: { stationCode, cameraCode, streamId, hls, flv, status }
// 拉流会占住浏览器到同一地址的连接,必须可取消,否则切页后连接一直 pending。
export function startRealtimeVideo(query, options = {}) {
const { stationCode, ...data } = query || {};
const source = axios.CancelToken.source();
const promise = limitVideoRequest(registerAbort => {
registerAbort(() => source.cancel("video request cancelled"));
return request({
url: "/agg/video/realtime/start",
method: "post",
timeout: 8000,
params: { stationCode },
data,
noAlert: true,
cancelToken: source.token
});
}, options.lane || "default");
return promise;
}
// 汇聚侧实时视频停止
// 入参按后端要求传 stationCode + cameraCode。
// 停流不进拉流队列:离开首页时拉流可能还占着名额,停流再排队就会和业务请求一起卡住。
export function stopRealtimeVideo(query) {
const { stationCode, ...data } = query || {};
return request({
url: "/agg/video/realtime/stop",
method: "post",
params: { stationCode },
data,
noAlert: true
});
}
// 汇聚侧云台控制:按摄像头所属站点代理转发
// stationCode 取当前控制摄像头所在站(而非顶部站名筛选),以查询串方式传递
// 雨刷也走这条接口:开 27、关 28,与方向/变倍/聚焦/光圈同一套控制码
export function aggPtzControl(payload) {
const { stationCode, ...data } = payload || {};
return request({
url: "/agg/proxy/patrol/preset/ptzControl",
method: "post",
params: { stationCode },
data,
noAlert: true
});
}
// 汇聚侧预置位列表:路径与单站一致(cameraCode 按 # 拆成 device/domain 放路径上),仅追加 ?stationCode
export function aggPresetList(payload) {
const { stationCode, cameraCode } = payload || {};
const value = String(cameraCode || "");
const separatorIndex = value.indexOf("#");
if (separatorIndex <= 0 || separatorIndex === value.length - 1) {
return Promise.reject(new Error("摄像机编码格式不正确"));
}
const device = encodeURIComponent(value.slice(0, separatorIndex));
const domain = encodeURIComponent(value.slice(separatorIndex + 1));
return request({
url: `/agg/proxy/patrol/preset/presetList/${device}/${domain}`,
method: "get",
params: { stationCode },
noAlert: true
});
}
// 汇聚侧预置位保存:按摄像头所属站点代理转发
export function aggPresetCreate(payload) {
const { stationCode, ...data } = payload || {};
return request({
url: "/agg/proxy/patrol/preset/presetCreate",
method: "post",
params: { stationCode },
data,
noAlert: true
});
}