RenderSwitch.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <div style="display: flex; margin-left: 16px" v-if="cameraDetailStore.detail">
  3. <div style="margin-top: 2px; margin-right: 4px">渲染开关</div>
  4. <ElSelect v-model="selectedIds" @change="changeRender" style="width: 150px" size="small">
  5. <ElOption value="none" label="无渲染">无渲染</ElOption>
  6. <ElOption value="demo" label="有渲染">有渲染</ElOption>
  7. <!-- <ElOption v-for="item in allAlgoList" :key="item.id" :value="item.id" :label="item.name">
  8. {{ item.name }}
  9. <span style="margin-left: 5px" v-if="isAlgoBind(item.id)">√</span>
  10. </ElOption> -->
  11. </ElSelect></div
  12. >
  13. </template>
  14. <script lang="ts" setup>
  15. import { ElSelect, ElOption, ElMessageBox } from 'element-plus';
  16. import useCameraDetailStore from '../../store/useCameraDetailStore';
  17. import { ref } from 'vue';
  18. import { renderCamera } from '@/api/camera/camera-preview';
  19. import { watch } from 'vue';
  20. const cameraDetailStore = useCameraDetailStore();
  21. enum RenderTypes {
  22. none = 'none',
  23. demo = 'demo',
  24. }
  25. const selectedIds = ref<number | string>('');
  26. const changeRender = (val) => {
  27. const trueRender = val === RenderTypes.none ? '' : val;
  28. const renderData = {
  29. render: trueRender,
  30. cameraId: cameraDetailStore.cameraId,
  31. };
  32. renderCamera(renderData).catch(() => {
  33. selectedIds.value = RenderTypes.none;
  34. ElMessageBox.alert('开启数量达到上限,请关闭其他相机渲染后再开启。', '渲染开启失败', {
  35. type: 'warning',
  36. });
  37. });
  38. };
  39. const changeRenderWatch = () => {
  40. if (!cameraDetailStore.detail?.render) {
  41. selectedIds.value = RenderTypes.none;
  42. } else {
  43. selectedIds.value = cameraDetailStore.detail?.render;
  44. }
  45. };
  46. watch(() => cameraDetailStore.cameraId, changeRenderWatch, { immediate: true });
  47. watch(() => cameraDetailStore.detail?.render, changeRenderWatch, { immediate: true });
  48. </script>
  49. <style scoped></style>