AlgorithmsSetting.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <div>
  3. <div style="font-size: 14px; font-weight: bold">算法配置</div>
  4. <div style="display: flex">
  5. <div class="algoTagWrapper">
  6. <AddAlgoDialog />
  7. <AlgoTag
  8. v-for="item in cameraAlgoList"
  9. :key="item.code"
  10. :label="item.algoInfo?.name"
  11. :is-active="item.algoId === selectedAlgoId"
  12. @click="handleSelectAlgo(item.algoId)"
  13. :is-open="item.status === ALGO_ENABLED_STATUS.enabled"
  14. />
  15. </div>
  16. <div>
  17. <AlgoSettingCard
  18. @on-submit="handleSubmit"
  19. @on-remove="handleRemove"
  20. v-if="selectedAlgoId"
  21. />
  22. <div style="color: #ccc; margin-top: 20px" v-else>请选择左侧算法</div>
  23. </div>
  24. </div>
  25. </div>
  26. </template>
  27. <script lang="ts" setup>
  28. import useCameraAlgoStore from '../../store/useCameraAlgoStore';
  29. import AlgoSettingCard from './AlgoSettingCard.vue';
  30. import { storeToRefs } from 'pinia';
  31. import {
  32. deleteCameraAlgoApi,
  33. updateCameraAlgoApi,
  34. FENCE_ENBALED_STATUS,
  35. } from '@/api/camera/camera-preview';
  36. import { ElMessage } from 'element-plus';
  37. import AlgoTag from './AlgoTag.vue';
  38. import useFenceStore from '../../store/useFenceStore';
  39. import useCameraDetailStore from '../../store/useCameraDetailStore';
  40. import usePresetListStore from '../../store/usePresetListStore';
  41. import AddAlgoDialog from './AddAlgoDialog.vue';
  42. import { createDefaultTime, getDetectionJSON, getDetectionTimeJSON } from './utils';
  43. import { ALGO_ENABLED_STATUS } from '@/api/camera/camera-preview';
  44. import { watchEffect } from 'vue';
  45. const cameraAlgoStore = useCameraAlgoStore();
  46. const fenceStore = useFenceStore();
  47. const presetStore = usePresetListStore();
  48. const { getCameraAlgoList, getAlgoDetail } = cameraAlgoStore;
  49. const { cameraAlgoList, selectedAlgoId, selectedAlgoDetail } = storeToRefs(cameraAlgoStore);
  50. const cameraDetailStore = useCameraDetailStore();
  51. const handleSelectAlgo = (algoId: number) => {
  52. if (algoId !== selectedAlgoId.value) {
  53. selectedAlgoId.value = algoId;
  54. }
  55. };
  56. watchEffect(() => {
  57. const algoId = selectedAlgoId.value;
  58. if (!algoId) return;
  59. const detail = getAlgoDetail(algoId);
  60. if (!detail) return;
  61. console.log('detail change', detail);
  62. const detectionJSON = getDetectionJSON(detail?.detectionFrequency);
  63. const enableCard = detail?.status === ALGO_ENABLED_STATUS.enabled ? true : false;
  64. const electronicFenceBool =
  65. detail?.electronicFence === FENCE_ENBALED_STATUS.enabled ? true : false;
  66. const timeRangeArr = getDetectionTimeJSON(detail?.detectionTime) || [createDefaultTime()];
  67. selectedAlgoDetail.value = {
  68. ...detail,
  69. detectionJSON,
  70. enableCardBool: enableCard,
  71. electronicFenceBool,
  72. timeRangeArr,
  73. };
  74. fenceStore.getFence({
  75. algoId: algoId,
  76. cameraId: cameraDetailStore.cameraId,
  77. presetToken: presetStore.currentPresetToken,
  78. });
  79. });
  80. const handleSubmit = (param) => {
  81. console.log('submitParam', param);
  82. const cameraId = cameraDetailStore.cameraId;
  83. const newParam = {
  84. cameraId: cameraId,
  85. electronicFence: param.electronicFence,
  86. algoId: param.algoId,
  87. detectionFrequency: param.detectionFrequency,
  88. detectionTime: param.detectionTime,
  89. status: param.status,
  90. };
  91. if (param.id) {
  92. updateCameraAlgoApi({ ...newParam, id: param.id }).then(() => {
  93. ElMessage.success('更新成功');
  94. getCameraAlgoList(cameraId);
  95. });
  96. }
  97. };
  98. const handleRemove = (algoId: number) => {
  99. console.log('remove', algoId);
  100. deleteCameraAlgoApi({ algoId, cameraId: cameraDetailStore.cameraId }).then(() => {
  101. ElMessage.success('删除成功');
  102. getCameraAlgoList(cameraDetailStore.cameraId);
  103. selectedAlgoId.value = undefined;
  104. });
  105. };
  106. </script>
  107. <style scoped>
  108. .algoTagWrapper {
  109. min-width: 150px;
  110. margin-right: 15px;
  111. }
  112. </style>