Vue elementUI implementiert Baumstrukturtabelle und Lazy Loading

Vue elementUI implementiert Baumstrukturtabelle und Lazy Loading

1. Ergebnisse erzielen

2. Backend-Implementierung

2.1 Entitätsklasse

 @Daten
@ApiModel(Beschreibung = "Datenwörterbuch")
@Tabellenname("dict")
öffentliche Klasse Dict {

    private statische endgültige lange SerialVersionUID = 1L;

    @ApiModelProperty(Wert = "id")
    private lange ID;

    @ApiModelProperty(Wert = "Erstellungszeit")
    @JsonFormat(Muster = "jjjj-MM-tt HH:mm:ss")
    @TableField("Erstellungszeit")
    privates Datum, Erstellungszeit;

    @ApiModelProperty(Wert = "Aktualisierungszeit")
    @TableField("Aktualisierungszeit")
    privates Datum, Aktualisierungszeit;

    @ApiModelProperty(value = "Logische Löschung (1: gelöscht, 0: nicht gelöscht)")
    @TableLogic
    @TableField("ist_gelöscht")
    private Integer isDeleted;

    @ApiModelProperty(Wert = "andere Parameter")
    @Tabellenfeld(existiert = falsch)
    private Map<String,Objekt> param = neue HashMap<>();

    @ApiModelProperty(Wert = "überlegene ID")
    @TableField("übergeordnete_ID")
    private lange übergeordnete ID;

    @ApiModelProperty(Wert = "Name")
    @Tabellenfeld("Name")
    privater String-Name;

    @ApiModelProperty(Wert = "Wert")
    @TableField("Wert")
    privater String-Wert;

    @ApiModelProperty(Wert = "Kodierung")
    @Tabellenfeld("dict_code")
    privater String dictCode;

    @ApiModelProperty(value = "Ob untergeordnete Knoten eingeschlossen werden sollen")
    @Tabellenfeld(existiert = falsch)
    privater Boolescher Wert hat Kinder;

}

Das Obige muss eine hasChildren-Eigenschaft enthalten, auch wenn diese nicht in der Datenbank vorhanden ist. Dies wird vom Element-Framework benötigt.

2.2 Datenstruktur in der Datenbank

2.3 Backend-Schnittstelle

Wenn die Implementierung vollständig auf dem Backend erfolgt, schreiben Sie einfach eine rekursive Abfrage, um alle Daten entsprechend der hierarchischen Struktur abzufragen und zu kapseln. Aber die Tabellenkomponente des Elements hat einige Dinge für uns gekapselt. Wir müssen hier nur die Unterdatenliste entsprechend der übergeordneten ID abfragen.

Controllercode:

 //Frage die Unterdatenliste entsprechend der übergeordneten ID ab @ApiOperation(value = "Frage die Unterdatenliste entsprechend der übergeordneten ID ab")
    @GetMapping("findChildData/{id}")
    öffentliches Ergebnis findChildData(@PathVariable Long id){
        List<Dict> Liste = dictService.findChildData(id);
        gibt Result.ok(Liste) zurück;
    }

Service

Serviceimplementierungsklasse

 @Service
öffentliche Klasse DictServiceImpl erweitert ServiceImpl<DictMapper, Dict> implementiert DictService {

    //Frage die Unterdatenliste entsprechend der übergeordneten ID ab @Override
    öffentliche Liste<Dict> findChildData(Long id) {
        QueryWrapper<Dict> Wrapper = neuer QueryWrapper<>();
        wrapper.eq("übergeordnete_id",id);
        Liste<Dict> Liste = baseMapper.selectList(Wrapper);
        //Setze hasChildren für jedes Dict-Objekt in der Listensammlung
        Liste.fürJedes(x->{
            Lange dictId = x.getId();
            boolean istKind = dies.istKinder(dictId);
            x.setHasChildren(isChild);
        });
        Liste zurückgeben;
    }

    //Beurteilen, ob unter der ID untergeordnete Daten vorhanden sind private boolean isChildren(Long id){
        QueryWrapper<Dict> Wrapper = neuer QueryWrapper<>();
        wrapper.eq("übergeordnete_id",id);
        Integer-Anzahl = baseMapper.selectCount(Wrapper);
        Rückgabewert > 0;
    }
}

2.4 Swagger testet, ob die Backend-Struktur und -Funktion normal sind

3. Frontend-Implementierung

3.1 Einführung der el-table-Komponente in die Seite

Liste.vue

 <Vorlage>
  <div Klasse="App-Container">

    <el-Tabelle
      :data="Liste"
      Stil="Breite: 100%"
      Zeilenschlüssel="id"
      Grenze
      faul
      :load="Kinder abrufen"
      :tree-props="{Kinder: 'Kinder', hatKinder: 'hatKinder'}">
      <el-table-column label="Name" width="230" align="left">
        <template slot-scope="Umfang">
          <span>{{ Umfang.Zeilenname }}</span>
        </Vorlage>
      </el-Tabellenspalte>

      <el-table-column label="Kodierung" width="220">
        <template slot-scope="{row}">
          {{ row.dictCode }}
        </Vorlage>
      </el-Tabellenspalte>
      <el-table-column label="Wert" width="230" align="links">
        <template slot-scope="Umfang">
          <span>{{ Umfang.Zeile.Wert }}</span>
        </Vorlage>
      </el-Tabellenspalte>
      <el-table-column label="Erstellungszeit" align="center">
        <template slot-scope="Umfang">
          <span>{{ Umfang.Zeile.ErstellenZeit }}</span>
        </Vorlage>
      </el-Tabellenspalte>
    </el-Tabelle>
  </div>

