Commit 7c9f4ba0bdaecedf4dbc1e191e2ffb20da16568e

Authored by ww
1 parent b950966b

fix: exclude id in functionJSON on model of matter page

  1 +import { cloneDeep } from 'lodash-es';
1 import { DateTypeEnum } from './config'; 2 import { DateTypeEnum } from './config';
2 import { StructFormValue } from './type'; 3 import { StructFormValue } from './type';
3 import { DataType, ModelOfMatterParams, StructJSON } from '/@/api/device/model/modelOfMatterModel'; 4 import { DataType, ModelOfMatterParams, StructJSON } from '/@/api/device/model/modelOfMatterModel';
  5 +import { isArray } from '/@/utils/is';
4 6
5 export function transfromToStructJSON(value: StructFormValue): StructJSON { 7 export function transfromToStructJSON(value: StructFormValue): StructJSON {
6 const { 8 const {
@@ -16,9 +18,9 @@ export function transfromToStructJSON(value: StructFormValue): StructJSON { @@ -16,9 +18,9 @@ export function transfromToStructJSON(value: StructFormValue): StructJSON {
16 identifier, 18 identifier,
17 remark, 19 remark,
18 specs, 20 specs,
19 - assessMode, 21 + accessMode,
20 } = value; 22 } = value;
21 - const basic = { functionName, identifier, remark, assessMode }; 23 + const basic = { functionName, identifier, remark, accessMode };
22 let dataType = {} as unknown as DataType; 24 let dataType = {} as unknown as DataType;
23 25
24 switch (type) { 26 switch (type) {
@@ -62,3 +64,27 @@ export function transfromToStructJSON(value: StructFormValue): StructJSON { @@ -62,3 +64,27 @@ export function transfromToStructJSON(value: StructFormValue): StructJSON {
62 } 64 }
63 return { ...basic, dataType }; 65 return { ...basic, dataType };
64 } 66 }
  67 +
  68 +export const excludeIdInStructJSON = (struct: DataType) => {
  69 + const _value = cloneDeep(struct);
  70 + const { specs } = _value;
  71 + const list = [specs];
  72 +
  73 + while (list.length) {
  74 + for (const item of list) {
  75 + if (isArray(item)) {
  76 + (item as StructJSON[]).forEach((temp) => {
  77 + if (temp.dataType?.specs) {
  78 + list.push(temp.dataType.specs);
  79 + }
  80 + Reflect.deleteProperty(temp, 'id');
  81 + });
  82 + } else {
  83 + Reflect.deleteProperty(item as Recordable, 'id');
  84 + }
  85 + list.shift();
  86 + }
  87 + }
  88 +
  89 + return _value;
  90 +};
1 <template> 1 <template>
2 <BasicDrawer v-bind="$attrs" title="产品详情" @register="register" width="60%" destroy-on-close> 2 <BasicDrawer v-bind="$attrs" title="产品详情" @register="register" width="60%" destroy-on-close>
3 - <Tabs :animated="true" v-model:activeKey="activeKey" @change="handlePanelChange">  
4 - <TabPane key="product" tab="产品"> 3 + <Tabs v-model:activeKey="activeKey" @change="handlePanelChange">
  4 + <Tabs.TabPane key="product" tab="产品">
5 <div class="relative"> 5 <div class="relative">
6 <DeviceConfigurationStep :ifShowBtn="false" ref="DevConStRef" /> 6 <DeviceConfigurationStep :ifShowBtn="false" ref="DevConStRef" />
7 <div class="absolute w-full h-full top-0 cursor-not-allowed"></div> 7 <div class="absolute w-full h-full top-0 cursor-not-allowed"></div>
8 </div> 8 </div>
9 - </TabPane>  
10 - <TabPane key="transport" tab="传输配置"> 9 + </Tabs.TabPane>
  10 + <Tabs.TabPane key="transport" tab="传输配置">
11 <div class="relative"> 11 <div class="relative">
12 <TransportConfigurationStep :ifShowBtn="false" ref="TransConStRef" /> 12 <TransportConfigurationStep :ifShowBtn="false" ref="TransConStRef" />
13 <div class="absolute w-full h-full top-0 cursor-not-allowed"></div> 13 <div class="absolute w-full h-full top-0 cursor-not-allowed"></div>
14 </div> 14 </div>
15 - </TabPane>  
16 - <TabPane key="modelOfMatter" tab="物模型管理"> 15 + </Tabs.TabPane>
  16 + <Tabs.TabPane key="modelOfMatter" tab="物模型管理">
17 <PhysicalModelManagementStep :record="record" /> 17 <PhysicalModelManagementStep :record="record" />
18 - </TabPane> 18 + </Tabs.TabPane>
19 </Tabs> 19 </Tabs>
20 </BasicDrawer> 20 </BasicDrawer>
21 </template> 21 </template>
22 <script lang="ts" setup> 22 <script lang="ts" setup>
23 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; 23 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
24 - import { Tabs, TabPane } from 'ant-design-vue'; 24 + import { Tabs } from 'ant-design-vue';
25 import DeviceConfigurationStep from './step/DeviceConfigurationStep.vue'; 25 import DeviceConfigurationStep from './step/DeviceConfigurationStep.vue';
26 import TransportConfigurationStep from './step/TransportConfigurationStep.vue'; 26 import TransportConfigurationStep from './step/TransportConfigurationStep.vue';
27 import PhysicalModelManagementStep from './step/PhysicalModelManagementStep.vue'; 27 import PhysicalModelManagementStep from './step/PhysicalModelManagementStep.vue';
@@ -35,23 +35,23 @@ @@ -35,23 +35,23 @@
35 :disabled="$props.record.transportType === 'TCP'" 35 :disabled="$props.record.transportType === 'TCP'"
36 /> 36 />
37 </Tabs> 37 </Tabs>
38 - <Attribute v-show="activeKey === FunctionType.PROPERTIES" ref="AttrRef" /> 38 + <Attribute v-if="activeKey === FunctionType.PROPERTIES" ref="AttrRef" />
39 <Service 39 <Service
40 - v-show="activeKey === FunctionType.SERVICE" 40 + v-if="activeKey === FunctionType.SERVICE"
41 :record="$props.record" 41 :record="$props.record"
42 ref="ServiceRef" 42 ref="ServiceRef"
43 /> 43 />
44 - <Events v-show="activeKey === FunctionType.EVENTS" ref="EventsRef" /> 44 + <Events v-if="activeKey === FunctionType.EVENTS" ref="EventsRef" />
45 <div 45 <div
46 v-if="openModalMode === OpenModelMode.VIEW" 46 v-if="openModalMode === OpenModelMode.VIEW"
47 - class="absolute w-full h-full top-0 cursor-not-allowed" 47 + class="absolute w-full h-full top-0 cursor-not-allowed z-50"
48 ></div> 48 ></div>
49 </div> 49 </div>
50 </BasicModal> 50 </BasicModal>
51 </div> 51 </div>
52 </template> 52 </template>
53 <script lang="ts" setup> 53 <script lang="ts" setup>
54 - import { ref, unref } from 'vue'; 54 + import { ref, unref, nextTick } from 'vue';
55 import { BasicModal, useModalInner } from '/@/components/Modal'; 55 import { BasicModal, useModalInner } from '/@/components/Modal';
56 import { Tabs, TabPane, Typography, TypographyParagraph } from 'ant-design-vue'; 56 import { Tabs, TabPane, Typography, TypographyParagraph } from 'ant-design-vue';
57 import Attribute from './cpns/Attribute.vue'; 57 import Attribute from './cpns/Attribute.vue';
@@ -109,16 +109,13 @@ @@ -109,16 +109,13 @@
109 if (record) { 109 if (record) {
110 functionType.value = data.record.functionType; 110 functionType.value = data.record.functionType;
111 activeKey.value = data.record.functionType; 111 activeKey.value = data.record.functionType;
  112 + await nextTick();
112 setFormData(record.functionType, record as unknown as ModelOfMatterParams); 113 setFormData(record.functionType, record as unknown as ModelOfMatterParams);
113 } 114 }
114 if (unref(openModalMode) === OpenModelMode.VIEW) { 115 if (unref(openModalMode) === OpenModelMode.VIEW) {
115 setModalProps({ showOkBtn: false, showCancelBtn: false, title: '查看物模型' }); 116 setModalProps({ showOkBtn: false, showCancelBtn: false, title: '查看物模型' });
116 - // setFormData(functionType.value, record);  
117 } else { 117 } else {
118 const title = unref(openModalMode) === OpenModelMode.UPDATE ? '编辑物模型' : '新增物模型'; 118 const title = unref(openModalMode) === OpenModelMode.UPDATE ? '编辑物模型' : '新增物模型';
119 - if (OpenModelMode.UPDATE) {  
120 - // setFormData(functionType.value, record);  
121 - }  
122 setModalProps({ title, showOkBtn: true, showCancelBtn: true }); 119 setModalProps({ title, showOkBtn: true, showCancelBtn: true });
123 } 120 }
124 } 121 }
@@ -6,7 +6,10 @@ @@ -6,7 +6,10 @@
6 import { DataType, ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel'; 6 import { DataType, ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
7 import { formSchemas } from '/@/components/Form/src/externalCompns/components/StructForm/config'; 7 import { formSchemas } from '/@/components/Form/src/externalCompns/components/StructForm/config';
8 import { StructFormValue } from '/@/components/Form/src/externalCompns/components/StructForm/type'; 8 import { StructFormValue } from '/@/components/Form/src/externalCompns/components/StructForm/type';
9 - import { transfromToStructJSON } from '/@/components/Form/src/externalCompns/components/StructForm/util'; 9 + import {
  10 + transfromToStructJSON,
  11 + excludeIdInStructJSON,
  12 + } from '/@/components/Form/src/externalCompns/components/StructForm/util';
10 import { FunctionType } from './config'; 13 import { FunctionType } from './config';
11 import { isArray } from 'lodash'; 14 import { isArray } from 'lodash';
12 15
@@ -26,6 +29,8 @@ @@ -26,6 +29,8 @@
26 if (!_values) return {}; 29 if (!_values) return {};
27 const { functionName, remark, identifier, accessMode } = _values; 30 const { functionName, remark, identifier, accessMode } = _values;
28 const structJSON = transfromToStructJSON(_values); 31 const structJSON = transfromToStructJSON(_values);
  32 + const dataType = excludeIdInStructJSON(structJSON.dataType!);
  33 +
29 const value = { 34 const value = {
30 functionName, 35 functionName,
31 functionType: FunctionType.PROPERTIES, 36 functionType: FunctionType.PROPERTIES,
@@ -33,7 +38,7 @@ @@ -33,7 +38,7 @@
33 identifier, 38 identifier,
34 accessMode, 39 accessMode,
35 functionJson: { 40 functionJson: {
36 - dataType: structJSON.dataType, 41 + dataType: dataType,
37 }, 42 },
38 } as ModelOfMatterParams; 43 } as ModelOfMatterParams;
39 return value; 44 return value;
@@ -46,6 +46,7 @@ @@ -46,6 +46,7 @@
46 const { functionName, remark, identifier, inputData, outputData, serviceCommand, callType } = 46 const { functionName, remark, identifier, inputData, outputData, serviceCommand, callType } =
47 _values; 47 _values;
48 if (!_values) return {}; 48 if (!_values) return {};
  49 +
49 const value = { 50 const value = {
50 functionName, 51 functionName,
51 identifier, 52 identifier,