AddAlgoDialog.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <!-- <ElButton type="primary" @click="showDialog" size="small" style="margin-top: 10px">
  3. + 添加算法</ElButton
  4. > -->
  5. <AlgoAddBtn @click="showDialog"></AlgoAddBtn>
  6. <ElDialog
  7. v-model="visible"
  8. title="添加算法"
  9. @close="handleClose"
  10. width="500px"
  11. :close-on-click-modal="!algoListVisiable"
  12. >
  13. <div style="display: flex; justify-content: center; align-items: center">
  14. <span>算法:</span>
  15. <ElSelect
  16. v-model="selectedIds"
  17. multiple
  18. style="width: 224px"
  19. size="small"
  20. @visible-change="handleVisibleChange"
  21. placeholder="请为该相机选择关联的算法"
  22. >
  23. <ElOption
  24. v-for="item in curOptionsByCode"
  25. :key="item.id"
  26. :value="item.id"
  27. :label="item.name"
  28. :disabled="!!isAlgoBind(item.id)"
  29. >
  30. {{ item.name }}
  31. <span style="margin-left: 5px" v-if="isAlgoBind(item.id)">√</span>
  32. </ElOption>
  33. </ElSelect>
  34. </div>
  35. <template #footer>
  36. <el-button @click="handleClose">取消</el-button>
  37. <el-button type="primary" @click="handleSubmit"> 确定 </el-button>
  38. </template>
  39. </ElDialog>
  40. </template>
  41. <script lang="ts" setup>
  42. import { ElDialog, ElSelect, ElOption, ElButton, ElMessage } from 'element-plus';
  43. import { ref, onMounted } from 'vue';
  44. import useCameraAlgoStore from '../../store/useCameraAlgoStore';
  45. import { storeToRefs } from 'pinia';
  46. import { createCameraAlgoApi } from '@/api/camera/camera-preview';
  47. import useCameraDetailStore from '../../store/useCameraDetailStore';
  48. import AlgoAddBtn from '../AlgoSwitchCard/AlgoAddBtn.vue';
  49. import { AlgoDetail, queryAlgoInfoAll } from '@/api/algo/algo';
  50. const selectedIds = ref<number[]>([]);
  51. const cameraAlgoStore = useCameraAlgoStore();
  52. const { isAlgoBind } = cameraAlgoStore;
  53. // const { allAlgoList, selectedAlgoId } = storeToRefs(cameraAlgoStore);
  54. const { getCameraAlgoList } = cameraAlgoStore;
  55. const cameraDetailStore = useCameraDetailStore();
  56. const { detail } = storeToRefs(cameraDetailStore);
  57. const visible = ref(false);
  58. const algoListVisiable = ref(false);
  59. const handleClose = () => {
  60. visible.value = false;
  61. };
  62. const curOptionsByCode = ref<AlgoDetail[]>([]);
  63. onMounted(() => {
  64. queryAlgoInfoAll().then((res) => {
  65. curOptionsByCode.value = res;
  66. });
  67. });
  68. const handleVisibleChange = (visible: boolean) => {
  69. const t = setTimeout(() => {
  70. algoListVisiable.value = visible;
  71. clearTimeout(t);
  72. }, 100);
  73. };
  74. const handleSubmit = () => {
  75. if (selectedIds.value?.length < 1) {
  76. ElMessage.warning({ message: '请选择算法' });
  77. return;
  78. }
  79. createCameraAlgoApi({
  80. algoIds: selectedIds.value || [],
  81. cameraId: cameraDetailStore.cameraId,
  82. }).then((res) => {
  83. console.log('createAlgo ok', res);
  84. // selectedAlgoId.value = selectedIds.value?.[0];
  85. getCameraAlgoList(cameraDetailStore.cameraId);
  86. ElMessage.success('添加成功,请完成算法参数配置后生效');
  87. visible.value = false;
  88. });
  89. };
  90. const showDialog = () => {
  91. visible.value = true;
  92. selectedIds.value = [];
  93. };
  94. </script>
  95. <style scoped>
  96. :deep(.el-select .el-input__inner) {
  97. min-height: 32px;
  98. }
  99. </style>