anxiaoxia 2 anni fa
parent
commit
9a9ecdf1a8
59 ha cambiato i file con 541 aggiunte e 497 eliminazioni
  1. 16 0
      config/proxy.ts
  2. 14 14
      config/routes.ts
  3. 10 5
      src/app.tsx
  4. 6 7
      src/assets/css/map.less
  5. 0 33
      src/components/PageHeader/index.tsx
  6. 3 2
      src/config/api.js
  7. 0 51
      src/config/image.js
  8. 57 0
      src/config/sagacare_image.js
  9. 0 0
      src/config/sagacare_user.ts
  10. 0 25
      src/hooks/useMapList.ts
  11. 1 2
      src/hooks/useMenuList.ts
  12. 8 3
      src/layouts/index.jsx
  13. 5 5
      src/layouts/index.less
  14. 0 22
      src/models/map.ts
  15. 21 0
      src/models/sagacare_buildFloor.ts
  16. 4 4
      src/models/searchInfo.ts
  17. 0 0
      src/models/sagacare_spaceFunc.ts
  18. 0 18
      src/pages/404.tsx
  19. 2 2
      src/pages/Environment/components/chartModal/index.jsx
  20. 1 1
      src/pages/Environment/components/chartModal/index.less
  21. 1 1
      src/pages/Environment/components/chartModal/lineChart.jsx
  22. 1 1
      src/pages/Environment/index.less
  23. 13 11
      src/pages/Environment/index.tsx
  24. 1 1
      src/pages/Equipment/checLampStatus.js
  25. 2 2
      src/pages/Equipment/components/deviceModal/common.less
  26. 2 2
      src/pages/Equipment/components/deviceModal/curtainEq/curtainBtn.jsx
  27. 2 2
      src/pages/Equipment/components/deviceModal/curtainEq/index.jsx
  28. 9 9
      src/pages/Equipment/components/deviceModal/index.jsx
  29. 2 2
      src/pages/Equipment/components/deviceModal/lampEq/index.jsx
  30. 5 5
      src/pages/Equipment/components/topNavRight/index.tsx
  31. 1 1
      src/pages/Equipment/equipmentControl.js
  32. 1 1
      src/pages/Equipment/index.less
  33. 14 12
      src/pages/Equipment/index.tsx
  34. 1 1
      src/pages/NoAuth/index.less
  35. 1 2
      src/pages/Runtime/RecordList/index.jsx
  36. 2 5
      src/pages/Runtime/components/showModal/index.jsx
  37. 1 1
      src/pages/Runtime/components/topNavRight/index.tsx
  38. 1 1
      src/pages/Runtime/index.less
  39. 13 13
      src/pages/Runtime/index.tsx
  40. 0 8
      src/pages/Welcome.less
  41. 0 7
      src/pages/Welcome.tsx
  42. 1 1
      src/pages/user/Login/index.tsx
  43. 16 4
      src/components/PageHeader/index.less
  44. 64 0
      src/sagacare_components/PageHeader/index.tsx
  45. 0 0
      src/sagacare_components/SearchInput/index.less
  46. 5 4
      src/components/SearchInput/index.tsx
  47. 0 0
      src/sagacare_components/map/index.less
  48. 16 7
      src/components/map/index.tsx
  49. 1 1
      src/components/navMenu/index.less
  50. 1 1
      src/components/navMenu/index.tsx
  51. 2 2
      src/components/topNavigator/index.less
  52. 62 66
      src/components/topNavigator/index.tsx
  53. 3 3
      src/services/ant-design-pro/environment.ts
  54. 146 0
      src/services/sagacare_service/equipment copy.js
  55. 3 3
      src/services/ant-design-pro/equipment.js
  56. 0 0
      src/services/sagacare_service/typings.d.ts
  57. 0 73
      src/tenants-ui/SearchInput/index.jsx
  58. 0 50
      src/tenants-ui/SearchInput/index.less
  59. 0 0
      src/tenants-ui/SgIcon/index.jsx

+ 16 - 0
config/proxy.ts

