import { Button, Checkbox, makeStyles, Snackbar, TextField } from '@material-ui/core'; import { Person } from '@material-ui/icons'; import React, { useEffect, useMemo, useState } from 'react'; import appconsts from '../../../../models/appconsts'; import { sendsmtp } from '../../../../models/_/base'; import { personelByAdcdExact } from '../../../../models/_/personel'; import { HDGet } from '../../../../models/_/real'; import DpAlert from '../../../../layouts/mui/DpAlert'; const useStyle = makeStyles({ root: { display: 'flex', height: '100%', }, leftSide: { width: '50%', overflow: 'auto', padding: '0.5rem', marginRight: '1rem' }, rightSide: { padding: '0.5rem', flexGrow: 1, }, span: { padding: '0.5rem', }, itemRoot: { display: 'flex', alignItems: 'center', borderBottom: '1px dashed #bce9f088', //marginBottom: '0.5rem', padding: '0.5rem 0' }, icon: { marginRight: '1rem', }, body: { flexGrow: 1, }, action: { flexShrink: 0, }, phone: { color: '#ccc', margin: '0 0.5rem', }, desc: { color: '#aaa', fontSize: '0.8rem', }, }); function Personel({ classes, data, onSelectChange, selected }) { return (
{data.name}{data.phone}
{`${data.department || ''}, ${data.position || ''}`}
onSelectChange(data, v)} />
) } function SmtpPanel({ record }) { const classes = useStyle(); const [personels, setPersonels] = useState([]); const [selected, setSelected] = useState({}); const [loading, setLoading] = useState(false); const [content, setContent] = useState(() => { const rz = record.rz; const brz = record[appconsts.stWarnLevelKey[record.level]]; const arz = brz ? (rz - brz).toFixed(2) : '-'; return `报警水位${rz}m,测站${appconsts.stWarnLevel[record.level]}为${brz || '-'}m,超${arz || '-'}m` }); const [msg, setMsg] = useState(null); useEffect(() => { const fetchData = async () => { const st = await HDGet(record?.stcd); if (st?.adcd?.length >= 9) { const zhenAd = st.adcd.substr(0, 9); const data = await personelByAdcdExact(zhenAd); setPersonels(data || []); } } fetchData(); }, [record]); const onSelectChange = (data, v) => { setSelected({ ...selected, [data.id]: v, }) } const filterdata = useMemo(() => { return personels.filter(o => selected[o.id]) }, [selected, personels]); const selectAll = () => { const a = {}; personels.forEach(p => a[p.id] = true); setSelected(a); } const doSend = async () => { if (loading) { return; } const phones = filterdata.map(o => o.phone); setLoading(true); sendsmtp(phones, content).then((result) => { if (result) { setMsg({ type: 'success', msg: '短信已发送' }); setSelected({}) } else { setMsg({ type: 'error', msg: '发送失败' }); } setLoading(false); }); } return (
{ personels.map(o => ( )) }
setContent(e.target.value)} />
setMsg(null)}> { msg && ( setMsg(null)} severity={msg?.type}> {msg?.msg} ) }
) } export default SmtpPanel