Vue Shuttle-Box ermöglicht Auf- und Abbewegung

Vue Shuttle-Box ermöglicht Auf- und Abbewegung

In diesem Artikelbeispiel wird der spezifische Code für die Auf- und Abbewegung der Vue-Shuttle-Box zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Verwenden Sie die Baumkomponente von elementUI

Funktionale Anforderungen:

1. Verschieben Sie den untergeordneten Knoten links in die Tabelle rechts
2. Verschieben Sie den ausgewählten Inhalt rechts in den Baum links, einzelnes Verschieben und alle verschieben
3. Klicken Sie auf den Knoten rechts, um sich nach oben und unten zu bewegen

Das erste Problem, auf das Sie stoßen könnten, ist, wie Sie dafür sorgen können, dass nur die untergeordneten Knoten auf der linken Seite das Kontrollkästchen anzeigen. Ich verwende einen vom Backend zurückgegebenen Parameter, um zu bestimmen, ob es sich um einen übergeordneten Knoten handelt (solange das Backend nocheck=true zum übergeordneten Knoten hinzufügt, ist es tatsächlich in Ordnung).

// setLeftAgency: Gekapselter Anforderungsschnittstellenname setLeftAgency(params).then((res) => { // Wenn der zurückgegebene Code == 0 ist, bedeutet dies Erfolg, if (res.data.code == 0) {
 lass { Daten } = res.data;
 data.forEach((item) => { //Die zurückgegebenen Daten durchlaufen. Wenn dieser Parameter „Item“ ist, fügen Sie den aktuellen Daten nocheck=true hinzu, damit das Kontrollkästchen nicht angezeigt wird.
 wenn(Artikel.Typ!=='Artikel'){
  item.nocheck=true
 }
 // item.children löschen;
 });
 this.parentNodes = data; // Setze die geänderten Daten in das Array ein und render es erneut}

Die Baumstruktur links, der Button in der Mitte und die Tabelle rechts (Baumstruktur und Tabelle links sind gekapselt und werden direkt importiert)

<div class="leftTree"> // Die onCreated-Grenze ist hier die Initialisierungsfunktion des linken Baums, und parentNodes speichert alle Daten des linken Baums<ztree :setting="setting" @onCreated = 'onCreated' :parentNodes="parentNodes"></ztree>
</div>
<div Klasse="centerBtn">
 <el-button type="danger" plain icon="el-icon-arrow-right" @click="Table verschieben"></el-button>
 <el-button type="danger" plain icon="el-icon-d-arrow-left" @click="moveTreeAll"></el-button>
 <el-button type="danger" plain icon="el-icon-arrow-left" @click="moveTree"></el-button>
 <el-button type="danger" plain @click="moveUp(index)">Nach oben verschieben</el-button>
 <el-button type="danger" plain @click="moveDown(index)">Nach unten verschieben</el-button>
</div>

<div Klasse="rechteTabelle">
 <table :data.sync="tableData" // Von der Tabellenschnittstelle zurückgegebene Daten ref="personListSettingPage"
  :wird geladen='vxeWird geladen'
  v-model="selectGroups" // Binden Sie das Array der ausgewählten Elemente in der Tabelle rechts id="personListSettingPage"
  :showPagination='false'
  :Höhe-Vollbild = "falsch"
  @sort-change="SortierungÄndern"
  @checkbox-change="selectChange" // Einzelauswahlereignis für das ausgewählte Element auf der rechten Seite @checkbox-all="selectAll" // All-Select-Ereignis für das ausgewählte Element auf der rechten Seite @data-refresh="getTableData()"> // Funktion zum Abrufen der Tabellendaten auf der rechten Seite <vxe-table-column type="checkbox" width="60" align="center"></vxe-table-column>
  <table-column field="text" show-overflow="title" title="Ausgewählte Indikatoren" filterType='' >
  </Tabellenspalte>
 </Tabelle>
 </div>

Verwendete Parameter

moveDownId:"", // Beim Herunterbewegen gespeicherte DatenmoveUpId:"", // Beim Hochbewegen in der Tabelle rechts gespeicherte DatenselectGroups:[], // Wird verwendet, um die ausgewählten Daten rechts zu speicherntableData:[], // Wenn die Anforderung zurückkommt, werden alle Daten links in diesem Array gespeichertparentNodes:[], // Alle Daten des Baums linkstreeObj:"",

Initialisierung des linken Baums und Auswahl des Kontrollkästchens der rechten Tabelle

