PresetSelect.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <div class="presetSetting">
  3. <div style="margin-right: 10px">预置位</div>
  4. <div>
  5. <ElSelect
  6. :model-value="currentPresetToken"
  7. size="small"
  8. filterable
  9. @update:model-value="handleChangeValue"
  10. >
  11. <ElOption
  12. v-for="item in presetOptions"
  13. :key="item.token"
  14. :label="item.name"
  15. :value="item.token"
  16. >
  17. <span style="float: left">{{ item.name }}</span>
  18. <span style="float: right; color: var(--el-text-color-secondary); font-size: 13px">
  19. <!-- 点击删除的时候,阻止选中菜单 -->
  20. <el-icon @click.stop="handleDeletePreset(item.token)"><CircleCloseFilled /></el-icon>
  21. </span>
  22. </ElOption>
  23. </ElSelect>
  24. </div>
  25. </div>
  26. </template>
  27. <script lang="ts" setup>
  28. import { ElSelect, ElOption, ElMessage, ElMessageBox } from 'element-plus';
  29. import { CircleCloseFilled } from '@element-plus/icons-vue';
  30. import usePresetListStore from '../../store/usePresetListStore';
  31. import { storeToRefs } from 'pinia';
  32. import { deletePresetApi, goToPresetApi } from '@/api/camera/camera-preview';
  33. import useCameraDetailStore from '../../store/useCameraDetailStore';
  34. import useFenceStore from '../../store/useFenceStore';
  35. import useCameraAlgoStore from '../../store/useCameraAlgoStore';
  36. const presetListStore = usePresetListStore();
  37. const cameraAlgoStore = useCameraAlgoStore();
  38. const cameraDetailStore = useCameraDetailStore();
  39. const { data: presetOptions, currentPresetToken } = storeToRefs(presetListStore);
  40. const fenceStore = useFenceStore();
  41. const handleDeletePreset = (token: string) => {
  42. ElMessageBox({
  43. message:
  44. '该预置位可能存在关联的电子围栏。删除该预置位将会删除对应的电子围栏信息,请确认是否删除',
  45. title: '删除确认',
  46. showCancelButton: true,
  47. confirmButtonText: '确认删除',
  48. beforeClose: (action, instance, done) => {
  49. if (action === 'confirm') {
  50. instance.confirmButtonLoading = true;
  51. deletePresetApi({ presetToken: token, cameraId: cameraDetailStore.cameraId })
  52. .then((res) => {
  53. ElMessage.success('删除成功!');
  54. presetListStore.getPresetList(cameraDetailStore.cameraId);
  55. currentPresetToken.value = presetOptions.value?.[0].token || '';
  56. done();
  57. })
  58. .finally(() => {
  59. instance.confirmButtonLoading = true;
  60. });
  61. } else {
  62. done();
  63. }
  64. },
  65. });
  66. };
  67. const handleChangeValue = (val) => {
  68. currentPresetToken.value = val;
  69. goToPresetApi({ presetToken: val, cameraId: cameraDetailStore.cameraId });
  70. fenceStore.getFence({
  71. presetToken: val,
  72. algoId: cameraAlgoStore.selectedAlgoId!,
  73. cameraId: cameraDetailStore.cameraId,
  74. });
  75. };
  76. </script>
  77. <style scoped>
  78. .presetSetting {
  79. display: flex;
  80. align-items: center;
  81. }
  82. </style>