</Vorlage>

<Skript>
importiere dict von '@/api/dict'
Standard exportieren {
  Namensliste',
  Daten(){
    zurückkehren {
      list:[], //Datenwörterbuch-Liste-Array dialogImportVisible:false, //Festlegen, ob das Popup-Fenster angezeigt wird}
  },
  erstellt() {
    dies.getDictList(1)
  },
  Methoden:{
    //Datenwörterbuchliste getDictList(id){
      dict.dictList(id)
        .dann(Antwort=>{
            diese.Liste=Antwort.Daten
        })
    },
    getChildrens(Baum, Baumknoten, auflösen) {
      dict.dictList(Baum.id).dann(Antwort => {
        auflösen(Antwort.Daten)
      })
    },
  }
}
</Skript>

<Stilbereich>

</Stil>

Die oben genannte Schlüsselmethode ist die Methode getChildrens, die die Backend-Schnittstelle auf jeder Ebene aufruft, um die Daten des untergeordneten Knotens abzufragen und sie den Tabellendaten in der Baumstruktur hinzuzufügen.

Die Tool-JS-Datei dict.js, die die Backend-Struktur aufruft

 Importieren Sie die Anforderung von „@/utils/request“.

Standard exportieren {
  //Datenwörterbuchliste dictList(id){
    Rückgabeanforderung({
      URL: `/admin/cmn/dict/findChildData/${id}`,
      Methode: 'get'
    })
  },
}

3.2 Implementierungseffekt

Bei den Frontend- und Backend-Tests gibt es keine Probleme. Da Lazy Loading zum Einsatz kommt, werden die Daten des Child-Node erst geladen, wenn auf den Parent-Node geklickt wird. So wird ein Einfrieren des Systems aufgrund zu großer Datenmengen vermieden.

Dies ist das Ende dieses Artikels über die Implementierung von Baumstrukturtabellen und Lazy Loading durch Vue elementUI. Weitere verwandte Inhalte zu Vue elementUI finden Sie in den vorherigen Artikeln von 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:
  • Detaillierte Erläuterung der verschachtelten Tabelle im Vue-ElementUI-Formular und der Überprüfung jeder Zeile
  • Die Vue-Komponentenbibliothek ElementUI realisiert den Paging-Effekt einer Tabellenliste
  • Vue + ElementUI-Tabelle realisiert Tabellenpaging
  • Vue + elementUI realisiert das Filtern und Hervorheben von Tabellenschlüsselwörtern
  • Vue2.0+ElementUI implementiert ein Beispiel zum Umblättern einer Tabelle
  • Detaillierte Erklärung der ElementUI-Tabelle basierend auf Vue

<<:  SQL-Abfrage für Benutzer, die an mindestens sieben aufeinanderfolgenden Tagen Bestellungen aufgegeben haben

>>:  Adaptive Breitentabelle für HTML-Seiten

Artikel empfehlen

Vue implementiert Akkordeoneffekt

In diesem Artikelbeispiel wird der spezifische Co...

Docker-Cross-Server-Kommunikations-Overlay-Lösung (Teil 1) Consul-Einzelinstanz

Inhaltsverzeichnis Szenario Aufgabe Idee analysie...

Welche Regeln gelten für den Kontext in JavaScript-Funktionen?

Inhaltsverzeichnis 1. Regel 1: Objekt.Methode() 1...

Das WeChat-Applet implementiert einen einfachen Rechner

Der einfache Rechner des WeChat-Applets dient Ihn...

Techniken zur Optimierung von MySQL-Paging-Abfragen

In Anwendungen mit Paging-Abfragen sind Abfragen,...

Eine kurze Diskussion über die Platzierung von Skripten in HTML

Früher dachte ich, dass Skripte überall in HTML p...

js+canvas realisiert Code-Regeneffekt

In diesem Artikel wird der spezifische Code des j...

JavaScript implementiert eine einzelne verknüpfte Listenprozessanalyse

Vorwort: Zum Speichern mehrerer Elemente sind Arr...

Mehrere praktische Szenarien zur Implementierung der Ersetzungsfunktion in MySQL

REPLACE Syntax REPLACE(String,from_str,to_str) Da...

Implementierung von Nginx-Weiterleitungsübereinstimmungsregeln

1. Regulärer Ausdrucksabgleich ~ für Groß- und Kl...

Eine Sammlung gängiger Verwendungen von HTML-Meta-Tags

Was ist ein Mata-Tag? Das <meta>-Element li...

Kenntnisse über die MySQL Memory-Speicher-Engine

Wissenspunkte zur Speicher-Storage-Engine Die Spe...