xujunjie 1 年間 前
コミット
3c4c33750a

+ 6 - 4
src/global.less

@@ -275,6 +275,7 @@ input[type='reset'] {
   }
 }
 
+
 *::-webkit-scrollbar {
   width: 0.06rem;
   height: 0.06rem;
@@ -291,12 +292,13 @@ input[type='reset'] {
 *::-webkit-scrollbar-track {
   background-color: #eee;
 }
-
+.ant-btn {
+  padding: 0.08rem 0.24rem;
+  font-size: 0.28rem;
+  height: auto;
+}
 .ant-btn-primary {
   background: #4a90e2;
-  font-size: 0.22rem;
-  padding-top: 0;
-  padding-bottom: 0;
 }
 
 .ant-table {

+ 6 - 0
src/pages/DeviceManager/index.less

@@ -101,6 +101,12 @@
   font-family: Source Han Sans, Source Han Sans;
   color: #615d5d;
 }
+.tipContent2 {
+  .itemContent;
+  font-size: 0.28rem;
+  font-family: Source Han San;
+  color: #615d5d;
+}
 
 .lineContent {
   display: flex;

+ 14 - 5
src/pages/DeviceManager/storage.js

@@ -142,11 +142,20 @@ const StorageOverview = ({ projectId }) => {
 
   return (
     <Spin className="content-title" spinning={loading}>
-      <div className={`card-box ${styles.tipContent}`}>
-        <span>备品报告:{warningData}</span>
-        <Button type="primary" onClick={goDetail}>
-          详情
-        </Button>
+      <div className={`card-box  ${styles.tipContent2}`}>
+        <div
+          style={{
+            display: 'flex',
+            justifyContent: 'space-between',
+            alignItems: 'center',
+          }}
+        >
+          <ModuleTitle title="备品报告:" />
+          <Button type="primary" onClick={goDetail}>
+            详情
+          </Button>
+        </div>
+        <div style={{ marginTop: '0.2rem' }}>{warningData}</div>
       </div>
       <div className={`card-box ${styles.itemContent}`}>
         <ModuleTitle title="物料种类库存占比" />

+ 27 - 5
src/pages/EqSelfInspection/components/Detail.js

@@ -1,6 +1,6 @@
 import ModuleTitle from '@/components/ManagementPage/moduleTitle';
-import { getDumuDetail } from '@/services/eqSelfInspection';
-import { connect, useRequest } from '@umijs/max';
+import { getDumuDetail, getMandateIDs } from '@/services/eqSelfInspection';
+import { connect, useParams, useRequest } from '@umijs/max';
 import { Checkbox, Col, Row, Spin, Table } from 'antd';
 import { useEffect, useMemo, useState } from 'react';
 import styles from './PatrolReportDetail.less';
@@ -15,10 +15,23 @@ import WaterQualityCom from './Table/WaterQualityCom';
 
 function Detail(props) {
   const { data, userList, projectId, dispatch, loading = false } = props;
+  const { routeId } = useParams();
 
   const [select, setSelect] = useState();
   const [statusCheck, setStatusCheck] = useState([0, 1, 2]);
 
+  const { data: mandate } = useRequest(getMandateIDs, {
+    defaultParams: [
+      {
+        project_id: projectId,
+        id: routeId,
+      },
+    ],
+    formatResult(res) {
+      return res;
+    },
+  });
+
   const sendMessageToUnity = (select, data) => {
     setSelect(select);
     if (window.HightlightEquipment) {
@@ -97,7 +110,7 @@ function Detail(props) {
           </Col>
         </Row>
         <Row>
-          <Col span={8} className={styles.cardText}>
+          <Col span={10} className={styles.cardText}>
             自检路线:{data?.RouteInfo?.Name}
           </Col>
           <Col span={8} className={styles.cardText}>
@@ -106,7 +119,7 @@ function Detail(props) {
         </Row>
         <Row>
           {result.map((item, index) => (
-            <Col span={8} className={styles.cardText}>
+            <Col span={index == 0 ? 10 : 7} className={styles.cardText}>
               {index == 0 && '自检结果:'}
               {item.label}-
               <span style={{ color: item.color }}>{item.value}</span>
@@ -141,6 +154,7 @@ function Detail(props) {
         {/* 设备自检报告 */}
         <DeviceReport
           sendMessageToUnity={sendMessageToUnity}
+          mandate={mandate}
           select={select}
           data={data}
           userList={userList}
@@ -151,6 +165,7 @@ function Detail(props) {
 
         <AalysisTable
           onClickItem={sendMessageToUnity}
+          mandate={mandate}
           select={select}
           data={data}
           statusCheck={statusCheck}
@@ -158,6 +173,7 @@ function Detail(props) {
         {/* 安全自检报告 */}
         <SecureReport
           sendMessageToUnity={sendMessageToUnity}
+          mandate={mandate}
           select={select}
           data={data}
           userList={userList}
@@ -320,7 +336,7 @@ function SecureReport(props) {
 }
 
 function AalysisTable(props) {
-  const { data = {}, statusCheck } = props;
+  const { data = {}, statusCheck, mandate } = props;
   const { FaultAnalysis } = data;
   const errorCount = data?.FaultAnalysis?.length || 0;
   const columns = [
@@ -359,6 +375,12 @@ function AalysisTable(props) {
         }
       },
     },
+    {
+      title: '关联任务',
+      render: (record) => (
+        <a>{mandate?.find((item) => item.source == record.Id)?.id}</a>
+      ),
+    },
   ];
 
   if (statusCheck.length != 3) {

+ 2 - 4
src/pages/EqSelfInspection/components/PatrolReportDetail.less

@@ -81,15 +81,13 @@
 .card {
   background: #fff;
   // padding: 0.1rem 0.2rem;
-  padding-top: 0.28rem;
-  padding-bottom: 0.4rem;
-  padding-left: 0.6rem;
+  padding: 0.28rem 0 0.4rem;
   position: relative;
   overflow: hidden;
   border-bottom: 2px solid #4577ff;
   margin-bottom: 0.4rem;
   .cardText {
-    font-size: 0.32rem;
+    font-size: 0.3rem;
     font-family: Source Han Sans, Source Han Sans;
     color: #615d5d;
     line-height: 1;

+ 10 - 1
src/pages/EqSelfInspection/components/Table/LiquidLevelCom.js

@@ -14,6 +14,7 @@ export default function LiquidLevelCom(props) {
     type,
     statusCheck,
     changeStatus,
+    mandate,
   } = props;
   const [activeKey, setActiveKey] = useState('1');
 
@@ -94,6 +95,7 @@ export default function LiquidLevelCom(props) {
           items={errorTableData}
           key={type}
           type={type}
+          mandate={mandate}
         />
       )}
       {activeKey === '0' && (
@@ -103,6 +105,7 @@ export default function LiquidLevelCom(props) {
           items={normalData}
           key={type}
           type={type}
+          mandate={mandate}
         />
       )}
     </div>
@@ -110,7 +113,7 @@ export default function LiquidLevelCom(props) {
 }
 
 function LiquidTable(props) {
-  const { items } = props;
+  const { items, mandate } = props;
 
   const columns = [
     {
@@ -194,6 +197,12 @@ function LiquidTable(props) {
         }
       },
     },
+    {
+      title: '关联任务',
+      render: (record) => (
+        <a>{mandate?.find((item) => item.source == record.id)?.id}</a>
+      ),
+    },
   ];
 
   return (

+ 4 - 0
src/pages/EqSelfInspection/components/Table/ReportCom.js

@@ -15,6 +15,7 @@ export default function ReportCom(props) {
     data,
     statusCheck,
     changeStatus,
+    mandate
   } = props;
   const [activeKey, setActiveKey] = useState('1');
   const handleTabsChange = (activeKey) => {
@@ -93,6 +94,7 @@ export default function ReportCom(props) {
           key={type}
           data={data}
           type={type}
+          mandate={mandate}
           userList={userList}
         />
       )}
@@ -104,6 +106,7 @@ export default function ReportCom(props) {
           key={type}
           data={data}
           type={type}
+          mandate={mandate}
           userList={userList}
         />
       )}
@@ -115,6 +118,7 @@ export default function ReportCom(props) {
           data={data}
           key={type}
           type={type}
+          mandate={mandate}
           userList={userList}
         />
       )}

+ 6 - 2
src/pages/EqSelfInspection/components/Table/WarningTable.js

@@ -3,12 +3,12 @@ import ThresholdModal from '@/components/ThresholdDetail/ThresholdModal';
 import { changeRecordStatus } from '@/services/eqSelfInspection';
 import { Table, message } from 'antd';
 import { useState } from 'react';
-import ErrorHandleModal from './ErrorHandleModal';
 import styles from '../PatrolReportDetail.less';
 import Empty from './Empty';
+import ErrorHandleModal from './ErrorHandleModal';
 
 export default function WarningTable(props) {
-  const { data, userList, items } = props;
+  const { data, userList, items, mandate = [] } = props;
   const [loading, setLoading] = useState(false);
   const [visible, setVisible] = useState(false);
   const [errVisible, setErrVisible] = useState(false);
@@ -87,6 +87,10 @@ export default function WarningTable(props) {
         }
       },
     },
+    {
+      title: '关联任务',
+      render: (record) => <a>{mandate?.find(item => item.source == record.Id)?.id}</a>,
+    },
   ];
 
   return (

+ 3 - 2
src/pages/EqSelfInspection/index.js

@@ -78,12 +78,13 @@ const EqSelfInspection = (props) => {
     if (!autoReport.Id) {
       return;
     }
-    let mandateIDs = await getMandateIDs({
+    let res = await getMandateIDs({
       project_id: projectId,
       id: autoReport.Id,
     }).catch((err) => {
       console.log(err);
     });
+    let mandateIDs = res.map((item) => item.id);
     if (mandateIDs?.length) {
       mandateIDs = [...new Set(mandateIDs)];
       UnityAction.sendMsg('OpenTaskModal', `mandate_id=${mandateIDs.join()}`);
@@ -98,7 +99,7 @@ const EqSelfInspection = (props) => {
     );
   };
 
-  const gotoDetail = (model = "") => {
+  const gotoDetail = (model = '') => {
     history.push(
       `/self-inspection/detail/${projectId}/${autoReport?.Id}?model=${model}`,
     );

+ 27 - 0
src/pages/Home/QualityMng.js

@@ -8,19 +8,46 @@ import {
   queryProcessSection,
   querySectionCode,
 } from '@/services/OperationManagement';
+import { queryConditionSnapshot } from '@/services/SmartOps';
 import { UnityAction } from '@/utils/utils';
 import { useParams, useRequest } from '@umijs/max';
 import { Empty, Spin, Table } from 'antd';
 import dayjs from 'dayjs';
 import { useEffect, useMemo, useRef, useState } from 'react';
 import SubTitle from '../SmartOps/components/SubTitle';
+import { getValue } from './index';
+import styles from './index.less';
 
 function Quality() {
+  const { projectId } = useParams();
+  const { data } = useRequest(queryConditionSnapshot, {
+    defaultParams: [{ project_id: projectId }],
+    pollingInterval: 10 * 1000,
+  });
+  const status = useMemo(() => {
+    switch (data?.water_quality_status) {
+      case 1:
+        return '当前水质良好';
+      case 2:
+        return '当前水质较好';
+    }
+  }, [data?.water_quality_status]);
   return (
     <PageContent closeable={false}>
       <PageTitle onReturn={() => UnityAction.sendMsg('menuItem', '首页')}>
         水质监测
       </PageTitle>
+      <div className={styles.pageTip}>{status}</div>
+      <ul className={styles.pageTop}>
+        <li>
+          <div className={styles.pageTopValue}>{getValue(data?.dtds)}</div>
+          <div>外供水电导率(µs/cm)</div>
+        </li>
+        <li>
+          <div className={styles.pageTopValue}>{getValue(data?.dph)}</div>
+          <div>外供水(PH)</div>
+        </li>
+      </ul>
       <WaterQuality />
     </PageContent>
   );

+ 1 - 5
src/pages/Home/WaterAmtMng.js

@@ -10,6 +10,7 @@ import { useParams, useRequest } from '@umijs/max';
 import { Button, DatePicker, Spin, Table } from 'antd';
 import dayjs from 'dayjs';
 import { useMemo, useState } from 'react';
+import { getValue } from './index';
 import styles from './index.less';
 
 const { RangePicker } = DatePicker;
@@ -55,11 +56,6 @@ const WaterAmtMng = () => {
 
 export default WaterAmtMng;
 
-const getValue = (str) => {
-  const result = str?.match(/.*?(\d+(?:\.\d+)?)\D*$/);
-  if (result && result[1]) return result[1];
-  return 0;
-};
 export const WaterAmt = () => {
   const { projectId } = useParams();
 

+ 9 - 7
src/pages/Home/index.js

@@ -83,7 +83,7 @@ const RightContent = (props) => {
   );
 };
 
-const getValue = (str) => {
+export const getValue = (str) => {
   const result = str?.match(/.*?(\d+(?:\.\d+)?)\D*$/);
   if (result && result[1]) return result[1];
   return 0;
@@ -263,9 +263,10 @@ const Electric = (props) => {
   const content = (
     <div className={styles.popoverContent}>
       <p>理论值规则:</p>
-      <p>分为高/中/低温3档,</p>
-      <p>高温为≥25℃,低温为<20℃,中温为≥20且<25℃</p>
-      <p>当前温度为近一天平均温度</p>
+      <p>分为高/中/低温3档。则高温为≥25℃,低温为<20℃,中温为≥20且<25℃;</p>
+      <p>
+        吨水电耗理论值:高温阶段理论值暂定为0.77Kwh/m3;高温阶段理论值暂定为0.83Kwh/m3;低温阶段理论值暂定为0.89Kwh/m3。
+      </p>
     </div>
   );
 
@@ -329,9 +330,10 @@ const Medicine = (props) => {
   const content = (
     <div className={styles.popoverContent}>
       <p>理论值规则:</p>
-      <p>分为高/中/低温3档,</p>
-      <p>高温为≥25℃,低温为<20℃,中温为≥20且<25℃</p>
-      <p>当前温度为近一天平均温度</p>
+      <p>分为高/中/低温3档。则高温为≥25℃,低温为<20℃,中温为≥20且<25℃;</p>
+      <p>
+        吨水药耗理论值:高温阶段理论值暂定为0.165元/m3;中温阶段理论值暂定为0.177元/m3;低温阶段理论值暂定为0.189元/m3。
+      </p>
     </div>
   );
   return (

+ 1 - 0
src/pages/Home/index.less

@@ -42,6 +42,7 @@
   left: 190px;
 }
 .popoverContent {
+  max-width: 5rem;
   font-size: 20px;
   p {
     margin-bottom: 0;

+ 1 - 1
src/pages/SafetyManagement/index.js

@@ -150,7 +150,7 @@ const Video = ({ data, dataOnline, loading, selected, setSelected }) => {
               <img className={styles.img} src={videoIcon} />
               <div className={styles.textCon}>
                 <div className="value-number">{dataOnline?.total || 0}</div>
-                <div className={styles.text}>在库数量(个)</div>
+                <div className={styles.text}>视频数量(个)</div>
               </div>
             </div>
             <div>

+ 2 - 1
src/pages/Smart/ConditionDetection.js

@@ -8,7 +8,7 @@ import { useEffect, useMemo, useRef } from 'react';
 import PageContent from '@/components/PageContent';
 import PageTitle from '@/components/PageTitle';
 import styles from './ConditionDetection.less';
-import CircleScore from './components/CircleScore';
+import EvaluationReport from './components/EvaluationReport';
 
 const ConditionDetection = (props) => {
   const { projectId } = useParams();
@@ -114,6 +114,7 @@ const ConditionDetection = (props) => {
           <div className={styles.img}></div>
         </div>
 
+        <EvaluationReport dataKey="allProject" />
         {/* <ChartContent projectId={pid} /> */}
       </div>
     </PageContent>

+ 0 - 13
src/pages/Smart/OptimizationTasks.js

@@ -12,7 +12,6 @@ import { Table } from 'antd';
 import dayjs from 'dayjs';
 import { useState } from 'react';
 import styles from './OptimizationTasks.less';
-import EvaluationReport from './components/EvaluationReport';
 import ScrollLoading from './components/ScrollLoading';
 
 const OptimizationTasks = (props) => {
@@ -30,18 +29,6 @@ const OptimizationTasks = (props) => {
         <div>
           <Produce projectId={projectId} />
           <Cost projectId={projectId} />
-          <div className={styles.pageCard}>
-            <h3
-              className={styles.title}
-              style={{ justifyContent: 'space-between' }}
-            >
-              <div>
-                <i />
-                评估报告
-              </div>
-            </h3>
-            <EvaluationReport dataKey="allProject" />
-          </div>
         </div>
       </div>
     </PageContent>

+ 13 - 13
src/pages/Smart/index.js

@@ -59,19 +59,6 @@ const Work = (props) => {
         </div>
       </div>
       <Row gutter={30}>
-        <Col span={12}>
-          <div className={styles.card}>
-            <h3>水厂负荷数据</h3>
-            <ul>
-              <li>
-                <i></i>实际处理水量:{data?.fact_water}
-              </li>
-              <li>
-                <i></i>设计处理水量:{data?.devise_water}
-              </li>
-            </ul>
-          </div>
-        </Col>
         <Col span={12}>
           <div className={styles.card}>
             <h3>
@@ -92,6 +79,19 @@ const Work = (props) => {
             </ul>
           </div>
         </Col>
+        <Col span={12}>
+          <div className={styles.card}>
+            <h3>水厂负荷数据</h3>
+            <ul>
+              <li>
+                <i></i>实际处理水量:{data?.fact_water}
+              </li>
+              <li>
+                <i></i>设计处理水量:{data?.devise_water}
+              </li>
+            </ul>
+          </div>
+        </Col>
         <Col span={12}>
           <div className={styles.card}>
             <h3>能耗数据</h3>