time-form.tsx 4.4 KB
Newer Older
Z
zengqiao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
import { getAlarmTime, getAlarmWeek } from './config';
import * as React from 'react';
import { IRequestParams, IAlarmTime } from 'types/alarm';
import { Checkbox, TimePicker, Form } from 'component/antd';
import { weekOptions } from 'constants/status-map';

import moment = require('moment');

interface ITimeProps {
  form?: any;
  formData?: any;
}

export class TimeForm extends React.Component<ITimeProps> {
  public isDetailPage = window.location.pathname.includes('/alarm-detail'); // 判断是否为详情
  public $form: any = null;
  public weeks: number[] = [0, 1, 2, 3, 4, 5, 6, 7];
  public startTime: number = 0;
  public endTime: number = 23;

  public getFormData() {
    let value = null as IAlarmTime;
    this.props.form.validateFields((error: Error, result: any) => {
      if (error) {
        return;
      }
      const start = Number(moment(result.startTime).format('HH'));
      const end = Number(moment(result.endTime).format('HH'));
      const timeArr = getAlarmTime().defaultTime;
      const hours = timeArr.slice(start, end + 1);
      value = {
        weeks: result.weeks,
        hours,
      };
    });
    return value;
  }

  public resetFormData() {
    const { defaultTime } = getAlarmTime();
    const { defWeek } = getAlarmWeek();
    this.props.form.setFieldsValue({
      hours: defaultTime,
      weeks: defWeek,
      startTime: moment(0, 'HH'),
      endTime: moment(23, 'HH'),
    });
  }

  public updateFormData = (monitorRule: IRequestParams) => {
    const selectHours = monitorRule.periodHoursOfDay.split(',').map(item => +item);
    const selectWeek = monitorRule.periodDaysOfWeek.split(',').map(item => +item);

    this.props.form.setFieldsValue({
      // hours: selectHours,
      weeks: selectWeek,
      startTime: moment(selectHours[0], 'HH'),
      endTime: moment(selectHours[selectHours.length - 1], 'HH'),
    });
    this.startTime = selectHours[0];
    this.endTime = selectHours[selectHours.length - 1];
  }
  public onStartChange = (time: any, timeString: string) => {
    this.startTime = Number(timeString);
  }
  public disabledHours = () => {
    const hours = [] as number[];
    for (let i = 0; i < this.startTime; i++) {
        hours.push(i);
    }
    return hours;
  }

  public render() {
    // const formData = {};
      // {/* <div className="alarm-x-form">
      //   <XFormComponent
      //     ref={form => this.$form = form}
      //     formData={formData}
      //     formMap={xTimeFormMap}
      //     formLayout={formLayout}
      //   />
      // </div> */}
    const { getFieldDecorator } = this.props.form;
    const format = 'HH';
    return (
      <div className="config-wrapper">
        <span className="span-tag">生效时间</span>
        <div className="alarm-time-form">
          <Form name="basic" >
            <b>在每</b>
            <Form.Item label="" key={1} className="form-item">
              {getFieldDecorator('weeks', {
                initialValue: this.weeks,
                rules: [{ required: true, message: '请选择周期' }],
              })(
              <Checkbox.Group
                options={weekOptions}
                disabled={this.isDetailPage}
              />)}
            </Form.Item>
            <b></b>
            <Form.Item label="" key={2} className="form-item">
              {getFieldDecorator('startTime', {
                initialValue: moment(this.startTime, format),
                rules: [{ required: true, message: '请选择开始时间' }],
              })(
              <TimePicker
                key={1}
                format={format}
                style={{width: 60}}
                onChange={this.onStartChange}
                disabled={this.isDetailPage}
              />)}
            </Form.Item>
            <b>~</b>
            <Form.Item label="" key={3} className="form-item">
              {getFieldDecorator('endTime', {
                initialValue: moment(this.endTime, format),
                rules: [{ required: true, message: '请选择结束时间' }],
              })(
              <TimePicker
                key={2}
                format={format}
                disabledHours={this.disabledHours}
                style={{width: 60}}
                disabled={this.isDetailPage}
              />)}
            </Form.Item>
          </Form>
        </div>
      </div>
    );
  }
}

export const WrappedTimeForm = Form.create({ name: 'dynamic_time_form' })(TimeForm);