Commit e4fc9fcff4c4b078734e88700c738c937ea76146
Merge branch 'ft_local_dev' into 'main'
feat:mock模拟阿里云后端数据,物模型新增编辑回显数据大致完成,待完善细节问题和联调服务端 See merge request huang/yun-teng-iot-front!366
Showing
14 changed files
with
781 additions
and
319 deletions
... | ... | @@ -33,7 +33,7 @@ |
33 | 33 | |
34 | 34 | import { useUserStore } from '/@/store/modules/user'; |
35 | 35 | import { useLockStore } from '/@/store/modules/lock'; |
36 | - import headerImg from '/@/assets/images/header.jpg'; | |
36 | + import headerImg from '/@/assets/images/logo.png'; | |
37 | 37 | export default defineComponent({ |
38 | 38 | name: 'LockModal', |
39 | 39 | components: { BasicModal, BasicForm }, |
... | ... | @@ -106,6 +106,7 @@ |
106 | 106 | left: calc(50% - 45px); |
107 | 107 | width: auto; |
108 | 108 | text-align: center; |
109 | + | |
109 | 110 | &-img { |
110 | 111 | width: 70px; |
111 | 112 | border-radius: 50%; |
... | ... | @@ -113,7 +114,7 @@ |
113 | 114 | |
114 | 115 | &-name { |
115 | 116 | margin-top: 5px; |
116 | - display: flex; | |
117 | + // display: flex; | |
117 | 118 | width: 100%; |
118 | 119 | // margin-left: -15px; |
119 | 120 | } | ... | ... |
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | <BasicModal |
4 | 4 | :maskClosable="false" |
5 | 5 | v-bind="$attrs" |
6 | - width="60rem" | |
6 | + :width="dynamicWidth" | |
7 | 7 | @register="register" |
8 | 8 | @ok="handleSubmit" |
9 | 9 | @cancel="handleCancel" |
... | ... | @@ -86,6 +86,7 @@ |
86 | 86 | profileData: {}, |
87 | 87 | }); |
88 | 88 | const transportTypeStr = ref(''); |
89 | + const dynamicWidth = ref('55rem'); | |
89 | 90 | const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { |
90 | 91 | setModalProps({ confirmLoading: false }); |
91 | 92 | current.value = 0; |
... | ... | @@ -95,6 +96,7 @@ |
95 | 96 | isEditId.value = data.record !== undefined ? data.record.id : null; |
96 | 97 | isEditCreatTime.value = data.record !== undefined ? data.record.createTime : null; |
97 | 98 | if (!unref(isViewDetail)) { |
99 | + dynamicWidth.value = 55 + 'rem'; | |
98 | 100 | const title = !unref(isUpdate) ? '编辑设备配置' : '新增设备配置'; |
99 | 101 | setModalProps({ title, showOkBtn: true, showCancelBtn: true }); |
100 | 102 | if (!unref(isUpdate)) { |
... | ... | @@ -103,6 +105,7 @@ |
103 | 105 | handleStepNext(false, res); |
104 | 106 | } |
105 | 107 | } else { |
108 | + dynamicWidth.value = 60 + 'rem'; | |
106 | 109 | setModalProps({ showOkBtn: false, showCancelBtn: false, title: '设备配置详情' }); |
107 | 110 | await setDeviceConfEditFormData(res); |
108 | 111 | await setTransConfEditFormData(res); | ... | ... |
... | ... | @@ -21,6 +21,11 @@ export const steps = [ |
21 | 21 | |
22 | 22 | export const physicalColumn: BasicColumn[] = [ |
23 | 23 | { |
24 | + title: '功能类型', | |
25 | + dataIndex: 'dType', | |
26 | + width: 90, | |
27 | + }, | |
28 | + { | |
24 | 29 | title: '功能名称', |
25 | 30 | dataIndex: 'name', |
26 | 31 | width: 90, |
... | ... | @@ -410,6 +415,7 @@ export const formSchema: FormSchema[] = [ |
410 | 415 | export const mockData: any = async () => { |
411 | 416 | const res = await [ |
412 | 417 | { |
418 | + dType: 'events', | |
413 | 419 | name: '亮度百分比', |
414 | 420 | type: 'Brightness', |
415 | 421 | transportType: 'int32(整数型)', |
... | ... | @@ -420,6 +426,7 @@ export const mockData: any = async () => { |
420 | 426 | createTime: '2022-10-20 10:24:22', |
421 | 427 | }, |
422 | 428 | { |
429 | + dType: 'service', | |
423 | 430 | name: '运行状态', |
424 | 431 | type: 'RunningState', |
425 | 432 | transportType: 'bool(布尔型)', |
... | ... | @@ -430,6 +437,7 @@ export const mockData: any = async () => { |
430 | 437 | createTime: '2022-10-20 10:24:22', |
431 | 438 | }, |
432 | 439 | { |
440 | + dType: 'attr', | |
433 | 441 | name: '设备运行状态', |
434 | 442 | type: 'E_Status_UP', |
435 | 443 | transportType: 'text(字符串)', |
... | ... | @@ -440,6 +448,7 @@ export const mockData: any = async () => { |
440 | 448 | createTime: '2022-10-20 10:24:22', |
441 | 449 | }, |
442 | 450 | { |
451 | + dType: 'attr', | |
443 | 452 | name: '过流告警使能', |
444 | 453 | type: 'OverCurrentEnable', |
445 | 454 | transportType: 'struct(结构体)', |
... | ... | @@ -450,6 +459,7 @@ export const mockData: any = async () => { |
450 | 459 | createTime: '2022-10-20 10:24:22', |
451 | 460 | }, |
452 | 461 | { |
462 | + dType: 'events', | |
453 | 463 | name: '变频器运行状态1', |
454 | 464 | type: 'Brightness', |
455 | 465 | transportType: 'int32(整数型)', |
... | ... | @@ -460,6 +470,7 @@ export const mockData: any = async () => { |
460 | 470 | createTime: '2022-10-20 10:24:22', |
461 | 471 | }, |
462 | 472 | { |
473 | + dType: 'service', | |
463 | 474 | name: '产品序列号', |
464 | 475 | type: 'SerialNo', |
465 | 476 | transportType: 'text(字符串)', |
... | ... | @@ -470,6 +481,7 @@ export const mockData: any = async () => { |
470 | 481 | createTime: '2022-10-20 10:24:22', |
471 | 482 | }, |
472 | 483 | { |
484 | + dType: 'service', | |
473 | 485 | name: '音量百分比', |
474 | 486 | type: 'Volume', |
475 | 487 | transportType: 'int32(整数型)', |
... | ... | @@ -480,6 +492,7 @@ export const mockData: any = async () => { |
480 | 492 | createTime: '2022-10-20 10:24:22', |
481 | 493 | }, |
482 | 494 | { |
495 | + dType: 'attr', | |
483 | 496 | name: '易释放氰化物', |
484 | 497 | type: 'easy_release_cyanide', |
485 | 498 | transportType: 'double(双精度浮点型)', |
... | ... | @@ -490,6 +503,7 @@ export const mockData: any = async () => { |
490 | 503 | createTime: '2022-10-20 10:24:22', |
491 | 504 | }, |
492 | 505 | { |
506 | + dType: 'attr', | |
493 | 507 | name: '湿度', |
494 | 508 | type: 'Humidity', |
495 | 509 | transportType: 'float(单精度浮点型)', |
... | ... | @@ -500,6 +514,7 @@ export const mockData: any = async () => { |
500 | 514 | createTime: '2022-10-20 10:24:22', |
501 | 515 | }, |
502 | 516 | { |
517 | + dType: 'attr', | |
503 | 518 | name: '设备固件版本', |
504 | 519 | type: 'FirmwareVersion', |
505 | 520 | transportType: 'text(字符串)', |
... | ... | @@ -510,6 +525,7 @@ export const mockData: any = async () => { |
510 | 525 | createTime: '2022-10-20 10:24:22', |
511 | 526 | }, |
512 | 527 | { |
528 | + dType: 'events', | |
513 | 529 | name: '用电量', |
514 | 530 | type: 'PowerConsumption', |
515 | 531 | transportType: 'float(单精度浮点型)', | ... | ... |
... | ... | @@ -10,6 +10,8 @@ |
10 | 10 | > |
11 | 11 | <div v-if="isViewDetail"> |
12 | 12 | <Attribute v-show="activeKey === '1'" ref="AttrRef" /> |
13 | + <Service v-show="activeKey === '2'" ref="ServiceRef" /> | |
14 | + <Events v-show="activeKey === '3'" ref="EventsRef" /> | |
13 | 15 | </div> |
14 | 16 | <div v-if="!isViewDetail"> |
15 | 17 | <div> |
... | ... | @@ -20,13 +22,19 @@ |
20 | 22 | </Typography> |
21 | 23 | </div> |
22 | 24 | <Tabs type="card" v-model:activeKey="activeKey" :size="size"> |
23 | - <TabPane key="1" tab="属性"> | |
25 | + <TabPane :disabled="attrDisable" forceRender key="1" tab="属性"> | |
24 | 26 | <Attribute v-show="activeKey === '1'" ref="AttrRef" /> |
25 | 27 | </TabPane> |
26 | - <TabPane key="2" tab="服务"> | |
28 | + <TabPane :disabled="serveiceDisable" forceRender key="2" tab="服务"> | |
27 | 29 | <Service v-show="activeKey === '2'" ref="ServiceRef" /> |
28 | 30 | </TabPane> |
29 | - <TabPane key="3" v-show="activeKey === '3'" tab="事件"> | |
31 | + <TabPane | |
32 | + :disabled="eventDisable" | |
33 | + forceRender | |
34 | + key="3" | |
35 | + v-show="activeKey === '3'" | |
36 | + tab="事件" | |
37 | + > | |
30 | 38 | <Events v-show="activeKey === '3'" ref="EventsRef" /> |
31 | 39 | </TabPane> |
32 | 40 | </Tabs> |
... | ... | @@ -44,6 +52,9 @@ |
44 | 52 | import { mockData } from '../physical/cpns/components/mock'; |
45 | 53 | |
46 | 54 | defineEmits(['register']); |
55 | + const attrDisable = ref(false); | |
56 | + const serveiceDisable = ref(false); | |
57 | + const eventDisable = ref(false); | |
47 | 58 | const blockContent = `属性一般是设备的运行状态,如当前温度等;服务是设备可被调用的方法,支持定义参数,如执行某项任务;事件则是设备上报的 |
48 | 59 | 通知,如告警,需要被及时处理。`; |
49 | 60 | const activeKey = ref('1'); |
... | ... | @@ -54,6 +65,7 @@ |
54 | 65 | const isUpdate = ref(false); |
55 | 66 | const isViewDetail = ref(''); |
56 | 67 | const isText = ref(''); |
68 | + const dType = ref(''); | |
57 | 69 | const allData: any = reactive({ |
58 | 70 | properties: [], |
59 | 71 | events: [], |
... | ... | @@ -61,27 +73,64 @@ |
61 | 73 | productKey: '', |
62 | 74 | _ppk: {}, |
63 | 75 | }); |
76 | + | |
77 | + const setAttrFormData = (data: {}) => AttrRef.value?.setFormData(data); | |
78 | + const setServiceFormData = (data: {}) => ServiceRef.value?.setFormData(data); | |
79 | + const setEventsFormData = (data: {}) => EventsRef.value?.setFormData(data); | |
80 | + const enums = { | |
81 | + attr: setAttrFormData, | |
82 | + service: setServiceFormData, | |
83 | + events: setEventsFormData, | |
84 | + }; | |
85 | + function action(val, data) { | |
86 | + let F = enums[val]; | |
87 | + F(data); | |
88 | + } | |
89 | + const dynamicData = (t, a, s, e) => { | |
90 | + switch (t) { | |
91 | + case 'attr': | |
92 | + activeKey.value = '1'; | |
93 | + action(t, a); | |
94 | + attrDisable.value = false; | |
95 | + serveiceDisable.value = true; | |
96 | + eventDisable.value = true; | |
97 | + break; | |
98 | + case 'service': | |
99 | + activeKey.value = '2'; | |
100 | + action(t, s); | |
101 | + attrDisable.value = true; | |
102 | + serveiceDisable.value = false; | |
103 | + eventDisable.value = true; | |
104 | + break; | |
105 | + case 'events': | |
106 | + activeKey.value = '3'; | |
107 | + action(t, e); | |
108 | + attrDisable.value = true; | |
109 | + serveiceDisable.value = true; | |
110 | + eventDisable.value = false; | |
111 | + break; | |
112 | + } | |
113 | + }; | |
64 | 114 | const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { |
65 | 115 | setModalProps({ loading: true }); |
66 | 116 | handleCancel(false); |
67 | 117 | isUpdate.value = data.isUpdate; |
68 | 118 | isViewDetail.value = data.isView; |
69 | 119 | isText.value = data.isText; |
120 | + dType.value = data.record?.dType; | |
70 | 121 | if (!unref(isViewDetail)) { |
71 | 122 | const title = !unref(isUpdate) ? '编辑物模型' : '新增物模型'; |
72 | 123 | if (!unref(isUpdate)) { |
73 | 124 | nextTick(() => { |
74 | - AttrRef.value?.setFormData(mockData.properties); | |
75 | - ServiceRef.value?.setFormData(mockData.services); | |
76 | - EventsRef.value?.setFormData(mockData.events); | |
125 | + dynamicData(dType.value, mockData.properties, mockData.services, mockData.events); | |
77 | 126 | }); |
78 | 127 | } |
79 | 128 | setModalProps({ title, showOkBtn: true, showCancelBtn: true }); |
80 | 129 | } else { |
81 | 130 | setModalProps({ showOkBtn: false, showCancelBtn: false, title: '查看物模型' }); |
82 | - AttrRef.value?.setFormData(mockData.properties); | |
83 | - ServiceRef.value?.setFormData(mockData.services); | |
84 | - EventsRef.value?.setFormData(mockData.events); | |
131 | + nextTick(() => { | |
132 | + dynamicData(dType.value, mockData.properties, mockData.services, mockData.events); | |
133 | + }); | |
85 | 134 | } |
86 | 135 | setModalProps({ loading: false }); |
87 | 136 | }); |
... | ... | @@ -93,6 +142,9 @@ |
93 | 142 | allData.properties = []; |
94 | 143 | allData.events = []; |
95 | 144 | allData.services = []; |
145 | + attrDisable.value = false; | |
146 | + serveiceDisable.value = false; | |
147 | + eventDisable.value = false; | |
96 | 148 | if (flag) { |
97 | 149 | closeModal(); |
98 | 150 | } | ... | ... |
... | ... | @@ -5,14 +5,14 @@ |
5 | 5 | <div style="display: flex"> |
6 | 6 | <Input |
7 | 7 | type="number" |
8 | - v-model:vlaue="minMaxObj.min" | |
8 | + v-model:value="minMaxObj.min" | |
9 | 9 | placeholder="最小值" |
10 | 10 | @blur="onInputBlurMin" |
11 | 11 | /> |
12 | 12 | <span>~</span> |
13 | 13 | <Input |
14 | 14 | type="number" |
15 | - v-model:vlaue="minMaxObj.max" | |
15 | + v-model:value="minMaxObj.max" | |
16 | 16 | placeholder="最大值" |
17 | 17 | @blur="onInputBlurMax" |
18 | 18 | /> |
... | ... | @@ -50,11 +50,9 @@ |
50 | 50 | import InputParamItem from './components/InputParamItem.vue'; |
51 | 51 | import AddParamsModal from './components/AddParamsModal.vue'; |
52 | 52 | import { Input } from 'ant-design-vue'; |
53 | - // import { useMessage } from '/@/hooks/web/useMessage'; | |
54 | - import { validateValueRangeAndStep } from '../hook/useValidateParital'; | |
53 | + import { validateValueRangeAndStep, validateValueBool } from '../hook/useValidateParital'; | |
55 | 54 | import { buildUUID } from '/@/utils/uuid'; |
56 | 55 | |
57 | - // const { createMessage } = useMessage(); | |
58 | 56 | const outputParamData: any = ref([]); |
59 | 57 | const minMaxObj = reactive({ |
60 | 58 | min: '', |
... | ... | @@ -94,7 +92,7 @@ |
94 | 92 | openModal(true, { |
95 | 93 | isUpdate: true, |
96 | 94 | flag: 'output', |
97 | - excludeStruct: false, | |
95 | + excludeStruct: true, | |
98 | 96 | }); |
99 | 97 | }; |
100 | 98 | |
... | ... | @@ -106,13 +104,24 @@ |
106 | 104 | isUpdate: false, |
107 | 105 | record: item, |
108 | 106 | flag: 'output', |
109 | - excludeStruct: false, | |
107 | + excludeStruct: true, | |
110 | 108 | }); |
111 | 109 | }; |
112 | 110 | |
113 | 111 | //回显数据 |
114 | 112 | const setFormData = (v) => { |
115 | 113 | setFieldsValue(v[0]); |
114 | + setFieldsValue({ | |
115 | + ...v[0].dataSpecs, | |
116 | + boolClose: | |
117 | + v[0].dataSpecsList !== undefined || v[0].dataSpecsList !== null | |
118 | + ? v[0].dataSpecsList[0].name | |
119 | + : '', | |
120 | + boolOpen: | |
121 | + v[0].dataSpecsList !== undefined || v[0].dataSpecsList !== null | |
122 | + ? v[0].dataSpecsList[1].name | |
123 | + : '', | |
124 | + }); | |
116 | 125 | const { dataSpecsList } = v[0]; |
117 | 126 | if (dataSpecsList !== undefined) { |
118 | 127 | outputParamData.value = [...new Array(dataSpecsList.length).keys()]; |
... | ... | @@ -130,13 +139,26 @@ |
130 | 139 | if (!values) return; |
131 | 140 | const dataSpecsList = getStructList(); |
132 | 141 | validateValueRangeAndStep(Number(minMaxObj.min), Number(values.step), Number(minMaxObj.max)); |
133 | - const isStruct = values.dataType === 'STRUCT'; | |
142 | + validateValueBool(Number(values.boolClose), Number(values.boolOpen)); | |
134 | 143 | const dataSpecs = { |
135 | 144 | ...minMaxObj, |
136 | 145 | ...{ step: values.step }, |
137 | 146 | ...{ unit: values.unit }, |
138 | 147 | ...{ dataType: values.dataType }, |
148 | + ...{ length: values.length }, | |
139 | 149 | }; |
150 | + const dataSpecsListBool = [ | |
151 | + { | |
152 | + dataType: values.dataType, | |
153 | + name: '0', | |
154 | + value: values.boolClose, | |
155 | + }, | |
156 | + { | |
157 | + dataType: values.dataType, | |
158 | + name: '1', | |
159 | + value: values.boolOpen, | |
160 | + }, | |
161 | + ]; | |
140 | 162 | const { valueRange, step, unit, outputParam, ...value } = values; |
141 | 163 | console.log(valueRange); |
142 | 164 | console.log(step); |
... | ... | @@ -144,13 +166,26 @@ |
144 | 166 | console.log(outputParam); |
145 | 167 | return { |
146 | 168 | ...value, |
147 | - ...{ dataSpecs: isStruct ? null : dataSpecs }, | |
148 | - ...{ dataSpecsList: isStruct ? dataSpecsList : null }, | |
169 | + ...{ | |
170 | + dataSpecs: | |
171 | + values.dataType === 'INT' || values.dataType === 'DOUBLE' || values.dataType === 'TEXT' | |
172 | + ? dataSpecs | |
173 | + : null, | |
174 | + }, | |
175 | + ...{ | |
176 | + dataSpecsList: | |
177 | + values.dataType === 'STRUCT' | |
178 | + ? dataSpecsList | |
179 | + : values.dataType === 'BOOL' | |
180 | + ? dataSpecsListBool | |
181 | + : null, | |
182 | + }, | |
149 | 183 | }; |
150 | 184 | } |
151 | 185 | //清空数据 |
152 | 186 | const resetFormData = () => { |
153 | 187 | resetFields(); |
188 | + outputParamData.value = []; | |
154 | 189 | Reflect.set(minMaxObj, 'min', ''); |
155 | 190 | Reflect.set(minMaxObj, 'max', ''); |
156 | 191 | }; | ... | ... |
... | ... | @@ -74,6 +74,7 @@ |
74 | 74 | isUpdate: false, |
75 | 75 | record: item, |
76 | 76 | flag: 'output', |
77 | + excludeStruct: false, | |
77 | 78 | }); |
78 | 79 | }; |
79 | 80 | //回显数据 |
... | ... | @@ -105,6 +106,7 @@ |
105 | 106 | //清空数据 |
106 | 107 | const resetFormData = () => { |
107 | 108 | resetFields(); |
109 | + outputParamData.value = []; | |
108 | 110 | }; |
109 | 111 | |
110 | 112 | defineExpose({ | ... | ... |
... | ... | @@ -114,6 +114,7 @@ |
114 | 114 | isUpdate: false, |
115 | 115 | record: item, |
116 | 116 | flag: 'input', |
117 | + excludeStruct: false, | |
117 | 118 | }); |
118 | 119 | }; |
119 | 120 | const deleteOutParItem = (index) => { |
... | ... | @@ -124,12 +125,12 @@ |
124 | 125 | isUpdate: false, |
125 | 126 | record: item, |
126 | 127 | flag: 'output', |
128 | + excludeStruct: false, | |
127 | 129 | }); |
128 | 130 | }; |
129 | 131 | |
130 | 132 | //回显数据 |
131 | 133 | const setFormData = (v) => { |
132 | - console.log(v[0]); | |
133 | 134 | setFieldsValue(v[0]); |
134 | 135 | const { inputParams, outputParams } = v[0]; |
135 | 136 | if (outputParams !== undefined) { |
... | ... | @@ -168,6 +169,8 @@ |
168 | 169 | //清空数据 |
169 | 170 | const resetFormData = () => { |
170 | 171 | resetFields(); |
172 | + inputParamData.value = []; | |
173 | + outputParamData.value = []; | |
171 | 174 | }; |
172 | 175 | |
173 | 176 | defineExpose({ | ... | ... |
... | ... | @@ -3,9 +3,9 @@ |
3 | 3 | <BasicForm @register="registerForm"> |
4 | 4 | <template #valueRangeSlot> |
5 | 5 | <div style="display: flex"> |
6 | - <a-input v-model:vlaue="minMaxObj.min" placeholder="最小值" @blur="onInputBlurMin" /> | |
6 | + <Input v-model:value="minMaxObj.min" placeholder="最小值" @blur="onInputBlurMin" /> | |
7 | 7 | <span>~</span> |
8 | - <a-input v-model:vlaue="minMaxObj.max" placeholder="最大值" @blur="onInputBlurMax" /> | |
8 | + <Input v-model:value="minMaxObj.max" placeholder="最大值" @blur="onInputBlurMax" /> | |
9 | 9 | </div> |
10 | 10 | </template> |
11 | 11 | <template #structSlot> |
... | ... | @@ -40,11 +40,11 @@ |
40 | 40 | import InputParamItem from './InputParamItem.vue'; |
41 | 41 | import AddParamsModal from './AddParamsModal.vue'; |
42 | 42 | import { findDictItemByCode } from '/@/api/system/dict'; |
43 | - // import { useMessage } from '/@/hooks/web/useMessage'; | |
44 | - import { validateValueRangeAndStep } from '../../hook/useValidateParital'; | |
43 | + import { validateValueRangeAndStep, validateValueBool } from '../../hook/useValidateParital'; | |
44 | + import { buildUUID } from '/@/utils/uuid'; | |
45 | + import { Input } from 'ant-design-vue'; | |
45 | 46 | |
46 | 47 | defineEmits(['register']); |
47 | - // const { createMessage } = useMessage(); | |
48 | 48 | const outputParamData: any = ref([]); |
49 | 49 | const dynamicBindRef = { |
50 | 50 | outputParamItemRef: ref([]), |
... | ... | @@ -70,10 +70,11 @@ |
70 | 70 | |
71 | 71 | const getData = (d, f) => { |
72 | 72 | if (f == 'output') { |
73 | - unref(outputParamData).push(d); | |
74 | 73 | if (d.id !== null) { |
75 | - const findIndex = unref(outputParamData).findIndex((f) => f.id !== d.id); | |
76 | - if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1); | |
74 | + const findIndex = unref(outputParamData).findIndex((f) => f.id == d.id); | |
75 | + if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1, d); | |
76 | + } else { | |
77 | + unref(outputParamData).push({ ...d, id: buildUUID() }); | |
77 | 78 | } |
78 | 79 | } |
79 | 80 | }; |
... | ... | @@ -94,6 +95,7 @@ |
94 | 95 | isUpdate: false, |
95 | 96 | record: item, |
96 | 97 | flag: 'output', |
98 | + excludeStruct: true, | |
97 | 99 | }); |
98 | 100 | }; |
99 | 101 | |
... | ... | @@ -124,26 +126,74 @@ |
124 | 126 | }); |
125 | 127 | }; |
126 | 128 | |
129 | + const getOutputStructList = () => { | |
130 | + const val = unref(dynamicBindRef.outputParamItemRef)?.map((item: any) => item.getFormData()); | |
131 | + return val; | |
132 | + }; | |
127 | 133 | const getFormData = async () => { |
128 | 134 | const values = await validate(); |
129 | 135 | if (!values) return; |
130 | 136 | validateValueRangeAndStep(Number(minMaxObj.min), Number(values.step), Number(minMaxObj.max)); |
137 | + validateValueBool(Number(values.boolClose), Number(values.boolOpen)); | |
138 | + const outputParams = getOutputStructList(); | |
139 | + outputParams.forEach((f) => { | |
140 | + f.dataType = 'STRUCT'; | |
141 | + }); | |
142 | + //int double类型 | |
131 | 143 | const childSpecsDTO = { |
132 | 144 | dataType: values.dataType, |
133 | 145 | max: minMaxObj.max, |
134 | 146 | min: minMaxObj.min, |
135 | 147 | step: values.step, |
136 | 148 | unit: values.unit, |
149 | + length: values.length, | |
137 | 150 | }; |
138 | 151 | const dataSpecs = childSpecsDTO; |
139 | - const { step, unit, valueRange, ...value } = values; | |
152 | + //bool类型 | |
153 | + const childEnumSpecsDTO = [ | |
154 | + { | |
155 | + dataType: values.dataType, | |
156 | + name: values.boolClose, | |
157 | + value: 0, | |
158 | + }, | |
159 | + { | |
160 | + dataType: values.dataType, | |
161 | + name: values.boolOpen, | |
162 | + value: 1, | |
163 | + }, | |
164 | + ]; | |
165 | + const dataSpecsList = childEnumSpecsDTO; | |
166 | + //text类型 | |
167 | + //其他类型 | |
168 | + const { boolClose, boolOpen, step, unit, valueRange, ...value } = values; | |
140 | 169 | console.log(valueRange); |
141 | 170 | console.log(step); |
142 | 171 | console.log(unit); |
172 | + console.log(boolClose); | |
173 | + console.log(boolOpen); | |
143 | 174 | return { |
144 | 175 | ...value, |
145 | - ...{ dataSpecs }, | |
146 | - ...{ childSpecsDTO }, | |
176 | + ...{ | |
177 | + dataSpecs: | |
178 | + values.dataType === 'INT' || values.dataType === 'DOUBLE' || values.dataType === 'TEXT' | |
179 | + ? dataSpecs | |
180 | + : null, | |
181 | + }, | |
182 | + ...{ | |
183 | + childSpecsDTO: | |
184 | + values.dataType === 'INT' || values.dataType === 'DOUBLE' || values.dataType === 'TEXT' | |
185 | + ? childSpecsDTO | |
186 | + : null, | |
187 | + }, | |
188 | + ...{ | |
189 | + dataSpecsList: | |
190 | + values.dataType === 'BOOL' | |
191 | + ? dataSpecsList | |
192 | + : values.dataType === 'STRUCT' | |
193 | + ? outputParams | |
194 | + : null, | |
195 | + }, | |
196 | + ...{ childEnumSpecsDTO: values.dataType === 'BOOL' ? childEnumSpecsDTO : null }, | |
147 | 197 | ...{ |
148 | 198 | childDataType: values.dataType, |
149 | 199 | childName: values.name, |
... | ... | @@ -151,10 +201,35 @@ |
151 | 201 | }; |
152 | 202 | }; |
153 | 203 | const setFormData = (v) => { |
204 | + console.log('回显', v); | |
154 | 205 | setFieldsValue(v); |
155 | 206 | setFieldsValue({ |
156 | 207 | ...v.dataSpecs, |
157 | 208 | }); |
209 | + try { | |
210 | + setFieldsValue({ | |
211 | + boolClose: v.dataType == 'BOOL' ? v.dataSpecsList[0].name : '', | |
212 | + boolOpen: v.dataType == 'BOOL' ? v.dataSpecsList[1].name : '', | |
213 | + }); | |
214 | + } catch (e) { | |
215 | + console.log(e); | |
216 | + } | |
217 | + const { dataSpecsList, dataType, childDataType } = v; | |
218 | + if (childDataType == 'BOOL') { | |
219 | + setFieldsValue({ | |
220 | + dataType: childDataType, | |
221 | + boolClose: dataSpecsList[0].name, | |
222 | + boolOpen: dataSpecsList[1].name, | |
223 | + }); | |
224 | + } | |
225 | + try { | |
226 | + if (dataType == 'BOOL' || dataType == 'STRUCT') { | |
227 | + outputParamData.value = [...new Array(dataSpecsList.length).keys()]; | |
228 | + outputParamData.value = dataSpecsList; | |
229 | + } | |
230 | + } catch (e) { | |
231 | + console.log(e); | |
232 | + } | |
158 | 233 | nextTick(() => { |
159 | 234 | minMaxObj.min = v?.dataSpecs?.min; |
160 | 235 | minMaxObj.max = v?.dataSpecs?.max; | ... | ... |
1 | 1 | import { buildUUID } from '/@/utils/uuid'; |
2 | 2 | |
3 | +//模拟阿里云属性服务事件服务端格式 | |
3 | 4 | export const mockData = { |
4 | 5 | _ppk: {}, |
5 | 6 | events: [ |
6 | 7 | { |
7 | - createTs: 1666344382193, | |
8 | + createTs: 1666596472189, | |
8 | 9 | custom: true, |
9 | - description: '33', | |
10 | - eventName: '事件1', | |
11 | - eventType: 'ALERT_EVENT_TYPE', | |
12 | - identifier: 'i1', | |
10 | + description: '监播动作结果上报事件', | |
11 | + eventName: '监播动作结果上报事件', | |
12 | + eventType: 'INFO_EVENT_TYPE', | |
13 | + identifier: 'MonitorActionEvent', | |
13 | 14 | outputData: [ |
14 | 15 | { |
15 | 16 | id: buildUUID(), |
16 | 17 | custom: true, |
17 | 18 | dataSpecs: { |
18 | 19 | dataType: 'INT', |
19 | - max: '20', | |
20 | - min: '10', | |
21 | - step: '3', | |
22 | - unit: 'W/㎡', | |
23 | - unitName: '太阳总辐射', | |
20 | + max: '1024', | |
21 | + min: '-1024', | |
22 | + precise: 0, | |
23 | + step: '1', | |
24 | + unit: '', | |
25 | + unitName: '无', | |
24 | 26 | }, |
25 | 27 | dataType: 'INT', |
26 | 28 | direction: 'PARAM_OUTPUT', |
27 | - identifier: 'i1', | |
28 | - name: '参数1', | |
29 | + identifier: 'ActionType', | |
30 | + name: '监播操作类型', | |
29 | 31 | paraOrder: 0, |
30 | 32 | }, |
33 | + { | |
34 | + id: buildUUID(), | |
35 | + custom: true, | |
36 | + dataSpecs: { | |
37 | + dataType: 'TEXT', | |
38 | + length: 1024, | |
39 | + }, | |
40 | + dataType: 'TEXT', | |
41 | + direction: 'PARAM_OUTPUT', | |
42 | + identifier: 'FileKey', | |
43 | + name: '上传文件ossKey', | |
44 | + paraOrder: 1, | |
45 | + }, | |
46 | + { | |
47 | + id: buildUUID(), | |
48 | + custom: true, | |
49 | + dataSpecsList: [ | |
50 | + { | |
51 | + id: buildUUID(), | |
52 | + dataType: 'BOOL', | |
53 | + name: '1', | |
54 | + value: 0, | |
55 | + }, | |
56 | + { | |
57 | + id: buildUUID(), | |
58 | + dataType: 'BOOL', | |
59 | + name: '0', | |
60 | + value: 1, | |
61 | + }, | |
62 | + ], | |
63 | + dataType: 'BOOL', | |
64 | + direction: 'PARAM_OUTPUT', | |
65 | + identifier: 'Extension', | |
66 | + name: '扩展信息', | |
67 | + paraOrder: 2, | |
68 | + }, | |
69 | + { | |
70 | + id: buildUUID(), | |
71 | + custom: true, | |
72 | + dataSpecsList: [ | |
73 | + { | |
74 | + id: buildUUID(), | |
75 | + childDataType: 'DOUBLE', | |
76 | + childName: '峰值', | |
77 | + childSpecsDTO: { | |
78 | + dataType: 'DOUBLE', | |
79 | + max: '33', | |
80 | + min: '22', | |
81 | + step: '2', | |
82 | + unit: 'm³/s', | |
83 | + unitName: '立方米每秒', | |
84 | + }, | |
85 | + custom: true, | |
86 | + dataSpecs: { | |
87 | + dataType: 'DOUBLE', | |
88 | + max: '33', | |
89 | + min: '22', | |
90 | + step: '2', | |
91 | + unit: 'm³/s', | |
92 | + unitName: '立方米每秒', | |
93 | + }, | |
94 | + dataType: 'STRUCT', | |
95 | + identifier: 'bass', | |
96 | + isStd: 0, | |
97 | + name: '峰值', | |
98 | + }, | |
99 | + { | |
100 | + id: buildUUID(), | |
101 | + childDataType: 'BOOL', | |
102 | + childEnumSpecsDTO: [ | |
103 | + { | |
104 | + dataType: 'BOOL', | |
105 | + name: '1', | |
106 | + value: 0, | |
107 | + }, | |
108 | + { | |
109 | + dataType: 'BOOL', | |
110 | + name: '0', | |
111 | + value: 1, | |
112 | + }, | |
113 | + ], | |
114 | + childName: '平均速率', | |
115 | + custom: true, | |
116 | + dataSpecsList: [ | |
117 | + { | |
118 | + id: buildUUID(), | |
119 | + dataType: 'BOOL', | |
120 | + name: '1', | |
121 | + value: 0, | |
122 | + }, | |
123 | + { | |
124 | + id: buildUUID(), | |
125 | + dataType: 'BOOL', | |
126 | + name: '0', | |
127 | + value: 1, | |
128 | + }, | |
129 | + ], | |
130 | + dataType: 'STRUCT', | |
131 | + identifier: 'average', | |
132 | + isStd: 0, | |
133 | + name: '平均速率', | |
134 | + }, | |
135 | + ], | |
136 | + dataType: 'STRUCT', | |
137 | + direction: 'PARAM_OUTPUT', | |
138 | + identifier: 'ceshi', | |
139 | + name: '网速', | |
140 | + paraOrder: 3, | |
141 | + }, | |
31 | 142 | ], |
32 | 143 | productKey: 'hsrnXEfGFDv', |
33 | 144 | required: false, |
... | ... | @@ -36,67 +147,123 @@ export const mockData = { |
36 | 147 | productKey: 'hsrnXEfGFDv', |
37 | 148 | properties: [ |
38 | 149 | { |
39 | - createTs: 1666259889029, | |
150 | + createTs: 1666604372638, | |
40 | 151 | custom: true, |
41 | 152 | customFlag: true, |
42 | 153 | dataSpecsList: [ |
43 | 154 | { |
44 | - id: buildUUID(), | |
155 | + childDataType: 'BOOL', | |
156 | + childEnumSpecsDTO: [ | |
157 | + { | |
158 | + dataType: 'BOOL', | |
159 | + name: '左眼', | |
160 | + value: 0, | |
161 | + }, | |
162 | + { | |
163 | + dataType: 'BOOL', | |
164 | + name: '右眼', | |
165 | + value: 1, | |
166 | + }, | |
167 | + ], | |
168 | + childName: '眼睛', | |
169 | + custom: true, | |
170 | + dataSpecsList: [ | |
171 | + { | |
172 | + dataType: 'BOOL', | |
173 | + name: '左眼', | |
174 | + value: 0, | |
175 | + }, | |
176 | + { | |
177 | + dataType: 'BOOL', | |
178 | + name: '右眼', | |
179 | + value: 1, | |
180 | + }, | |
181 | + ], | |
182 | + dataType: 'STRUCT', | |
183 | + identifier: 'Eye', | |
184 | + isStd: 0, | |
185 | + name: '眼睛', | |
186 | + }, | |
187 | + { | |
45 | 188 | childDataType: 'INT', |
46 | - childName: '测试参数1', | |
189 | + childName: '鼻子', | |
47 | 190 | childSpecsDTO: { |
48 | 191 | dataType: 'INT', |
49 | - max: '30', | |
50 | - min: '20', | |
51 | - step: '1', | |
52 | - unit: 'mm/hour', | |
53 | - unitName: '降雨量', | |
192 | + max: '22', | |
193 | + min: '12', | |
194 | + step: '5', | |
195 | + unit: '只', | |
196 | + unitName: '只', | |
54 | 197 | }, |
55 | 198 | custom: true, |
56 | 199 | dataSpecs: { |
57 | 200 | dataType: 'INT', |
58 | - max: '30', | |
59 | - min: '20', | |
60 | - step: '1', | |
61 | - unit: 'mm/hour', | |
62 | - unitName: '降雨量', | |
201 | + max: '22', | |
202 | + min: '12', | |
203 | + step: '5', | |
204 | + unit: '只', | |
205 | + unitName: '只', | |
63 | 206 | }, |
64 | 207 | dataType: 'STRUCT', |
65 | - identifier: 'iden2', | |
208 | + identifier: 'Boless', | |
66 | 209 | isStd: 0, |
67 | - name: '测试参数1', | |
210 | + name: '鼻子', | |
68 | 211 | }, |
69 | 212 | { |
70 | - id: buildUUID(), | |
71 | - childDataType: 'INT', | |
72 | - childName: '测试参数2', | |
213 | + childDataType: 'TEXT', | |
214 | + childName: '脸颊', | |
73 | 215 | childSpecsDTO: { |
74 | - dataType: 'INT', | |
75 | - max: '40', | |
76 | - min: '30', | |
77 | - step: '2', | |
78 | - unit: 'pH', | |
79 | - unitName: 'PH值', | |
216 | + dataType: 'TEXT', | |
217 | + length: 10240, | |
80 | 218 | }, |
81 | 219 | custom: true, |
82 | 220 | dataSpecs: { |
83 | - dataType: 'INT', | |
84 | - max: '40', | |
85 | - min: '30', | |
86 | - step: '2', | |
87 | - unit: 'pH', | |
88 | - unitName: 'PH值', | |
221 | + dataType: 'TEXT', | |
222 | + length: 10240, | |
89 | 223 | }, |
90 | 224 | dataType: 'STRUCT', |
91 | - identifier: 'idne2', | |
225 | + identifier: 'Facebook', | |
92 | 226 | isStd: 0, |
93 | - name: '测试参数2', | |
227 | + name: '脸颊', | |
228 | + }, | |
229 | + { | |
230 | + childDataType: 'BOOL', | |
231 | + childEnumSpecsDTO: [ | |
232 | + { | |
233 | + dataType: 'BOOL', | |
234 | + name: '左耳', | |
235 | + value: 0, | |
236 | + }, | |
237 | + { | |
238 | + dataType: 'BOOL', | |
239 | + name: '右耳', | |
240 | + value: 1, | |
241 | + }, | |
242 | + ], | |
243 | + childName: '耳朵', | |
244 | + custom: true, | |
245 | + dataSpecsList: [ | |
246 | + { | |
247 | + dataType: 'BOOL', | |
248 | + name: '左耳', | |
249 | + value: 0, | |
250 | + }, | |
251 | + { | |
252 | + dataType: 'BOOL', | |
253 | + name: '右耳', | |
254 | + value: 1, | |
255 | + }, | |
256 | + ], | |
257 | + dataType: 'STRUCT', | |
258 | + identifier: 'Eyear', | |
259 | + isStd: 0, | |
260 | + name: '耳朵', | |
94 | 261 | }, |
95 | 262 | ], |
96 | 263 | dataType: 'STRUCT', |
97 | - description: '21212', | |
98 | - identifier: 'iden1', | |
99 | - name: '测试功能', | |
264 | + description: '用于人脸特征下发,基于人脸门禁1.0物模型\n设备级开关', | |
265 | + identifier: 'SupportFaceFeature', | |
266 | + name: '支持人脸特征下发', | |
100 | 267 | productKey: 'hsrnXEfGFDv', |
101 | 268 | required: false, |
102 | 269 | rwFlag: 'READ_WRITE', |
... | ... | @@ -105,249 +272,329 @@ export const mockData = { |
105 | 272 | ], |
106 | 273 | services: [ |
107 | 274 | { |
108 | - callType: 'ASYNC', | |
109 | - createTs: 1666343456853, | |
275 | + callType: 'SYNC', | |
276 | + createTs: 1666603858325, | |
110 | 277 | custom: true, |
111 | - description: '4343', | |
112 | - identifier: 'Iide1', | |
278 | + description: '更新模型', | |
279 | + identifier: 'UpdateModel', | |
113 | 280 | inputParams: [ |
114 | 281 | { |
115 | 282 | id: buildUUID(), |
116 | 283 | custom: true, |
117 | 284 | dataSpecs: { |
285 | + dataType: 'TEXT', | |
286 | + length: 128, | |
287 | + }, | |
288 | + dataType: 'TEXT', | |
289 | + direction: 'PARAM_INPUT', | |
290 | + identifier: 'UpdateTaskID', | |
291 | + name: '更新任务ID', | |
292 | + paraOrder: 0, | |
293 | + }, | |
294 | + { | |
295 | + id: buildUUID(), | |
296 | + custom: true, | |
297 | + dataSpecs: { | |
298 | + dataType: 'TEXT', | |
299 | + length: 128, | |
300 | + }, | |
301 | + dataType: 'TEXT', | |
302 | + direction: 'PARAM_INPUT', | |
303 | + identifier: 'AlgorithmID', | |
304 | + name: '算法任务唯一标识', | |
305 | + paraOrder: 1, | |
306 | + }, | |
307 | + { | |
308 | + id: buildUUID(), | |
309 | + | |
310 | + custom: true, | |
311 | + dataSpecs: { | |
312 | + dataType: 'TEXT', | |
313 | + length: 64, | |
314 | + }, | |
315 | + dataType: 'TEXT', | |
316 | + direction: 'PARAM_INPUT', | |
317 | + identifier: 'AlgorithmName', | |
318 | + name: '算法名称', | |
319 | + paraOrder: 2, | |
320 | + }, | |
321 | + { | |
322 | + id: buildUUID(), | |
323 | + | |
324 | + custom: true, | |
325 | + dataSpecs: { | |
118 | 326 | dataType: 'INT', |
119 | - max: '20', | |
120 | - min: '10', | |
121 | - step: '2', | |
122 | - unit: 'dS/m', | |
123 | - unitName: '土壤EC值', | |
327 | + max: '128', | |
328 | + min: '0', | |
329 | + precise: 0, | |
330 | + step: '1', | |
331 | + unit: '', | |
332 | + unitName: '无', | |
124 | 333 | }, |
125 | 334 | dataType: 'INT', |
126 | 335 | direction: 'PARAM_INPUT', |
127 | - identifier: 'i1', | |
128 | - name: '参数名字1', | |
129 | - paraOrder: 0, | |
336 | + identifier: 'NumThreads', | |
337 | + name: '使用线程数', | |
338 | + paraOrder: 4, | |
339 | + }, | |
340 | + { | |
341 | + id: buildUUID(), | |
342 | + | |
343 | + custom: true, | |
344 | + dataSpecs: { | |
345 | + dataType: 'TEXT', | |
346 | + length: 128, | |
347 | + }, | |
348 | + dataType: 'TEXT', | |
349 | + direction: 'PARAM_INPUT', | |
350 | + identifier: 'ModelID', | |
351 | + name: '模型唯一标识', | |
352 | + paraOrder: 5, | |
353 | + }, | |
354 | + { | |
355 | + id: buildUUID(), | |
356 | + | |
357 | + custom: true, | |
358 | + dataSpecs: { | |
359 | + dataType: 'TEXT', | |
360 | + length: 64, | |
361 | + }, | |
362 | + dataType: 'TEXT', | |
363 | + direction: 'PARAM_INPUT', | |
364 | + identifier: 'ModelName', | |
365 | + name: '模型名称', | |
366 | + paraOrder: 6, | |
367 | + }, | |
368 | + { | |
369 | + id: buildUUID(), | |
370 | + | |
371 | + custom: true, | |
372 | + dataSpecs: { | |
373 | + dataType: 'TEXT', | |
374 | + length: 64, | |
375 | + }, | |
376 | + dataType: 'TEXT', | |
377 | + direction: 'PARAM_INPUT', | |
378 | + identifier: 'ModelVersion', | |
379 | + name: '模型版本', | |
380 | + paraOrder: 7, | |
381 | + }, | |
382 | + { | |
383 | + id: buildUUID(), | |
384 | + | |
385 | + custom: true, | |
386 | + dataSpecs: { | |
387 | + dataType: 'TEXT', | |
388 | + length: 1024, | |
389 | + }, | |
390 | + dataType: 'TEXT', | |
391 | + direction: 'PARAM_INPUT', | |
392 | + identifier: 'ModelURL', | |
393 | + name: '模型地址', | |
394 | + paraOrder: 8, | |
395 | + }, | |
396 | + { | |
397 | + id: buildUUID(), | |
398 | + | |
399 | + custom: true, | |
400 | + dataSpecs: { | |
401 | + dataType: 'TEXT', | |
402 | + length: 128, | |
403 | + }, | |
404 | + dataType: 'TEXT', | |
405 | + direction: 'PARAM_INPUT', | |
406 | + identifier: 'ModelMD5', | |
407 | + name: '模型文件MD5', | |
408 | + paraOrder: 9, | |
409 | + }, | |
410 | + { | |
411 | + id: buildUUID(), | |
412 | + | |
413 | + custom: true, | |
414 | + dataSpecs: { | |
415 | + dataType: 'TEXT', | |
416 | + length: 64, | |
417 | + }, | |
418 | + dataType: 'TEXT', | |
419 | + direction: 'PARAM_INPUT', | |
420 | + identifier: 'ModelPlatform', | |
421 | + name: '模型平台', | |
422 | + paraOrder: 10, | |
423 | + }, | |
424 | + { | |
425 | + id: buildUUID(), | |
426 | + | |
427 | + custom: true, | |
428 | + dataSpecs: { | |
429 | + dataType: 'TEXT', | |
430 | + length: 128, | |
431 | + }, | |
432 | + dataType: 'TEXT', | |
433 | + direction: 'PARAM_INPUT', | |
434 | + identifier: 'ModelTaskID', | |
435 | + name: '模型生成任务ID', | |
436 | + paraOrder: 11, | |
437 | + }, | |
438 | + { | |
439 | + id: buildUUID(), | |
440 | + | |
441 | + custom: true, | |
442 | + dataSpecs: { | |
443 | + dataType: 'TEXT', | |
444 | + length: 64, | |
445 | + }, | |
446 | + dataType: 'TEXT', | |
447 | + direction: 'PARAM_INPUT', | |
448 | + identifier: 'ModelEncryptType', | |
449 | + name: '模型加密方式', | |
450 | + paraOrder: 12, | |
451 | + }, | |
452 | + { | |
453 | + id: buildUUID(), | |
454 | + | |
455 | + custom: true, | |
456 | + dataSpecs: { | |
457 | + dataType: 'TEXT', | |
458 | + length: 2048, | |
459 | + }, | |
460 | + dataType: 'TEXT', | |
461 | + direction: 'PARAM_INPUT', | |
462 | + identifier: 'ModelExtension', | |
463 | + name: '扩展信息', | |
464 | + paraOrder: 13, | |
465 | + }, | |
466 | + { | |
467 | + id: buildUUID(), | |
468 | + | |
469 | + custom: true, | |
470 | + dataSpecsList: [ | |
471 | + { | |
472 | + id: buildUUID(), | |
473 | + | |
474 | + childDataType: 'TEXT', | |
475 | + childName: '模型结构体参数1', | |
476 | + childSpecsDTO: { | |
477 | + dataType: 'TEXT', | |
478 | + length: 10240, | |
479 | + }, | |
480 | + custom: true, | |
481 | + dataSpecs: { | |
482 | + dataType: 'TEXT', | |
483 | + length: 10240, | |
484 | + }, | |
485 | + dataType: 'STRUCT', | |
486 | + identifier: 'ModelParams1', | |
487 | + isStd: 0, | |
488 | + name: '模型结构体参数1', | |
489 | + }, | |
490 | + { | |
491 | + id: buildUUID(), | |
492 | + | |
493 | + childDataType: 'BOOL', | |
494 | + childEnumSpecsDTO: [ | |
495 | + { | |
496 | + dataType: 'BOOL', | |
497 | + name: '1', | |
498 | + value: 0, | |
499 | + }, | |
500 | + { | |
501 | + dataType: 'BOOL', | |
502 | + name: '0', | |
503 | + value: 1, | |
504 | + }, | |
505 | + ], | |
506 | + childName: '模型结构体参数2', | |
507 | + custom: true, | |
508 | + dataSpecsList: [ | |
509 | + { | |
510 | + id: buildUUID(), | |
511 | + | |
512 | + dataType: 'BOOL', | |
513 | + name: '1', | |
514 | + value: 0, | |
515 | + }, | |
516 | + { | |
517 | + id: buildUUID(), | |
518 | + | |
519 | + dataType: 'BOOL', | |
520 | + name: '0', | |
521 | + value: 1, | |
522 | + }, | |
523 | + ], | |
524 | + dataType: 'STRUCT', | |
525 | + identifier: 'ModelParams2', | |
526 | + isStd: 0, | |
527 | + name: '模型结构体参数2', | |
528 | + }, | |
529 | + ], | |
530 | + dataType: 'STRUCT', | |
531 | + direction: 'PARAM_INPUT', | |
532 | + identifier: 'ModelStruct', | |
533 | + name: '模型结构体', | |
534 | + paraOrder: 3, | |
130 | 535 | }, |
131 | 536 | ], |
132 | 537 | outputParams: [ |
133 | 538 | { |
134 | 539 | id: buildUUID(), |
540 | + | |
541 | + custom: true, | |
542 | + dataSpecs: { | |
543 | + dataType: 'TEXT', | |
544 | + length: 10240, | |
545 | + }, | |
546 | + dataType: 'TEXT', | |
547 | + direction: 'PARAM_OUTPUT', | |
548 | + identifier: 'Django', | |
549 | + name: 'django', | |
550 | + paraOrder: 0, | |
551 | + }, | |
552 | + { | |
553 | + id: buildUUID(), | |
554 | + | |
555 | + custom: true, | |
556 | + dataSpecsList: [ | |
557 | + { | |
558 | + id: buildUUID(), | |
559 | + | |
560 | + dataType: 'BOOL', | |
561 | + name: '1', | |
562 | + value: 0, | |
563 | + }, | |
564 | + { | |
565 | + id: buildUUID(), | |
566 | + dataType: 'BOOL', | |
567 | + name: '0', | |
568 | + value: 1, | |
569 | + }, | |
570 | + ], | |
571 | + dataType: 'BOOL', | |
572 | + direction: 'PARAM_OUTPUT', | |
573 | + identifier: 'Flask', | |
574 | + name: 'flask', | |
575 | + paraOrder: 1, | |
576 | + }, | |
577 | + { | |
578 | + id: buildUUID(), | |
135 | 579 | custom: true, |
136 | 580 | dataSpecs: { |
137 | 581 | dataType: 'INT', |
138 | - max: '20', | |
139 | - min: '10', | |
582 | + max: '22', | |
583 | + min: '11', | |
140 | 584 | step: '3', |
141 | - unit: 'pH', | |
142 | - unitName: 'PH值', | |
585 | + unit: '只', | |
586 | + unitName: '只', | |
143 | 587 | }, |
144 | 588 | dataType: 'INT', |
145 | 589 | direction: 'PARAM_OUTPUT', |
146 | - identifier: 'i2', | |
147 | - name: '输出参数2', | |
148 | - paraOrder: 0, | |
590 | + identifier: 'Tornado', | |
591 | + name: 'tornado', | |
592 | + paraOrder: 2, | |
149 | 593 | }, |
150 | 594 | ], |
151 | 595 | productKey: 'hsrnXEfGFDv', |
152 | 596 | required: false, |
153 | - serviceName: '服务1', | |
597 | + serviceName: '更新模型', | |
154 | 598 | }, |
155 | 599 | ], |
156 | 600 | }; |
157 | - | |
158 | -// { | |
159 | -// _ppk: {}, | |
160 | -// events: [], | |
161 | -// productKey: 'hsrnXEfGFDv', | |
162 | -// properties: [ | |
163 | -// { | |
164 | -// createTs: 1666259889029, | |
165 | -// custom: true, | |
166 | -// customFlag: true, | |
167 | -// dataSpecsList: [ | |
168 | -// { | |
169 | -// id: buildUUID(), | |
170 | -// childDataType: 'INT', | |
171 | -// childName: '测试参数1', | |
172 | -// childSpecsDTO: { | |
173 | -// dataType: 'INT', | |
174 | -// max: '30', | |
175 | -// min: '20', | |
176 | -// step: '1', | |
177 | -// unit: 'mm/hour', | |
178 | -// unitName: '降雨量', | |
179 | -// }, | |
180 | -// custom: true, | |
181 | -// dataSpecs: { | |
182 | -// dataType: 'INT', | |
183 | -// max: '30', | |
184 | -// min: '20', | |
185 | -// step: '1', | |
186 | -// unit: 'mm/hour', | |
187 | -// unitName: '降雨量', | |
188 | -// }, | |
189 | -// dataType: 'STRUCT', | |
190 | -// identifier: 'iden2', | |
191 | -// isStd: 0, | |
192 | -// name: '测试参数1', | |
193 | -// }, | |
194 | -// { | |
195 | -// id: buildUUID(), | |
196 | -// childDataType: 'INT', | |
197 | -// childName: '测试参数2', | |
198 | -// childSpecsDTO: { | |
199 | -// dataType: 'INT', | |
200 | -// max: '40', | |
201 | -// min: '30', | |
202 | -// step: '2', | |
203 | -// unit: 'pH', | |
204 | -// unitName: 'PH值', | |
205 | -// }, | |
206 | -// custom: true, | |
207 | -// dataSpecs: { | |
208 | -// dataType: 'INT', | |
209 | -// max: '40', | |
210 | -// min: '30', | |
211 | -// step: '2', | |
212 | -// unit: 'pH', | |
213 | -// unitName: 'PH值', | |
214 | -// }, | |
215 | -// dataType: 'STRUCT', | |
216 | -// identifier: 'idne2', | |
217 | -// isStd: 0, | |
218 | -// name: '测试参数2', | |
219 | -// }, | |
220 | -// ], | |
221 | -// dataType: 'STRUCT', | |
222 | -// description: '21212', | |
223 | -// identifier: 'iden1', | |
224 | -// name: '测试功能', | |
225 | -// productKey: 'hsrnXEfGFDv', | |
226 | -// required: false, | |
227 | -// rwFlag: 'READ_WRITE', | |
228 | -// std: false, | |
229 | -// }, | |
230 | -// ], | |
231 | -// services: [], | |
232 | -// }; | |
233 | - | |
234 | -// { | |
235 | -// "_ppk": {}, | |
236 | -// "events": [], | |
237 | -// "productKey": "hsrnXEfGFDv", | |
238 | -// "properties": [ | |
239 | -// { | |
240 | -// "createTs": 1666259889029, | |
241 | -// "custom": true, | |
242 | -// "customFlag": true, | |
243 | -// "dataSpecsList": [ | |
244 | -// { | |
245 | -// "childDataType": "INT", | |
246 | -// "childName": "测试参数1", | |
247 | -// "childSpecsDTO": { | |
248 | -// "dataType": "INT", | |
249 | -// "max": "30", | |
250 | -// "min": "20", | |
251 | -// "step": "1", | |
252 | -// "unit": "mm/hour", | |
253 | -// "unitName": "降雨量" | |
254 | -// }, | |
255 | -// "custom": true, | |
256 | -// "dataSpecs": { | |
257 | -// "dataType": "INT", | |
258 | -// "max": "30", | |
259 | -// "min": "20", | |
260 | -// "step": "1", | |
261 | -// "unit": "mm/hour", | |
262 | -// "unitName": "降雨量" | |
263 | -// }, | |
264 | -// "dataType": "STRUCT", | |
265 | -// "identifier": "iden2", | |
266 | -// "isStd": 0, | |
267 | -// "name": "测试参数1" | |
268 | -// }, | |
269 | -// { | |
270 | -// "childDataType": "INT", | |
271 | -// "childName": "测试参数2", | |
272 | -// "childSpecsDTO": { | |
273 | -// "dataType": "INT", | |
274 | -// "max": "40", | |
275 | -// "min": "30", | |
276 | -// "step": "2", | |
277 | -// "unit": "pH", | |
278 | -// "unitName": "PH值" | |
279 | -// }, | |
280 | -// "custom": true, | |
281 | -// "dataSpecs": { | |
282 | -// "dataType": "INT", | |
283 | -// "max": "40", | |
284 | -// "min": "30", | |
285 | -// "step": "2", | |
286 | -// "unit": "pH", | |
287 | -// "unitName": "PH值" | |
288 | -// }, | |
289 | -// "dataType": "STRUCT", | |
290 | -// "identifier": "idne2", | |
291 | -// "isStd": 0, | |
292 | -// "name": "测试参数2" | |
293 | -// } | |
294 | -// ], | |
295 | -// "dataType": "STRUCT", | |
296 | -// "description": "21212", | |
297 | -// "identifier": "iden1", | |
298 | -// "name": "测试功能", | |
299 | -// "productKey": "hsrnXEfGFDv", | |
300 | -// "required": false, | |
301 | -// "rwFlag": "READ_WRITE", | |
302 | -// "std": false | |
303 | -// } | |
304 | -// ], | |
305 | -// "services": [ | |
306 | -// { | |
307 | -// "callType": "ASYNC", | |
308 | -// "createTs": 1666343456853, | |
309 | -// "custom": true, | |
310 | -// "description": "4343", | |
311 | -// "identifier": "Iide1", | |
312 | -// "inputParams": [ | |
313 | -// { | |
314 | -// "custom": true, | |
315 | -// "dataSpecs": { | |
316 | -// "dataType": "INT", | |
317 | -// "max": "20", | |
318 | -// "min": "10", | |
319 | -// "step": "2", | |
320 | -// "unit": "dS/m", | |
321 | -// "unitName": "土壤EC值" | |
322 | -// }, | |
323 | -// "dataType": "INT", | |
324 | -// "direction": "PARAM_INPUT", | |
325 | -// "identifier": "i1", | |
326 | -// "name": "参数名字1", | |
327 | -// "paraOrder": 0 | |
328 | -// } | |
329 | -// ], | |
330 | -// "outputParams": [ | |
331 | -// { | |
332 | -// "custom": true, | |
333 | -// "dataSpecs": { | |
334 | -// "dataType": "INT", | |
335 | -// "max": "20", | |
336 | -// "min": "10", | |
337 | -// "step": "3", | |
338 | -// "unit": "pH", | |
339 | -// "unitName": "PH值" | |
340 | -// }, | |
341 | -// "dataType": "INT", | |
342 | -// "direction": "PARAM_OUTPUT", | |
343 | -// "identifier": "i2", | |
344 | -// "name": "输出参数2", | |
345 | -// "paraOrder": 0 | |
346 | -// } | |
347 | -// ], | |
348 | -// "productKey": "hsrnXEfGFDv", | |
349 | -// "required": false, | |
350 | -// "serviceName": "服务1" | |
351 | -// } | |
352 | -// ] | |
353 | -// } | ... | ... |
... | ... | @@ -139,14 +139,17 @@ export const attrSchemas: FormSchema[] = [ |
139 | 139 | }, |
140 | 140 | { |
141 | 141 | field: 'length', |
142 | - component: 'Input', | |
142 | + component: 'InputNumber', | |
143 | 143 | required: true, |
144 | 144 | label: '数据长度', |
145 | - defaultValue: '10240', | |
145 | + defaultValue: 10240, | |
146 | 146 | colProps: { |
147 | - span: 18, | |
147 | + span: 8, | |
148 | + }, | |
149 | + componentProps: { | |
150 | + max: 10240, | |
151 | + min: 1, | |
148 | 152 | }, |
149 | - suffix: '字节', | |
150 | 153 | ifShow: ({ values }) => isString(values.dataType), |
151 | 154 | }, |
152 | 155 | { |
... | ... | @@ -224,7 +227,7 @@ export const serviceSchemas: FormSchema[] = [ |
224 | 227 | colProps: { |
225 | 228 | span: 24, |
226 | 229 | }, |
227 | - defaultValue: 'asynchronous', | |
230 | + defaultValue: 'ASYNC', | |
228 | 231 | componentProps: { |
229 | 232 | placeholder: '请选择调用方式', |
230 | 233 | api: findDictItemByCode, |
... | ... | @@ -296,7 +299,7 @@ export const eventSchemas: FormSchema[] = [ |
296 | 299 | colProps: { |
297 | 300 | span: 24, |
298 | 301 | }, |
299 | - defaultValue: 'message', | |
302 | + defaultValue: 'INFO_EVENT_TYPE', | |
300 | 303 | componentProps: { |
301 | 304 | placeholder: '请选择事件类型', |
302 | 305 | api: findDictItemByCode, |
... | ... | @@ -400,7 +403,7 @@ export const addParamsSchemas: FormSchema[] = [ |
400 | 403 | { |
401 | 404 | field: 'structSlot', |
402 | 405 | label: 'JSON 对象', |
403 | - required: true, | |
406 | + // required: true, | |
404 | 407 | component: 'Input', |
405 | 408 | slot: 'structSlot', |
406 | 409 | colProps: { |
... | ... | @@ -436,14 +439,17 @@ export const addParamsSchemas: FormSchema[] = [ |
436 | 439 | }, |
437 | 440 | { |
438 | 441 | field: 'length', |
439 | - component: 'Input', | |
442 | + component: 'InputNumber', | |
440 | 443 | required: true, |
441 | 444 | label: '数据长度', |
442 | - defaultValue: '10240', | |
445 | + defaultValue: 10240, | |
443 | 446 | colProps: { |
444 | - span: 24, | |
447 | + span: 8, | |
448 | + }, | |
449 | + componentProps: { | |
450 | + max: 50000, | |
451 | + min: 1, | |
445 | 452 | }, |
446 | - suffix: '字节', | |
447 | 453 | ifShow: ({ values }) => isString(values.dataType), |
448 | 454 | }, |
449 | 455 | { | ... | ... |
... | ... | @@ -14,3 +14,10 @@ export const validateValueRangeAndStep = (min, step, max) => { |
14 | 14 | throw '步长不能大于取值范围的差值'; |
15 | 15 | } |
16 | 16 | }; |
17 | + | |
18 | +export const validateValueBool = (boolClose, boolOpen) => { | |
19 | + if (boolClose == boolOpen) { | |
20 | + createMessage.error('布尔值不能相同'); | |
21 | + throw '布尔值不能相同'; | |
22 | + } | |
23 | +}; | ... | ... |
... | ... | @@ -39,7 +39,9 @@ |
39 | 39 | import { Select } from 'ant-design-vue'; |
40 | 40 | import { useModal } from '/@/components/Modal'; |
41 | 41 | import ConverScriptModal from './ConverScriptModal.vue'; |
42 | + import { useMessage } from '/@/hooks/web/useMessage'; | |
42 | 43 | |
44 | + const { createMessage } = useMessage(); | |
43 | 45 | const selectScript = reactive({ |
44 | 46 | script: null, |
45 | 47 | }); |
... | ... | @@ -78,6 +80,10 @@ |
78 | 80 | }; |
79 | 81 | |
80 | 82 | const getFormData = () => { |
83 | + if (!selectScript.script) { | |
84 | + createMessage.error('请选择转换脚本'); | |
85 | + throw '请选择转换脚本'; | |
86 | + } | |
81 | 87 | const value = { |
82 | 88 | ...{ |
83 | 89 | scriptId: selectScript.script, | ... | ... |
... | ... | @@ -16,16 +16,16 @@ |
16 | 16 | <a-input v-if="ifAdd" v-model:value="scriptForm.scriptName" placeholder="请输入脚本名称" /> |
17 | 17 | <a-input v-else v-model:value="scriptForm.inputParams" placeholder="请输入参数" /> |
18 | 18 | </a-form-item> |
19 | - <a-form-item label="上报数据类型" name="reportType"> | |
19 | + <a-form-item | |
20 | + label="上报数据类型" | |
21 | + name="reportType" | |
22 | + :rules="[{ required: true, message: '请选择上报数据类型' }]" | |
23 | + > | |
20 | 24 | <a-space direction="vertical"> |
21 | 25 | <a-radio-group v-model:value="scriptForm.reportType" :options="typeOptions" /> |
22 | 26 | </a-space> |
23 | 27 | </a-form-item> |
24 | - <a-form-item | |
25 | - label="脚本内容" | |
26 | - name="scriptContent" | |
27 | - :rules="[{ required: true, message: '请输入脚本内容' }]" | |
28 | - > | |
28 | + <a-form-item label="脚本内容" name="scriptContent"> | |
29 | 29 | <Card title="脚本内容" :bodyStyle="{ padding: 0, height: '280px' }"> |
30 | 30 | <template #extra> |
31 | 31 | <a-button @click="handleFormat" size="small">格式化</a-button> |
... | ... | @@ -60,7 +60,7 @@ |
60 | 60 | </div> |
61 | 61 | </template> |
62 | 62 | <script setup lang="ts"> |
63 | - import { ref, unref, reactive, onMounted, toRef } from 'vue'; | |
63 | + import { ref, unref, reactive, onMounted, toRefs } from 'vue'; | |
64 | 64 | import ace from 'ace-builds'; |
65 | 65 | import { Card, Button } from 'ant-design-vue'; |
66 | 66 | import 'ace-builds/src-noconflict/theme-chrome'; // 默认设置的主题 |
... | ... | @@ -81,12 +81,12 @@ |
81 | 81 | scriptContent: '', |
82 | 82 | inputParams: '', |
83 | 83 | outputParams: '', |
84 | - reportType: ['define 16'], | |
84 | + reportType: 'HEX', | |
85 | 85 | }); |
86 | 86 | const reportTypeOptions = reactive({ |
87 | 87 | typeOptions: [], |
88 | 88 | }); |
89 | - const typeOptions = toRef(reportTypeOptions, 'typeOptions'); | |
89 | + const { typeOptions } = toRefs(reportTypeOptions); | |
90 | 90 | const { createMessage } = useMessage(); |
91 | 91 | const { clipboardRef, copiedRef } = useCopyToClipboard(); |
92 | 92 | const aceEditor = ref(); |
... | ... | @@ -144,8 +144,16 @@ |
144 | 144 | const formRef = ref(); |
145 | 145 | const getFormData = async () => { |
146 | 146 | const value = await formRef.value.validateFields(); |
147 | + scriptForm.scriptContent = aceEditor.value.getValue(); | |
148 | + if (scriptForm.scriptContent == '') { | |
149 | + createMessage.error('请编写脚本内容'); | |
150 | + throw '请编写脚本内容'; | |
151 | + } | |
147 | 152 | if (!value) return; |
148 | - return value; | |
153 | + return { | |
154 | + ...value, | |
155 | + ...{ scriptContent: scriptForm.scriptContent }, | |
156 | + }; | |
149 | 157 | }; |
150 | 158 | const setFormData = (v) => { |
151 | 159 | for (let i in scriptForm) { | ... | ... |