| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import React, { Component } from 'react';
- import { NumberInfo, Charts } from 'ant-design-pro';
- import styles from './index.less';
- const { MiniArea } = Charts;
- function fixedZero(val) {
- return val * 1 < 10 ? `0${val}` : val;
- }
- function getActiveData() {
- const activeData = [];
- for (let i = 0; i < 24; i += 1) {
- activeData.push({
- x: `${fixedZero(i)}:00`,
- y: Math.floor(Math.random() * 200) + i * 50,
- });
- }
- return activeData;
- }
- export default class ActiveChart extends Component {
- state = {
- activeData: getActiveData(),
- };
- componentDidMount() {
- this.loopData();
- }
- componentWillUnmount() {
- clearTimeout(this.timer);
- cancelAnimationFrame(this.requestRef);
- }
- loopData = () => {
- this.requestRef = requestAnimationFrame(() => {
- this.timer = setTimeout(() => {
- this.setState(
- {
- activeData: getActiveData(),
- },
- () => {
- this.loopData();
- }
- );
- }, 1000);
- });
- };
- render() {
- const { activeData = [] } = this.state;
- return (
- <div className={styles.activeChart}>
- <NumberInfo subTitle="目标评估" total="有望达到预期" />
- <div style={{ marginTop: 32 }}>
- <MiniArea
- animate={false}
- line
- borderWidth={2}
- height={84}
- scale={{
- y: {
- tickCount: 3,
- },
- }}
- yAxis={{
- tickLine: false,
- label: false,
- title: false,
- line: false,
- }}
- data={activeData}
- />
- </div>
- {activeData && (
- <div>
- <div className={styles.activeChartGrid}>
- <p>{[...activeData].sort()[activeData.length - 1].y + 200} 亿元</p>
- <p>{[...activeData].sort()[Math.floor(activeData.length / 2)].y} 亿元</p>
- </div>
- <div className={styles.dashedLine}>
- <div className={styles.line} />
- </div>
- <div className={styles.dashedLine}>
- <div className={styles.line} />
- </div>
- </div>
- )}
- {activeData && (
- <div className={styles.activeChartLegend}>
- <span>00:00</span>
- <span>{activeData[Math.floor(activeData.length / 2)].x}</span>
- <span>{activeData[activeData.length - 1].x}</span>
- </div>
- )}
- </div>
- );
- }
- }
|