110 lines
2.9 KiB
JavaScript
110 lines
2.9 KiB
JavaScript
import { Button, makeStyles, Typography } from '@material-ui/core'
|
||
import React, { useMemo } from 'react'
|
||
import { WarnRespListPromise } from '../../../../models/_/warnresp';
|
||
import { WARNRESP_COLOR } from '../../../../utils/renutils';
|
||
import useRequest from '../../../../utils/useRequest'
|
||
|
||
const useStyles = makeStyles({
|
||
root: {
|
||
display: 'flex',
|
||
flexGrow: 1,
|
||
flexDirection: 'column',
|
||
alignItems: 'stretch',
|
||
padding: '1rem'
|
||
},
|
||
|
||
item: {
|
||
height: '25%',
|
||
display: 'flex',
|
||
},
|
||
|
||
sep: {
|
||
borderBottom: '1px dashed #bce9f088',
|
||
},
|
||
|
||
head: {
|
||
width: '15%',
|
||
display: 'flex',
|
||
justifyContent: 'center',
|
||
alignItems: 'center',
|
||
},
|
||
|
||
banner: {
|
||
borderRadius: '0.25rem',
|
||
padding: '1rem',
|
||
color: '#fff',
|
||
border: '2px solid #fff8',
|
||
},
|
||
|
||
content: {
|
||
flexGrow: 1,
|
||
padding: '0.8rem',
|
||
overflowY: 'auto'
|
||
},
|
||
|
||
action: {
|
||
width: '10%',
|
||
display: 'flex',
|
||
justifyContent: 'center',
|
||
alignItems: 'center',
|
||
}
|
||
});
|
||
|
||
function Item({ level, classes, doStart, conf }) {
|
||
const standards = conf?.standards || [];
|
||
|
||
return (
|
||
<>
|
||
<div className={classes.head}>
|
||
<div className={classes.banner} style={{ backgroundColor: WARNRESP_COLOR[level] }}>{`${level}级响应`}</div>
|
||
</div>
|
||
<div className={classes.content}>
|
||
<Typography style={{ color: '#fff8' }} variant="body1">当发生以下情况之一时,启动防汛{level}级响应</Typography>
|
||
{
|
||
standards.map(o => (
|
||
<Typography key={o.id} style={{ color: '#fffd' }} variant="body2">{o.standard}</Typography>
|
||
))
|
||
}
|
||
</div>
|
||
<div className={classes.action}>
|
||
<Button size="large" color="primary" onClick={() => doStart(conf)}>启动</Button>
|
||
</div>
|
||
</>
|
||
);
|
||
}
|
||
|
||
function StartWarnRespPanel({ type, doStart }) {
|
||
const classes = useStyles();
|
||
|
||
const { data: listdata } = useRequest(WarnRespListPromise.get);
|
||
|
||
const datas = useMemo(() => {
|
||
if (!listdata) {
|
||
return [null, null, null, null];
|
||
}
|
||
return ['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ'].map(level => listdata.find(o => o.level === level && o.type === type));
|
||
}, [listdata, type]);
|
||
|
||
return (
|
||
<div className={classes.root}>
|
||
<div className={classes.item}>
|
||
<Item level="Ⅰ" classes={classes} doStart={doStart} conf={datas[0]} />
|
||
</div>
|
||
<div className={classes.sep}></div>
|
||
<div className={classes.item}>
|
||
<Item level="Ⅱ" classes={classes} doStart={doStart} conf={datas[1]} />
|
||
</div>
|
||
<div className={classes.sep}></div>
|
||
<div className={classes.item}>
|
||
<Item level="Ⅲ" classes={classes} doStart={doStart} conf={datas[2]} />
|
||
</div>
|
||
<div className={classes.sep}></div>
|
||
<div className={classes.item}>
|
||
<Item level="Ⅳ" classes={classes} doStart={doStart} conf={datas[3]} />
|
||
</div>
|
||
</div>
|
||
)
|
||
}
|
||
|
||
export default React.memo(StartWarnRespPanel)
|