index.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <a-drawer
  3. :open="props.open"
  4. class="config-drawer"
  5. root-class-name="config-drawer-root"
  6. :title="drawerTitle"
  7. :width="drawerWidth"
  8. placement="right"
  9. @close="close"
  10. >
  11. <template #extra>
  12. <a-radio-group v-model:value="modeRadio" button-style="solid" size="small">
  13. <a-radio-button value="base">基础配置</a-radio-button>
  14. <a-radio-button value="area">区域配置</a-radio-button>
  15. </a-radio-group>
  16. </template>
  17. <template v-if="modeRadio === 'base' && props.open">
  18. <deviceBaseConfig
  19. :dev-id="props.data.devId"
  20. :client-id="props.data.clientId"
  21. @success="deviceAreaConfigSuccess"
  22. ></deviceBaseConfig>
  23. </template>
  24. <template v-if="modeRadio === 'area' && props.open">
  25. <deviceAreaConfig
  26. :dev-id="props.data.devId"
  27. :length="props.data.length"
  28. :width="props.data.width"
  29. :ranges="[props.data.xStart, props.data.xEnd, props.data.yStart, props.data.yEnd]"
  30. @success="deviceAreaConfigSuccess"
  31. ></deviceAreaConfig>
  32. </template>
  33. </a-drawer>
  34. </template>
  35. <script setup lang="ts">
  36. import { ref, watch, computed } from 'vue'
  37. import deviceBaseConfig from '../deviceBaseConfig/index.vue'
  38. import deviceAreaConfig from '../deviceAreaConfig/index.vue'
  39. defineOptions({
  40. name: 'DeviceConfigDrawer',
  41. })
  42. type Props = {
  43. open: boolean
  44. mode?: 'base' | 'area'
  45. title?: string
  46. data: {
  47. devId: string
  48. clientId: string
  49. length: number
  50. width: number
  51. xStart: number
  52. xEnd: number
  53. yStart: number
  54. yEnd: number
  55. }
  56. }
  57. const emit = defineEmits<{
  58. (e: 'update:open', value: boolean): void
  59. (e: 'success', value: void): void
  60. }>()
  61. const props = withDefaults(defineProps<Props>(), {
  62. open: false,
  63. mode: 'base',
  64. title: '',
  65. data: () => ({
  66. devId: '',
  67. clientId: '',
  68. length: 0,
  69. width: 0,
  70. xStart: 0,
  71. xEnd: 0,
  72. yStart: 0,
  73. yEnd: 0,
  74. }),
  75. })
  76. const modeRadio = ref<'base' | 'area'>(props.mode)
  77. const drawerWidth = computed(() => {
  78. return modeRadio.value === 'base' ? 600 : 800
  79. })
  80. const drawerTitle = computed(() =>
  81. props.title ? props.title : modeRadio.value === 'base' ? '设备配置' : '区域配置'
  82. )
  83. watch(
  84. () => props.open,
  85. (newVal) => {
  86. if (newVal) {
  87. console.log('🌸🌸deviceConfig PROPS🌸🌸', props)
  88. modeRadio.value = props.mode
  89. }
  90. },
  91. {
  92. immediate: true,
  93. }
  94. )
  95. const deviceAreaConfigSuccess = () => {
  96. close()
  97. emit('success')
  98. }
  99. const close = () => {
  100. emit('update:open', false)
  101. }
  102. </script>
  103. <style scoped lang="less"></style>