ThingModelService.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <!-- 产品的物模型表单(service 项) -->
  2. <template>
  3. <el-form-item
  4. :rules="[{ required: true, message: '请选择调用方式', trigger: 'change' }]"
  5. label="调用方式"
  6. prop="service.callType"
  7. >
  8. <el-radio-group v-model="service.callType">
  9. <el-radio :value="ThingModelServiceCallType.ASYNC.value">
  10. {{ ThingModelServiceCallType.ASYNC.label }}
  11. </el-radio>
  12. <el-radio :value="ThingModelServiceCallType.SYNC.value">
  13. {{ ThingModelServiceCallType.SYNC.label }}
  14. </el-radio>
  15. </el-radio-group>
  16. </el-form-item>
  17. <el-form-item label="输入参数">
  18. <ThingModelInputOutputParam
  19. v-model="service.inputParams"
  20. :direction="ThingModelParamDirection.INPUT"
  21. />
  22. </el-form-item>
  23. <el-form-item label="输出参数">
  24. <ThingModelInputOutputParam
  25. v-model="service.outputParams"
  26. :direction="ThingModelParamDirection.OUTPUT"
  27. />
  28. </el-form-item>
  29. </template>
  30. <script lang="ts" setup>
  31. import ThingModelInputOutputParam from './ThingModelInputOutputParam.vue'
  32. import { useVModel } from '@vueuse/core'
  33. import { ThingModelService } from '@/api/iot/thingmodel'
  34. import { ThingModelParamDirection, ThingModelServiceCallType } from './config'
  35. import { isEmpty } from '@/utils/is'
  36. /** IoT 物模型服务 */
  37. defineOptions({ name: 'ThingModelService' })
  38. const props = defineProps<{ modelValue: any; isStructDataSpecs?: boolean }>()
  39. const emits = defineEmits(['update:modelValue'])
  40. const service = useVModel(props, 'modelValue', emits) as Ref<ThingModelService>
  41. // 默认选中,ASYNC 异步
  42. watch(
  43. () => service.value.callType,
  44. (val: string) => isEmpty(val) && (service.value.callType = ThingModelServiceCallType.ASYNC.value),
  45. { immediate: true }
  46. )
  47. </script>
  48. <style lang="scss" scoped>
  49. :deep(.el-form-item) {
  50. .el-form-item {
  51. margin-bottom: 0;
  52. }
  53. }
  54. </style>