100011797 3 лет назад
Родитель
Сommit
fab6cccfc0

+ 2 - 2
src/components/Metadata/EditTable/index.tsx

@@ -168,8 +168,8 @@ Editable.Popover = observer((props) => {
         </div>
         <CloseOutlined
           onClick={() => {
-            // setVisible(false);
-            closePopover();
+            setVisible(false);
+            // closePopover();
           }}
         />
       </div>

+ 64 - 12
src/components/Metadata/JsonParam/index.tsx

@@ -45,16 +45,66 @@ const JsonParam = observer((props: Props) => {
       return _data;
     });
 
-  const checkArray: any = (arr: any) => {
+  // const checkArray: any = (arr: any) => {
+  //   if (Array.isArray(arr) && arr.length) {
+  //     return arr.every((item: any) => {
+  //       if (item.valueType?.type === 'object') {
+  //         return item.id && item.name && checkArray(item.json?.properties);
+  //       }
+  //       return item.id && item.name && item.valueType;
+  //     });
+  //   }
+  //   return false;
+  // };
+
+  const checkArrayFormat: any = (arr: any) => {
+    const reg = new RegExp('^[0-9a-zA-Z_\\\\-]+$');
+    let str: string = '';
     if (Array.isArray(arr) && arr.length) {
-      return arr.every((item: any) => {
-        if (item.valueType?.type === 'object') {
-          return item.id && item.name && checkArray(item.json?.properties);
+      arr.every((item: any) => {
+        if (!item.id) {
+          str = '请输入标识';
+          return false;
+        }
+        if (!item.name) {
+          str = '请输入名称';
+          return false;
+        }
+        if (!item.valueType?.type) {
+          str = '请选择数据类型';
+          return false;
+        }
+        if (!reg.exec(item.id)) {
+          str = '标识只能由数字、字母、下划线、中划线组成';
+          return false;
+        }
+        if (item.id.length > 64 && item.name.length > 64) {
+          str = '标识最多可输入64个字符';
+          return false;
+        }
+        if (item.name.length > 64) {
+          str = '名称最多可输入64个字符';
+          return false;
+        }
+        if (item.valueType?.type === 'boolean') {
+          if (!(item.valueType.falseText && item.valueType.trueText)) {
+            str = '请输入布尔值';
+            return false;
+          }
+          if (
+            item.valueType.falseValue === '' ||
+            item.valueType.trueValue === '' ||
+            item.valueType.falseValue === undefined ||
+            item.valueType.trueValue === undefined
+          ) {
+            str = '请输入布尔值';
+            return false;
+          }
         }
-        return item.id && item.name && item.valueType;
+        return item.id && item.name && item.valueType?.type;
       });
     }
-    return false;
+    return str;
   };
 
   const schema: ISchema = {
@@ -80,12 +130,8 @@ const JsonParam = observer((props: Props) => {
                 if (props.keys === 'inputs' && value.length === 0) {
                   resolve('');
                 }
-                const flag = checkArray(value);
-                if (!!flag) {
-                  resolve('');
-                } else {
-                  resolve('请配置参数');
-                }
+                const str = checkArrayFormat(value);
+                resolve(str);
               });
             },
           },
@@ -162,6 +208,12 @@ const JsonParam = observer((props: Props) => {
                           item.value,
                         ),
                       ),
+                      'x-validator': [
+                        {
+                          required: true,
+                          message: '请选择数据类型',
+                        },
+                      ],
                     },
                     booleanConfig: {
                       title: '布尔值',

+ 24 - 0
src/pages/DataCollect/Collector/components/Point/Save/modbus.tsx

@@ -209,6 +209,30 @@ export default (props: Props) => {
               {
                 checkAddressLength: true,
               },
+              {
+                triggerType: 'onBlur',
+                validator: (value: string) => {
+                  return new Promise((resolve) => {
+                    service
+                      ._validateField(props.collector?.id || '', {
+                        pointKey: value,
+                      })
+                      .then((resp) => {
+                        if (resp.status === 200) {
+                          if (resp.result.passed) {
+                            resolve('');
+                          } else {
+                            resolve('改地址已存在');
+                          }
+                        }
+                        resolve('');
+                      })
+                      .catch(() => {
+                        return '验证失败!';
+                      });
+                  });
+                },
+              },
             ],
           },
           'configuration.parameter.quantity': {

+ 5 - 0
src/pages/DataCollect/service.ts

@@ -169,6 +169,11 @@ class Service {
       method: 'POST',
       data: params,
     });
+  public _validateField = (id: string, data?: any) =>
+    request(`/${SystemConst.API_BASE}/data-collect/point/${id}/_validate`, {
+      method: 'GET',
+      params: data,
+    });
 }
 
 const service = new Service();