wzyyy 3 лет назад
Родитель
Сommit
f8b164e138

+ 24 - 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)
@@ -105,7 +108,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 +175,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 +234,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]);

+ 9 - 3
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/WriteProperty.tsx

@@ -25,9 +25,11 @@ 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);
+    // console.log(props.value);
     if (props.value) {
       if (props.properties && props.properties.length) {
         if (0 in 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) {

+ 4 - 4
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;

+ 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>
   );
 };

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

@@ -42,6 +42,10 @@ export default (props: Props) => {
   }, [props.value]);
 
   useEffect(() => {
+    setValue(props.labelValue);
+  }, [props.labelValue]);
+
+  useEffect(() => {
     // console.log(props.open)
     if (props.open !== undefined) {
       setOpen(props.open);
@@ -62,8 +66,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 +90,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);