xlcp-frontend/src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue

82 lines
2.1 KiB
Vue

<!-- 设备触发配置组件 -->
<template>
<div class="flex flex-col gap-16px">
<!-- 主条件配置 - 默认直接展示 -->
<div class="space-y-16px">
<MainConditionConfig
v-model="trigger"
:trigger-type="trigger.type"
@trigger-type-change="handleTriggerTypeChange"
/>
</div>
<!-- 条件组配置 -->
<div class="space-y-16px">
<!-- 条件组配置 -->
<ConditionGroupContainerConfig
v-model="trigger.conditionGroups"
:trigger-type="trigger.type"
@remove="removeConditionGroup"
/>
</div>
</div>
</template>
<script setup lang="ts">
import { useVModel } from '@vueuse/core'
import MainConditionConfig from './MainConditionConfig.vue'
import ConditionGroupContainerConfig from './ConditionGroupContainerConfig.vue'
import { TriggerFormData } from '@/api/iot/rule/scene/scene.types'
import { IotRuleSceneTriggerTypeEnum as TriggerTypeEnum } from '@/views/iot/utils/constants'
/** 设备触发配置组件 */
defineOptions({ name: 'DeviceTriggerConfig' })
const props = defineProps<{
modelValue: TriggerFormData
index: number
}>()
const emit = defineEmits<{
(e: 'update:modelValue', value: TriggerFormData): void
(e: 'validate', value: { valid: boolean; message: string }): void
(e: 'trigger-type-change', type: number): void
}>()
const trigger = useVModel(props, 'modelValue', emit)
// 初始化主条件
const initMainCondition = () => {
// TODO @puhui999: 等到编辑回显时联调
// if (!trigger.value.mainCondition) {
// trigger.value = {
// type: trigger.value.type, // 使用触发事件类型作为条件类型
// productId: undefined,
// deviceId: undefined,
// identifier: '',
// operator: '=',
// param: ''
// }
// }
}
// 监听触发器类型变化,自动初始化主条件
watch(
() => trigger.value.type,
() => {
initMainCondition()
},
{ immediate: true }
)
const handleTriggerTypeChange = (type: number) => {
trigger.value.type = type
emit('trigger-type-change', type)
}
const removeConditionGroup = () => {
trigger.value.conditionGroups = undefined
}
</script>