// Ztree initialisieren
 beimErstellt(treeObj){
 dies.treeObj = treeObj
 : Lassen Sie Knoten = this.treeObj.getCheckedNodes(true); 
},
 //Checkbox-Ereignis selectChange({ aktiviert, Datensätze}) {
 this.selectGroups = records // Speichere die ausgewählten Daten im Array},
 //Kontrollkästchen für alle ausgewählten Ereignisse selectAll({ aktiviert, Datensätze }) {
 this.selectGroups = Datensätze
 },

Nach oben

nach oben verschieben(Index){
 if(this.selectGroups.length>0){ // Prüfen, ob rechts ein ausgewähltes Element vorhanden ist let goOrnot = true
 this.selectGroups.find((seItem)=>{ //Durchsuche die auf der Registerkarte rechts ausgewählten Elemente und finde die entsprechende ID
  wenn(seItem.id==this.moveUpId.id){
  this.$message.warning(this.moveUpId.text+"Es ist kein Platz vorhanden, um sich in dieser Zeile nach oben zu bewegen.")
  goOrnot = false
  }
 })
 if(goOdernicht){
  this.tableData.forEach((item,index)=>{ // Alle Daten in der Tabelle rechts durchlaufen,
  this.$set(item,'rowIndex',index) //Aufgrund der Einschränkungen von JavaScript kann vue.js das Hinzufügen und Löschen von Objekteigenschaften nicht überwachen. Daher müssen Sie $set oder Object.assign(target, sources) verwenden, damit die Ansicht aktualisiert wird.})
  let-Flag = true
  dies.selectGroups.forEach((val,index2)=>{
  diese.tableData.find((itm,ind)=>{
   wenn(val.id==itm.id){
   if(itm.rowIndex==0){ // Durchlaufe die ausgewählten Daten auf der rechten Seite und vergleiche sie mit allen Daten. Wenn die ID gleich ist, bestimme den Wert des gerade hinzugefügten rowIndex-Attributs this.$message.warning(itm.text+"There is no space to move up this row")
    this.moveUpId = itm // Aktuelle Daten speichern flag = false
    zurückkehren
   }anders{
    if(flag){ // Jetzt können Sie mehrere Datenelemente verschieben let changeItem = JSON.parse(JSON.stringify(this.tableData[itm.rowIndex-1]))
    dies.tableData.splice(itm.rowIndex-1,1);
    dies.tableData.splice(itm.rowIndex,0,changeItem)
    }
   }
   }
  })
  })
 }
 }anders{
 this.$message.warning('Bitte wählen Sie die zu verschiebenden Daten aus.')
 }
},

Nach unten

nach unten verschieben(index){
 wenn(diese.selectGroups.length>0){
 loslassenOdernicht = true
 diese.selectGroups.find((seItem)=>{
  wenn(seItem.id==this.moveDownId.id){
  this.$message.warning(this.moveDownId.text+"In dieser Zeile ist kein Platz, um sich nach unten zu bewegen.")
  goOrnot = false
  }anders{
  this.moveFlag = wahr
  }
 })
 if(goOdernicht){
  dies.tableData.forEach((item,index)=>{
  dies.$set(item,'rowIndex',index)
  })
  let selectData = JSON.parse(JSON.stringify(this.tableData))
  lass a = [...diese.selectGroups]
  a.reverse().fürJeden((Wert,Index2)=>{
  selectData.find((itm,ind)=>{
   wenn(val.id==itm.id){
   wenn(itm.rowIndex==selectData.length-1){
    this.$message.warning(itm.text+"In dieser Zeile ist kein Platz mehr, um sich nach unten zu bewegen")
    this.moveDownId = itm
    this.moveFlag = falsch
   }anders{
    wenn(diese.moveFlag){
    let changeItem = itm
    let delIndex=selectData.findIndex(i=>i.id == changeItem.id)
    dies.tableData.splice(delIndex,1);
    dies.tableData.splice(delIndex+1,0,changeItem)
    this.$refs.personListSettingPage.$refs.Table.setCheckboxRow(this.tableData[itm.rowIndex+1],true) // Füge der Tabelle rechts eine ref=personListSettingPage hinzu
    }
   }
   }
  })
  })
 }
 }anders{
 this.$message.warning('Bitte wählen Sie die zu verschiebenden Daten aus.')
 }
}

Tabelle in Baum verschieben

/* in den Baum verschieben */
Baum verschieben(){
 wenn(diese.selectGroups.length>0){
 dies.selectGroups.forEach(item=>{
  dies.parentNodes.find(val=>{
  wenn(val.id == item.pid){
   /* Einen Knoten hinzufügen */
   let node = this.treeObj.getNodeByParam("id", val.id, null);
   this.treeObj.addNodes(Knoten,Element)
   /* Den ausgewählten Status des neu hinzugefügten Knotens abbrechen*/
   let cancelNode = this.treeObj.getNodeByParam("id", item.id, null);
   this.treeObj.checkNode(cancelNode,false,true);
  }
  })
  dies.tableData.splice(dies.tableData.findIndex(val => val.id === item.id), 1)
 })
 }anders{
 this.$message.warning('Bitte wählen Sie die zu verschiebenden Daten aus.')
 }
},

Baum in Tabelle verschieben

/* In Tabelle verschieben */
Tabelle verschieben(){
 lass arr = []
 : Lassen Sie Knoten = this.treeObj.getCheckedNodes(true);
 wenn(Knoten.Länge>0){
 Knoten.fürJeden(Element=>{
  dies.tableData.find(val=>{
  arr.push(gültige ID)
  })
  if(arr.indexOf(item.id)>-1) return this.$message.error("Daten sind dupliziert, bitte nicht erneut hinzufügen")
  this.treeObj.removeNode(Element)
  this.tableData.push(this.filterObj(item,["checked","codeSetId",'id','img','infoItemFlag','isMult','itemType','locked','mult','orgCode','pid','sort','syrs','text'])) // Rufen Sie die folgende Methode auf, um redundante Felder zu entfernen})
 }anders{
 this.$message.warning('Bitte überprüfen Sie die Daten')
 }
},

Gekapselte Filterfelder

/* Objektredundante Felder filtern*/
filterObj(obj, arr) {
 const Ergebnis = {}
 Object.keys(obj).filter((Schlüssel) => arr.includes(Schlüssel)).forEach((Schlüssel) => {
 Ergebnis[Schlüssel] = Objekt[Schlüssel]
 })
 Ergebnis zurückgeben
}

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Implementierungsbeispiel einer Vue3+TypeScript-Shuttlebox
  • Detaillierte Erklärung zur Verwendung des Shuttle-Frames in VUE Element-ui
  • Vue realisiert den Shuttle-Box-Effekt
  • Vue führt den Shuttle-Frame für Element-Transfer auf Anfrage ein
  • Detaillierter Vue-Code zur Implementierung der Shuttle-Box-Funktion

<<:  Grafisches Tutorial zur Installation von MySQL 5.6.35 unter Windows 10 64-Bit

>>:  Tipps zur Verwendung des Top-Befehls in Linux

Artikel empfehlen

Detaillierte Erklärung der Sperrstruktur in MySQL

Mysql unterstützt 3 Arten von Sperrstrukturen Spe...

So verwenden Sie vue3 zum Erstellen einer Materialbibliothek

Inhaltsverzeichnis Warum brauchen wir eine Materi...

Erläuterung zum Lastenausgleich und Reverseproxy von Nginx

Inhaltsverzeichnis Lastenausgleich Klassifizierun...

Details zum Überschreiben von Prototypmethoden in JavaScript-Instanzobjekten

Inhaltsverzeichnis In JavaScript können wir norma...

Bedeutung der Hintergrundfarbdeklaration beim Schreiben von Stilen

Wie der Titel schon sagt, kann andernfalls bei ein...

Tutorial zur Installation und Konfiguration der Version MySQL 5.7.23

Ich habe drei Stunden gebraucht, um MySQL selbst ...

Windows Server 2008-Tutorial zur Überwachung der Serverleistung

Als Nächstes erfahren Sie, wie Sie die Serverleis...

Detaillierte Erläuterung der MySQL-Sicherung und -Wiederherstellung

Vorwort: In den vorherigen Artikeln wurde die Ver...

So lösen Sie das Problem des verstümmelten MySQL-Inserts

Problembeschreibung: Beim Einfügen chinesischer Z...

Grafisches Tutorial zur Installation von CentOS7 auf VMware 15.5

1. Erstellen Sie eine neue virtuelle Maschine in ...

Detaillierter Prozess der Vue-Front-End-Verpackung

Inhaltsverzeichnis 1. Verpackungsbefehl hinzufüge...

So speichern Sie „false“ oder „true“ in MySQL

Boolescher MySQL-Wert, speichert „false“ oder „tr...