Commit 0c2aa8b9815b6d9a5c072c350964d8caa5a504ea

Authored by fengtao
1 parent 627dbda5

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

@@ -13,8 +13,6 @@ @@ -13,8 +13,6 @@
13 <a-steps :current="current"> 13 <a-steps :current="current">
14 <a-step title="设备配置" /> 14 <a-step title="设备配置" />
15 <a-step title="传输配置" /> 15 <a-step title="传输配置" />
16 - <a-step title="告警配置" />  
17 - <a-step title="告警通知" />  
18 </a-steps> 16 </a-steps>
19 </div> 17 </div>
20 <div class="mt-5"> 18 <div class="mt-5">
@@ -25,29 +23,9 @@ @@ -25,29 +23,9 @@
25 <!-- 设备配置 --> 23 <!-- 设备配置 -->
26 <!-- 传输配置 --> 24 <!-- 传输配置 -->
27 <div v-show="current === 1"> 25 <div v-show="current === 1">
28 - <DeviceProfileStep2  
29 - ref="DeviceProfileStep2Ref"  
30 - @prev="handleStepPrev"  
31 - @next="handleStep2Next" 26 + <DeviceProfileStep2 ref="DeviceProfileStep2Ref" @prev="handleStepPrev"
32 /></div> 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 </div> 29 </div>
52 </BasicModal> 30 </BasicModal>
53 </div> 31 </div>
@@ -65,8 +43,6 @@ @@ -65,8 +43,6 @@
65 import { BasicModal, useModalInner } from '/@/components/Modal'; 43 import { BasicModal, useModalInner } from '/@/components/Modal';
66 import DeviceProfileStep1 from '/@/views/device/profiles/step/DeviceProfileStep1.vue'; 44 import DeviceProfileStep1 from '/@/views/device/profiles/step/DeviceProfileStep1.vue';
67 import DeviceProfileStep2 from '/@/views/device/profiles/step/DeviceProfileStep2.vue'; 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 import { Steps } from 'ant-design-vue'; 46 import { Steps } from 'ant-design-vue';
71 import { deviceConfigAddOrEdit, deviceConfigGetDetail } from '/@/api/device/deviceConfigApi'; 47 import { deviceConfigAddOrEdit, deviceConfigGetDetail } from '/@/api/device/deviceConfigApi';
72 import { useMessage } from '/@/hooks/web/useMessage'; 48 import { useMessage } from '/@/hooks/web/useMessage';
@@ -77,56 +53,33 @@ @@ -77,56 +53,33 @@
77 BasicModal, 53 BasicModal,
78 DeviceProfileStep1, 54 DeviceProfileStep1,
79 DeviceProfileStep2, 55 DeviceProfileStep2,
80 - DeviceProfileStep3,  
81 - DeviceProfileStep4,  
82 [Steps.name]: Steps, 56 [Steps.name]: Steps,
83 [Steps.Step.name]: Steps.Step, 57 [Steps.Step.name]: Steps.Step,
84 }, 58 },
85 props: { 59 props: {
86 userData: { type: Object }, 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 setup(_, { emit }) { 63 setup(_, { emit }) {
97 const { proxy } = getCurrentInstance() as any; 64 const { proxy } = getCurrentInstance() as any;
98 const DeviceProfileStep1Ref = ref(null); 65 const DeviceProfileStep1Ref = ref(null);
99 const DeviceProfileStep2Ref = ref(null); 66 const DeviceProfileStep2Ref = ref(null);
100 - const DeviceProfileStep3Ref = ref(null);  
101 - const DeviceProfileStep4Ref = ref(null);  
102 const { createMessage } = useMessage(); 67 const { createMessage } = useMessage();
103 - const postDeviceConfogData: any = ref({}); 68 + let postDeviceConfogData: any = reactive({});
104 let getStepOneData: any = reactive({}); 69 let getStepOneData: any = reactive({});
105 let getStepTwoData: any = reactive({}); 70 let getStepTwoData: any = reactive({});
106 const editData: any = ref({}); 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 const postEditId = ref(''); 72 const postEditId = ref('');
120 const current = ref(0); 73 const current = ref(0);
121 const isUpdate = ref(0); 74 const isUpdate = ref(0);
122 - const getAlarmContactId = ref('');  
123 - const getMessageMode = ref('');  
124 - const isStatus: any = ref(null);  
125 const isShowOkBtnFalse = ref(true); 75 const isShowOkBtnFalse = ref(true);
126 - const isShowRule = ref(true);  
127 - const isEditAndChange = ref(true);  
128 - const isEchoEditStatus = ref(false);  
129 const isNextStatus = ref(false); 76 const isNextStatus = ref(false);
  77 + let transportTypeObj = reactive({
  78 + transportType: '',
  79 + });
  80 + const profileDataObj = reactive({
  81 + profileData: null,
  82 + });
130 83
131 const getTitle = computed(() => 84 const getTitle = computed(() =>
132 isUpdate.value == 1 ? '新增设备配置' : isUpdate.value == 2 ? '编辑设备配置' : '设备配置详情' 85 isUpdate.value == 1 ? '新增设备配置' : isUpdate.value == 2 ? '编辑设备配置' : '设备配置详情'
@@ -136,16 +89,11 @@ @@ -136,16 +89,11 @@
136 isUpdate.value = data.isUpdate; 89 isUpdate.value = data.isUpdate;
137 if (isUpdate.value == 1) { 90 if (isUpdate.value == 1) {
138 handleCancel(); 91 handleCancel();
139 - isShowRule.value = true;  
140 isShowOkBtnFalse.value = true; 92 isShowOkBtnFalse.value = true;
141 current.value = 0; 93 current.value = 0;
142 - isStatus.value = !data.isUpdate;  
143 - isEchoEditStatus.value = false;  
144 } else if (isUpdate.value == 2) { 94 } else if (isUpdate.value == 2) {
145 handleCancel(); 95 handleCancel();
146 - isShowRule.value = true;  
147 isShowOkBtnFalse.value = true; 96 isShowOkBtnFalse.value = true;
148 - isEchoEditStatus.value = true;  
149 current.value = 0; 97 current.value = 0;
150 postEditId.value = data.record.id; 98 postEditId.value = data.record.id;
151 editData.value = await deviceConfigGetDetail(postEditId.value); 99 editData.value = await deviceConfigGetDetail(postEditId.value);
@@ -158,7 +106,6 @@ @@ -158,7 +106,6 @@
158 }); 106 });
159 } else if (isUpdate.value == 3) { 107 } else if (isUpdate.value == 3) {
160 handleCancel(); 108 handleCancel();
161 - isShowRule.value = false;  
162 isShowOkBtnFalse.value = false; 109 isShowOkBtnFalse.value = false;
163 current.value = 0; 110 current.value = 0;
164 postEditId.value = data.record.id; 111 postEditId.value = data.record.id;
@@ -181,188 +128,64 @@ @@ -181,188 +128,64 @@
181 if (isNextStatus.value) { 128 if (isNextStatus.value) {
182 getStepOneData = { 129 getStepOneData = {
183 ...v, 130 ...v,
184 - ...{ icon: v1 }, 131 + ...{ image: v1 },
185 }; 132 };
186 } 133 }
187 current.value++; 134 current.value++;
188 if (isUpdate.value == 2) { 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 } else if (isUpdate.value == 3) { 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 const handleCancel = () => { 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 function handleRedo() { 181 function handleRedo() {
354 current.value = 0; 182 current.value = 0;
355 } 183 }
356 return { 184 return {
357 - isShowRule,  
358 isShowOkBtnFalse, 185 isShowOkBtnFalse,
359 - isStatus,  
360 DeviceProfileStep2Ref, 186 DeviceProfileStep2Ref,
361 - DeviceProfileStep3Ref,  
362 - DeviceProfileStep4Ref,  
363 DeviceProfileStep1Ref, 187 DeviceProfileStep1Ref,
364 editData, 188 editData,
365 - handleStep3Next,  
366 handleSubmit, 189 handleSubmit,
367 handleCancel, 190 handleCancel,
368 register, 191 register,
@@ -371,7 +194,6 @@ @@ -371,7 +194,6 @@
371 current, 194 current,
372 handleStepPrev, 195 handleStepPrev,
373 handleStepNext1, 196 handleStepNext1,
374 - handleStep2Next,  
375 handleRedo, 197 handleRedo,
376 }; 198 };
377 }, 199 },
@@ -14,8 +14,8 @@ @@ -14,8 +14,8 @@
14 :before-upload="beforeUploadqrcodePic" 14 :before-upload="beforeUploadqrcodePic"
15 > 15 >
16 <img 16 <img
17 - v-if="peresonalPic || echoPic"  
18 - :src="peresonalPic != '' ? peresonalPic : echoPic" 17 + v-if="peresonalPic"
  18 + :src="peresonalPic"
19 alt="avatar" 19 alt="avatar"
20 style="width: 6.25rem; height: 6.25rem" 20 style="width: 6.25rem; height: 6.25rem"
21 /> 21 />
@@ -54,8 +54,8 @@ @@ -54,8 +54,8 @@
54 emits: ['next', 'resetFunc', 'register'], 54 emits: ['next', 'resetFunc', 'register'],
55 setup(_, { emit }) { 55 setup(_, { emit }) {
56 const { createMessage } = useMessage(); 56 const { createMessage } = useMessage();
57 - const echoPic = ref('');  
58 const peresonalPic = ref(''); 57 const peresonalPic = ref('');
  58 +
59 const [register, { validate, setFieldsValue, resetFields }] = useForm({ 59 const [register, { validate, setFieldsValue, resetFields }] = useForm({
60 labelWidth: 100, 60 labelWidth: 100,
61 schemas: step1Schemas, 61 schemas: step1Schemas,
@@ -71,14 +71,7 @@ @@ -71,14 +71,7 @@
71 //回显数据 71 //回显数据
72 const setStepOneFieldsValueFunc = (v) => { 72 const setStepOneFieldsValueFunc = (v) => {
73 setFieldsValue(v); 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 const customUploadqrcodePic = async ({ file }) => { 76 const customUploadqrcodePic = async ({ file }) => {
84 if (beforeUploadqrcodePic(file)) { 77 if (beforeUploadqrcodePic(file)) {
@@ -90,7 +83,6 @@ @@ -90,7 +83,6 @@
90 } 83 }
91 } 84 }
92 }; 85 };
93 -  
94 const beforeUploadqrcodePic = (file: FileItem) => { 86 const beforeUploadqrcodePic = (file: FileItem) => {
95 const isJpgOrPng = 87 const isJpgOrPng =
96 file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg'; 88 file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg';
@@ -103,15 +95,15 @@ @@ -103,15 +95,15 @@
103 } 95 }
104 return isJpgOrPng && isLt2M; 96 return isJpgOrPng && isLt2M;
105 }; 97 };
  98 +
106 async function customSubmitFunc() { 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 const customResetStepOneFunc = () => { 104 const customResetStepOneFunc = () => {
114 resetFields(); 105 resetFields();
  106 + peresonalPic.value = '';
115 }; 107 };
116 const getStep1Func = async () => { 108 const getStep1Func = async () => {
117 const valueStep1 = await validate(); 109 const valueStep1 = await validate();
@@ -122,8 +114,6 @@ @@ -122,8 +114,6 @@
122 }; 114 };
123 }; 115 };
124 return { 116 return {
125 - editIconFunc,  
126 - resetIconFunc,  
127 register, 117 register,
128 setStepOneFieldsValueFunc, 118 setStepOneFieldsValueFunc,
129 customResetStepOneFunc, 119 customResetStepOneFunc,
@@ -132,7 +122,6 @@ @@ -132,7 +122,6 @@
132 beforeUploadqrcodePic, 122 beforeUploadqrcodePic,
133 customUploadqrcodePic, 123 customUploadqrcodePic,
134 getStep1Func, 124 getStep1Func,
135 - echoPic,  
136 }; 125 };
137 }, 126 },
138 }); 127 });
1 <template> 1 <template>
2 <div class="step2"> 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 </div> 23 </div>
23 </div> 24 </div>
24 </div> 25 </div>
25 </template> 26 </template>
26 <script lang="ts"> 27 <script lang="ts">
27 - import { defineComponent } from 'vue'; 28 + import { defineComponent, reactive } from 'vue';
28 import { BasicForm, useForm } from '/@/components/Form'; 29 import { BasicForm, useForm } from '/@/components/Form';
29 import { step2Schemas } from './data'; 30 import { step2Schemas } from './data';
30 import { Alert, Divider, Descriptions } from 'ant-design-vue'; 31 import { Alert, Divider, Descriptions } from 'ant-design-vue';
@@ -41,7 +42,33 @@ @@ -41,7 +42,33 @@
41 }, 42 },
42 emits: ['next', 'prev', 'register'], 43 emits: ['next', 'prev', 'register'],
43 setup(_, { emit }) { 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 labelWidth: 80, 72 labelWidth: 80,
46 schemas: step2Schemas, 73 schemas: step2Schemas,
47 actionColOptions: { 74 actionColOptions: {
@@ -49,7 +76,32 @@ @@ -49,7 +76,32 @@
49 }, 76 },
50 }); 77 });
51 const setStepTwoFieldsValueFunc = (v) => { 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 const customClearStepTwoValueFunc = () => { 106 const customClearStepTwoValueFunc = () => {
55 resetFields(); 107 resetFields();
@@ -57,23 +109,39 @@ @@ -57,23 +109,39 @@
57 async function customResetFunc() { 109 async function customResetFunc() {
58 emit('prev'); 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 return { 143 return {
75 customResetFunc, 144 customResetFunc,
76 - customSubmitFunc,  
77 register, 145 register,
78 setStepTwoFieldsValueFunc, 146 setStepTwoFieldsValueFunc,
79 customClearStepTwoValueFunc, 147 customClearStepTwoValueFunc,
@@ -84,7 +152,16 @@ @@ -84,7 +152,16 @@
84 </script> 152 </script>
85 <style lang="less" scoped> 153 <style lang="less" scoped>
86 .step2 { 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 </style> 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 import { FormSchema } from '/@/components/Form'; 1 import { FormSchema } from '/@/components/Form';
2 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi'; 2 import { deviceConfigGetRuleChain } from '/@/api/device/deviceConfigApi';
3 import { findDictItemByCode } from '/@/api/system/dict'; 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 export const step1Schemas: FormSchema[] = [ 40 export const step1Schemas: FormSchema[] = [
7 { 41 {
@@ -20,7 +54,6 @@ export const step1Schemas: FormSchema[] = [ @@ -20,7 +54,6 @@ export const step1Schemas: FormSchema[] = [
20 placeholder: '请输入配置名称', 54 placeholder: '请输入配置名称',
21 }, 55 },
22 }, 56 },
23 - //规则链(string)  
24 { 57 {
25 field: 'defaultRuleChainId', 58 field: 'defaultRuleChainId',
26 label: '规则链', 59 label: '规则链',
@@ -74,127 +107,309 @@ export const step2Schemas: FormSchema[] = [ @@ -74,127 +107,309 @@ export const step2Schemas: FormSchema[] = [
74 label: '传输方式', 107 label: '传输方式',
75 defaultValue: 'DEFAULT', 108 defaultValue: 'DEFAULT',
76 componentProps: { 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 component: 'Input', 120 component: 'Input',
  121 + label: '筛选器',
86 required: true, 122 required: true,
87 - label: '报警类型',  
88 - colProps: {  
89 - span: 12,  
90 - }, 123 + defaultValue: 'v1/devices/me/telemetry',
91 componentProps: { 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 componentProps: { 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 component: 'Checkbox', 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 label: '', 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 componentProps: { 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 component: 'Select', 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 componentProps: { 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 required: true, 271 required: true,
  272 + defaultValue: '81',
161 componentProps: { 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 required: true, 299 required: true,
  300 + defaultValue: '10',
175 componentProps: { 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 componentProps: { 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 -}