mcfxkh-Web/src/views/Home/panels/Warn/ShYj.js

108 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, { useCallback, useEffect, useState } from 'react';
import './ShYj.less';
import appconsts from '../../../../models/appconsts';
import { useDispatch } from 'react-redux';
import apiurl from '../../../../models/apiurl';
import { httpget } from '../../../../utils/request';
import config from '../../../../config';
import DpAlert from '../../../../layouts/mui/DpAlert';
import { DcpjPromise } from '../../../../models/_/dcpj';
function Item({ data, viewInfo }) {
return (
<div className="item">
<div className={`header alert${data.warngradeid === 5 ? 1 : 2}`}>
</div>
<div className="content">
<div className="main">
<div className="title" onClick={() => viewInfo(data)}>{data.adnm || '--'}</div>
<div className="span"></div>
<div className="extra">{appconsts.warnStatus_TYPE[data.warnstatusid]}</div>
</div>
<div className="desc">
<span>{data.warndesc}</span>
</div>
<div className="tail">
<span>{data.warnstm.substr(0, 'yyyy-mm-dd hh:mm'.length)}</span>
<a onClick={() => viewInfo(data, 'danad')} style={{ textAlign: 'right' }}>危险区</a>
</div>
</div>
</div>
);
}
function ShYj({ data }) {
const [hisdata, sethisdata] = useState();
useEffect(() => {
if (!data) {
return;
}
if (data.length === 0) {
httpget(apiurl.shyj.find, { adcd: config.SHYJ_ADCD, page: 1, size: 10, warnstatusid: 30 })
.then(({ data }) => sethisdata(data.list || []))
}
}, [data?.length]);
const dispatch = useDispatch();
const viewInfo = useCallback((record, type) => {
if (type === 'danad') {
const adcd = record?.adcd?.replace(/([0]{3})*$/, '');
if (adcd) {
Promise.all([
DcpjPromise.danad.get(),
DcpjPromise.transfer.get(),
DcpjPromise.placement.get(),
]).then(([danads, transfers, placements]) => {
const highlights = [
...((danads || []).filter(o => o?.ADCD?.startsWith(adcd)).map(o => ({ ...o, type: 'danad' }))),
...((transfers || []).filter(o => o?.ADCD?.startsWith(adcd)).map(o => ({ ...o, type: 'transfer' }))),
...((placements || []).filter(o => o?.ADCD?.startsWith(adcd)).map(o => ({ ...o, type: 'placement' })))
];
if (highlights.length > 0) {
dispatch.map.openHighlights({
title: `${record.adnm}危险区/转移路线/安置点`,
records: highlights.map(o => ({
id: o.PID,
adcd: o.ADCD,
lgtd: o.lgtd,
lttd: o.lttd,
name: o.NAME,
type: o.type,
}))
})
}
dispatch.map.highlightFeatures(highlights.map(o => ({
type: o.type,
props: o,
fill: 'rgb(239, 164, 114)',
stroke: o.type === 'danad' ? 'rgb(239, 164, 114)' : '#f6f082'
})));
});
}
} else {
dispatch.runtime.setInfoDlg({ layerId: 'ShWarn', properties: record })
}
}, [dispatch]);
const showdata = hisdata?.length > 0 ? hisdata : (data || []);
return (
<div className="dppanel-shyj">
{
hisdata?.length > 0 && <DpAlert severity="info">当前无预警显示最新10条已关闭预警</DpAlert>
}
{
showdata.map(o => (
<Item key={o.warnid} viewInfo={viewInfo} data={o} />
))
}
</div>
)
}
export default React.memo(ShYj);