import { getPendingList } from '@/services/message';
import { queryConditionSnapshot } from '@/services/SmartOps';
import { getToken, UnityAction } from '@/utils/utils';
import { LoadingOutlined } from '@ant-design/icons';
import { connect, useParams, useRequest } from '@umijs/max';
import { Popover } from 'antd';
import dayjs from 'dayjs';
import { useEffect, useMemo, useState } from 'react';
import { getScadaPage } from '../../services/OperationManagement';
import styles from './index.less';
const HomePage = (props) => {
const { projectId } = useParams();
const { data } = useRequest(queryConditionSnapshot, {
defaultParams: [{ project_id: projectId }],
pollingInterval: 10 * 1000,
});
const getPositionPst = (e) => {
const width = document.body.clientWidth;
const height = document.body.clientHeight;
const xPst = (e.clientX / width).toFixed(2);
const yPst = (e.clientY / height).toFixed(2);
return xPst + '-' + yPst;
};
const webMouseEvent = {
onMouseUp: (e) => {
UnityAction.sendMsg('PointerOut', getPositionPst(e));
},
onMouseDown: (e) => {
UnityAction.sendMsg('PointerIn', getPositionPst(e));
},
};
useEffect(() => {
localStorage.width = document.documentElement.getBoundingClientRect().width;
window.refreshRem();
document.body.style.backgroundColor = 'transparent';
}, []);
return (
);
};
const LeftContent = (props) => {
const { data } = props;
return (
{/* */}
{/* */}
);
};
const CenterContent = (props) => {
const { data } = props;
return (
{/*
*/}
);
};
const RightContent = (props) => {
const { data } = props;
return (
{/* */}
{/* */}
);
};
export const getValue = (str) => {
const result = str?.match(/.*?(\d+(?:\.\d+)?)\D*$/);
if (result && result[1]) return result[1];
return 0;
};
// 水厂工况
const SmartWork = (props) => {
const { data } = props;
return (
UnityAction.sendMsg('menuItem', '工况管理')}
>
{data?.score}
{data?.grade}
当前运行{data?.grade},可继续优化
{dayjs(data?.clac_time).format('YYYY-MM-DD HH:mm')}
);
};
// 水量监测
const WaterAmt = (props) => {
const { data } = props;
const status = useMemo(() => {
switch (data?.dwa_status) {
case 1:
return '当前处于外供水高峰期';
case 2:
return '当前处于外供水平时期';
case 3:
return '当前处于外供水低峰期';
}
}, [data?.dwa_status]);
return (
UnityAction.sendMsg('menuItem', '水量监测')}
>
{status}
-
{getValue(data?.fwa)}
进水量(m³/h)
-
{getValue(data?.dwa)}
产水量(m³/h)
);
};
// 水质监测
const WaterQuality = (props) => {
const { data } = props;
const status = useMemo(() => {
switch (data?.water_quality_status) {
case 1:
return '当前水质良好';
case 2:
return '当前水质较好';
}
}, [data?.water_quality_status]);
return (
UnityAction.sendMsg('menuItem', '水质监测')}
>
{status}
-
{getValue(data?.dtds)}
外供水电导率(µs/cm)
-
{data?.dph || 0}
外供水(PH)
);
};
// 系统自检
const SelfInspection = connect(({ eqSelfInspection, loading }) => ({
autoReport: eqSelfInspection.autoReport,
loading: loading.models['eqSelfInspection'],
}))((props) => {
const { autoReport, dispatch, loading } = props;
const { projectId } = useParams();
const renderStatus = () => {
if (loading) return ;
if (autoReport.Status > 0) {
return (
异常
);
}
return (
正常
);
};
useEffect(() => {
dispatch({
type: 'eqSelfInspection/getAutoPatrol',
payload: {
projectId,
},
});
}, []);
return (
UnityAction.sendMsg('menuItem', '系统自检')}
>
{dayjs(autoReport.CreatedTime).format('YYYY-MM-DD HH:mm')}
{/*
自检中
*/}
{/*
{renderStatus()}
{dayjs(autoReport.CreatedTime).format('YYYY-MM-DD HH:mm')}
*/}
);
});
// 能耗监测
const Electric = (props) => {
const { data } = props;
const [open, setOpen] = useState(false);
const elec = useMemo(() => {
return getValue(data?.elec_unit);
}, [data?.elec_unit]);
const status = useMemo(() => {
if (!data) return '';
if (elec > data.elec_unit_theory) {
return '当前电耗高于理论值';
}
if (elec == data.elec_unit_theory) {
return '当前电耗持平理论值';
}
if (elec < data.elec_unit_theory) {
return '当前电耗低于理论值';
}
}, [data]);
const content = (
理论值规则:
分为高/中/低温3档。则高温为≥25℃,低温为<20℃,中温为≥20且<25℃;
吨水电耗理论值:高温阶段理论值暂定为0.77Kwh/m3;高温阶段理论值暂定为0.83Kwh/m3;低温阶段理论值暂定为0.89Kwh/m3。
);
return (
UnityAction.sendMsg('menuItem', '能耗监测')}
>
{status}
{
e.stopPropagation();
setOpen(!open);
}}
>
);
};
// 药耗监测
const Medicine = (props) => {
const { data } = props;
const [open, setOpen] = useState(false);
const otc_cost = useMemo(() => {
return getValue(data?.otc_cost_unit);
}, [data?.otc_cost_unit]);
const status = useMemo(() => {
if (!data) return '';
if (otc_cost > data.otc_unit_theory) {
return '当前药耗高于理论值';
}
if (otc_cost == data.otc_unit_theory) {
return '当前药耗持平理论值';
}
if (otc_cost < data.otc_unit_theory) {
return '当前药耗低于理论值';
}
}, [data]);
const content = (
理论值规则:
分为高/中/低温3档。则高温为≥25℃,低温为<20℃,中温为≥20且<25℃;
吨水药耗理论值:高温阶段理论值暂定为0.165元/m3;中温阶段理论值暂定为0.177元/m3;低温阶段理论值暂定为0.189元/m3。
);
return (
UnityAction.sendMsg('menuItem', '药耗监测')}
>
{status}
{
e.stopPropagation();
setOpen(!open);
}}
>
);
};
// 工艺监控
const Scada = () => {
const { projectId } = useParams();
const { data } = useRequest(getScadaPage, {
defaultParams: [{ project_id: projectId }],
formatResult: (res) => {
let domain = location.host.includes('pad.greentech.com.cn')
? 'https://metawant.greentech.com.cn/'
: 'http://47.96.12.136:8788/';
const token = getToken();
const pageList = res?.filter((item) => item.hide);
const urls = pageList.map(
(item) =>
`${domain}smart-water/scada/index.html#/3dview/${projectId}/${item.id}?JWT-TOKEN=${token}&hideTitle=true&pauseLoadRealTimeData=true`,
);
return urls.splice(0, 1);
},
});
return (
UnityAction.sendMsg('menuItem', '工艺监控')}
>
{data?.map((url) => (
))}
);
};
// 待办事项
const Backlog = (props) => {
const { projectId } = useParams();
const { data, loading } = useRequest(getPendingList, {
defaultParams: [{ project_id: projectId }],
});
const handleClick = (item) => {
if (item.type === 0) {
// task
UnityAction.sendMsg('OpenTaskModal', `mandate_id=${item.origin_id}`);
} else {
// order
UnityAction.sendMsg(
'OpenWorkOrderModal',
`order_id=${item.origin_id}&order_type=${item.origin_type}`,
);
}
};
return (
UnityAction.sendMsg('menuItem', '待办事项')}
>
待办事项} />
{data?.map((item) => (
{
e.stopPropagation();
handleClick(item);
}}
>
{dayjs(item.time).format('MM-DD HH:mm')}
{item.content}
))}
);
};
const Title = ({ title }) => {
return (
);
};
const Box = ({ title, children, onClick, small }) => {
return (
{/*
{title}
*/}
{children}
);
};
export default HomePage;