camera-preview.ts 6.4 KB

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