hear 3 лет назад
Родитель
Сommit
0e6f4cb245

+ 20 - 6
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/TypeModel.tsx

@@ -16,22 +16,33 @@ interface Props {
   onChange?: (data: any, source?: any) => void;
   record?: any; //枚举值使用
   name?: any;
+  source?: string;
 }
 
 export default (props: Props) => {
   const [value, setValue] = useState<any>(props.value || '');
   const [visible, setVisible] = useState<boolean>(false);
   const [objVisiable, setObjVisable] = useState<boolean>(false);
-  const [source, setSource] = useState<string>('fixed');
+  const [source, setSource] = useState<string>(props.source || 'fixed');
   const [builtInList, setBuiltInList] = useState<any[]>([]);
+  const [labelValue, setLabelValue] = useState<any>('');
+
+  const filterTree = (nodes: any[]) => {
+    let lable: any;
+    nodes.forEach((item) => {
+      lable = item.children?.find((it: any) => it.id === props.value);
+    });
+    return lable?.description;
+  };
 
   const sourceChangeEvent = async () => {
     const params = props?.name - 1 >= 0 ? { action: props?.name - 1 } : undefined;
     queryBuiltInParams(FormModel.current, params).then((res: any) => {
       if (res.status === 200) {
         const _data = BuiltInParamsHandleTreeData(res.result);
-        console.log(_data);
         setBuiltInList(_data);
+        const label = filterTree(_data);
+        setLabelValue(label);
       }
     });
   };
@@ -173,10 +184,12 @@ export default (props: Props) => {
           height={300}
           defaultExpandAll
           fieldNames={{ title: 'name', key: 'id' }}
-          onSelect={(selectedKeys) => {
+          onSelect={(selectedKeys, e) => {
+            console.log(e.node);
+            setLabelValue(e.node.description);
             setValue(selectedKeys[0]);
             if (props.onChange) {
-              props.onChange(selectedKeys[0]);
+              props.onChange(selectedKeys[0], source);
             }
           }}
         />
@@ -191,11 +204,11 @@ export default (props: Props) => {
         inputProps={{
           placeholder: '请选择',
         }}
-        tabKey={'fixed'}
+        tabKey={source}
         itemList={itemList}
         value={value}
         onChange={(val: any, tabKey: any) => {
-          // console.log(val,tabKey)
+          console.log(val, tabKey);
           setValue(val);
           setSource(tabKey);
           if (props.onChange) {
@@ -203,6 +216,7 @@ export default (props: Props) => {
           }
         }}
         type={props.type}
+        labelValue={labelValue}
       />
       {visible && (
         <AMap

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

@@ -26,7 +26,7 @@ export default (props: Props) => {
   const [source, setSource] = useState<string>('fixed');
 
   useEffect(() => {
-    // console.log(props.value);
+    console.log(props.value);
     if (props.value) {
       if (props.properties && props.properties.length) {
         if (0 in props.value) {
@@ -34,10 +34,10 @@ export default (props: Props) => {
         } else if ('undefined' in props.value) {
           setPropertiesValue(undefined);
         } else {
-          console.log(Object.keys(props.value));
           Object.keys(props.value).forEach((key: string) => {
             setPropertiesId(key);
             setPropertiesValue(props.value[key].value);
+            setSource(props.value[key].source);
             const propertiesItem = props.properties.find((item: any) => item.id === key);
             if (propertiesItem) {
               setPropertiesType(propertiesItem.valueType.type);
@@ -90,6 +90,7 @@ export default (props: Props) => {
             value={propertiesValue}
             type={propertiesType}
             name={props.name}
+            source={source}
             onChange={(value, sources) => {
               console.log(value, sources);
               setPropertiesValue(value);

+ 9 - 1
src/pages/rule-engine/Scene/Save/components/Buttons/Dropdown.tsx

@@ -2,6 +2,7 @@ import { useEffect, useMemo, useState } from 'react';
 import { Dropdown, Tree } from 'antd';
 import classNames from 'classnames';
 import styles from './index.less';
+import { onlyMessage } from '@/utils/util';
 
 type DropdownButtonOptions = {
   title: string;
@@ -121,7 +122,14 @@ const DropdownButton = (props: DropdownButtonProps) => {
 
   return (
     <Dropdown {..._options} trigger={['click']} open={open} onOpenChange={setOpen}>
-      <div className={classNames(styles['dropdown-button'], props.className, typeClassName)}>
+      <div
+        className={classNames(styles['dropdown-button'], props.className, typeClassName)}
+        onClick={() => {
+          if (props.options.length === 0) {
+            onlyMessage('请先配置设备触发规则', 'warning');
+          }
+        }}
+      >
         {label || props.placeholder}
       </div>
     </Dropdown>

+ 4 - 24
src/pages/rule-engine/Scene/Save/components/ParamsSelect/index.tsx

@@ -25,13 +25,12 @@ interface Props {
   children?: ReactNode;
   open?: boolean;
   openChange?: (open: boolean) => void;
+  labelValue?: string;
 }
 
 export default (props: Props) => {
   const [open, setOpen] = useState<boolean>(false);
   const [tabKey, setTabKey] = useState<string>(props?.tabKey || props.itemList[0]?.key);
-  // const wrapperRef = useRef<any>(null);
-  // const nodeRef = useRef<any>(null);
   const [value, setValue] = useState<any>(props.value);
 
   useEffect(() => {
@@ -48,27 +47,6 @@ export default (props: Props) => {
     }
   }, [props.open]);
 
-  // const handleClick = (e: any) => {
-  //   if (open && e.target) {
-  //     if (!(wrapperRef.current && wrapperRef.current.contains(e.target))) {
-  //       setOpen(false);
-  //       props.openChange?.(false);
-  //     }
-  //   }
-  // };
-
-  // useEffect(() => {
-  //   window.addEventListener('click', handleClick);
-  //   return () => {
-  //     window.removeEventListener('click', handleClick);
-  //   };
-  // });
-
-  // useEffect(() => {
-  //   props.onChange(value, tabKey);
-  // }, [value, tabKey]);
-  // const _bosyStyle = props.bodyStyle || {};
-
   return (
     <Dropdown
       trigger={['click']}
@@ -104,9 +82,11 @@ export default (props: Props) => {
         <Input
           suffix={<DownOutlined style={{ color: 'rgba(0, 0, 0, 0.25)' }} />}
           {...props.inputProps}
-          value={value}
+          value={props.labelValue ? props.labelValue : value}
           onChange={(e) => {
+            console.log(111111);
             setValue(e.target.value);
+            props.onChange(value, tabKey);
           }}
           onFocus={() => {
             setOpen(true);