camera-preview.ts 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. /** 相机预览的接口 */
  2. // cameraPreview/getList
  3. import { http } from '@/utils/http/axios';
  4. import qs from 'qs';
  5. /** 相机树的结点类型 */
  6. export enum CameraTreeNodeType {
  7. /** 公司 */
  8. company = 'company',
  9. /** 车间 */
  10. workshop = 'workshop',
  11. /** 工位 */
  12. workspace = 'workspace',
  13. /** 相机 */
  14. camera = 'camera',
  15. }
  16. export interface CameraTree {
  17. id: number;
  18. name: string;
  19. code: string;
  20. children: CameraTree[];
  21. nodeType: CameraTreeNodeType;
  22. pushstreamIp: string;
  23. integrationState: number;
  24. }
  25. export interface CameraQueryForm {
  26. isEnableAlgo: boolean; // 是否添加算法:0-未勾选该条件、1-已添加
  27. isEnableRender: boolean; // 是否开启渲染:0-未勾选该条件、1-已开启
  28. queryString: string; // 搜索条件
  29. }
  30. /** 获取摄像头所在的树状结构 */
  31. export const getCameraTree = (param?: CameraQueryForm) => {
  32. return http.request<CameraTree[]>({
  33. url: '/admin/cameraPreview/queryCameraTreeByCondition',
  34. method: 'post',
  35. data: param,
  36. });
  37. };
  38. // 适用于Playback.vue/CameraTreeOldVersion.vue
  39. export const getCameraTreeOldVersion = () => {
  40. return http.request<CameraTree[]>(
  41. {
  42. url: '/cameraPreview/getList',
  43. method: 'get',
  44. },
  45. { ignoreTargetTenantId: true },
  46. );
  47. };
  48. /**
  49. * v4: 查询完整的相机树
  50. */
  51. export const getFullCameraTree = () => {
  52. return http.request<CameraTree[]>({
  53. url: '/admin/cameraPreview/queryCameraTree',
  54. method: 'GET',
  55. });
  56. };
  57. /** 算法是否启用 */
  58. export enum ALGO_ENABLED_STATUS {
  59. // 0代表启用
  60. enabled = 0,
  61. disabled = 1,
  62. }
  63. /** 电子围栏是否启用 */
  64. export enum FENCE_ENBALED_STATUS {
  65. enabled = 0,
  66. disabled = 1,
  67. }
  68. export interface AlgoItem {
  69. id: number;
  70. name: string;
  71. code?: string;
  72. showName?: string;
  73. remark?: string;
  74. url?: string;
  75. pushStatement?: string;
  76. pushLinkPrompt?: string;
  77. status?: ALGO_ENABLED_STATUS;
  78. createdAt?: string;
  79. updatedAt?: string;
  80. extra: string;
  81. }
  82. /**
  83. * v4: 获取所有算法列表
  84. */
  85. export const getAllAlgosApi = () => {
  86. return http.request<AlgoItem[]>({
  87. url: '/admin/algo/queryAlgoInfo',
  88. method: 'get',
  89. });
  90. };
  91. /** 根据相机code获取算法列表 */
  92. export const getAlgosByCameraCode = (cameraCode: string) => {
  93. return http.request<AlgoItem[]>({
  94. url: `/cameraPreview/getAlgoListWithCamera?cameraCode=${cameraCode}`,
  95. method: 'get',
  96. });
  97. };
  98. /**
  99. * v4: 根据相机ID获取绑定的算法
  100. */
  101. export const getAlgosByCameraId = (cameraId: number) => {
  102. return http.request<AlgoItem[]>({
  103. url: `/admin/algo/queryAllAlgoInfoByCameraId?cameraId=${cameraId}`,
  104. method: 'POST',
  105. });
  106. };
  107. /** 相机关联的算法信息 */
  108. export interface CameraAlgoItem {
  109. id?: number;
  110. algoId: number;
  111. cameraId?: number;
  112. code: string;
  113. name: string;
  114. detectionFrequency: number;
  115. detectionTime: string;
  116. electronicFence: number;
  117. status: ALGO_ENABLED_STATUS;
  118. algoInfo: AlgoItem;
  119. extra: string;
  120. }
  121. /** 查询某个camera下的所有算法 */
  122. export const getCameraAlgoListApi = (cameraId: number): Promise<CameraAlgoItem[]> => {
  123. return http.request({
  124. url: `/admin/algo/queryAllAlgoInfoByCameraId?cameraId=${cameraId}`,
  125. method: 'post',
  126. });
  127. };
  128. interface SaveCameraAlgoParam {
  129. algoId: number;
  130. cameraId: number;
  131. detectionFrequency: number;
  132. detectionTime: string;
  133. electronicFence: string;
  134. status: 0 | 1;
  135. }
  136. interface CreateCameraAlgoParam {
  137. algoIds: number[];
  138. cameraId: number;
  139. }
  140. /** 保存相机的某个算法 */
  141. export const createCameraAlgoApi = (param: CreateCameraAlgoParam) => {
  142. return http.request({
  143. url: '/admin/algo/saveCameraAlgoWithConfig',
  144. data: param,
  145. method: 'post',
  146. });
  147. };
  148. /** 更新相机的某个算法 */
  149. export const updateCameraAlgoApi = (param: SaveCameraAlgoParam & { id: number }) => {
  150. return http.request({
  151. url: '/admin/algo/updateCameraAlgoRel',
  152. data: param,
  153. method: 'put',
  154. });
  155. };
  156. /** 删除相机的某个算法 */
  157. export const deleteCameraAlgoApi = (params: { cameraId: number; algoId: number }) => {
  158. const paramString = qs.stringify(params);
  159. return http.request({
  160. url: '/admin/algo/deleteAlgo?' + paramString,
  161. method: 'delete',
  162. });
  163. };
  164. export interface GetFenceParams {
  165. algoId: number;
  166. cameraId: number;
  167. presetToken: string;
  168. }
  169. /** 查询电子围栏 */
  170. export const getFenceApi = (
  171. params: GetFenceParams,
  172. ): Promise<{ id: number; electronicFencePolygon: string }> => {
  173. return http.request({
  174. url: '/admin/cameraPreview/queryFence',
  175. method: 'GET',
  176. params,
  177. });
  178. };
  179. export interface SaveFenceParams {
  180. algoId: number;
  181. cameraId: number;
  182. electronicFencePolygon: string;
  183. presetToken: string;
  184. }
  185. /** 添加电子围栏 */
  186. export const saveFenceApi = (data: SaveFenceParams) => {
  187. return http.request({
  188. url: '/admin/cameraPreview/saveFence',
  189. method: 'post',
  190. data,
  191. });
  192. };
  193. interface UpdateFenceParams {
  194. algoId: number;
  195. cameraId: number;
  196. electronicFencePolygon: string;
  197. id: number;
  198. presetToken: string;
  199. }
  200. /** 编辑电子围栏 */
  201. export const editFenceApi = (data: UpdateFenceParams) => {
  202. return http.request({
  203. url: '/admin/cameraPreview/updateFence',
  204. method: 'put',
  205. data,
  206. });
  207. };
  208. /** 删除电子围栏 */
  209. export const deleteFenceApi = (cameraAlgoPresetRelId: number) => {
  210. return http.request({
  211. url: `/cameraPreview/deleteFence?cameraAlgoPresetRelId=${cameraAlgoPresetRelId}`,
  212. method: 'delete',
  213. });
  214. };
  215. interface CreatePresetParam {
  216. presetName: string;
  217. cameraId: number;
  218. }
  219. /** 创建预置位 */
  220. export const createPresetApi = (data: CreatePresetParam) => {
  221. return http.request({
  222. url: `/camera/createPreset`,
  223. method: 'post',
  224. data,
  225. });
  226. };
  227. interface UpdatePresetNameParam {
  228. presetToken: string;
  229. presetName: string;
  230. cameraId: number;
  231. }
  232. /** 修改预置位名称 */
  233. export const changePresetNameApi = (data: UpdatePresetNameParam) => {
  234. return http.request({
  235. url: `/camera/changePresetName`,
  236. method: 'post',
  237. data,
  238. });
  239. };
  240. /** 删除预置位 */
  241. export const deletePresetApi = (data: { presetToken: string; cameraId: number }) => {
  242. return http.request({
  243. url: `/camera/deletePreset`,
  244. method: 'post',
  245. data,
  246. });
  247. };
  248. interface PresetDetailItem {
  249. name: string;
  250. token: string;
  251. ptzposition: {
  252. panTilt: {
  253. x: number;
  254. y: number;
  255. space: null;
  256. };
  257. zoom: {
  258. x: number;
  259. space: null;
  260. };
  261. };
  262. }
  263. /** 获取预置位列表 */
  264. export const getPresetListApi = (cameraId: number) => {
  265. return http.request<PresetDetailItem[]>(
  266. {
  267. url: `/camera/getPresets`,
  268. method: 'get',
  269. params: { cameraId },
  270. },
  271. {
  272. isShowErrorMessage: false,
  273. },
  274. );
  275. };
  276. /** 跳转到对应的预置位 */
  277. export const goToPresetApi = (data: { presetToken: string; cameraId: number }) => {
  278. return http.request({
  279. url: `/camera/gotoPreset`,
  280. method: 'post',
  281. data,
  282. });
  283. };
  284. export interface CameraAlgoPresetResp {
  285. algoId: string;
  286. algoCode: string;
  287. cameraId: string;
  288. cameraCode: string;
  289. presetToken: string;
  290. electronicFencePolygon: string;
  291. status: number;
  292. }
  293. /** 获取平台相机展示电子围栏的预置位和算法 */
  294. export const getAppCameraAlgoPreset = (cameraId: number): Promise<CameraAlgoPresetResp> => {
  295. return http.request({
  296. url: `/admin/algo/queryCameraPreset?cameraId=${cameraId}`,
  297. method: 'get',
  298. });
  299. };
  300. interface CameraMoveParam {
  301. cameraId: number;
  302. x: number;
  303. zoom: number;
  304. y: number;
  305. }
  306. /** 移动相机 */
  307. export const cameraMoveApi = (data: CameraMoveParam) => {
  308. return http.request({
  309. url: `/camera/move`,
  310. method: 'post',
  311. data,
  312. });
  313. };
  314. interface SaveCameraParams {
  315. cameraId: number;
  316. // 视频录制结束时间(格式"HH:mm")
  317. endAt: string;
  318. // 视频录制周期,单位是天;
  319. period: number;
  320. // 视频录制开始时间(格式"HH:mm")
  321. startAt: string;
  322. /** 分辨率 */
  323. resolution: number;
  324. }
  325. export const saveCameraParamsApi = (data: SaveCameraParams) => {
  326. return http.request({
  327. url: `/cameraPreview/saveNvr`,
  328. method: 'put',
  329. data,
  330. });
  331. };
  332. interface RenderPara {
  333. render: number | string;
  334. cameraId: number;
  335. }
  336. //相机是否选择算法渲染
  337. export const renderCamera = (data: RenderPara) => {
  338. return http.request({
  339. url: `/admin/cameraPreview/updateRender`,
  340. method: 'put',
  341. data,
  342. });
  343. };
  344. interface PresetType {
  345. algoCode: string;
  346. cameraCode: string;
  347. presetToken: string;
  348. }
  349. //选择相机算法预设
  350. export const choosePreset = (data: PresetType) => {
  351. return http.request({
  352. url: `/cameraPreview/choosePreset`,
  353. method: 'post',
  354. data,
  355. });
  356. };
  357. interface AlgoInfoType {
  358. code: string;
  359. id: number;
  360. presetInfoList?: AlgoPresetType[];
  361. cameraCode: string;
  362. cameraId: number;
  363. name: string;
  364. }
  365. interface AlgoPresetType {
  366. electronicFencePolygon: string;
  367. presetToken: string;
  368. status: number;
  369. }
  370. /**
  371. * v4: 查询指定相机的算法预设列表
  372. * @param cameraId
  373. * @returns
  374. */
  375. export const getCameraAlgoPresetList = (
  376. cameraId: number,
  377. ): Promise<{ algoInfoVOList: AlgoInfoType[] }> => {
  378. return http.request({
  379. url: `/admin/algo/queryCameraAlgoPresetList?cameraId=${cameraId}`,
  380. method: 'get',
  381. });
  382. };
  383. interface UpdateFenceType {
  384. cameraCode: string;
  385. status: number;
  386. }
  387. // 开启-关闭平台显示电子围栏
  388. export const updateFenceDisplayStatus = (data: UpdateFenceType) => {
  389. return http.request({
  390. url: `/admin/cameraPreview/updateFenceDisplayStatus`,
  391. method: 'put',
  392. data,
  393. });
  394. };
  395. /**
  396. * v4: 根据相机id查询相机detail
  397. * @param id
  398. * @returns
  399. */
  400. export const getCameraDeatilById = (id: number) => {
  401. return http.request({
  402. url: `/admin/cameraPreview/queryCameraDetailById?id=${id}`,
  403. method: 'post',
  404. });
  405. };