useCameraAlgoStore.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import { getAllAlgosApi, getCameraAlgoListApi, CameraAlgoItem } from '@/api/camera/camera-preview';
  2. import { defineStore } from 'pinia';
  3. import { computed, ref } from 'vue';
  4. import { useRequest } from 'vue-hooks-plus';
  5. import { TimePeriodItem } from '../components/AlgorithmsSetting/types';
  6. import { DetectionJSON } from '../components/AlgorithmsSetting/utils';
  7. interface CameraAlgoItemInCard extends CameraAlgoItem {
  8. // detectionJSON: DetectionJSON;
  9. inferCode: string;
  10. enableCardBool: boolean;
  11. electronicFenceBool: boolean;
  12. regionJudge: number;
  13. timeRangeArr: TimePeriodItem[];
  14. metaValues: AlgoParamMetaItem[];
  15. judge: number; // 0-小于 1-大于 2-等于
  16. detectionFrequency: number;
  17. timeWindow?: number;
  18. }
  19. export interface AlgoParamMetaItem {
  20. id: string;
  21. label: string;
  22. criticalCount: number;
  23. confidence: number;
  24. 'min-width': number;
  25. 'max-width': number;
  26. nextObjs: AlgoParamMetaItem[];
  27. }
  28. const defaultSelectedAlgoDetail = {
  29. // detectionJSON: { detectionNum: 0, detectionUnit: 1 },
  30. regionJudge: 0,
  31. };
  32. const useCameraAlgoStore = defineStore('cameraAlgo', () => {
  33. const {
  34. data: cameraAlgoList,
  35. runAsync: getCameraAlgoList,
  36. mutate: mutateCameraAlgoList,
  37. } = useRequest(
  38. (cameraId: number) => {
  39. return getCameraAlgoListApi(cameraId);
  40. },
  41. { manual: true },
  42. );
  43. const {
  44. data: allAlgoList,
  45. runAsync: getAllAlgoList,
  46. mutate: mutateAllAlgoList,
  47. } = useRequest(getAllAlgosApi, {
  48. manual: true,
  49. });
  50. // 标记的paramCard集合
  51. const markedParamCardIds = ref<string[]>([]);
  52. // 标记的timeRange集合
  53. const markedTimeRangeIds = ref<string[]>([]);
  54. /** 所有算法列表中选定的算法id */
  55. const selectedAlgoId = ref<number | null | undefined>();
  56. const selectedAlgoDetail = ref<CameraAlgoItemInCard>({
  57. ...defaultSelectedAlgoDetail,
  58. } as CameraAlgoItemInCard);
  59. //计算原始模板数据
  60. const metaObjList = computed(() => {
  61. const extra = selectedAlgoDetail.value.algoInfo?.extra;
  62. if (!extra) return [];
  63. const extraObj = JSON.parse(extra);
  64. const params = extraObj?.inferParams;
  65. if (!params || (params && params.length == 0)) return [];
  66. const metaObjs = params[0]?.metaObjs;
  67. return metaObjs ? metaObjs : [];
  68. });
  69. const getAlgoDetail = (algoId: number): null | CameraAlgoItem => {
  70. const detail = cameraAlgoList.value?.find((x) => x.algoId === algoId);
  71. if (!detail) return null;
  72. return detail;
  73. };
  74. /** 算法是否已经绑定到相机 */
  75. const isAlgoBind = (algoId: number) => {
  76. return cameraAlgoList.value?.find((x) => x.algoId === algoId);
  77. };
  78. const deleteParam = (id: string) => {
  79. selectedAlgoDetail.value.metaValues = selectedAlgoDetail.value.metaValues.filter(
  80. (x) => x.id !== id,
  81. );
  82. };
  83. const deleteTimeRange = (id: string) => {
  84. selectedAlgoDetail.value.timeRangeArr = selectedAlgoDetail.value.timeRangeArr.filter(
  85. (item) => item.id !== id,
  86. );
  87. };
  88. const clear = () => {
  89. mutateCameraAlgoList();
  90. mutateAllAlgoList();
  91. selectedAlgoDetail.value = { ...defaultSelectedAlgoDetail } as CameraAlgoItemInCard;
  92. };
  93. return {
  94. cameraAlgoList,
  95. getCameraAlgoList,
  96. selectedAlgoId,
  97. metaObjList,
  98. allAlgoList,
  99. markedParamCardIds,
  100. markedTimeRangeIds,
  101. getAllAlgoList,
  102. getAlgoDetail,
  103. selectedAlgoDetail,
  104. isAlgoBind,
  105. clear,
  106. deleteParam,
  107. deleteTimeRange,
  108. };
  109. });
  110. export default useCameraAlgoStore;