Browse Source

Merge branch 'master' of http://39.106.8.246:3003/sagacloud/sagacloud-manager-control

zhaojijng 3 năm trước cách đây
mục cha
commit
9afcb40ffd

+ 13 - 5
src/pages/Environment/components/chartModal/index.jsx

@@ -6,7 +6,7 @@ import cx from 'classnames';
 import { equipImageMap } from '@/config/image.js';
 import LineChart from './lineChart';
 
-export default ({ onClose }) => {
+export default ({ onClose, showSpace, selNav }) => {
   const { ruleCo2, ruleHcho, rulePm25 } = equipImageMap;
   const [paramList, setParamList] = useState([
     {
@@ -56,16 +56,24 @@ export default ({ onClose }) => {
     setParamObj(item);
   };
 
+  const defaultType = () => {
+    paramList.forEach((item) => {
+      if (item.id.includes(selNav.id)) {
+        itemClick(item);
+      }
+    });
+  };
+
   useEffect(() => {
-    itemClick(paramList[0]);
-  }, []);
+    defaultType(); // 默认展示类型
+  }, [selNav]);
 
   return (
     <>
       <Modal width={550} visible maskClosable={false} closable={false} footer={null}>
         <div className={styles.main}>
           <div className={styles.header}>
-            <div className={styles.title}>1#-1312</div>
+            <div className={styles.title}>{showSpace.localName}</div>
             <div className={styles.close} onClick={onClose}>
               <Icon type="close" />
             </div>
@@ -87,7 +95,7 @@ export default ({ onClose }) => {
               })}
             </div>
             <div className={styles.chart}>
-              <LineChart paramObj={paramObj} />
+              <LineChart paramObj={paramObj} spaceId={showSpace.id} />
               <div className={styles.chartText}>
                 <span>{paramObj.id == 'Tdb,RH' ? '温湿度逐时分布' : '浓度逐时分布'}</span>
               </div>

+ 8 - 9
src/pages/Environment/components/chartModal/lineChart.jsx

@@ -1,7 +1,7 @@
 import React, { useState, useEffect } from 'react';
 import { Line } from '@ant-design/plots';
 import { queryPropertyData } from '@/services/ant-design-pro/environment';
-export default ({ paramObj }) => {
+export default ({ paramObj, spaceId }) => {
   let [data, setData] = useState([]);
   let [levelMax, setLevelMax] = useState(0);
   const dealTime = (date) => {
@@ -10,10 +10,10 @@ export default ({ paramObj }) => {
     return time;
   };
   useEffect(() => {
-    if (paramObj.id) {
+    if (paramObj.id && spaceId) {
       fn();
     }
-  }, [paramObj]);
+  }, [paramObj, spaceId]);
   const fn = async () => {
     setData([]);
     let dataArr = [];
@@ -36,7 +36,7 @@ export default ({ paramObj }) => {
   };
   const getChartData = (objId, type) => {
     const params = {
-      spaceId: 'Sp110108025953063175f9ba4f5cb334deee89dc2cc1',
+      spaceId: spaceId,
       funcid: objId,
     };
     return queryPropertyData(params).then((res) => {
@@ -63,6 +63,10 @@ export default ({ paramObj }) => {
     yAxis: {
       tickCount: 6,
     },
+    legend: {
+      layout: 'horizontal',
+      position: 'top-right',
+    },
     annotations: [
       // 辅助线
       {
@@ -76,11 +80,6 @@ export default ({ paramObj }) => {
         },
       },
     ],
-    areaStyle: () => {
-      return {
-        fill: 'l(270) 0:#ffffff 1:#3C76E7',
-      };
-    },
   };
   return <Line {...config} />;
 };

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

@@ -6,7 +6,7 @@ import { equipImageMap } from '@/config/image.js';
 import AnSwitch from '../anSwitch';
 import { getFeedbackDocumentsHttp, changeAirHttp } from '@/services/ant-design-pro/equipment';
 
-export default () => {
+export default ({ spaceId, projectId }) => {
   const {
     airOpen,
     airClose,
@@ -66,8 +66,8 @@ export default () => {
 
   const getAirInfo = () => {
     const paramsObj = {
-      objectId: 'Sp1101080259c4434730d12144ba890fe11f796d3143',
-      projectId: 'Pj1101080259',
+      objectId: spaceId,
+      projectId: projectId,
     };
     getFeedbackDocumentsHttp(paramsObj).then((res) => {
       const val = res.icon == 7 ? false : true;
@@ -79,7 +79,7 @@ export default () => {
 
   const changeAir = (itemId) => {
     const paramsObj = {
-      objectId: 'this.objectId', // 空间id
+      objectId: spaceId, // 空间id
       valueType: 1, // 固定为1
       itemId: itemId,
     };

+ 3 - 3
src/pages/Equipment/components/deviceModal/curtainEq/index.jsx

@@ -7,7 +7,7 @@ import { getObjectDataEqpGroupHttp } from '@/services/ant-design-pro/equipment';
 
 const { curtain_open_row, expend_down, expend_up } = equipImageMap;
 
-export default () => {
+export default ({ spaceId, projectId }) => {
   const [isMore, setIsMore] = useState(false); // 可以展开
   const [flagSvg, setFlagSvg] = useState(false); // 箭头方向
   const [suspendDownFlag, setSuspendDownFlag] = useState(true); // 总向下暂停
@@ -29,8 +29,8 @@ export default () => {
   useEffect(() => {
     const params = {
       criteria: {
-        projectId: 'Pj1101080259',
-        spaceId: 'Sp1101080259c4434730d12144ba890fe11f796d3143',
+        projectId: projectId,
+        spaceId: spaceId,
         type: 0,
       },
       orders: [{ column: 'sortNum', asc: true }],

+ 137 - 18
src/pages/Equipment/components/deviceModal/index.jsx

@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, useMemo } from 'react';
 import { Modal, Row, Col } from 'antd';
 import Icon from '@/tenants-ui/Icon';
 import styles from './index.less';
@@ -8,7 +8,8 @@ import LampEq from './lampEq';
 import CurtainEq from './curtainEq';
 import { getSpaceAdjustList } from '@/services/ant-design-pro/equipment';
 
-export default ({ onClose }) => {
+export default ({ onClose, showSpace }) => {
+  const projectId = 'Pj1101080259';
   const envArr = [
     {
       name: '温度',
@@ -79,14 +80,22 @@ export default ({ onClose }) => {
   };
   const { officeImg } = equipImageMap;
   const [currentType, setCurrentType] = useState('3s');
-  const [spaceName, setSpaceName] = useState('王总办公室');
+  const [spaceName, setSpaceName] = useState('');
   const [paramList, setParamList] = useState([]);
+  const [timeArr, setTimeArr] = useState([]);
+  function showEqCard(type) {
+    let flag = false;
+    showSpace.equipStatusList.forEach((item) => {
+      if (item.equipType == type) return (flag = !flag);
+    });
+    return flag;
+  }
 
-  useEffect(() => {
+  const getData = () => {
     const paramsObj = {
       criteria: {
-        spaceId: 'Sp1101080259a0fc148d72f242fe9300566c12e15bf4',
-        projectId: 'Pj1101080259',
+        spaceId: showSpace.id,
+        projectId: projectId,
       },
       pubname: 'sagacareAndtenantslink',
       openid: '9a1ecfbacb6b4f249bf2dd3ec7793ead', // userId
@@ -96,6 +105,10 @@ export default ({ onClose }) => {
         res.content.forEach((item, idx) => {
           envArr.forEach((jtem, jdx) => {
             jtem.describe = checkLevel(item[jtem.id], jtem.id).levelTxt;
+            if (!item[jtem.id]) {
+              jtem.num = '--';
+              return;
+            }
             if (jtem.id == 'humidity') {
               jtem.num = item[jtem.id].toFixed(0);
             } else if (jtem.id == 'hcho') {
@@ -104,10 +117,103 @@ export default ({ onClose }) => {
               jtem.num = item[jtem.id];
             }
           });
-          //console.log(paramList, 'paramListparamList');
           setParamList(envArr);
         });
     });
+  };
+
+  const operateTime = () => {
+    // console.log(showSpace, 'showSpace');
+    /* showSpace.meetTime = [
+      //   { meetTimeStartTime: '06:00', meetTimeEndTime: '07:00' },
+      //   { meetTimeStartTime: '08:00', meetTimeEndTime: '11:00' },
+      { meetTimeStartTime: '14:00', meetTimeEndTime: '17:00' },
+      { meetTimeStartTime: '08:30', meetTimeEndTime: '18:30' },
+      { meetTimeStartTime: '14:00', meetTimeEndTime: '17:00' },
+      //   { meetTimeStartTime: '16:00', meetTimeEndTime: '19:00' },
+      //   { meetTimeStartTime: '20:00', meetTimeEndTime: '21:00' },
+    ];
+    showSpace.workTimeStartTime = '08:30';
+    showSpace.workTimeEndTime = '18:30';
+    */
+    // 使用时间
+    let timeArr = [];
+    if (showSpace.meetTime && showSpace.workTimeStartTime) {
+      let arr = [];
+      const meetingArr = JSON.parse(JSON.stringify(showSpace.meetTime));
+
+      let startBetween = false; // 会议时间是否跨在 工作头部
+      let endBetween = false; // 会议时间是否跨在 工作尾部
+      let workTimeStartTime = showSpace.workTimeStartTime; // 工作开始时间
+      let workTimeEndTime = showSpace.workTimeEndTime; // 工作开始时间
+      workTimeStartTime = workTimeStartTime.replace(':', '');
+      workTimeEndTime = workTimeEndTime.replace(':', '');
+      for (let i = meetingArr.length - 1; i >= 0; i--) {
+        let element = meetingArr[i];
+        let elementStartTime = element.meetTimeStartTime.replace(':', '');
+        let elementEndTime = element.meetTimeEndTime.replace(':', '');
+        if (elementEndTime > workTimeEndTime) {
+          // 比较工作时间的尾巴
+          if (elementStartTime > workTimeEndTime) {
+            arr.unshift(elementEndTime);
+            arr.unshift(elementStartTime);
+          } else {
+            arr.unshift(elementEndTime);
+            endBetween = true;
+          }
+        }
+
+        if (elementStartTime < workTimeStartTime) {
+          // 比较工作时间的头
+          if (elementEndTime < workTimeStartTime) {
+            arr.unshift(elementEndTime);
+            arr.unshift(elementStartTime);
+          } else {
+            arr.unshift(elementStartTime);
+            startBetween = true;
+          }
+        }
+      }
+      if (!startBetween && endBetween) {
+        // 尾巴交集
+        arr.push(workTimeStartTime);
+      }
+      if (startBetween && !endBetween) {
+        // 头部交集
+        arr.push(workTimeEndTime);
+      }
+      if (!startBetween && !endBetween) {
+        //无交集
+        arr.push(workTimeStartTime);
+        arr.push(workTimeEndTime);
+      }
+      arr = [...new Set(arr)].sort();
+      for (let j = 0; j < arr.length; j += 2) {
+        const element = arr[j].slice(0, 2) + ':' + arr[j].slice(2);
+        const elemNext = arr[j + 1].slice(0, 2) + ':' + arr[j + 1].slice(2);
+        timeArr.push(`${element}-${elemNext}`);
+      }
+    } else {
+      // 会议时间
+      showSpace.meetTime &&
+        showSpace.meetTime.forEach((item) => {
+          timeArr.push(`${item.meetTimeStartTime}-${item.meetTimeEndTime}`);
+        });
+      // 工作时间
+      showSpace.workTimeStartTime &&
+        timeArr.push(`${showSpace.workTimeStartTime}-${showSpace.workTimeEndTime}`);
+    }
+
+    // 加班时间
+    showSpace.overTimeStartTime &&
+      timeArr.push(`${showSpace.overTimeStartTime}-${showSpace.overTimeEndTime}`);
+
+    if (timeArr.length == 0) timeArr = ['--'];
+    return timeArr;
+  };
+
+  useEffect(() => {
+    getData();
   }, []);
 
   return (
@@ -118,10 +224,17 @@ export default ({ onClose }) => {
             <div className={styles.show}>
               <div className={styles.tileline}>
                 <img src={officeImg} className={styles.titleIcon}></img>
-                <span>1#-1312</span>
+                <span>{showSpace.localName}</span>
               </div>
               <div className={styles.timeLine}>
-                使用时间:<span>08:00-20:00</span>
+                使用时间:
+                {operateTime().map((item, idx) => {
+                  return (
+                    <span className={styles.pdr10} key={idx}>
+                      {item}
+                    </span>
+                  );
+                })}
               </div>
             </div>
             <div className={styles.close} onClick={onClose}>
@@ -145,15 +258,21 @@ export default ({ onClose }) => {
             </div>
             <div className={styles.devices}>
               <Row gutter={[12, 18]}>
-                <Col span={12}>
-                  <AirEq></AirEq>
-                </Col>
-                <Col span={12}>
-                  <LampEq></LampEq>
-                </Col>
-                <Col span={12}>
-                  <CurtainEq></CurtainEq>
-                </Col>
+                {showEqCard('airConditioner') && (
+                  <Col span={12}>
+                    <AirEq spaceId={showSpace.id} projectId={projectId}></AirEq>
+                  </Col>
+                )}
+                {showEqCard('light') && (
+                  <Col span={12}>
+                    <LampEq spaceId={showSpace.id} projectId={projectId}></LampEq>
+                  </Col>
+                )}
+                {showEqCard('curtain') && (
+                  <Col span={12}>
+                    <CurtainEq spaceId={showSpace.id} projectId={projectId}></CurtainEq>
+                  </Col>
+                )}
               </Row>
             </div>
           </div>

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

@@ -36,6 +36,9 @@
         margin-top: 9px;
         color: #4d5262;
         font-size: 15px;
+        .pdr10 {
+          padding-right: 10px;
+        }
       }
     }
     .editShow {

+ 2 - 2
src/pages/Equipment/components/deviceModal/lampEq/index.jsx

@@ -6,7 +6,7 @@ import { equipImageMap } from '@/config/image.js';
 import AnSwitch from '../anSwitch';
 import { getLampHttp, getStatusHttp } from '@/services/ant-design-pro/equipment';
 const { lamp_open, lamp_close, expend_down, expend_up } = equipImageMap;
-export default () => {
+export default ({ spaceId }) => {
   const [isMore, setIsMore] = useState(false);
   const [isOpen, setIsOpen] = useState(false); // 12 开, 10关
   const [lampArr, setLampArr] = useState([]); // 12 开, 10关
@@ -15,7 +15,7 @@ export default () => {
   const startLightsStatusTimer = useRef(null);
   const getLamp = () => {
     // startLightsStatusTimer.current = setInterval(() => {
-    getLampHttp('Sp1101080259c4434730d12144ba890fe11f796d3143').then((res) => {
+    getLampHttp(spaceId).then((res) => {
       const arr = res.content;
       if (arr.length > 1) setIsMore(true);
       arr.forEach((item) => {