Kaynağa Gözat

merge master

zhaojijng 2 yıl önce
ebeveyn
işleme
111cfd862a

+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+src/config/api.js merge=ours
+config/proxy.ts merge=ours

+ 4 - 4
config/proxy.ts

@@ -25,13 +25,13 @@ export default {
     //     '^/sgadmin/sso': '/sgadmin/sso',
     //   },
     // },
-    '/sgadmin': {
-      //   target: 'https://duoduoenv.sagacloud.cn/',
+    '/sgadmin/duoduo-service': {
+      //target: 'https://duoduoenv.sagacloud.cn/',
       target: 'http://10.100.28.79',
       changeOrigin: true,
       pathRewrite: {
-        '^/sgadmin': '/sgadmin',
-        // '^/sgadmin': '/',
+        //'^/sgadmin': '/sgadmin',
+        '^/sgadmin/duoduo-service': '/sgadmin/duoduo-service',
       },
     },
   },

+ 1 - 0
package.json

@@ -65,6 +65,7 @@
     "react": "^17.0.0",
     "react-dev-inspector": "^1.7.0",
     "react-dom": "^17.0.0",
+    "react-draggable": "^4.4.5",
     "react-helmet-async": "^1.2.0",
     "umi": "^3.5.0"
   },

+ 4 - 2
src/config/api.js

@@ -1,4 +1,6 @@
 export const BASE_PATH = '/api';
 //export const projectId = 'Pj3301100002';//之江
-//export const projectId = 'Pj1101080259';//Pj1101080259
-export const projectObj = { projectId: 'Pj3301100002' };
+//export const projectId = 'Pj1101080259';//博锐
+//export const projectId = 'Pj1101140020';//吉因加
+export const projectObj = { projectId: 'Pj3301100002' };
+// export const projectObj = { projectId: 'Pj3301100002' };

+ 2 - 10
src/models/sagacare_spaceFunc.ts

