PresetSelect.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 } from '@/api/camera/camera-preview';
  33. import useCameraDetailStore from '../../store/useCameraDetailStore';
  34. import { ref } from 'vue';
  35. // const presetOptions = ref([
  36. // { label: '预置位1', value: 'p1' },
  37. // { label: '预置位2', value: 'p2' },
  38. // ]);
  39. const presetListStore = usePresetListStore();
  40. const cameraDetailStore = useCameraDetailStore();
  41. const { data: presetOptions, currentPresetToken } = storeToRefs(presetListStore);
  42. const handleDeletePreset = (token: string) => {
  43. ElMessageBox({
  44. message:
  45. '该预置位可能存在关联的电子围栏。删除该预置位将会删除对应的电子围栏信息,请确认是否删除',
  46. title: '删除确认',
  47. showCancelButton: true,
  48. confirmButtonText: '确认删除',
  49. beforeClose: (action, instance, done) => {
  50. if (action === 'confirm') {
  51. instance.confirmButtonLoading = true;
  52. deletePresetApi({ presetToken: token, cameraId: cameraDetailStore.cameraId })
  53. .then((res) => {
  54. ElMessage.success('删除成功!');
  55. presetListStore.getPresetList(cameraDetailStore.cameraId);
  56. currentPresetToken.value = presetOptions.value?.[0].token || '';
  57. done();
  58. })
  59. .finally(() => {
  60. instance.confirmButtonLoading = true;
  61. });
  62. } else {
  63. done();
  64. }
  65. },
  66. });
  67. };
  68. const handleChangeValue = (val) => {
  69. console.log('changeValue', val);
  70. currentPresetToken.value = val;
  71. };
  72. </script>
  73. <style scoped>
  74. .presetSetting {
  75. display: flex;
  76. align-items: center;
  77. }
  78. </style>