217 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			217 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | import React, { useRef, useEffect, useState, useMemo } from "react"; | ||
|  | import { SearchOutlined } from "@ant-design/icons"; | ||
|  | import _, { indexOf } from "lodash"; | ||
|  | import moment from "moment"; | ||
|  | import "antd/dist/antd.css"; | ||
|  | import { Select, Button, DatePicker, Checkbox, message, Spin } from "antd"; | ||
|  | const { Option } = Select; | ||
|  | import { | ||
|  |   getFactory, | ||
|  |   getEquipType, | ||
|  |   getEquip, | ||
|  |   getEquipmentLocation, | ||
|  |   getEquipmentLocationEchart, | ||
|  | } from "../../../reportUtils/getQueryData"; | ||
|  | function CurveParam() { | ||
|  |   //HTML元素
 | ||
|  |   let refinput = useRef(); | ||
|  | 
 | ||
|  |   //常量
 | ||
|  |   const [factoryValue, setFactoryValue] = useState(""); | ||
|  |   const [factory, setFactory] = useState([]); | ||
|  |   const [equipTypeValue, setEquipTypeValue] = useState(""); | ||
|  |   const [equipType, setEquipType] = useState([]); | ||
|  |   const [equipValue, setEquipValue] = useState(""); | ||
|  |   const [equip, setEquip] = useState([]); | ||
|  |   // 点位集合
 | ||
|  |   const [locations, setLocations] = useState([]); | ||
|  |   // 点位变化值
 | ||
|  |   const [locationValue, setLocationValue] = useState([]); | ||
|  | 
 | ||
|  |   //react render
 | ||
|  |   useEffect(() => { | ||
|  |     let _locationValue = locationValue; | ||
|  |     // iframe 消息通讯
 | ||
|  |     let locationsValues = _.cloneDeep(locations); | ||
|  |     let retData = {}; | ||
|  |     let selectItems = []; | ||
|  |     _locationValue.map((key) => { | ||
|  |       let index = _.findIndex(locationsValues, function (o) { | ||
|  |         return o.value === key; | ||
|  |       }); | ||
|  |       selectItems.push(locationsValues[index]); | ||
|  |     }); | ||
|  |     retData.selectItems = selectItems; | ||
|  |     retData.equipCode = equipValue; | ||
|  |     console.log(retData); | ||
|  |     if (retData.selectItems?.length > 0) { | ||
|  |       window.parent.postMessage(retData, "*"); | ||
|  |     } | ||
|  |   }, [locationValue]); | ||
|  | 
 | ||
|  |   // 查询设备类型,查询车间,
 | ||
|  |   useEffect(() => { | ||
|  |     getEquipType().then((data) => { | ||
|  |       setEquipType(data); | ||
|  |     }); | ||
|  |     getFactory().then((data) => { | ||
|  |       setFactory(data); | ||
|  |     }); | ||
|  |   }, []); | ||
|  |   // 查询设备  监听设备类型
 | ||
|  |   useEffect(() => { | ||
|  |     getEquip({ equipTypeValue, factoryValue }).then((data) => { | ||
|  |       setEquip(data); | ||
|  |       setEquipValue(""); | ||
|  |       setLocations([]); | ||
|  |       setLocationValue([]); | ||
|  |     }); | ||
|  |   }, [equipTypeValue, factoryValue]); | ||
|  | 
 | ||
|  |   //方法
 | ||
|  |   const locationChange = (checkValue) => { | ||
|  |     setLocationValue(checkValue); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const handleCancelClick = () => { | ||
|  |     setLocationValue([]); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const equipTypeChange = (value) => { | ||
|  |     setEquipTypeValue(value); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const factoryChange = (value) => { | ||
|  |     setFactoryValue(value); | ||
|  |   }; | ||
|  |   const equipChange = (value = "") => { | ||
|  |     if (value && equipValue !== value) { | ||
|  |       setLocationValue([]); | ||
|  | 
 | ||
|  |       getEquipmentLocation(value).then((data) => { | ||
|  |         let locationArr = data | ||
|  |           .sort((a, b) => (a.iotfieldsort > b.iotfieldsort ? 1 : -1)) | ||
|  |           .map((item) => { | ||
|  |             return { | ||
|  |               label: item.iotfielddescribe, | ||
|  |               value: item.iotField, | ||
|  |             }; | ||
|  |           }); | ||
|  | 
 | ||
|  |         setLocations(locationArr); | ||
|  |       }); | ||
|  |     } else { | ||
|  |       setLocationValue([]); | ||
|  |       setLocations([]); | ||
|  |     } | ||
|  |     setEquipValue(value); | ||
|  |   }; | ||
|  | 
 | ||
|  |   return ( | ||
|  |     <div className="w-90 mt-4 mx-3"> | ||
|  |       <div className="flex flex-row space-x-4 "> | ||
|  |         <div className="workShop"> | ||
|  |           <span>车间:</span>  | ||
|  |           <Select | ||
|  |             allowClear | ||
|  |             size="small" | ||
|  |             style={{ width: 120 }} | ||
|  |             onChange={factoryChange} | ||
|  |             value={factoryValue} | ||
|  |           > | ||
|  |             {factory.map((item) => { | ||
|  |               return ( | ||
|  |                 <Option value={item.code} key={item.gid}> | ||
|  |                   {item.name} | ||
|  |                 </Option> | ||
|  |               ); | ||
|  |             })} | ||
|  |           </Select> | ||
|  |         </div> | ||
|  |         <div className="equipType"> | ||
|  |           <span>设备类型:</span>  | ||
|  |           <Select | ||
|  |             allowClear | ||
|  |             size="small" | ||
|  |             style={{ width: 120 }} | ||
|  |             onChange={equipTypeChange} | ||
|  |             value={equipTypeValue} | ||
|  |           > | ||
|  |             {equipType.map((item) => { | ||
|  |               return ( | ||
|  |                 <Option value={item.equipTypeGid} key={item.gid}> | ||
|  |                   {item.name} | ||
|  |                 </Option> | ||
|  |               ); | ||
|  |             })} | ||
|  |           </Select> | ||
|  |         </div> | ||
|  |         <div className="equipNo"> | ||
|  |           <span>设备编号:</span>  | ||
|  |           <Select | ||
|  |             showSearch | ||
|  |             allowClear | ||
|  |             size="small" | ||
|  |             onChange={equipChange} | ||
|  |             optionFilterProp="children" | ||
|  |             style={{ width: 150 }} | ||
|  |             value={equipValue} | ||
|  |             filterOption={(input, option) => | ||
|  |               option.children.toLowerCase().includes(input.toLowerCase()) | ||
|  |             } | ||
|  |           > | ||
|  |             {equip.map((item) => { | ||
|  |               return ( | ||
|  |                 <Option | ||
|  |                   value={item.serialNumber} | ||
|  |                   key={item.serialNumber + item.name} | ||
|  |                 > | ||
|  |                   {item.name} | ||
|  |                 </Option> | ||
|  |               ); | ||
|  |             })} | ||
|  |           </Select> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |       <div className="toolBar flex flex-row mt-4"> | ||
|  |         <div className="  text-xs 	"> | ||
|  |           {locations.length > 0 ? ( | ||
|  |             <Button | ||
|  |               type="primary" | ||
|  |               className="ml-2 mt-2" | ||
|  |               size="small" | ||
|  |               onClick={handleCancelClick} | ||
|  |             > | ||
|  |               取消全选 | ||
|  |             </Button> | ||
|  |           ) : ( | ||
|  |             <></> | ||
|  |           )} | ||
|  |         </div> | ||
|  |         <div className="legend overflow-y-auto  ml-10  mt-2  h-32  "> | ||
|  |           <Checkbox.Group | ||
|  |             ref={refinput} | ||
|  |             value={locationValue} | ||
|  |             options={locations} | ||
|  |             onChange={locationChange} | ||
|  |           /> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |       <style jsx>{`
 | ||
|  |         .ant-checkbox-group-item { | ||
|  |           width: 200px !important; | ||
|  |         } | ||
|  | 
 | ||
|  |         .toolBar { | ||
|  |           position: relative; | ||
|  |           border-width: 1px 0 1px 0; | ||
|  |           border-color: #d3d3d3; | ||
|  |           background: #f8f8f8; | ||
|  |           min-height: 32px; | ||
|  |         } | ||
|  |       `}</style>
 | ||
|  |     </div> | ||
|  |   ); | ||
|  | } | ||
|  | export default CurveParam; |