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

Lassen Sie uns ausführlich über den Symboldatentyp in ES6 sprechen

Inhaltsverzeichnis Symboldatentyp Der Grund, waru...

So stellen Sie DoNetCore mit Nginx in der Alibaba Cloud bereit

Grundlegende Umgebungskonfiguration Bitte kaufen ...

So installieren Sie Docker auf Raspberry Pi

Da Raspberry Pi auf der ARM-Architektur basiert, ...

Detaillierte Schritte zur Entwicklung von WeChat-Miniprogrammen mit Typescript

Auf die Vorteile von Typescript müssen wir nicht ...

So erhalten Sie die dynamische Anzahl der verbleibenden Wörter im Textbereich

Ich bin bei der Arbeit auf einen Fall gestoßen, ü...

IE8 bietet eine gute Erfahrung: Aktivitäten

Heute habe ich einen kleinen Vorgeschmack auf IE8...

So stellen Sie eine Verbindung zum MySQL-Visualisierungstool Navicat her

Nach der Installation von Navicat Der folgende Fe...

Studiennotizen zur MySQL Master-Slave-Konfiguration

● Ich hatte vor, einige Cloud-Daten zu kaufen, um...

MySQL-Transaktions-Tutorial Yii2.0 Händler-Auszahlungsfunktion

Vorwort Ich bin ein PHP-Programmierer, der als Pr...

Beispiele für die Interaktion zwischen MySQL und Python

Inhaltsverzeichnis 1. Daten vorbereiten Erstellen...