From 808a442ee729b6d4c0e909a29de0d33e1d9ccb11 Mon Sep 17 00:00:00 2001 From: vapao Date: Sat, 7 Nov 2020 11:42:37 +0800 Subject: [PATCH] U improve alarm trend --- spug_api/apps/home/views.py | 22 ++++-- spug_web/src/pages/home/AlarmTrend.js | 108 ++++++++++++++++---------- 2 files changed, 80 insertions(+), 50 deletions(-) diff --git a/spug_api/apps/home/views.py b/spug_api/apps/home/views.py index 06aa550..cd87356 100644 --- a/spug_api/apps/home/views.py +++ b/spug_api/apps/home/views.py @@ -32,14 +32,20 @@ def get_statistic(request): def get_alarm(request): - now = datetime.now() - data = {human_date(now - timedelta(days=x + 1)): 0 for x in range(14)} - for alarm in Alarm.objects.filter(status='1', created_at__gt=human_date(now - timedelta(days=14))): - date = alarm.created_at[:10] - if date in data: - data[date] += 1 - data = [{'date': k, 'value': v} for k, v in data.items()] - return json_response(data) + form, error = JsonParser( + Argument('type', required=False), + Argument('name', required=False) + ).parse(request.GET, True) + if error is None: + now = datetime.now() + data = {human_date(now - timedelta(days=x + 1)): 0 for x in range(14)} + for alarm in Alarm.objects.filter(status='1', created_at__gt=human_date(now - timedelta(days=14)), **form): + date = alarm.created_at[:10] + if date in data: + data[date] += 1 + data = [{'date': k, 'value': v} for k, v in data.items()] + return json_response(data) + return json_response(error=error) def get_request(request): diff --git a/spug_web/src/pages/home/AlarmTrend.js b/spug_web/src/pages/home/AlarmTrend.js index 51282c5..b976f24 100644 --- a/spug_web/src/pages/home/AlarmTrend.js +++ b/spug_web/src/pages/home/AlarmTrend.js @@ -3,51 +3,75 @@ * Copyright (c) * Released under the AGPL-3.0 License. */ -import React from 'react'; -import { Card } from 'antd'; +import React, { useState, useEffect } from 'react'; +import { Card, Cascader } from 'antd'; import { Chart, Geom, Axis, Tooltip } from 'bizcharts'; import { http } from 'libs'; -export default class AlarmTrend extends React.Component { - constructor(props) { - super(props); - this.state = { - loading: true, - res: [] - }; +export default function () { + const [loading, setLoading] = useState(true); + const [options, setOptions] = useState([]); + const [params, setParams] = useState({}); + const [res, setRes] = useState([]); + + useEffect(() => { + setLoading(true); + http.get('/api/home/alarm/', {params}) + .then(res => setRes(res)) + .finally(() => setLoading(false)) + }, [params]) + + useEffect(() => { + const data = {}; + http.get('/api/monitor/') + .then(res => { + for (let item of res) { + if (!data[item.type]) { + data[item.type] = {value: item.type_alias, label: item.type_alias, children: []} + } + data[item.type].children.push({value: item.name, label: item.name}) + } + setOptions(Object.values(data)) + }) + }) + + function handleChange(v) { + switch (v.length) { + case 2: + setParams({name: v[1]}); + break; + case 1: + setParams({type: v[0]}); + break; + default: + setParams({}) + } } - componentDidMount() { - http.get('/api/home/alarm/') - .then(res => this.setState({res})) - .finally(() => this.setState({loading: false})) - } - - render() { - const {res, loading} = this.state; - return ( - - - - - - - - - - ) - } + return ( + + )}> + + + + + + + + + ) }