diff --git a/src/service/apiurl.js b/src/service/apiurl.js index 5ed937bca..908cc16c4 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -226,6 +226,17 @@ const apiurl = { }, + sy: { + yjxx: { + page: service_fxdd + "/warningRule/info/page", + }, + yjxxpz: { + page: service_fxdd + "/warningRule/page", + edit: service_fxdd + '/warningRule/update', + save: service_fxdd + '/warningRule/insert', + del: service_fxdd + "/warningRule/del/", + } + }, // 防汛准备 fxzb1: { ddgc: { diff --git a/src/views/AppRouters.tsx b/src/views/AppRouters.tsx index 704192ef1..c8b32ff25 100644 --- a/src/views/AppRouters.tsx +++ b/src/views/AppRouters.tsx @@ -21,6 +21,8 @@ import Fxya from './fxzb/fxya' import Hsybjs from './fxzb/hsybjs' import Ybfagl from './fxzb/ybfagl' import Csgl from './fxzb/csgl' +import Yjxx from './fxzb/yjxx' +import Gzpz from './fxzb/gzpz' import Qxdw_Gc from './fxzb/qxdw/gc/index.js' import Qxwl_Gc from './fxzb/qxwl/gc' @@ -162,6 +164,10 @@ const AppRouters: React.FC = () => { { path: 'sy/hsyb/ybfagl', element: }, { path: 'sy/hsyb/csgl', element: }, + // 四预-洪水预警 + { path: 'sy/hsyj/yjxx', element: }, + { path: 'sy/hsyj/gzpz', element: }, + // 调度规程 { path: 'sy/ddgc', element: }, diff --git a/src/views/fxzb/gzpz/form.js b/src/views/fxzb/gzpz/form.js new file mode 100644 index 000000000..e59560b71 --- /dev/null +++ b/src/views/fxzb/gzpz/form.js @@ -0,0 +1,175 @@ +import React, { useEffect, useState, useMemo, useRef } from 'react'; +import { Form, Button, Input, Row, Upload, Col, Table, DatePicker, InputNumber, message, Image, Modal, Radio, Popconfirm } from 'antd'; +import { DeleteOutlined, VideoCameraOutlined } from '@ant-design/icons'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import apiurl from '../../../service/apiurl'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import moment from 'moment'; +const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { + const [form] = Form.useForm(); + const onfinish = (values) => { + const userId = localStorage.getItem('userId') + values.userId = userId + if (mode === 'edit') { + onEdit(apiurl.sy.yjxxpz.edit, { ...record, ...values }) + } + if (mode === 'save') { + onSave(apiurl.sy.yjxxpz.save, values) + } + } + + useEffect(() => { + if (mode == "save") { + const name = localStorage.getItem('userName') + form.setFieldValue("createName", name) + form.setFieldValue("createTime", moment()) + } + }, [mode]) + + return ( + <> +
+ + + + + + + + + + + + + + + 未启用 + 启用 + + + + + + + + + + + + + + + + ', value: '>' }, + { label: '≥', value: '>=' }, + ]} + /> + + + + + + + + + + + + + + + + + + + dateString} + getValueProps={(value) => ({ value: value ? moment(value) : undefined })} + > + + + + + + { + mode === 'view' ? null : ( + <> + + + + + ) + } +
+ + ); +} + +export default ModalForm; diff --git a/src/views/fxzb/gzpz/index.js b/src/views/fxzb/gzpz/index.js new file mode 100644 index 000000000..566922e13 --- /dev/null +++ b/src/views/fxzb/gzpz/index.js @@ -0,0 +1,105 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Modal, Form, Input, Button, Row,Col, Timeline, message, Tabs,Image } from 'antd'; +import {FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons'; +import { useSelector } from 'react-redux'; +import ToolBar from './toolbar'; +import ModalForm from './form'; +import apiurl from '../../../service/apiurl'; +import usePageTable from '../../../components/crud/usePageTable2'; +import { createCrudService } from '../../../components/crud/_'; +import {CrudOpRender_text} from '../../../components/crud/CrudOpRender'; +import moment from 'moment'; +const url = "http://223.75.53.141:9100/gs-tsg" +const Page = () => { + const role = useSelector(state => state.auth.role); + const editBtn = role?.rule?.find(item => item.menuName == "编辑")|| true; + const viewBtn = role?.rule?.find(item => item.menuName == "查看")|| true; + const delBtn = role?.rule?.find(item => item.menuName == "删除")|| true; + const levelObj = { + 0: "蓝色", + 1: "黄色", + 2: "橙色", + 3: "红色", + } + const refModal = useRef(); + const [searchVal, setSearchVal] = useState(false) + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" }, + { title: '预警时间', key: 'createTime', dataIndex: 'createTime', width: 140, align: "center", }, + { title: '规则名称', key: 'ruleName', dataIndex: 'ruleName', width: 140, align: "center", }, + { title: '预警等级', key: 'warningLevel', dataIndex: 'warningLevel', width: 100, align: "center", render: (v) => {levelObj[v]} }, + { title: '预警信息', key: 'ruleInfo', dataIndex: 'ruleInfo', width: 300, align: "center", }, + { + title: '操作', key: 'operation', width: 100, fixed: 'right', align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + const command = (type) => (params) => { + if (type === 'save') { + refModal.current.showSave(); + } else if (type === 'edit') { + refModal.current.showEdit({ ...params }); + } else if (type === 'view') { + refModal.current.showView(params); + } else if (type === 'del') { + refModal.current.onDeleteGet(apiurl.sy.yjxxpz.delete + `${params.id}`); + } + } + + + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sy.yjxxpz.page).find_noCode); + + /** + * @description 处理成功的回调 + */ + const successCallback = () => { + refresh() + } + useEffect(() => { + if (searchVal) { + const params = { + search: { + ...searchVal, + } + }; + search(params) + } + }, [searchVal]) + + + return ( + <> +
+
+ + + +
+ + + + + {refresh({addvcd:localStorage.getItem('ADCD6')})}} + /> + + + ); +} + +export default Page; diff --git a/src/views/fxzb/gzpz/toolbar.js b/src/views/fxzb/gzpz/toolbar.js new file mode 100644 index 000000000..635bd9726 --- /dev/null +++ b/src/views/fxzb/gzpz/toolbar.js @@ -0,0 +1,57 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; + +import moment from 'moment'; +import NormalSelect from '../../../components/Form/NormalSelect'; +const { RangePicker } = DatePicker; +const ToolBar = ({ setSearchVal, onSave, storeData, role }) => { + const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true; + const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true; + + + const [form] = Form.useForm(); + + const onFinish = (values) => { + setSearchVal({...values}) + } + + return ( + <> +
+
+ + + + + + + {searchBtn ? + + : null } + + + + + { + (onSave && addBtn) ? + + + + :null + } + +
+ + ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/fxzb/yjxx/form.js b/src/views/fxzb/yjxx/form.js new file mode 100644 index 000000000..bd92a75b5 --- /dev/null +++ b/src/views/fxzb/yjxx/form.js @@ -0,0 +1,90 @@ +import React,{useEffect,useState,useMemo,useRef} from 'react'; +import { Form, Button, Input, Row,Upload, Col, Table, DatePicker, InputNumber,message,Image,Modal,Radio ,Popconfirm } from 'antd'; +import { DeleteOutlined,VideoCameraOutlined } from '@ant-design/icons'; +import { formItemLayout, btnItemLayout } from '../../../components/crud/FormLayoutProps'; +import apiurl from '../../../service/apiurl'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import moment from 'moment'; +const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => { + const [form] = Form.useForm(); + const onfinish = (values) => { + const userId = localStorage.getItem('userId') + values.userId = userId + if (mode === 'edit') { + onEdit(apiurl.rcgl.wxyh.edit,{...record,...values}) + } + if (mode === 'save') { + onSave(apiurl.rcgl.wxyh.save,values) + } + } + + + + return ( + <> +
+ +
+ + + + + + + + + + + + + 未启用 + 启用 + + + + + + { + mode==='view'?null:( + <> + + + + + ) + } + + + ); +} + +export default ModalForm; diff --git a/src/views/fxzb/yjxx/index.js b/src/views/fxzb/yjxx/index.js new file mode 100644 index 000000000..566922e13 --- /dev/null +++ b/src/views/fxzb/yjxx/index.js @@ -0,0 +1,105 @@ +import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react'; +import BasicCrudModal from '../../../components/crud/BasicCrudModal'; +import { Table, Card, Modal, Form, Input, Button, Row,Col, Timeline, message, Tabs,Image } from 'antd'; +import {FileWordOutlined,FilePdfOutlined,FileZipOutlined,FileExcelOutlined } from '@ant-design/icons'; +import { useSelector } from 'react-redux'; +import ToolBar from './toolbar'; +import ModalForm from './form'; +import apiurl from '../../../service/apiurl'; +import usePageTable from '../../../components/crud/usePageTable2'; +import { createCrudService } from '../../../components/crud/_'; +import {CrudOpRender_text} from '../../../components/crud/CrudOpRender'; +import moment from 'moment'; +const url = "http://223.75.53.141:9100/gs-tsg" +const Page = () => { + const role = useSelector(state => state.auth.role); + const editBtn = role?.rule?.find(item => item.menuName == "编辑")|| true; + const viewBtn = role?.rule?.find(item => item.menuName == "查看")|| true; + const delBtn = role?.rule?.find(item => item.menuName == "删除")|| true; + const levelObj = { + 0: "蓝色", + 1: "黄色", + 2: "橙色", + 3: "红色", + } + const refModal = useRef(); + const [searchVal, setSearchVal] = useState(false) + const columns = [ + { title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" }, + { title: '预警时间', key: 'createTime', dataIndex: 'createTime', width: 140, align: "center", }, + { title: '规则名称', key: 'ruleName', dataIndex: 'ruleName', width: 140, align: "center", }, + { title: '预警等级', key: 'warningLevel', dataIndex: 'warningLevel', width: 100, align: "center", render: (v) => {levelObj[v]} }, + { title: '预警信息', key: 'ruleInfo', dataIndex: 'ruleInfo', width: 300, align: "center", }, + { + title: '操作', key: 'operation', width: 100, fixed: 'right', align: 'center', + render: (value, row, index) => ( () => command(cmd)(row)} />) + }, + ]; + + + const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]); + + const command = (type) => (params) => { + if (type === 'save') { + refModal.current.showSave(); + } else if (type === 'edit') { + refModal.current.showEdit({ ...params }); + } else if (type === 'view') { + refModal.current.showView(params); + } else if (type === 'del') { + refModal.current.onDeleteGet(apiurl.sy.yjxxpz.delete + `${params.id}`); + } + } + + + + const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.sy.yjxxpz.page).find_noCode); + + /** + * @description 处理成功的回调 + */ + const successCallback = () => { + refresh() + } + useEffect(() => { + if (searchVal) { + const params = { + search: { + ...searchVal, + } + }; + search(params) + } + }, [searchVal]) + + + return ( + <> +
+
+ + + +
+
+ + + + {refresh({addvcd:localStorage.getItem('ADCD6')})}} + /> + + + ); +} + +export default Page; diff --git a/src/views/fxzb/yjxx/toolbar.js b/src/views/fxzb/yjxx/toolbar.js new file mode 100644 index 000000000..ec5d600ea --- /dev/null +++ b/src/views/fxzb/yjxx/toolbar.js @@ -0,0 +1,78 @@ +import React, { useEffect,useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; + +import moment from 'moment'; +import NormalSelect from '../../../components/Form/NormalSelect'; +const { RangePicker } = DatePicker; +const ToolBar = ({ setSearchVal, onSave, storeData, role }) => { + const addBtn = role?.rule?.find(item => item.menuName == "新增")|| true; + const searchBtn = role?.rule?.find(item => item.menuName == "查询")|| true; + + + const [form] = Form.useForm(); + + const onFinish = (values) => { + let dateTimeRangeSo; + if (values.tm) { + dateTimeRangeSo = { + start: moment(values.tm[0]).format('YYYY-MM-DD 00:00:00'), + end: moment(values.tm[1]).format('YYYY-MM-DD 23:59:59') + } + } + delete values.tm + setSearchVal({...values, dateTimeRangeSo}); + } + + useEffect(() => { + let dateTimeRangeSo = { + start: moment().subtract(1,"months").format('YYYY-MM-DD 00:00:00'), + end: moment().format('YYYY-MM-DD 23:59:59') + } + form.setFieldValue("tm", [moment(dateTimeRangeSo.start), moment(dateTimeRangeSo.end)]) + setSearchVal({ dateTimeRangeSo }) + }, []) + + return ( + <> +
+
+ + + + + + + {searchBtn ? + + : null } + + + + + { + (onSave && addBtn) ? + + + + :null + } + +
+ + ); +} + +export default ToolBar; \ No newline at end of file