feat(): 测站导报率接口联调

master
李神峰 2025-02-13 17:56:55 +08:00
parent 92b4c8e1bc
commit 35c7b46409
13 changed files with 415 additions and 131 deletions

View File

@ -24,7 +24,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>复核系统</title>
<title>平台监视</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

View File

@ -25,7 +25,7 @@ export async function findPage1(url, params = {}, type = 'post') {
const myParams = {
pageNumber,
pageSize,
adcd:user.adcd,
adcd:user?.adcd,
...search
}
const result = type == 'post'?await httppost(url, myParams):await httpget(url, myParams);
@ -39,6 +39,26 @@ export async function findPage1(url, params = {}, type = 'post') {
return {list: [], totalRow: 0};
}
export async function findPage2(url, params = {}, type = 'post') {
const user = JSON.parse(sessionStorage.getItem('user'))
const {pageNumber, pageSize, sort, search} = params;
const myParams = {
pageNumber,
pageSize,
adcd:user?.adcd,
...search
}
const result = type == 'post'?await httppost(url, params):await httpget(url, params);
if (result && result.data) {
const {data} = result;
return {
list: data.records??data,
totalRow: data.total
};
}
return {list: [], totalRow: 0};
}
export async function xyt_paginate_noCode(url, params = {}) {
const {pageNumber, pageSize, ...ret} = params;
const pam = {

View File

@ -23,7 +23,7 @@ const usePageTable = (service,service2, { defaultParams, defaultPageSize, defaul
// return () => { abort.current = true; }
// }, []);
const search = async(opt) => {
const search = async (opt) => {
opt = opt || {};
setState(s => ({ ...s, loading: true }));
const pageParams = {

View File

@ -1,6 +1,6 @@
const config = {
title: '湖北省山洪灾害数据复核系统',
shorttitle: '湖北省山洪灾害数据复核系统',
title: '湖北省山洪防治灾害',
shorttitle: '湖北省山洪防治灾害',
};
export default config;

View File

@ -23,6 +23,7 @@ const jsapi = {
ptjs: {
czrz: shengUrlPro + '/prod-api/baseplat-system/operlog/hb/list',
czdbl: guishiPro + '/monitor/summary',
resource:guishiPro + '/resource/page',
treeList:shengUrlPro + "/prod-api/baseplat-basic/hb/village/getChild/"
},

View File

@ -181,99 +181,100 @@ const session = {
//根据权限判断应该展示哪些菜单
const myMenu = [
// { id: 100, path: "/home", parent_id: -1, name: "首页", type: 0, order: 1 },
{
id: 201, redirect: "/xzqh/xzqhbg", parent_id: -1, name: "行政区划", type: 1, order: 1, children: [
{ id: 202, path: "/xzqh/xzqhbg", parent_id: 500, name: "行政区划变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 203, path: "/xzqh/yhjmwh", parent_id: 500, name: "沿河居民维护", type: 0, order: 1, },
{ id: 204, path: "/xzqh/xzqhcx", parent_id: 500, name: "行政区划查询", type: 0, order: 1, },
]
},
{
id: 301, redirect: "/yagl/yabg", parent_id: -1, name: "预案管理", type: 1, order: 1, children: [
{ id: 302, path: "/yagl/yabg", parent_id: 500, name: "预案变更", type: 0, order: 1 },
{ id: 303, path: "/yagl/yatjcx", parent_id: 500, name: "预案查询", type: 0, order: 1 },
{ id: 304, path: "/yagl/yatjtj", parent_id: 500, name: "预案统计", type: 0, order: 1 },
]
},
{
id: 401, redirect: "/fyzrr/zrrbg", parent_id: -1, name: "防御责任人", type: 1, order: 1, children: [
{ id: 402, path: "/fyzrr/zrrbg", parent_id: 500, name: "防御责任人变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 403, path: "/fyzrr/zrrcx", parent_id: 500, name: "防御责任人查询", type: 0, order: 1, },
]
},
{
id: 501, redirect: "/jczd/zdbg", parent_id: -1, name: "监测站点", type: 1, order: 1, children: [
{ id: 502, path: "/jczd/zdbg", parent_id: 500, name: "自动监测站点变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 503, path: "/jczd/zdsp", parent_id: 500, name: "自动监测站点复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
{ id: 504, path: "/jczd/zdcx", parent_id: 500, name: "自动监测站点查询", type: 0, order: 1 },
]
},
{
id: 601, redirect: "/wxq/wxqbg", parent_id: -1, name: "危险区", type: 1, order: 1, children: [
{ id: 602, path: "/wxq/wxqbg", parent_id: 500, name: "危险区变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 603, path: "/wxq/wxqsp", parent_id: 500, name: "危险区复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
{ id: 604, path: "/wxq/wxqcx", parent_id: 500, name: "危险区查询", type: 0, order: 1 },
// {
// id: 201, redirect: "/xzqh/xzqhbg", parent_id: -1, name: "行政区划", type: 1, order: 1, children: [
// { id: 202, path: "/xzqh/xzqhbg", parent_id: 500, name: "行政区划变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 203, path: "/xzqh/yhjmwh", parent_id: 500, name: "沿河居民维护", type: 0, order: 1, },
// { id: 204, path: "/xzqh/xzqhcx", parent_id: 500, name: "行政区划查询", type: 0, order: 1, },
// ]
// },
// {
// id: 301, redirect: "/yagl/yabg", parent_id: -1, name: "预案管理", type: 1, order: 1, children: [
// { id: 302, path: "/yagl/yabg", parent_id: 500, name: "预案变更", type: 0, order: 1 },
// { id: 303, path: "/yagl/yatjcx", parent_id: 500, name: "预案查询", type: 0, order: 1 },
// { id: 304, path: "/yagl/yatjtj", parent_id: 500, name: "预案统计", type: 0, order: 1 },
// ]
// },
// {
// id: 401, redirect: "/fyzrr/zrrbg", parent_id: -1, name: "防御责任人", type: 1, order: 1, children: [
// { id: 402, path: "/fyzrr/zrrbg", parent_id: 500, name: "防御责任人变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 403, path: "/fyzrr/zrrcx", parent_id: 500, name: "防御责任人查询", type: 0, order: 1, },
// ]
// },
// {
// id: 501, redirect: "/jczd/zdbg", parent_id: -1, name: "监测站点", type: 1, order: 1, children: [
// { id: 502, path: "/jczd/zdbg", parent_id: 500, name: "自动监测站点变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 503, path: "/jczd/zdsp", parent_id: 500, name: "自动监测站点复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
// { id: 504, path: "/jczd/zdcx", parent_id: 500, name: "自动监测站点查询", type: 0, order: 1 },
// ]
// },
// {
// id: 601, redirect: "/wxq/wxqbg", parent_id: -1, name: "危险区", type: 1, order: 1, children: [
// { id: 602, path: "/wxq/wxqbg", parent_id: 500, name: "危险区变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 603, path: "/wxq/wxqsp", parent_id: 500, name: "危险区复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
// { id: 604, path: "/wxq/wxqcx", parent_id: 500, name: "危险区查询", type: 0, order: 1 },
]
},
{
id: 701, redirect: "/fzc/fzccx", parent_id: -1, name: "防治村", type: 1, order: 1, children: [
{ id: 702, path: "/fzc/fzccx", parent_id: 500, name: "防治村查询", type: 0, order: 1 },
]
},
// ]
// },
// {
// id: 701, redirect: "/fzc/fzccx", parent_id: -1, name: "防治村", type: 1, order: 1, children: [
// { id: 702, path: "/fzc/fzccx", parent_id: 500, name: "防治村查询", type: 0, order: 1 },
// ]
// },
{
id: 801, redirect: "/Yjyz/Bg", parent_id: -1, name: "预警阈值", type: 1, order: 1, children: [
{ id: 802, path: "/Yjyz/Bg", parent_id: 500, name: "预警阈值变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 803, path: "/Yjyz/Sp", parent_id: 500, name: "预警阈值复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
{ id: 804, path: "/Yjyz/Cx", parent_id: 500, name: "预警阈值查询", type: 0, order: 1 },
]
},
{
id: 901, redirect: "/Yjgx/Bg", parent_id: -1, name: "预警关系", type: 1, order: 1, children: [
{ id: 902, path: "/Yjgx/Bg", parent_id: 500, name: "预警对象与测站关系变更", type: 0, order: 1,disadlevel:[0,1] },
{ id: 904, path: "/Yjgx/Sp", parent_id: 500, name: "预警对象与测站关系变更审批", type: 0, order: 1 ,disadlevel:[0,2,3,4,5]},
{ id: 903, path: "/Yjgx/Cx", parent_id: 500, name: "预警对象与测站关系查询", type: 0, order: 1 },
]
},
{
id: 101, redirect: "/Xly/Bg", parent_id: -1, name: "小流域", type: 1, order: 1, children: [
{ id: 102, path: "/Xly/Bg", parent_id: 500, name: "小流域变更", type: 0, order: 1, },
{ id: 103, path: "/Xly/Bdgx", parent_id: 500, name: "小流域与行政区关系变更", type: 0, order: 1 ,},
{ id: 104, path: "/Xly/Cgbb", parent_id: 500, name: "成果报表", type: 0, order: 1 , children:[
{ id: 105, path: "/Xly/Cgbb/Fzdx", parent_id: 500, name: "防治对象", type: 0, order: 1 },
{ id: 106, path: "/Xly/Cgbb/Dccg2", parent_id: 500, name: "跨沟调查成果", type: 0, order: 1 },
{ id: 107, path: "/Xly/Cgbb/Dccg3", parent_id: 500, name: "沟滩占地情况", type: 0, order: 1 },
// { id: 108, path: "/Xly/Cgbb/Dccg4", parent_id: 500, name: "外洪顶托集镇及村落", type: 0, order: 1 },
{ id: 109, path: "/Xly/Cgbb/Dccg5", parent_id: 500, name: "重点关注对象", type: 0, order: 1 },
{ id: 110, path: "/Xly/Cgbb/Fwjg", parent_id: 500, name: "房屋结构", type: 0, order: 1 },
{ id: 111, path: "/Xly/Cgbb/Wxdj", parent_id: 500, name: "危险地建", type: 0, order: 1 },
{ id: 112, path: "/Xly/Cgbb/Yhd", parent_id: 500, name: "隐患点名录", type: 0, order: 1 },
{ id: 113, path: "/Xly/Cgbb/Hsxc", parent_id: 500, name: "历史山洪灾害现场", type: 0, order: 1 },
{ id: 114, path: "/Xly/Cgbb/RelativeFzdx", parent_id: 500, name: "防治对象关联站点", type: 0, order: 1 },
{ id: 115, path: "/Xly/Cgbb/Hjm", parent_id: 500, name: "后河小流域横断面", type: 0, order: 1 },
{ id: 116, path: "/Xly/Cgbb/Zjm", parent_id: 500, name: "后河小流域纵断面", type: 0, order: 1 },
{ id: 117, path: "/Xly/Cgbb/Wjsc", parent_id: 500, name: "文件上传", type: 0, order: 1 },
]},
]
},
{
id: 111, redirect: "/fhrz/xzqh", parent_id: -1, name: "复核日志", type: 1, order: 1, children: [
{ id: 112, path: "/fhrz/xzqh", parent_id: 500, name: "行政区划", type: 0, order: 1 },
{ id: 113, path: "/fhrz/yhjm", parent_id: 500, name: "沿河居民户", type: 0, order: 1 },
{ id: 114, path: "/fhrz/yuan", parent_id: 500, name: "预案", type: 0, order: 1 },
{ id: 115, path: "/fhrz/fyzrr", parent_id: 500, name: "防御责任人", type: 0, order: 1 },
{ id: 116, path: "/fhrz/jczd", parent_id: 500, name: "监测站点", type: 0, order: 1 },
{ id: 117, path: "/fhrz/wxq", parent_id: 500, name: "危险区", type: 0, order: 1 },
{ id: 118, path: "/fhrz/yjyz", parent_id: 500, name: "预警阈值", type: 0, order: 1 },
{ id: 119, path: "/fhrz/yjgx", parent_id: 500, name: "预警关系", type: 0, order: 1 },
]
},
// {
// id: 801, redirect: "/Yjyz/Bg", parent_id: -1, name: "预警阈值", type: 1, order: 1, children: [
// { id: 802, path: "/Yjyz/Bg", parent_id: 500, name: "预警阈值变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 803, path: "/Yjyz/Sp", parent_id: 500, name: "预警阈值复核审批", type: 0, order: 1,disadlevel:[0,2,3,4,5] },
// { id: 804, path: "/Yjyz/Cx", parent_id: 500, name: "预警阈值查询", type: 0, order: 1 },
// ]
// },
// {
// id: 901, redirect: "/Yjgx/Bg", parent_id: -1, name: "预警关系", type: 1, order: 1, children: [
// { id: 902, path: "/Yjgx/Bg", parent_id: 500, name: "预警对象与测站关系变更", type: 0, order: 1,disadlevel:[0,1] },
// { id: 904, path: "/Yjgx/Sp", parent_id: 500, name: "预警对象与测站关系变更审批", type: 0, order: 1 ,disadlevel:[0,2,3,4,5]},
// { id: 903, path: "/Yjgx/Cx", parent_id: 500, name: "预警对象与测站关系查询", type: 0, order: 1 },
// ]
// },
// {
// id: 101, redirect: "/Xly/Bg", parent_id: -1, name: "小流域", type: 1, order: 1, children: [
// { id: 102, path: "/Xly/Bg", parent_id: 500, name: "小流域变更", type: 0, order: 1, },
// { id: 103, path: "/Xly/Bdgx", parent_id: 500, name: "小流域与行政区关系变更", type: 0, order: 1 ,},
// { id: 104, path: "/Xly/Cgbb", parent_id: 500, name: "成果报表", type: 0, order: 1 , children:[
// { id: 105, path: "/Xly/Cgbb/Fzdx", parent_id: 500, name: "防治对象", type: 0, order: 1 },
// { id: 106, path: "/Xly/Cgbb/Dccg2", parent_id: 500, name: "跨沟调查成果", type: 0, order: 1 },
// { id: 107, path: "/Xly/Cgbb/Dccg3", parent_id: 500, name: "沟滩占地情况", type: 0, order: 1 },
// // { id: 108, path: "/Xly/Cgbb/Dccg4", parent_id: 500, name: "外洪顶托集镇及村落", type: 0, order: 1 },
// { id: 109, path: "/Xly/Cgbb/Dccg5", parent_id: 500, name: "重点关注对象", type: 0, order: 1 },
// { id: 110, path: "/Xly/Cgbb/Fwjg", parent_id: 500, name: "房屋结构", type: 0, order: 1 },
// { id: 111, path: "/Xly/Cgbb/Wxdj", parent_id: 500, name: "危险地建", type: 0, order: 1 },
// { id: 112, path: "/Xly/Cgbb/Yhd", parent_id: 500, name: "隐患点名录", type: 0, order: 1 },
// { id: 113, path: "/Xly/Cgbb/Hsxc", parent_id: 500, name: "历史山洪灾害现场", type: 0, order: 1 },
// { id: 114, path: "/Xly/Cgbb/RelativeFzdx", parent_id: 500, name: "防治对象关联站点", type: 0, order: 1 },
// { id: 115, path: "/Xly/Cgbb/Hjm", parent_id: 500, name: "后河小流域横断面", type: 0, order: 1 },
// { id: 116, path: "/Xly/Cgbb/Zjm", parent_id: 500, name: "后河小流域纵断面", type: 0, order: 1 },
// { id: 117, path: "/Xly/Cgbb/Wjsc", parent_id: 500, name: "文件上传", type: 0, order: 1 },
// ]},
// ]
// },
// {
// id: 111, redirect: "/fhrz/xzqh", parent_id: -1, name: "复核日志", type: 1, order: 1, children: [
// { id: 112, path: "/fhrz/xzqh", parent_id: 500, name: "行政区划", type: 0, order: 1 },
// { id: 113, path: "/fhrz/yhjm", parent_id: 500, name: "沿河居民户", type: 0, order: 1 },
// { id: 114, path: "/fhrz/yuan", parent_id: 500, name: "预案", type: 0, order: 1 },
// { id: 115, path: "/fhrz/fyzrr", parent_id: 500, name: "防御责任人", type: 0, order: 1 },
// { id: 116, path: "/fhrz/jczd", parent_id: 500, name: "监测站点", type: 0, order: 1 },
// { id: 117, path: "/fhrz/wxq", parent_id: 500, name: "危险区", type: 0, order: 1 },
// { id: 118, path: "/fhrz/yjyz", parent_id: 500, name: "预警阈值", type: 0, order: 1 },
// { id: 119, path: "/fhrz/yjgx", parent_id: 500, name: "预警关系", type: 0, order: 1 },
// ]
// },
{
id:121, redirect: "/ptjs/czrz", parent_id: -1, name: "平台监视", type: 1, order: 1, children: [
{ id: 402, path: "/ptjs/czrz", parent_id: 500, name: "操作日志", type: 0, order: 1},
{ id: 403, path: "/ptjs/czdbl", parent_id: 500, name: "测站到报率", type: 0, order: 1},
{ id: 404, path: "/ptjs/zysy", parent_id: 500, name: "资源使用", type: 0, order: 1},
]
},

View File

@ -44,6 +44,8 @@ const routes = [
// 测站到报率
{ path: '/ptjs/czdbl', exact: true, component: lazy(() => import('./views/Ptjs/Czdbl')) },
// 资源使用
{ path: '/ptjs/zysy', exact: true, component: lazy(() => import('./views/Ptjs/Zysy')) },
//监测站点
{ path: '/jczd/zdbg', exact: true, component: lazy(() => import('./views/Jczd/Bg')) },
{ path: '/jczd/zdsp', exact: true, component: lazy(() => import('./views/Jczd/Sp')) },

View File

@ -28,13 +28,13 @@ export default function dblOption(sellist,selday) {
}
return {
title: {
text: '日到报率详情',
textStyle: {
fontSize: 16
},
left: 'center'
},
// title: {
// text: '日到报率详情',
// textStyle: {
// fontSize: 16
// },
// left: 'center'
// },
color: ['#1fbcd2', '#a23746'],
tooltip: {
formatter: '{b}, {c}%'

View File

@ -3,7 +3,8 @@ import { Card, message, Table, Space, Button, Spin, Tree } from 'antd';
import ToolBar from './toolbar.js';
import ToolBottom from './toolBottom.js';
import apiurl from '../../../models/apiurl'
import { xyt_httpget2 } from "../../../utils/request"
import { xyt_httpget2, httpPostFile } from "../../../utils/request";
import { exportFile } from '../../../utils/tools'
import { resJson } from './res.js';
import ReactEcharts from 'echarts-for-react';
import qsOption from './qsOption.js'
@ -24,11 +25,11 @@ export default function Czrz() {
const [subTableData, setSubTableData] = useState([])
const qsoptions = useMemo(() => {
if (dayArr.length > 0 && selectedObject) {
return qsOption(dayArr, selectedObject, hbobj)
return qsOption(dayArr, selectedObject, hbobj, adcdList)
} else {
return {}
}
}, [dayArr, selectedObject, hbobj])
}, [dayArr, selectedObject, hbobj, adcdList])
const dblOptions = useMemo(() => {
if (subTableData.length > 0 && SearchBottom) {
@ -52,7 +53,7 @@ export default function Czrz() {
title: '行政区划',
dataIndex: 'adnm',
key: 'adnm',
width: 100,
width: 120,
align: "center",
},
{
@ -431,7 +432,6 @@ export default function Czrz() {
}
// 子表格数据
const filterSondata = (selectedObj, type, adlist, selday) => {
const sellist = [];
if (selectedObj && type != 'province') {
@ -470,6 +470,14 @@ export default function Czrz() {
setSubTableData(sellist)
}
// 下载测站离线表
const download = () => {
// httpPostFile(apiurl.service.yjgx.downLoad, params).then((res) => {
// if (res) {
// exportFile('测站离线表.xlsx', res.data)
// }
// })
}
useEffect(() => {
if (searchVal) {
const params = {
@ -492,6 +500,7 @@ export default function Czrz() {
return item
}
})
if (!selectObj) return
selectObj.isBl = selectObj?.adcd.substring(4) != '00000000' ? true : false
const type = selectObj?.adcd == '420000000000' ? 'province' : 'city'
// const type = 'province';
@ -521,22 +530,27 @@ export default function Czrz() {
</Card>
</div>
<div className='right'>
<div className='right' style={{ overflow: "auto" }}>
<Card style={{ display: 'flex', flexDirection: 'column' }}>
<div className='flex' style={{ alignItems: 'center', marginRight: 10,marginBottom:20 }}>
<div className='flex' style={{ alignItems: 'center', marginRight: 10, marginBottom: 20 }}>
<img src={require('../../../assets/images/panelTitle.png')} style={{ marginRight: 5 }}></img>
<span style={{fontSize:16,fontWeight:'bold'}}>测站到报率</span>
<span style={{ fontSize: 16, fontWeight: 'bold' }}>测站到报率</span>
</div>
<ToolBar
setToolVal={setSearchVal}
/>
<div style={{ display: 'flex', columnGap: 20 }}>
<div style={{ display: 'flex', columnGap: 20, position: 'relative' }}>
{!loading &&
<>
<div style={{ position: 'absolute', left: '22%', fontSize: 16, fontWeight: 700 }}>到报率变化趋势</div>
<div style={{ position: 'absolute', right: '22%', fontSize: 16, fontWeight: 700 }}>日到报率详情</div></>
}
<div style={{ marginTop: 20, width: '50%' }}>
{
!loading ?
<>
<div style={{ width: '100%', height: 400 }}>
<div style={{ width: '100%', height: 440 }}>
<ReactEcharts option={qsoptions} style={{ width: "100%", height: '100%' }} notMerge={true} />
</div>
<Table
@ -550,23 +564,39 @@ export default function Czrz() {
: null}
</div>
<div className='bottom' style={{ marginTop: 20, width: '50%', position: "relative" }}>
{!loading && <div style={{ position: 'absolute', right: 40, top: 20, zIndex: 10 }}>
<ToolBottom setToolVal={setSearchBottom} searchVal={searchVal} />
</div>}
{!loading &&
<>
<div style={{ position: 'absolute', right: 40, top: 20, zIndex: 10 }}>
<ToolBottom setToolVal={setSearchBottom} searchVal={searchVal} />
</div>
</>}
<div style={{ marginTop: 0, width: '100%' }}>
{
!loading ?
<>
<div style={{ width: '100%', height: 400 }}>
<div style={{ width: '100%', height: 440 }}>
<ReactEcharts option={dblOptions} style={{ width: "100%", height: '100%' }} notMerge={true} />
</div>
<Table
columns={detailsColumns}
dataSource={subTableData}
pagination={false}
scroll={{ x: 1200, y: "calc( 100vh - 600px )" }}
rowKey="inx"
/>
<div style={{ position: "relative", width: '100%' }}>
<div
style={{
position: 'absolute',
right: 10,
top: -23,
cursor: 'pointer',
color: '#1677ff',
zIndex: 10
}}
onClick={download}>
下载测站离线表</div>
<Table
columns={detailsColumns}
dataSource={subTableData}
pagination={false}
scroll={{ x: 1200, y: "calc( 100vh - 600px )" }}
rowKey="inx"
/>
</div>
</> :
<Spin size="large" style={{ marginTop: '10rem' }} />
}

View File

@ -1,6 +1,9 @@
import moment from "moment"
export default function qsOption(timeList, listObj, hbobj) {
export default function qsOption(timeList, listObj, hbobj, list) {
if (listObj.adcd == '429000000000') {
listObj.adnm ='神农架'
}
const chartTimeList = JSON.parse(JSON.stringify(timeList));
let itemStyle = {
normal: {
@ -30,11 +33,33 @@ export default function qsOption(timeList, listObj, hbobj) {
itemStyle: itemStyle,
data: []
}
let addSerise1 = {
name: "",
type: 'line',
itemStyle: itemStyle,
data: []
}
// 湖北省
for (let d = chartTimeList.length - 1; d > -1; d--) {
let yval = parseFloat((hbobj[chartTimeList[d]]?.rate * 100).toFixed(2));
hbSeriseData.push(yval);
}
if (listObj.isBl) {
const dd = listObj.adcd.substring(0,4) + '00000000'
const cityAdcd = list.find(item => item.adcd == dd);
for (let d = chartTimeList.length - 1; d > -1; d--){
let yval = parseFloat((cityAdcd[chartTimeList[d]]?.rate * 100).toFixed(2));
addSerise1.name = cityAdcd?.adnm;
addSerise1.data.push(yval);
}
if (addSerise1.name && cityAdcd.adnm!= '湖北省') {
totalSerise.push(addSerise1)
legendName.push(addSerise1.name);
}
}
// 市
for (let d = chartTimeList.length - 1; d > -1; d--) {
let yval = parseFloat((listObj[chartTimeList[d]]?.rate * 100).toFixed(2));
@ -44,7 +69,7 @@ export default function qsOption(timeList, listObj, hbobj) {
if (yval < minY) {
minY = yval;
}
minY = Math.ceil(minY) - 5;
minY = Math.ceil(minY) - 3;
minY = minY < 0 ? 0 : minY;
}
@ -52,7 +77,6 @@ export default function qsOption(timeList, listObj, hbobj) {
totalSerise.push(addSerise)
legendName.push(addSerise.name);
}
chartTimeList.sort(function (o1, o2) {
if (moment(o1).isBefore(moment(o2))) {
return -1;
@ -64,23 +88,42 @@ export default function qsOption(timeList, listObj, hbobj) {
chartTimeList[idx] = str.substring(5, 10);
});
console.log("miny",minY);
return {
title: {
text: '到报率变化趋势',
textStyle: {
fontSize: 16
},
left: 'center'
},
// title: {
// text: '到报率变化趋势',
// top:-10,
// textStyle: {
// fontSize: 16
// },
// left: 'center'
// },
tooltip: {
trigger: 'axis',
formatter: '{a}, {b}, {c}%'
// formatter: '{a}, {b}, {c}%'
formatter: function (params) {
if (params.length > 0) {
var result = params[0].name + "<br>";
params.forEach(function (item) {
if (item.value) {
result +=
item.marker +
" " +
item.seriesName +
" : " +
item.value +
"%</br>";
}
});
return result;
}
}
},
legend: {
data: legendName,
top:30
top:10
},
toolbox: {
show: true,

View File

@ -0,0 +1,59 @@
import React, { useEffect, useState } from 'react';
import { Form, Descriptions, Input, Row, Col, message, Select, Switch } from 'antd';
const ModalForm = ({ mode, record }) => {
const [form] = Form.useForm();
const businessType = {
0: "其它",
1: "新增",
2: "修改",
3: "删除",
4: "授权",
5: "导出",
6: "导入",
7: "强退",
8: "生成代码",
9: "清空数据",
}
const operatorStatus = {
0: '正常',
1: '异常'
}
return (
<>
<Descriptions column={2}>
<Descriptions.Item label="操作模块" span={1}>
{record?.title}/{businessType[record?.businessType]}
</Descriptions.Item>
<Descriptions.Item label="请求地址" span={1}>
{record?.operUrl}
</Descriptions.Item>
<Descriptions.Item label="登录信息" span={1}>
{record?.operName}/{record?.operIp}/
</Descriptions.Item>
<Descriptions.Item label="请求方式" span={1}>
{record?.requestMethod}
</Descriptions.Item>
<Descriptions.Item label="操作方法" span={2}>
{record?.method}
</Descriptions.Item>
<Descriptions.Item label="请求参数" span={2}>
{record?.operParam}
</Descriptions.Item>
<Descriptions.Item label="返回参数" span={2}>
{record?.jsonResult}
</Descriptions.Item>
<Descriptions.Item label="操作状态" span={1}>
{operatorStatus[record?.status]}
</Descriptions.Item>
<Descriptions.Item label="操作时间" span={1}>
{record?.operTime}
</Descriptions.Item>
</Descriptions>
</>
);
}
export default ModalForm;

View File

@ -0,0 +1,87 @@
import React, { useEffect, useState, useMemo, useRef } from 'react';
import { Card, message, Table, Space, Button } from 'antd';
import ToolBar from './toolbar.js';
import usePageTable from '../../../components/Crud/usePageTable.js'
import apiurl from '../../../models/apiurl'
import { findPage2 } from '../../../components/Crud/_.js'
import BasicCrudModal from '../../../components/Crud/BasicCrudModal.js';
import ModalForm from './form.js';
export default function Zysy() {
const refModal = useRef();
const columns = [
{
title: '序号',
dataIndex: 'inx',
key: 'inx',
width: 80,
align: "center",
render: (text, record, index) => {
return <span>{index + 1}</span>
}
},
{
title: 'cpu(%)',
dataIndex: 'cpu',
key: 'cpu',
width: 120,
align: "center",
},
{
title: '磁盘(%)',
dataIndex: 'disk',
key: 'disk',
width: 120,
align: "center",
},
{
title: '内存(%)',
dataIndex: 'memory',
key: 'memory',
width: 120,
align: "center",
},
{
title: '时间',
dataIndex: 'tm',
key: 'tm',
width: 120,
align: "center",
},
]
const [searchVal, setSearchVal] = useState({})
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const { tableProps, search, refresh } = usePageTable((params) => findPage2(apiurl.ptjs.resource, params))
useEffect(() => {
if (searchVal) {
const params = {
...searchVal
};
search(params)
}
}, [searchVal])
return (
<div className='page'>
<div style={{width:'100%'}}>
<Card style={{ display: 'flex', flexDirection: 'column' }}>
<ToolBar
setToolVal={setSearchVal}
/>
<Table
columns={columns}
{...tableProps}
scroll={{ x: width, y: "calc( 100vh - 400px )" }}
rowKey="inx"
/>
</Card>
</div>
<BasicCrudModal
width={800}
ref={refModal}
title="操作日志详细"
component={ModalForm}
/>
</div>
)
}

View File

@ -0,0 +1,41 @@
import React, { useEffect,useState } from 'react';
import { Form, Input, Button, DatePicker } from 'antd';
import NormalSelect from '../../../components/Form/NormalSelect';
import dayjs from 'dayjs';
const { RangePicker } = DatePicker;
const ToolBar = ({ setToolVal }) => {
const [form] = Form.useForm();
const onFinish = (values) => {
if (values.operTime) {
values.stm = values.operTime[0] ? dayjs(values.operTime[0]).format('YYYY-MM-DD 00:00:00') : "";
values.etm = values.operTime[1] ? dayjs(values.operTime[1]).format('YYYY-MM-DD 00:00:00') : "";
delete values.operTime
}
setToolVal(values);
}
return (
<div className='pageToolBar'>
<Form form={form} onFinish={onFinish} size='Default' layout="inline">
<Form.Item label="操作时间" name="operTime">
<RangePicker
placeholder={['开始日期', '结束日期']}
format='YYYY-MM-DD'
style={{ width: 300 }}
/>
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit" size='Default'>查询</Button>
</Form.Item>
<Form.Item>
<Button size='Default' onClick={()=>form.resetFields()}>重置</Button>
</Form.Item>
</Form>
</div>
);
}
export default ToolBar;