Commit 0c2aa8b9815b6d9a5c072c350964d8caa5a504ea

Authored by fengtao
1 parent 627dbda5

移除设备配置第三第四步,新增设备配置第二步的MQTT和CoAP

... ... @@ -13,8 +13,6 @@
13 13 <a-steps :current="current">
14 14 <a-step title="设备配置" />
15 15 <a-step title="传输配置" />
16   - <a-step title="告警配置" />
17   - <a-step title="告警通知" />
18 16 </a-steps>
19 17 </div>
20 18 <div class="mt-5">
... ... @@ -25,29 +23,9 @@
25 23 <!-- 设备配置 -->
26 24 <!-- 传输配置 -->
27 25 <div v-show="current === 1">
28   - <DeviceProfileStep2
29   - ref="DeviceProfileStep2Ref"
30   - @prev="handleStepPrev"
31   - @next="handleStep2Next"
  26 + <DeviceProfileStep2 ref="DeviceProfileStep2Ref" @prev="handleStepPrev"
32 27 /></div>
33 28 <!-- 传输配置 -->
34   - <!-- 告警配置 -->
35   - <div v-show="current === 2">
36   - <DeviceProfileStep3
37   - ref="DeviceProfileStep3Ref"
38   - @prev="handleStepPrev"
39   - @next="handleStep3Next"
40   - @redo="handleRedo"
41   - :getAllStepThreeData="editData"
42   - :isAddOrEdit="isStatus"
43   - :isShowAddRule="isShowRule"
44   - /></div>
45   - <!-- 告警配置 -->
46   - <!-- 告警通知 -->
47   - <div v-show="current === 3">
48   - <DeviceProfileStep4 ref="DeviceProfileStep4Ref" @prev="handleStepPrev" />
49   - </div>
50   - <!-- 告警通知 -->
51 29 </div>
52 30 </BasicModal>
53 31 </div>
... ... @@ -65,8 +43,6 @@
65 43 import { BasicModal, useModalInner } from '/@/components/Modal';
66 44 import DeviceProfileStep1 from '/@/views/device/profiles/step/DeviceProfileStep1.vue';
67 45 import DeviceProfileStep2 from '/@/views/device/profiles/step/DeviceProfileStep2.vue';
68   - import DeviceProfileStep3 from '/@/views/device/profiles/step/DeviceProfileStep3.vue';
69   - import DeviceProfileStep4 from '/@/views/device/profiles/step/DeviceProfileStep4.vue';
70 46 import { Steps } from 'ant-design-vue';
71 47 import { deviceConfigAddOrEdit, deviceConfigGetDetail } from '/@/api/device/deviceConfigApi';
72 48 import { useMessage } from '/@/hooks/web/useMessage';
... ... @@ -77,56 +53,33 @@
77 53 BasicModal,
78 54 DeviceProfileStep1,
79 55 DeviceProfileStep2,
80   - DeviceProfileStep3,
81   - DeviceProfileStep4,
82 56 [Steps.name]: Steps,
83 57 [Steps.Step.name]: Steps.Step,
84 58 },
85 59 props: {
86 60 userData: { type: Object },
87 61 },
88   - emits: [
89   - 'success',
90   - 'register',
91   - 'handleStepPrev',
92   - 'handleStep3Next',
93   - 'handleRedo',
94   - 'handleStep2Next',
95   - ],
  62 + emits: ['success', 'register', 'handleStepPrev', 'handleStep3Next', 'handleRedo'],
96 63 setup(_, { emit }) {
97 64 const { proxy } = getCurrentInstance() as any;
98 65 const DeviceProfileStep1Ref = ref(null);
99 66 const DeviceProfileStep2Ref = ref(null);
100   - const DeviceProfileStep3Ref = ref(null);
101   - const DeviceProfileStep4Ref = ref(null);
102 67 const { createMessage } = useMessage();
103   - const postDeviceConfogData: any = ref({});
  68 + let postDeviceConfogData: any = reactive({});
104 69 let getStepOneData: any = reactive({});
105 70 let getStepTwoData: any = reactive({});
106 71 const editData: any = ref({});
107   - let getStepFourData: any = reactive({});
108   - const alarmProfileData = reactive({
109   - alarmProfile: {
110   - alarmContactId: '',
111   - messageMode: '',
112   - },
113   - });
114   - let isGetStepThreeData: any = reactive({
115   - profileData: {
116   - alarms: [],
117   - },
118   - });
119 72 const postEditId = ref('');
120 73 const current = ref(0);
121 74 const isUpdate = ref(0);
122   - const getAlarmContactId = ref('');
123   - const getMessageMode = ref('');
124   - const isStatus: any = ref(null);
125 75 const isShowOkBtnFalse = ref(true);
126   - const isShowRule = ref(true);
127   - const isEditAndChange = ref(true);
128   - const isEchoEditStatus = ref(false);
129 76 const isNextStatus = ref(false);
  77 + let transportTypeObj = reactive({
  78 + transportType: '',
  79 + });
  80 + const profileDataObj = reactive({
  81 + profileData: null,
  82 + });
130 83
131 84 const getTitle = computed(() =>
132 85 isUpdate.value == 1 ? '新增设备配置' : isUpdate.value == 2 ? '编辑设备配置' : '设备配置详情'
... ... @@ -136,16 +89,11 @@
136 89 isUpdate.value = data.isUpdate;
137 90 if (isUpdate.value == 1) {
138 91 handleCancel();
139   - isShowRule.value = true;
140 92 isShowOkBtnFalse.value = true;
141 93 current.value = 0;
142   - isStatus.value = !data.isUpdate;
143   - isEchoEditStatus.value = false;
144 94 } else if (isUpdate.value == 2) {
145 95 handleCancel();
146   - isShowRule.value = true;
147 96 isShowOkBtnFalse.value = true;
148   - isEchoEditStatus.value = true;
149 97 current.value = 0;
150 98 postEditId.value = data.record.id;
151 99 editData.value = await deviceConfigGetDetail(postEditId.value);
... ... @@ -158,7 +106,6 @@
158 106 });
159 107 } else if (isUpdate.value == 3) {
160 108 handleCancel();
161   - isShowRule.value = false;
162 109 isShowOkBtnFalse.value = false;
163 110 current.value = 0;
164 111 postEditId.value = data.record.id;
... ... @@ -181,188 +128,64 @@
181 128 if (isNextStatus.value) {
182 129 getStepOneData = {
183 130 ...v,
184   - ...{ icon: v1 },
  131 + ...{ image: v1 },
185 132 };
186 133 }
187 134 current.value++;
188 135 if (isUpdate.value == 2) {
189   - proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc({
190   - transportType: editData.value?.profileData.transportConfiguration.type,
191   - });
  136 + proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc(
  137 + editData.value?.profileData.transportConfiguration
  138 + );
192 139 } else if (isUpdate.value == 3) {
193   - proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc({
194   - transportType: editData.value?.profileData.transportConfiguration.type,
195   - });
  140 + proxy.$refs.DeviceProfileStep2Ref?.setStepTwoFieldsValueFunc(
  141 + editData.value?.profileData.transportConfiguration
  142 + );
196 143 }
197 144 }
198   - //第二步
199   - function handleStep2Next(v) {
200   - isNextStatus.value = true;
201   - if ((isNextStatus.value = true)) {
202   - getStepTwoData = {
203   - ...v,
  145 + const handleSubmit = async () => {
  146 + let getPic = null;
  147 + getStepTwoData = await proxy.$refs.DeviceProfileStep2Ref?.getStep2DataFunc();
  148 + profileDataObj.profileData = getStepTwoData;
  149 + transportTypeObj.transportType = getStepTwoData.transportConfiguration.type;
  150 + //没有点击下一步
  151 + if (!isNextStatus.value) {
  152 + const getStep1Obj = await proxy.$refs.DeviceProfileStep1Ref?.getStep1Func();
  153 + getPic = getStep1Obj.icon;
  154 + getStepOneData = {
  155 + ...getStep1Obj.key,
  156 + ...{ image: getPic },
204 157 };
205 158 }
206   - current.value++;
207   - if (isUpdate.value == 2) {
208   - try {
209   - isEchoEditStatus.value = true;
210   - proxy.$refs.DeviceProfileStep3Ref?.echoStep3DataFunc(
211   - editData.value.profileData.alarms,
212   - isEchoEditStatus.value
213   - );
214   - } catch {}
215   - } else if (isUpdate.value == 3) {
216   - try {
217   - isEchoEditStatus.value = true;
218   - proxy.$refs.DeviceProfileStep3Ref?.echoStep3DataFunc(
219   - editData.value.profileData.alarms,
220   - isEchoEditStatus.value
221   - );
222   - } catch {}
  159 + const id = isUpdate.value == 1 ? '' : postEditId.value;
  160 + postDeviceConfogData = {
  161 + ...getStepOneData,
  162 + ...profileDataObj,
  163 + ...transportTypeObj,
  164 + id,
  165 + };
  166 + if (isUpdate.value == 1) {
  167 + delete postDeviceConfogData.id;
223 168 }
224   - }
225   - //第三步
226   - async function handleStep3Next(_, v1) {
227   - try {
228   - isNextStatus.value = true;
229   - isEditAndChange.value = v1;
230   - current.value++;
231   - let step3NextVal = await proxy.$refs.DeviceProfileStep3Ref?.getStep3AllDataFunc(
232   - isUpdate.value
233   - );
234   - if (step3NextVal.length === 0) {
235   - isGetStepThreeData.profileData.alarms = null;
236   - } else {
237   - isGetStepThreeData.profileData.alarms = step3NextVal;
238   - }
239   - proxy.$refs.DeviceProfileStep4Ref?.step3LinkStep4DefalutClose();
240   - if (isUpdate.value == 2) {
241   - if (
242   - editData.value?.alarmProfile.messageMode !== null ||
243   - editData.value?.alarmProfile.alarmContactId !== null
244   - ) {
245   - proxy.$refs.DeviceProfileStep4Ref?.addStep4();
246   - } else {
247   - proxy.$refs.DeviceProfileStep4Ref?.closeStep4();
248   - }
249   - nextTick(() => {
250   - proxy.$refs.DeviceProfileStep4Ref?.setAlaramContactAndNoticeMethodFunc({
251   - alarmContactId: editData.value?.alarmProfile.alarmContactId.split(','),
252   - messageMode: editData.value?.alarmProfile.messageMode.split(','),
253   - });
254   - });
255   - } else if (isUpdate.value == 3) {
256   - if (
257   - editData.value?.alarmProfile.messageMode !== null ||
258   - editData.value?.alarmProfile.alarmContactId !== null
259   - ) {
260   - proxy.$refs.DeviceProfileStep4Ref?.addStep4();
261   - } else {
262   - proxy.$refs.DeviceProfileStep4Ref?.closeStep4();
263   - }
264   - nextTick(() => {
265   - proxy.$refs.DeviceProfileStep4Ref?.setAlaramContactAndNoticeMethodFunc({
266   - alarmContactId: editData.value?.alarmProfile.alarmContactId.split(','),
267   - messageMode: editData.value?.alarmProfile.messageMode.split(','),
268   - });
269   - });
270   - }
271   - } catch {}
272   - }
273   - const handleSubmit = async () => {
274   - let getPic = null;
275   - let getStep2Obj = proxy.$refs.DeviceProfileStep2Ref?.getStep2DataFunc();
276   - Object.assign(getStepTwoData, getStep2Obj);
277   - try {
278   - //没有点击下一步
279   - if (!isNextStatus.value) {
280   - const getStep1Obj = await proxy.$refs.DeviceProfileStep1Ref?.getStep1Func();
281   - getPic = getStep1Obj.icon;
282   - getStepOneData = {
283   - ...getStep1Obj.key,
284   - ...{ image: getPic },
285   - };
286   - Object.assign(getStepOneData, getStep1Obj.key);
287   - }
288   - let step3Val = await proxy.$refs.DeviceProfileStep3Ref?.getStep3AllDataFunc(
289   - isUpdate.value
290   - );
291   - if (step3Val.length === 0) {
292   - isGetStepThreeData.profileData.alarms = null;
293   - } else {
294   - isGetStepThreeData.profileData.alarms = step3Val;
295   - }
296   - try {
297   - getStepFourData = await proxy.$refs.DeviceProfileStep4Ref?.getAllFields();
298   - const getJoinAlarmContactIdData = getStepFourData.alarmContactId.join(',');
299   - const getJoinMessageModeData = getStepFourData.messageMode.join(',');
300   - getAlarmContactId.value = getJoinAlarmContactIdData;
301   - getMessageMode.value = getJoinMessageModeData;
302   - alarmProfileData.alarmProfile.alarmContactId = getAlarmContactId.value;
303   - alarmProfileData.alarmProfile.messageMode = getMessageMode.value;
304   - } catch {}
305   - if (isUpdate.value == 1) {
306   - Object.assign(
307   - postDeviceConfogData.value,
308   - getStepOneData,
309   - getStepTwoData,
310   - isGetStepThreeData,
311   - alarmProfileData.alarmProfile.alarmContactId == '' ? null : alarmProfileData
312   - );
313   - await deviceConfigAddOrEdit(postDeviceConfogData.value);
314   - createMessage.success('新增成功');
315   - closeModal();
316   - emit('success');
317   - } else if (isUpdate.value == 2) {
318   - const id = {
319   - id: postEditId,
320   - };
321   - Object.assign(
322   - postDeviceConfogData.value,
323   - getStepOneData,
324   - getStepTwoData,
325   - isGetStepThreeData,
326   - id,
327   - alarmProfileData.alarmProfile.alarmContactId == '' ? null : alarmProfileData
328   - );
329   - console.log('==========', postDeviceConfogData.value);
330   - // await deviceConfigAddOrEdit(postDeviceConfogData.value);
331   - // createMessage.success('编辑成功');
332   - // closeModal();
333   - // emit('success');
334   - }
335   - } catch {}
  169 + await deviceConfigAddOrEdit(postDeviceConfogData);
  170 + createMessage.success(isUpdate.value == 1 ? '新增' + '成功' : '编辑' + '成功');
  171 + closeModal();
  172 + emit('success');
  173 + isNextStatus.value = false;
336 174 };
337 175 const handleCancel = () => {
338   - try {
339   - nextTick(() => {
340   - proxy.$refs.DeviceProfileStep1Ref?.customResetStepOneFunc();
341   - proxy.$refs.DeviceProfileStep1Ref?.resetIconFunc();
342   - proxy.$refs.DeviceProfileStep2Ref?.customClearStepTwoValueFunc();
343   - proxy.$refs.DeviceProfileStep3Ref?.clearStep3DataFunc();
344   - proxy.$refs.DeviceProfileStep4Ref?.clearAlaramContactAndNoticeMethodFunc();
345   - getStepOneData = {};
346   - getStepTwoData = {};
347   - isGetStepThreeData.profileData.alarms.length = 0;
348   - alarmProfileData.alarmProfile.alarmContactId = '';
349   - alarmProfileData.alarmProfile.messageMode = '';
350   - });
351   - } catch {}
  176 + nextTick(() => {
  177 + proxy.$refs.DeviceProfileStep1Ref?.customResetStepOneFunc();
  178 + proxy.$refs.DeviceProfileStep2Ref?.customClearStepTwoValueFunc();
  179 + });
352 180 };
353 181 function handleRedo() {
354 182 current.value = 0;
355 183 }
356 184 return {
357   - isShowRule,
358 185 isShowOkBtnFalse,
359   - isStatus,
360 186 DeviceProfileStep2Ref,
361   - DeviceProfileStep3Ref,
362   - DeviceProfileStep4Ref,
363 187 DeviceProfileStep1Ref,
364 188 editData,
365   - handleStep3Next,
366 189 handleSubmit,
367 190 handleCancel,
368 191 register,
... ... @@ -371,7 +194,6 @@
371 194 current,
372 195 handleStepPrev,
373 196 handleStepNext1,
374   - handleStep2Next,
375 197 handleRedo,
376 198 };
377 199 },
... ...
... ... @@ -14,8 +14,8 @@
14 14 :before-upload="beforeUploadqrcodePic"
15 15 >
16 16 <img
17   - v-if="peresonalPic || echoPic"
18   - :src="peresonalPic != '' ? peresonalPic : echoPic"
  17 + v-if="peresonalPic"
  18 + :src="peresonalPic"
19 19 alt="avatar"
20 20 style="width: 6.25rem; height: 6.25rem"
21 21 />
... ... @@ -54,8 +54,8 @@
54 54 emits: ['next', 'resetFunc', 'register'],
55 55 setup(_, { emit }) {
56 56 const { createMessage } = useMessage();
57   - const echoPic = ref('');
58 57 const peresonalPic = ref('');
  58 +
59 59 const [register, { validate, setFieldsValue, resetFields }] = useForm({
60 60 labelWidth: 100,
61 61 schemas: step1Schemas,
... ... @@ -71,14 +71,7 @@
71 71 //回显数据
72 72 const setStepOneFieldsValueFunc = (v) => {
73 73 setFieldsValue(v);
74   - echoPic.value = v.image;
75   - };
76   - const resetIconFunc = () => {
77   - peresonalPic.value = '';
78   - echoPic.value = '';
79   - };
80   - const editIconFunc = (v) => {
81   - peresonalPic.value = v;
  74 + peresonalPic.value = v.image;
82 75 };
83 76 const customUploadqrcodePic = async ({ file }) => {
84 77 if (beforeUploadqrcodePic(file)) {
... ... @@ -90,7 +83,6 @@
90 83 }
91 84 }
92 85 };
93   -
94 86 const beforeUploadqrcodePic = (file: FileItem) => {
95 87 const isJpgOrPng =
96 88 file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg';
... ... @@ -103,15 +95,15 @@
103 95 }
104 96 return isJpgOrPng && isLt2M;
105 97 };
  98 +
106 99 async function customSubmitFunc() {
107   - try {
108   - const values = await validate();
109   - emit('next', values, peresonalPic.value);
110   - } catch (error) {}
  100 + const values = await validate();
  101 + emit('next', values, peresonalPic.value);
111 102 }
112 103 //清空数据
113 104 const customResetStepOneFunc = () => {
114 105 resetFields();
  106 + peresonalPic.value = '';
115 107 };
116 108 const getStep1Func = async () => {
117 109 const valueStep1 = await validate();
... ... @@ -122,8 +114,6 @@
122 114 };
123 115 };
124 116 return {
125   - editIconFunc,
126   - resetIconFunc,
127 117 register,
128 118 setStepOneFieldsValueFunc,
129 119 customResetStepOneFunc,
... ... @@ -132,7 +122,6 @@
132 122 beforeUploadqrcodePic,
133 123 customUploadqrcodePic,
134 124 getStep1Func,
135   - echoPic,
136 125 };
137 126 },
138 127 });
... ...
1 1 <template>
2 2 <div class="step2">
3   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="register" />
4   - <div
5   - style="
6   - display: flex;
7   - width: 11vw;
8   - height: 4vh;
9   - flex-direction: row;
10   - justify-content: space-between;
11   - margin-left: 8vw;
12   - margin-top: -4vh;
13   - "
14   - >
15   - <div style="display: flex; width: 4vw; height: 4vh">
16   - <Button type="default" style="border-radius: 2px" class="mt-5" @click="customResetFunc"
17   - >上一步</Button
  3 + <div class="step2-style">
  4 + <div style="margin-top: 0.8vh; margin-left: 2.8vw; overflow: scroll">
  5 + <BasicForm :showResetButton="false" :showSubmitButton="false" @register="register" />
  6 + <div
  7 + style="
  8 + display: flex;
  9 + width: 11vw;
  10 + height: 8vh;
  11 + flex-direction: row;
  12 + justify-content: space-between;
  13 + margin-left: 17vw;
  14 + margin-top: -4vh;
  15 + "
