首页 > 解决方案 > 是否有通过拖放重新排序firebase中的数据并保存的功能?

问题描述

我有一个由 Firebase Realtime-database 中的数据填充的 HTML 表。

此表的行顺序可使用拖放更改。

我的问题是,如果用户更改了订单,我想保存更改的订单。这只有在我可以更改 Firebase 中的数据顺序时才有可能,我猜?

我的问题是我找不到更改订单的功能。:(

Firebase 数据结构

Firebase 数据结构

表格元素 HTML

在此处输入图像描述

我为每个创建的行提供其任务 ID。如果创建了新任务,则该行会自动获取一个绑定到其任务的新 ID。

网页表

在此处输入图像描述

//Deklaration der Datenbank
var database = firebase.database();
var ref = database.ref('Worker');
var refKunde = database.ref('Kunde');
var refKunde1= database.ref('Kunde');
ref.on('value', gotData, errData);
refKunde.on('value', setKundenData, errKundeData);
refKunde1.on('value',setKundenListeDeleteData, errKundeDelteData)

var countRef = database.ref('count')
countRef.on('value', counterFunction)
//-----------------------------------------------------
var selectedUser = 0;
//--------------------------------------------------------
//-------------counter--------------------------------------------------------
var x = 1;
var counterTask;
function counterFunction(data){
  var abc = data.val();
  var keys = Object.keys(abc);
  x = abc;
}
//-------------Create Worker----------------------------------------
function sendWorker() {
  //console.log("test");
  var txtWorker = document.getElementById("txtWorker")
  if(txtWorker.value=="")
  {
    window.alert("Kein Mitarbeiter angelegt");
        return false;
  }
  var msg = txtWorker.value;
  //console.log(msg);
  var data = {
    name: "" + msg
  }
  ref.push(data);
  txtWorker.value = '';
}
//-----------------WorkerList-------------------------
//var xHtml = document.getElementById("workerTxt");
function gotData(data) {
  setWorkerData(data)
  setDeleteData(data)
}
//-------KUNDEN Set and delete-----------------------------------------
function setKundenData(data){
  var select = document.getElementById("selectKunde");
  select.querySelectorAll('*').forEach(n => n.remove());
  //console.log(data.val());
  var Kunde = data.val();
  var keys = Object.keys(Kunde);
  //console.log(keys);
  for (var i = 0; i < keys.length; i++) {
    var k = keys[i];
    var initials = Kunde[k].Kunde;
    //console.log(initials);
    //----------ToDoWorkerListOptions-------------
    var el = document.createElement("option");
    el.textContent = initials;
    el.value = initials;
    select.appendChild(el);
  }
  select.value = selectedUser;
}
//---------------------------
function selectKundenData(){
  var e = document.getElementById("selectKunde");
  var result = e.options[e.selectedIndex].value;
  //console.log(result); 
  //var taskHtml = document.getElementById("peter");
  var KundenRef = firebase.database().ref(result);
  KundenRef.on("child_added", function (data, prevChildKey) {
    var newWorker = data.val();
    //taskHtml.innerText= newWorker.Aufgabe;ok
    //console.log( prevChildKey ,newWorker.Aufgabe);
  });
}
//-------KundenError------------------
function errKundeData(err) {
  console.log("error!");
  console.log(err);
}
//------------------Send Kunde-----------
function setKunde(){
  var txtKunde = document.getElementById("txtKunde")
  if(txtKunde.value=="")
  {
    window.alert("Kein Mitarbeiter angelegt");
        return false;
  }
  var msg = txtKunde.value;
  //console.log(msg);
  var data = {
    Kunde: "" + msg
  }
  refKunde.push(data);
  txtKunde.value = '';
}
//------set delete Kunde data ----
function setKundenListeDeleteData(data){
  var select = document.getElementById("SelectDeleteKundeId");
  select.querySelectorAll('*').forEach(n => n.remove());
  //console.log(data.val());
  var Kunde = data.val();
  var keys = Object.keys(Kunde);
  //console.log(keys);
  for (var i = 0; i < keys.length; i++) {
    var k = keys[i];
    var initials = Kunde[k].Kunde;
    //console.log(initials);
    //----------ToDoWorkerListOptions-------------
    var el = document.createElement("option");
    el.textContent = initials;
    el.value = initials;
    select.appendChild(el);
  }
  select.value = selectedUser;
}
//-----------
function selectKundenListeDelete(){
  var e = document.getElementById("SelectDeleteKundeId");
  var result = e.options[e.selectedIndex].value;
  //console.log(result); 
  //var taskHtml = document.getElementById("peter");
  var KundenRef1 = firebase.database().ref(result);
  KundenRef1.on("child_added", function (data, prevChildKey) {
    var newWorker = data.val();
    //taskHtml.innerText= newWorker.Aufgabe;ok
    //console.log( prevChildKey ,newWorker.Aufgabe);
  });
}
//-----error Delete Kunde------
function errKundeDelteData(err) {
  console.log("error!");
  console.log(err);
}
//----------------------------------------------------------
function setWorkerData(data) {
  var select = document.getElementById("setWorker");
  select.querySelectorAll('*').forEach(n => n.remove());
  //console.log(data.val());
  var name = data.val();
  var keys = Object.keys(name);
  //console.log(keys);
  for (var i = 0; i < keys.length; i++) {
    var k = keys[i];
    var initials = name[k].name;
    //console.log(initials);
    //----------ToDoWorkerListOptions-------------
    var el = document.createElement("option");
    el.textContent = initials;
    el.value = initials;
    select.appendChild(el);
  }
  select.value = selectedUser;
}
//------------DELETE DATAs
function setDeleteData(data) {
  var select = document.getElementById("deleteWorker");
  select.querySelectorAll('*').forEach(n => n.remove());
  //console.log(data.val());
  var name = data.val();
  var keys = Object.keys(name);
  //console.log(keys);
  for (var i = 0; i < keys.length; i++) {
    var k = keys[i];
    var initials = name[k].name;
    var el = document.createElement("option");
    el.textContent = initials;
    el.value = initials;
    select.appendChild(el);
  }
  select.value = selectedUser;
}
function deleteWorker() {
  var e = document.getElementById("deleteWorker");
  var result = e.options[e.selectedIndex].value;
  //console.log(result)
  var workersRef = firebase.database().ref('Worker')
  workersRef.once('value', function (snapshot) {
    val = snapshot.val();
    var keys = Object.keys(val);
    workersRef.child(keys[e.selectedIndex]).remove()
  })
}
function errData(err) {
  console.log("error!");
  console.log(err);
}
function deleteKunde()
{
  var e = document.getElementById("SelectDeleteKundeId");
  var result = e.options[e.selectedIndex].value;
  //console.log(result)
  var workersRef = firebase.database().ref('Kunde')
  workersRef.once('value', function (snapshot) {
    val = snapshot.val();
    var keys = Object.keys(val);
    workersRef.child(keys[e.selectedIndex]).remove()
  })
}

//----------onChange-------------
function setWorkerList() {
  var e = document.getElementById("setWorker");
  if (selectedUser != 0) {
    e.value = selectedUser;

  }
  selectedUser = 0;
  var result = e.options[e.selectedIndex].value;
  //console.log(result); 

  var taskHtml = document.getElementById("tasks");
  var tableBody = document.getElementById("tablebody")
  tableBody.querySelectorAll('*').forEach(n => n.remove());

  var workersRef = firebase.database().ref('Worker')
  workersRef.once('value', function (snapshot) {
    val = snapshot.val();
    var keys = Object.keys(val);
    var tasksRef = snapshot.child(keys[e.selectedIndex]).child('Tasks')
    //console.log(tasksRef.val())
    var taskKeys = Object.keys(tasksRef.val());
    for (var i = 0; i < taskKeys.length; i++) (function (i) {
      var k = taskKeys[i];
      var task = tasksRef.child(k).val()
      var aufgabe = task.Aufgabe
      var anmerkung = task.Anmerkung
      var datumAnzeige = task.Datum
      var wichtigValue = task.Wichtigkeit
      var kundeValue = task.Kunde
      var erledigtValue = task.Erledigt
      var datumUserValue = task.DatumUser
      var countValue = task.ID
      //-----------------------------------------------
      var row = tableBody.insertRow(i)
      row.id=task.ID;
      //--------------------------------------------------
      var testButton = document.createElement("BUTTON")
      testButton.innerHTML="test"
      cell = row.insertCell()
      cell.appendChild(testButton)
      testButton.addEventListener("click", function(){

        
        var L = document.getElementById("setWorker");
        selectedUser = L.value
        var workersRef = firebase.database().ref('Worker')
        //------Aufgabe-----
        var aufgabe = document.getElementById("aufgabeID"+i).value
        //-----------
        var wichtigSaveChange = document.getElementById("wichtigkeitsID" + i).value
        //console.log(wichtigSaveChange)
       //------------------------------------------------
        workersRef.once('value', function (snapshot) {
          val = snapshot.val();
          var keys = Object.keys(val);
          var doTask = workersRef.child(keys[L.selectedIndex]).child('Tasks/' + k)
          var data = {
            Wichtigkeit: wichtigSaveChange,
            Aufgabe: aufgabe
          }
          doTask.set(data);
          setWorkerList()
        })
        
      })
      //----------Button Create-------------
      var btn = document.createElement("BUTTON");
      btn.innerHTML = "löschen"
      btn.classList.add("button")
      cell = row.insertCell()
      cell.appendChild(btn)
       //---------------Row Datum---------------------
       var txtDatum= document.createElement("textarea")
       txtDatum.disabled=true
       txtDatum.value=datumAnzeige
       txtDatum.classList.add("datum");
       //txtDatum.innerHTML=datumAnzeige
       cell = row.insertCell()
       txtDatum.setAttribute("id", "datumID"+i)
       cell.appendChild(txtDatum,i)
      //--------------BUTTON------------------------------
        btn.addEventListener("click", function () {
          if(confirm("Bist du sicher, dass du die Zeile löschen willst?"))
          {
        selectedUser = e.value
        tasksRef.child(k).ref.remove()
        setWorkerList()
        document.getElementById('deleteWorker').value = '';
        }

        else {
          window.alert("nicht gelöscht!")
        }
      })
      var txtAufgabe = document.createElement("textarea");
      txtAufgabe.classList.add("anmerkungen")
      txtAufgabe.innerHTML = aufgabe;
      cell = row.insertCell()
      txtAufgabe.setAttribute("id", "aufgabeID" + i)
      cell.appendChild(txtAufgabe, i)
     // var textNode = document.createTextNode(aufgabe)
      //row.appendChild(textNode)
      //------------Kunde---------------------
      var txtKunde = document.createElement("textarea")
      txtKunde.readOnly=true
      txtKunde.disabled=true
      txtKunde.innerHTML = kundeValue
      txtKunde.classList.add("kunde");
      cell = row.insertCell()
      txtKunde.setAttribute("id", "kunde" + i)
      cell.appendChild(txtKunde, i)
      //----------wichtigkeit--------------
      var selectWichtig = document.createElement("select")
      var WichtigOptionsArray = ["Niedrig","Mittel","Hoch"];
      selectWichtig.classList.add("wichtigkeit")
      cell = row.insertCell()
      selectWichtig.setAttribute("id", "wichtigkeitsID" + i)
      cell.appendChild(selectWichtig, i)
      if(wichtigValue=="Hoch")
      {
        selectWichtig.style.backgroundColor="red"
      }
      if(wichtigValue=="Mittel")
      {
        selectWichtig.style.backgroundColor="orange"
      }
      if(wichtigValue=="Niedrig")
      {
        selectWichtig.style.backgroundColor="green"
      }
      for (var y = 0; y < WichtigOptionsArray.length; y++) {
        var option = document.createElement("option");
        option.value = WichtigOptionsArray[y];
        option.text = WichtigOptionsArray[y];
        option.id= "testi"+y;
        //option.style.backgroundColor="#92D54A"
        selectWichtig.appendChild(option);
        //console.log(option.id)
      }
      selectWichtig.value=wichtigValue;
      //------------------Erledigt----------------
      var txtErledigt = document.createElement("textarea");
      txtErledigt.readOnly=true;
      txtErledigt.disabled=true;
      txtErledigt.classList.add("erledigt");
      txtErledigt.innerHTML=erledigtValue;
      cell = row.insertCell()
      txtErledigt.setAttribute("id", "erledigt" + i)
      cell.appendChild(txtErledigt, i)
       //--------------------DatumUser-------------------
       var datumUser = document.createElement("textarea")
       datumUser.value=datumUserValue
       datumUser.disabled=true
       datumUser.classList.add("datum");
       cell = row.insertCell()
       datumUser.setAttribute("id", "datumUserID"+i)
       cell.appendChild(datumUser,i)
     
      //---------------Row anmerkung------------------
      var txtAnmerkung = document.createElement("textarea")
      txtAnmerkung.readOnly = true;
      txtAnmerkung.disabled = true;
      txtAnmerkung.classList.add("textfeld2")
      txtAnmerkung.innerHTML = anmerkung
      cell = row.insertCell()
      txtAnmerkung.setAttribute("id", "anmerkung" + i)
      cell.appendChild(txtAnmerkung, i)
      //----------------Speichern------------------------
      var btnSave = document.createElement("BUTTON");
      btnSave.innerHTML = "Änderung übernehmen"
      btnSave.classList.add("button")
      cell = row.insertCell()
      cell.appendChild(btnSave)
      //Save Function
      btnSave.addEventListener("click", function () 
      {
        var L = document.getElementById("setWorker");
        selectedUser = L.value
        var workersRef = firebase.database().ref('Worker')
        //------Aufgabe-----
        var aufgabe = document.getElementById("aufgabeID"+i).value
        //-----------
        var wichtigSaveChange = document.getElementById("wichtigkeitsID" + i).value
        //console.log(wichtigSaveChange)
       //------------------------------------------------
        workersRef.once('value', function (snapshot) {
          val = snapshot.val();
          var keys = Object.keys(val);
          var doTask = workersRef.child(keys[L.selectedIndex]).child('Tasks/' + k)
          var data = {
            Wichtigkeit: wichtigSaveChange,
            Aufgabe: aufgabe
          }
          doTask.update(data);
          setWorkerList()
        })

      })
    }
    )(i);
  })
  var workersRef = firebase.database().ref(result + '/Tasks');
  workersRef.on("child_added", function (data, prevChildKey) {
    var newWorker = data.val();
    taskHtml.innerText = newWorker.Aufgabe;
    //console.log( prevChildKey ,newWorker.Aufgabe);
  });
}
//----------onChangeDelete-------------
function setWorkerListDelete() {
  var e = document.getElementById("setWorkerDelete");
  var result = e.options[e.selectedIndex].value;
  //console.log(result); 
  //var taskHtml = document.getElementById("peter");
  var workersRef = firebase.database().ref(result);
  workersRef.on("child_added", function (data, prevChildKey) {
    var newWorker = data.val()
  });
}
//-----todoo TextField------
function sendTask() {
  var taskmsg = document.getElementById("txtTaskWorker").value;
  var datumInput = document.getElementById("inputDatum").value;
  var kundenInput = document.getElementById("selectKunde");
  var kundenName = kundenInput.options[kundenInput.selectedIndex].value;
  console.log(kundenName);
  if (taskmsg.length<1)
  {
    window.alert("Keine Aufgabe");
        return false;
  }
  if(kundenName.length<1)
  {
    window.alert("Keine Aufgabe");
        return false;
  }
  var wichtigKeit= document.getElementById("wichtigID")
  var f = document.getElementById("setWorker");
  selectedUser = f.value
  var txtresult = f.options[f.selectedIndex].value;
  var wichtigF = document.getElementById("selectWichtigkeit");
  var wichtigkeitSelect = wichtigF.options[wichtigF.selectedIndex].value;
  var workersRef = firebase.database().ref('Worker')
  workersRef.once('value', function (snapshot) {
    val = snapshot.val();
    var keys = Object.keys(val);
    var doTask = workersRef.child(keys[f.selectedIndex]).child('Tasks')
    var data = {
      Aufgabe: "" + taskmsg,
      Skala: "",
      Anmerkung: "",
      Datum: datumInput,
      Wichtigkeit: wichtigkeitSelect,
      Kunde: kundenName,
      Erledigt: "Nein",
      DatumUser: "",
      ID : x
    }
    doTask.push(data);
    document.getElementById('txtTaskWorker').value = '';
    document.getElementById('deleteWorker').value = '';
    document.getElementById("inputDatum").value="";
    document.getElementById("txtKunde").value="";
    setWorkerList()
   //-------set and count id
    x=x+1
    countRef.set(x);
  })
}


function testButtonClick()
{
  for (var y = 0; y < array.length; y++)
       {
        console.log(array.length);
       }
}
<!DOCTYPE html>
<html lang="de"> 
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>AdminPage</title>
    <link rel="stylesheet" type="text/css" href="styles.css" />
  
  
</head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet"> 
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/7.2.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.2.0/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.2.0/firebase.js"></script>
<script src="index.js"></script>
<style>
    #sortable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
    #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
    #sortable li span { position: absolute; margin-left: -1.3em; }
    </style>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    
<body>
<div id="wrapper">
    <div id="header">
            <h1><a href="index.html">Mitarbeiter- und Aufgabenverwaltung</a></h1>
    </div>
    <div id="top">
        Neuer Mitarbeiter:   <input id="txtWorker" type="text" name="vorname"></input>
                           <button id="bntSendWorker" class="button" onclick="sendWorker()">hinzufügen</button><br><br>
        Mitarbeiter löschen: <div class="select-wrapper fa fa-angle-down">
                                <select id="deleteWorker" onchange="setWorkerListDelete()"></select>
                             </div>
                             <button id="" class="button" onclick="deleteWorker()">löschen</button><br>
                             <hr>
        <div>                   
        Kunde anlegen:      <input id="txtKunde" type="text"/>
                            <button id="" class="button" onclick="setKunde()">anlegen</button><br>
                            <hr>
        Kunde löschen <select id="SelectDeleteKundeId" onchange="selectKundenListeDelete()"></select>
                        <button id="btnDeleteKundeID" class="button" onclick="deleteKunde()">löschen</button>
        </div>  
    </div>
    <div id="middle">
        <div>
                <div id="left">Mitarbeiter auswählen:</div>
                <div id="right">Aufgabe hinzufügen:</div>
        </div>
        
        <div id="left">
            <div class="select-wrapper fa fa-angle-down">
                <select id ="setWorker" onchange="setWorkerList()">
                </select>
            </div>
        </div>
        <div id="right">
            <textarea class="textfeld" id="txtTaskWorker" type="text"></textarea><br>
            Priorität:   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div class="select-wrapper fa fa-angle-down"><select id="selectWichtigkeit" >
                <option>Niedrig</option>
                <option>Mittel</option>
                <option>Hoch</option>
            </select> </div>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            Datum:      <input id="inputDatum" type="date"><br> <br>
            Kundenname:     <select id="selectKunde" onchange="selectKundenData()"></select>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <button id="bntSendtask"  class="button" onclick="sendTask()">Aufgabe anlegen</button>
        </div>
    </div>
    <div id="bottom">
        <table id="tasks">
            <thead>
                <th style="width:6%">    </th>
                <th style="width:10%">Datum</th>
                <th style="width:25%">Beschreibung</th>
                <th style="width:10%">Kunde</th>
                <th style="width:7%">Priorität</th>
                <th style="width: 7%">Erledigt</th>
                <th style="width: 10%">Änderungsdatum&nbsp;</th>
                <th style="width: 19%">Anmerkung</th>
                <th style="width:6%""></th>
            </thead>
            <tbody id="tablebody" style=>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tbody>
        </table>
    </div>
</div>

</body>
<script type="text/javascript">
    $('tbody').sortable();

  </script>
</html>

标签: javascripthtmlfirebase-realtime-database

解决方案


推荐阅读