camera-preview.ts 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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. /** 获取摄像头所在的树状结构 */
  26. export const getCameraTree = () => {
  27. return http.request<CameraTree[]>({
  28. url: '/cameraPreview/getList',
  29. method: 'get',
  30. });
  31. };
  32. /** 算法是否启用 */
  33. export enum ALGO_ENABLED_STATUS {
  34. // 0代表启用
  35. enabled = 0,
  36. disabled = 1,
  37. }
  38. /** 电子围栏是否启用 */
  39. export enum FENCE_ENBALED_STATUS {
  40. enabled = 0,
  41. disabled = 1,
  42. }
  43. interface AlgoItem {
  44. id: number;
  45. name: string;
  46. code?: string;
  47. showName?: string;
  48. remark?: string;
  49. url?: string;
  50. pushStatement?: string;
  51. pushLinkPrompt?: string;
  52. status?: ALGO_ENABLED_STATUS;
  53. createdAt?: string;
  54. updatedAt?: string;
  55. }
  56. /** 查询所有的算法 */
  57. export const getAllAlgosApi = () => {
  58. return http.request<AlgoItem[]>({
  59. url: '/cameraPreview/getAlgoList',
  60. method: 'get',
  61. });
  62. };
  63. /** 相机关联的算法信息 */
  64. export interface CameraAlgoItem {
  65. id?: number;
  66. algoId: number;
  67. cameraId?: number;
  68. code: string;
  69. name: string;
  70. detectionFrequency: number;
  71. detectionTime: string;
  72. electronicFence: number;
  73. status: ALGO_ENABLED_STATUS;
  74. algoInfo: AlgoItem;
  75. }
  76. /** 查询某个camera下的所有算法 */
  77. export const getCameraAlgoListApi = (cameraId: number): Promise<CameraAlgoItem[]> => {
  78. return http.request({
  79. url: '/cameraPreview/getAlgo',
  80. method: 'get',
  81. params: { cameraId },
  82. });
  83. };
  84. interface SaveCameraAlgoParam {
  85. algoId: number;
  86. cameraId: number;
  87. detectionFrequency: number;
  88. detectionTime: string;
  89. electronicFence: string;
  90. status: 0 | 1;
  91. }
  92. interface CreateCameraAlgoParam {
  93. algoIds: number[];
  94. cameraId: number;
  95. }
  96. /** 保存相机的某个算法 */
  97. export const createCameraAlgoApi = (param: CreateCameraAlgoParam) => {
  98. return http.request({
  99. url: '/cameraPreview/saveAlgo',
  100. data: param,
  101. method: 'post',
  102. });
  103. };
  104. /** 更新相机的某个算法 */
  105. export const updateCameraAlgoApi = (param: SaveCameraAlgoParam & { id: number }) => {
  106. return http.request({
  107. url: '/cameraPreview/updateAlgo',
  108. data: param,
  109. method: 'put',
  110. });
  111. };
  112. /** 删除相机的某个算法 */
  113. export const deleteCameraAlgoApi = (params: { cameraId: number; algoId: number }) => {
  114. const paramString = qs.stringify(params);
  115. return http.request({
  116. url: '/cameraPreview/deleteAlgo?' + paramString,
  117. method: 'delete',
  118. });
  119. };
  120. export interface GetFenceParams {
  121. algoId: number;
  122. cameraId: number;
  123. presetToken: string;
  124. }
  125. /** 查询电子围栏 */
  126. export const getFenceApi = (
  127. params: GetFenceParams,
  128. ): Promise<{ id: number; electronicFencePolygon: string }> => {
  129. return http.request({
  130. url: '/cameraPreview/getFence',
  131. method: 'GET',
  132. params,
  133. });
  134. };
  135. export interface SaveFenceParams {
  136. algoId: number;
  137. cameraId: number;
  138. electronicFencePolygon: string;
  139. presetToken: string;
  140. }
  141. /** 添加电子围栏 */
  142. export const saveFenceApi = (data: SaveFenceParams) => {
  143. return http.request({
  144. url: '/cameraPreview/saveFence',
  145. method: 'post',
  146. data,
  147. });
  148. };
  149. interface UpdateFenceParams {
  150. algoId: number;
  151. cameraId: number;
  152. electronicFencePolygon: string;
  153. id: number;
  154. presetToken: string;
  155. }
  156. /** 编辑电子围栏 */
  157. export const editFenceApi = (data: UpdateFenceParams) => {
  158. return http.request({
  159. url: '/cameraPreview/updateFence',
  160. method: 'put',
  161. data,
  162. });
  163. };
  164. /** 删除电子围栏 */
  165. export const deleteFenceApi = (cameraAlgoPresetRelId: number) => {
  166. return http.request({
  167. url: `/cameraPreview/deleteFence?cameraAlgoPresetRelId=${cameraAlgoPresetRelId}`,
  168. method: 'delete',
  169. });
  170. };
  171. interface CreatePresetParam {
  172. presetName: string;
  173. cameraId: number;
  174. }
  175. /** 创建预置位 */
  176. export const createPresetApi = (data: CreatePresetParam) => {
  177. return http.request({
  178. url: `/camera/createPreset`,
  179. method: 'post',
  180. data,
  181. });
  182. };
  183. interface UpdatePresetNameParam {
  184. presetToken: string;
  185. presetName: string;
  186. cameraId: number;
  187. }
  188. /** 修改预置位名称 */
  189. export const changePresetNameApi = (data: UpdatePresetNameParam) => {
  190. return http.request({
  191. url: `/camera/changePresetName`,
  192. method: 'post',
  193. data,
  194. });
  195. };
  196. /** 删除预置位 */
  197. export const deletePresetApi = (data: { presetToken: string; cameraId: number }) => {
  198. return http.request({
  199. url: `/camera/deletePreset`,
  200. method: 'post',
  201. data,
  202. });
  203. };
  204. interface PresetDetailItem {
  205. name: string;
  206. token: string;
  207. ptzposition: {
  208. panTilt: {
  209. x: number;
  210. y: number;
  211. space: null;
  212. };
  213. zoom: {
  214. x: number;
  215. space: null;
  216. };
  217. };
  218. }
  219. /** 获取预置位列表 */
  220. export const getPresetListApi = (cameraId: number) => {
  221. return http.request<PresetDetailItem[]>({
  222. url: `/camera/getPresets`,
  223. method: 'get',
  224. params: { cameraId },
  225. });
  226. };
  227. /** 跳转到对应的预置位 */
  228. export const goToPresetApi = (data: { presetToken: string; cameraId: number }) => {
  229. return http.request({
  230. url: `/camera/gotoPreset`,
  231. method: 'post',
  232. data,
  233. });
  234. };
  235. interface CameraMoveParam {
  236. cameraId: number;
  237. x: number;
  238. zoom: number;
  239. y: number;
  240. }
  241. /** 移动相机 */
  242. export const cameraMoveApi = (data: CameraMoveParam) => {
  243. return http.request({
  244. url: `/camera/move`,
  245. method: 'post',
  246. data,
  247. });
  248. };
  249. interface SaveCameraParams {
  250. cameraId: number;
  251. // 视频录制结束时间(格式"HH:mm")
  252. endAt: string;
  253. // 视频录制周期,单位是天;
  254. period: number;
  255. // 视频录制开始时间(格式"HH:mm")
  256. startAt: string;
  257. /** 分辨率 */
  258. resolution: number;
  259. }
  260. export const saveCameraParamsApi = (data: SaveCameraParams) => {
  261. return http.request({
  262. url: `/cameraPreview/saveNvr`,
  263. method: 'put',
  264. data,
  265. });
  266. };
  267. interface RenderPara {
  268. render: number | string;
  269. cameraId: number;
  270. }
  271. //相机是否选择算法渲染
  272. export const renderCamera = (data: RenderPara) => {
  273. return http.request({
  274. url: `/cameraPreview/saveRender`,
  275. method: 'put',
  276. data,
  277. });
  278. };