18 16 >
19   - </div>
20   - <div style="display: flex; width: 4vw; height: 4vh">
21   - <Button type="default" class="mt-5" @click="customSubmitFunc"> 下一步</Button>
  17 + <div style="display: flex; width: 4vw; height: 4vh; margin-top: -2.35vh">
  18 + <Button type="default" style="border-radius: 2px" class="mt-5" @click="customResetFunc"
  19 + >上一步</Button
  20 + >
  21 + </div>
  22 + </div>
22 23 </div>
23 24 </div>
24 25 </div>
25 26 </template>
26 27 <script lang="ts">
27   - import { defineComponent } from 'vue';
  28 + import { defineComponent, reactive } from 'vue';
28 29 import { BasicForm, useForm } from '/@/components/Form';
29 30 import { step2Schemas } from './data';
30 31 import { Alert, Divider, Descriptions } from 'ant-design-vue';
... ... @@ -41,7 +42,33 @@
41 42 },
42 43 emits: ['next', 'prev', 'register'],
43 44 setup(_, { emit }) {
44   - const [register, { getFieldsValue, validate, setFieldsValue, resetFields }] = useForm({
  45 + const transportData: any = reactive({
  46 + transportConfiguration: {
  47 + clientSettings: {
  48 + powerMode: null,
  49 + edrxCycle: null,
  50 + pagingTransmissionWindow: null,
  51 + psmActivityTimer: null,
  52 + },
  53 + coapDeviceTypeConfiguration: {
  54 + coapDeviceType: null,
  55 + },
  56 + deviceTelemetryTopic: null,
  57 + deviceAttributesTopic: null,
  58 + transportPayloadTypeConfiguration: {
  59 + transportPayloadType: null,
  60 + enableCompatibilityWithJsonPayloadFormat: false,
  61 + useJsonPayloadFormatForDefaultDownlinkTopics: false,
  62 + deviceAttributesProtoSchema: null,
  63 + deviceRpcRequestProtoSchema: null,
  64 + deviceRpcResponseProtoSchema: null,
  65 + deviceTelemetryProtoSchema: null,
  66 + },
  67 + type: null,
  68 + },
  69 + });
  70 +
  71 + const [register, { validate, setFieldsValue, resetFields }] = useForm({
45 72 labelWidth: 80,
46 73 schemas: step2Schemas,
47 74 actionColOptions: {
... ... @@ -49,7 +76,32 @@
49 76 },
50 77 });
51 78 const setStepTwoFieldsValueFunc = (v) => {
52   - setFieldsValue(v);
  79 + console.log(v);
  80 + setFieldsValue({
  81 + transportType: v?.type || v?.transportConfiguration.type,
  82 + transportPayloadType:
  83 + v?.transportPayloadTypeConfiguration?.transportPayloadType ||
  84 + v?.coapDeviceTypeConfiguration?.transportPayloadTypeConfiguration?.transportPayloadType,
  85 + deviceTelemetryTopic: v?.deviceTelemetryTopic,
  86 + deviceAttributesTopic: v?.deviceAttributesTopic,
  87 + enableCompatibilityWithJsonPayloadFormat:
  88 + v?.transportPayloadTypeConfiguration?.enableCompatibilityWithJsonPayloadFormat,
  89 + useJsonPayloadFormatForDefaultDownlinkTopics:
  90 + v?.transportPayloadTypeConfiguration?.useJsonPayloadFormatForDefaultDownlinkTopics,
  91 + deviceAttributesProtoSchema:
  92 + v?.transportPayloadTypeConfiguration?.deviceAttributesProtoSchema,
  93 + deviceRpcRequestProtoSchema:
  94 + v?.transportPayloadTypeConfiguration?.deviceRpcRequestProtoSchema,
  95 + deviceRpcResponseProtoSchema:
  96 + v?.transportPayloadTypeConfiguration?.deviceRpcResponseProtoSchema,
  97 + deviceTelemetryProtoSchema:
  98 + v?.transportPayloadTypeConfiguration?.deviceTelemetryProtoSchema,
  99 + powerMode: v?.clientSettings?.powerMode,
  100 + edrxCycle: v?.clientSettings?.edrxCycle,
  101 + pagingTransmissionWindow: v?.clientSettings?.pagingTransmissionWindow,
  102 + psmActivityTimer: v?.clientSettings?.psmActivityTimer,
  103 + coapDeviceType: v?.coapDeviceTypeConfiguration?.coapDeviceType,
  104 + });
53 105 };
54 106 const customClearStepTwoValueFunc = () => {
55 107 resetFields();
... ... @@ -57,23 +109,39 @@
57 109 async function customResetFunc() {
58 110 emit('prev');
59 111 }
60   - async function customSubmitFunc() {
61   - try {
62   - const values = await validate();
63   - emit('next', values);
64   - } catch (error) {
65   - console.log(error);
66   - } finally {
67   - }
68   - }
69   -
70   - const getStep2DataFunc = () => {
71   - const val = getFieldsValue();
72   - return val;
  112 + const getStep2DataFunc = async () => {
  113 + const val = await validate();
  114 + if (!val) return;
  115 + transportData.transportConfiguration.deviceTelemetryTopic = val.deviceTelemetryTopic;
  116 + transportData.transportConfiguration.deviceAttributesTopic = val.deviceAttributesTopic;
  117 + transportData.transportConfiguration.transportPayloadTypeConfiguration.transportPayloadType =
  118 + val.transportPayloadType;
  119 + transportData.transportConfiguration.transportPayloadTypeConfiguration.enableCompatibilityWithJsonPayloadFormat =
  120 + val.enableCompatibilityWithJsonPayloadFormat;
  121 + transportData.transportConfiguration.transportPayloadTypeConfiguration.useJsonPayloadFormatForDefaultDownlinkTopics =
  122 + val.useJsonPayloadFormatForDefaultDownlinkTopics;
  123 + transportData.transportConfiguration.transportPayloadTypeConfiguration.enableCompatibilityWithJsonPayloadFormat =
  124 + val.enableCompatibilityWithJsonPayloadFormat;
  125 + transportData.transportConfiguration.transportPayloadTypeConfiguration.deviceAttributesProtoSchema =
  126 + val.deviceAttributesProtoSchema;
  127 + transportData.transportConfiguration.transportPayloadTypeConfiguration.deviceRpcRequestProtoSchema =
  128 + val.deviceRpcRequestProtoSchema;
  129 + transportData.transportConfiguration.transportPayloadTypeConfiguration.deviceRpcResponseProtoSchema =
  130 + val.deviceRpcResponseProtoSchema;
  131 + transportData.transportConfiguration.transportPayloadTypeConfiguration.deviceTelemetryProtoSchema =
  132 + val.deviceTelemetryProtoSchema;
  133 + transportData.transportConfiguration.type = val.transportType;
  134 + transportData.transportConfiguration.clientSettings.powerMode = val.powerMode;
  135 + transportData.transportConfiguration.clientSettings.edrxCycle = val.edrxCycle;
  136 + transportData.transportConfiguration.clientSettings.psmActivityTimer = val.psmActivityTimer;
  137 + transportData.transportConfiguration.clientSettings.pagingTransmissionWindow =
  138 + val.pagingTransmissionWindow;
  139 + transportData.transportConfiguration.coapDeviceTypeConfiguration.coapDeviceType =
  140 + val.coapDeviceType;
  141 + return transportData;
73 142 };
74 143 return {
75 144 customResetFunc,
76   - customSubmitFunc,
77 145 register,
78 146 setStepTwoFieldsValueFunc,
79 147 customClearStepTwoValueFunc,
... ... @@ -84,7 +152,16 @@
84 152 </script>
85 153 <style lang="less" scoped>
86 154 .step2 {
87   - width: 500px;
88   - margin: 0 auto;
  155 + width: 100%;
  156 + .step2-style {
  157 + width: 43vw;
  158 + // height: 50vh;
  159 + border: 1px solid gray;
  160 + margin: 0vh 0.6vw;
  161 + border-radius: 4px;
  162 + }
  163 + }
  164 + ::-webkit-scrollbar {
  165 + display: none;
89 166 }
90 167 </style>
... ...
1   -<template>
2   - <div>
3   - <div>
4   - <div
5   - v-if="!getIsEchoEditStatus ? alarmsData.length == 0 : echoEditData.length == 0"
6   - style="text-align: center"
7   - >
8   - <p style="font-size: large">未配置报警规则</p>
9   - </div>
10   - <div>
11   - <template
12   - v-for="(item, index) in !getIsEchoEditStatus ? alarmsData : echoEditData"
13   - :key="index"
14   - >
15   - <div class="cursor-pointer" style="position: relative; top: 3.5vh; right: -41.6vw">
16   - <img
17   - style="cursor: pointer"
18   - @click="removeAlarmRule(item, index)"
19   - alt="移除"
20   - src="../../../../assets/images/delete.png"
21   - />
22   - </div>
23   - <div
24   - style="
25   - margin-left: 0.21vw;
26   - border-radius: 4px;
27   - width: 44vw;
28   - height: 47vh;
29   - border: 1px solid grey;
30   - overflow-y: scroll;
31   - "
32   - >
33   - <CommonCpns
34   - :ref="ruleRef.createRuleRefs"
35   - :step3FatherEmitCpnData="!getIsEchoEditStatus ? 1 : item"
36   - :step3FatherEmitCpnStatus="
37   - !getIsEchoEditStatus ? !getIsEchoEditStatus : getIsEchoEditStatus
38   - "
39   - />
40   - </div>
41   - </template>
42   - </div>
43   - </div>
44   - <!-- 按钮 -->
45   - <div style="margin-left: 14.5vw; margin-top: 2vh">
46   - <a-button class="mr-5" @click="prevStepFunc">上一步</a-button>
47   - <a-button @click="nextStepFunc">下一步</a-button>
48   - <a-button
49   - v-if="btnClose"
50   - style="margin-left: 20px"
51   - type="primary"
52   - @click="clickAddAlaramRuleFunc"
53   - >添加报警规则</a-button
54   - >
55   - </div>
56   - <!-- 按钮 -->
57   - </div>
58   -</template>
59   -
60   -<script lang="ts">
61   - import { defineComponent, ref, getCurrentInstance, reactive, watch, nextTick } from 'vue';
62   - import CommonCpns from './common/index.vue';
63   - import { deteleObject } from '/@/hooks/web/useFilter';
64   -
65   - export default defineComponent({
66   - components: {
67   - CommonCpns,
68   - },
69   - props: ['isShowAddRule'],
70   - emits: ['next', 'prev'],
71   - setup(props, { emit }) {
72   - const { proxy } = getCurrentInstance() as any;
73   - const commonCpnsRef = ref(null);
74   - const alarmsData: any = ref([]);
75   - const echoEditData: any = ref([]);
76   - const getIsEchoEditStatus = ref(false);
77   - const btnClose = ref(true);
78   - let addObj = reactive({});
79   - const ruleRef = {
80   - createRuleRefs: ref([]),
81   - };
82   - const prevStepFunc = () => {
83   - emit('prev');
84   - };
85   - const nextStepFunc = async () => {
86   - emit('next', {
87   - alarms: alarmsData.value,
88   - });
89   - };
90   - const getStep3AllDataFunc = async (e) => {
91   - let temp = [];
92   - if (e == 1) {
93   - temp = alarmsData.value;
94   - } else {
95   - temp = echoEditData.value;
96   - }
97   - for (let i = 0; i < temp.length; i++) {
98   - for (const item of ruleRef.createRuleRefs.value) {
99   - addObj = await item.getStep3AllDataFunc();
100   - alarmsData.value.push(addObj);
101   - }
102   - }
103   - /**
104   - * 过滤null和重复对象和1
105   - */
106   - alarmsData.value = alarmsData.value.filter((i) => i);
107   - alarmsData.value = deteleObject(alarmsData.value);
108   - alarmsData.value = alarmsData.value.filter((f) => f !== 1);
109   - return alarmsData.value;
110   - };
111   - const clickAddAlaramRuleFunc = async () => {
112   - alarmsData.value.push(1);
113   - nextTick(() => {
114   - ruleRef.createRuleRefs.value[alarmsData.value.length - 1].updateCpnSchemaSelectEnableFunc(
115   - alarmsData.value.length - 1
116   - );
117   - });
118   -
119   - // try {
120   - // // proxy.$refs['commonCpnsRef' + 0].updateCpnSchemaSelectEnableFunc();
121   - // // proxy.$refs['commonCpnsRef' + 1].updateCpnSchemaSelectEnableFunc();
122   - // if (getIsEchoEditStatus.value) {
123   - // echoEditData.value.push(1);
124   - // }
125   - // } catch {}
126   - };
127   - const removeAlarmRule = (e, i) => {
128   - const key = alarmsData.value.indexOf(e);
129   - console.log(i);
130   - alarmsData.value.splice(key, 1);
131   - if (getIsEchoEditStatus.value) {
132   - const key1 = echoEditData.value.indexOf(e);
133   - console.log(i);
134   - echoEditData.value.splice(key1, 1);
135   - }
136   - };
137   - /**
138   - * 清空数据
139   - */
140   - const clearStep3DataFunc = () => {
141   - alarmsData.value.length = 0;
142   - echoEditData.value.length = 0;
143   - proxy.$refs.commonCpnsRef?.clearStep3CpnDataFunc();
144   - getIsEchoEditStatus.value = false;
145   - };
146   - /**
147   - * 回显数据
148   - */
149   - const echoStep3DataFunc = (e, s) => {
150   - getIsEchoEditStatus.value = s;
151   - if (getIsEchoEditStatus.value === true) {
152   - echoEditData.value = e;
153   - if (echoEditData.value == null) {
154   - echoEditData.value = [];
155   - }
156   - }
157   - };
158   - watch(
159   - () => props.isShowAddRule,
160   - (v) => {
161   - btnClose.value = v;
162   - }
163   - );
164   - return {
165   - clickAddAlaramRuleFunc,
166   - prevStepFunc,
167   - nextStepFunc,
168   - alarmsData,
169   - removeAlarmRule,
170   - commonCpnsRef,
171   - clearStep3DataFunc,
172   - echoStep3DataFunc,
173   - echoEditData,
174   - getIsEchoEditStatus,
175   - getStep3AllDataFunc,
176   - btnClose,
177   - ruleRef,
178   - };
179   - },
180   - });
181   -</script>
182   -
183   -<style lang="less" scoped>
184   - ::-webkit-scrollbar {
185   - display: none;
186   - }
187   -</style>
1   -<template>
2   - <div class="step-4">
3   - <div v-if="isShow">
4   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="register" />
5   - </div>
6   - <div
7   - style="
8   - display: flex;
9   - width: 17vw;
10   - height: 4vh;
11   - flex-direction: row;
12   - align-items: center;
13   - justify-content: space-between;
14   - margin-left: 14vw;
15   - margin-top: -1.2vh;
16   - "
17   - >
18   - <div style="width: 5vw; height: 4vh; margin-top: -3.6vh">
19   - <Button type="primary" style="border-radius: 2px" class="mt-5" @click="prevStep4"
20   - >上一步</Button
21   - >
22   - </div>
23   - <div style="width: 5vw; height: 4vh; margin-top: -3.6vh">
24   - <Button type="default" style="border-radius: 2px" class="mt-5" @click="addStep4">
25   - 打开告警通知</Button
26   - >
27   - </div>
28   - <div style="width: 5vw; height: 4vh; margin-top: -3.6vh; margin-left: 2.2vw">
29   - <Button type="default" style="border-radius: 2px" class="mt-5" @click="closeStep4">
30   - 关闭</Button
31   - >
32   - </div>
33   - </div>
34   - </div>
35   -</template>
36   -<script lang="ts">
37   - import { defineComponent, ref, nextTick } from 'vue';
38   - import { BasicForm, useForm } from '/@/components/Form/index';
39   - import { alertContactsSchemas } from './data';
40   - import { Button } from '/@/components/Button';
41   -
42   - export default defineComponent({
43   - components: {
44   - BasicForm,
45   - Button,
46   - },
47   - emits: ['prev', 'register'],
48   - setup(_, { emit }) {
49   - const getValueData: any = ref({});
50   - const isShow = ref(false);
51   - const [register, { setProps, validate, setFieldsValue, resetFields }] = useForm({
52   - schemas: alertContactsSchemas,
53   - actionColOptions: {
54   - span: 24,
55   - },
56   - });
57   - const setAlaramContactAndNoticeMethodFunc = (v) => {
58   - setFieldsValue(v);
59   - };
60   - const clearAlaramContactAndNoticeMethodFunc = () => {
61   - try {
62   - nextTick(() => {
63   - // resetFields();
64   - });
65   - } catch {}
66   - };
67   - const getAllFields = async (getV) => {
68   - const values = await validate();
69   - getValueData.value = values;
70   - getV = getValueData.value;
71   - return getV;
72   - };
73   - const prevStep4 = () => {
74   - emit('prev');
75   - };
76   - const addStep4 = () => {
77   - isShow.value = true;
78   - };
79   - const closeStep4 = () => {
80   - isShow.value = false;
81   - };
82   - const step3LinkStep4DefalutClose = () => {
83   - isShow.value = false;
84   - };
85   - return {
86   - clearAlaramContactAndNoticeMethodFunc,
87   - setAlaramContactAndNoticeMethodFunc,
88   - getAllFields,
89   - register,
90   - setProps,
91   - addStep4,
92   - prevStep4,
93   - isShow,
94   - closeStep4,
95   - step3LinkStep4DefalutClose,
96   - };
97   - },
98   - });
99   -</script>
100   -<style lang="less" scoped>
101   - .step-4 {
102   - // :deep .ant-btn {
103   - // position: relative;
104   - // right: 375px;
105   - // top: 18px;
106   - // }
107   - }
108   -</style>
1   -export const formatAlarmRuleConditionsData = (item) => {
2   - console.log('==', item);
3   - let item1 = [];
4   - item1 = item.map((f) => {
5   - return f?.predicate.operation == 'EQUAL'
6   - ? f?.key.key + '等于' + f?.predicate.value.defaultValue
7   - : f?.predicate.operation == 'STARTS_WITH'
8   - ? f?.key.key + '开始于' + f?.predicate.value.defaultValue
9   - : f?.predicate.operation == 'ENDS_WITH'
10   - ? f?.key.key + '结束于' + f?.predicate.value.defaultValue
11   - : f?.predicate.operation == 'NOT_CONTAINS'
12   - ? f?.key.key + '不包含' + f?.predicate.value.defaultValue
13   - : f?.predicate.operation == 'NOT_EQUAL'
14   - ? f?.key.key + '不等于' + f?.predicate.value.defaultValue
15   - : f?.predicate.operation == 'GREATER'
16   - ? f?.key.key + '大于' + f?.predicate.value.defaultValue
17   - : f?.predicate.operation == 'LESS'
18   - ? f?.key.key + '小于' + f?.predicate.value.defaultValue
19   - : f?.predicate.operation == 'GREATER_OR_EQUAL'
20   - ? f?.key.key + '大于或等于' + f?.predicate.value.defaultValue
21   - : f?.key.key + '小于或等于' + f?.predicate.value.defaultValue;
22   - });
23   - return item1;
24   -};
25   -
26   -export const formatEnableRuleData = (f) => {
27   - return f?.type == 'ANY_TIME'
28   - ? '始终启用'
29   - : f?.type == 'SPECIFIC_TIME'
30   - ? '定时启用'
31   - : '自定义启用';
32   -};
33   -
34   -export const formatAlarmRuleConditionsData1 = (v) => {
35   - let openEditRuleConditObj: any = {};
36   - for (const i in v) {
37   - if (i == 'CRITICAL') {
38   - openEditRuleConditObj = v[i];
39   - } else if (i == 'MAJOR') {
40   - openEditRuleConditObj = v[i];
41   - } else if (i == 'MINOR') {
42   - openEditRuleConditObj = v[i];
43   - } else if (i == 'WARNING') {
44   - openEditRuleConditObj = v[i];
45   - } else if (i == 'INDETERMINATE') {
46   - openEditRuleConditObj = v[i];
47   - }
48   - }
49   - return openEditRuleConditObj;
50   -};
1   -<template>
2   - <div style="margin-left: 0.6vw">
3   - <!-- 报警类型和传递报警-->
4   - <div>
5   - <div class="alert-type" style="margin-left: -2.1vw; margin-top: 1vh">
6   - <BasicForm @register="registerForm" />
7   - </div>
8   - <div style="margin-top: -15px">
9   - <div style="margin-left: -8px; margin-top: -10px">
10   - <BasicForm
11   - @register="registerFormHighSetting"
12   - style="margin-left: 12px; margin-top: -10px"
13   - >
14   - <template #checkBox="{ model, field }">
15   - <Checkbox v-model:checked="model[field]">传递报警</Checkbox>
16   - </template>
17   - </BasicForm>
18   - </div>
19   - </div>
20   - </div>
21   - <!-- 报警类型和传递报警 -->
22   - <!-- 创建报警规则 -->
23   - <div style="margin-top: -6vh">
24   - <p style="margin-left: 10px; font-size: medium">创建报警规则</p>
25   - <p
26   - v-if="createAlarmRuleData.length === 0 && createEditAlarmRuleData.length == 0"
27   - style="text-align: center; font-size: large"
28   - >请添加创建报警规则</p
29   - >
30   - <div v-if="createAlarmRuleData.length > 0 || createEditAlarmRuleData.length > 0">
31   - <template
32   - v-for="(item, index) in !isStep3FatherAddOrEditStatus
33   - ? createAlarmRuleData
34   - : createEditAlarmRuleData"
35   - :key="index"
36   - >
37   - <div class="cursor-pointer" style="position: relative; top: 15.5vh; right: -40.8vw">
38   - <img
39   - style="cursor: pointer"
40   - @click="removeAddCreateRuleFunc(item, index)"
41   - alt="移除"
42   - src="../../../../../../src/assets/images/close.png"
43   - />
44   - </div>
45   - <div style="width: 38vw; height: 30vh; border: 1px solid grey; border-radius: 4px">
46   - <div style="margin-top: 1vh">
47   - <AlarmSeverityCpn
48   - :ref="conditionRefs.AlarmSeverityRef"
49   - :AlarmSeverityCpnData="!isStep3FatherAddOrEditStatus ? 1 : item"
50   - />
51   - <DetailTemplateCpn
52   - :ref="conditionRefs.DetailTemplateRef"
53   - :DetailTemplateCpnData="!isStep3FatherAddOrEditStatus ? 1 : item"
54   - />
55   - <AlarmRuleConditionsCpn
56   - :ref="conditionRefs.AlarmRuleConditionsRef"
57   - @getAllFieldsRule="getAlarmRuleConditionsValFunc"
58   - />
59   - <EnableRuleCpn
60   - :ref="conditionRefs.EnableRuleRef"
61   - @register="registerEnableRuleModal"
62   - @getAllFieldsEnab="getEnableRuleFunc"
63   - />
64   - <div style="margin-left: 0.5vw">
65   - <span style="color: red">请添加报警规则条件:</span>
66   - <a-button
67   - style="border-radius: 10px"
68   - class="mt-5"
69   - @click="clickAddAlarmRuleConditionsFunc(item, index)"
70   - >
71   - <PlusCircleOutlined />
72   - </a-button>
73   - <div>
74   - <div v-for="(item1, index1) in formatAlarmRuleConditions" :key="index1">
75   - <p v-if="item1.key === index && item1.data.length > 0">
76   - 报警规则条件:{{ formatAlarmRuleConditionsData(item1.data) }}
77   - </p>
78   - </div>
79   - </div>
80   - </div>
81   - <div style="margin-left: 0.5vw">
82   - <span style="color: red">启用规则:</span>
83   - <a-button style="border-radius: 10px" class="mt-5" @click="clickAddEnableRuleFunc">
84   - <PlusCircleOutlined />
85   - </a-button>
86   - <div>
87   - <p v-if="formatEnableRule.length == 0 && !isStep3FatherAddOrEditStatus"
88   - >启用规则:始终启用</p
89   - >
90   - <div>
91   - <template
92   - v-for="(item2, index2) in !isStep3FatherAddOrEditStatus
93   - ? formatEnableRule
94   - : []"
95   - :key="index2"
96   - >
97   - <p v-if="index2 == index"> 启用规则:{{ formatEnableRuleFunc(item2) }} </p>
98   - </template>
99   - </div>
100   - <div v-if="isStep3FatherAddOrEditStatus && formatEditEnableData.length == 0">
101   - <p> 启用规则:{{ formatEnableRuleFuncData(item) }} </p>
102   - </div>
103   - <template
104   - v-for="(item111, index111) in !isStep3FatherAddOrEditStatus
105   - ? []
106   - : formatEditEnableData"
107   - :key="index111"
108   - >
109   - <div
110   - v-if="
111   - index111 == index &&
112   - isStep3FatherAddOrEditStatus &&
113   - formatEditEnableData.length > 0
114   - "
115   - >
116   - <p> 启用规则:{{ formatEditEnableRuleFunc(item111) }} </p>
117   - </div>
118   - </template>
119   - </div>
120   - </div>
121   - <div></div>
122   - <div></div>
123   - </div>
124   - </div>
125   - </template>
126   - </div>
127   - <div>
128   - <a-button style="border-radius: 10px" class="mt-5" @click="clickAddCreateRuleFunc">
129   - <PlusCircleOutlined />
130   - 添加创建条件
131   - </a-button>
132   - </div>
133   - <!-- 清除报警规则 -->
134   - <div style="margin-top: 2vh">
135   - <p style="margin-left: 10px; font-size: medium">清除报警规则</p>
136   - <div
137   - v-if="isClearStatus"
138   - class="cursor-pointer"
139   - style="position: relative; top: 15.5vh; right: -40.8vw"
140   - >
141   - <img
142   - style="cursor: pointer"
143   - @click="removeAddClearRuleFunc"
144   - alt="移除"
145   - src="../../../../../../src/assets/images/close.png"
146   - />
147   - </div>
148   - <div
149   - v-if="isClearStatus"
150   - style="width: 38vw; height: 30vh; border: 1px solid grey; border-radius: 4px"
151   - >
152   - <div style="margin-top: 2vh">
153   - <div style="height: 3vh">
154   - <BasicForm @register="registerFormChangeClearDetail" />
155   - </div>
156   - <AlarmRuleConditionsCpn
157   - ref="AlarmClearRuleConditionsRef"
158   - @register="registerClearAlarmRuleConditionsModal"
159   - @getAllFieldsRule="getClearAlarmRuleConditionsValFunc"
160   - />
161   - <EnableRuleCpn
162   - ref="EnableClearRuleRef"
163   - @register="registerClearEnableRuleModal"
164   - @getAllFieldsEnab="getClearEnableRuleFunc"
165   - />
166   - <div style="margin-left: 0.5vw">
167   - <span style="color: red">请添加报警规则条件:</span>
168   - <a-button
169   - style="border-radius: 10px"
170   - class="mt-5"
171   - @click="clickClearAlarmRuleConditionsFunc"
172   - >
173   - <PlusCircleOutlined />
174   - </a-button>
175   - <div>
176   - <div>
177   - <template v-for="(item3, index3) in formatClearAlarmRuleConditions" :key="index3">
178   - <span style="display: none">{{ index3 }}</span>
179   - <p> 报警规则条件:{{ formatClearAlarmRuleConditionsFunc(item3) }} </p>
180   - </template>
181   - </div>
182   - </div>
183   - </div>
184   - <div style="margin-left: 0.5vw">
185   - <span style="color: red">启用规则:</span>
186   - <a-button style="border-radius: 10px" class="mt-5" @click="clickClearEnableRuleFunc">
187   - <PlusCircleOutlined />
188   - </a-button>
189   - <div>
190   - <p v-if="formatEnableRule.length == 0 && !isStep3FatherAddOrEditStatus"
191   - >启用规则:始终启用</p
192   - >
193   - <div>
194   - <template v-for="(item4, index4) in formatClearEnableRule" :key="index4">
195   - <span style="display: none">{{ index4 }}</span>
196   - <p> 启用规则:{{ formatClearEnableRuleFunc(item4) }} </p>
197   - </template>
198   - </div>
199   - <div>
200   - <template
201   - v-for="(item44, index44) in isStep3FatherAddOrEditStatus
202   - ? formatEditClearEnableRule
203   - : []"
204   - :key="index44"
205   - >
206   - <span style="display: none">{{ index44 }}</span>
207   - <p> 启用规则:{{ formatEnableRuleData(item44) }} </p>
208   - </template>
209   - </div>
210   - </div>
211   - </div>
212   - <div></div>
213   - <div></div>
214   - </div>
215   - </div>
216   - <div style="position: relative; top: -1.2vh">
217   - <a-button style="border-radius: 10px" class="mt-5" @click="clickAddClearRuleFunc">
218   - <PlusCircleOutlined />
219   - 添加清除条件
220   - </a-button>
221   - </div>
222   - </div>
223   - <!-- 清除报警规则 -->
224   - </div>
225   - <!-- 创建报警规则 -->
226   - </div>
227   -</template>
228   -<script lang="ts">
229   - import { defineComponent, ref, nextTick, getCurrentInstance, reactive, watch } from 'vue';
230   - import { BasicForm, useForm } from '/@/components/Form';
231   - import { step3Schemas, step3HighSetting, formChangeDetailSchema } from '../data';
232   - import { Checkbox } from 'ant-design-vue';
233   - import { PlusCircleOutlined } from '@ant-design/icons-vue';
234   - import AlarmSeverityCpn from '../cpns/alarmseverity/index.vue';
235   - import DetailTemplateCpn from '../cpns/detailtemplate/index.vue';
236   - import AlarmRuleConditionsCpn from '../cpns/alarmruleconditions/index.vue';
237   - import EnableRuleCpn from '../cpns/enablerule/index.vue';
238   - import { useModal } from '/@/components/Modal';
239   - import { generateUUID } from '/@/hooks/web/useGenerateUUID';
240   -
241   - import {
242   - formatAlarmRuleConditionsData,
243   - formatEnableRuleData,
244   - formatAlarmRuleConditionsData1,
245   - } from '../common/format-data/index';
246   -
247   - export default defineComponent({
248   - components: {
249   - BasicForm,
250   - Checkbox,
251   - PlusCircleOutlined,
252   - AlarmSeverityCpn,
253   - DetailTemplateCpn,
254   - AlarmRuleConditionsCpn,
255   - EnableRuleCpn,
256   - },
257   - props: ['step3FatherEmitCpnData', 'step3FatherEmitCpnStatus'],
258   - setup(props) {
259   - const getConditionData = ref([]);
260   - const getConditionData1 = ref([{ key: 0, data: {} }]);
261   - const { proxy } = getCurrentInstance() as any;
262   - const createAlarmRuleData: any = ref([1]);
263   - const createEditAlarmRuleData: any = ref([]);
264   - const AlarmRuleConditionsRef = ref(null);
265   - const EnableRuleRef = ref(null);
266   - const AlarmClearRuleConditionsRef = ref(null);
267   - const EnableClearRuleRef = ref(null);
268   - const formatAlarmRuleConditions = ref([]);
269   - const formatClearAlarmRuleConditions: any = ref([]);
270   - const formatEditClearAlarmRuleConditions: any = ref([]);
271   - const formatEnableRule: any = ref([]);
272   - const formatClearEnableRule: any = ref([]);
273   - const formatEditClearEnableRule: any = ref([]);
274   - const level = ref(['CRITICAL', 'MAJOR', 'MINOR', 'WARNING', 'INDETERMINATE']);
275   - const conditionRefs = {
276   - AlarmRuleConditionsRef: ref([]),
277   - AlarmSeverityRef: ref([]),
278   - DetailTemplateRef: ref([]),
279   - EnableRuleRef: ref([]),
280   - };
281   - let alaramsObj: any = reactive({
282   - alarmType: null,
283   - propagate: null,
284   - propagateRelationTypes: null,
285   - clearRule: {},
286   - createRules: {},
287   - id: '',
288   - });
289   - const AlarmSeverityRef = ref(null);
290   - const DetailTemplateRef = ref(null);
291   - const tempDetailTemplateData: any = ref([]);
292   - const isClearStatus = ref(false);
293   - const isStep3FatherAddOrEditStatus = ref(false);
294   - let val4: any = reactive({});
295   - let val5: any = reactive({});
296   - let val6: any = ref([]);
297   - let val7: any = ref(null);
298   - let val9: any = ref([]);
299   - let val10: any = ref(null);
300   - const formatEditRuleData: any = ref([]);
301   - const formatEditEnableData: any = ref([]);
302   - const [registerEnableRuleModal, { openModal: openModalEnableRule }] = useModal();
303   - const [
304   - registerClearAlarmRuleConditionsModal,
305   - { openModal: openModalClearAlarmRuleConditions },
306   - ] = useModal();
307   - const [registerClearEnableRuleModal, { openModal: openModalClearEnableRule }] = useModal();
308   - const [
309   - registerForm,
310   - {
311   - setFieldsValue: setAlarmTypeValFunc,
312   - validate: getAlarmTypeValFunc,
313   - resetFields: resetAlarmTypeValFunc,
314   - },
315   - ] = useForm({
316   - labelWidth: 120,
317   - schemas: step3Schemas,
318   - showResetButton: false,
319   - showSubmitButton: false,
320   - });
321   - const [
322   - registerFormHighSetting,
323   - {
324   - setFieldsValue: setDeliverAlertsValFunc,
325   - getFieldsValue: getDeliverAlertsValFunc,
326   - resetFields: resetDeliverAlertsValFunc,
327   - },
328   - ] = useForm({
329   - labelWidth: 120,
330   - schemas: step3HighSetting,
331   - showResetButton: false,
332   - showSubmitButton: false,
333   - actionColOptions: {
334   - span: 24,
335   - },
336   - });
337   - const [
338   - registerFormChangeClearDetail,
339   - {
340   - setFieldsValue: setRegisterFormClearChangeDetailFunc,
341   - getFieldsValue: getRegisterFormClearChangeDetailFunc,
342   - resetFields: resetRegisterFormClearChangeDetailFunc,
343   - },
344   - ] = useForm({
345   - labelWidth: 120,
346   - schemas: formChangeDetailSchema,
347   - showResetButton: false,
348   - showSubmitButton: false,
349   - actionColOptions: {
350   - span: 24,
351   - },
352   - });
353   - const clickAddCreateRuleFunc = () => {
354   - let i = 1;
355   - i--;
356   - createAlarmRuleData.value.push(1);
357   - nextTick(() => {
358   - conditionRefs.AlarmSeverityRef.value.map((item, index) => {
359   - if (i === index) {
360   - nextTick(() => {
361   - item.updateSchemaSelectDisableFunc();
362   - });
363   - }
364   - });
365   - });
366   - if (isStep3FatherAddOrEditStatus.value) {
367   - createEditAlarmRuleData.value.push(1);
368   - }
369   - };
370   - const updateCpnSchemaSelectEnableFunc = (select) => {
371   - conditionRefs.AlarmSeverityRef.value.map((item, index) => {
372   - if (select === index) {
373   - nextTick(() => {
374   - item.updateSchemaSelectEnableFunc();
375   - });
376   - }
377   - });
378   - };
379   -
380   - /**
381   - * 获取清除报警规则数据
382   - */
383   - const clickAddClearRuleFunc = () => {
384   - isClearStatus.value = true;
385   - };
386   - const removeAddClearRuleFunc = () => {
387   - isClearStatus.value = false;
388   - alaramsObj.clearRule = null;
389   - };
390   - const removeAddCreateRuleFunc = (e, i) => {
391   - const key = createAlarmRuleData.value.indexOf(e);
392   - createAlarmRuleData.value.splice(key, 1);
393   - console.log(i);
394   - Object.keys(alaramsObj.createRules).forEach((i1, e) => {
395   - if (e == i) {
396   - delete alaramsObj.createRules[i1];
397   - }
398   - });
399   - if (isStep3FatherAddOrEditStatus.value) {
400   - const key1 = createEditAlarmRuleData.value.indexOf(e);
401   - createEditAlarmRuleData.value.splice(key1, 1);
402   - }
403   - };
404   - const clickAddAlarmRuleConditionsFunc = (e, i) => {
405   - getConditionData.value = [];
406   -
407   - //获取对应下标
408   - let currentAlarmCondition = { key: 0, data: {} };
409   - let isUpdate = false;
410   - getConditionData1.value.forEach((obj) => {
411   - if (obj.data.length != undefined && obj.key == i) {
412   - currentAlarmCondition.key = i;
413   - currentAlarmCondition.data = obj.data;
414   - isUpdate = true;
415   - }
416   - });
417   - getConditionData.value.push(currentAlarmCondition);
418   - conditionRefs.AlarmRuleConditionsRef.value.map((item, index) => {
419   - if (i === index) {
420   - nextTick(() => {
421   - item.resetDataFunc(index, currentAlarmCondition, isUpdate);
422   - });
423   - }
424   - });
425   - };
426   -
427   - const clickAddEnableRuleFunc = () => {
428   - nextTick(() => {
429   - openModalEnableRule(true);
430   - proxy.$refs.DetailTemplateRef?.resetDataFunc();
431   - });
432   - };
433   - const clickClearAlarmRuleConditionsFunc = () => {
434   - nextTick(() => {
435   - openModalClearAlarmRuleConditions(true);
436   - proxy.$refs.AlarmRuleConditionsRef?.resetDataFunc();
437   - });
438   - };
439   - const clickClearEnableRuleFunc = () => {
440   - nextTick(() => {
441   - openModalClearEnableRule(true);
442   - proxy.$refs.DetailTemplateRef?.resetDataFunc();
443   - });
444   - };
445   - const getAlarmRuleConditionsValFunc = (e) => {
446   - console.log('获取值');
447   - if (!isStep3FatherAddOrEditStatus) {
448   - formatAlarmRuleConditions.value.push(e);
449   - } else {
450   - for (let i = 0; i < formatAlarmRuleConditions.value.length; i++) {
451   - if (formatAlarmRuleConditions.value[i].key == e.key) {
452   - formatAlarmRuleConditions.value.splice(i, 1);
453   - }
454   - }
455   - formatAlarmRuleConditions.value.push(e);
456   - }
457   -
458   - let addValue = undefined;
459   - getConditionData1.value.forEach((obj) => {
460   - if (Object.keys(obj.data).length != 0 && obj.key == e.key) {
461   - obj.data = e.data;
462   - } else {
463   - addValue = e;
464   - }
465   - });
466   - if (addValue != undefined) {
467   - getConditionData1.value.push(addValue);
468   - }
469   - };
470   - const getClearAlarmRuleConditionsValFunc = (e) => {
471   - formatClearAlarmRuleConditions.value.push({
472   - condition: e,
473   - } as never);
474   - };
475   - const formatClearAlarmRuleConditionsFunc = (e) => {
476   - // let formatMap = e.condition.map((f: any) => formatAlarmRuleConditionsData(f));
477   - // return formatMap;
478   - };
479   - const getEnableRuleFunc = (e) => {
480   - formatEnableRule.value.push(e);
481   - formatEditEnableData.value.push(e);
482   - };
483   - const getClearEnableRuleFunc = (e) => {
484   - formatClearEnableRule.value.push(e);
485   - };
486   - const formatEnableRuleFunc = (e) => {
487   - let formatMap = formatEnableRuleData(e);
488   - return formatMap;
489   - };
490   - const formatEditEnableRuleFunc = (e) => {
491   - let formatMap = formatEnableRuleData(e);
492   - return formatMap;
493   - };
494   - const formatClearEnableRuleFunc = (e) => {
495   - let formatMap = formatEnableRuleData(e);
496   - return formatMap;
497   - };
498   - /**
499   - * 获取第三步所有的数据
500   - */
501   - const getStep3AllDataFunc = async () => {
502   - try {
503   - const UUID = generateUUID();
504   - const val1 = await getAlarmTypeValFunc();
505   - const val2 = getDeliverAlertsValFunc();
506   - const val3 = [];
507   - val3.push(val2.propagateRelationTypes as never);
508   - alaramsObj.alarmType = val1.alarmType;
509   - alaramsObj.propagate = val2.propagate;
510   - alaramsObj.id = UUID;
511   - if (val2.propagateRelationTypes == undefined) {
512   - alaramsObj.propagateRelationTypes = null;
513   - } else {
514   - alaramsObj.propagateRelationTypes = val3;
515   - }
516   - const val8 = getRegisterFormClearChangeDetailFunc();
517   - val9.value = proxy.$refs['AlarmClearRuleConditionsRef']?.getFieldsValueFunc();
518   - val10.value = proxy.$refs['EnableClearRuleRef']?.getFieldsValueFunc();
519   - if (val9.value == undefined || val10.value == undefined) {
520   - alaramsObj.clearRule = null;
521   - isClearStatus.value = false;
522   - } else {
523   - alaramsObj.clearRule = {
524   - ...val8,
525   - ...{
526   - schedule: val10.value == undefined ? undefined : val10.value,
527   - },
528   - ...{
529   - condition: {
530   - condition: val9.value == undefined ? undefined : val9.value,
531   - },
532   - },
533   - };
534   - }
535   - let temp = [];
536   - if (!isStep3FatherAddOrEditStatus) {
537   - temp = createAlarmRuleData.value;
538   - } else {
539   - temp = createEditAlarmRuleData.value;
540   - }
541   - for (let i = 0; i < temp.length; i++) {
542   - formatAlarmRuleConditions.value.forEach((f, ii) => {
543   - if (ii == i) {
544   - conditionRefs.AlarmSeverityRef.value.forEach((item, index) => {
545   - if (index == ii) {
546   - val4 = item.getFieldsValueFunc();
547   - }
548   - });
549   - conditionRefs.DetailTemplateRef.value.forEach((item, index) => {
550   - if (index == ii) {
551   - val5 = item.getFieldsValueFunc();
552   - }
553   - });
554   - conditionRefs.AlarmRuleConditionsRef.value.forEach((item, index) => {
555   - if (index == ii) {
556   - val6.value = item.getFieldsValueFunc();
557   - }
558   - });
559   - conditionRefs.EnableRuleRef.value.forEach((item, index) => {
560   - if (index == ii) {
561   - val7.value = item.getFieldsValueFunc();
562   - }
563   - });
564   - alaramsObj.createRules[val4?.default] = {
565   - ...val5,
566   - ...{
567   - schedule: val7.value,
568   - },
569   - ...{
570   - condition: {
571   - condition: val6.value,
572   - },
573   - },
574   - };
575   - }
576   - });
577   - }
578   - return alaramsObj;
579   - } catch (e) {
580   - console.log(e);
581   - }
582   - };
583   - /**
584   - * 清空第三步数据
585   - */
586   - const clearStep3CpnDataFunc = () => {
587   - try {
588   - resetAlarmTypeValFunc();
589   - resetDeliverAlertsValFunc();
590   - proxy.$refs.AlarmSeverityRef?.resetFieldsFunc();
591   - proxy.$refs.DetailTemplateRef?.resetFieldsFunc();
592   - proxy.$refs.AlarmRuleConditionsRef?.resetFieldsFunc();
593   - proxy.$refs.EnableRuleRef?.resetFieldsFunc();
594   - resetRegisterFormClearChangeDetailFunc();
595   - formatAlarmRuleConditions.value.length = 0;
596   - formatClearAlarmRuleConditions.value.length = 0;
597   - formatEnableRule.value.length = 0;
598   - formatClearEnableRule.value.length = 0;
599   - tempDetailTemplateData.value.length = 0;
600   - formatEditClearEnableRule.value.length = 0;
601   - formatEditClearAlarmRuleConditions.value.length = 0;
602   - createEditAlarmRuleData.value.length = 0;
603   - alaramsObj.alarmType = null;
604   - alaramsObj.propagate = null;
605   - alaramsObj.propagateRelationTypes = null;
606   - alaramsObj.clearRule = {};
607   - alaramsObj.createRules = {};
608   - alaramsObj.id = '';
609   - formatEditRuleData.value.length = 0;
610   - formatEditEnableData.value.length = 0;
611   - val6.value.length = 0;
612   - val7.value = null;
613   - val9.value.length = 0;
614   - val10.value = null;
615   - } catch {}
616   - };
617   - /**
618   - * 回显第三步数据
619   - */
620   - watch(
621   - () => props.step3FatherEmitCpnData,
622   - (v) => {
623   - console.log(v);
624   - }
625   - );
626   - const echoStep3DataCpnFunc = () => {
627   - if (props.step3FatherEmitCpnData !== 1) {
628   - if (props.step3FatherEmitCpnData == undefined) return;
629   - isStep3FatherAddOrEditStatus.value = props.step3FatherEmitCpnStatus;
630   - for (let i in props.step3FatherEmitCpnData?.createRules) {
631   - console.log(props.step3FatherEmitCpnData);
632   - createEditAlarmRuleData.value.push({
633   - [i]: props.step3FatherEmitCpnData?.createRules[i],
634   - });
635   - }
636   - level.value.forEach((item, index) => {
637   - createEditAlarmRuleData.value.forEach((item1) => {
638   - for (let i in item1) {
639   - if (i != undefined && i == item) {
640   - formatAlarmRuleConditions.value.push({
641   - key: index,
642   - data: item1[i].condition.condition,
643   - });
644   - }
645   - }
646   - });
647   - });
648   - getConditionData1.value = formatAlarmRuleConditions.value;
649   - nextTick(() => {
650   - setAlarmTypeValFunc({
651   - alarmType: props.step3FatherEmitCpnData?.alarmType,
652   - });
653   - try {
654   - setDeliverAlertsValFunc({
655   - propagate: props.step3FatherEmitCpnData?.propagate,
656   - propagateRelationTypes: props.step3FatherEmitCpnData?.propagateRelationTypes[0],
657   - });
658   - } catch {}
659   - if (props.step3FatherEmitCpnData?.clearRule?.alarmDetails !== '') {
660   - isClearStatus.value = true;
661   - nextTick(() => {
662   - setRegisterFormClearChangeDetailFunc({
663   - alarmDetails: props.step3FatherEmitCpnData?.clearRule?.alarmDetails,
664   - });
665   - });
666   - }
667   - formatEditClearAlarmRuleConditions.value =
668   - props.step3FatherEmitCpnData?.clearRule?.condition?.condition;
669   - formatEditClearEnableRule.value.push(props.step3FatherEmitCpnData?.clearRule?.schedule);
670   - if (props.step3FatherEmitCpnData?.clearRule == null) {
671   - nextTick(() => {
672   - return (isClearStatus.value = false);
673   - });
674   - } else {
675   - nextTick(() => {
676   - return (isClearStatus.value = true);
677   - });
678   - }
679   - });
680   - }
681   - };
682   - echoStep3DataCpnFunc();
683   - const formatEnableRuleFuncData = (v) => {
684   - return formatEnableRuleData(formatAlarmRuleConditionsData1(v)?.schedule);
685   - };
686   - return {
687   - registerForm,
688   - registerFormHighSetting,
689   - clickAddCreateRuleFunc,
690   - createAlarmRuleData,
691   - clickAddClearRuleFunc,
692   - removeAddCreateRuleFunc,
693   - clickAddEnableRuleFunc,
694   - clickAddAlarmRuleConditionsFunc,
695   - AlarmRuleConditionsRef,
696   - EnableRuleRef,
697   - registerEnableRuleModal,
698   - getAlarmRuleConditionsValFunc,
699   - formatAlarmRuleConditions,
700   - formatEnableRule,
701   - formatEnableRuleFunc,
702   - getEnableRuleFunc,
703   - getStep3AllDataFunc,
704   - AlarmSeverityRef,
705   - DetailTemplateRef,
706   - isClearStatus,
707   - removeAddClearRuleFunc,
708   - formatClearAlarmRuleConditions,
709   - formatClearAlarmRuleConditionsFunc,
710   - formatClearEnableRule,
711   - formatClearEnableRuleFunc,
712   - registerClearAlarmRuleConditionsModal,
713   - registerClearEnableRuleModal,
714   - clickClearAlarmRuleConditionsFunc,
715   - clickClearEnableRuleFunc,
716   - getClearAlarmRuleConditionsValFunc,
717   - getClearEnableRuleFunc,
718   - registerFormChangeClearDetail,
719   - clearStep3CpnDataFunc,
720   - echoStep3DataCpnFunc,
721   - isStep3FatherAddOrEditStatus,
722   - formatAlarmRuleConditionsData,
723   - formatEditClearAlarmRuleConditions,
724   - formatEnableRuleData,
725   - formatEditClearEnableRule,
726   - createEditAlarmRuleData,
727   - formatEnableRuleFuncData,
728   - AlarmClearRuleConditionsRef,
729   - EnableClearRuleRef,
730   - formatEditRuleData,
731   - formatEditEnableData,
732   - formatEditEnableRuleFunc,
733   - updateCpnSchemaSelectEnableFunc,
734   - getConditionData,
735   - getConditionData1,
736   - conditionRefs,
737   - level,
738   - };
739   - },
740   - });
741   -</script>
742   -
743   -<style lang="less" scoped></style>
1   -import { FormSchema, BasicColumn } from '/@/components/Table';
2   -import { DescItem } from '/@/components/Description/index';
3   -
4   -/**
5   - * 所使用的枚举值
6   - */
7   -
8   -export enum TriggerEnum {
9   - IS_DEVICE_ACT = 'SIMPLE',
10   - IS_TIME_ACT = 'DURATION',
11   - IS_SCENE_ACT = 'REPEATING',
12   - IS_CURRENT_CUSTOMER = 'CURRENT_CUSTOMER',
13   - IS_CURRENT_DEVICE = 'CURRENT_DEVICE',
14   -}
15   -export const isCurrentCus = (type: string) => {
16   - return type === TriggerEnum.IS_CURRENT_CUSTOMER;
17   -};
18   -export const isCurrentDev = (type: string) => {
19   - return type === TriggerEnum.IS_CURRENT_DEVICE;
20   -};
21   -
22   -export const isShiDu = (type: string) => {
23   - return type === TriggerEnum.IS_DEVICE_ACT;
24   -};
25   -export const isWenDu = (type: string) => {
26   - return type === TriggerEnum.IS_TIME_ACT;
27   -};
28   -
29   -export const isTimeAll = (type: string) => {
30   - return type === TriggerEnum.IS_SCENE_ACT;
31   -};
32   -
33   -export const keyColumns: BasicColumn[] = [
34   - {
35   - title: '键名',
36   - dataIndex: 'key1',
37   - width: 100,
38   - },
39   - {
40   - title: '键类型',
41   - dataIndex: 'type',
42   - width: 100,
43   - },
44   - {
45   - title: '操作',
46   - dataIndex: 'operation',
47   - width: 100,
48   - format: (text: string, record: Recordable) => {
49   - const findDay = [
50   - { label: '等于', value: 'EQUAL' },
51   - { label: '不等于', value: 'NOT_EQUAL' },
52   - { label: '开始于', value: 'STARTS_WITH' },
53   - { label: '结束于', value: 'ENDS_WITH' },
54   - { label: '包含', value: 'CONTAINS' },
55   - { label: '不包含', value: 'NOT_CONTAINS' },
56   - { label: '等于', value: 'EQUAL' },
57   - { label: '不等于', value: 'NOT_EQUAL' },
58   - { label: '大于', value: 'GREATER' },
59   - { label: '小于', value: 'LESS' },
60   - { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
61   - { label: '小于或等于', value: 'LESS_OR_EQUAL' },
62   - ];
63   - const findRuleByValue = findDay.find((f) => {
64   - if (f.value == record.operation) {
65   - return f.label;
66   - }
67   - });
68   - if (findRuleByValue) {
69   - return findRuleByValue.label;
70   - }
71   - },
72   - },
73   - {
74   - title: '值',
75   - dataIndex: 'value1',
76   - width: 80,
77   - },
78   -];
79   -// export const columnsView: BasicColumn[] = [
80   -// {
81   -// title: '键名',
82   -// dataIndex: 'key1',
83   -// width: 200,
84   -// },
85   -// {
86   -// title: '操作',
87   -// dataIndex: 'operation',
88   -// width: 200,
89   -// format: (text: string, record: Recordable) => {
90   -// const findDay = [
91   -// { label: '等于', value: 'EQUAL' },
92   -// { label: '不等于', value: 'NOT_EQUAL' },
93   -// { label: '开始于', value: 'STARTS_WITH' },
94   -// { label: '结束于', value: 'ENDS_WITH' },
95   -// { label: '包含', value: 'CONTAINS' },
96   -// { label: '不包含', value: 'NOT_CONTAINS' },
97   -// { label: '等于', value: 'EQUAL' },
98   -// { label: '不等于', value: 'NOT_EQUAL' },
99   -// { label: '大于', value: 'GREATER' },
100   -// { label: '小于', value: 'LESS' },
101   -// { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
102   -// { label: '小于或等于', value: 'LESS_OR_EQUAL' },
103   -// ];
104   -// const findRuleByValue = findDay.find((f) => {
105   -// if (f.value == record.operation) {
106   -// return f.label;
107   -// }
108   -// });
109   -// if (findRuleByValue) {
110   -// return findRuleByValue.label;
111   -// }
112   -// },
113   -// },
114   -// {
115   -// title: '值',
116   -// dataIndex: 'value1',
117   -// width: 200,
118   -// },
119   -// ];
120   -
121   -export const DescDetailSchema: DescItem[] = [
122   - {
123   - field: 'key1',
124   - label: '键名',
125   - },
126   - {
127   - field: 'type',
128   - label: '键类型',
129   - },
130   -];
131   -
132   -export const formSchema: FormSchema[] = [
133   - {
134   - field: 'conditionType',
135   - label: '条件类型',
136   - colProps: { span: 13 },
137   - component: 'Select',
138   - defaultValue: 'SIMPLE',
139   - componentProps: {
140   - placeholder: '请选择报警日程表',
141   - options: [
142   - { label: '简单', value: 'SIMPLE' },
143   - { label: '持续时间', value: 'DURATION' },
144   - { label: '重复', value: 'REPEATING' },
145   - ],
146   - },
147   - },
148   - // {
149   - // field: 'sourceType',
150   - // label: '动态源类型',
151   - // colProps: { span: 24 },
152   - // component: 'Select',
153   - // componentProps: {
154   - // placeholder: '请选择动态源类型',
155   - // options: [
156   - // { label: '无动态值', value: '' },
157   - // { label: '当前租户', value: 'CURRENT_TENANT' },
158   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
159   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
160   - // ],
161   - // },
162   - // ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
163   - // show: ({ values }) => {
164   - // return !!values.field5;
165   - // },
166   - // },
167   - // {
168   - // field: 'sourceAttribute',
169   - // label: '源属性',
170   - // colProps: { span: 24 },
171   - // component: 'Input',
172   - // componentProps: {
173   - // placeholder: '源属性',
174   - // },
175   - // ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
176   - // show: ({ values }) => {
177   - // return !!values.field5;
178   - // },
179   - // },
180   - // {
181   - // field: 'sourceType',
182   - // label: '动态源类型',
183   - // colProps: { span: 24 },
184   - // component: 'Select',
185   - // componentProps: {
186   - // placeholder: '请选择动态源类型',
187   - // options: [
188   - // { label: '无动态值', value: '' },
189   - // { label: '当前租户', value: 'CURRENT_TENANT' },
190   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
191   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
192   - // ],
193   - // },
194   - // ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
195   - // show: ({ values }) => {
196   - // return !!values.field6;
197   - // },
198   - // },
199   - // {
200   - // field: 'sourceAttribute',
201   - // label: '源属性',
202   - // colProps: { span: 24 },
203   - // component: 'Input',
204   - // componentProps: {
205   - // placeholder: '源属性',
206   - // },
207   - // ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
208   - // show: ({ values }) => {
209   - // return !!values.field6;
210   - // },
211   - // },
212   - {
213   - field: 'defaultValue',
214   - label: '持续时间值',
215   - colProps: { span: 13 },
216   - component: 'Input',
217   - defaultValue: 0,
218   - componentProps: {
219   - maxLength: 16,
220   - placeholder: '请输入持续时间值(请输入数字)',
221   - },
222   - dynamicRules: () => {
223   - return [
224   - {
225   - validator: (_, value) => {
226   - if (!value) {
227   - return Promise.reject('持续时间值不能为空');
228   - }
229   - const pwdRegex = new RegExp(/-?\d+/);
230   - if (!pwdRegex.test(value)) {
231   - return Promise.reject('只能为数字,且最长不超过16位');
232   - }
233   - return Promise.resolve();
234   - },
235   - },
236   - ];
237   - },
238   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
239   - show: ({ values }) => {
240   - return !values.field5;
241   - },
242   - },
243   - // {
244   - // field: 'field5',
245   - // component: 'Switch',
246   - // label: '切换到动态值',
247   - // colProps: {
248   - // span: 8,
249   - // },
250   - // labelWidth: 200,
251   - // ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
252   - // },
253   - // {
254   - // field: 'field6',
255   - // component: 'Switch',
256   - // label: '切换到动态值',
257   - // colProps: {
258   - // span: 8,
259   - // },
260   - // labelWidth: 200,
261   - // ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
262   - // },
263   - {
264   - field: 'unit',
265   - label: '时间单位',
266   - colProps: { span: 13 },
267   - component: 'Select',
268   - componentProps: {
269   - placeholder: '请选择时间单位',
270   - options: [
271   - { label: '秒', value: 'SECONDS' },
272   - { label: '分钟', value: 'MINUTES' },
273   - { label: '小时', value: 'HOURS' },
274   - { label: '天', value: 'DAYS' },
275   - ],
276   - },
277   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'conditionType')),
278   - },
279   - {
280   - field: 'defaultValue',
281   - label: '事件计数值必填',
282   - colProps: { span: 13 },
283   - component: 'Input',
284   - componentProps: {
285   - maxLength: 2147483637,
286   - placeholder: '请输入事件计数值(应在1到2147483637之间)',
287   - },
288   - dynamicRules: () => {
289   - return [
290   - {
291   - validator: (_, value) => {
292   - if (!value) {
293   - return Promise.reject('事件计数不能为空');
294   - }
295   - const pwdRegex = new RegExp(/-?\d+/);
296   - if (!pwdRegex.test(value)) {
297   - return Promise.reject('只能为数字,且最长不超过16位');
298   - }
299   - return Promise.resolve();
300   - },
301   - },
302   - ];
303   - },
304   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'conditionType')),
305   - show: ({ values }) => {
306   - return !values.field6;
307   - },
308   - },
309   - {
310   - field: 'inherit',
311   - label: '',
312   - colProps: { span: 13 },
313   - component: 'Checkbox',
314   - renderComponentContent: 'Inherit from owner',
315   - ifShow: ({ values }) =>
316   - isCurrentCus(Reflect.get(values, 'sourceType')) ||
317   - isCurrentDev(Reflect.get(values, 'sourceType')),
318   - },
319   -];
1   -import { FormSchema } from '/@/components/Table';
2   -import { ref } from 'vue';
3   -
4   -export const isWhereType: any = ref(null);
5   -
6   -/**
7   - * 所使用的枚举值
8   - */
9   -
10   -export enum TriggerEnum {
11   - IS_DEVICE_ACT = '属性',
12   - IS_TIME_ACT = 'TIME_SERIES',
13   - IS_SCENE_ACT = '常量',
14   - IS_STRING = 'STRING',
15   - IS_NUMERIC = 'NUMERIC',
16   - IS_BOOLEAN = 'BOOLEAN',
17   - IS_COMPLEX = 'COMPLEX',
18   -}
19   -
20   -export const isShiDu = (type: string) => {
21   - return type === TriggerEnum.IS_DEVICE_ACT;
22   -};
23   -export const isWenDu = (type: string) => {
24   - return type === TriggerEnum.IS_TIME_ACT;
25   -};
26   -
27   -export const isTimeAll = (type: string) => {
28   - return type === TriggerEnum.IS_SCENE_ACT;
29   -};
30   -
31   -export const isString = (type: string) => {
32   - return type === TriggerEnum.IS_STRING;
33   -};
34   -
35   -export const isNumeric = (type: string) => {
36   - return type === TriggerEnum.IS_NUMERIC;
37   -};
38   -
39   -export const isBoolean = (type: string) => {
40   - return type === TriggerEnum.IS_BOOLEAN;
41   -};
42   -
43   -export const isComplex = (type: string) => {
44   - return type === TriggerEnum.IS_COMPLEX;
45   -};
46   -
47   -export const formSchema: FormSchema[] = [
48   - {
49   - field: 'id',
50   - label: '',
51   - component: 'InputNumber',
52   - ifShow: false,
53   - },
54   - {
55   - field: 'type',
56   - label: '键类型',
57   - colProps: { span: 13 },
58   - component: 'Select',
59   - componentProps: {
60   - placeholder: '请选择键类型',
61   - options: [
62   - { label: '属性', value: '属性' },
63   - { label: 'Timeseries', value: 'TIME_SERIES' },
64   - { label: '常量', value: '常量' },
65   - ],
66   - },
67   - },
68   - {
69   - field: 'key1',
70   - label: '键名',
71   - colProps: { span: 13 },
72   - component: 'Input',
73   - componentProps: {
74   - maxLength: 255,
75   - placeholder: '请输入键名',
76   - },
77   -
78   - ifShow: ({ values }) => isShiDu(Reflect.get(values, 'type')),
79   - },
80   - {
81   - field: 'key1',
82   - label: '键名',
83   - colProps: { span: 13 },
84   - component: 'Input',
85   - componentProps: {
86   - maxLength: 255,
87   - placeholder: '请输入键名',
88   - },
89   -
90   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
91   - },
92   - {
93   - field: 'key1',
94   - label: '键名',
95   - colProps: { span: 13 },
96   - component: 'Input',
97   - componentProps: {
98   - maxLength: 255,
99   - placeholder: '请输入键名',
100   - },
101   -
102   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
103   - },
104   - {
105   - field: 'type1',
106   - label: '值类型',
107   - colProps: { span: 13 },
108   - component: 'Select',
109   - componentProps: {
110   - placeholder: '请选择值类型',
111   - options: [
112   - { label: '字符串', value: 'STRING' },
113   - { label: '数字', value: 'NUMERIC' },
114   - { label: '布尔值', value: 'BOOLEAN' },
115   - { label: '日期时间', value: 'COMPLEX' },
116   - ],
117   - onChange: (v) => {
118   - isWhereType.value = v;
119   - },
120   - },
121   - },
122   - {
123   - field: 'operation',
124   - label: '操作',
125   - colProps: { span: 13 },
126   - component: 'Select',
127   - componentProps: {
128   - placeholder: '请选择操作',
129   - options: [
130   - { label: '等于', value: 'EQUAL' },
131   - { label: '不等于', value: 'NOT_EQUAL' },
132   - { label: '开始于', value: 'STARTS_WITH' },
133   - { label: '结束于', value: 'ENDS_WITH' },
134   - { label: '包含', value: 'CONTAINS' },
135   - { label: '不包含', value: 'NOT_CONTAINS' },
136   - ],
137   - },
138   - ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
139   - },
140   - {
141   - field: 'no',
142   - label: '大小写',
143   - component: 'Checkbox',
144   - colProps: { span: 13 },
145   - renderComponentContent: '忽略大小写',
146   - ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
147   - },
148   - // {
149   - // field: 'sourceType',
150   - // label: '动态源类型',
151   - // colProps: { span: 24 },
152   - // component: 'Select',
153   - // componentProps: {
154   - // placeholder: '请选择动态源类型',
155   - // options: [
156   - // { label: '无动态值', value: '' },
157   - // { label: '当前租户', value: 'CURRENT_TENANT' },
158   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
159   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
160   - // ],
161   - // },
162   - // ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
163   - // show: ({ values }) => {
164   - // return !!values.field5;
165   - // },
166   - // },
167   - // {
168   - // field: 'sourceAttribute',
169   - // label: '源属性',
170   - // colProps: { span: 24 },
171   - // component: 'Input',
172   - // componentProps: {
173   - // placeholder: '请输入源属性',
174   - // },
175   - // ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
176   - // show: ({ values }) => {
177   - // return !!values.field5;
178   - // },
179   - // },
180   - {
181   - field: 'value1',
182   - label: '默认值',
183   - colProps: { span: 13 },
184   - component: 'InputNumber',
185   - defaultValue: 0,
186   - componentProps: {
187   - maxLength: 16,
188   - placeholder: '请输入值(数字)',
189   - },
190   - dynamicRules: () => {
191   - return [
192   - {
193   - validator: (_, value) => {
194   - if (!value) {
195   - return Promise.reject('默认值不能为空');
196   - }
197   - const pwdRegex = new RegExp(/-?\d+/);
198   - if (!pwdRegex.test(value)) {
199   - return Promise.reject('只能为数字,且最长不超过16位');
200   - }
201   - return Promise.resolve();
202   - },
203   - },
204   - ];
205   - },
206   - ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
207   - show: ({ values }) => {
208   - return !values.field5;
209   - },
210   - },
211   - // {
212   - // field: 'field5',
213   - // component: 'Switch',
214   - // label: '切换到动态值',
215   - // colProps: {
216   - // span: 8,
217   - // },
218   - // labelWidth: 200,
219   - // ifShow: ({ values }) => isString(Reflect.get(values, 'type1')),
220   - // },
221   - {
222   - field: 'operation',
223   - label: '操作',
224   - colProps: { span: 13 },
225   - component: 'Select',
226   - componentProps: {
227   - placeholder: '请选择操作',
228   - options: [
229   - { label: '等于', value: 'EQUAL' },
230   - { label: '不等于', value: 'NOT_EQUAL' },
231   - { label: '大于', value: 'GREATER' },
232   - { label: '小于', value: 'LESS' },
233   - { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
234   - { label: '小于或等于', value: 'LESS_OR_EQUAL' },
235   - ],
236   - },
237   - ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
238   - },
239   -
240   - // {
241   - // field: 'sourceType',
242   - // label: '动态源类型',
243   - // colProps: { span: 24 },
244   - // component: 'Select',
245   - // componentProps: {
246   - // placeholder: '请选择动态源类型',
247   - // options: [
248   - // { label: '无动态值', value: '' },
249   - // { label: '当前租户', value: 'CURRENT_TENANT' },
250   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
251   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
252   - // ],
253   - // },
254   - // ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
255   - // show: ({ values }) => {
256   - // return !!values.field6;
257   - // },
258   - // },
259   - // {
260   - // field: 'sourceAttribute',
261   - // label: '源属性',
262   - // colProps: { span: 24 },
263   - // component: 'Input',
264   - // componentProps: {
265   - // placeholder: '请输入源属性',
266   - // },
267   - // ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
268   - // show: ({ values }) => {
269   - // return !!values.field6;
270   - // },
271   - // },
272   - {
273   - field: 'value1',
274   - label: '值',
275   - colProps: { span: 13 },
276   - component: 'InputNumber',
277   - defaultValue: 0,
278   - componentProps: {
279   - placeholder: '请输入值(数字)',
280   - },
281   - dynamicRules: () => {
282   - return [
283   - {
284   - validator: (_, value) => {
285   - if (!value) {
286   - return Promise.reject('值');
287   - }
288   - const pwdRegex = new RegExp(/-?\d+/);
289   - if (!pwdRegex.test(value)) {
290   - return Promise.reject('只能为数字,且最长不超过16位');
291   - }
292   - return Promise.resolve();
293   - },
294   - },
295   - ];
296   - },
297   - ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
298   - show: ({ values }) => {
299   - return !values.field6;
300   - },
301   - },
302   - // {
303   - // field: 'field6',
304   - // component: 'Switch',
305   - // label: '切换到动态值',
306   - // colProps: {
307   - // span: 8,
308   - // },
309   - // labelWidth: 200,
310   - // ifShow: ({ values }) => isNumeric(Reflect.get(values, 'type1')),
311   - // },
312   -
313   - {
314   - field: 'operation',
315   - label: '操作',
316   - colProps: { span: 13 },
317   - component: 'Select',
318   - componentProps: {
319   - placeholder: '请选择操作',
320   - options: [
321   - { label: '等于', value: 'EQUAL' },
322   - { label: '不等于', value: 'NOT_EQUAL' },
323   - ],
324   - },
325   - ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
326   - },
327   - {
328   - field: 'no',
329   - label: '默认值',
330   - colProps: { span: 13 },
331   - component: 'Checkbox',
332   - renderComponentContent: '真',
333   - ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
334   - show: ({ values }) => {
335   - return !values.field7;
336   - },
337   - },
338   - // {
339   - // field: 'field7',
340   - // component: 'Switch',
341   - // label: '切换到动态值',
342   - // colProps: {
343   - // span: 8,
344   - // },
345   - // labelWidth: 200,
346   - // ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
347   - // },
348   - // {
349   - // field: 'sourceType',
350   - // label: '动态源类型',
351   - // colProps: { span: 24 },
352   - // component: 'Select',
353   - // componentProps: {
354   - // placeholder: '请选择动态源类型',
355   - // options: [
356   - // { label: '无动态值', value: '' },
357   - // { label: '当前租户', value: 'CURRENT_TENANT' },
358   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
359   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
360   - // ],
361   - // },
362   - // ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
363   - // show: ({ values }) => {
364   - // return !!values.field7;
365   - // },
366   - // },
367   - // {
368   - // field: 'sourceAttribute',
369   - // label: '源属性',
370   - // colProps: { span: 24 },
371   - // component: 'Input',
372   - // componentProps: {
373   - // placeholder: '请输入源属性',
374   - // },
375   - // ifShow: ({ values }) => isBoolean(Reflect.get(values, 'type1')),
376   - // show: ({ values }) => {
377   - // return !!values.field7;
378   - // },
379   - // },
380   - {
381   - field: 'operation',
382   - label: '操作',
383   - colProps: { span: 13 },
384   - component: 'Select',
385   - componentProps: {
386   - placeholder: '请选择操作',
387   - options: [
388   - { label: '等于', value: 'EQUAL' },
389   - { label: '不等于', value: 'NOT_EQUAL' },
390   - { label: '大于', value: 'GREATER' },
391   - { label: '小于', value: 'LESS' },
392   - { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
393   - { label: '小于或等于', value: 'LESS_OR_EQUAL' },
394   - ],
395   - },
396   - ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
397   - },
398   - {
399   - field: 'no',
400   - component: 'DatePicker',
401   - label: '请选择日期',
402   - colProps: {
403   - span: 13,
404   - },
405   - ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
406   - show: ({ values }) => {
407   - return !values.field8;
408   - },
409   - },
410   - {
411   - field: 'no',
412   - component: 'TimePicker',
413   - label: '请选择时间',
414   - colProps: {
415   - span: 13,
416   - },
417   - ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
418   - show: ({ values }) => {
419   - return !values.field8;
420   - },
421   - },
422   - // {
423   - // field: 'field8',
424   - // component: 'Switch',
425   - // label: '切换到动态值',
426   - // colProps: {
427   - // span: 8,
428   - // },
429   - // labelWidth: 200,
430   - // ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
431   - // },
432   - // {
433   - // field: 'sourceType',
434   - // label: '动态源类型',
435   - // colProps: { span: 24 },
436   - // component: 'Select',
437   - // componentProps: {
438   - // placeholder: '请选择动态源类型',
439   - // options: [
440   - // { label: '无动态值', value: '' },
441   - // { label: '当前租户', value: 'CURRENT_TENANT' },
442   - // { label: '当前客户', value: 'CURRENT_CUSTOMER' },
443   - // { label: '当前设备', value: 'CURRENT_DEVICE' },
444   - // ],
445   - // },
446   - // ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
447   - // show: ({ values }) => {
448   - // return !!values.field8;
449   - // },
450   - // },
451   - // {
452   - // field: 'sourceAttribute',
453   - // label: '源属性',
454   - // colProps: { span: 24 },
455   - // component: 'Input',
456   - // componentProps: {
457   - // placeholder: '请输入源属性',
458   - // },
459   - // ifShow: ({ values }) => isComplex(Reflect.get(values, 'type1')),
460   - // show: ({ values }) => {
461   - // return !!values.field8;
462   - // },
463   - // },
464   - // {
465   - // field: 'value1',
466   - // label: '默认值',
467   - // colProps: { span: 24 },
468   - // component: 'Input',
469   - // componentProps: {
470   - // placeholder: '请输入默认值(数字)',
471   - // },
472   - // },
473   -];
1   -import { FormSchema } from '/@/components/Table';
2   -
3   -export const formSchema: FormSchema[] = [
4   - {
5   - field: 'type',
6   - label: '操作',
7   - colProps: { span: 24 },
8   - component: 'Select',
9   - componentProps: {
10   - placeholder: '请选择操作',
11   - options: [
12   - { label: '和', value: '和' },
13   - { label: '或', value: '或' },
14   - ],
15   - },
16   - },
17   -];
1   -<template>
2   - <BasicModal
3   - v-bind="$attrs"
4   - width="55rem"
5   - @register="registerAdd"
6   - :title="getTitle"
7   - @ok="handleSubmit"
8   - @cancel="handleCancel"
9   - >
10   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
11   - </BasicModal>
12   -</template>
13   -<script lang="ts">
14   - import { defineComponent, ref, computed, unref } from 'vue';
15   - import { BasicModal, useModalInner } from '/@/components/Modal';
16   - import { BasicForm, useForm } from '/@/components/Form';
17   - import { formSchema } from './config';
18   -
19   - export default defineComponent({
20   - name: 'index',
21   - components: { BasicModal, BasicForm },
22   - emits: ['success', 'register'],
23   - setup(_, { emit }) {
24   - const isUpdate = ref(true);
25   - const getValue: any = ref({});
26   - const setId: any = ref(1);
27   - const getTitle = computed(() => (!unref(isUpdate) ? '新增复合筛选器' : '编辑复合筛选器'));
28   - const [registerForm, { getFieldsValue, setFieldsValue, resetFields }] = useForm({
29   - labelWidth: 120,
30   - schemas: formSchema,
31   - });
32   - const [registerAdd, { closeModal }] = useModalInner(async (data) => {
33   - isUpdate.value = !!data?.isUpdate;
34   - if (!unref(isUpdate)) {
35   - resetFields();
36   - }
37   - if (unref(isUpdate)) {
38   - setFieldsValue({
39   - ...data.record,
40   - });
41   - }
42   - });
43   - const handleSubmit = () => {
44   - if (!unref(isUpdate)) {
45   - getValue.value = getFieldsValue();
46   - setId.value += 1;
47   - getValue.value.id = setId.value;
48   - } else {
49   - getValue.value = getFieldsValue();
50   - setId.value += 1000;
51   - getValue.value.id = setId.value;
52   - }
53   - emit('success', getValue.value);
54   - closeModal();
55   - };
56   - const handleCancel = () => {
57   - return;
58   - };
59   - return {
60   - registerForm,
61   - handleCancel,
62   - handleSubmit,
63   - registerAdd,
64   - getTitle,
65   - };
66   - },
67   - });
68   -</script>
1   -<template>
2   - <BasicModal
3   - v-bind="$attrs"
4   - width="55rem"
5   - @register="register"
6   - :title="getTitle"
7   - @ok="handleSubmit"
8   - @cancel="handleCancel"
9   - >
10   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
11   - <template v-if="getIsWhereType">
12   - <div><p style="text-align: center">未配置筛选器</p></div>
13   - <!-- <div><p style="text-align: left">筛选器</p></div> -->
14   - <div style="width: 50vw; height: 5vh; display: flex; justify-content: space-between">
15   - <div style="width: 5vw; height: 2vh">
16   - <p v-for="(item, index) in n" :key="index"></p>
17   - </div>
18   - <div style="width: 45vw; height: 2vh">
19   - <BasicForm :showActionButtonGroup="false" @register="registerFilter">
20   - <template #add="{ field }">
21   - <!-- <Button v-if="Number(field) === 0" @click="add">添加</Button> -->
22   - <Button v-if="Number(field) === 0" disabled @click="handleAdd">添加复合器</Button>
23   - <!-- <Button v-if="Number(field) === 0" @click="handleEdit">编辑复合器</Button> -->
24   - <Button v-if="field > 0" @click="del(field)">-</Button>
25   - </template>
26   - </BasicForm>
27   - </div>
28   - </div>
29   - <AddkeyValueModal @register="registerModal" />
30   - </template>
31   - </BasicModal>
32   -</template>
33   -<script lang="ts">
34   - import { defineComponent, ref, computed, unref, watch } from 'vue';
35   - import { BasicModal, useModalInner } from '/@/components/Modal';
36   - import { useModal } from '/@/components/Modal';
37   - import { BasicForm, useForm } from '/@/components/Form';
38   - import { formSchema, isWhereType } from './config';
39   - import { Button } from '/@/components/Button';
40   - import AddkeyValueModal from './cpns/index.vue';
41   -
42   - export default defineComponent({
43   - name: 'index',
44   - components: { BasicModal, BasicForm, Button, AddkeyValueModal },
45   - emits: ['success', 'register'],
46   - setup(_, { emit }) {
47   - const getIsWhereType: any = ref(null);
48   - const isUpdate = ref(true);
49   - const getValue: any = ref(null);
50   - const getKeyAndValArr = ref<[]>([]);
51   -
52   - const getTitle = computed(() => (!unref(isUpdate) ? '新增键名筛选器' : '编辑键名筛选器'));
53   - const [registerForm, { getFieldsValue, setFieldsValue, resetFields }] = useForm({
54   - labelWidth: 120,
55   - schemas: formSchema,
56   - });
57   - const [registerFilter, { appendSchemaByField, removeSchemaByFiled }] = useForm({
58   - // schemas: [
59   - // {
60   - // field: 'field0a',
61   - // component: 'Input',
62   - // label: '字段0',
63   - // colProps: {
64   - // span: 8,
65   - // },
66   - // required: true,
67   - // },
68   - // {
69   - // field: 'field0b',
70   - // component: 'Input',
71   - // label: '字段0',
72   - // colProps: {
73   - // span: 8,
74   - // },
75   - // required: true,
76   - // },
77   - // {
78   - // field: '0',
79   - // component: 'Input',
80   - // label: ' ',
81   - // colProps: {
82   - // span: 8,
83   - // },
84   - // slot: 'add',
85   - // },
86   - // ],
87   - labelWidth: 100,
88   - actionColOptions: { span: 24 },
89   - });
90   - const [register, { closeModal }] = useModalInner(async (data) => {
91   - isUpdate.value = !!data?.isUpdate;
92   - if (!unref(isUpdate)) {
93   - resetFields();
94   - getIsWhereType.value = 100;
95   - }
96   - if (unref(isUpdate)) {
97   - setFieldsValue({
98   - ...data.record,
99   - });
100   - }
101   - });
102   -
103   - const handleSubmit = () => {
104   - let mapGetKeyAndValArr = [];
105   - getValue.value = getFieldsValue();
106   - if (!unref(isUpdate)) {
107   - getKeyAndValArr.value.push(getValue.value);
108   - }
109   - mapGetKeyAndValArr = getKeyAndValArr.value.map((m: any, index) => {
110   - return {
111   - key: {
112   - id: index,
113   - type: m.type,
114   - key: m.key1,
115   - },
116   - valueType: m.type1,
117   - value: m.value1,
118   - predicate: {
119   - type: m.type1,
120   - operation: m.operation,
121   - value: {
122   - defaultValue: m.value1,
123   - },
124   - },
125   - };
126   - });
127   - if (!unref(isUpdate)) {
128   - getValue.value.id = getKeyAndValArr.value.length - 1;
129   - }
130   -
131   - emit('success', mapGetKeyAndValArr, getValue.value, unref(isUpdate));
132   - closeModal();
133   - };
134   - const handleCancel = () => {
135   - return;
136   - };
137   - const n = ref(1);
138   -
139   - function add() {
140   - appendSchemaByField(
141   - {
142   - field: `field${n.value}a`,
143   - component: 'Input',
144   - label: '字段' + n.value,
145   - colProps: {
146   - span: 8,
147   - },
148   - required: true,
149   - },
150   - ''
151   - );
152   - appendSchemaByField(
153   - {
154   - field: `field${n.value}b`,
155   - component: 'Input',
156   - label: '字段' + n.value,
157   - colProps: {
158   - span: 8,
159   - },
160   - required: true,
161   - },
162   - ''
163   - );
164   -
165   - appendSchemaByField(
166   - {
167   - field: `${n.value}`,
168   - component: 'Input',
169   - label: ' ',
170   - colProps: {
171   - span: 8,
172   - },
173   - slot: 'add',
174   - },
175   - ''
176   - );
177   - n.value++;
178   - }
179   -
180   - function del(field) {
181   - removeSchemaByFiled([`field${field}a`, `field${field}b`, `${field}`]);
182   - n.value--;
183   - }
184   -
185   - watch(isWhereType, (v) => {
186   - switch (v) {
187   - case 'STRING':
188   - getIsWhereType.value = v;
189   - break;
190   - case 'NUMERIC':
191   - getIsWhereType.value = v;
192   - break;
193   - case 'BOOLEAN':
194   - getIsWhereType.value = v;
195   - break;
196   - case 'COMPLEX':
197   - getIsWhereType.value = v;
198   - break;
199   - default:
200   - getIsWhereType.value = 100;
201   - }
202   - });
203   - const [registerModal, { openModal }] = useModal();
204   - //复合器弹窗
205   - const addPlusIfEdit = ref(1);
206   - const handleAdd = () => {
207   - openModal(true, {
208   - isUpdate: false,
209   - addPlusIfEdit: addPlusIfEdit.value++,
210   - });
211   - };
212   - const handleEdit = () => {
213   - openModal(true, {
214   - isUpdate: true,
215   - });
216   - };
217   -
218   - return {
219   - getIsWhereType,
220   - registerModal,
221   - handleEdit,
222   - handleAdd,
223   - n,
224   - add,
225   - del,
226   - registerFilter,
227   - registerForm,
228   - handleCancel,
229   - handleSubmit,
230   - register,
231   - getTitle,
232   - };
233   - },
234   - });
235   -</script>
1   -<template>
2   - <div class="key-style">
3   - <BasicModal
4   - v-bind="$attrs"
5   - width="55rem"
6   - @register="register"
7   - :title="getTitle"
8   - @ok="handleSubmit"
9   - @cancel="handleCancel"
10   - >
11   - <CollapseContainer title="键名筛选器" class="border mb-8">
12   - <div class="table-style">
13   - <BasicTable
14   - :showIndexColumn="false"
15   - :dataSource="getTableApiData.value"
16   - @register="registerTable"
17   - >
18   - <template #toolbar>
19   - <a-button type="primary" @click="handleAddKey">新增键名筛选器</a-button>
20   - </template>
21   - <template #action="{ record }">
22   - <TableAction
23   - :actions="[
24   - {
25   - label: '编辑',
26   - icon: 'clarity:note-edit-line',
27   - onClick: handleEdit.bind(null, record),
28   - },
29   - {
30   - label: '删除',
31   - icon: 'ant-design:delete-outlined',
32   - color: 'error',
33   - popConfirm: {
34   - title: '是否确认删除',
35   - confirm: handleDelete.bind(null, record),
36   - },
37   - },
38   - ]"
39   - />
40   - </template>
41   - </BasicTable>
42   - </div>
43   - </CollapseContainer>
44   - <!-- <CollapseContainer title="筛选器预览" class="border mb-8">-->
45   - <!-- &lt;!&ndash; <p v-for="(item, index) in detailData" :key="index">{{ item }}</p> &ndash;&gt;-->
46   - <!-- <Description-->
47   - <!-- v-for="(item, index) in detailData"-->
48   - <!-- :key="index"-->
49   - <!-- :column="3"-->
50   - <!-- :data="item"-->
51   - <!-- :schema="schema"-->
52   - <!-- />-->
53   - <!-- </CollapseContainer>-->
54   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
55   - </BasicModal>
56   - <KeyValueModal @register="registerModal" @success="handleSuccess" />
57   - </div>
58   -</template>
59   -<script lang="ts">
60   - import { defineComponent, ref, computed, unref, reactive, nextTick } from 'vue';
61   - import { BasicModal } from '/@/components/Modal';
62   - import { BasicForm, useForm } from '/@/components/Form';
63   - import { formSchema, keyColumns, DescDetailSchema } from './config';
64   - import { CollapseContainer } from '/@/components/Container/index';
65   - import { BasicTable, useTable, TableAction } from '/@/components/Table';
66   - import { useModal } from '/@/components/Modal';
67   - import KeyValueModal from './cpns/index.vue';
68   - import { Description, DescItem } from '/@/components/Description/index';
69   - const schema: DescItem[] = [
70   - {
71   - field: 'key1',
72   - label: '键名',
73   - },
74   - {
75   - field: 'operation',
76   - label: '操作',
77   - render: (_, data) => {
78   - const findDay = [
79   - { label: '等于', value: 'EQUAL' },
80   - { label: '不等于', value: 'NOT_EQUAL' },
81   - { label: '开始于', value: 'STARTS_WITH' },
82   - { label: '结束于', value: 'ENDS_WITH' },
83   - { label: '包含', value: 'CONTAINS' },
84   - { label: '不包含', value: 'NOT_CONTAINS' },
85   - { label: '等于', value: 'EQUAL' },
86   - { label: '不等于', value: 'NOT_EQUAL' },
87   - { label: '大于', value: 'GREATER' },
88   - { label: '小于', value: 'LESS' },
89   - { label: '大于或等于', value: 'GREATER_OR_EQUAL' },
90   - { label: '小于或等于', value: 'LESS_OR_EQUAL' },
91   - ];
92   - const findRuleByValue = findDay.find((f) => {
93   - if (f.value == data.operation) {
94   - return f.label;
95   - }
96   - });
97   - return findRuleByValue?.label;
98   - },
99   - },
100   - {
101   - field: 'value1',
102   - label: '值',
103   - },
104   - ];
105   -
106   - export default defineComponent({
107   - name: 'DetailTemplate',
108   - components: {
109   - KeyValueModal,
110   - BasicModal,
111   - BasicForm,
112   - CollapseContainer,
113   - BasicTable,
114   - TableAction,
115   - Description,
116   - },
117   - props: ['getFatherData'],
118   - emits: ['success', 'register', 'getAllFieldsRule', 'getLastAllFieldsRule'],
119   - setup(props, { emit }) {
120   - let getKeyAndValueChildData = ref<[]>([]);
121   - const getTableApiData: any = ref([]);
122   - const detailData: any = ref([]);
123   - const currentIndex = ref(0);
124   - const lastValues: any = ref(null);
125   - const isUpdate = ref(true);
126   - const watchCurrentAlarmConditionValue = reactive({
127   - key: 0,
128   - data: {},
129   - });
130   -
131   - const [registerForm, { getFieldsValue, resetFields }] = useForm({
132   - labelWidth: 120,
133   - schemas: formSchema,
134   - });
135   - const [registerModal, { openModal }] = useModal();
136   - const getTitle = computed(() => (!unref(isUpdate) ? '添加报警规则条件' : '编辑报警规则条件'));
137   - const [register, { closeModal, openModal: openCondition }] = useModal();
138   - const [registerTable, { reload, setTableData: setFunc }] = useTable({
139   - title: '键名筛选器',
140   - columns: keyColumns,
141   - bordered: true,
142   - showIndexColumn: false,
143   - pagination: false,
144   - autoCreateKey: true,
145   - actionColumn: {
146   - width: 200,
147   - title: '操作',
148   - dataIndex: 'action',
149   - slots: { customRender: 'action' },
150   - },
151   - });
152   - const getFieldsValueFunc = () => {
153   - return watchCurrentAlarmConditionValue.data;
154   - };
155   - const handleSubmit = () => {
156   - lastValues.value = getFieldsValue();
157   - watchCurrentAlarmConditionValue.key = currentIndex.value;
158   - let allTableDatas = [];
159   - getTableApiData.value.forEach((tableObj) => {
160   - let key = { type: tableObj.type, key: tableObj.key1 };
161   - let predicate = {
162   - operation: tableObj.operation,
163   - type: tableObj.type1,
164   - value: {
165   - defaultValue: tableObj.value1,
166   - },
167   - };
168   - allTableDatas.push({
169   - key: key,
170   - predicate: predicate,
171   - value: tableObj.value1,
172   - valueType: tableObj.type1,
173   - });
174   - });
175   - watchCurrentAlarmConditionValue.data = allTableDatas;
176   - emit('getAllFieldsRule', watchCurrentAlarmConditionValue, lastValues.value);
177   - closeModal();
178   - };
179   - const resetDataFunc = (j, currentAlarmCondition, update) => {
180   - isUpdate.value = update;
181   - openCondition(true);
182   - currentIndex.value = j;
183   - resetFields();
184   - getTableApiData.value = [];
185   - getTableApiData.value.length = 0;
186   - detailData.value = [];
187   - detailData.value.length = 0;
188   - console.log('father', props.getFatherData);
189   - let index = 0;
190   - if (currentAlarmCondition.data.length != undefined) {
191   - for (let i in currentAlarmCondition.data) {
192   - let obj = {
193   - id: index,
194   - key1: currentAlarmCondition.data[i].key.key,
195   - type: currentAlarmCondition.data[i].key.type,
196   - operation: currentAlarmCondition.data[i].predicate.operation,
197   - value1: currentAlarmCondition.data[i].value,
198   - type1: currentAlarmCondition.data[i].valueType,
199   - };
200   - getTableApiData.value.push(obj);
201   - index++;
202   - }
203   - }
204   - nextTick(() => {
205   - setFunc(getTableApiData.value);
206   - });
207   - };
208   -
209   - const handleCancel = () => {};
210   - const handleAddKey = () => {
211   - setTimeout(() => {
212   - openModal(true, {
213   - isUpdate: false,
214   - });
215   - }, 10);
216   - };
217   - const handleEdit = (record: Recordable) => {
218   - openModal(true, {
219   - isUpdate: true,
220   - record,
221   - });
222   - reload();
223   - };
224   - const handleDelete = (record: Recordable) => {
225   - let newGetTableApiData = [];
226   - getTableApiData.value.forEach((currentTable) => {
227   - if (currentTable.id != record.id) {
228   - newGetTableApiData.push(currentTable as never);
229   - }
230   - });
231   - getTableApiData.value = newGetTableApiData;
232   - setFunc(getTableApiData.value);
233   - reload();
234   - };
235   - const handleSuccess = (v, v1, isUpdate) => {
236   - if (isUpdate) {
237   - getTableApiData.value.forEach((tableValue) => {
238   - if (tableValue.id == v1.id) {
239   - tableValue.key1 = v1.key1;
240   - tableValue.operation = v1.operation;
241   - tableValue.type = v1.type;
242   - tableValue.type1 = v1.type1;
243   - tableValue.value1 = v1.value1;
244   - }
245   - });
246   - } else {
247   - getTableApiData.value.push(v1);
248   - }
249   - getKeyAndValueChildData.value = v;
250   - setFunc(getTableApiData.value);
251   - reload();
252   - };
253   - return {
254   - handleCancel,
255   - schema,
256   - detailData,
257   - getTableApiData,
258   - resetDataFunc,
259   - DescDetailSchema,
260   - handleSuccess,
261   - handleEdit,
262   - handleDelete,
263   - registerModal,
264   - registerTable,
265   - handleAddKey,
266   - registerForm,
267   - handleSubmit,
268   - register,
269   - getTitle,
270   - currentIndex,
271   - getFieldsValueFunc,
272   - };
273   - },
274   - });
275   -</script>
276   -<style lang="less" scoped>
277   - :deep .ant-table-body {
278   - overflow-y: auto !important;
279   - min-height: 90px !important;
280   - height: 0px !important;
281   - }
282   -</style>
1   -import { FormSchema } from '/@/components/Form';
2   -import { ref } from 'vue';
3   -
4   -const isWhereType = ref('');
5   -
6   -export const formSchema: FormSchema[] = [
7   - {
8   - field: 'default',
9   - component: 'Select',
10   - label: '报警严重程度:',
11   - required: true,
12   - colProps: {
13   - span: 17,
14   - },
15   - componentProps() {
16   - return {
17   - placeholder: '请选择严重程度',
18   - options: [
19   - {
20   - value: 'CRITICAL',
21   - label: '危险',
22   - },
23   - {
24   - value: 'MAJOR',
25   - label: '重要',
26   - },
27   - {
28   - value: 'MINOR',
29   - label: '次要',
30   - },
31   - {
32   - value: 'WARNING',
33   - label: '警告',
34   - },
35   - {
36   - value: 'INDETERMINATE',
37   - label: '不确定',
38   - },
39   - ],
40   - onChange: (v) => {
41   - isWhereType.value = v ? v : 'INDETERMINATE';
42   - },
43   - };
44   - },
45   - },
46   -];
1   -<template>
2   - <div>
3   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
4   - </div>
5   -</template>
6   -<script lang="ts">
7   - import { defineComponent, ref } from 'vue';
8   - import { BasicForm, useForm } from '/@/components/Form';
9   - import { formSchema } from './config';
10   -
11   - export default defineComponent({
12   - name: 'DetailTemplate',
13   - components: {
14   - BasicForm,
15   - },
16   - props: ['AlarmSeverityCpnData'],
17   - emits: ['success', 'register', 'getAllFields'],
18   - setup(props) {
19   - const fieldValue: any = ref({});
20   - const [registerForm, { resetFields, getFieldsValue, setFieldsValue, updateSchema }] = useForm(
21   - {
22   - labelWidth: 120,
23   - schemas: formSchema,
24   - }
25   - );
26   - const resetFieldsFunc = () => {
27   - resetFields();
28   - };
29   - const getFieldsValueFunc = () => {
30   - fieldValue.value = getFieldsValue();
31   - return fieldValue.value;
32   - };
33   - const item = [
34   - {
35   - value: 'CRITICAL',
36   - label: '危险',
37   - },
38   - {
39   - value: 'MAJOR',
40   - label: '重要',
41   - },
42   - {
43   - value: 'MINOR',
44   - label: '次要',
45   - },
46   - {
47   - value: 'WARNING',
48   - label: '警告',
49   - },
50   - {
51   - value: 'INDETERMINATE',
52   - label: '不确定',
53   - },
54   - ];
55   - const updateSchemaSelectDisableFunc = () => {
56   - updateSchema({
57   - field: 'default',
58   - componentProps: ({ formModel }) => {
59   - item.forEach((f: any) => {
60   - if (f.value == formModel.default) {
61   - f.disabled = true;
62   - }
63   - });
64   - return {
65   - options: item,
66   - };
67   - },
68   - });
69   - };
70   - const updateSchemaSelectEnableFunc = () => {
71   - updateSchema({
72   - field: 'default',
73   - componentProps: ({ formModel }) => {
74   - console.log(formModel);
75   - return {
76   - disabled: false,
77   - options: item,
78   - };
79   - },
80   - });
81   - };
82   - const setFieldsValueFunc = () => {
83   - if (props.AlarmSeverityCpnData != 1) {
84   - let newArr = Object.keys(props.AlarmSeverityCpnData);
85   - setTimeout(() => {
86   - newArr.forEach((f) => {
87   - setFieldsValue({ default: f });
88   - });
89   - }, 10);
90   - }
91   - };
92   - setFieldsValueFunc();
93   - return {
94   - resetFieldsFunc,
95   - updateSchemaSelectDisableFunc,
96   - getFieldsValueFunc,
97   - registerForm,
98   - setFieldsValueFunc,
99   - updateSchemaSelectEnableFunc,
100   - item,
101   - };
102   - },
103   - });
104   -</script>
1   -import { FormSchema } from '/@/components/Table';
2   -
3   -export const formSchema: FormSchema[] = [
4   - {
5   - field: 'alarmDetails',
6   - label: '报警详细信息:',
7   - colProps: { span: 17 },
8   - component: 'Input',
9   - componentProps: {
10   - maxLength: 255,
11   - placeholder: '请输入报警详细信息',
12   - },
13   - },
14   -];
1   -<template>
2   - <div>
3   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
4   - </div>
5   -</template>
6   -<script lang="ts">
7   - import { defineComponent, ref } from 'vue';
8   - import { BasicForm, useForm } from '/@/components/Form';
9   - import { formSchema } from './config';
10   -
11   - export default defineComponent({
12   - name: 'DetailTemplate',
13   - components: {
14   - BasicForm,
15   - },
16   - props: ['DetailTemplateCpnData'],
17   - emits: ['success', 'register', 'getAllFields'],
18   - setup(props) {
19   - const fieldValue: any = ref({});
20   - const [registerForm, { getFieldsValue, setFieldsValue, resetFields }] = useForm({
21   - labelWidth: 120,
22   - schemas: formSchema,
23   - });
24   - const getFieldsValueFunc = () => {
25   - fieldValue.value = getFieldsValue();
26   - return fieldValue.value;
27   - };
28   - const setFieldsValueFunc = () => {
29   - if (props.DetailTemplateCpnData != 1) {
30   - let openEditRuleConditObj: any = {};
31   - for (let i in props.DetailTemplateCpnData) {
32   - if (i == 'CRITICAL') {
33   - openEditRuleConditObj = props.DetailTemplateCpnData[i];
34   - } else if (i == 'MAJOR') {
35   - openEditRuleConditObj = props.DetailTemplateCpnData[i];
36   - } else if (i == 'MINOR') {
37   - openEditRuleConditObj = props.DetailTemplateCpnData[i];
38   - } else if (i == 'WARNING') {
39   - openEditRuleConditObj = props.DetailTemplateCpnData[i];
40   - } else if (i == 'INDETERMINATE') {
41   - openEditRuleConditObj = props.DetailTemplateCpnData[i];
42   - }
43   - }
44   - setTimeout(() => {
45   - setFieldsValue({
46   - alarmDetails: openEditRuleConditObj?.alarmDetails,
47   - });
48   - }, 10);
49   - }
50   - };
51   - setFieldsValueFunc();
52   -
53   - const resetFieldsFunc = () => {
54   - resetFields();
55   - };
56   - return {
57   - resetFieldsFunc,
58   - getFieldsValueFunc,
59   - registerForm,
60   - setFieldsValueFunc,
61   - };
62   - },
63   - });
64   -</script>
1   -import { FormSchema } from '/@/components/Table';
2   -
3   -/**
4   - * 所使用的枚举值
5   - */
6   -
7   -export enum TriggerEnum {
8   - IS_DEVICE_ACT = 'ANY_TIME',
9   - IS_TIME_ACT = 'SPECIFIC_TIME',
10   - IS_SCENE_ACT = 'CUSTOM',
11   -}
12   -
13   -export const isShiDu = (type: string) => {
14   - return type === TriggerEnum.IS_DEVICE_ACT;
15   -};
16   -export const isWenDu = (type: string) => {
17   - return type === TriggerEnum.IS_TIME_ACT;
18   -};
19   -
20   -export const isTimeAll = (type: string) => {
21   - return type === TriggerEnum.IS_SCENE_ACT;
22   -};
23   -
24   -export const formSchema: FormSchema[] = [
25   - {
26   - field: 'type',
27   - label: '报警日程表',
28   - colProps: { span: 12 },
29   - required: true,
30   - component: 'Select',
31   - defaultValue: 'ANY_TIME',
32   - componentProps: {
33   - placeholder: '请选择报警日程表',
34   - options: [
35   - { label: '始终启用', value: 'ANY_TIME' },
36   - { label: '定时启用', value: 'SPECIFIC_TIME' },
37   - { label: '自定义启用', value: 'CUSTOM' },
38   - ],
39   - },
40   - },
41   - {
42   - field: 'timezone',
43   - label: '时区',
44   - colProps: { span: 12 },
45   - required: true,
46   - component: 'Select',
47   - defaultValue: 'Asia/Shanghai (UTC+08:00)',
48   - componentProps: {
49   - placeholder: '请选择时区',
50   - options: [
51   - { label: 'Asia/Shanghai (UTC+08:00)', value: 'Asia/Shanghai' },
52   - { label: 'Africa/Accra (UTC+00:00)', value: 'Africa/Accra' },
53   - { label: 'Africa/Addis Ababa (UTC+03:00)', value: 'Africa/Addis Ababa' },
54   - { label: 'Africa/Asmara (UTC+03:00)', value: 'Africa/Asmara' },
55   - ],
56   - },
57   - ifShow: ({ values }) =>
58   - isWenDu(Reflect.get(values, 'type')) || isTimeAll(Reflect.get(values, 'type')),
59   - },
60   -
61   - {
62   - field: 'daysOfWeek1',
63   - component: 'CheckboxGroup',
64   - label: '天',
65   - colProps: {
66   - span: 8,
67   - },
68   - componentProps: {
69   - options: [
70   - {
71   - label: '星期一',
72   - value: '1',
73   - },
74   - ],
75   - },
76   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
77   - },
78   - {
79   - field: 'startsOn1',
80   - component: 'TimePicker',
81   - label: '开始时间选择',
82   - componentProps: {
83   - valueFormat: 'HH:mm:ss',
84   - },
85   - colProps: {
86   - span: 8,
87   - },
88   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
89   - },
90   - {
91   - field: 'endsOn1',
92   - component: 'TimePicker',
93   - label: '结束时间选择',
94   - componentProps: {
95   - valueFormat: 'HH:mm:ss',
96   - },
97   - colProps: {
98   - span: 8,
99   - },
100   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
101   - },
102   -
103   - {
104   - field: 'daysOfWeek2',
105   - component: 'CheckboxGroup',
106   - label: '天',
107   - colProps: {
108   - span: 8,
109   - },
110   - componentProps: {
111   - options: [
112   - {
113   - label: '星期二',
114   - value: '2',
115   - },
116   - ],
117   - },
118   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
119   - },
120   - {
121   - field: 'startsOn2',
122   - component: 'TimePicker',
123   - label: '开始时间选择',
124   - componentProps: {
125   - valueFormat: 'HH:mm:ss',
126   - },
127   - colProps: {
128   - span: 8,
129   - },
130   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
131   - },
132   - {
133   - field: 'endsOn2',
134   - component: 'TimePicker',
135   - label: '结束时间选择',
136   - componentProps: {
137   - valueFormat: 'HH:mm:ss',
138   - },
139   - colProps: {
140   - span: 8,
141   - },
142   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
143   - },
144   - {
145   - field: 'daysOfWeek3',
146   - component: 'CheckboxGroup',
147   - label: '天',
148   - colProps: {
149   - span: 8,
150   - },
151   - componentProps: {
152   - options: [
153   - {
154   - label: '星期三',
155   - value: '3',
156   - },
157   - ],
158   - },
159   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
160   - },
161   - {
162   - field: 'startsOn3',
163   - component: 'TimePicker',
164   - label: '开始时间选择',
165   - componentProps: {
166   - valueFormat: 'HH:mm:ss',
167   - },
168   - colProps: {
169   - span: 8,
170   - },
171   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
172   - },
173   - {
174   - field: 'endsOn3',
175   - component: 'TimePicker',
176   - label: '结束时间选择',
177   - componentProps: {
178   - valueFormat: 'HH:mm:ss',
179   - },
180   - colProps: {
181   - span: 8,
182   - },
183   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
184   - },
185   - {
186   - field: 'daysOfWeek4',
187   - component: 'CheckboxGroup',
188   - label: '天',
189   - colProps: {
190   - span: 8,
191   - },
192   - componentProps: {
193   - options: [
194   - {
195   - label: '星期四',
196   - value: '4',
197   - },
198   - ],
199   - },
200   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
201   - },
202   - {
203   - field: 'startsOn4',
204   - component: 'TimePicker',
205   - label: '开始时间选择',
206   - componentProps: {
207   - valueFormat: 'HH:mm:ss',
208   - },
209   - colProps: {
210   - span: 8,
211   - },
212   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
213   - },
214   - {
215   - field: 'endsOn4',
216   - component: 'TimePicker',
217   - label: '结束时间选择',
218   - componentProps: {
219   - valueFormat: 'HH:mm:ss',
220   - },
221   - colProps: {
222   - span: 8,
223   - },
224   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
225   - },
226   - {
227   - field: 'daysOfWeek5',
228   - component: 'CheckboxGroup',
229   - label: '天',
230   - colProps: {
231   - span: 8,
232   - },
233   - componentProps: {
234   - options: [
235   - {
236   - label: '星期五',
237   - value: '5',
238   - },
239   - ],
240   - },
241   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
242   - },
243   - {
244   - field: 'startsOn5',
245   - component: 'TimePicker',
246   - label: '开始时间选择',
247   - componentProps: {
248   - valueFormat: 'HH:mm:ss',
249   - },
250   - colProps: {
251   - span: 8,
252   - },
253   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
254   - },
255   - {
256   - field: 'endsOn5',
257   - component: 'TimePicker',
258   - label: '结束时间选择',
259   - componentProps: {
260   - valueFormat: 'HH:mm:ss',
261   - },
262   - colProps: {
263   - span: 8,
264   - },
265   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
266   - },
267   - {
268   - field: 'daysOfWeek6',
269   - component: 'CheckboxGroup',
270   - label: '天',
271   - colProps: {
272   - span: 8,
273   - },
274   - componentProps: {
275   - options: [
276   - {
277   - label: '星期六',
278   - value: '6',
279   - },
280   - ],
281   - },
282   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
283   - },
284   - {
285   - field: 'startsOn6',
286   - component: 'TimePicker',
287   - label: '开始时间选择',
288   - componentProps: {
289   - valueFormat: 'HH:mm:ss',
290   - },
291   - colProps: {
292   - span: 8,
293   - },
294   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
295   - },
296   - {
297   - field: 'endsOn6',
298   - component: 'TimePicker',
299   - label: '结束时间选择',
300   - componentProps: {
301   - valueFormat: 'HH:mm:ss',
302   - },
303   - colProps: {
304   - span: 8,
305   - },
306   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
307   - },
308   - {
309   - field: 'daysOfWeek7',
310   - component: 'CheckboxGroup',
311   - label: '天',
312   - colProps: {
313   - span: 8,
314   - },
315   - componentProps: {
316   - options: [
317   - {
318   - label: '星期七',
319   - value: '7',
320   - },
321   - ],
322   - },
323   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
324   - },
325   - {
326   - field: 'startsOn7',
327   - component: 'TimePicker',
328   - label: '开始时间选择',
329   - componentProps: {
330   - valueFormat: 'HH:mm:ss',
331   - },
332   - colProps: {
333   - span: 8,
334   - },
335   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
336   - },
337   - {
338   - field: 'endsOn7',
339   - component: 'TimePicker',
340   - label: '结束时间选择',
341   - componentProps: {
342   - valueFormat: 'HH:mm:ss',
343   - },
344   - colProps: {
345   - span: 8,
346   - },
347   - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'type')),
348   - },
349   -
350   - {
351   - field: 'daysOfWeek',
352   - component: 'CheckboxGroup',
353   - label: '天',
354   - colProps: {
355   - span: 24,
356   - },
357   - rules: [
358   - {
359   - message: '每周至少选择一天',
360   - trigger: 'blur',
361   - },
362   - ],
363   - componentProps: {
364   - options: [
365   - {
366   - label: '星期一',
367   - value: '1',
368   - },
369   - {
370   - label: '星期二',
371   - value: '2',
372   - },
373   - {
374   - label: '星期三',
375   - value: '3',
376   - },
377   - {
378   - label: '星期四',
379   - value: '4',
380   - },
381   - {
382   - label: '星期五',
383   - value: '5',
384   - },
385   - {
386   - label: '星期六',
387   - value: '6',
388   - },
389   - {
390   - label: '星期七',
391   - value: '7',
392   - },
393   - ],
394   - },
395   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
396   - },
397   - {
398   - field: 'startsOn',
399   - component: 'TimePicker',
400   - label: '开始时间选择',
401   - colProps: {
402   - span: 12,
403   - },
404   - componentProps: {
405   - valueFormat: 'HH:mm:ss',
406   - },
407   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
408   - },
409   - {
410   - field: 'endsOn',
411   - component: 'TimePicker',
412   - label: '结束时间选择',
413   - colProps: {
414   - span: 12,
415   - },
416   - componentProps: {
417   - valueFormat: 'HH:mm:ss',
418   - },
419   - ifShow: ({ values }) => isWenDu(Reflect.get(values, 'type')),
420   - },
421   -];
1   -<template>
2   - <BasicModal
3   - v-bind="$attrs"
4   - width="55rem"
5   - @register="register"
6   - :title="getTitle"
7   - @ok="handleSubmit"
8   - >
9   - <BasicForm :showResetButton="false" :showSubmitButton="false" @register="registerForm" />
10   - </BasicModal>
11   -</template>
12   -<script lang="ts">
13   - import { defineComponent, ref, computed, unref } from 'vue';
14   - import { BasicModal, useModalInner } from '/@/components/Modal';
15   - import { BasicForm, useForm } from '/@/components/Form';
16   - import { formSchema } from './config';
17   -
18   - export default defineComponent({
19   - name: 'DetailTemplate',
20   - components: {
21   - BasicModal,
22   - BasicForm,
23   - },
24   - emits: ['success', 'register', 'getAllFieldsEnab'],
25   - setup(_, { emit }) {
26   - const isUpdate = ref(true);
27   - const [registerForm, { getFieldsValue, resetFields }] = useForm({
28   - labelWidth: 120,
29   - schemas: formSchema,
30   - });
31   - const getTitle = computed(() => (!unref(isUpdate) ? '新增报警日程表' : '编辑报警日程表'));
32   - const [register, { closeModal }] = useModalInner((data) => {
33   - isUpdate.value = !!data?.isUpdate;
34   - });
35   - const resetDataFunc = () => {
36   - resetFields();
37   - };
38   - const handleSubmit = () => {
39   - const values = getFieldsValue();
40   - emit('getAllFieldsEnab', values);
41   - closeModal();
42   - };
43   - const getFieldsValueFunc = () => {
44   - const val = getFieldsValue();
45   - return val;
46   - };
47   - return {
48   - resetDataFunc,
49   - registerForm,
50   - handleSubmit,
51   - register,
52   - getTitle,
53   - getFieldsValueFunc,
54   - };
55   - },
56   - });
57   -</script>
1 1 import { FormSchema } from '/@/components/Form';
2 2 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi';
3 3 import { findDictItemByCode } from '/@/api/system/dict';
4   -import { alarmContactGetPage } from '/@/api/device/deviceConfigApi';
  4 +
  5 +enum EnumMQTT {
  6 + IS_DEFAULT = 'DEFAULT',
  7 + IS_MQTT = 'MQTT',
  8 + IS_PROTOBUF = 'PROTOBUF',
  9 + IS_COAP = 'COAP',
  10 + IS_LWM2M = 'LWM2M',
  11 + IS_SNMP = 'SNMP',
  12 + IS_PSM = 'PSM',
  13 + IS_DRX = 'E_DRX',
  14 + IS_EFENTO_NBIOT = 'EFENTO',
  15 +}
  16 +
  17 +const isMqtt = (type: string) => {
  18 + return type === EnumMQTT.IS_MQTT;
  19 +};
  20 +const isProtobuf = (type: string) => {
  21 + return type === EnumMQTT.IS_PROTOBUF;
  22 +};
  23 +
  24 +const isNBIOt = (type: string) => {
  25 + return type === EnumMQTT.IS_COAP;
  26 +};
  27 +
  28 +const isPsm = (type: string) => {
  29 + return type === EnumMQTT.IS_PSM;
  30 +};
  31 +
  32 +const isDrx = (type: string) => {
  33 + return type === EnumMQTT.IS_DRX;
  34 +};
  35 +
  36 +const isEfentoNb = (type: string) => {
  37 + return type === EnumMQTT.IS_EFENTO_NBIOT;
  38 +};
5 39
6 40 export const step1Schemas: FormSchema[] = [
7 41 {
... ... @@ -20,7 +54,6 @@ export const step1Schemas: FormSchema[] = [
20 54 placeholder: '请输入配置名称',
21 55 },
22 56 },
23   - //规则链(string)
24 57 {
25 58 field: 'defaultRuleChainId',
26 59 label: '规则链',
... ... @@ -74,127 +107,309 @@ export const step2Schemas: FormSchema[] = [
74 107 label: '传输方式',
75 108 defaultValue: 'DEFAULT',
76 109 componentProps: {
77   - options: [{ label: '默认', value: 'DEFAULT' }],
  110 + options: [
  111 + { label: '默认', value: 'DEFAULT' },
  112 + { label: 'MQTT', value: 'MQTT' },
  113 + { label: 'CoAP', value: 'COAP' },
  114 + ],
78 115 },
  116 + colProps: { span: 11 },
79 117 },
80   -];
81   -
82   -export const step3Schemas: FormSchema[] = [
83 118 {
84   - field: 'alarmType',
  119 + field: 'deviceTelemetryTopic',
85 120 component: 'Input',
  121 + label: '筛选器',
86 122 required: true,
87   - label: '报警类型',
88   - colProps: {
89   - span: 12,
90   - },
  123 + defaultValue: 'v1/devices/me/telemetry',
91 124 componentProps: {
92   - maxLength: 255,
93   - placeholder: '请输入报警类型',
  125 + placeholder: '请输入遥测数据 topic 筛选器',
94 126 },
  127 + colProps: { span: 11 },
  128 + ifShow: ({ values }) => isMqtt(values.transportType),
95 129 },
96   -];
97   -
98   -export const step3ViewHighSetting: FormSchema[] = [
99 130 {
100   - field: 'propagate',
101   - component: 'Checkbox',
102   - label: '传递报警',
  131 + field: 'deviceAttributesTopic',
  132 + component: 'Input',
  133 + required: true,
  134 + label: 'topic filter',
  135 + defaultValue: 'v1/devices/me/attributes',
  136 + componentProps: {
  137 + placeholder: '请输入Attributes topic 筛选器',
  138 + },
  139 + colProps: { span: 11 },
  140 + ifShow: ({ values }) => isMqtt(values.transportType),
103 141 },
104 142 {
105   - field: 'propagateRelationTypes',
106   - component: 'Input',
107   - label: '关联类型',
108   - colProps: {
109   - span: 11,
  143 + field: 'desc',
  144 + component: 'InputTextArea',
  145 + label: '描述',
  146 + defaultValue: `支持单[+]和多级[#]通配符。[+] is suitable for any topic filter level。例如:v1/devices/+/telemetry or +/devices/+/attributes。[#]可以替换 topic filter 本身,并且必须是 topic 的最后一个符号。例如:# or v1/devices/me/#。
  147 + `,
  148 + componentProps: {
  149 + autoSize: {
  150 + maxRows: 10,
  151 + },
  152 + placeholder: '请输入Attributes topic 筛选器',
110 153 },
  154 + colProps: { span: 24 },
  155 + ifShow: ({ values }) => isMqtt(values.transportType),
  156 + },
  157 + {
  158 + field: 'transportPayloadType',
  159 + component: 'Select',
  160 + label: '设备Payload',
  161 + defaultValue: 'JSON',
111 162 componentProps: {
112   - maxLength: 255,
113   - placeholder: '请输入关联类型',
  163 + options: [
  164 + { label: 'JSON', value: 'JSON' },
  165 + { label: 'PROTOBUF', value: 'PROTOBUF' },
  166 + ],
114 167 },
  168 + colProps: { span: 11 },
  169 + ifShow: ({ values }) => isMqtt(values.transportType),
115 170 },
116   -];
117   -
118   -export const step3HighSetting: FormSchema[] = [
119 171 {
120   - field: 'propagate',
  172 + field: 'useJsonPayloadFormatForDefaultDownlinkTopics',
  173 + label: '',
  174 + colProps: { span: 14 },
  175 + defaultValue: false,
121 176 component: 'Checkbox',
  177 + renderComponentContent: `启用后,平台将默认使用Protobuf有效载荷格式。如果解析失败,平台将尝试使用JSON有效负载格式。用于固件更新期间的向后兼容性。例如,固件的初始版本使用Json,而新版本使用Protobuf。在设备组的固件更新过程中,需要同时支持Protobuf和JSON。兼容性模式会导致性能轻微下降,因此建议在所有设备更新后禁用此模式。`,
  178 + ifShow: ({ values }) =>
  179 + isProtobuf(values.transportPayloadType) && !isNBIOt(values.transportType),
  180 + },
  181 + {
  182 + field: 'enableCompatibilityWithJsonPayloadFormat',
122 183 label: '',
123   - slot: 'checkBox',
  184 + colProps: { span: 14 },
  185 + defaultValue: false,
  186 + component: 'Checkbox',
  187 + renderComponentContent: `启用后,平台将使用Json有效负载格式通过以下主题推送属性和RPC:v1/devices/me/attributes/response/$request_id、v1/devices/me/attributes、v1/devices/me/RPC/request/$request_id、,v1/devices/me/rpc/response/$request id。此设置不影响使用新(v2)主题发送的属性和rpc订阅:v2/a/res/$request id、v2/a、v2/r/req/$request id、v2/r/res/$request id。其中,$request id是整数请求标识符。`,
  188 + ifShow: ({ values }) =>
  189 + isProtobuf(values.transportPayloadType) &&
  190 + !!values.useJsonPayloadFormatForDefaultDownlinkTopics &&
  191 + !isNBIOt(values.transportType),
124 192 },
125 193 {
126   - field: 'propagateRelationTypes',
127   - component: 'Input',
128   - label: '关联类型',
129   - colProps: {
130   - span: 11,
  194 + field: 'coapDeviceType',
  195 + component: 'Select',
  196 + label: 'CoAP类型',
  197 + defaultValue: 'DEFAULT',
  198 + componentProps: {
  199 + options: [
  200 + { label: '默认', value: 'DEFAULT' },
  201 + { label: 'Efento NB-IoT', value: 'EFENTO' },
  202 + ],
131 203 },
  204 + colProps: { span: 11 },
  205 + ifShow: ({ values }) => isNBIOt(values.transportType),
  206 + },
  207 + {
  208 + field: 'transportPayloadType',
  209 + component: 'Select',
  210 + label: 'Payload',
  211 + defaultValue: 'JSON',
132 212 componentProps: {
133   - maxLength: 255,
134   - placeholder: '请输入关联类型',
  213 + options: [
  214 + { label: 'JSON', value: 'JSON' },
  215 + { label: 'PROTOBUF', value: 'PROTOBUF' },
  216 + ],
135 217 },
136   - ifShow: ({ values }) => !!values.propagate,
  218 + colProps: { span: 11 },
  219 + ifShow: ({ values }) => isNBIOt(values.transportType) && !isEfentoNb(values.coapDeviceType),
137 220 },
138   -];
139   -
140   -export const dashboardFormScheme: FormSchema[] = [
141 221 {
142   - field: 'dashboardId',
  222 + field: 'powerMode',
143 223 component: 'Select',
144   - label: 'Mobile :',
145   - colProps: {
146   - span: 17,
  224 + label: 'Power Mode',
  225 + defaultValue: 'DRX',
  226 + componentProps: {
  227 + options: [
  228 + { label: 'Power Saving Mode', value: 'PSM' },
  229 + { label: 'Discontinuous Reception', value: 'DRX' },
  230 + {
  231 + label: 'Extended Discontinuous Reception',
  232 + value: 'E_DRX',
  233 + },
  234 + ],
147 235 },
  236 + colProps: { span: 11 },
  237 + ifShow: ({ values }) => isNBIOt(values.transportType),
  238 + },
  239 + {
  240 + field: 'psmActivityTimer',
  241 + component: 'InputNumber',
  242 + label: 'Timer',
  243 + required: true,
  244 + defaultValue: '10',
148 245 componentProps: {
149   - placeholder: '请选择Mobile dashboard',
150   - options: [{ label: 'DASHBOARD', value: 'DASHBOARD' }],
  246 + placeholder: '请输入PSM Activity Timer',
151 247 },
  248 + colProps: { span: 11 },
  249 + ifShow: ({ values }) => isNBIOt(values.transportType) && isPsm(values.powerMode),
152 250 },
153   -];
154   -
155   -export const alertContactsSchemas: FormSchema[] = [
156 251 {
157   - field: 'alarmContactId',
158   - label: '告警通知联系人',
159   - component: 'ApiSelect',
  252 + field: 'unit',
  253 + component: 'Select',
  254 + label: '时间单位',
  255 + defaultValue: 'second',
  256 + componentProps: {
  257 + options: [
  258 + { label: 'Milliseconds', value: 'Milliseconds' },
  259 + { label: '秒', value: 'second' },
  260 + { label: '分钟', value: 'minute' },
  261 + { label: '小时', value: 'hour' },
  262 + ],
  263 + },
  264 + colProps: { span: 11 },
  265 + ifShow: ({ values }) => isNBIOt(values.transportType) && isPsm(values.powerMode),
  266 + },
  267 + {
  268 + field: 'edrxCycle',
  269 + component: 'InputNumber',
  270 + label: 'eDRX cycle',
160 271 required: true,
  272 + defaultValue: '81',
161 273 componentProps: {
162   - mode: 'multiple',
163   - placeholder: '请选择告警通知联系人',
164   - api: alarmContactGetPage,
165   - labelField: 'username',
166   - valueField: 'id',
167   - resultField: 'items',
  274 + placeholder: '请输入PSM Activity Timer',
168 275 },
  276 + colProps: { span: 11 },
  277 + ifShow: ({ values }) => isNBIOt(values.transportType) && isDrx(values.powerMode),
169 278 },
170 279 {
171   - field: 'messageMode',
172   - label: '告警通知方式',
173   - component: 'ApiSelect',
  280 + field: 'unit',
  281 + component: 'Select',
  282 + label: '时间单位',
  283 + defaultValue: 'second',
  284 + componentProps: {
  285 + options: [
  286 + { label: 'Milliseconds', value: 'Milliseconds' },
  287 + { label: '秒', value: 'second' },
  288 + { label: '分钟', value: 'minute' },
  289 + { label: '小时', value: 'hour' },
  290 + ],
  291 + },
  292 + colProps: { span: 11 },
  293 + ifShow: ({ values }) => isNBIOt(values.transportType) && isDrx(values.powerMode),
  294 + },
  295 + {
  296 + field: 'pagingTransmissionWindow',
  297 + component: 'InputNumber',
  298 + label: 'Paging',
174 299 required: true,
  300 + defaultValue: '10',
175 301 componentProps: {
176   - mode: 'multiple',
177   - placeholder: '请选择告警通知方式',
178   - api: findDictItemByCode,
179   - params: {
180   - dictCode: 'message_type',
  302 + placeholder: '请输入Paging Transmission Window',
  303 + },
  304 + colProps: { span: 11 },
  305 + ifShow: ({ values }) => isNBIOt(values.transportType) && isDrx(values.powerMode),
  306 + },
  307 + {
  308 + field: 'unit',
  309 + component: 'Select',
  310 + label: '时间单位',
  311 + defaultValue: 'second',
  312 + componentProps: {
  313 + options: [
  314 + { label: 'Milliseconds', value: 'Milliseconds' },
  315 + { label: '秒', value: 'second' },
  316 + { label: '分钟', value: 'minute' },
  317 + { label: '小时', value: 'hour' },
  318 + ],
  319 + },
  320 + colProps: { span: 11 },
  321 + ifShow: ({ values }) => isNBIOt(values.transportType) && isDrx(values.powerMode),
  322 + },
  323 + {
  324 + field: 'deviceTelemetryProtoSchema',
  325 + label: '遥测数据',
  326 + colProps: { span: 22 },
  327 + component: 'InputTextArea',
  328 + componentProps: {
  329 + autoSize: {
  330 + maxRows: 10,
181 331 },
182   - labelField: 'itemText',
183   - valueField: 'itemValue',
184 332 },
  333 + defaultValue: `
  334 + syntax ="proto3";
  335 + package telemetry;
  336 +
  337 + message SensorDataReading {
  338 + optional double temperature = 1;
  339 + optional double humidity = 2;
  340 + InnerObject innerObject = 3;
  341 + message InnerObject {
  342 + optional string key1 = 1;
  343 + optional bool key2 = 2;
  344 + optional double key3 = 3;
  345 + optional int32 key4 = 4;
  346 + optional string key5 = 5;
  347 + }
  348 + }
  349 + `,
  350 + ifShow: ({ values }) => isProtobuf(values.transportPayloadType),
185 351 },
186   -];
  352 + {
  353 + field: 'deviceAttributesProtoSchema',
  354 + label: 'Attributes',
  355 + colProps: { span: 22 },
  356 + component: 'InputTextArea',
  357 + componentProps: {
  358 + autoSize: {
  359 + maxRows: 10,
  360 + },
  361 + },
  362 + defaultValue: `
  363 + syntax ="proto3";
  364 + package attributes;
187 365
188   -export const formChangeDetailSchema: FormSchema[] = [
  366 + message SensorConfiguration {
  367 + optional string firmwareVersion = 1;
  368 + optional string serialNumber = 2;
  369 + }
  370 + `,
  371 + ifShow: ({ values }) => isProtobuf(values.transportPayloadType),
  372 + },
189 373 {
190   - field: 'alarmDetails',
191   - label: '报警详细信息:',
192   - colProps: { span: 13 },
193   - component: 'Input',
194   - defaultValue: '',
  374 + field: 'deviceRpcRequestProtoSchema',
  375 + label: 'RPC 请求 ',
  376 + colProps: { span: 22 },
  377 + component: 'InputTextArea',
195 378 componentProps: {
196   - placeholder: '',
197   - maxLength: 255,
  379 + autoSize: {
  380 + maxRows: 10,
  381 + },
  382 + },
  383 + defaultValue: `
  384 + syntax ="proto3";
  385 + package rpc;
  386 +
  387 + message RpcRequestMsg {
  388 + optional string method = 1;
  389 + optional int32 requestId = 2;
  390 + optional string params = 3;
  391 + }
  392 + `,
  393 + ifShow: ({ values }) => isProtobuf(values.transportPayloadType),
  394 + },
  395 + {
  396 + field: 'deviceRpcResponseProtoSchema',
  397 + label: 'RPC 响应',
  398 + colProps: { span: 22 },
  399 + component: 'InputTextArea',
  400 + componentProps: {
  401 + autoSize: {
  402 + maxRows: 10,
  403 + },
198 404 },
  405 + defaultValue: `
  406 + syntax ="proto3";
  407 + package rpc;
  408 +
  409 + message RpcResponseMsg {
  410 + optional string payload = 1;
  411 + }
  412 + `,
  413 + ifShow: ({ values }) => isProtobuf(values.transportPayloadType),
199 414 },
200 415 ];
... ...
1   -interface IConfiguration {
2   - type?: string;
3   -}
4   -interface ITansportConfiguration {
5   - type?: string;
6   -}
7   -interface provisionConfigurationD {
8   - provisionDeviceSecret?: string;
9   -}
10   -type ICreateRule = {};
11   -type IClearRule = {
12   - id: string;
13   - alarmDetails: string;
14   - dashboardId: {
15   - id: string;
16   - entityType: string;
17   - };
18   - propagate: string;
19   - propagateRelationTypes: string[];
20   - schedule: {
21   - type: string;
22   - };
23   - condition: object;
24   -};
25   -interface IAlarms {
26   - id: string;
27   - alarmType: string;
28   - createRules: ICreateRule;
29   - propagate: boolean;
30   - propagateRelationTypes: string[];
31   -}
32   -
33   -export interface IProfileData {
34   - configuration?: IConfiguration;
35   - transportConfiguration?: ITansportConfiguration;
36   - provisionConfiguration?: provisionConfigurationD;
37   - alarms?: IAlarms[];
38   - clearRule?: IClearRule[];
39   -}
40   -
41   -export interface IAddAlarms {
42   - id: string;
43   - alarmType: string;
44   - createRules: [];
45   - clearRule: {};
46   - propagate: boolean;
47   - propagateRelationTypes: string[];
48   -}