iview implementiert dynamische Formulare und eine benutzerdefinierte Überlappung der Überprüfungszeiträume

iview implementiert dynamische Formulare und eine benutzerdefinierte Überlappung der Überprüfungszeiträume

Formularelemente dynamisch hinzufügen

Das dynamische Hinzufügen von Formularen mit iview ist sehr einfach. Sie müssen nur die Formularelemente in einem Array festlegen und beim Hinzufügen eines neuen Elements einen Standardwert übertragen. iview erledigt den Rest für Sie.

<template lang="html">
 <div Klasse="">

    <Formular
      ref="formValidate"
      :model="formValidate"
      :Regeln="RegelnValidieren"
      :Etikettenbreite="100"
      :label-colon="wahr"
    >
   <Formularelement
    v-for="(Element, Index) in formValidate.showTimeDurations"
    :Schlüssel="Index"
    :prop="'showTimeDurations[' + index + '].Wert'"
    :label="'Zeitraum anzeigen' + (Index + 1)"
   >
    <Zeile>
     <Zeitauswahl
      Typ="Zeitbereich"
      v-Modell="Artikel.Wert"
      Platzierung="unten"
      Platzhalter="Wählen Sie einen Zeitraum aus"
      Stil="Breite: 400px;"
      :deaktiviert="isDisEdit"
      ></TimePicker>
     <Button-Form="Kreis" Symbol="md-close" @click="handleRemove(index)" Stil="margin-left: 10px;"></Button>
    </Zeile>
   </FormItem>
   <FormItem style="Breite: 500px;" v-if="formValidate.showTimeDurations.length < 3">
    <Button type="dashed" long @click="handleAddDuration" icon="md-add">Anzeigezeitraum hinzufügen</Button>
   </FormItem>
   </Form>
 </div>
</Vorlage>

<Skript>
Standard exportieren {
 Name: 'banner_new',
 Daten() {
  zurückkehren {
   formValidate: {
    showTimeDurations: [{Wert: ['','']}]
   }
  }
 },
 Methoden: {
  handleAddDuration() {
   this.formValidate.showTimeDurations.push({Wert: ['','']})
  },
  handleEntfernen(index) {
   this.formValidate.showTimeDurations.splice(index, 1)
  }
 }
}
</Skript>

<style lang="css" scoped>
</Stil> 

Formularvalidierung

Die Formularvalidierung von iview erfolgt durch Hinzufügen des Attributs :rules="rulesValidate" RulesValidate ist die in den Methoden festgelegte Methode.

Fügen Sie ein Titelformularelement und eine Schaltfläche zum Senden hinzu

 <FormItem label="Name" prop="Titel" style="Breite: 500px;">
    <Input v-model="formValidate.title" :disabled="isDisEdit" :placeholder="'Bitte geben Sie den Namen der Diashow ein (bis zu 50 Zeichen)'" maxlength="50" show-word-limit></Input>
  </FormItem>
  ...
  <Zeilentyp="flex" justify="start" style="margin-top: 20px;">
    <Button type="primary" style="width: 100px; margin-left: 20px;" v-if="isCanSave" @click="handleSubmit('formValidate')">Speichern</Button>
  </Zeile>
  Methoden: {
    handleSubmit(Formular) {
      // Durch Aufrufen der Validierungsmethode wird die Validierung durchgeführt. this.$refs[form].validate(validate => {
        // validate=true/false, ob die Verifizierung erfolgreich war oder nicht})
    },
  }

Formularvalidierung:

RegelnValidate: {
  Titel:
    {
      erforderlich: wahr,
      Meldung: „Bitte geben Sie den Namen der Diashow ein“,
      Auslöser: ‚Unschärfe‘
    },
    {
      Typ: "Zeichenfolge",
      max: 50,
      Nachricht: „Innerhalb von 50 Zeichen, Chinesisch/Buchstaben/Zahlen/allgemeine Zeichen“,
      Auslöser: „ändern“
    }
  ],

Es kann auch geschrieben werden als

Titel: [{{ erforderlich: true, Nachricht: ‚Bitte geben Sie den Bildnamen ein‘, Auslöser: ‚Unschärfe‘}}]

Die Überprüfungsbedingung ist ein Array und es können mehrere Bedingungen geschrieben werden. Wenn Sie eine benutzerdefinierte Validierung benötigen, können Sie einen Validator in data definieren

Daten() {
  const durationValitator = (Regel, Wert, Rückruf) => {
    wenn(this.isShowTimePicker && value.toString() === ',') {
      callback(new Error('Bitte wählen Sie den Anzeigezeitraum aus'));
    }sonst wenn(Wert[0] === Wert[1]) {
      callback(new Error('Bitte wählen Sie den richtigen Zeitraum aus'))
    }sonst wenn(!showTimeDurationsJudge(this.formValidate.showTimeVOS)){
      callback(new Error('Zeitraum kann nicht wiederholt werden'))
    }anders {
      Rückruf()
    }
  };
  const DauerValidate = [{ Validator: DauerValitator, Auslöser: 'Unschärfe' }];
  zurückkehren {
    RegelnValidate: {
      'showTimeDurations[0].value': DauerValidieren,
      'showTimeDurations[1].value': DauerValidieren,
      'showTimeDurations[2].value': DauerValidieren,
    }
  }
}

'showTimeDurations[0].value': durationValidate, diese Schreibweise bedeutet, den Wert des ersten Unterelements im dynamischen Element des Formulars zu validieren. Wenn es 3 Unterelemente gibt, muss dies 3 Mal wiederholt werden. Ich frage mich, ob es eine bessere Schreibweise gibt? Das ist es fürs Erste.

