267 lines
9.2 KiB
JavaScript
267 lines
9.2 KiB
JavaScript
|
|
import React, { useState, useEffect, useMemo,useRef } from 'react'
|
|||
|
|
import usePageTable from '../../components/crud/usePageTable2';
|
|||
|
|
import { createCrudService } from '../../components/crud/_';
|
|||
|
|
import apiurl from '../../service/apiurl';
|
|||
|
|
import { httppost2,httpget2 } from '../../utils/request';
|
|||
|
|
import CryptoJS from 'crypto-js';
|
|||
|
|
import { Card,Table,Button,Radio,Input,Select,Modal,message } from "antd"
|
|||
|
|
import ToolBar from "./toolbar"
|
|||
|
|
import "./index.less"
|
|||
|
|
export default function Gbyj() {
|
|||
|
|
const [searchValue, setSearchVal] = useState()
|
|||
|
|
const [switchVisible, setSwitchVisible] = useState(false);
|
|||
|
|
const [bbParams, setBbParams] = useState({})
|
|||
|
|
const [addOpen, setAddOpen] = useState(false)
|
|||
|
|
const [mbParams, setMbParams] = useState({})
|
|||
|
|
const columns = [
|
|||
|
|
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
|
|||
|
|
{ title: '广播站名称', key: 'name', dataIndex: 'name', width: 200, ellipsis: true },
|
|||
|
|
{
|
|||
|
|
title: '告警内容', key: 'warnContent', dataIndex: 'warnContent', width: 300,ellipsis: true
|
|||
|
|
},
|
|||
|
|
{ title: '播报时间', key: 'createTime', dataIndex: 'createTime', width: 200 },
|
|||
|
|
{
|
|||
|
|
title: '播报人员', key: 'createUserName', dataIndex: 'createUserName', width: 200,ellipsis: true
|
|||
|
|
},
|
|||
|
|
];
|
|||
|
|
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
|
|||
|
|
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gbyj.page).find_noCode);
|
|||
|
|
//广播站
|
|||
|
|
const [jh, setJh] = useState([])
|
|||
|
|
const getJhList = async () => {
|
|||
|
|
try {
|
|||
|
|
const res = await httppost2(apiurl.gbyj.list)
|
|||
|
|
if (res.code == 200) {
|
|||
|
|
setJh(res.data.map(item => ({label:item.name,value:item.id})))
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
const [mbList, setMbList] = useState([])
|
|||
|
|
|
|||
|
|
const getMbList = async () => {
|
|||
|
|
try {
|
|||
|
|
const res = await httppost2(apiurl.gbyj.mblist);
|
|||
|
|
if(res.code === 200){
|
|||
|
|
setMbList(res.data.map(item=>({label:item.content, value:item.id})));
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 右边添加模版
|
|||
|
|
const addMb = async () => {
|
|||
|
|
try {
|
|||
|
|
const res = await httppost2(apiurl.gbyj.mbsave, { content: bbParams.warnContent });
|
|||
|
|
if (res.code == 200) {
|
|||
|
|
message.success('添加成功');
|
|||
|
|
getMbList();
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 左边添加模版
|
|||
|
|
const saveMb = async () => {
|
|||
|
|
try {
|
|||
|
|
const res = await httppost2(apiurl.gbyj.mbsave, mbParams);
|
|||
|
|
if (res.code == 200) {
|
|||
|
|
message.success('添加成功');
|
|||
|
|
getMbList();
|
|||
|
|
setAddOpen(false)
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 删除模版
|
|||
|
|
const delMb = async () => {
|
|||
|
|
try {
|
|||
|
|
const res = await httpget2(apiurl.gbyj.mbDel + `/${bbParams.checkId}`);
|
|||
|
|
if (res.code == 200) {
|
|||
|
|
message.success('删除成功');
|
|||
|
|
getMbList();
|
|||
|
|
setBbParams({...bbParams,warnContent:'' })
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
const handleCheck = (e) => {
|
|||
|
|
const text = mbList.find(item => item.value == e.target.value)?.label
|
|||
|
|
setBbParams({ ...bbParams, warnContent:text,checkId:e.target.value })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const gbzChange = (e) => {
|
|||
|
|
setBbParams({...bbParams,stationIds:e})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const textChange = (e) => {
|
|||
|
|
setBbParams({ ...bbParams, warnContent: e.target.value })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 播报
|
|||
|
|
|
|||
|
|
const playGb = () => {
|
|||
|
|
setSwitchVisible(true);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//md5加密
|
|||
|
|
const encryptData = (data) => {
|
|||
|
|
const encryptedData = CryptoJS.MD5(data).toString();
|
|||
|
|
return encryptedData;
|
|||
|
|
}
|
|||
|
|
// 确认播报
|
|||
|
|
const confirmBb = async () => {
|
|||
|
|
const name = localStorage.getItem('userName')
|
|||
|
|
const id = localStorage.getItem('userId')
|
|||
|
|
const params = {
|
|||
|
|
...bbParams,
|
|||
|
|
ctrlPass: encryptData(bbParams?.ctrlPass),
|
|||
|
|
createUserId: id,
|
|||
|
|
createUserName: name
|
|||
|
|
}
|
|||
|
|
try {
|
|||
|
|
const res = await httppost2(apiurl.gbyj.bb,params);
|
|||
|
|
if (res.code == 200) {
|
|||
|
|
setSwitchVisible(false);
|
|||
|
|
message.success('播报成功');
|
|||
|
|
refresh()
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
useEffect(()=>{
|
|||
|
|
const params = {
|
|||
|
|
search: {
|
|||
|
|
...searchValue,
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
search(params)
|
|||
|
|
}, [searchValue])
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
getMbList()
|
|||
|
|
getJhList()
|
|||
|
|
}, [])
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<div className='content-root clearFloat xybm' style={{ paddingRight: "0", paddingBottom: "0" }}>
|
|||
|
|
<div className='gb-top'>
|
|||
|
|
<div className='gb-top-title'>
|
|||
|
|
<span className='gb-top-icon'></span>
|
|||
|
|
<span style={{fontSize:18}}>广播预警信息查询</span>
|
|||
|
|
</div>
|
|||
|
|
<Card className='nonebox'>
|
|||
|
|
<ToolBar
|
|||
|
|
setSearchVal={setSearchVal}
|
|||
|
|
jh={jh}
|
|||
|
|
/>
|
|||
|
|
</Card>
|
|||
|
|
<div className="ant-card-body" style={{padding:"20px 0 0 0"}}>
|
|||
|
|
<Table columns={columns} rowKey="inx" {...tableProps} scroll={{ x: width , y: "calc( 100vh - 700px )"}}/>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div className='gb-bottom'>
|
|||
|
|
<div className='gb-bottom-left'>
|
|||
|
|
<div className='gb-top-title'>
|
|||
|
|
<span className='gb-top-icon'></span>
|
|||
|
|
<span style={{fontSize:18,marginRight:20}}>广播模板</span>
|
|||
|
|
<Button type="primary" onClick={() => setAddOpen(true)}>添加</Button>
|
|||
|
|
<Button type="primary" onClick={delMb}>删除</Button>
|
|||
|
|
</div>
|
|||
|
|
<div className='mb-content'>
|
|||
|
|
<Radio.Group
|
|||
|
|
style={{display: 'flex', flexDirection: 'column'}}
|
|||
|
|
options={mbList}
|
|||
|
|
onChange={handleCheck}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div className='gb-bottom-right'>
|
|||
|
|
<div className='gb-top-title'>
|
|||
|
|
<span className='gb-top-icon'></span>
|
|||
|
|
<span style={{fontSize:18,marginRight:20}}>编辑播报内容</span>
|
|||
|
|
<Button type="primary" onClick={addMb}>添加为模板</Button>
|
|||
|
|
</div>
|
|||
|
|
<div className='right-content'>
|
|||
|
|
<div style={{marginRight:10}}>
|
|||
|
|
<Input.TextArea
|
|||
|
|
style={{ width: '100%', minHeight: '150px' }}
|
|||
|
|
allowClear
|
|||
|
|
placeholder='请输入播报内容,或者选择广播模板'
|
|||
|
|
value={bbParams.warnContent}
|
|||
|
|
onChange={textChange}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
<div style={{ marginTop: 20 }}>
|
|||
|
|
<div className='gb-top-title'>
|
|||
|
|
<span className='gb-top-icon'></span>
|
|||
|
|
<span style={{fontSize:18,marginRight:20}}>选择广播预警站</span>
|
|||
|
|
</div>
|
|||
|
|
<div className='station-content'>
|
|||
|
|
<span>已选择:</span>
|
|||
|
|
<Select
|
|||
|
|
mode="tags"
|
|||
|
|
style={{
|
|||
|
|
width: '70%',
|
|||
|
|
}}
|
|||
|
|
onChange={gbzChange}
|
|||
|
|
options={jh}
|
|||
|
|
/>
|
|||
|
|
<Button type="primary" style={{width:"16%"}} onClick={playGb}>播报</Button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
{/* 校验密码 */}
|
|||
|
|
<Modal
|
|||
|
|
open={switchVisible}
|
|||
|
|
width={500}
|
|||
|
|
title="输入校验密码"
|
|||
|
|
onCancel={()=>{setSwitchVisible(false);}}
|
|||
|
|
destroyOnClose
|
|||
|
|
onOk={confirmBb}
|
|||
|
|
>
|
|||
|
|
<div>
|
|||
|
|
<div style={{marginBottom:"10px"}}>请输入二次校验密码</div>
|
|||
|
|
<div>
|
|||
|
|
<Input.Password placeholder='请输入密码' allowClear onChange={(e)=>{setBbParams({...bbParams,ctrlPass:e.target.value})
|
|||
|
|
}} />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</Modal>
|
|||
|
|
{/* 添加模版 */}
|
|||
|
|
<Modal
|
|||
|
|
open={addOpen}
|
|||
|
|
width={500}
|
|||
|
|
title="新增"
|
|||
|
|
onCancel={()=>{setAddOpen(false);}}
|
|||
|
|
destroyOnClose
|
|||
|
|
onOk={saveMb}
|
|||
|
|
>
|
|||
|
|
<div>
|
|||
|
|
<div style={{marginBottom:"10px"}}>请输入模版</div>
|
|||
|
|
<div>
|
|||
|
|
<Input allowClear onChange={(e)=>{setMbParams({...mbParams,content:e.target.value})
|
|||
|
|
}} />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</Modal>
|
|||
|
|
</div>
|
|||
|
|
)
|
|||
|
|
}
|