Commit c4ef059ccd95b9685e2a2b88991d85a20a1cf305
1 parent
1281e6e8
fix: DEFECT-1118 修复场景联动tcp设备下发指令为字符串
Showing
3 changed files
with
48 additions
and
8 deletions
... | ... | @@ -13,6 +13,8 @@ import { queryDeviceProfileBy } from '/@/api/device/deviceManager'; |
13 | 13 | import { getModelServices } from '/@/api/device/modelOfMatter'; |
14 | 14 | import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; |
15 | 15 | import useCommonFun from '../hooks/useCommonFun'; |
16 | +import { DeviceProfileModel } from '/@/api/device/model/deviceModel'; | |
17 | +import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const'; | |
16 | 18 | |
17 | 19 | const { useByProductGetAttribute } = useCommonFun(); |
18 | 20 | export type TOption = { |
... | ... | @@ -443,6 +445,12 @@ export const actionSchema: FormSchema[] = [ |
443 | 445 | ifShow: ({ values }) => isDeviceOut(values.outTarget), |
444 | 446 | }, |
445 | 447 | { |
448 | + field: 'transportType', | |
449 | + label: '', | |
450 | + component: 'Input', | |
451 | + show: false, | |
452 | + }, | |
453 | + { | |
446 | 454 | field: 'deviceProfileId', |
447 | 455 | label: '', |
448 | 456 | component: 'ApiSelect', |
... | ... | @@ -459,8 +467,28 @@ export const actionSchema: FormSchema[] = [ |
459 | 467 | labelField: 'name', |
460 | 468 | valueField: 'id', |
461 | 469 | getPopupContainer: () => document.body, |
462 | - onChange: () => { | |
463 | - setFieldsValue({ thingsModelId: '', deviceId: [] }); | |
470 | + onChange: (_value: string, options = {} as DeviceProfileModel) => { | |
471 | + const oldType = formModel['transportType']; | |
472 | + | |
473 | + const updateFlag = | |
474 | + oldType === TransportTypeEnum.TCP || options.transportType === TransportTypeEnum.TCP; | |
475 | + | |
476 | + setFieldsValue({ | |
477 | + thingsModelId: '', | |
478 | + deviceId: [], | |
479 | + transportType: options.transportType, | |
480 | + ...(updateFlag ? { doContext: null } : {}), | |
481 | + }); | |
482 | + }, | |
483 | + onOptionsChange(options: DeviceProfileModel[]) { | |
484 | + const deviceProfileId = formModel['deviceProfileId']; | |
485 | + if (deviceProfileId) { | |
486 | + const index = options.findIndex( | |
487 | + (item) => (item as Recordable).value === deviceProfileId | |
488 | + ); | |
489 | + | |
490 | + ~index && setFieldsValue({ transportType: options[index].transportType }); | |
491 | + } | |
464 | 492 | }, |
465 | 493 | }; |
466 | 494 | }, | ... | ... |
... | ... | @@ -39,8 +39,15 @@ |
39 | 39 | </template> |
40 | 40 | </a-select> |
41 | 41 | </template> |
42 | - <template #doContext> | |
43 | - <div class="flex" style="align-items: center"> | |
42 | + <template #doContext="{ model, field }"> | |
43 | + <div v-if="model['transportType'] === TransportTypeEnum.TCP"> | |
44 | + <Input v-model:value="model[field]" placeholder="请输入自定义命令" /> | |
45 | + </div> | |
46 | + <div | |
47 | + v-show="model['transportType'] !== TransportTypeEnum.TCP" | |
48 | + class="flex" | |
49 | + style="align-items: center" | |
50 | + > | |
44 | 51 | <div ref="jsoneditorRef" style="height: 100%; width: 100%"></div> |
45 | 52 | <a-button style="margin: -5px 0" type="text" @click="handlePremitter">格式化</a-button> |
46 | 53 | <Tooltip |
... | ... | @@ -88,11 +95,13 @@ |
88 | 95 | <script lang="ts"> |
89 | 96 | import { defineComponent } from 'vue'; |
90 | 97 | import { isNumber } from '/@/utils/is'; |
98 | + import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const'; | |
91 | 99 | export default defineComponent({ |
92 | 100 | components: { |
93 | 101 | VNodes: (_, { attrs }) => { |
94 | 102 | return attrs.vnodes; |
95 | 103 | }, |
104 | + Input, | |
96 | 105 | }, |
97 | 106 | inheritAttrs: false, |
98 | 107 | }); |
... | ... | @@ -101,7 +110,7 @@ |
101 | 110 | import { ref, onMounted, nextTick, unref, computed, provide } from 'vue'; |
102 | 111 | import { CollapseContainer } from '/@/components/Container/index'; |
103 | 112 | import { BasicForm, useForm } from '/@/components/Form/index'; |
104 | - import { Tooltip, Select, Checkbox, Card } from 'ant-design-vue'; | |
113 | + import { Tooltip, Select, Checkbox, Card, Input } from 'ant-design-vue'; | |
105 | 114 | import { Icon } from '/@/components/Icon'; |
106 | 115 | import { actionSchema, CommandTypeEnum } from '../config/config.data'; |
107 | 116 | import jsoneditor from 'jsoneditor'; |
... | ... | @@ -260,13 +269,14 @@ |
260 | 269 | //ft-add-2022-11-22 |
261 | 270 | //TODO-fengtao-设备验证 |
262 | 271 | const value = getFieldsValue(); |
272 | + const isTCPTransportType = value.transportType === TransportTypeEnum.TCP; | |
263 | 273 | const doContext = unref(jsonInstance)?.get() || {}; |
264 | 274 | const serviceInputValue = Reflect.get(value, 'serviceInputValue'); |
265 | 275 | |
266 | 276 | return { |
267 | 277 | ...value, |
268 | 278 | ...(Number(value.commandType) === CommandTypeEnum.CUSTOM |
269 | - ? { doContext } | |
279 | + ? { doContext: isTCPTransportType ? value.doContext : doContext } | |
270 | 280 | : { doContext: serviceInputValue }), |
271 | 281 | clearRule, |
272 | 282 | }; |
... | ... | @@ -280,7 +290,9 @@ |
280 | 290 | ...(isNumber(fieldsValue.commandType) |
281 | 291 | ? { commandType: String(fieldsValue.commandType) } |
282 | 292 | : {}), |
283 | - serviceInputValue: commandType === CommandTypeEnum.SERVICE ? doContext.params || {} : {}, | |
293 | + ...(commandType === CommandTypeEnum.SERVICE | |
294 | + ? { serviceInputValue: doContext.params || {} } | |
295 | + : { doContext: doContext.params }), | |
284 | 296 | }); |
285 | 297 | }; |
286 | 298 | //ft-add | ... | ... |