Kaynağa Gözat

feat: 将获取相机关联的算法提取为props,由外界传入

louhangfei 1 yıl önce
ebeveyn
işleme
1899cd40fd

+ 5 - 1
src/modules/algo-params-setting-base/AlgoParamsSettingBase.vue

@@ -33,7 +33,7 @@
   import usePresetListStore from './store/usePresetListStore';
   import useFenceStore from './store/useFenceStore';
   import { IsPtz } from '@/types/camera/constant';
-  import { getCameraDeatilById } from '@/api/camera/camera-preview';
+  import { CameraAlgoItem, getCameraDeatilById } from '@/api/camera/camera-preview';
   import { PROVIDE_CONSTANTS } from './constants';
   import { AlgoDetail } from '@/api/algo/algo';
   import PageTitle from './components/PageTitle/PageTitle.vue';
@@ -50,6 +50,8 @@
     cameraAllAlgoList: AlgoDetail[];
     /** 是否是相机分组 */
     isCameraGroup?: boolean;
+    /** 获取相机已关联的算法列表 */
+    getCameraAlgoList: (cameraId: number) => Promise<CameraAlgoItem[]>;
   }
   const props = defineProps<BaseProps>();
 
@@ -60,6 +62,8 @@
 
   provide(PROVIDE_CONSTANTS.baseProps, baseProps);
 
+  cameraAlgoStore.setCameraAlgoListFn(props.getCameraAlgoList);
+
   watch(
     () => cameraDetailStore.cameraId,
     async (cameraId) => {

+ 23 - 14
src/modules/algo-params-setting-base/store/useCameraAlgoStore.ts

@@ -1,6 +1,6 @@
-import { getAllAlgosApi, getCameraAlgoListApi, CameraAlgoItem } from '@/api/camera/camera-preview';
+import { getAllAlgosApi, CameraAlgoItem } from '@/api/camera/camera-preview';
 import { defineStore } from 'pinia';
-import { computed, ref } from 'vue';
+import { ref } from 'vue';
 import { useRequest } from 'vue-hooks-plus';
 import { TimePeriodItem } from '@/modules/algo/algo-params-edit/types';
 
@@ -37,16 +37,25 @@ const defaultSelectedAlgoDetail = {
 };
 
 const useCameraAlgoStore = defineStore('cameraAlgo', () => {
-  const {
-    data: cameraAlgoList,
-    runAsync: getCameraAlgoList,
-    mutate: mutateCameraAlgoList,
-  } = useRequest(
-    (cameraId: number) => {
-      return getCameraAlgoListApi(cameraId);
-    },
-    { manual: true },
-  );
+  /** 获取相机已关联的算法, 由外界传入,内部私有使用 */
+  let _getCameraAlgoList;
+  const cameraAlgoList = ref<CameraAlgoItem[]>([]);
+
+  /** 外界传入获取相机关联的算法 */
+  const setCameraAlgoListFn = (fn) => {
+    _getCameraAlgoList = fn;
+  };
+
+  /** 获取相机已关联的算法 */
+  const getCameraAlgoList = (cameraId: number) => {
+    if (!getCameraAlgoList) {
+      console.error('getCameraAlgoList不存在,请先调用setCameraAlgoListFn');
+      return;
+    }
+    return _getCameraAlgoList(cameraId).then((res) => {
+      cameraAlgoList.value = res;
+    });
+  };
 
   // 选中的算法id列表
   const selectedAlgoList = ref<number[]>([]);
@@ -78,7 +87,7 @@ const useCameraAlgoStore = defineStore('cameraAlgo', () => {
   };
 
   const clear = () => {
-    mutateCameraAlgoList();
+    cameraAlgoList.value = [];
     mutateAllAlgoList();
     selectedAlgoDetail.value = { ...defaultSelectedAlgoDetail } as CameraAlgoItemInCard;
     selectedAlgoList.value = [];
@@ -90,12 +99,12 @@ const useCameraAlgoStore = defineStore('cameraAlgo', () => {
     selectedAlgoId,
     selectedAlgoList,
     allAlgoList,
-
     getAllAlgoList,
     getAlgoDetail,
     selectedAlgoDetail,
     isAlgoBind,
     clear,
+    setCameraAlgoListFn,
   };
 });
 

+ 6 - 1
src/views/cameras/algo-params-setting/AlgoParamsSetting.vue

@@ -1,6 +1,10 @@
 <!-- 算法参数配置页面 -->
 <template>
-  <AlgoParamsSettingBase :cameraAllAlgoList="cameraAllAlgoList" :isCameraGroup="false">
+  <AlgoParamsSettingBase
+    :cameraAllAlgoList="cameraAllAlgoList"
+    :isCameraGroup="false"
+    :getCameraAlgoList="getCameraAlgoListApi"
+  >
     <template #cameraTree>
       <CameraTree />
     </template>
@@ -14,6 +18,7 @@
 
   import { watch, ref } from 'vue';
   import { useRoute } from 'vue-router';
+  import { getCameraAlgoListApi } from '@/api/camera/camera-preview';
   const cameraAllAlgoList = ref<AlgoDetail[]>([]);
   const route = useRoute();