import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { differenceInCalendarDays, differenceInDays, setDate, setHours } from 'date-fns'; import { DisabledTimeFn, DisabledTimePartial } from 'ng-zorro-antd/date-picker/standard-types' @Component({ selector: 'bcac-edit-form', templateUrl: './edit-form.component.html', styleUrls: ['./edit-form.component.scss'] }) export class EditFormComponent implements OnInit { constructor( private fb: FormBuilder, ) { } formGroup: FormGroup = this.fb.group({}) formItems: { [key: string]: any }[] @Input() set bcacFormItems(formItem: { [key: string]: any }[]) { this.formItems = formItem; let obj: {} = {}; formItem.forEach(element => { let formControl = new FormControl(); if (element.required) formControl.setValidators(Validators.required); this.formGroup.addControl(element.fieldName, formControl); obj[element.fieldName] = element.value; if (element.disabledType) { switch (element.disabledType) { case 1: element['disabledDateFn'] = this.disabledDateFn1 break; case 2: element['disabledDateFn'] = this.disabledDateFn2 break; default: break; } } }); this.formGroup.setValue(obj); } @Output() bcacSubmitForm: EventEmitter; @Output() bcacResetForm: EventEmitter = new EventEmitter(); ngOnInit() { } range(start: number, end: number): number[] { const result: number[] = []; for (let i = start; i < end; i++) { result.push(i); } return result; } resetForm(e: MouseEvent) { e.preventDefault(); this.formGroup.reset(); for (const key in this.formGroup.controls) { if (Object.prototype.hasOwnProperty.call(this.formGroup.controls, key)) { const element = this.formGroup.controls[key]; element.markAsPristine(); element.updateValueAndValidity(); } } this.bcacResetForm.emit(true); } //禁用今日之后的时间 disabledDateFn1 = (current: Date): boolean => { return differenceInCalendarDays(current, new Date()) > 0; } // 禁用今日之前的时间 disabledDateFn2 = (current: Date): boolean => { return differenceInCalendarDays(current, new Date()) < 0; } // timeDefaultValue = setDate() disabledDateTime: DisabledTimeFn = () => { return { nzDisabledHours: () => this.range(0, 24), nzDisabledMinutes: () => this.range(30, 60), nzDisabledSeconds: () => [55, 56] } } }