camera-preview.ts 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  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: '/cameraPreview/queryCameraListByCondition',
  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. export const getAllAlgosApi = () => {
  84. return http.request<AlgoItem[]>({
  85. url: '/cameraPreview/getAlgoList',
  86. method: 'get',
  87. });
  88. };
  89. /** 根据相机code获取算法列表 */
  90. export const getAlgosByCameraCode = (cameraCode: string) => {
  91. return http.request<AlgoItem[]>({
  92. url: `/cameraPreview/getAlgoListWithCamera?cameraCode=${cameraCode}`,
  93. method: 'get',
  94. });
  95. };
  96. /** 相机关联的算法信息 */
  97. export interface CameraAlgoItem {
  98. id?: number;
  99. algoId: number;
  100. cameraId?: number;
  101. code: string;
  102. name: string;
  103. detectionFrequency: number;
  104. detectionTime: string;
  105. electronicFence: number;
  106. status: ALGO_ENABLED_STATUS;
  107. algoInfo: AlgoItem;
  108. extra: string;
  109. }
  110. /** 查询某个camera下的所有算法 */
  111. export const getCameraAlgoListApi = (cameraId: number): Promise<CameraAlgoItem[]> => {
  112. return http.request({
  113. url: '/cameraPreview/getAlgo',
  114. method: 'get',
  115. params: { cameraId },
  116. });
  117. };
  118. interface SaveCameraAlgoParam {
  119. algoId: number;
  120. cameraId: number;
  121. detectionFrequency: number;
  122. detectionTime: string;
  123. electronicFence: string;
  124. status: 0 | 1;
  125. }
  126. interface CreateCameraAlgoParam {
  127. algoIds: number[];
  128. cameraId: number;
  129. }
  130. /** 保存相机的某个算法 */
  131. export const createCameraAlgoApi = (param: CreateCameraAlgoParam) => {
  132. return http.request({
  133. url: '/cameraPreview/saveAlgoWithConfig',
  134. data: param,
  135. method: 'post',
  136. });
  137. };
  138. /** 更新相机的某个算法 */
  139. export const updateCameraAlgoApi = (param: SaveCameraAlgoParam & { id: number }) => {
  140. return http.request({
  141. url: '/cameraPreview/updateAlgo',
  142. data: param,
  143. method: 'put',
  144. });
  145. };
  146. /** 删除相机的某个算法 */
  147. export const deleteCameraAlgoApi = (params: { cameraId: number; algoId: number }) => {
  148. const paramString = qs.stringify(params);
  149. return http.request({
  150. url: '/cameraPreview/deleteAlgo?' + paramString,
  151. method: 'delete',
  152. });
  153. };
  154. export interface GetFenceParams {
  155. algoId: number;
  156. cameraId: number;
  157. presetToken: string;
  158. }
  159. /** 查询电子围栏 */
  160. export const getFenceApi = (
  161. params: GetFenceParams,
  162. ): Promise<{ id: number; electronicFencePolygon: string }> => {
  163. return http.request({
  164. url: '/cameraPreview/getFence',
  165. method: 'GET',
  166. params,
  167. });
  168. };
  169. export interface SaveFenceParams {
  170. algoId: number;
  171. cameraId: number;
  172. electronicFencePolygon: string;
  173. presetToken: string;
  174. }
  175. /** 添加电子围栏 */
  176. export const saveFenceApi = (data: SaveFenceParams) => {
  177. return http.request({
  178. url: '/cameraPreview/saveFence',
  179. method: 'post',
  180. data,
  181. });
  182. };
  183. interface UpdateFenceParams {
  184. algoId: number;
  185. cameraId: number;
  186. electronicFencePolygon: string;
  187. id: number;
  188. presetToken: string;
  189. }
  190. /** 编辑电子围栏 */
  191. export const editFenceApi = (data: UpdateFenceParams) => {
  192. return http.request({
  193. url: '/cameraPreview/updateFence',
  194. method: 'put',
  195. data,
  196. });
  197. };
  198. /** 删除电子围栏 */
  199. export const deleteFenceApi = (cameraAlgoPresetRelId: number) => {
  200. return http.request({
  201. url: `/cameraPreview/deleteFence?cameraAlgoPresetRelId=${cameraAlgoPresetRelId}`,
  202. method: 'delete',
  203. });
  204. };
  205. interface CreatePresetParam {
  206. presetName: string;
  207. cameraId: number;
  208. }
  209. /** 创建预置位 */
  210. export const createPresetApi = (data: CreatePresetParam) => {
  211. return http.request({
  212. url: `/camera/createPreset`,
  213. method: 'post',
  214. data,
  215. });
  216. };
  217. interface UpdatePresetNameParam {
  218. presetToken: string;
  219. presetName: string;
  220. cameraId: number;
  221. }
  222. /** 修改预置位名称 */
  223. export const changePresetNameApi = (data: UpdatePresetNameParam) => {
  224. return http.request({
  225. url: `/camera/changePresetName`,
  226. method: 'post',
  227. data,
  228. });
  229. };
  230. /** 删除预置位 */
  231. export const deletePresetApi = (data: { presetToken: string; cameraId: number }) => {
  232. return http.request({
  233. url: `/camera/deletePreset`,
  234. method: 'post',
  235. data,
  236. });
  237. };
  238. interface PresetDetailItem {
  239. name: string;
  240. token: string;
  241. ptzposition: {
  242. panTilt: {
  243. x: number;
  244. y: number;
  245. space: null;
  246. };
  247. zoom: {
  248. x: number;
  249. space: null;
  250. };
  251. };
  252. }
  253. /** 获取预置位列表 */
  254. export const getPresetListApi = (cameraId: number) => {
  255. return http.request<PresetDetailItem[]>(
  256. {
  257. url: `/camera/getPresets`,
  258. method: 'get',
  259. params: { cameraId },
  260. },
  261. {
  262. isShowErrorMessage: false,
  263. },
  264. );
  265. };
  266. /** 跳转到对应的预置位 */
  267. export const goToPresetApi = (data: { presetToken: string; cameraId: number }) => {
  268. return http.request({
  269. url: `/camera/gotoPreset`,
  270. method: 'post',
  271. data,
  272. });
  273. };
  274. export interface CameraAlgoPresetResp {
  275. algoId: string;
  276. algoCode: string;
  277. cameraId: string;
  278. cameraCode: string;
  279. presetToken: string;
  280. electronicFencePolygon: string;
  281. status: number;
  282. }
  283. /** 获取平台相机展示电子围栏的预置位和算法 */
  284. export const getAppCameraAlgoPreset = (cameraCode: string): Promise<CameraAlgoPresetResp> => {
  285. return http.request({
  286. url: `/cameraPreview/getCameraPreset?cameraCode=${cameraCode}`,
  287. method: 'get',
  288. });
  289. };
  290. interface CameraMoveParam {
  291. cameraId: number;
  292. x: number;
  293. zoom: number;
  294. y: number;
  295. }
  296. /** 移动相机 */
  297. export const cameraMoveApi = (data: CameraMoveParam) => {
  298. return http.request({
  299. url: `/camera/move`,
  300. method: 'post',
  301. data,
  302. });
  303. };
  304. interface SaveCameraParams {
  305. cameraId: number;
  306. // 视频录制结束时间(格式"HH:mm")
  307. endAt: string;
  308. // 视频录制周期,单位是天;
  309. period: number;
  310. // 视频录制开始时间(格式"HH:mm")
  311. startAt: string;
  312. /** 分辨率 */
  313. resolution: number;
  314. }
  315. export const saveCameraParamsApi = (data: SaveCameraParams) => {
  316. return http.request({
  317. url: `/cameraPreview/saveNvr`,
  318. method: 'put',
  319. data,
  320. });
  321. };
  322. interface RenderPara {
  323. render: number | string;
  324. cameraId: number;
  325. }
  326. //相机是否选择算法渲染
  327. export const renderCamera = (data: RenderPara) => {
  328. return http.request({
  329. url: `/cameraPreview/saveRender`,
  330. method: 'put',
  331. data,
  332. });
  333. };
  334. interface PresetType {
  335. algoCode: string;
  336. cameraCode: string;
  337. presetToken: string;
  338. }
  339. //选择相机算法预设
  340. export const choosePreset = (data: PresetType) => {
  341. return http.request({
  342. url: `/cameraPreview/choosePreset`,
  343. method: 'post',
  344. data,
  345. });
  346. };
  347. interface AlgoInfoType {
  348. code: string;
  349. id: number;
  350. presetInfoList?: AlgoPresetType[];
  351. cameraCode: string;
  352. cameraId: number;
  353. name: string;
  354. }
  355. interface AlgoPresetType {
  356. electronicFencePolygon: string;
  357. presetToken: string;
  358. status: number;
  359. }
  360. //查询相机算法预设列表
  361. export const getCameraAlgoPresetList = (
  362. cameraCode: string,
  363. ): Promise<{ algoInfoVOList: AlgoInfoType[] }> => {
  364. return http.request({
  365. url: `/cameraPreview/getCameraAlgoPresetList?cameraCode=${cameraCode}`,
  366. method: 'get',
  367. });
  368. };
  369. interface UpdateFenceType {
  370. cameraCode: string;
  371. status: number;
  372. }
  373. // 开启-关闭平台显示电子围栏
  374. export const updateFenceDisplayStatus = (data: UpdateFenceType) => {
  375. return http.request({
  376. url: `/cameraPreview/updateFenceDisplayStatus`,
  377. method: 'post',
  378. data,
  379. });
  380. };
  381. // 根据相机id查询相机detail
  382. export const getCameraDeatilById = (id: number) => {
  383. return http.request({
  384. url: `/cameraPreview/queryCameraDetailById?id=${id}`,
  385. method: 'post',
  386. });
  387. };