Browse Source

feat:设备接口

anxiaoxia 3 years ago
parent
commit
8626950773

+ 8 - 0
config/proxy.ts

@@ -17,6 +17,14 @@ export default {
       changeOrigin: true,
       pathRewrite: { '^/api': '' },
     },
+    '/server/': {
+      // 要代理的地址
+      target: 'https://duoduoenv.sagacloud.cn/',
+      // 配置了这个可以从 http 代理到 https
+      // 依赖 origin 的功能可能需要这个,比如 cookie
+      changeOrigin: true,
+      //   pathRewrite: { '^/': '' },
+    },
   },
   test: {
     '/api/': {

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

@@ -1,8 +1,10 @@
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, useRef } from 'react';
+import { message } from 'antd';
 import styles from './index.less';
 import commonStyles from '../common.less';
 import { equipImageMap } from '@/config/image.js';
 import AnSwitch from '../anSwitch';
+import { getFeedbackDocumentsHttp, changeAirHttp } from '@/services/ant-design-pro/equipment';
 
 export default () => {
   const {
@@ -17,8 +19,10 @@ export default () => {
     wind_down,
   } = equipImageMap;
   const hasAir = true;
-  const [isOpen, setIsOpen] = useState(true); // 12 开, 10关
-  const temperature = '11';
+  const [isOpen, setIsOpen] = useState(true);
+  const [imgSrc, setImgSrc] = useState(null);
+  const timer = useRef(null);
+  const [spaceStatus, setStatusText] = useState('null');
   const airExpend = [
     {
       title: '温度调节',
@@ -37,21 +41,16 @@ export default () => {
       rightImg: wind_up,
     },
   ];
-  const airData = {
-    spaceStatus: true,
-    icon: 2,
-  };
-
-  const airStatusImg = () => {
-    switch (airData.icon) {
+  const statusImg = (icon) => {
+    switch (icon) {
       case 1:
-        return temp_keep;
+        return setImgSrc(temp_keep);
         break;
       case 2:
-        return temp_down;
+        return setImgSrc(temp_down);
         break;
       case 3:
-        return temp_up;
+        return setImgSrc(temp_up);
         break;
 
       default:
@@ -60,13 +59,47 @@ export default () => {
   };
 
   function changeSwitch(val) {
+    const itemIdSum = val ? 12 : 10; // 10关闭 12开启
+    changeAir(itemIdSum);
     setIsOpen(val);
   }
 
-  const AirExpend = () => {
-    const changeTemp = (type) => {
-      console.log(type, 'win 风蛋糕');
+  const getAirInfo = () => {
+    const paramsObj = {
+      objectId: 'Sp1101080259c4434730d12144ba890fe11f796d3143',
+      projectId: 'Pj1101080259',
+    };
+    getFeedbackDocumentsHttp(paramsObj).then((res) => {
+      const val = res.icon == 7 ? false : true;
+      setIsOpen(val); // 开关
+      setStatusText(res.spaceStatus); // 状态文案
+      statusImg(res.icon); // icon
+    });
+  };
+
+  const changeAir = (itemId) => {
+    const paramsObj = {
+      objectId: 'this.objectId', // 空间id
+      valueType: 1, // 固定为1
+      itemId: itemId,
     };
+    changeAirHttp(paramsObj).then((res) => {
+      if (res.result == 'success') {
+        message.success('指令下发成功');
+        setStatusText(res.spaceStatus); // 状态文案
+      } else {
+        message.error('操作失败,请重试');
+      }
+    });
+  };
+
+  useEffect(() => {
+    // timer = setInterval(() => {
+    getAirInfo(); // 获取空调状态
+    // }, 1000);
+  }, []);
+
+  const AirExpend = () => {
     if (isOpen) {
       return (
         <>
@@ -76,10 +109,10 @@ export default () => {
                 <div className={styles.item} key={idx}>
                   <div>{items.title}</div>
                   <div className={styles.itemRight}>
-                    <div className={styles.itemBg} onClick={() => changeTemp(items.downType)}>
+                    <div className={styles.itemBg} onClick={() => changeAir(items.downType)}>
                       <img className={styles.itemImg} src={items.leftImg} />
                     </div>
-                    <div className={styles.itemBg} onClick={() => changeTemp(items.upType)}>
+                    <div className={styles.itemBg} onClick={() => changeAir(items.upType)}>
                       <img className={styles.itemImg} src={items.rightImg} />
                     </div>
                   </div>
@@ -100,15 +133,11 @@ export default () => {
         <div className={styles.env}>
           <div className={styles.envLeft}>
             <span className={commonStyles.eqTitle}>空调</span>
-            <div className={styles.envnum}>
-              {temperature ? temperature : '--'}
-              <span className={styles.unit}>℃</span>
-            </div>
             <div className={styles.airStatus}>
-              <span>{isOpen ? '空调已开启' : '空调已关闭'}</span>
+              <span className={styles.airStatusText}>{isOpen ? '空调已开启' : '空调已关闭'}</span>
               <div className={styles.airStatusbox}>
-                <img className={styles.airStatusImg} src={airStatusImg()} />
-                <span className={styles.statusText}>正在全力降温中的对方的身份</span>
+                <img className={styles.airStatusImg} src={imgSrc} />
+                <span className={styles.statusText}>{spaceStatus}</span>
               </div>
             </div>
           </div>

+ 26 - 22
src/pages/Equipment/components/deviceModal/airEq/index.less

@@ -13,26 +13,26 @@
         height: 140px;
         padding-top: 24px;
         padding-left: 30px;
-        .envnum {
-          display: flex;
-          flex-direction: row;
-          align-items: flex-start;
-          padding-top: 5px;
-          padding-bottom: 5px;
-          color: #1b144e;
-          font-weight: 400;
-          font-size: 32px;
-          font-family: Montserrat;
-          line-height: 32px;
-          .unit {
-            color: #c4c4c4;
-            font-weight: 800;
-            font-size: 12px;
-            font-family: Mulish;
-            font-style: normal;
-            line-height: 15px;
-          }
-        }
+        // .envnum {
+        //   display: flex;
+        //   flex-direction: row;
+        //   align-items: flex-start;
+        //   padding-top: 5px;
+        //   padding-bottom: 5px;
+        //   color: #1b144e;
+        //   font-weight: 400;
+        //   font-size: 32px;
+        //   font-family: Montserrat;
+        //   line-height: 32px;
+        //   .unit {
+        //     color: #c4c4c4;
+        //     font-weight: 800;
+        //     font-size: 12px;
+        //     font-family: Mulish;
+        //     font-style: normal;
+        //     line-height: 15px;
+        //   }
+        // }
       }
       .envRight {
         width: 165px;
@@ -44,15 +44,19 @@
       }
     }
     .airStatus {
-      padding-top: 5px;
       color: rgba(196, 196, 196, 1);
       font-weight: 400;
       font-size: 14px;
       font-family: PingFang SC;
       line-height: 20px;
+      .airStatusText {
+        display: inline-block;
+        padding-top: 10px;
+      }
       .airStatusbox {
         display: flex;
         align-items: center;
+        padding-top: 28px;
         .airStatusImg {
           width: 12px;
           height: 12px;
@@ -60,7 +64,7 @@
         }
         .statusText {
           display: inline-block;
-          width: 96px;
+          width: 120px;
           overflow: hidden;
           font-size: 11px;
           line-height: 18px;

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

@@ -2,10 +2,6 @@ import React, { useState, useEffect } from 'react';
 import './index.less';
 
 export default ({ isOpen }) => {
-  //   const cb = () => {
-  //     changeSwitch(!isOpen, 'total');
-  //   };
-
   return (
     <div className="box">
       <div className={`content ${isOpen ? null : 'closeBg'}`}>

+ 32 - 5
src/pages/Equipment/components/deviceModal/curtainEq/curtainBtn.jsx

@@ -3,13 +3,39 @@ import commonStyles from '../common.less';
 import { equipImageMap } from '@/config/image.js';
 const { curtain_close_icon_row, curtain_open_icon_row } = equipImageMap;
 
-export default (id, index) => {
+export default ({ id, isTotal, preTime, changePreTime, changeCurtainTex, curtainArr }) => {
   const [downFlag, setDownFlag] = useState(false);
   const [upFlag, setUpFlag] = useState(false);
   const [count, setCount] = useState();
   let setTimer = useRef(null);
+  const sendData = (setType, id) => {
+    let paramsArr = [];
+    if (isTotal) {
+      curtainArr.forEach((item) => {
+        paramsArr.push({
+          equipmentCategory: 'CFSSES',
+          infoCode: setType,
+          value: 1,
+          objectId: item.id,
+        });
+      });
+    } else {
+      const params = {
+        projectId: 'Pj1101080259',
+        objectId: id, // 设备ID/窗帘组ID
+        equipmentCategory: 'CFSSES', // 设备编码 窗帘:CFSSES
+        infoCode: setType, // 窗帘开设定:EquipOnSet 窗帘关设定:EquipOffSet
+        value: 1, // 窗帘 1 移动/停止
+      };
+      paramsArr.push(params);
+    }
+    console.log(paramsArr, 'paramsArrparamsArr');
+  };
   const handleCurtain = (setType, id, index) => {
-    if (downFlag || upFlag) return; // 左右按钮互称
+    const nowTime = Date.now();
+    if (nowTime - preTime <= 2000) return; // 请求间隔 2秒
+    changePreTime(Date.now());
+    sendData(setType, id);
     if (setType == 'EquipOffSet') {
       setDownFlag(true);
       setUpFlag(false);
@@ -26,7 +52,10 @@ export default (id, index) => {
   };
 
   useEffect(() => {
+    if (count == 2) changeCurtainTex('指令下发中…');
+    if (count == 1) changeCurtainTex('再次点击停止窗帘');
     if (count === 0) {
+      changeCurtainTex('');
       setDownFlag(false);
       setUpFlag(false);
       clearInterval(setTimer.current);
@@ -50,9 +79,7 @@ export default (id, index) => {
         onClick={() => {
           handleCurtain('EquipOnSet', id, 2);
         }}
-        className={`${commonStyles.circulBtn} ${commonStyles.mgr20} ${
-          upFlag ? commonStyles.yell : ''
-        }`}
+        className={`${commonStyles.circulBtn}  ${upFlag ? commonStyles.yell : ''}`}
       >
         {upFlag && <div>{count}</div>}
         {!upFlag && <img className={commonStyles.btnIcon} src={curtain_open_icon_row}></img>}

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

@@ -8,20 +8,24 @@ import { getObjectDataEqpGroupHttp } from '@/services/ant-design-pro/equipment';
 const { curtain_open_row, expend_down, expend_up } = equipImageMap;
 
 export default () => {
-  const [isMore, setIsMore] = useState(true);
-  const [flagSvg, setFlagSvg] = useState(true);
+  const [isMore, setIsMore] = useState(false); // 可以展开
+  const [flagSvg, setFlagSvg] = useState(false); // 箭头方向
   const [suspendDownFlag, setSuspendDownFlag] = useState(true); // 总向下暂停
   const [suspendUpFlag, setSuspendUpFlag] = useState(false); // 总向下暂停
   const [count, setCount] = useState(2); // 倒计时
   const [countText, setCountText] = useState(); // 倒计时文案
-
-  const lampArr = [
-    { id: '1', title: '主灯', sta: true },
-    { id: '2', title: '顶灯', sta: false },
-  ];
+  const [curtainArr, setCurtainArr] = useState([]); // 窗帘数据
+  const [preTime, setPreTime] = useState(Date.now());
+  const [curtainText, setCurtainText] = useState('');
   function handleExpend() {
     setFlagSvg(!flagSvg);
   }
+  const changePreTime = useCallback((val) => {
+    setPreTime(val);
+  });
+  const changeCurtainTex = useCallback((val) => {
+    setCurtainText(val);
+  });
   useEffect(() => {
     const params = {
       criteria: {
@@ -32,7 +36,13 @@ export default () => {
       orders: [{ column: 'sortNum', asc: true }],
     };
     getObjectDataEqpGroupHttp(params).then((res) => {
-      debugger;
+      let arr = res.content;
+      if (arr.length > 1) {
+        setIsMore(true);
+      } else {
+        setIsMore(false);
+      }
+      setCurtainArr(arr);
     });
   }, []);
 
@@ -41,9 +51,9 @@ export default () => {
       <div className={commonStyles.content}>
         <div className={commonStyles.env}>
           <div className={commonStyles.envLeft}>
-            <span className={commonStyles.eqTitle}>窗帘</span>
+            <span className={commonStyles.eqTitle}>{isMore ? '窗帘' : curtainArr[0]?.name}</span>
             <div className={`${commonStyles.eqStatus} ${commonStyles.pdt10}`}>
-              <span>窗帘已开启</span>
+              <span>{curtainText}</span>
             </div>
             {isMore && (
               <div className={commonStyles.showAll} onClick={handleExpend}>
@@ -57,18 +67,32 @@ export default () => {
           </div>
           {!flagSvg && (
             <div className={commonStyles.eqCirculBtn}>
-              <CurtainBtn downFlag={suspendDownFlag}></CurtainBtn>
+              <CurtainBtn
+                id=""
+                isTotal={true}
+                preTime={preTime}
+                changePreTime={changePreTime}
+                changeCurtainTex={changeCurtainTex}
+                curtainArr={curtainArr}
+              ></CurtainBtn>
             </div>
           )}
         </div>
       </div>
-      {lampArr.map((item, idx) => {
+      {curtainArr.map((item, idx) => {
         if (flagSvg) {
           return (
             <div className={`${styles.lampChild} ${commonStyles.flexBetween}`} key={item.id}>
-              <div className={commonStyles.eqTitle}>{item.title}</div>
+              <div className={commonStyles.eqTitle}>{item.name}</div>
               <div className={commonStyles.dsflex}>
-                <CurtainBtn></CurtainBtn>
+                <CurtainBtn
+                  id={item.id}
+                  isTotal={false}
+                  preTime={preTime}
+                  changePreTime={changePreTime}
+                  changeCurtainTex={changeCurtainTex}
+                  curtainArr={curtainArr}
+                ></CurtainBtn>
               </div>
             </div>
           );

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

@@ -1,34 +1,117 @@
-import React, { useState, useEffect, useCallback } from 'react';
+import React, { useState, useEffect, useCallback, useRef } from 'react';
+import { message } from 'antd';
 import styles from './index.less';
 import commonStyles from '../common.less';
 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 () => {
-  const [isMore, setIsMore] = useState(true);
-  const [isOpen, setIsOpen] = useState(true); // 12 开, 10关
+  const [isMore, setIsMore] = useState(false);
+  const [isOpen, setIsOpen] = useState(false); // 12 开, 10关
+  const [lampArr, setLampArr] = useState([]); // 12 开, 10关
+  const startTime = null;
+  const endTime = null;
+  const startLightsStatusTimer = useRef(null);
+  const getLamp = () => {
+    // startLightsStatusTimer.current = setInterval(() => {
+    getLampHttp('Sp1101080259c4434730d12144ba890fe11f796d3143').then((res) => {
+      const arr = res.content;
+      if (arr.length > 1) setIsMore(true);
+      arr.forEach((item) => {
+        if (item.runStatus) setIsOpen(true);
+      });
+      setLampArr(arr);
+    });
+    // }, 1000);
+  };
 
-  const lampArr = [
-    { id: '1', title: '主灯', sta: true },
-    { id: '2', title: '顶灯', sta: false },
-  ];
+  useEffect(() => {
+    getLamp(); // 灯设备状态
+  }, []);
 
   const [flagSvg, setFlagSvg] = useState(false);
   function handleExpend() {
+    clearInterval(startLightsStatusTimer.current);
     setFlagSvg(!flagSvg);
   }
+  // 定时调用 查询指令接口
+  const checkChangeLightStatusSuccess = (paramsArr) => {
+    if (endTime - startTime >= 5000) {
+      //   wx.hideLoading();
+      message.error('网络故障,请重试');
+    } else {
+      getStatusHttp(paramsArr).then((res) => {
+        return judgeChangeResponeseSuccess(res);
+      });
+    }
+  };
+  //   检查开关指令下发状态
+  const judgeChangeResponeseSuccess = (response) => {
+    return new Promise((resolve, reject) => {
+      let result = response.content[0];
+      if (result.result === 'success') {
+        if (result.state === 200 && result.exeResult === 'success') {
+          resolve({ status: 'success', data: result });
+        } else if (result.exeResult === 'processing:rcvd' || result.state === 202) {
+          resolve({ status: 'processing', data: result });
+        } else {
+        }
+      } else {
+        console.log('judgeChangeResponeseSuccess-fail');
+      }
+    });
+  };
+  //  开关
+  const changeSwitch = (val, type, id) => {
+    let paramsArr = [];
+    if (type == 'total') {
+      lampArr.forEach((item) => {
+        paramsArr.push({
+          id: item.id,
+          switch: val,
+        });
+      });
+    } else {
+      paramsArr.push({ id: id, switch: val });
+    }
+    console.log(paramsArr, 'paramsArr');
+    setallLampHttp(paramsArr)
+      .then((res) => {
+        startTime = Date.now(); // 开始计时'
+        clearInterval(startLightsStatusTimer.current); // 灯设备
+        return judgeChangeResponeseSuccess(res, paramsArr);
+      })
+      .then(
+        (res) => {
+          switch (res.status) {
+            case 'success':
+              getLamp();
+            case 'processing':
+              // 继续查询
+              //   wx.showLoading({
+              //     title: '加载中...',
+              //     mark: true,
+              //   });
+              endTime = Date.now();
+              checkChangeLightStatusSuccess(paramsArr);
+              break;
+          }
+        },
+        () => {
+          message.error('操作失败,请重试');
+        },
+      );
+  };
 
-  function changeSwitch(val, type) {
-    setIsOpen(val);
-  }
   return (
     <div className={commonStyles.box}>
       <div className={commonStyles.content}>
         <div className={commonStyles.env}>
           <div className={commonStyles.envLeft}>
-            <span className={commonStyles.eqTitle}>照明</span>
+            <span className={commonStyles.eqTitle}>{isMore ? '光照' : lampArr[0]?.localName}</span>
             <div className={`${commonStyles.eqStatus} ${commonStyles.pdt10}`}>
-              <span>照明已关闭</span>
+              <span>{isOpen ? '照明已开启' : '照明已关闭'}</span>
             </div>
             {isMore && (
               <div className={commonStyles.showAll} onClick={handleExpend}>
@@ -56,13 +139,13 @@ export default () => {
         if (flagSvg) {
           return (
             <div className={`${styles.lampChild} ${commonStyles.flexBetween}`} key={item.id}>
-              <div className={commonStyles.eqTitle}>{item.title}</div>
+              <div className={commonStyles.eqTitle}>{item.localName}</div>
               <div
                 onClick={() => {
-                  changeSwitch(!item.sta, 'child');
+                  changeSwitch(!item.runStatus, 'child', item.id);
                 }}
               >
-                <AnSwitch isOpen={item.sta}></AnSwitch>
+                <AnSwitch isOpen={item.runStatus}></AnSwitch>
               </div>
             </div>
           );

File diff suppressed because it is too large
+ 62 - 17
src/services/ant-design-pro/equipment.js