Просмотр исходного кода

【代码优化】IoT: 场景联动执行器设备控制器信息回显

puhui999 1 год назад
Родитель
Сommit
04cfded36f

+ 1 - 0
src/views/iot/rule/scene/components/action/ActionExecutor.vue

@@ -49,6 +49,7 @@
       v-if="actionConfig.type === IotRuleSceneActionTypeEnum.DEVICE_CONTROL"
       :model-value="actionConfig.deviceControl"
       :product-id="product?.id"
+      :product-key="product?.productKey"
       @update:model-value="(val) => (actionConfig.deviceControl = val)"
     />
 

+ 9 - 14
src/views/iot/rule/scene/components/action/DeviceControlAction.vue

@@ -80,6 +80,7 @@ defineOptions({ name: 'DeviceControlAction' })
 const props = defineProps<{
   modelValue: any
   productId?: number
+  productKey?: string
 }>()
 const emits = defineEmits(['update:modelValue'])
 const deviceControlConfig = useVModel(props, 'modelValue', emits) as Ref<ActionDeviceControl>
@@ -169,11 +170,7 @@ const getThingModelTSL = async () => {
   if (!props.productId) {
     return
   }
-  try {
-    thingModelTSL.value = await ThingModelApi.getThingModelTSLByProductId(props.productId)
-  } catch (error) {
-    console.error('获取物模型失败', error)
-  }
+  thingModelTSL.value = await ThingModelApi.getThingModelTSLByProductId(props.productId)
 }
 const thingModels = computed(() => (identifier?: string): any[] => {
   if (isEmpty(thingModelTSL.value)) {
@@ -183,8 +180,7 @@ const thingModels = computed(() => (identifier?: string): any[] => {
     case IotDeviceMessageTypeEnum.PROPERTY:
       return thingModelTSL.value?.properties || []
     case IotDeviceMessageTypeEnum.SERVICE:
-      // TODO puhui999: 要限制只过滤出 set 类型的 service 吗?
-      const service = thingModelTSL.value.services.find(
+      const service = thingModelTSL.value.services?.find(
         (item: any) => item.identifier === identifier
       )
       return service?.inputParams || []
@@ -200,23 +196,22 @@ const getUnitName = computed(() => (identifier: string) => {
   if (model?.dataSpecs) {
     return model.dataSpecs.unitName
   }
+  // TODO puhui999: enum、bool、struct 类型数据处理
   return ''
 })
 
 /** 监听 productId 变化 */
 watch(
   () => props.productId,
-  (newVal) => {
-    if (!newVal) {
-      thingModelTSL.value = undefined
-      parameters.value = []
+  () => {
+    getThingModelTSL()
+    if (deviceControlConfig.value && deviceControlConfig.value.productKey === props.productKey) {
       return
     }
-    getThingModelTSL()
     // 当产品ID变化时,清空原有数据
     deviceControlConfig.value.data = {}
-  },
-  { immediate: true }
+    parameters.value = []
+  }
 )
 
 /** 监听消息类型变化 */