Showing
13 changed files
with
475 additions
and
86 deletions
... | ... | @@ -35,7 +35,7 @@ |
35 | 35 | </div> |
36 | 36 | </template> |
37 | 37 | <script lang="ts" setup> |
38 | - import { ref, unref, reactive } from 'vue'; | |
38 | + import { ref, unref, reactive, nextTick } from 'vue'; | |
39 | 39 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
40 | 40 | import { Tabs, TabPane, Typography, TypographyParagraph } from 'ant-design-vue'; |
41 | 41 | import Attribute from './cpns/Attribute.vue'; |
... | ... | @@ -70,19 +70,25 @@ |
70 | 70 | if (!unref(isViewDetail)) { |
71 | 71 | const title = !unref(isUpdate) ? '编辑物模型' : '新增物模型'; |
72 | 72 | if (!unref(isUpdate)) { |
73 | - AttrRef.value?.setFormData(mockData.properties); | |
73 | + nextTick(() => { | |
74 | + AttrRef.value?.setFormData(mockData.properties); | |
75 | + ServiceRef.value?.setFormData(mockData.services); | |
76 | + EventsRef.value?.setFormData(mockData.events); | |
77 | + }); | |
74 | 78 | } |
75 | 79 | setModalProps({ title, showOkBtn: true, showCancelBtn: true }); |
76 | - if (!unref(isUpdate)) { | |
77 | - } | |
78 | 80 | } else { |
79 | 81 | setModalProps({ showOkBtn: false, showCancelBtn: false, title: '查看物模型' }); |
80 | 82 | AttrRef.value?.setFormData(mockData.properties); |
83 | + ServiceRef.value?.setFormData(mockData.services); | |
84 | + EventsRef.value?.setFormData(mockData.events); | |
81 | 85 | } |
82 | 86 | setModalProps({ loading: false }); |
83 | 87 | }); |
84 | 88 | const handleCancel = (flag) => { |
85 | 89 | AttrRef.value?.resetFormData(); |
90 | + ServiceRef.value?.resetFormData(); | |
91 | + EventsRef.value?.resetFormData(); | |
86 | 92 | activeKey.value = '1'; |
87 | 93 | allData.properties = []; |
88 | 94 | allData.events = []; |
... | ... | @@ -92,9 +98,16 @@ |
92 | 98 | } |
93 | 99 | }; |
94 | 100 | const handleSubmit = async () => { |
95 | - const value = await AttrRef.value?.getFormData(); | |
96 | - if (!value) return; | |
97 | - allData.properties.push(value); | |
101 | + if (activeKey.value == '1') { | |
102 | + const valueAttr = await AttrRef.value?.getFormData(); | |
103 | + allData.properties.push(valueAttr); | |
104 | + } else if (activeKey.value == '2') { | |
105 | + const valueService = await ServiceRef.value?.getFormData(); | |
106 | + allData.services.push(valueService); | |
107 | + } else { | |
108 | + const valueEvents = await EventsRef.value?.getFormData(); | |
109 | + allData.events.push(valueEvents); | |
110 | + } | |
98 | 111 | console.log('搜集值', allData); |
99 | 112 | closeModal(); |
100 | 113 | }; | ... | ... |
... | ... | @@ -50,9 +50,11 @@ |
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'; | |
53 | + // import { useMessage } from '/@/hooks/web/useMessage'; | |
54 | + import { validateValueRangeAndStep } from '../hook/useValidateParital'; | |
55 | + import { buildUUID } from '/@/utils/uuid'; | |
54 | 56 | |
55 | - const { createMessage } = useMessage(); | |
57 | + // const { createMessage } = useMessage(); | |
56 | 58 | const outputParamData: any = ref([]); |
57 | 59 | const minMaxObj = reactive({ |
58 | 60 | min: '', |
... | ... | @@ -79,10 +81,11 @@ |
79 | 81 | |
80 | 82 | const getData = (d, f) => { |
81 | 83 | if (f == 'output') { |
82 | - unref(outputParamData).push(d); | |
83 | 84 | if (d.id !== null) { |
84 | - const findIndex = unref(outputParamData).findIndex((f) => f.id !== d.id); | |
85 | - if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1); | |
85 | + const findIndex = unref(outputParamData).findIndex((f) => f.id == d.id); | |
86 | + if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1, d); | |
87 | + } else { | |
88 | + unref(outputParamData).push({ ...d, id: buildUUID() }); | |
86 | 89 | } |
87 | 90 | } |
88 | 91 | }; |
... | ... | @@ -91,7 +94,7 @@ |
91 | 94 | openModal(true, { |
92 | 95 | isUpdate: true, |
93 | 96 | flag: 'output', |
94 | - excludeStruct: true, | |
97 | + excludeStruct: false, | |
95 | 98 | }); |
96 | 99 | }; |
97 | 100 | |
... | ... | @@ -103,7 +106,7 @@ |
103 | 106 | isUpdate: false, |
104 | 107 | record: item, |
105 | 108 | flag: 'output', |
106 | - excludeStruct: true, | |
109 | + excludeStruct: false, | |
107 | 110 | }); |
108 | 111 | }; |
109 | 112 | |
... | ... | @@ -111,13 +114,10 @@ |
111 | 114 | const setFormData = (v) => { |
112 | 115 | setFieldsValue(v[0]); |
113 | 116 | const { dataSpecsList } = v[0]; |
114 | - outputParamData.value = [...new Array(dataSpecsList.length).keys()]; | |
115 | - outputParamData.value = v[0].dataSpecsList; | |
116 | - // dataSpecsList.forEach((item, index) => { | |
117 | - // nextTick(() => { | |
118 | - // unref(dynamicBindRef.outputParamItemRef)[index].setFormData(dataSpecsList) | |
119 | - // }) | |
120 | - // }); | |
117 | + if (dataSpecsList !== undefined) { | |
118 | + outputParamData.value = [...new Array(dataSpecsList.length).keys()]; | |
119 | + outputParamData.value = dataSpecsList; | |
120 | + } | |
121 | 121 | }; |
122 | 122 | //获取数据 |
123 | 123 | const getStructList = () => { |
... | ... | @@ -129,14 +129,7 @@ |
129 | 129 | const values = await validate(); |
130 | 130 | if (!values) return; |
131 | 131 | const dataSpecsList = getStructList(); |
132 | - if (Number(minMaxObj.min) > Number(minMaxObj.max)) { | |
133 | - createMessage.error('最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'); | |
134 | - throw '最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'; | |
135 | - } | |
136 | - if (Number(values.step) > Number(minMaxObj.max) - Number(minMaxObj.min)) { | |
137 | - createMessage.error('步长不能大于取值范围的差值'); | |
138 | - throw '步长不能大于取值范围的差值'; | |
139 | - } | |
132 | + validateValueRangeAndStep(Number(minMaxObj.min), Number(values.step), Number(minMaxObj.max)); | |
140 | 133 | const isStruct = values.dataType === 'STRUCT'; |
141 | 134 | const dataSpecs = { |
142 | 135 | ...minMaxObj, |
... | ... | @@ -144,12 +137,13 @@ |
144 | 137 | ...{ unit: values.unit }, |
145 | 138 | ...{ dataType: values.dataType }, |
146 | 139 | }; |
147 | - Reflect.deleteProperty(values, 'valueRange'); | |
148 | - Reflect.deleteProperty(values, 'step'); | |
149 | - Reflect.deleteProperty(values, 'unit'); | |
150 | - Reflect.deleteProperty(values, 'outputParam'); | |
140 | + const { valueRange, step, unit, outputParam, ...value } = values; | |
141 | + console.log(valueRange); | |
142 | + console.log(step); | |
143 | + console.log(unit); | |
144 | + console.log(outputParam); | |
151 | 145 | return { |
152 | - ...values, | |
146 | + ...value, | |
153 | 147 | ...{ dataSpecs: isStruct ? null : dataSpecs }, |
154 | 148 | ...{ dataSpecsList: isStruct ? dataSpecsList : null }, |
155 | 149 | }; | ... | ... |
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | <template v-for="(item, index) in outputParamData" :key="item"> |
7 | 7 | <span style="display: none">{{ item }}</span> |
8 | 8 | <InputParamItem |
9 | - :title="item.configName" | |
9 | + :title="item.name" | |
10 | 10 | :item="item" |
11 | 11 | class="mt-4" |
12 | 12 | :index="index" |
... | ... | @@ -32,6 +32,7 @@ |
32 | 32 | import { useModal } from '/@/components/Modal'; |
33 | 33 | import InputParamItem from './components/InputParamItem.vue'; |
34 | 34 | import AddParamsModal from './components/AddParamsModal.vue'; |
35 | + import { buildUUID } from '/@/utils/uuid'; | |
35 | 36 | |
36 | 37 | const outputParamData: any = ref([]); |
37 | 38 | const dynamicBindRef = { |
... | ... | @@ -50,10 +51,11 @@ |
50 | 51 | }); |
51 | 52 | const getData = (d, f) => { |
52 | 53 | if (f == 'output') { |
53 | - unref(outputParamData).push(d); | |
54 | 54 | if (d.id !== null) { |
55 | - const findIndex = unref(outputParamData).findIndex((f) => f.id !== d.id); | |
56 | - if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1); | |
55 | + const findIndex = unref(outputParamData).findIndex((f) => f.id == d.id); | |
56 | + if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1, d); | |
57 | + } else { | |
58 | + unref(outputParamData).push({ ...d, id: buildUUID() }); | |
57 | 59 | } |
58 | 60 | } |
59 | 61 | }; |
... | ... | @@ -76,13 +78,29 @@ |
76 | 78 | }; |
77 | 79 | //回显数据 |
78 | 80 | const setFormData = (v) => { |
79 | - setFieldsValue(v); | |
81 | + setFieldsValue(v[0]); | |
82 | + const { outputData } = v[0]; | |
83 | + if (outputData !== undefined) { | |
84 | + outputParamData.value = [...new Array(outputData.length).keys()]; | |
85 | + outputParamData.value = outputData; | |
86 | + } | |
80 | 87 | }; |
81 | 88 | //获取数据 |
89 | + const getStructList = () => { | |
90 | + const val = unref(dynamicBindRef.outputParamItemRef)?.map((item: any) => item.getFormData()); | |
91 | + return val; | |
92 | + }; | |
93 | + | |
82 | 94 | async function getFormData() { |
83 | 95 | const values = await validate(); |
84 | 96 | if (!values) return; |
85 | - return values; | |
97 | + const outputData = getStructList(); | |
98 | + const { outputParam, ...value } = values; | |
99 | + console.log(outputParam); | |
100 | + return { | |
101 | + ...value, | |
102 | + ...{ outputData }, | |
103 | + }; | |
86 | 104 | } |
87 | 105 | //清空数据 |
88 | 106 | const resetFormData = () => { | ... | ... |
... | ... | @@ -52,6 +52,7 @@ |
52 | 52 | import { useModal } from '/@/components/Modal'; |
53 | 53 | import InputParamItem from './components/InputParamItem.vue'; |
54 | 54 | import AddParamsModal from './components/AddParamsModal.vue'; |
55 | + import { buildUUID } from '/@/utils/uuid'; | |
55 | 56 | |
56 | 57 | const inputParamData: any = ref([]); |
57 | 58 | const outputParamData: any = ref([]); |
... | ... | @@ -74,16 +75,18 @@ |
74 | 75 | |
75 | 76 | const getData = (d, f) => { |
76 | 77 | if (f == 'input') { |
77 | - unref(inputParamData).push(d); | |
78 | 78 | if (d.id !== null) { |
79 | - const findIndex = unref(inputParamData).findIndex((f) => f.id !== d.id); | |
80 | - if (findIndex !== -1) unref(inputParamData).splice(findIndex, 1); | |
79 | + const findIndex = unref(inputParamData).findIndex((f) => f.id == d.id); | |
80 | + if (findIndex !== -1) unref(inputParamData).splice(findIndex, 1, d); | |
81 | + } else { | |
82 | + unref(inputParamData).push({ ...d, id: buildUUID() }); | |
81 | 83 | } |
82 | 84 | } else { |
83 | - unref(outputParamData).push(d); | |
84 | 85 | if (d.id !== null) { |
85 | - const findIndex = unref(outputParamData).findIndex((f) => f.id !== d.id); | |
86 | - if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1); | |
86 | + const findIndex = unref(outputParamData).findIndex((f) => f.id == d.id); | |
87 | + if (findIndex !== -1) unref(outputParamData).splice(findIndex, 1, d); | |
88 | + } else { | |
89 | + unref(outputParamData).push({ ...d, id: buildUUID() }); | |
87 | 90 | } |
88 | 91 | } |
89 | 92 | }; |
... | ... | @@ -126,13 +129,41 @@ |
126 | 129 | |
127 | 130 | //回显数据 |
128 | 131 | const setFormData = (v) => { |
129 | - setFieldsValue(v); | |
132 | + console.log(v[0]); | |
133 | + setFieldsValue(v[0]); | |
134 | + const { inputParams, outputParams } = v[0]; | |
135 | + if (outputParams !== undefined) { | |
136 | + outputParamData.value = [...new Array(outputParams.length).keys()]; | |
137 | + outputParamData.value = outputParams; | |
138 | + } | |
139 | + if (inputParams !== undefined) { | |
140 | + inputParamData.value = [...new Array(inputParams.length).keys()]; | |
141 | + inputParamData.value = inputParams; | |
142 | + } | |
143 | + }; | |
144 | + const getInputStructList = () => { | |
145 | + const val = unref(dynamicBindRef.inputParamItemRef)?.map((item: any) => item.getFormData()); | |
146 | + return val; | |
130 | 147 | }; |
148 | + const getOutputStructList = () => { | |
149 | + const val = unref(dynamicBindRef.outputParamItemRef)?.map((item: any) => item.getFormData()); | |
150 | + return val; | |
151 | + }; | |
152 | + | |
131 | 153 | //获取数据 |
132 | 154 | async function getFormData() { |
133 | 155 | const values = await validate(); |
134 | 156 | if (!values) return; |
135 | - return values; | |
157 | + const inputParams = getInputStructList(); | |
158 | + const outputParams = getOutputStructList(); | |
159 | + const { inputParam, outputParam, ...value } = values; | |
160 | + console.log(outputParam); | |
161 | + console.log(inputParam); | |
162 | + return { | |
163 | + ...value, | |
164 | + ...{ inputParams }, | |
165 | + ...{ outputParams }, | |
166 | + }; | |
136 | 167 | } |
137 | 168 | //清空数据 |
138 | 169 | const resetFormData = () => { | ... | ... |
... | ... | @@ -33,17 +33,18 @@ |
33 | 33 | </div> |
34 | 34 | </template> |
35 | 35 | <script lang="ts" setup> |
36 | - import { reactive, ref, unref } from 'vue'; | |
36 | + import { reactive, ref, unref, nextTick } from 'vue'; | |
37 | 37 | import { BasicForm, useForm } from '/@/components/Form'; |
38 | 38 | import { addParamsSchemas } from '../config'; |
39 | 39 | import { useModal } from '/@/components/Modal'; |
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'; | |
43 | + // import { useMessage } from '/@/hooks/web/useMessage'; | |
44 | + import { validateValueRangeAndStep } from '../../hook/useValidateParital'; | |
44 | 45 | |
45 | 46 | defineEmits(['register']); |
46 | - const { createMessage } = useMessage(); | |
47 | + // const { createMessage } = useMessage(); | |
47 | 48 | const outputParamData: any = ref([]); |
48 | 49 | const dynamicBindRef = { |
49 | 50 | outputParamItemRef: ref([]), |
... | ... | @@ -126,30 +127,21 @@ |
126 | 127 | const getFormData = async () => { |
127 | 128 | const values = await validate(); |
128 | 129 | if (!values) return; |
129 | - if (Number(minMaxObj.min) > Number(minMaxObj.max)) { | |
130 | - createMessage.error('最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'); | |
131 | - throw '最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'; | |
132 | - } | |
133 | - if (Number(values.step) > Number(minMaxObj.max) - Number(minMaxObj.min)) { | |
134 | - createMessage.error('步长不能大于取值范围的差值'); | |
135 | - throw '步长不能大于取值范围的差值'; | |
136 | - } | |
130 | + validateValueRangeAndStep(Number(minMaxObj.min), Number(values.step), Number(minMaxObj.max)); | |
137 | 131 | const childSpecsDTO = { |
138 | 132 | dataType: values.dataType, |
139 | - max: values.max, | |
140 | - min: values.min, | |
141 | - step: values.step, | |
142 | - unit: values.unit, | |
143 | - }; | |
144 | - const dataSpecs = { | |
145 | - dataType: values.dataType, | |
146 | - max: values.max, | |
147 | - min: values.min, | |
133 | + max: minMaxObj.max, | |
134 | + min: minMaxObj.min, | |
148 | 135 | step: values.step, |
149 | 136 | unit: values.unit, |
150 | 137 | }; |
138 | + const dataSpecs = childSpecsDTO; | |
139 | + const { step, unit, valueRange, ...value } = values; | |
140 | + console.log(valueRange); | |
141 | + console.log(step); | |
142 | + console.log(unit); | |
151 | 143 | return { |
152 | - ...values, | |
144 | + ...value, | |
153 | 145 | ...{ dataSpecs }, |
154 | 146 | ...{ childSpecsDTO }, |
155 | 147 | ...{ |
... | ... | @@ -160,6 +152,13 @@ |
160 | 152 | }; |
161 | 153 | const setFormData = (v) => { |
162 | 154 | setFieldsValue(v); |
155 | + setFieldsValue({ | |
156 | + ...v.dataSpecs, | |
157 | + }); | |
158 | + nextTick(() => { | |
159 | + minMaxObj.min = v?.dataSpecs?.min; | |
160 | + minMaxObj.max = v?.dataSpecs?.max; | |
161 | + }); | |
163 | 162 | }; |
164 | 163 | const resetFormData = () => { |
165 | 164 | resetFields(); | ... | ... |
... | ... | @@ -34,7 +34,7 @@ |
34 | 34 | isUpdate.value = data.isUpdate; |
35 | 35 | isFlag.value = data.flag; |
36 | 36 | excludeStruct.value = data.excludeStruct; |
37 | - AddParamFormRef.value?.setFormData(data.record); | |
37 | + !isUpdate.value ? AddParamFormRef.value?.setFormData(data.record) : ''; | |
38 | 38 | setEditData.getEditData = data.record; |
39 | 39 | setModalProps({ loading: false }); |
40 | 40 | if (excludeStruct.value) { | ... | ... |
... | ... | @@ -14,8 +14,6 @@ |
14 | 14 | </div> |
15 | 15 | </template> |
16 | 16 | <script lang="ts" setup> |
17 | - import { buildUUID } from '/@/utils/uuid'; | |
18 | - | |
19 | 17 | const emit = defineEmits(['delete', 'edit']); |
20 | 18 | const props = defineProps({ |
21 | 19 | index: { |
... | ... | @@ -38,7 +36,6 @@ |
38 | 36 | const handleEdit = (item, index) => { |
39 | 37 | const value = { |
40 | 38 | ...item, |
41 | - ...{ id: buildUUID() }, | |
42 | 39 | ...{ index }, |
43 | 40 | }; |
44 | 41 | emit('edit', value); |
... | ... | @@ -47,9 +44,6 @@ |
47 | 44 | const getFormData = () => { |
48 | 45 | return props.item; |
49 | 46 | }; |
50 | - // const setFormData = (v) => { | |
51 | - // console.log(v) | |
52 | - // } | |
53 | 47 | defineExpose({ |
54 | 48 | getFormData, |
55 | 49 | }); | ... | ... |
1 | +import { buildUUID } from '/@/utils/uuid'; | |
2 | + | |
1 | 3 | export const mockData = { |
2 | 4 | _ppk: {}, |
3 | - events: [], | |
5 | + events: [ | |
6 | + { | |
7 | + createTs: 1666344382193, | |
8 | + custom: true, | |
9 | + description: '33', | |
10 | + eventName: '事件1', | |
11 | + eventType: 'ALERT_EVENT_TYPE', | |
12 | + identifier: 'i1', | |
13 | + outputData: [ | |
14 | + { | |
15 | + id: buildUUID(), | |
16 | + custom: true, | |
17 | + dataSpecs: { | |
18 | + dataType: 'INT', | |
19 | + max: '20', | |
20 | + min: '10', | |
21 | + step: '3', | |
22 | + unit: 'W/㎡', | |
23 | + unitName: '太阳总辐射', | |
24 | + }, | |
25 | + dataType: 'INT', | |
26 | + direction: 'PARAM_OUTPUT', | |
27 | + identifier: 'i1', | |
28 | + name: '参数1', | |
29 | + paraOrder: 0, | |
30 | + }, | |
31 | + ], | |
32 | + productKey: 'hsrnXEfGFDv', | |
33 | + required: false, | |
34 | + }, | |
35 | + ], | |
4 | 36 | productKey: 'hsrnXEfGFDv', |
5 | 37 | properties: [ |
6 | 38 | { |
... | ... | @@ -9,6 +41,7 @@ export const mockData = { |
9 | 41 | customFlag: true, |
10 | 42 | dataSpecsList: [ |
11 | 43 | { |
44 | + id: buildUUID(), | |
12 | 45 | childDataType: 'INT', |
13 | 46 | childName: '测试参数1', |
14 | 47 | childSpecsDTO: { |
... | ... | @@ -34,6 +67,7 @@ export const mockData = { |
34 | 67 | name: '测试参数1', |
35 | 68 | }, |
36 | 69 | { |
70 | + id: buildUUID(), | |
37 | 71 | childDataType: 'INT', |
38 | 72 | childName: '测试参数2', |
39 | 73 | childSpecsDTO: { |
... | ... | @@ -69,5 +103,251 @@ export const mockData = { |
69 | 103 | std: false, |
70 | 104 | }, |
71 | 105 | ], |
72 | - services: [], | |
106 | + services: [ | |
107 | + { | |
108 | + callType: 'ASYNC', | |
109 | + createTs: 1666343456853, | |
110 | + custom: true, | |
111 | + description: '4343', | |
112 | + identifier: 'Iide1', | |
113 | + inputParams: [ | |
114 | + { | |
115 | + id: buildUUID(), | |
116 | + custom: true, | |
117 | + dataSpecs: { | |
118 | + dataType: 'INT', | |
119 | + max: '20', | |
120 | + min: '10', | |
121 | + step: '2', | |
122 | + unit: 'dS/m', | |
123 | + unitName: '土壤EC值', | |
124 | + }, | |
125 | + dataType: 'INT', | |
126 | + direction: 'PARAM_INPUT', | |
127 | + identifier: 'i1', | |
128 | + name: '参数名字1', | |
129 | + paraOrder: 0, | |
130 | + }, | |
131 | + ], | |
132 | + outputParams: [ | |
133 | + { | |
134 | + id: buildUUID(), | |
135 | + custom: true, | |
136 | + dataSpecs: { | |
137 | + dataType: 'INT', | |
138 | + max: '20', | |
139 | + min: '10', | |
140 | + step: '3', | |
141 | + unit: 'pH', | |
142 | + unitName: 'PH值', | |
143 | + }, | |
144 | + dataType: 'INT', | |
145 | + direction: 'PARAM_OUTPUT', | |
146 | + identifier: 'i2', | |
147 | + name: '输出参数2', | |
148 | + paraOrder: 0, | |
149 | + }, | |
150 | + ], | |
151 | + productKey: 'hsrnXEfGFDv', | |
152 | + required: false, | |
153 | + serviceName: '服务1', | |
154 | + }, | |
155 | + ], | |
73 | 156 | }; |
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 | +// } | ... | ... |
... | ... | @@ -157,7 +157,7 @@ export const attrSchemas: FormSchema[] = [ |
157 | 157 | colProps: { |
158 | 158 | span: 24, |
159 | 159 | }, |
160 | - defaultValue: 'readonly', | |
160 | + defaultValue: 'READ_ONLY', | |
161 | 161 | componentProps: { |
162 | 162 | placeholder: '请选择读写类型', |
163 | 163 | api: findDictItemByCode, |
... | ... | @@ -263,7 +263,7 @@ export const serviceSchemas: FormSchema[] = [ |
263 | 263 | |
264 | 264 | export const eventSchemas: FormSchema[] = [ |
265 | 265 | { |
266 | - field: 'configName', | |
266 | + field: 'eventName', | |
267 | 267 | label: '功能名称', |
268 | 268 | required: true, |
269 | 269 | component: 'Input', |
... | ... | @@ -276,7 +276,7 @@ export const eventSchemas: FormSchema[] = [ |
276 | 276 | }, |
277 | 277 | }, |
278 | 278 | { |
279 | - field: 'configName1', | |
279 | + field: 'identifier', | |
280 | 280 | label: '标识符', |
281 | 281 | required: true, |
282 | 282 | component: 'Input', |
... | ... | @@ -289,7 +289,7 @@ export const eventSchemas: FormSchema[] = [ |
289 | 289 | }, |
290 | 290 | }, |
291 | 291 | { |
292 | - field: 'brand', | |
292 | + field: 'eventType', | |
293 | 293 | component: 'ApiRadioGroup', |
294 | 294 | label: '事件类型', |
295 | 295 | required: true, | ... | ... |
1 | +/** | |
2 | + * 校验部分字段 | |
3 | + */ | |
4 | +import { useMessage } from '/@/hooks/web/useMessage'; | |
5 | +const { createMessage } = useMessage(); | |
6 | + | |
7 | +export const validateValueRangeAndStep = (min, step, max) => { | |
8 | + if (min > max) { | |
9 | + createMessage.error('最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'); | |
10 | + throw '最大值必须大于最小值,整数型不能有小数位,单精度有效位为7,双精度为16'; | |
11 | + } | |
12 | + if (step > max - min) { | |
13 | + createMessage.error('步长不能大于取值范围的差值'); | |
14 | + throw '步长不能大于取值范围的差值'; | |
15 | + } | |
16 | +}; | ... | ... |
... | ... | @@ -46,11 +46,11 @@ |
46 | 46 | const selectOptions: Ref<SelectTypes['options']> = ref([ |
47 | 47 | { |
48 | 48 | label: '电表转换脚本', |
49 | - value: 1, | |
49 | + value: '2dadsasd212asddafd1', | |
50 | 50 | }, |
51 | 51 | { |
52 | 52 | label: '水表转换脚本', |
53 | - value: 2, | |
53 | + value: 'dasdads776216dasdb1212sx', | |
54 | 54 | }, |
55 | 55 | ]); |
56 | 56 | onMounted(() => {}); |
... | ... | @@ -78,7 +78,14 @@ |
78 | 78 | }; |
79 | 79 | |
80 | 80 | const getFormData = () => { |
81 | - return selectScript; | |
81 | + const value = { | |
82 | + ...{ | |
83 | + scriptId: selectScript.script, | |
84 | + dataFormat: 'HEX', | |
85 | + type: 'TCP', | |
86 | + }, | |
87 | + }; | |
88 | + return value; | |
82 | 89 | }; |
83 | 90 | const resetFormData = () => { |
84 | 91 | selectScript.script = null; | ... | ... |
... | ... | @@ -16,6 +16,11 @@ |
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"> | |
20 | + <a-space direction="vertical"> | |
21 | + <a-radio-group v-model:value="scriptForm.reportType" :options="typeOptions" /> | |
22 | + </a-space> | |
23 | + </a-form-item> | |
19 | 24 | <a-form-item |
20 | 25 | label="脚本内容" |
21 | 26 | name="scriptContent" |
... | ... | @@ -55,7 +60,7 @@ |
55 | 60 | </div> |
56 | 61 | </template> |
57 | 62 | <script setup lang="ts"> |
58 | - import { ref, unref, reactive } from 'vue'; | |
63 | + import { ref, unref, reactive, onMounted, toRef } from 'vue'; | |
59 | 64 | import ace from 'ace-builds'; |
60 | 65 | import { Card, Button } from 'ant-design-vue'; |
61 | 66 | import 'ace-builds/src-noconflict/theme-chrome'; // 默认设置的主题 |
... | ... | @@ -64,6 +69,7 @@ |
64 | 69 | import { CopyOutlined } from '@ant-design/icons-vue'; |
65 | 70 | import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard'; |
66 | 71 | import { useMessage } from '/@/hooks/web/useMessage'; |
72 | + import { findDictItemByCode } from '/@/api/system/dict'; | |
67 | 73 | |
68 | 74 | defineEmits(['register']); |
69 | 75 | defineProps({ |
... | ... | @@ -75,11 +81,24 @@ |
75 | 81 | scriptContent: '', |
76 | 82 | inputParams: '', |
77 | 83 | outputParams: '', |
84 | + reportType: ['define 16'], | |
85 | + }); | |
86 | + const reportTypeOptions = reactive({ | |
87 | + typeOptions: [], | |
78 | 88 | }); |
89 | + const typeOptions = toRef(reportTypeOptions, 'typeOptions'); | |
79 | 90 | const { createMessage } = useMessage(); |
80 | 91 | const { clipboardRef, copiedRef } = useCopyToClipboard(); |
81 | 92 | const aceEditor = ref(); |
82 | 93 | const aceRef = ref(); |
94 | + onMounted(async () => { | |
95 | + const res: any = await findDictItemByCode({ | |
96 | + dictCode: 'report_data_type', | |
97 | + }); | |
98 | + reportTypeOptions.typeOptions = res.map((m) => { | |
99 | + return { label: m.itemText, value: m.itemValue }; | |
100 | + }); | |
101 | + }); | |
83 | 102 | // 初始化编辑器 |
84 | 103 | const initEditor = (jsScript?: string) => { |
85 | 104 | aceEditor.value = ace.edit(aceRef.value, { | ... | ... |
... | ... | @@ -2,6 +2,7 @@ import { BasicColumn, FormSchema } from '/@/components/Table'; |
2 | 2 | import moment from 'moment'; |
3 | 3 | import { h } from 'vue'; |
4 | 4 | import { Tag } from 'ant-design-vue'; |
5 | +import { findDictItemByCode } from '/@/api/system/dict'; | |
5 | 6 | |
6 | 7 | // 表格配置 |
7 | 8 | export const columns: BasicColumn[] = [ |
... | ... | @@ -83,6 +84,23 @@ export const formSchema: FormSchema[] = [ |
83 | 84 | colProps: { span: 24 }, |
84 | 85 | }, |
85 | 86 | { |
87 | + field: 'unit', | |
88 | + label: '上报数据类型', | |
89 | + component: 'ApiSelect', | |
90 | + colProps: { | |
91 | + span: 23, | |
92 | + }, | |
93 | + componentProps: { | |
94 | + placeholder: '请上报数据类型', | |
95 | + api: findDictItemByCode, | |
96 | + params: { | |
97 | + dictCode: 'report_data_type', | |
98 | + }, | |
99 | + labelField: 'itemText', | |
100 | + valueField: 'itemValue', | |
101 | + }, | |
102 | + }, | |
103 | + { | |
86 | 104 | field: 'remark', |
87 | 105 | label: '', |
88 | 106 | required: true, | ... | ... |