Explorar o código

Merge pull request #710 from jetlinks/next-wzy

Next wzy
hear %!s(int64=3) %!d(string=hai) anos
pai
achega
14fe257367

+ 25 - 17
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/TypeModel.tsx

@@ -14,9 +14,11 @@ interface Props {
   value: any;
   type: string;
   onChange?: (data: any, source?: any) => void;
-  record?: any; //枚举值使用
+  record?: any; //功能-枚举
+  elements?: []; //属性-枚举
   name?: any;
   source?: string;
+  format?: any;
 }
 
 export default (props: Props) => {
@@ -35,19 +37,20 @@ export default (props: Props) => {
     });
     return lable?.description;
   };
-
-  const filterTree = (nodes: any[]) => {
-    if (!nodes?.length) {
-      return nodes;
+  const filterParamsData = (type?: string, data?: any[]): any[] => {
+    if (type && data) {
+      return data.filter((item) => {
+        if (item.children) {
+          const _children = filterParamsData(type, item.children);
+          item.children = _children;
+          return _children.length ? true : false;
+        } else if (item.type === type) {
+          return true;
+        }
+        return false;
+      });
     }
-    return nodes.filter((it) => {
-      const children = it.children.filter((item: any) => item.type === props.type);
-      if (children && children.length !== 0) {
-        return true;
-      }
-      it.children = filterTree(it.children);
-      return false;
-    });
+    return data || [];
   };
 
   const sourceChangeEvent = async () => {
@@ -55,7 +58,7 @@ export default (props: Props) => {
     queryBuiltInParams(FormModel.current, params).then((res: any) => {
       if (res.status === 200) {
         const _data = BuiltInParamsHandleTreeData(res.result);
-        const filterData = filterTree(_data);
+        const filterData = filterParamsData(props.type, _data);
         console.log('_data', _data);
         console.log('filterData', filterData);
         // console.log('type',props.type)
@@ -82,6 +85,7 @@ export default (props: Props) => {
 
   useEffect(() => {
     setValue(props.value);
+    console.log('typemodel', props.value);
   }, [props.value]);
 
   const renderNode = (type: string) => {
@@ -105,7 +109,7 @@ export default (props: Props) => {
           <Select
             value={value}
             style={{ width: '100%', textAlign: 'left' }}
-            options={props.record?.options || []}
+            options={props.record?.options || props.elements || []}
             fieldNames={{ label: 'text', value: 'value' }}
             placeholder={'请选择'}
             mode="multiple"
@@ -172,7 +176,11 @@ export default (props: Props) => {
             onOpen={(param) => {
               setDateOpen(param);
             }}
-            value={moment(value, 'HH:mm:ss')}
+            type={props.format}
+            value={moment(
+              value ? value : new Date(),
+              props.format === 'HH:mm:ss' ? 'HH:mm:ss' : 'yyyy-MM-dd HH:mm:ss',
+            )}
             onChange={(_: any, timeString: string) => {
               setValue(timeString);
               setLabelValue(timeString);
@@ -227,7 +235,7 @@ export default (props: Props) => {
             defaultExpandAll
             fieldNames={{ title: 'name', key: 'id' }}
             onSelect={(selectedKeys, e) => {
-              console.log(e.node);
+              // console.log(e.node);
               setDateOpen(false);
               setLabelValue(e.node.description);
               setValue(selectedKeys[0]);

+ 8 - 2
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/WriteProperty.tsx

@@ -25,6 +25,8 @@ export default (props: Props) => {
   const [propertiesType, setPropertiesType] = useState('');
   const [source, setSource] = useState<string>('fixed');
   const textRef = useRef<any>('');
+  const [format, setFormat] = useState<any>('HH:mm:ss');
+  const [enumList, setEnumList] = useState<any>([]);
 
   useEffect(() => {
     console.log(props.value);
@@ -79,10 +81,12 @@ export default (props: Props) => {
           style={{ width: '100%' }}
           placeholder={'请选择属性'}
           onChange={(e, option) => {
+            // console.log(option);
             setPropertiesId(e);
             setPropertiesType(option.valueType.type);
+            setFormat(option.valueType?.format);
+            setEnumList(option.valueType?.elements);
             textRef.current = option.name;
-            console.log(option);
             setPropertiesValue(undefined);
           }}
         ></Select>
@@ -94,8 +98,10 @@ export default (props: Props) => {
             type={propertiesType}
             name={props.name}
             source={source}
+            format={format}
+            elements={enumList}
             onChange={(value, sources) => {
-              console.log(value, sources);
+              // console.log(value, sources);
               setPropertiesValue(value);
               setSource(sources);
             }}

+ 10 - 1
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/functionCall.tsx

@@ -23,6 +23,7 @@ export default (props: FunctionCallProps) => {
   const formRef = useRef<ProFormInstance<any>>();
 
   useEffect(() => {
+    console.log(props.value, props.functionData);
     if (props.functionData && props.functionData.length) {
       setEditableRowKeys(props.functionData.map((d) => d.id));
       if (props.value) {
@@ -53,7 +54,15 @@ export default (props: FunctionCallProps) => {
 
   const getItemNode = (record: any) => {
     const type = record.type;
-    return <TypeModel value={record.value} type={type} record={record} name={props.name} />;
+    return (
+      <TypeModel
+        value={record.value}
+        type={type}
+        record={record}
+        name={props.name}
+        format={record?.format}
+      />
+    );
   };
 
   const columns: ProColumns<FunctionTableDataType>[] = [

+ 2 - 2
src/pages/rule-engine/Scene/Save/action/DeviceOutput/device/index.tsx

@@ -266,7 +266,7 @@ export default observer((props: Props) => {
       return nodes;
     }
     return nodes.filter((it) => {
-      if (it.children.find((item: any) => item.id.indexOf('deviceId') > -1)) {
+      if (it.children.find((item: any) => item.id.indexOf('deviceId' || 'device_id') > -1)) {
         return true;
       }
       return false;
@@ -457,7 +457,7 @@ export default observer((props: Props) => {
       form.setFieldsValue({ selector: DeviceModel.selector });
     }
     sourceChangeEvent();
-    // console.log('-----deviceid-----', DeviceModel.deviceId);
+    console.log('-----deviceid-----', DeviceModel.deviceId);
     if (DeviceModel.deviceId) {
       service.detail(DeviceModel.deviceId).then((res) => {
         if (res.status === 200) {

+ 1 - 1
src/pages/rule-engine/Scene/Save/action/DeviceOutput/index.less

@@ -25,7 +25,7 @@
     width: 237px;
     //width: 100%;
     padding: 12px 16px;
-    border: 1px solid rgba(#e0e4e8, 0.6);
+    border: 1px solid #e0e4e8;
     border-radius: 2px;
     cursor: pointer;
     transition: all 0.3s;

+ 22 - 5
src/pages/rule-engine/Scene/Save/action/DeviceOutput/index.tsx

@@ -49,8 +49,8 @@ export default observer((props: Props) => {
   ];
   const next = () => {
     if (
-      (DeviceModel.current === 0 && DeviceModel.productId.length !== 0) ||
-      (DeviceModel.current === 1 && DeviceModel.deviceId.length !== 0)
+      (DeviceModel.current === 0 && DeviceModel.productId) ||
+      (DeviceModel.current === 1 && DeviceModel.deviceId)
     ) {
       return (DeviceModel.current += 1);
     } else {
@@ -120,13 +120,13 @@ export default observer((props: Props) => {
       }));
       // console.log(_options.taglist, 'taglist')
     }
-    // console.log(item);
+    console.log(item);
     props.save(item, _options);
-
     init();
   };
 
   useEffect(() => {
+    console.log(props.value);
     if (props.value) {
       DeviceModel.selector = props.value.selector;
       DeviceModel.productId = props.value.productId;
@@ -186,7 +186,24 @@ export default observer((props: Props) => {
       }
     >
       <div className="steps-steps">
-        <Steps current={DeviceModel.current} items={DeviceModel.steps} />
+        <Steps
+          current={DeviceModel.current}
+          items={DeviceModel.steps}
+          onChange={(value) => {
+            console.log(value);
+            if (value === 1) {
+              return DeviceModel.productId
+                ? (DeviceModel.current = 1)
+                : onlyMessage('请选择产品', 'error');
+            } else if (value === 2) {
+              return DeviceModel.deviceId
+                ? (DeviceModel.current = 2)
+                : onlyMessage('请选择设备', 'error');
+            } else {
+              return (DeviceModel.current = 0);
+            }
+          }}
+        />
       </div>
       <div className="steps-content">{DeviceModel.steps[DeviceModel.current]?.content}</div>
     </Modal>

+ 1 - 4
src/pages/rule-engine/Scene/Save/action/ListItem/Item.tsx

@@ -165,11 +165,8 @@ export default (props: ItemProps) => {
         return (
           <div>
             {`${data?.options?.type} ${data?.options?.name} ${data?.options?.properties} ${
-              data?.options?.propertiesValue || ''
+              data?.options?.propertiesValue ? `为 ${data?.options?.propertiesValue}` : ''
             }`}
-            {/* {data?.options?.type}
-            <span>{data?.options?.name}</span>
-            {data?.options?.properties} */}
           </div>
         );
       case 'tag':

+ 16 - 0
src/pages/rule-engine/Scene/Save/components/ParamsSelect/components/MTimePicker/index.less

@@ -23,3 +23,19 @@
     }
   }
 }
+
+.manual-box-date {
+  position: relative;
+  width: 447px;
+  height: 320px;
+  .manual-date-picker {
+    position: absolute;
+    top: -2px;
+    left: 0;
+    border: none;
+    visibility: hidden;
+    .ant-picker-input {
+      display: none !important;
+    }
+  }
+}

+ 53 - 23
src/pages/rule-engine/Scene/Save/components/ParamsSelect/components/MTimePicker/index.tsx

@@ -1,10 +1,11 @@
-import { TimePicker } from 'antd';
+import { TimePicker, DatePicker } from 'antd';
 import './index.less';
 import type { TimePickerProps } from 'antd/lib/time-picker';
 import { useEffect, useState } from 'react';
 
 type Props = TimePickerProps & {
   onOpen?: (open: boolean) => void;
+  type?: string;
 };
 
 export default (props: Props) => {
@@ -12,31 +13,60 @@ export default (props: Props) => {
 
   useEffect(() => {
     setMyValue(props.value);
+    // console.log('moment',props.value)
   }, [props.value]);
 
   return (
-    <div id={'manual-box'} className={'manual-box'}>
-      <TimePicker
-        {...props}
-        value={myValue}
-        onChange={(value, timeString) => {
-          console.log('MTime', value);
-          setMyValue(value);
-          props.onChange?.(value, timeString);
-        }}
-        className={'manual-time-picker'}
-        popupClassName={'my-manual-time-picker'}
-        open
-        onOk={() => {
-          if (props.onOpen) {
-            props.onOpen(false);
-          }
-        }}
-        // @ts-ignore
-        getPopupContainer={(trigger) => {
-          return trigger && trigger?.parentNode ? trigger.parentNode : document.body;
-        }}
-      />
+    <div>
+      {props.type === 'yyyy-MM-dd' ? (
+        <div id={'manual-box'} className={'manual-box'}>
+          <TimePicker
+            {...props}
+            value={myValue}
+            onChange={(value, timeString) => {
+              // console.log('MTime', value);
+              setMyValue(value);
+              props.onChange?.(value, timeString);
+            }}
+            className={'manual-time-picker'}
+            popupClassName={'my-manual-time-picker'}
+            open
+            onOk={() => {
+              if (props.onOpen) {
+                props.onOpen(false);
+              }
+            }}
+            // @ts-ignore
+            getPopupContainer={(trigger) => {
+              return trigger && trigger?.parentNode ? trigger.parentNode : document.body;
+            }}
+          />
+        </div>
+      ) : (
+        <div id={'manual-box-date'} className={'manual-box-date'}>
+          {/* @ts-ignore */}
+          <DatePicker
+            className={'manual-date-picker'}
+            popupClassName={'my-manual-time-picker'}
+            showTime
+            open
+            // @ts-ignore
+            getPopupContainer={(trigger) => {
+              return trigger && trigger?.parentNode ? trigger.parentNode : document.body;
+            }}
+            value={myValue}
+            onChange={(value, timeString) => {
+              setMyValue(value);
+              props.onChange?.(value, timeString);
+            }}
+            onOk={() => {
+              if (props.onOpen) {
+                props.onOpen(false);
+              }
+            }}
+          />
+        </div>
+      )}
     </div>
   );
 };

+ 10 - 2
src/pages/rule-engine/Scene/Save/components/ParamsSelect/index.tsx

@@ -42,6 +42,12 @@ export default (props: Props) => {
   }, [props.value]);
 
   useEffect(() => {
+    if (props.labelValue) {
+      setValue(props.labelValue);
+    }
+  }, [props.labelValue]);
+
+  useEffect(() => {
     // console.log(props.open)
     if (props.open !== undefined) {
       setOpen(props.open);
@@ -62,8 +68,10 @@ export default (props: Props) => {
                   key={item.key}
                   className={classNames('select-header-title', item.key === tabKey ? 'active' : '')}
                   onClick={() => {
+                    // console.log('----------',item.key)
                     setTabKey(item.key);
-                    props.onChange(value, item.key);
+                    setValue(undefined);
+                    props.onChange(undefined, item.key);
                   }}
                 >
                   {item.label}
@@ -84,7 +92,7 @@ export default (props: Props) => {
           suffix={<DownOutlined style={{ color: 'rgba(0, 0, 0, 0.25)' }} />}
           {...props.inputProps}
           readOnly
-          value={props.labelValue ? props.labelValue : value}
+          value={value}
           onChange={(e) => {
             setValue(e.target.value);
             props.onChange(value, tabKey);