showTimeDurationsJudge ist eine Methode, die überprüft, ob Zeiträume wiederholt werden.

Überprüfen Sie, ob sich Zeiträume überschneiden

Überlegen Sie zunächst, wie Sie überprüfen können, ob zwei Zeiträume vorhanden sind. Die Situation der Kreuzungstage wird nicht berücksichtigt.

Das Ergebnis dieser Überlegungen ist, dass die notwendige und hinreichende Voraussetzung dafür, dass sich zwei Zeiträume nicht überschneiden,

  • Die Startzeit (start1) und Endzeit (end1) der vorherigen Periode (a1) müssen vor der Startzeit (start2) der nächsten Periode (a2) liegen.
  • Die Startzeit (start2) und Endzeit (end2) der nächsten Periode (a2) müssen nach der Endzeit (end1) der vorherigen Periode (a1) liegen.

Durch die Erfüllung der oben genannten Bedingungen kann sichergestellt werden, dass die beiden Zeiträume vollständig versetzt sind.

Da die vom Steuerelement angegebene Zeit eine Zeichenfolge im Format „00:00:00“ ist, habe ich die Momentbibliothek eingeführt, um die Zeichenfolge in einen Zeitstempel umzuwandeln, dessen Größe vergleichbar ist.

const Richter = (a1,a2) => {
 let result = false
  const start1 = moment(a1[0],"HH:mm:ss").valueOf()
  const end1 = moment(a1[1],"HH:mm:ss").valueOf()
  const start2 = moment(a2[0],"HH:mm:ss").valueOf()
  const end2 = moment(a2[1],"HH:mm:ss").valueOf()

  wenn(start1 == start2) {
    return false
  }sonst wenn(start1 > start2) {
    Ergebnis = Start1 > Ende2
  }anders {
    Ergebnis = Ende1 < Start2
  }
  Ergebnis zurückgeben
}

Wenn eine Überlappung vorliegt, wird „Falsch“ zurückgegeben, wenn keine Überlappung vorliegt, wird „True“ zurückgegeben. Nachdem Sie zwei Zeiträume vergleichen konnten, können Sie, falls es noch mehr Zeiträume gibt, eine Schleife verwenden, um sie zu vergleichen. Der vollständige Code lautet:

Moment aus „Moment“ importieren

export const showTimeDurationsJudge = (Dauer) => {
 let judgeResult = true
 if (Dauer && Dauer.Länge > 1) {
  für (lass i = 0; i < Dauer.Länge-1; i++) {
   für(let j=i+1;j < Dauer.Länge; j++) {
       Richterergebnis = Richterergebnis && Richter(Dauer[i].Wert,Dauer[j].Wert)
     }
  }
 }
 Richterergebnis zurückgeben
}

const Richter = (a1,a2) => {
 let result = false
  const start1 = moment(a1[0],"HH:mm:ss").valueOf()
  const end1 = moment(a1[1],"HH:mm:ss").valueOf()
  const start2 = moment(a2[0],"HH:mm:ss").valueOf()
  const end2 = moment(a2[1],"HH:mm:ss").valueOf()

  wenn(start1 == start2) {
    return false
  }sonst wenn(start1 > start2) {
    Ergebnis = Start1 > Ende2
  }anders {
    Ergebnis = Ende1 < Start2
  }
  Ergebnis zurückgeben
}

Damit ist dieser Artikel darüber, wie iview dynamische Formulare und benutzerdefinierte Überschneidungen von Verifizierungszeiträumen implementiert, abgeschlossen. Weitere relevante Inhalte zur Verifizierung von iview-Formularen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion zur iview-Formularvalidierung
  • Zusammenfassung der gleichzeitigen Überprüfung mehrerer Formulare durch iview

<<:  JavaScript Canvas-Textuhr

>>:  jQuery implementiert Akkordeoneffekte

Artikel empfehlen

js implementiert Tabellen-Drag-Optionen

In diesem Artikelbeispiel wird der spezifische JS...

CSS-Tricks zum Erstellen von Welleneffekten

Es war schon immer sehr schwierig, Welleneffekte ...

Telnet wird im Alpine-Image zu busybox-extras verschoben

Das Telnet im Alpine-Image wurde nach Version 3.7...

CSS zur Realisierung der Einzelauswahl-Faltmenüfunktion

Führen Sie kein Front-End-UI-Framework ein, es se...

Detaillierter Prozess zum Erstellen von MongoDB und MySQL mit Docker-Compose

Schauen wir uns die detaillierte Methode zum Erst...

Beispiele für die Verwendung von DD DT DL-Tags

Normalerweise verwenden wir die Tags <ul><...

Lösung für Fremdschlüsselfehler bei der MySQL-Tabellenerstellung

Datenbanktabelle A: Tabelle erstellen Task_Desc_T...

Erfahren Sie, wie Sie Vue3 Reactivity implementieren

Inhaltsverzeichnis Vorwort Start Ein kleiner Geda...

Three.js-Beispielcode zur Implementierung des Tautropfen-Animationseffekts

Vorwort Hallo zusammen, hier ist der CSS-Assisten...

Schritte zur VSCode-Konfiguration mit der Git-Methode

Git ist in vscode integriert und viele Vorgänge k...

MySQL Online-DDL-Tool Gh-Ost-Prinzipanalyse

Inhaltsverzeichnis 1. Einleitung 1.1 Grundsatz 1....

Detaillierte Analyse der Parameterdatei my.cnf von MySQL in Ubuntu

Vorwort Aufgrund meines MySQL-Verständnisses denk...