@@ -63,16 +63,8 @@ export default function () {
   const [hasPersonList, setHasPersonList] = useState<any[]>([]);
 
   const querySpaceAdjustList = useCallback((selFloorId) => {
-    return getSpaceAdjustArray(
-      {
-        criteria: {
-          projectId: projectObj.projectId,
-          floorId: selFloorId,
-        },
-      },
-      {},
-    ).then(function (res) {
-      var resList = res.content || [];
+    return getSpaceAdjustArray({ floorId: selFloorId }).then(function (res) {
+      var resList = res.data || [];
       setHasPersonList(resList);
       return 'next';
     });

+ 107 - 0
src/pages/Environment/components/chartModal/TdbRHchart.jsx

@@ -0,0 +1,107 @@
+import React, { useState, useEffect, useRef } from 'react';
+import { DualAxes } from '@ant-design/plots';
+import { Spin } from 'antd';
+import styles from './index.less';
+export default ({ data }) => {
+  let tdbArr = [];
+  let rhArr = [];
+  let minMaxTdb = {
+    minTdb: 100,
+    maxTdb: 0,
+  };
+  let minMaxRH = {
+    maxRH: 0,
+    minRH: 100,
+  };
+  data.map((item) => {
+    if (item.Tdb) {
+      tdbArr = data;
+      if (item.Tdb < minMaxTdb.minTdb) {
+        minMaxTdb.minTdb = item.Tdb;
+      }
+      if (item.Tdb > minMaxTdb.maxTdb) {
+        minMaxTdb.maxTdb = item.Tdb;
+      }
+    }
+    if (item.RH) {
+      rhArr = data;
+      if (item.RH < minMaxRH.minRH) {
+        minMaxRH.minRH = item.RH;
+      }
+      if (item.RH > minMaxRH.maxRH) {
+        minMaxRH.maxRH = item.RH;
+      }
+    }
+  });
+  const config = {
+    data: [tdbArr, rhArr],
+    xField: 'Date',
+    yField: ['Tdb', 'RH'],
+    padding: [18],
+    xAxis: {
+      range: [0, 1],
+    },
+    yAxis: {
+      RH: {
+        max: Math.ceil(minMaxRH.maxRH) + 1,
+        min: Math.floor(minMaxRH.minRH),
+        // tickCount: 5,
+      },
+      Tdb: {
+        max: Math.ceil(minMaxTdb.maxTdb) + 1,
+        min: Math.floor(minMaxTdb.minTdb),
+        // tickCount: 5,
+      },
+    },
+    tooltip: {
+      formatter: (item) => {
+        return {
+          name: 'RH' in item ? '湿度' : '温度',
+          value: 'RH' in item ? `${item.RH}%` : `${item.Tdb}°C`,
+        };
+      },
+    },
+    legend: false,
+    annotations: [
+      [
+        {
+          type: 'text',
+          content: '°C',
+          position: ['-6%', '-10%'],
+        },
+      ],
+      [
+        {
+          type: 'text',
+          content: '%',
+          position: ['102%', '-10%'],
+        },
+      ],
+    ],
+    geometryOptions: [
+      {
+        geometry: 'line',
+        color: '#5B8FF9',
+      },
+      {
+        geometry: 'line',
+        color: '#5AD8A6',
+      },
+    ],
+  };
+  return (
+    <>
+      <div className={styles.legend}>
+        <div className={styles.itemLegend}>
+          <i className={`${styles.linebox} ${styles.lineTdb}`}></i>
+          <span>温度</span>
+        </div>
+        <div className={styles.itemLegend}>
+          <i className={styles.linebox}></i>
+          <span>湿度</span>
+        </div>
+      </div>
+      <DualAxes {...config} />
+    </>
+  );
+};

+ 53 - 4
src/pages/Environment/components/chartModal/index.jsx

@@ -1,5 +1,6 @@
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, useRef } from 'react';
 import { Modal, Form } from 'antd';
+import Draggable from 'react-draggable';
 import Icon from '@/tenants-ui/SgIcon';
 import styles from './index.less';
 import cx from 'classnames';
@@ -68,10 +69,58 @@ export default ({ onClose, showSpace, selNav }) => {
     defaultType(); // 默认展示类型
   }, [selNav]);
 
+  //   拖拽
+  const [disabled, setDisabled] = useState(false);
+  const [bounds, setBounds] = useState({
+    left: 0,
+    top: 0,
+    bottom: 0,
+    right: 0,
+  });
+  const draggleRef = useRef(null);
+  const onStart = (_event, uiData) => {
+    const { clientWidth, clientHeight } = window.document.documentElement;
+    const targetRect = draggleRef.current?.getBoundingClientRect();
+
+    if (!targetRect) {
+      return;
+    }
+    setBounds({
+      left: -targetRect.left + uiData.x,
+      right: clientWidth - (targetRect.right - uiData.x),
+      top: -targetRect.top + uiData.y,
+      bottom: clientHeight - (targetRect.bottom - uiData.y),
+    });
+  };
+
   return (
     <>
-      <Modal width={550} visible maskClosable={false} closable={false} footer={null}>
-        <div className={styles.main}>
+      <Modal
+        width={550}
+        visible
+        maskClosable={false}
+        closable={false}
+        footer={null}
+        style={{
+          width: '100%',
+          cursor: 'move',
+        }}
+        modalRender={(modal) => (
+          <Draggable
+            disabled={disabled}
+            bounds={bounds}
+            onStart={(event, uiData) => onStart(event, uiData)}
+          >
+            <div ref={draggleRef}>{modal}</div>
+          </Draggable>
+        )}
+      >
+        <div
+          className={styles.main}
+          onMouseDown={(e) => {
+            e.preventDefault();
+          }}
+        >
           <div className={styles.header}>
             <div className={styles.title}>{showSpace.localName}</div>
             <div className={styles.close} onClick={onClose}>
@@ -95,7 +144,7 @@ export default ({ onClose, showSpace, selNav }) => {
               })}
             </div>
             <div className={styles.chart}>
-              <LineChart paramObj={paramObj} spaceId={showSpace.id} />
+              <LineChart paramObj={paramObj} spaceId={showSpace.spaceId} />
             </div>
             <div className={styles.foot}>
               <div className={styles.l}>{paramObj.name}</div>

+ 25 - 0
src/pages/Environment/components/chartModal/index.less

@@ -90,6 +90,7 @@
   .chartText {
     padding: 10px 0;
     color: #c4c4c4;
+    text-align: center;
   }
   .leveSt {
     padding-top: 40px;
@@ -112,4 +113,28 @@
     line-height: 220px;
     text-align: center;
   }
+  .legend {
+    position: absolute;
+    left: 50%;
+    display: flex;
+    justify-content: center;
+    transform: translateX(-50%);
+  }
+  .itemLegend {
+    display: flex;
+    align-items: center;
+    margin-right: 20px;
+  }
+
+  .linebox {
+    display: inline-block;
+    box-sizing: border-box;
+    width: 10px;
+    height: 1px;
+    margin-right: 10px;
+    border-top: 2px solid #5ad8a6;
+  }
+  .lineTdb {
+    border-top: 2px solid #5b8ff9;
+  }
 }

+ 39 - 12
src/pages/Environment/components/chartModal/lineChart.jsx

@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react';
 import { Line } from '@ant-design/plots';
 import { Spin } from 'antd';
 import styles from './index.less';
+import TdbRHchart from './TdbRHchart.jsx';
 import { queryPropertyData } from '@/services/sagacare_service/environment';
 export default ({ paramObj, spaceId }) => {
   let [data, setData] = useState([]);
@@ -27,8 +28,20 @@ export default ({ paramObj, spaceId }) => {
         const resData = getChartData(item, type);
         resArr.push(resData);
       });
+
       Promise.all(resArr).then((res) => {
-        const resData = [...res[0], ...res[1]];
+        let resData = [];
+        if (res[0].length === 1 && res[1] === 1) {
+          // 都没有数据
+          resData = res[0];
+        } else {
+          res[0] = res[0].length !== 1 ? res[0] : [];
+          res[1] = res[1].length !== 1 ? res[1] : [];
+          for (let i = 0; i < res[0].length; i++) {
+            let tempObj = { ...res[0][i], ...res[1][i] };
+            resData.push(tempObj);
+          }
+        }
         setData(resData);
       });
     } else {
@@ -50,6 +63,11 @@ export default ({ paramObj, spaceId }) => {
         setLevelMax(max); // 最大值
         res.propertyData.shift();
         arr = res.propertyData;
+        let key = 'scales';
+
+        if (objId === 'RH' || objId === 'Tdb') {
+          key = objId;
+        }
         arr.forEach((itemArr) => {
           let scales = '--';
           if (itemArr[1] == '-9999') {
@@ -58,9 +76,7 @@ export default ({ paramObj, spaceId }) => {
           } else {
             scales = Number(itemArr[1].toFixed(paramObj.pointNum));
           }
-          //   const scales =
-          //     itemArr[1] == '-9999' ? '--' : Number(itemArr[1].toFixed(paramObj.pointNum));
-          chartArr.push({ Date: dealTime(itemArr[0]), scales: scales, type: type });
+          chartArr.push({ Date: dealTime(itemArr[0]), [key]: scales, type: type });
         });
         if (scalesCheckArr.length == arr.length) {
           // 有返回时间且数据都是-9999 显示暂无数据
@@ -108,14 +124,25 @@ export default ({ paramObj, spaceId }) => {
   } else if (data[0] == 'noNum') {
     return <div className={styles.noNum}>暂无数据</div>;
   } else if (data.length > 3) {
-    return (
-      <>
-        <Line {...config} />
-        <div className={styles.chartText}>
-          <span>{paramObj.id == 'Tdb,RH' ? '温湿度逐时分布' : '浓度逐时分布'}</span>
-        </div>
-      </>
-    );
+    if (paramObj.id == 'Tdb,RH') {
+      return (
+        <>
+          <TdbRHchart data={data} />
+          <div className={styles.chartText}>
+            <span>温湿度逐时分布</span>
+          </div>
+        </>
+      );
+    } else {
+      return (
+        <>
+          <Line {...config} />
+          <div className={styles.chartText}>
+            <span>浓度逐时分布</span>
+          </div>
+        </>
+      );
+    }
   } else {
     return (
       <div className={styles.noNum}>

+ 33 - 38
src/pages/Equipment/components/deviceModal/airEq/index.jsx

@@ -133,7 +133,6 @@ export default ({ spaceId, projectId }) => {
 
       // console.log('changeLoading', changeLoading);
       setChangeLoading({ ...changeLoading, [itemId]: true });
-
       changeAirHttp(paramsObj)
         .then((res) => {
           setChangeLoading({ ...changeLoading, [itemId]: false });
@@ -160,42 +159,6 @@ export default ({ spaceId, projectId }) => {
     };
   }, []);
 
-  const AirExpend = () => {
-    if (isOpen) {
-      return (
-        <>
-          <div className={styles.expend}>
-            {airExpend.map((items, idx) => {
-              return (
-                <div className={styles.item} key={idx}>
-                  <div>{items.title}</div>
-                  <div className={styles.itemRight}>
-                    <div className={styles.itemBg} onClick={() => changeAir(items.downType)}>
-                      {changeLoading[items.downType] ? (
-                        <Spin indicator={<LoadingOutlined style={{ fontSize: 20 }} spin />} />
-                      ) : (
-                        <img className={styles.itemImg} src={items.leftImg} />
-                      )}
-                    </div>
-                    <div className={styles.itemBg} onClick={() => changeAir(items.upType)}>
-                      {changeLoading[items.upType] ? (
-                        <Spin indicator={<LoadingOutlined style={{ fontSize: 20 }} spin />} />
-                      ) : (
-                        <img className={styles.itemImg} src={items.rightImg} />
-                      )}
-                    </div>
-                  </div>
-                </div>
-              );
-            })}
-          </div>
-        </>
-      );
-    } else {
-      return <></>;
-    }
-  };
-
   return (
     <div className={styles.box}>
       <div className={styles.content}>
@@ -215,6 +178,7 @@ export default ({ spaceId, projectId }) => {
           <div className={styles.envRight}>
             <img className={styles.roomAirImg} src={isOpen ? airOpen : airClose} />
           </div>
+
           <div
             onClick={() => {
               changeSwitch(!isOpen);
@@ -226,7 +190,38 @@ export default ({ spaceId, projectId }) => {
           </div>
         </div>
       </div>
-      <AirExpend></AirExpend>
+      {isOpen && (
+        <div className={styles.expend}>
+          {airExpend.map((items, idx) => {
+            return (
+              <div className={styles.item} key={idx}>
+                <div>{items.title}</div>
+                <div className={styles.itemRight}>
+                  <div
+                    className={styles.itemBg}
+                    onClick={(e) => {
+                      changeAir(items.downType);
+                    }}
+                  >
+                    {changeLoading[items.downType] ? (
+                      <Spin indicator={<LoadingOutlined style={{ fontSize: 20 }} spin />} />
+                    ) : (
+                      <img className={styles.itemImg} src={items.leftImg} />
+                    )}
+                  </div>
+                  <div className={styles.itemBg} onClick={() => changeAir(items.upType)}>
+                    {changeLoading[items.upType] ? (
+                      <Spin indicator={<LoadingOutlined style={{ fontSize: 20 }} spin />} />
+                    ) : (
+                      <img className={styles.itemImg} src={items.rightImg} />
+                    )}
+                  </div>
+                </div>
+              </div>
+            );
+          })}
+        </div>
+      )}
     </div>
   );
 };

+ 3 - 0
src/pages/Equipment/components/deviceModal/common.less

@@ -25,6 +25,9 @@
     }
   }
 }
+.showAll {
+  cursor: pointer;
+}
 
 .eqTitle {
   color: #4d5262;

+ 79 - 27
src/pages/Equipment/components/deviceModal/index.jsx

@@ -1,5 +1,6 @@
 import React, { useState, useEffect, useMemo } from 'react';
 import { Modal, Row, Col } from 'antd';
+import Draggable from 'react-draggable';
 import Icon from '@/tenants-ui/SgIcon';
 import styles from './index.less';
 import { equipImageMap } from '@/config/sagacare/sagacare_image.js';
@@ -98,32 +99,34 @@ export default ({ onClose, showSpace }) => {
   const getData = () => {
     const paramsObj = {
       criteria: {
-        spaceId: showSpace.id,
+        spaceId: showSpace.spaceId,
         projectId: projectObj.projectId,
       },
     };
-    getSpaceAdjustList(paramsObj).then((res) => {
-      res.content &&
-        res.content.forEach((item, idx) => {
-          envArr.forEach((jtem, jdx) => {
-            jtem.describe = checkLevel(item[jtem.id], jtem.id).levelTxt;
-            if (!item[jtem.id] && item[jtem.id] != 0) {
-              jtem.num = '--';
-              return;
-            }
-            if (jtem.id == 'humidity') {
-              jtem.num = item[jtem.id].toFixed(0);
-            } else if (jtem.id == 'hcho') {
-              jtem.num = item[jtem.id].toFixed(2);
-            } else if (jtem.id == 'temperature') {
-              jtem.num = item[jtem.id].toFixed(1);
-            } else {
-              jtem.num = item[jtem.id];
-            }
+    getSpaceAdjustList(paramsObj)
+      .then((res) => {
+        res.content &&
+          res.content.forEach((item, idx) => {
+            envArr.forEach((jtem, jdx) => {
+              jtem.describe = checkLevel(item[jtem.id], jtem.id).levelTxt;
+              if (!item[jtem.id] && item[jtem.id] != 0) {
+                jtem.num = '--';
+                return;
+              }
+              if (jtem.id == 'humidity') {
+                jtem.num = item[jtem.id].toFixed(0);
+              } else if (jtem.id == 'hcho') {
+                jtem.num = item[jtem.id].toFixed(2);
+              } else if (jtem.id == 'temperature') {
+                jtem.num = item[jtem.id].toFixed(1);
+              } else {
+                jtem.num = item[jtem.id];
+              }
+            });
+            setParamList(envArr);
           });
-          setParamList(envArr);
-        });
-    });
+      })
+      .catch((err) => {});
   };
 
   const operateTime = useMemo(() => {
@@ -221,11 +224,57 @@ export default ({ onClose, showSpace }) => {
       clearInterval(timer);
     };
   }, []);
+  //   拖拽
+  const [disabled, setDisabled] = useState(false);
+  const [bounds, setBounds] = useState({
+    left: 0,
+    top: 0,
+    bottom: 0,
+    right: 0,
+  });
+  const draggleRef = useRef(null);
+  const onStart = (_event, uiData) => {
+    const { clientWidth, clientHeight } = window.document.documentElement;
+    const targetRect = draggleRef.current?.getBoundingClientRect();
 
+    if (!targetRect) {
+      return;
+    }
+    setBounds({
+      left: -targetRect.left + uiData.x,
+      right: clientWidth - (targetRect.right - uiData.x),
+      top: -targetRect.top + uiData.y,
+      bottom: clientHeight - (targetRect.bottom - uiData.y),
+    });
+  };
   return (
     <>
-      <Modal width={810} visible maskClosable={false} closable={false} footer={null}>
-        <div className={styles.main}>
+      <Modal
+        width={810}
+        visible
+        style={{
+          width: '100%',
+          cursor: 'move',
+        }}
+        maskClosable={false}
+        closable={false}
+        modalRender={(modal) => (
+          <Draggable
+            disabled={disabled}
+            bounds={bounds}
+            onStart={(event, uiData) => onStart(event, uiData)}
+          >
+            <div ref={draggleRef}>{modal}</div>
+          </Draggable>
+        )}
+        footer={null}
+      >
+        <div
+          className={styles.main}
+          onMouseDown={(e) => {
+            e.preventDefault();
+          }}
+        >
           <div className={styles.header}>
             <div className={styles.show}>
               <div className={styles.tileline}>
@@ -296,17 +345,20 @@ export default ({ onClose, showSpace }) => {
               <Row gutter={[12, 18]}>
                 {showEqCard('airConditioner') && (
                   <Col span={12}>
-                    <AirEq spaceId={showSpace.id} projectId={projectObj.projectId}></AirEq>
+                    <AirEq spaceId={showSpace.spaceId} projectId={projectObj.projectId}></AirEq>
                   </Col>
                 )}
                 {showEqCard('light') && (
                   <Col span={12}>
-                    <LampEq spaceId={showSpace.id} projectId={projectObj.projectId}></LampEq>
+                    <LampEq spaceId={showSpace.spaceId} projectId={projectObj.projectId}></LampEq>
                   </Col>
                 )}
                 {showEqCard('curtain') && (
                   <Col span={12}>
-                    <CurtainEq spaceId={showSpace.id} projectId={projectObj.projectId}></CurtainEq>
+                    <CurtainEq
+                      spaceId={showSpace.spaceId}
+                      projectId={projectObj.projectId}
+                    ></CurtainEq>
                   </Col>
                 )}
               </Row>

+ 1 - 1
src/pages/Equipment/components/deviceModal/index.less

@@ -1,6 +1,6 @@
 .main {
   width: 100%;
-  height: 600px;
+  //   height: 600px;
   .header {
     position: relative;
     z-index: 1;

+ 2 - 8
src/pages/Equipment/components/topNavRight/index.tsx

@@ -14,18 +14,12 @@ export type topNavRightProps = {
   selNavObj: navigatorItem;
   navigatorList: navigatorItem[];
   mapList: API.MapInfo[];
-  queryDeviceManage: () => Promise<any>;
+  //queryDeviceManage: () => Promise<any>;
 };
 
-const TopNavRight: React.FC<topNavRightProps> = ({
-  selNavObj,
-  navigatorList,
-  mapList,
-  queryDeviceManage,
-}) => {
+const TopNavRight: React.FC<topNavRightProps> = ({ selNavObj, navigatorList, mapList }) => {
   //const [modalvisible, setModalvisible] = useState<boolean>(false);
   //去掉全部设备的 设备列表
-
   const [deviceList, setDeviceList] = useState<navigatorItem[]>([]);
   useEffect(() => {
     setDeviceList(navigatorList.slice(1));

+ 1 - 1
src/pages/Equipment/equipmentControl.js

@@ -61,7 +61,7 @@ export const changeCurtain = (type, itemarr, getDeviceStatus, status) => {
 export const changeAir = (sitem, index, getDeviceStatus) => {
     const itemId = sitem.airConditioner === 0 ? 12 : 10; // 10关闭 12开启
     const paramsObj = {
-        objectId: sitem.id, // 空间id
+        objectId: sitem.spaceId, // 空间id
         valueType: 1, // 固定为1 1
         itemId: itemId,
     };

+ 65 - 46
src/pages/Equipment/index.tsx

@@ -24,8 +24,8 @@ import {
   getMapList,
   queryEquipStatistics,
   queryDeviceTimeManage,
+  queryProjectEquipType,
 } from '@/services/sagacare_service/environment';
-
 import {
   changeCurtain,
   changeAir,
@@ -54,7 +54,7 @@ const Environment: React.FC = () => {
 
   const [showModal, setShowModal] = useState<boolean>(false);
   const [showSpace, setShowSpace] = useState<API.MapInfo>({}); //当前弹框选中的空间
-  const [navigatorList, setNavigatorList] = useState<navigatorItem[]>([
+  const initNavigatorList = [
     {
       name: '全部设备',
       id: 'all',
@@ -87,7 +87,8 @@ const Environment: React.FC = () => {
       color: '#E89E32',
       colorStr: '232, 158, 50,',
     },
-  ]);
+  ];
+  const [navigatorList, setNavigatorList] = useState<any[]>([]);
   const [scale, setScale] = useState<number>(0.8);
   const [maxScale, setMaxScale] = useState<number>(1);
   const [transXInit, setTransXInit] = useState<number>(0);
@@ -99,7 +100,7 @@ const Environment: React.FC = () => {
   const [equipMapList, setEquipMapList] = useState<any[]>([]);
   const [timeMapList, setTimeMapList] = useState<any[]>([]);
 
-  const [selNav, setSelNav] = useState<navigatorItem>(navigatorList[0]);
+  const [selNav, setSelNav] = useState<navigatorItem>(initNavigatorList[0]);
   const [selFloorId, setSelFloorId] = useState<string>();
   const [mapCombineList, setMapCombineList] = useState<any[]>([]);
   const [loading, setLoading] = useState<boolean>(false);
@@ -122,6 +123,7 @@ const Environment: React.FC = () => {
   //根据设备状态返回不同的 颜色
   const getColorOpacity = (value: any, type?: string): string => {
     let colorStr = '';
+    // console.log('getColorOpacity-selNav', selNav, navigatorList);
     if (selNav.id == 'all') {
       //全部设备时 colorStr赋值
       var filterRes = navigatorList.filter(function (item) {
@@ -286,7 +288,7 @@ const Environment: React.FC = () => {
     [mapListCopy],
   );
 
-  const queryDeviceManage = () => {
+  const queryDeviceManage = (equiptTypeArr: any) => {
     //setLoading(true);
     return queryEquipStatistics({
       floorId: selFloorId,
@@ -297,15 +299,15 @@ const Environment: React.FC = () => {
         //if (!setTimer.current) return;
         var statistics = res.data.statistics || [];
         //赋值 运行中的设备数量
-        navigatorList.forEach(function (nItem) {
+
+        equiptTypeArr.forEach(function (nItem) {
           var fres = statistics.filter((sItem: statistics) => {
             return sItem.equipType == nItem.id;
           });
           nItem.num = (fres[0] || {}).runCount;
         });
-
-        setNavigatorList(navigatorList);
-
+        //console.log('queryDeviceManage333-arr', equiptTypeArr);
+        setNavigatorList(equiptTypeArr);
         //设备空间信息
         var spaceList = res.data.spaceList || [];
         spaceList.forEach((item: any) => {
@@ -342,19 +344,49 @@ const Environment: React.FC = () => {
         return 'next';
       })
       .catch(() => {
+        setNavigatorList(equiptTypeArr);
         // setLoading(false);
       });
   };
+
   let setTimer1 = useRef();
   let setTimer2 = useRef();
-  function getDeviceStatus() {
-    queryDeviceManage().then((res) => {
+
+  function getDeviceStatus(equiptTypeArr: any) {
+    queryDeviceManage(equiptTypeArr).then((res) => {
       clearTimeout(setTimer1.current);
       setTimer1.current = setTimeout(() => {
-        getDeviceStatus();
+        getDeviceStatus(equiptTypeArr);
       }, 8000);
     });
   }
+
+  function getProjectEquipType() {
+    // 项目拥有的设备
+    return queryProjectEquipType().then((res) => {
+      const resData = res.data || [];
+      let arr: any = [];
+      initNavigatorList.map((item: any, idx: any) => {
+        if (idx === 0) {
+          arr.push(item);
+          return;
+        } // 第一个为全部设备,不参与对比
+        let hasEquip = false; // 没有此设备
+        resData.map((resItem: any) => {
+          if (item.id === resItem) {
+            hasEquip = true;
+          }
+        });
+        if (hasEquip) {
+          arr.push(item);
+        }
+      });
+      //console.log('setNavigatorList-arr1111', arr);
+      //setNavigatorList(arr);
+      return arr;
+    });
+  }
+
   function getSpaceHasPerson(sfId: any) {
     //获取有人无人
     querySpaceAdjustList(sfId).then((res) => {
@@ -367,34 +399,23 @@ const Environment: React.FC = () => {
   }
   //获取设备状态 设备种类
   useEffect(() => {
-    if (selFloorId) {
-      getDeviceStatus();
-      getSpaceHasPerson(selFloorId);
-
-      //   queryDeviceManage(); //第一次执行
-      //   if (setTimer.current) {
-      //     clearInterval(setTimer.current);
-      //     setTimer.current = null;
-      //   }
-      //   //循环调接口
-      //   setTimer.current = setInterval(() => {
-      //     queryDeviceManage();
-      //   }, 3000);
-    }
+    (async function () {
+      var equiptTypeArr = await getProjectEquipType();
+      //console.log('getProjectEquipType222-equiptTypeArr', equiptTypeArr);
+      if (selFloorId) {
+        getDeviceStatus(equiptTypeArr);
+        getSpaceHasPerson(selFloorId);
+      }
+    })();
 
     return () => {
       //clearInterval(setTimer.current);
+      console.log('clearTimeout-clear');
       clearTimeout(setTimer1.current);
       clearTimeout(setTimer2.current);
     };
   }, [selFloorId]);
 
-  //   useEffect(() => {
-  //     if (selFloorId) {
-  //       querySpaceAdjustList(selFloorId);
-  //     }
-  //   }, [selFloorId]);
-
   //获取时间列表 spaceTimeList
   useEffect(() => {
     if (selFloorId) {
@@ -427,32 +448,32 @@ const Environment: React.FC = () => {
         return ele.id == spaceId;
       });
       var filterSpace3 = hasPersonList.filter((ele) => {
-        return ele.id == spaceId;
+        return ele.spaceId == spaceId;
       });
       var combine = Object.assign({}, filterSpace3[0], filterSpace2[0], mitem, filterSpace1[0]);
 
       combineList.push(combine);
     });
     setMapCombineList(combineList);
-    console.log('combine');
   }, [equipMapList, mapList, timeMapList, hasPersonList]);
 
   let firtTime: number = 0;
   let lastTime: number = 0;
   return (
-    <>
+    <div className={styles.sagawrap}>
       <PageHeader title={<FormattedMessage id="menu.equipment" />} action={<SearchInput />} />
       <TopNavigator
         navigatorList={navigatorList}
         type={'equipment'}
         navigatorChange={navigatorChange}
         action={
-          <TopNavRight
-            selNavObj={selNav}
-            navigatorList={navigatorList}
-            mapList={mapCombineList}
-            queryDeviceManage={queryDeviceManage}
-          ></TopNavRight>
+          navigatorList.length > 0 && (
+            <TopNavRight
+              selNavObj={selNav}
+              navigatorList={navigatorList}
+              mapList={mapCombineList}
+            ></TopNavRight>
+          )
         }
         changeFloorId={changeFloorId}
         selParamObj={selNav}
@@ -611,8 +632,7 @@ const Environment: React.FC = () => {
                       </div>
                     )}
                     {(selNav.id == 'airConditioner' || selNav.id == 'light') &&
-                      item.isPassengerPass &&
-                      false &&
+                      item.runStatus === 1 &&
                       item.canClick && (
                         <div
                           className={mapstyles.hasPerson}
@@ -633,8 +653,7 @@ const Environment: React.FC = () => {
                         </div>
                       )}
                     {(selNav.id == 'airConditioner' || selNav.id == 'light') &&
-                      false &&
-                      item.isPassengerPass == false &&
+                      item.runStatus === 0 &&
                       item.canClick && (
                         <div
                           className={mapstyles.hasPerson}
@@ -728,7 +747,7 @@ const Environment: React.FC = () => {
           }}
         ></DeviceModal>
       )}
-    </>
+    </div>
   );
 };
 

+ 3 - 10
src/pages/Runtime/index.tsx

@@ -173,18 +173,11 @@ const Runtime: React.FC = () => {
             });
           }
           ritem.showTimeList = timeList;
-          //console.log('timeList', timeList);
-          //   ritem.showTimeStr =
-          //     timeList.length > 0
-          //       ? timeList[0][0] +
-          //         '-' +
-          //         (timeList[timeList.length - 1][1] > timeList[0][1]
-          //           ? timeList[timeList.length - 1][1]
-          //           : timeList[0][1])
-          //       : '';
 
           allTimeArr.sort((a, b) => {
-            return a - b;
+            var a1 = Date.parse('2008-08-08 ' + a);
+            var b1 = Date.parse('2008-08-08 ' + b);
+            return a1 - b1;
           });
 
           ritem.showTimeStr =

+ 7 - 5
src/sagacare_components/topNavigator/index.tsx

@@ -141,15 +141,16 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
           }),
         );
 
+        var lastBuildId2 = lastBuildId || sessionStorage.getItem('lastBuildId') || '';
         var lastFilter = resData.filter((item) => {
-          return item.id == lastBuildId;
+          return item.id == lastBuildId2;
         });
 
         var lastBuildIdTemp = '';
         if (lastFilter.length > 0) {
-          lastBuildIdTemp = lastBuildId;
+          lastBuildIdTemp = lastBuildId2;
         }
-
+        //debugger;
         setCurrentBuild(searchBuildId || lastBuildIdTemp || (resData[0] || {}).id); //设置第一个建筑值
         //changeBuildId && changeBuildId(lastBuildId || (resData[0] || {}).id);
       });
@@ -176,15 +177,16 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
           return { label: item.localName, value: item.id };
         }),
       );
+      var lastFloorId2 = lastFloorId || sessionStorage.getItem('lastFloorId') || '';
 
       //如果最后选中的
       var lastFilter = resData.filter((item) => {
-        return item.id == lastFloorId;
+        return item.id == lastFloorId2;
       });
 
       var lastFloorIdTemp = '';
       if (lastFilter.length > 0) {
-        lastFloorIdTemp = lastFloorId;
+        lastFloorIdTemp = lastFloorId2;
       }
       //debugger;
       setCurrentFloor(searchFloorId || lastFloorIdTemp || (resData[0] || {}).id); //如果有搜索的楼层id 则用搜索的结果

+ 33 - 18
src/services/sagacare_service/environment.ts

@@ -2,6 +2,20 @@
 import { request } from 'umi';
 import { projectObj } from '@/config/api';
 import UserStorage from '@/config/sagacare/sagacare_user';
+function getProjectId() {
+  const id = projectObj.projectId;
+  return id;
+}
+
+function commonParams() {
+  var userObj = UserStorage.getInstance();
+  const user = userObj.getUser();
+  var pubname = 'sgadmin';
+
+  return `openid=${user.id}&pubname=${pubname}&projectId=${getProjectId()}&userId=${
+    user.id
+  }&userName=${user.name}&userPhone=${user.phone}`;
+}
 
 export async function getMapList(body: any, options?: { [key: string]: any }) {
   return request<API.MapInfoRes>(
@@ -58,20 +72,6 @@ export async function queryDeviceTimeManage(params: any, options?: { [key: strin
   );
 }
 
-function getProjectId() {
-  const id = projectObj.projectId;
-  return id;
-}
-
-function commonParams() {
-  var userObj = UserStorage.getInstance();
-  const user = userObj.getUser();
-  var pubname = 'sgadmin';
-
-  return `openid=${user.id}&pubname=${pubname}&projectId=${getProjectId()}&userId=${
-    user.id
-  }&userName=${user.name}`;
-}
 // chart
 export async function queryPropertyData(params: any, options?: { [key: string]: any }) {
   return request<API.DeviceTimeType>(
@@ -83,15 +83,17 @@ export async function queryPropertyData(params: any, options?: { [key: string]:
     },
   );
 }
-export async function getSpaceAdjustArray(body: any, otherParam: any) {
+// 有人无人
+export async function getSpaceAdjustArray(params: any) {
   return request<API.DeviceTimeType>(
-    `/sgadmin/duoduo-service/duoduoenv-service/spaceAdjust/getSpaceAdjustList`,
+    `/sgadmin/duoduo-service/object-service/object/equipment/queryFloorSpaceStatus?projectId=${getProjectId()}&floorId=${
+      params.floorId
+    }&equipType=bodySensor&booleanInfoCode=isPassengerPass&expireTime=5`,
     {
-      method: 'POST',
+      method: 'GET',
       headers: {
         'Content-Type': 'application/json',
       },
-      data: body,
     },
   );
 }
@@ -178,3 +180,16 @@ export async function reFreshCheckToken(header: any, options?: { [key: string]:
     ...(options || {}),
   });
 }
+
+// 项目拥有的设备
+export async function queryProjectEquipType() {
+  return request<API.EnvironmentParam>(
+    `/sgadmin/duoduo-service/object-service/object/equipment/queryProjectEquipType?${commonParams()}`,
+    {
+      method: 'GET',
+      headers: {
+        'Content-Type': 'application/json',
+      },
+    },
+  );
+}

+ 1 - 2
src/services/sagacare_service/equipment.js

@@ -12,8 +12,7 @@ function commonParams() {
     var userObj = UserStorage.getInstance();
      const user = userObj.getUser();
      var pubname='sgadmin';
-    
-    return `openid=${user.id}&pubname=${pubname}&projectId=${getProjectId()}&userId=${user.id}&userName=${user.name}`;
+    return `openid=${user.id}&pubname=${pubname}&projectId=${getProjectId()}&userId=${user.id}&userName=${user.name}&userPhone=${user.phone}`;
 }
 
 // function commonParams() {