@@ -9,6 +9,22 @@
 export default {
   dev: {
     // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
+    // '/sgadmin/duoduo-service': {
+    //   //target: 'https://duoduoenv.sagacloud.cn/',
+    //   target: 'http://10.100.28.79',
+    //   changeOrigin: true,
+    //   pathRewrite: {
+    //     '^/sgadmin/duoduo-service': '/sgadmin/duoduo-service',
+    //   },
+    // },
+    // '/sgadmin/sso': {
+    //   //target: 'https://duoduoenv.sagacloud.cn/',
+    //   target: 'http://10.100.28.79',
+    //   changeOrigin: true,
+    //   pathRewrite: {
+    //     '^/sgadmin/sso': '/sgadmin/sso',
+    //   },
+    // },
     '/sgadmin': {
       //   target: 'https://duoduoenv.sagacloud.cn/',
       target: 'http://10.100.28.79',

+ 14 - 14
config/routes.ts

@@ -3,19 +3,19 @@
     path: '/user',
     layout: false,
     routes: [
-      {
-        path: '/user',
-        routes: [
-          {
-            name: 'login',
-            path: '/user/login',
-            component: './user/Login',
-          },
-        ],
-      },
-      {
-        component: './404',
-      },
+      //   {
+      //     path: '/user',
+      //     routes: [
+      //       {
+      //         name: 'login',
+      //         path: '/user/login',
+      //         component: './user/Login',
+      //       },
+      //     ],
+      //   },
+      //   {
+      //     component: './404',
+      //   },
     ],
   },
   {
@@ -24,7 +24,7 @@
     routes: [
       {
         path: '/',
-        redirect: '/environment',
+        redirect: '/Equipment',
       },
       {
         path: '/noAuth',

+ 10 - 5
src/app.tsx

@@ -1,8 +1,8 @@
 import { PageLoading } from '@ant-design/pro-layout';
 import { history, useModel } from 'umi';
-import { checkToken, reFreshCheckToken } from '@/services/ant-design-pro/environment';
-import { projectId } from '@/config/api.js';
-import UserStorage from '@/config/user';
+import { checkToken, reFreshCheckToken } from '@/services/sagacare_service/environment';
+import { projectObj } from '@/config/api.js';
+import UserStorage from '@/config/sagacare_user';
 const loginPath = '/noAuth';
 
 /** 获取用户信息比较慢的时候会展示一个 loading */
@@ -50,10 +50,12 @@ export async function getInitialState(): Promise<{
     } catch (err) {
       history.push(loginPath);
     }
+
     if (resUser) {
       //获取用户信息 并储存
       var userObj = UserStorage.getInstance();
       userObj.setUser(resUser);
+
       return resUser;
     } else {
       history.push(loginPath);
@@ -62,15 +64,18 @@ export async function getInitialState(): Promise<{
   };
 
   let currentUser = {};
-  //之江项目 验证token
-  if (projectId == 'Pj3301100002') {
+  //projectId = 'Pj1101080259';
+  if (projectObj.projectId == 'Pj3301100002') {
+    //之江项目 验证token
     currentUser = await fetchUser();
   } else {
+    //非之江项目
     let tempUser = {
       name: '行政测试',
       phone: '17611228068',
       id: '9a1ecfbacb6b4f249bf2dd3ec7793ead',
     };
+
     var userObj = UserStorage.getInstance();
     userObj.setUser(tempUser);
   }

+ 6 - 7
src/assets/css/map.less

@@ -1,5 +1,5 @@
 .spinnclass {
-  height: calc(100% - 285px);
+  // height: calc(100% - 245px);
 }
 
 :global {
@@ -29,11 +29,10 @@
       font-size: 25px;
       background: #fff;
       border-radius: 4px;
-
       cursor: pointer;
     }
     .zoom:hover {
-      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.05), 0px 4px 15px rgba(0, 0, 0, 0.05);
+      box-shadow: 0 0 2px rgba(0, 0, 0, 0.05), 0 4px 15px rgba(0, 0, 0, 0.05);
     }
     .zoom.disable {
       opacity: 0.4;
@@ -88,7 +87,7 @@
         width: 22px;
         height: 22px;
         margin-right: 3px;
-        color: #ffffff;
+        color: #fff;
         font-size: 11px;
         background: transparent;
         border-radius: 22px;
@@ -121,10 +120,10 @@
         box-sizing: border-box;
         width: 100%;
         padding: 0 3px;
-        color: #000000;
+        color: #000;
         font-size: 13px;
         text-align: center;
-        //text-shadow: 1px 1px 1px #ffffff;
+        //text-shadow: 1px 1px 1px #fff;
         text-shadow: -1px 0 white, 0 1px white, 1px 0 white, 0 -1px white;
       }
     }
@@ -164,7 +163,7 @@
       width: 22px;
       height: 22px;
       font-size: 12px;
-      background: #ffffff;
+      background: #fff;
       border-radius: 22px;
     }
     &:hover .showModal {

+ 0 - 33
src/components/PageHeader/index.tsx

@@ -1,33 +0,0 @@
-import React, { useEffect } from 'react';
-import styles from './index.less';
-
-import { useModel, history } from 'umi';
-
-type PageHeaderProps = {
-  title: React.ReactNode;
-  action: React.ReactNode;
-};
-const PageHeader: React.FC<PageHeaderProps> = ({ title, action }) => {
-  //console.log('PageHeader');
-
-  useEffect(() => {
-    //debugger
-    const unlisten = history.listen((location, action) => {
-      console.log('location,action', location, action);
-    });
-    return () => {
-      //console.log('un--PageHeader--useEffect');
-      unlisten();
-    };
-  }, []);
-  return (
-    <>
-      <div className={styles.navHeader}>
-        <div className={styles.title}>{title}</div>
-        {action}
-      </div>
-    </>
-  );
-};
-
-export default PageHeader;

+ 3 - 2
src/config/api.js

@@ -1,3 +1,4 @@
 export const BASE_PATH = '/api';
-// export const projectId = 'Pj3301100002';//之江
-export const projectId = 'Pj1101080259';
+//export const projectId = 'Pj3301100002';//之江
+//export const projectId = 'Pj1101080259';//Pj1101080259
+export const projectObj = { projectId: 'Pj3301100002' };

+ 0 - 51
src/config/image.js

@@ -1,51 +0,0 @@
-export const equipImageMap = {
-//   temperMapTop: require('@/assets/images/page-enviroment/temperMapTop.png'),
-//   co2MapTop: require('@/assets/images/page-enviroment/co2MapTop.png'),
-//   maptemp1: require('@/assets/images/page-enviroment/maptemp1.png'),
-//   maptemp2: require('@/assets/images/page-enviroment/maptemp2.png'),
-  envir_temperature: require('@/assets/images/page-enviroment/temperature.svg'),
-  envir_wet: require('@/assets/images/page-enviroment/wet.svg'),
-  envir_co2: require('@/assets/images/page-enviroment/co2.svg'),
-  envir_pm25: require('@/assets/images/page-enviroment/pm25.svg'),
-  envir_jiaquan: require('@/assets/images/page-enviroment/jiaquan.svg'),
-  envir_tvoc: require('@/assets/images/page-enviroment/tvoc.svg'),
-
-  officeImg: require('@/assets/images/page-enviroment/office.svg'),
-//   airMapTop: require('@/assets/images/page-enviroment/airMapTop.svg'),
-//   lampMapTop: require('@/assets/images/page-enviroment/lampMapTop.svg'),
-//   maptemp3: require('@/assets/images/page-enviroment/maptemp3.png'),
-//   maptemp4: require('@/assets/images/page-enviroment/maptemp4.png'),
-//   maptemp5: require('@/assets/images/page-enviroment/maptemp5.png'),
-
-  envir_all: require('@/assets/images/page-enviroment/all.svg'),
-  equip_air: require('@/assets/images/page-enviroment/air.svg'),
-  equip_lamp: require('@/assets/images/page-enviroment/lamp.svg'),
-  equip_water: require('@/assets/images/page-enviroment/water.svg'),
-  envir_curtain: require('@/assets/images/page-enviroment/curtain.svg'),
-  envir_humidification: require('@/assets/images/page-enviroment/humidification.svg'),
-
-//   maptemp6: require('@/assets/images/page-enviroment/maptemp6.png'),
-
-// 环境指数说明
-ruleCo2: require('@/assets/images/page-enviroment/rule-co2.png'),
-ruleHcho: require('@/assets/images/page-enviroment/rule-hcho.png'),
-rulePm25: require('@/assets/images/page-enviroment/rule-pm25.png'),
-
-  // 设备
-airClose: require('@/assets/images/page-equipment/airClose.png'),
-airOpen: require('@/assets/images/page-equipment/airOpen.png'),
-temp_down: require('@/assets/images/page-equipment/temp-down.svg'),
-temp_up: require('@/assets/images/page-equipment/temp-up.svg'),
-temp_keep: require('@/assets/images/page-equipment/temp-keep.png'),
-arrow_down: require('@/assets/images/page-equipment/arrow-down.svg'),
-arrow_up: require('@/assets/images/page-equipment/arrow-up.svg'),
-wind_up: require('@/assets/images/page-equipment/wind-up.svg'),
-wind_down: require('@/assets/images/page-equipment/wind-down.svg'),
-lamp_open: require('@/assets/images/page-equipment/lamp-open.png'),
-lamp_close: require('@/assets/images/page-equipment/lamp-close.png'),
-expend_down: require('@/assets/images/page-equipment/expend-down.svg'),
-expend_up: require('@/assets/images/page-equipment/expend-up.svg'),
-curtain_open_row: require('@/assets/images/page-equipment/curtain-open-row.png'),
-curtain_open_icon_row: require('@/assets/images/page-equipment/curtain-open-icon-row.svg'),
-curtain_close_icon_row: require('@/assets/images/page-equipment/curtain-close-icon-row.svg'),
-};

+ 57 - 0
src/config/sagacare_image.js

@@ -0,0 +1,57 @@
+import envir_temperature from '@/assets/images/page-enviroment/temperature.svg';
+import envir_wet from '@/assets/images/page-enviroment/wet.svg';
+import envir_co2 from '@/assets/images/page-enviroment/co2.svg';
+import envir_pm25 from '@/assets/images/page-enviroment/pm25.svg';
+import envir_jiaquan from '@/assets/images/page-enviroment/jiaquan.svg';
+import envir_tvoc from '@/assets/images/page-enviroment/tvoc.svg';
+export const equipImageMap = {
+    //   temperMapTop: require('@/assets/images/page-enviroment/temperMapTop.png'),
+    //   co2MapTop: require('@/assets/images/page-enviroment/co2MapTop.png'),
+    //   maptemp1: require('@/assets/images/page-enviroment/maptemp1.png'),
+    //   maptemp2: require('@/assets/images/page-enviroment/maptemp2.png'),
+    envir_temperature: envir_temperature,
+    envir_wet: envir_wet,
+    envir_co2: envir_co2,
+    envir_pm25: envir_pm25,
+    envir_jiaquan: envir_jiaquan,
+    envir_tvoc: envir_tvoc,
+
+    officeImg: require('@/assets/images/page-enviroment/office.svg'),
+    //   airMapTop: require('@/assets/images/page-enviroment/airMapTop.svg'),
+    //   lampMapTop: require('@/assets/images/page-enviroment/lampMapTop.svg'),
+    //   maptemp3: require('@/assets/images/page-enviroment/maptemp3.png'),
+    //   maptemp4: require('@/assets/images/page-enviroment/maptemp4.png'),
+    //   maptemp5: require('@/assets/images/page-enviroment/maptemp5.png'),
+
+    envir_all: require('@/assets/images/page-enviroment/all.svg'),
+    equip_air: require('@/assets/images/page-enviroment/air.svg'),
+    equip_lamp: require('@/assets/images/page-enviroment/lamp.svg'),
+    equip_water: require('@/assets/images/page-enviroment/water.svg'),
+    envir_curtain: require('@/assets/images/page-enviroment/curtain.svg'),
+    envir_humidification: require('@/assets/images/page-enviroment/humidification.svg'),
+
+    //   maptemp6: require('@/assets/images/page-enviroment/maptemp6.png'),
+
+    // 环境指数说明
+    ruleCo2: require('@/assets/images/page-enviroment/rule-co2.png'),
+    ruleHcho: require('@/assets/images/page-enviroment/rule-hcho.png'),
+    rulePm25: require('@/assets/images/page-enviroment/rule-pm25.png'),
+
+    // 设备
+    airClose: require('@/assets/images/page-equipment/airClose.png'),
+    airOpen: require('@/assets/images/page-equipment/airOpen.png'),
+    temp_down: require('@/assets/images/page-equipment/temp-down.svg'),
+    temp_up: require('@/assets/images/page-equipment/temp-up.svg'),
+    temp_keep: require('@/assets/images/page-equipment/temp-keep.png'),
+    arrow_down: require('@/assets/images/page-equipment/arrow-down.svg'),
+    arrow_up: require('@/assets/images/page-equipment/arrow-up.svg'),
+    wind_up: require('@/assets/images/page-equipment/wind-up.svg'),
+    wind_down: require('@/assets/images/page-equipment/wind-down.svg'),
+    lamp_open: require('@/assets/images/page-equipment/lamp-open.png'),
+    lamp_close: require('@/assets/images/page-equipment/lamp-close.png'),
+    expend_down: require('@/assets/images/page-equipment/expend-down.svg'),
+    expend_up: require('@/assets/images/page-equipment/expend-up.svg'),
+    curtain_open_row: require('@/assets/images/page-equipment/curtain-open-row.png'),
+    curtain_open_icon_row: require('@/assets/images/page-equipment/curtain-open-icon-row.svg'),
+    curtain_close_icon_row: require('@/assets/images/page-equipment/curtain-close-icon-row.svg'),
+};

src/config/user.ts → src/config/sagacare_user.ts


+ 0 - 25
src/hooks/useMapList.ts

@@ -1,25 +0,0 @@
-import { useState, useEffect } from 'react';
-import { getMapList } from '@/services/ant-design-pro/environment';
-
-let mapListData: any = [];
-
-function useMapList(selFloorId: string) {
-  const [mapList, setMapList] = useState<API.MapInfo[]>([]);
-
-  //console.log(mapListData, 'mapListData');
-
-  //当selFloorId 改变时调用
-  useEffect(() => {
-    if (selFloorId) {
-      //   getMapList({ floorId: selFloorId, projectId: '' }).then((res) => {
-      //     var data: API.MapInfo[] = (res.data || {}).spaceList || [];
-      //     mapListData = data;
-      //     setMapList(data);
-      //   });
-    }
-  }, [selFloorId]);
-
-  return { mapList };
-}
-
-export { useMapList, mapListData };

+ 1 - 2
src/hooks/useMenuList.ts

@@ -6,15 +6,14 @@ export type menutype = {
 };
 export default function () {
   const [menuList, setMenuList] = useState<menutype[]>();
+  //进入时赋值
   useEffect(() => {
     //debugger;
-    //  setTimeout(() => {
     setMenuList([
       { name: '环境信息', id: 'environment' },
       { name: '设备管理', id: 'equipment' },
       { name: '运行时间', id: 'runtime' },
     ]);
-    //  }, 0);
   }, []);
 
   return { menuList };

+ 8 - 3
src/layouts/index.jsx

@@ -2,10 +2,10 @@ import React, { useState, useEffect } from 'react';
 import { useModel, useLocation, useIntl } from 'umi';
 import styles from './index.less';
 import { MenuFoldOutlined, SmileOutlined } from '@ant-design/icons';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 
 import { Drawer, notification } from 'antd';
-import NavMenu from '@/components/navMenu';
+import NavMenu from '@/sagacare_components/navMenu';
 
 export default (props) => {
   const { menuVisible, closeMenu, toggleMenu } = useModel('controller');
@@ -90,6 +90,11 @@ export default (props) => {
     };
   }, []);
 
+  const location = useLocation();
+  useEffect(() => {
+    //debugger;
+    console.log('location', location);
+  }, [location]);
   return (
     <div className={styles.layout}>
       <div className={styles.header}>
@@ -107,7 +112,7 @@ export default (props) => {
           >
             <Icon className={styles.notify} type="notify" style={{ fontSize: 21 }}></Icon>
           </div>
-          <MenuFoldOutlined style={{ fontSize: 24 }} onClick={showMenuClick} />
+          <MenuFoldOutlined style={{ fontSize: 24, display: 'none' }} onClick={showMenuClick} />
         </div>
       </div>
 

+ 5 - 5
src/layouts/index.less

@@ -1,9 +1,9 @@
 .layout {
   box-sizing: border-box;
-  width: 1340px;
+  //   width: 1340px;
   height: 100%;
   margin: 0 auto;
-  padding: 20px;
+  padding: 20px 50px;
   user-select: none;
 }
 
@@ -26,10 +26,10 @@
   align-items: center;
   justify-content: space-between;
   box-sizing: border-box;
-  height: 100px;
-  padding: 20px 0 40px 0;
+  height: 75px;
+  padding: 15px 0 20px 0;
   .title {
-    color: #000000;
+    color: #000;
     font-weight: 600;
     font-size: 24px;
   }

+ 0 - 22
src/models/map.ts

@@ -1,22 +0,0 @@
-import React, { useState, useCallback } from 'react';
-import { getMapList } from '@/services/ant-design-pro/environment';
-
-//不用了
-export default function () {
-  const [mapList, setMapList] = useState<API.MapInfo[]>([]);
-
-  const getMapListData = useCallback((selFloorId) => {
-    if (selFloorId) {
-      //debugger;
-      getMapList({ floorId: selFloorId, projectId: '' }).then((res) => {
-        var data: API.MapInfo[] = (res.data || {}).spaceList || [];
-        setMapList(data);
-      });
-    }
-  }, []);
-
-  return {
-    mapList,
-    getMapListData,
-  };
-}

+ 21 - 0
src/models/sagacare_buildFloor.ts

@@ -0,0 +1,21 @@
+import React, { useState, useCallback } from 'react';
+
+export default function () {
+  const [lastBuildId, setLastBuildId] = useState<string>(''); //最后选择的建筑id
+  const [lastFloorId, setLastFloorId] = useState<string>(''); //最后选择的楼层id
+
+  const changeLastBuildId = useCallback((value: string) => {
+    setLastBuildId(value);
+  }, []);
+
+  const changeLastFloorId = useCallback((value: string) => {
+    setLastFloorId(value);
+  }, []);
+
+  return {
+    lastBuildId,
+    lastFloorId,
+    changeLastBuildId,
+    changeLastFloorId,
+  };
+}

+ 4 - 4
src/models/searchInfo.ts

@@ -1,10 +1,10 @@
 import React, { useState, useCallback } from 'react';
 
 export default function () {
-  const [searchBuildId, setSearchBuildId] = useState<string>();
-  const [searchFloorId, setSearchFloorId] = useState<string>();
-  const [searchText, setSearchText] = useState<any>({});
-  const [searchSpace, setSearchSpace] = useState<any>({});
+  const [searchBuildId, setSearchBuildId] = useState<string>(); //搜索的建筑id
+  const [searchFloorId, setSearchFloorId] = useState<string>(); //搜索的楼层id
+  const [searchText, setSearchText] = useState<any>({}); //搜索的空间名字
+  const [searchSpace, setSearchSpace] = useState<any>({}); //搜索的空间信息
   const changeSearchBuildId = useCallback((value: string) => {
     setSearchBuildId(value);
   }, []);

src/models/spaceFunc.ts → src/models/sagacare_spaceFunc.ts


+ 0 - 18
src/pages/404.tsx

@@ -1,18 +0,0 @@
-import { Button, Result } from 'antd';
-import React from 'react';
-import { history } from 'umi';
-
-const NoFoundPage: React.FC = () => (
-  <Result
-    status="404"
-    title="404"
-    subTitle="Sorry, the page you visited does not exist."
-    extra={
-      <Button type="primary" onClick={() => history.push('/')}>
-        Back Home
-      </Button>
-    }
-  />
-);
-
-export default NoFoundPage;

+ 2 - 2
src/pages/Environment/components/chartModal/index.jsx

@@ -1,9 +1,9 @@
 import React, { useState, useEffect } from 'react';
 import { Modal, Form } from 'antd';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 import styles from './index.less';
 import cx from 'classnames';
-import { equipImageMap } from '@/config/image.js';
+import { equipImageMap } from '@/config/sagacare_image.js';
 import LineChart from './lineChart';
 
 export default ({ onClose, showSpace, selNav }) => {

+ 1 - 1
src/pages/Environment/components/chartModal/index.less

@@ -39,7 +39,7 @@
     font-size: 20px;
   }
   .content {
-    padding: 0px 50px;
+    padding: 0 50px;
 
     .navigator {
       display: flex;

+ 1 - 1
src/pages/Environment/components/chartModal/lineChart.jsx

@@ -2,7 +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 { queryPropertyData } from '@/services/ant-design-pro/environment';
+import { queryPropertyData } from '@/services/sagacare_service/environment';
 export default ({ paramObj, spaceId }) => {
   let [data, setData] = useState([]);
   let [levelMax, setLevelMax] = useState(0);

+ 1 - 1
src/pages/Environment/index.less

@@ -3,7 +3,7 @@
 }
 .maptop {
   box-sizing: border-box;
-  height: 44px;
+  height: 39px;
   padding-top: 10px;
   padding-right: 20px;
   .right {

+ 13 - 11
src/pages/Environment/index.tsx

@@ -1,16 +1,16 @@
 import React, { useState, useEffect } from 'react';
 import { FormattedMessage, useModel, useRequest } from 'umi';
-import PageHeader from '@/components/PageHeader';
-import Map from '@/components/map';
-import SearchInput from '@/components/SearchInput';
-import TopNavigator from '@/components/topNavigator';
+import PageHeader from '@/sagacare_components/PageHeader';
+import Map from '@/sagacare_components/map';
+import SearchInput from '@/sagacare_components/SearchInput';
+import TopNavigator from '@/sagacare_components/topNavigator';
 import ChartModal from './components/chartModal';
 import moment from 'moment';
-import { getMapList, queryEnvironmentParam } from '@/services/ant-design-pro/environment';
-import { projectId } from '@/config/api.js';
-import { equipImageMap } from '@/config/image.js';
+import { getMapList, queryEnvironmentParam } from '@/services/sagacare_service/environment';
+import { projectObj } from '@/config/api.js';
+import { equipImageMap } from '@/config/sagacare_image.js';
 import { Spin } from 'antd';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 
 import cx from 'classnames';
 import styles from './index.less';
@@ -29,7 +29,8 @@ export type navigatorItem = {
   [key: string]: any;
 };
 const Environment: React.FC = () => {
-  const { searchSpace } = useModel('searchInfo');
+  const { changeLastFloorId } = useModel('sagacare_buildFloor');
+  const { searchSpace } = useModel('sagacare_searchInfo');
   const { envir_temperature, envir_wet, envir_co2, envir_pm25, envir_jiaquan } = equipImageMap;
 
   const [showChart, setShowChart] = useState(false);
@@ -101,7 +102,7 @@ const Environment: React.FC = () => {
 
   const [envirMapList, setEnvirMapList] = useState<API.MapInfo[]>([]);
   const [mapCombineList, setMapCombineList] = useState<any[]>([]);
-  const { getSpaceFunc } = useModel('spaceFunc');
+  const { getSpaceFunc } = useModel('sagacare_spaceFunc');
 
   const changeFloorId = (data: string) => {
     setSelFloorId(data);
@@ -132,6 +133,7 @@ const Environment: React.FC = () => {
   //获取地图 mapList
   useEffect(() => {
     if (selFloorId) {
+      changeLastFloorId(selFloorId);
       setLoading(true);
       getMapList({
         //floorId: 'Fl11010802593241ec348ecb4148806b9034c8957454',
@@ -161,7 +163,7 @@ const Environment: React.FC = () => {
   useEffect(() => {
     if (selNavId && selFloorId) {
       //setLoading(true);
-      var floorParams = [{ id: selFloorId, projectId: projectId }];
+      var floorParams = [{ id: selFloorId, projectId: projectObj.projectId }];
       var endTime = moment();
       var startTime = moment().subtract(30, 'minutes');
       var startStr = startTime.format('YYYYMMDDHHmmss');

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

@@ -1,4 +1,4 @@
-import { setallLampHttp, getStatusHttp } from '@/services/ant-design-pro/equipment';
+import { setallLampHttp, getStatusHttp } from '@/services/sagacare_service/equipment';
 // import { message } from 'antd';
 
 // 定时调用 查询指令接口

+ 2 - 2
src/pages/Equipment/components/deviceModal/common.less

@@ -3,7 +3,7 @@
   margin-bottom: 15px;
   background: hsl(0, 0%, 100%);
   border-radius: 25px;
-  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.07), 0px 4px 10px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.07), 0 4px 10px rgba(0, 0, 0, 0.05);
   .content {
     .env {
       position: relative;
@@ -33,7 +33,7 @@
   font-family: PingFang SC;
   font-style: normal;
   line-height: 22px;
-  letter-spacing: 0em;
+  letter-spacing: 0;
   text-align: left;
 }
 .eqStatus {

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

@@ -1,7 +1,7 @@
 import React, { useState, useEffect, useCallback, useRef } from 'react';
 import commonStyles from '../common.less';
-import { equipImageMap } from '@/config/image.js';
-import { setEquipeHttp } from '@/services/ant-design-pro/equipment';
+import { equipImageMap } from '@/config/sagacare_image.js';
+import { setEquipeHttp } from '@/services/sagacare_service/equipment';
 
 const { curtain_close_icon_row, curtain_open_icon_row } = equipImageMap;
 

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

@@ -1,9 +1,9 @@
 import React, { useState, useEffect, useCallback } from 'react';
 import styles from './index.less';
 import commonStyles from '../common.less';
-import { equipImageMap } from '@/config/image.js';
+import { equipImageMap } from '@/config/sagacare_image.js';
 import CurtainBtn from './curtainBtn';
-import { getObjectDataEqpGroupHttp } from '@/services/ant-design-pro/equipment';
+import { getObjectDataEqpGroupHttp } from '@/services/sagacare_service/equipment';
 
 const { curtain_open_row, expend_down, expend_up } = equipImageMap;
 

+ 9 - 9
src/pages/Equipment/components/deviceModal/index.jsx

@@ -1,15 +1,15 @@
 import React, { useState, useEffect, useMemo } from 'react';
 import { Modal, Row, Col } from 'antd';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 import styles from './index.less';
-import { equipImageMap } from '@/config/image.js';
+import { equipImageMap } from '@/config/sagacare_image.js';
 import AirEq from './airEq';
 import LampEq from './lampEq';
 import CurtainEq from './curtainEq';
-import { getSpaceAdjustList } from '@/services/ant-design-pro/equipment';
+import { getSpaceAdjustList } from '@/services/sagacare_service/equipment';
 import { useRef } from 'react';
 import { useModel } from 'umi';
-import { projectId } from '@/config/api.js';
+import { projectObj } from '@/config/api.js';
 
 export default ({ onClose, showSpace }) => {
   const envArr = [
@@ -99,7 +99,7 @@ export default ({ onClose, showSpace }) => {
     const paramsObj = {
       criteria: {
         spaceId: showSpace.id,
-        projectId: projectId,
+        projectId: projectObj.projectId,
       },
     };
     getSpaceAdjustList(paramsObj).then((res) => {
@@ -107,7 +107,7 @@ export default ({ onClose, showSpace }) => {
         res.content.forEach((item, idx) => {
           envArr.forEach((jtem, jdx) => {
             jtem.describe = checkLevel(item[jtem.id], jtem.id).levelTxt;
-            if (!item[jtem.id]) {
+            if (!item[jtem.id] && item[jtem.id] != 0) {
               jtem.num = '--';
               return;
             }
@@ -257,17 +257,17 @@ export default ({ onClose, showSpace }) => {
               <Row gutter={[12, 18]}>
                 {showEqCard('airConditioner') && (
                   <Col span={12}>
-                    <AirEq spaceId={showSpace.id} projectId={projectId}></AirEq>
+                    <AirEq spaceId={showSpace.id} projectId={projectObj.projectId}></AirEq>
                   </Col>
                 )}
                 {showEqCard('light') && (
                   <Col span={12}>
-                    <LampEq spaceId={showSpace.id} projectId={projectId}></LampEq>
+                    <LampEq spaceId={showSpace.id} projectId={projectObj.projectId}></LampEq>
                   </Col>
                 )}
                 {showEqCard('curtain') && (
                   <Col span={12}>
-                    <CurtainEq spaceId={showSpace.id} projectId={projectId}></CurtainEq>
+                    <CurtainEq spaceId={showSpace.id} projectId={projectObj.projectId}></CurtainEq>
                   </Col>
                 )}
               </Row>

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

@@ -2,9 +2,9 @@ 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 { equipImageMap } from '@/config/sagacare_image.js';
 import AnSwitch from '../anSwitch';
-import { getLampHttp, getStatusHttp, setallLampHttp } from '@/services/ant-design-pro/equipment';
+import { getLampHttp, getStatusHttp, setallLampHttp } from '@/services/sagacare_service/equipment';
 import { setallLamps } from '@/pages/Equipment/checLampStatus.js';
 const { lamp_open, lamp_close, expend_down, expend_up } = equipImageMap;
 export default ({ spaceId }) => {

+ 5 - 5
src/pages/Equipment/components/topNavRight/index.tsx

@@ -1,12 +1,12 @@
 // 设备管理 导航条的右侧
 import React, { useState, useEffect } from 'react';
 import { Dropdown, Menu, Modal, message } from 'antd';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 import { EllipsisOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
 import styles from './index.less';
-//import { equipImageMap } from '@/config/image.js';
+//import { equipImageMap } from '@/config/sagacare_image.js';
 import type { navigatorItem } from '@/pages/Environment/index';
-import { projectId } from '@/config/api.js';
+import { projectObj } from '@/config/api.js';
 
 import { changeCurtain, changeAllAir, changeLight } from '@/pages/Equipment/equipmentControl';
 
@@ -67,7 +67,7 @@ const TopNavRight: React.FC<topNavRightProps> = ({
         //如果是空调
         if (filterSpaceArr.length == 0) return;
         if (selNavObj.id == 'airConditioner') {
-          changeAllAir(filterSpaceArr, getDeviceStatus, '打开', projectId);
+          changeAllAir(filterSpaceArr, getDeviceStatus, '打开', projectObj.projectId);
         }
         if (selNavObj.id == 'light') {
           changeLight('all', filterSpaceArr, getDeviceStatus, '打开');
@@ -116,7 +116,7 @@ const TopNavRight: React.FC<topNavRightProps> = ({
 
         //如果是空调
         if (selNavObj.id == 'airConditioner') {
-          changeAllAir(filterSpaceArr, getDeviceStatus, '关闭', projectId);
+          changeAllAir(filterSpaceArr, getDeviceStatus, '关闭', projectObj.projectId);
         }
         if (selNavObj.id == 'light') {
           changeLight('all', filterSpaceArr, getDeviceStatus, '关闭');

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

@@ -8,7 +8,7 @@ import {
     getStatusHttp,
     getLampHttp,
     getFeedbackDocumentsHttp
-} from '@/services/ant-design-pro/equipment';
+} from '@/services/sagacare_service/equipment';
 
 import { Spin, Modal, message } from 'antd';
 import { setallLamps } from '@/pages/Equipment/checLampStatus.js';

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

@@ -3,7 +3,7 @@
 }
 .maptop {
   box-sizing: border-box;
-  height: 44px;
+  height: 39px;
   padding-top: 10px;
   .right {
     display: flex;

+ 14 - 12
src/pages/Equipment/index.tsx

@@ -1,10 +1,10 @@
 import React, { useState, useEffect, useRef, useCallback } from 'react';
 import { FormattedMessage, useModel } from 'umi';
 
-import SearchInput from '@/components/SearchInput';
-import PageHeader from '@/components/PageHeader';
-import Map from '@/components/map';
-import TopNavigator from '@/components/topNavigator';
+import SearchInput from '@/sagacare_components/SearchInput';
+import PageHeader from '@/sagacare_components/PageHeader';
+import Map from '@/sagacare_components/map';
+import TopNavigator from '@/sagacare_components/topNavigator';
 import TopNavRight from './components/topNavRight';
 import DeviceModal from './components/deviceModal';
 
@@ -15,15 +15,15 @@ import { Spin, Modal, message } from 'antd';
 import moment from 'moment';
 
 import { ExclamationCircleOutlined } from '@ant-design/icons';
-import { equipImageMap } from '@/config/image.js';
-import Icon from '@/tenants-ui/Icon';
+import { equipImageMap } from '@/config/sagacare_image.js';
+import Icon from '@/tenants-ui/SgIcon';
 import type { navigatorItem } from '@/pages/Environment/index';
-import { projectId } from '@/config/api.js';
+import { projectObj } from '@/config/api.js';
 import {
   getMapList,
   queryEquipStatistics,
   queryDeviceTimeManage,
-} from '@/services/ant-design-pro/environment';
+} from '@/services/sagacare_service/environment';
 
 import {
   changeCurtain,
@@ -44,8 +44,9 @@ type statistics = {
   runCount: number;
 };
 const Environment: React.FC = () => {
-  const { searchSpace } = useModel('searchInfo');
-  const { getSpaceFunc } = useModel('spaceFunc');
+  const { changeLastFloorId } = useModel('sagacare_buildFloor');
+  const { searchSpace } = useModel('sagacare_searchInfo');
+  const { getSpaceFunc } = useModel('sagacare_spaceFunc');
   const { envir_all, equip_air, equip_lamp, envir_curtain } = equipImageMap;
 
   const [showModal, setShowModal] = useState<boolean>(false);
@@ -219,6 +220,7 @@ const Environment: React.FC = () => {
   //获取地图 mapList
   useEffect(() => {
     if (selFloorId) {
+      changeLastFloorId(selFloorId);
       setLoading(true);
 
       getMapList({
@@ -249,7 +251,7 @@ const Environment: React.FC = () => {
     //setLoading(true);
     return queryEquipStatistics({
       floorId: selFloorId,
-      projectId: projectId,
+      projectId: projectObj.projectId,
     })
       .then((res) => {
         // setLoading(false);
@@ -484,7 +486,7 @@ const Environment: React.FC = () => {
                               <Icon
                                 className=""
                                 type={ditem.equipType}
-                                style={{ color: '#ffffff', fontWeight: 'bold' }}
+                                style={{ color: '#fff', fontWeight: 'bold' }}
                               ></Icon>
                             </div>
                           );

+ 1 - 1
src/pages/NoAuth/index.less

@@ -9,7 +9,7 @@
 
 .maptop {
   box-sizing: border-box;
-  height: 44px;
+  height: 39px;
   padding-top: 10px;
   padding-right: 20px;
   .right {

+ 1 - 2
src/pages/Runtime/RecordList/index.jsx

@@ -1,12 +1,11 @@
 import React, { useState, useEffect, useCallback } from 'react';
-import PageHeader from '@/components/PageHeader';
+import PageHeader from '@/sagacare_components/PageHeader';
 import { useDebounceEffect } from 'ahooks';
 import { FormattedMessage } from 'umi';
 import styles from './index.less';
 import cx from 'classnames';
 
 import { Input, Table } from 'antd';
-// import ShowModal from '../components/showModal';
 
 export default function RecordList() {
   const columns = [

+ 2 - 5
src/pages/Runtime/components/showModal/index.jsx

@@ -1,11 +1,10 @@
 import React, { useState, useEffect } from 'react';
 import { Modal } from 'antd';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 import styles from './index.less';
 import cx from 'classnames';
 
 export default ({ onClose }) => {
-  
   return (
     <>
       <Modal width={450} visible maskClosable={false} closable={false} footer={null}>
@@ -16,9 +15,7 @@ export default ({ onClose }) => {
               <Icon type="close" />
             </div>
           </div>
-          <div className={styles.content}>
-           我是内容
-          </div>
+          <div className={styles.content}>我是内容</div>
         </div>
       </Modal>
     </>

+ 1 - 1
src/pages/Runtime/components/topNavRight/index.tsx

@@ -21,7 +21,7 @@ const TopNavRight: React.FC<TopNavRightProps> = ({ runtimeNav, changeTime }) =>
             <div className={styles.title}>正常运行</div>
             <div className={styles.num}>{runtimeNav.normalRun}</div>
           </div>
-          <div className={styles.item}>
+          <div className={styles.item} style={{ display: 'none' }}>
             <div className={cx(styles.overtimeWork, styles.circle)}></div>
             <div className={styles.title}>加班</div>
             <div className={styles.num}>{runtimeNav.overtimeWork}</div>

+ 1 - 1
src/pages/Runtime/index.less

@@ -9,7 +9,7 @@
 
 .maptop {
   box-sizing: border-box;
-  height: 44px;
+  height: 39px;
   padding-top: 10px;
   padding-right: 20px;
   .right {

+ 13 - 13
src/pages/Runtime/index.tsx

@@ -1,19 +1,19 @@
 import React, { useState, useEffect, useCallback, useRef } from 'react';
-import PageHeader from '@/components/PageHeader';
-import Map from '@/components/map';
-import TopNavigator from '@/components/topNavigator';
+import PageHeader from '@/sagacare_components/PageHeader';
+import Map from '@/sagacare_components/map';
+import TopNavigator from '@/sagacare_components/topNavigator';
 import RunNavRight from './components/topNavRight';
 import { FormattedMessage, history, useModel } from 'umi';
 import { Spin } from 'antd';
 import { Popover } from 'antd';
 import styles from './index.less';
 import mapstyles from '@/assets/css/map.less';
-import Icon from '@/tenants-ui/Icon';
-import SearchInput from '@/components/SearchInput';
+import Icon from '@/tenants-ui/SgIcon';
+import SearchInput from '@/sagacare_components/SearchInput';
 import moment from 'moment';
 import cx from 'classnames';
 
-import { getMapList, queryDeviceTimeManage } from '@/services/ant-design-pro/environment';
+import { getMapList, queryDeviceTimeManage } from '@/services/sagacare_service/environment';
 
 type runtimeNavType = {
   normalRun: any;
@@ -23,10 +23,10 @@ type runtimeNavType = {
 
 const Runtime: React.FC = () => {
   // const { maptemp6 } = equipImageMap;
-  const { searchSpace } = useModel('searchInfo');
-  const { getSpaceFunc } = useModel('spaceFunc');
+  const { changeLastFloorId } = useModel('sagacare_buildFloor');
+  const { searchSpace } = useModel('sagacare_searchInfo');
+  const { getSpaceFunc } = useModel('sagacare_spaceFunc');
   const [loading, setLoading] = useState<boolean>(false);
-  const [searchText, setSearchText] = useState<{ text: any }>();
   const [runtimeNav, setRuntimeNav] = useState<runtimeNavType>({});
   const [mapList, setMapList] = useState<API.MapInfo[]>([]);
   const [mapSize, setMapSize] = useState<any>({});
@@ -51,11 +51,11 @@ const Runtime: React.FC = () => {
   //获取地图 mapList
   useEffect(() => {
     if (selFloorId) {
+      changeLastFloorId(selFloorId);
       setLoading(true);
       getMapList({
         floorId: selFloorId,
         //floorId: 'Fl11010802593241ec348ecb4148806b9034c8957454',
-        projectId: '',
       })
         .then((res) => {
           setLoading(false);
@@ -111,7 +111,7 @@ const Runtime: React.FC = () => {
             ritem.runTimeStatus = 'overtimeWork'; //加班
           }
           ritem.showTimeList = timeList;
-          console.log('timeList', timeList);
+          //console.log('timeList', timeList);
           ritem.showTimeStr =
             timeList.length > 0
               ? timeList[0][0] +
@@ -128,7 +128,7 @@ const Runtime: React.FC = () => {
         //setLoading(false);
       });
   };
-  let setTimer = useRef({});
+  let setTimer = useRef<Timer>(null);
   //获取时间列表 spaceTimeList
   useEffect(() => {
     if (selFloorId && selTime) {
@@ -153,7 +153,7 @@ const Runtime: React.FC = () => {
 
   useEffect(() => {
     //mapList,spaceTimeList 这两个数据的结合
-    console.log('dfsd-------');
+    //console.log('dfsd-------');
     // if (mapList && mapList.length > 0 && spaceTimeList && spaceTimeList.length > 0) {
 
     var combineList: any = [];

+ 0 - 8
src/pages/Welcome.less

@@ -1,8 +0,0 @@
-@import (reference) '~antd/es/style/themes/index';
-
-.pre {
-  margin: 12px 0;
-  padding: 12px 20px;
-  background: @input-bg;
-  box-shadow: @card-shadow;
-}

+ 0 - 7
src/pages/Welcome.tsx

@@ -1,7 +0,0 @@
-import React from 'react';
-
-const Welcome: React.FC = () => {
-  return <div>sdfsddffsdf</div>;
-};
-
-export default Welcome;

+ 1 - 1
src/pages/user/Login/index.tsx

@@ -10,7 +10,7 @@ import { Alert, message, Tabs } from 'antd';
 import React, { useState } from 'react';
 import { ProFormCaptcha, ProFormCheckbox, ProFormText, LoginForm } from '@ant-design/pro-form';
 import { useIntl, history, FormattedMessage, SelectLang, useModel } from 'umi';
-// import Footer from '@/components/Footer';
+
 import { login } from '@/services/ant-design-pro/api';
 import { getFakeCaptcha } from '@/services/ant-design-pro/login';
 

+ 16 - 4
src/components/PageHeader/index.less

@@ -3,16 +3,28 @@
   align-items: center;
   justify-content: space-between;
   height: 50px;
-  .title {
-    color: #000;
+  .menuDiv {
+    display: flex;
+  }
+  .ntitle {
+    margin-right: 6px;
+    color: #ccc;
     font-weight: 600;
     font-size: 24px;
+    cursor: pointer;
     &::before {
-      margin-right: 10px;
-      color: #f0da21;
+      margin-right: 6px;
+      color: #ccc;
       font-weight: normal;
       font-size: 32px;
       content: '/';
     }
   }
+  .selTitle {
+    color: #000;
+    cursor: default;
+    &::before {
+      color: #f0da21;
+    }
+  }
 }

+ 64 - 0
src/sagacare_components/PageHeader/index.tsx

@@ -0,0 +1,64 @@
+import React, { useEffect, useState } from 'react';
+import styles from './index.less';
+
+import { useModel, history, useLocation } from 'umi';
+import useMenuList, { menutype } from '@/hooks/useMenuList';
+import cx from 'classnames';
+
+type PageHeaderProps = {
+  title: React.ReactNode;
+  action: React.ReactNode;
+};
+const PageHeader: React.FC<PageHeaderProps> = ({ title, action }) => {
+  //console.log('PageHeader');
+
+  const { menuList } = useMenuList();
+  const [pathId, setPathId] = useState<string>('');
+  const location = useLocation();
+
+  useEffect(() => {
+    const unlisten = history.listen((location, action) => {
+      //debugger;
+    });
+    //debugger;
+    var pathName = location.pathname;
+    pathName = pathName.replace(/\//g, '');
+    pathName = pathName.toLowerCase();
+    console.log('location,action', pathName, location.pathname);
+    setPathId(pathName);
+    return () => {
+      //debugger;
+      unlisten();
+    };
+  }, [location]);
+
+  const menuClick = (item: menutype) => {
+    if (item.id == pathId) return;
+    history.push(`/${item.id}`);
+  };
+
+  return (
+    <>
+      <div className={styles.navHeader}>
+        <div className={styles.menuDiv}>
+          {(menuList || []).map((item, index) => {
+            return (
+              <div
+                className={cx(styles.ntitle, { [styles.selTitle]: item.id == pathId })}
+                key={index + 'nav'}
+                onClick={() => {
+                  menuClick(item);
+                }}
+              >
+                {item.name}
+              </div>
+            );
+          })}
+        </div>
+        {action}
+      </div>
+    </>
+  );
+};
+
+export default PageHeader;

src/components/SearchInput/index.less → src/sagacare_components/SearchInput/index.less


+ 5 - 4
src/components/SearchInput/index.tsx

@@ -9,8 +9,8 @@ type mapResType = {
   localName: string;
   [key: string]: any;
 };
-import { querySpace } from '@/services/ant-design-pro/environment';
-import { projectId } from '@/config/api.js';
+import { querySpace } from '@/services/sagacare_service/environment';
+import { projectObj } from '@/config/api.js';
 const { Option } = Select;
 
 type SearchInputProps = {
@@ -20,7 +20,8 @@ type SearchInputProps = {
 const SearchInput: React.FC<SearchInputProps> = () => {
   const [matchData, setMatchData] = useState<mapResType[]>([]);
   const [value, setValue] = useState<any>();
-  const { changeSearchBuildId, changeSearchFloorId, changeSearchText } = useModel('searchInfo');
+  const { changeSearchBuildId, changeSearchFloorId, changeSearchText } =
+    useModel('sagacare_searchInfo');
   const [loading, setLoading] = useState<boolean>(false);
   const ref = useRef<any>(0);
   const searchQuery = (value: string) => {
@@ -32,7 +33,7 @@ const SearchInput: React.FC<SearchInputProps> = () => {
       setLoading(true);
       var paramsObj = {
         criteria: {
-          projectId: projectId,
+          projectId: projectObj.projectId,
           localName: {
             $like: `%${value}%`,
           },

src/components/map/index.less → src/sagacare_components/map/index.less


+ 16 - 7
src/components/map/index.tsx

@@ -3,7 +3,7 @@ import mapstyles from '@/assets/css/map.less';
 import { useModel } from 'umi';
 
 import cx from 'classnames';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 
 type MapProps = {
   type: string;
@@ -26,7 +26,7 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
     changeSearchText,
     changeSearchFloorId,
     changeSearchBuildId,
-  } = useModel('searchInfo');
+  } = useModel('sagacare_searchInfo');
 
   const [startPageX, setStartPageX] = useState<number>(0);
   const [startPageY, setStartPageY] = useState<number>(0);
@@ -42,6 +42,8 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
   const [minscale, setMinscale] = useState<number>(0.3);
   const [canMove, setCanMove] = useState<boolean>(false);
 
+  const [mapHeight, setMapHeight] = useState(500);
+
   const currentFloorId = useRef<any>(null);
   const mapRef = useRef();
   //   let mapWidth: number = 3000,
@@ -109,9 +111,10 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
     console.log('mscale', mscale);
   };
 
-  const fixWidth = 1300;
+  //const fixWidth = 1300;
   useEffect(() => {
-    var scale = Number((fixWidth / mapSize.width).toFixed(4));
+    var mapWrapWidth = (mapRef.current || {}).clientWidth || 0;
+    var scale = Number((mapWrapWidth / mapSize.width).toFixed(4));
     setMscale(scale);
     if (scale < 0.3) {
       console.log('mscale', mscale);
@@ -134,7 +137,7 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
       if (filterItem.length == 0) return;
       //找到搜索的空间
       changeSearchSpace(filterItem[0]);
-      console.log('selectSpace2', filterItem[0]);
+      //console.log('selectSpace2', filterItem[0]);
       left = -((filterItem[0] || {}).left || 0);
       top = -((filterItem[0] || {}).top || 0);
       var mapWrapWidth = (mapRef.current || {}).clientWidth || 0;
@@ -151,7 +154,7 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
       setTranslateY(0);
     }
     currentFloorId.current = selFloorId;
-    console.log('selectSpace2');
+    //console.log('selectSpace2');
   }, [mapList]);
 
   //搜索信息改变时的搜索
@@ -188,13 +191,18 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
     document.querySelector('#root').addEventListener(
       'mouseup',
       function () {
-        console.log('mouseUpEvent');
+        //console.log('mouseUpEvent');
         setCanMove(false);
       },
       true,
     );
   }, []);
 
+  useEffect(() => {
+    console.log('document', document.body.offsetHeight);
+    var bodyHeight = document.body.offsetHeight;
+    setMapHeight(bodyHeight - 293);
+  }, []);
   return (
     <div
       className={mapstyles.mapwrap}
@@ -208,6 +216,7 @@ const Map: React.FC<MapProps> = ({ type, selFloorId, render, mapList, mapSize })
       onMouseMove={(event) => {
         mouseMoveEvent(event);
       }}
+      style={{ height: mapHeight + 'px' }}
     >
       <div
         className={cx(mapstyles.map, { [mapstyles.equipmentMap]: type == 'equipment' })}

+ 1 - 1
src/components/navMenu/index.less

@@ -2,7 +2,7 @@
   //   width: 380px;
   //   height: 340px;
   padding: 0 24px;
-  background-color: #ffffff;
+  background-color: #fff;
   border-radius: 10px;
   .title {
     display: flex;

+ 1 - 1
src/components/navMenu/index.tsx

@@ -1,7 +1,7 @@
 import React, { useEffect } from 'react';
 import { Row, Col } from 'antd';
 import styles from './index.less';
-import Icon from '@/tenants-ui/Icon';
+import Icon from '@/tenants-ui/SgIcon';
 import useMenuList, { menutype } from '@/hooks/useMenuList';
 import { history, useModel, useLocation } from 'umi';
 

+ 2 - 2
src/components/topNavigator/index.less

@@ -4,8 +4,8 @@
 .topnavigator {
   box-sizing: border-box;
   //   display: flex;
-  height: 68px;
-  margin-top: 23px;
+  height: 63px;
+  margin-top: 18px;
   background: #fff;
   .floor {
     display: flex;

+ 62 - 66
src/components/topNavigator/index.tsx

@@ -4,9 +4,11 @@ import cx from 'classnames';
 import { Select } from 'antd';
 
 import type { navigatorItem } from '@/pages/Environment/index';
-import { getBuildingList, getFloorList } from '@/services/ant-design-pro/environment';
-import { projectId } from '@/config/api.js';
+import { getBuildingList, getFloorList } from '@/services/sagacare_service/environment';
+import { projectObj } from '@/config/api.js';
 import { useModel } from 'umi';
+import UserStorage from '@/config/sagacare_user';
+
 export type topNavigatorProps = {
   navigatorList?: navigatorItem[];
   type: string;
@@ -35,14 +37,14 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
   selParamObj,
 }) => {
   //存储的 搜索到空间的buildingId floorId
-  const { searchBuildId, searchFloorId } = useModel('searchInfo');
+  const { searchBuildId, searchFloorId } = useModel('sagacare_searchInfo');
+  const { lastBuildId, lastFloorId, changeLastBuildId, changeLastFloorId } =
+    useModel('sagacare_buildFloor');
   const [buildList, setBuildList] = useState<buildItem[]>([]);
   const [currentBuild, setCurrentBuild] = useState<string>();
-
   const [floorList, setFloorList] = useState<floorItem[]>([]);
   const [currentFloor, setCurrentFloor] = useState<string>();
 
-  //const [shishi, setShishi] = useState<string>('22');
   //则监听searchBuildId的改变    如果buildingId改变 请求楼层列表
   useEffect(() => {
     if (searchBuildId && searchFloorId) {
@@ -50,10 +52,11 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
         //如果搜索的buildId 改变
         setCurrentBuild(searchBuildId);
       } else {
-        //显示
+        //如果搜索的buildId 没改变 floorId 改变了
+        //为了 显示楼层选择
         setCurrentFloor(searchFloorId);
         //父亲的floorId
-        //这块 其实只想楼层id改变时调用 建筑id 改变时不调用
+        //这块 其实只有楼层id改变时调用  建筑id 改变时不调用
         changeFloorId && changeFloorId(searchFloorId);
       }
     }
@@ -61,38 +64,31 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
 
   //请求建筑的接口
   useEffect(() => {
-    //console.log('TopNavigator----getBuildingList');
-    getBuildingList({
-      criteria: {
-        projectId: projectId,
-      },
-      orders: [
-        {
-          column: 'localId',
-          asc: true,
+    var userObj = UserStorage.getInstance();
+    const user = userObj.getUser();
+    console.log('TopNavigator----getBuildingList', user, projectObj.projectId);
+    if (buildList.length == 0) {
+      getBuildingList({
+        criteria: {
+          projectId: projectObj.projectId,
         },
-      ],
-    }).then((res) => {
-      var resData = res.content || [];
-      setBuildList(
-        (resData || []).map((item) => {
-          return { label: item.localName, value: item.id };
-        }),
-      );
-      //   var resData2 = [];
-      //   resData2.push(JSON.parse(JSON.stringify(resData[0])));
-      //   resData2.push(JSON.parse(JSON.stringify(resData[0])));
-      //   resData2[1].id = 'sdfsd';
-      //   resData2[1].localName = 'boruiÎ';
-      setBuildList(
-        (resData || []).map((item) => {
-          return { label: item.localName, value: item.id };
-        }),
-      );
-
-      setCurrentBuild((resData[0] || {}).id); //设置第一个建筑值
-      changeBuildId && changeBuildId((resData[0] || {}).id);
-    });
+        orders: [
+          {
+            column: 'localId',
+            asc: true,
+          },
+        ],
+      }).then((res) => {
+        var resData = res.content || [];
+        setBuildList(
+          (resData || []).map((item) => {
+            return { label: item.localName, value: item.id };
+          }),
+        );
+        setCurrentBuild(lastBuildId || (resData[0] || {}).id); //设置第一个建筑值
+        //changeBuildId && changeBuildId(lastBuildId || (resData[0] || {}).id);
+      });
+    }
   }, []);
 
   //请求楼层列表的接口
@@ -115,47 +111,47 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
           return { label: item.localName, value: item.id };
         }),
       );
+      //如果最后选中的
+      var lastFilter = resData.filter((item) => {
+        return item.id == lastFloorId;
+      });
 
-      setCurrentFloor(searchFloorId || (resData[0] || {}).id); //如果有搜索的楼层id 则用搜索的结果
-      changeFloorId && changeFloorId(searchFloorId || (resData[0] || {}).id); //改变父组件的floorId的值
+      var lastFloorIdTemp = '';
+      if (lastFilter.length > 0) {
+        lastFloorIdTemp = lastFloorId;
+      }
+      setCurrentFloor(searchFloorId || lastFloorIdTemp || (resData[0] || {}).id); //如果有搜索的楼层id 则用搜索的结果
+      changeFloorId && changeFloorId(searchFloorId || lastFloorIdTemp || (resData[0] || {}).id); //改变父组件的floorId的值
     }
+
     if (currentBuild) {
+      changeLastBuildId(currentBuild);
       asyncFunction();
     }
-
-    // if (currentBuild) {
-    //   getFloorList({
-    //     criteria: {
-    //       buildingId: currentBuild,
-    //       //buildingId: 'Bd1101080259317347f00d0811ebb06b1d2749356f83',
-    //     },
-    //   }).then((res) => {
-    //     var resData = res.content || [];
-    //     setFloorList(
-    //       (resData || []).map((item) => {
-    //         return { label: item.localName, value: item.id };
-    //       }),
-    //     );
-
-    //     setCurrentFloor(searchFloorId || (resData[0] || {}).id); //如果有搜索的楼层id 则用搜索的结果
-    //     changeFloorId && changeFloorId(searchFloorId || (resData[0] || {}).id); //改变父组件的floorId的值
-    //   });
-    // }
+    //console.log('currentBuild22', currentBuild);
+    return () => {
+      //console.log('currentBuild111', currentBuild);
+    };
   }, [currentBuild]);
 
-  const changBuildHandle = useCallback((val) => {
-    //console.log('select-onChange', val);
+  //   useEffect(() => {
+  //     //为了 显示楼层选择
+  //     if (floorList.length > 0) {
+  //       debugger;
+  //       setCurrentFloor(searchFloorId || lastFloorId || (floorList[0] || {}).value); //如果有搜索的楼层id 则用搜索的结果
+  //       changeFloorId && changeFloorId(searchFloorId || lastFloorId || (floorList[0] || {}).value); //改变父组件的floorId的值
+  //     }
+  //   }, [floorList]);
 
-    //changeSearchFloorId('');
-    //setShishi('fsdf');
+  const changBuildHandle = useCallback((val) => {
     //显示的建筑改变
     setCurrentBuild(val);
     //父亲的buildId改变
-    changeBuildId && changeBuildId(val);
+    //changeBuildId && changeBuildId(val);
   }, []);
+
   const changFloorHandle = useCallback((val) => {
     setCurrentFloor(val);
-
     changeFloorId && changeFloorId(val);
   }, []);
 
@@ -200,7 +196,7 @@ const TopNavigator: React.FC<topNavigatorProps> = ({
               className={cx(styles.navItem, { [styles.sel]: item.id === selParamObj.id })}
               style={{
                 borderBottom:
-                  item.id === selParamObj.id ? `3px solid  ${item.color}` : '3px solid #ffffff',
+                  item.id === selParamObj.id ? `3px solid  ${item.color}` : '3px solid #fff',
               }}
               key={'nav' + index}
               onClick={() => {

+ 3 - 3
src/services/ant-design-pro/environment.ts

@@ -1,7 +1,7 @@
 /** 登录接口 POST /api/login/account */
 import { request } from 'umi';
-import { projectId } from '@/config/api';
-import UserStorage from '@/config/user';
+import { projectObj } from '@/config/api';
+import UserStorage from '@/config/sagacare_user';
 
 export async function getMapList(body: any, options?: { [key: string]: any }) {
   return request<API.MapInfoRes>(
@@ -59,7 +59,7 @@ export async function queryDeviceTimeManage(params: any, options?: { [key: strin
 }
 
 function getProjectId() {
-  const id = projectId;
+  const id = projectObj.projectId;
   return id;
 }
 

+ 146 - 0
src/services/sagacare_service/equipment copy.js

@@ -0,0 +1,146 @@
+import { request } from 'umi';
+import { projectId } from '@/config/api.js';
+import UserStorage from '@/config/sagacare_user';
+
+// function getProjectId() {
+//     //const id = window.localStorage.getItem('localProjectId')
+//     const id = projectId
+//     return id;
+// }
+
+function commonParams({ userId, userName, projectId }) {
+    // var userObj = UserStorage.getInstance();
+    //  const user = userObj.getUser();
+    var pubname = '';
+    if (getProjectId() == 'Pj3301100002') {
+        pubname = 'sgadmin'
+    } else {
+        pubname = 'sagacareAndtenantslink'
+    }
+    return `openid=${userId}&pubname=${pubname}&projectId=${projectId}&userId=${userId}&userName=${userName}`;
+}
+
+// function commonParams() {
+//     return `openid=9a1ecfbacb6b4f249bf2dd3ec7793ead&pubname=sagacareAndtenantslink&projectId=${getProjectId()}&userName=%E5%AE%89%E5%B0%8F%E9%9C%9E&userPhone=17611228068&userId=9a1ecfbacb6b4f249bf2dd3ec7793ead`;
+// }
+
+
+//窗帘  设置设备
+//窗帘  设置设备
+export const setEquipeHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/object/eqp/infocode/set?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: JSON.stringify(params),
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+}
+
+//窗帘 获取设备
+export const getObjectDataEqpGroupHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/object/objectDataEqpGroup/query?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: JSON.stringify(params),
+        headers: {
+            'Content-Type': 'application/json',
+        }
+    });
+}
+
+
+
+// 灯的状态
+export const getLampHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/light/status/query?${commonParams(userProject)}&spaceId=${params}`, {
+        timeout: 1000,
+        skipErrorHandler: true,
+        method: 'GET',
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};
+
+
+// 批量 开关灯
+export const setallLampHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/light/onoff/set?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: JSON.stringify(params),
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};
+
+// 开关失败时 定时查询灯状态 
+export const getStatusHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/light/onoff/setSatus?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: JSON.stringify(params),
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};
+
+
+//  空调 - 调节文案/空调信息
+export const getFeedbackDocumentsHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/custom/feedback/documents?${commonParams(userProject)}`, {
+        isNotShowErrorToast: true,
+        errorSave: true,
+        method: 'POST',
+        data: JSON.stringify(params),
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};
+
+//  空调 调节
+export const changeAirHttp = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/custom/feedbackCreate/v2?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: JSON.stringify({ ...params, projectId: getProjectId() }),
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};
+
+// 空间环境质量
+export const getSpaceAdjustList = (params, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/space/property?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: params,
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+}
+//  批量空调 调节
+export const changeAllAirHttp = (body, userProject) => {
+    return request(`/sgadmin/duoduo-service/duoduoenv-service/custom/feedbackCreate/v2Batch?${commonParams(userProject)}`, {
+        method: 'POST',
+        isNotShowErrorToast: true,
+        errorSave: true,
+        data: body,
+        headers: {
+            'Content-Type': 'application/json',
+        },
+    });
+};

+ 3 - 3
src/services/ant-design-pro/equipment.js

@@ -1,10 +1,10 @@
 import { request } from 'umi';
-import { projectId } from '@/config/api.js';
-import UserStorage from '@/config/user';
+import { projectObj } from '@/config/api.js';
+import UserStorage from '@/config/sagacare_user';
 
 function getProjectId() {
     //const id = window.localStorage.getItem('localProjectId')
-    const id = projectId
+    const id = projectObj.projectId
     return id;
 }
 

src/services/ant-design-pro/typings.d.ts → src/services/sagacare_service/typings.d.ts


+ 0 - 73
src/tenants-ui/SearchInput/index.jsx

@@ -1,73 +0,0 @@
-import React, { useState, useEffect, useCallback, useRef } from 'react';
-import { useDebounceFn } from 'ahooks';
-import { Input } from 'antd';
-import Icon from '@/tenants-ui/Icon';
-import cx from 'classnames';
-import styles from './index.less';
-
-export default ({ placeholder, onSearch, onCancel }) => {
-  const ref = useRef();
-  const [focus, setFocus] = useState(false);
-  const [searchValue, setSearchValue] = useState('');
-
-  const { run } = useDebounceFn(
-    (val) => {
-      onSearch(val);
-    },
-    {
-      wait: 500,
-    },
-  );
-
-  const handleClose = useCallback((e) => {
-    if (e.keyCode === 27) {
-      setFocus(false);
-      setSearchValue('');
-      onCancel();
-      ref.current.blur();
-    }
-  }, []);
-
-  useEffect(() => {
-    document.addEventListener('keyup', handleClose);
-    return () => {
-      document.removeEventListener('keyup', handleClose);
-    };
-  }, []);
-
-  return (
-    <div
-      className={cx(styles.searchInput, {
-        [styles.focus]: focus,
-      })}
-    >
-      <Icon type="search" style={{ color: '#C4C4C4' }} />
-      <div className={styles.input}>
-        <Input
-          style={{ width: '100%' }}
-          ref={ref}
-          size="large"
-          bordered={false}
-          onFocus={() => setFocus(true)}
-          onBlur={() => {
-            if (!searchValue) {
-              setFocus(false);
-            }
-          }}
-          value={searchValue}
-          placeholder={placeholder}
-          onChange={(e) => {
-            const val = e.target.value;
-            setSearchValue(val);
-            //run(val);
-            onSearch(val);
-          }}
-        />
-      </div>
-      <div className={styles.cancel} onClick={() => handleClose({ keyCode: 27 })}>
-        <Icon type="backward" />
-        取消搜索
-      </div>
-    </div>
-  );
-};

+ 0 - 50
src/tenants-ui/SearchInput/index.less

@@ -1,50 +0,0 @@
-.searchInput {
-  height: 50px;
-  display: flex;
-  position: relative;
-  align-items: center;
-  border-bottom: 1px solid #C4C4C4;
-  transition: all 0.3s cubic-bezier(0.075, 0.82, 0.165, 1);
-  &::after {
-    content: "";
-    position: absolute;
-    left: 0;
-    width: 0;
-    bottom: 0;
-    height: 1px;
-    background: #000;
-    transition: all 0.3s cubic-bezier(0.075, 0.82, 0.165, 1);
-  }
-  &:hover::after {
-    width: 100%;
-  }
-  &.focus {
-    padding: 0 15px;
-    background-color: #fff;
-    border-bottom: 1px solid transparent;
-    &::after {
-      width: 0;
-    }
-    .input {
-      width: 580px;
-    }
-    .cancel {
-      display: block;
-    }
-  }
-}
-
-.input {
-  width: 200px;
-  transition: all 0.3s cubic-bezier(0.075, 0.82, 0.165, 1);
-}
-
-.cancel {
-  display: none;
-  color: #656872;
-  cursor: pointer;
-  transition: all 0.3s cubic-bezier(0.075, 0.82, 0.165, 1);
-  &:hover {
-    color: #000;
-  }
-}

src/tenants-ui/Icon/index.jsx → src/tenants-ui/SgIcon/index.jsx