Commit edffa26c72df20492cbb2c98ca3ef988131b1048

Authored by fengtao
1 parent 43ba5387

feat:设备配置 收集物模型表单数据

... ... @@ -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,
... ...