VorwortExcel ist leistungsstark und weit verbreitet. Mit der Verbreitung und Verbesserung von Webanwendungen steigen auch die Anforderungen der Benutzer. Viele Excel-Funktionen wurden nach Sass verschoben. Ich wünschte, ich könnte eine Excel-Datei für sie erstellen. . . Programmierer zu sein ist so schwierig. . . Letztes Jahr hatte ich Bedarf für ein Gantt-Diagramm, habe viel daran gearbeitet und auch zwei Blogs geschrieben. Eines ist ein mit dem GSTC-Paket erstelltes Gantt-Diagramm und das andere ist ein einfaches Gantt-Diagramm, das ich selbst geschrieben habe. Die Auswirkungen von beidem sind nicht ideal, insbesondere GSTC, das viele Probleme hat. Viele taoistische Freunde sind nach dem Lesen des Blogs auf Probleme gestoßen. Ich schäme mich, dass ich Ihnen nicht bei der Lösung dieses Problems helfen kann. Ich war vorher zu beschäftigt und habe deshalb nie wieder an diesem Gantt-Diagramm gearbeitet, bis ich heute ein neues Paket gefunden habe, das unsere Anforderungen fast vollständig erfüllt. Erstens verwenden wir Highcharts, zweitens ist als Produkt eines großen Teams die Nachwartung gewährleistet und die Dokumentation lückenlos. Ich habe es mit Vue3 geschrieben, aber Highcharts unterscheidet es nicht. Es ist ein JS-Paket, also funktioniert es mit Vue React oder nativen Multi-Pages. Als nächstes schauen wir uns unsere Anforderungen an, die auch die grundlegendsten sind, die Funktionen, die implementiert werden müssen, und dann folgt ein GIF des Effektdiagramms und schließlich der Quellcode. Ich habe es auf Git gestellt. Wenn Sie es nützlich finden, geben Sie ihm bitte einen Stern. brauchen 1. Die linke Seite der horizontalen Achse sind die Tabellendaten, die grundlegende Informationen anzeigen können RendernDieses Highcharts implementiert nicht nur die Tabelle links und das Symbol rechts, sondern verknüpft auch die Daten. Die horizontale Achse rechts ist die Zeitachse und das Format kann angepasst werden. Daten können ohne Konflikte überlagert werden. Die Daten weisen verschiedene Ereignisse wie Klicks auf und ein einzelner Datenblock kann zum Bearbeiten ausgewählt werden. Daten können gezogen werden, z. B. durch Ziehen nach oben und unten zum Ändern der Spalten, horizontales Ziehen und einseitiges Ziehen. Die Ereignisse verfügen über Rückruffunktionen. Diese Funktionen können grundsätzlich unseren Ansprüchen genügen. Beispielsweise die Änderung und Anzeige von Zeiträumen, Zeitlängen und Dateninformationen. Quellcodeadresse, CodeanalyseFügen Sie zuerst die Git-Adresse des Codes ein und klicken Sie auf „GitHub-Quellcode“, um den Quellcode herunterzuladen. Es wird empfohlen, den Quellcode direkt herunterzuladen und das Projekt auszuführen. Darüber hinaus ist dieses Projekt für vue3, aber für diese Art von Paket ist die Schreibmethode nicht viel anders, hauptsächlich die Parameter. Ich werde den Code posten und die Funktionsimplementierung erklären. Natürlich sind die Kommentare auch sehr detailliert. Zunächst einmal ist highcharts-gantt.js eine Datei, die speziell zur Implementierung des Gantt-Diagramms verwendet wird, und draggable-points.js ist eine Datei, die die Punktereignisbindung implementiert. Da Vue beim direkten Einführen von Variablen einen Fehler gemeldet hat, habe ich die beiden Module mit den verschiebbaren Punkten direkt zu Highcharts-Gantt hinzugefügt und sie anschließend ohne Verwirrung erneut komprimiert. Das endgültige Paket ist also nur über 160 KB groß, was viel kleiner ist und direkt verwendet werden kann. Sie können den komprimierten Quellcode ohne Bedenken verwenden. Ich habe gerade die Funktionen der beiden Dateien zusammengeführt, muss Sie jedoch daran erinnern, dass es sich nicht um die offizielle Quelldatei handelt. Interessierte Studenten können den offiziellen Quellcode aufrufen. Die .src-Datei ist unkomprimiert und verschleiert und die Kommentare sind sehr detailliert. Dies ist die Version Highcharts Gantt JS v9.3.1 (05.11.2021), als ich die Dateien zusammengeführt habe. Dies ist auch die aktuelle stabile Version. Die Funktionalität ist ziemlich simpel und zum Code gibt es scheinbar nicht viel zu sagen. Ich habe die wichtigsten Punkte kommentiert. Wenn Sie sie immer noch nicht verstehen, können Sie eine Nachricht oder einen Kommentar hinterlassen. Schließlich gibt es noch ein Problem. Ich habe den Quellcode nicht sorgfältig studiert. Bei diesem Beispiel gibt es immer noch ein Problem. Das Drag-Ereignis wird nicht unterbrochen und die Datenanzeige des Diagramms wird direkt geändert. Wenn Sie die Linie beispielsweise vertikal ziehen, ändern sich die Daten in der Tabelle links. Ich habe bisher keine zufriedenstellende Lösung gefunden. Derzeit verarbeite ich die Daten am Ende des Ziehens in der Drop-Callback-Funktion, schreibe dann die gewünschten Daten zurück und aktualisiere das Diagramm. In ähnlicher Weise können Sie auch verschiedene Prüfungen wie Ziehen oder Zeitkonflikte durchführen, um die oben genannten Anforderungen zu erfüllen. Es gibt jedoch noch einen Fehler, nämlich dass sich die Daten während des Ziehvorgangs ändern. Ich möchte nicht, dass sich die Daten in der linken Tabelle während des Ziehvorgangs ändern, und dieses Problem wurde noch nicht gelöst. Wenn Sie gute Fälle, gute Anwendungen oder gute Vorschläge haben, hoffe ich, dass Sie diese vorbringen können, damit wir gemeinsam Fortschritte machen können. <div Klasse="hightChart-gantt"> <div id="Container"></div> <button @click="getData">Aktuelle Daten drucken</button> </div> </Vorlage> <Skript> importiere { defineComponent, onMounted, ref } von „vue“; importiere * als Highcharts aus '@jsModule/highcharts/highcharts-gantt.src.js' importiere dayjs von „dayjs“ importiere { WOCHEN } aus './constants' // API-Dokumentation: https://api.Highcharts.com.cn/gantt/index.html // Community-Adresse: https://forum.jianshukeji.com/tags/c/Highcharts/35/Highcharts-gantt // Offizielles Beispiel: https://www.highcharts.com.cn/demo/gantt/interactive-gantt //Zu lösende Probleme// 1. Drag-Unterbrechung: Benutzervorgänge sollten überprüft werden, aber wir haben noch nicht herausgefunden, wie Benutzervorgänge unterbrochen werden können. // Lösung: Der aktuelle Ansatz besteht darin, Urteile im Drop zu fällen, Eingabeaufforderungen basierend auf der Geschäftslogik zu erstellen und die Daten erneut zu rendern. Es ist machbar, aber nicht freundlich genug. exportiere StandarddefiniereKomponente({ Name: 'hightCharts-gantt', Komponenten: {}, aufstellen () { const gantt = ref({}); // Die offizielle Empfehlung ist, die UTC-Zeit zu verwenden. Aus geschäftlichen Gründen müssen wir sie mit der Datenbankzeit in Einklang bringen. Dies hängt vom Speicherformat der Datenbank ab. const data = [ {Start: '2021-6-1 0',Ende: '2021-6-1 18',Fabrik: 'Huawei',Material: 'P50', UID: 1, Jahr: 0, abgeschlossen: 0,35}, {Start: '2021-6-2 8',Ende: '2021-6-2 16',Fabrik: 'Huawei',Material: 'P50', UID: 2, Jahr: 0}, {Start: '2021-6-3 8',Ende: '2021-6-4 24',Fabrik: 'Huawei',Material: 'P50', UID: 3, Jahr: 0}, {Start: '2021-6-4 12',Ende: '2021-6-5 15',Fabrik: 'Huawei',Material: 'P50', UID: 4, Jahr: 0}, {Start: '2021-6-1 8',Ende: '2021-6-1 12',Fabrik: 'Xiaomi',Material: 'Redmi 3', UID: 5, Y: 1}, {Start: '2021-6-3 3',Ende: '2021-6-3 9',Fabrik: 'Xiaomi',Material: 'Redmi 3', UID: 6, Y: 1}, {Start: '2021-6-1 6',Ende: '2021-6-1 16',Fabrik: 'Apple',Material: 'iPhone13', UID: 7, Y: 2}, {Start: '2021-6-2 3',Ende: '2021-6-2 19',Fabrik: 'Apple',Material: 'iPhone13', UID: 8, Y: 2}, {Start: '2021-6-3 8',Ende: '2021-6-3 17',Fabrik: 'Apple',Material: 'iPhone13', UID: 9, Y: 2}, {Start: '2021-6-1 12',Ende: '2021-6-1 24',Fabrik: 'OPPO',Material: 'Reno7', UID: 10, Jahr: 3}, {Start: '2021-6-2 5',Ende: '2021-6-2 18',Fabrik: 'OPPO',Material: 'Reno7', UID: 11, Jahr: 3}, {Start: '2021-6-3 1',Ende: '2021-6-5 12',Fabrik: 'OPPO',Material: 'Reno7', UID: 12, Y: 3}, ]; let neueDaten = data.map(item => { : item.start = dayjs(item.start).valueOf(); } item.end = dayjs(item.end).valueOf(); Rücksendeartikel }); // Globale Konfiguration, muss konfiguriert werden, bevor das Symbol initialisiert wird Highcharts.setOptions({ weltweit: useUTC: false // Keine UTC-Zeit verwenden}, // Alle sind standardmäßig auf Englisch, einige chinesische Übersetzungen werden hier vorgenommen lang: { noData: 'Noch keine Daten', Wochentage: ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'], Monate: ['Januar', 'Januar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] }, }); const dragStart = (e) => { } const ziehen = (e) => { } const drop = (e) => { const { neuerPunkt = {}, Ziel = {} } = e; wenn(neuerPunkt.y || neuerPunkt.y === 0) { let list = [], tar = newData.find(item => item.y === newPoint.y && item.uid !== target.uid); Liste = neueDaten.Karte(Element => { // Aktuelle Drag-Daten if(item.uid === target.uid) { zurückkehren { ...Artikel, Fabrik: tar.factory, Material: Teermaterial, …neuerPunkt } } anders { Rücksendeartikel } }) gantt.Wert.Update({ Serie: [{ Daten: Liste }] }) } } // Auswählen, Sie können ein Fenster zum Bearbeiten einiger Geschäftsdaten öffnen const handleSelect = (e) => { console.log('ausgewählt') } // Holen Sie die endgültigen Daten const getData = () => { let data = gantt.value.series[0].data.map(item => { zurückkehren { uid: Element.uid, Fabrik: Artikel.Fabrik, Material: Artikel.Material, Start: Element.Start, Ende: Element.Ende } }) console.log(Daten) } beimMounted(() => { versuchen { gantt.Wert = Highcharts.ganttChart('Container', { Titel: Text: „Beispiel für ein Gantt-Diagramm von hightCharts“ }, xAchse: [{ currentDateIndicator: wahr, tickPixelInterval: 70, Netz: { borderWidth: 1, // Breite des rechten Header-Rahmens cellHeight: 35, // Höhe des rechten Datumsheaders }, Beschriftungen: { ausrichten: "zentriert", Formatierer: Funktion() { returniere `${dayjs(this.value).format('Montag, Donnerstag')} ${WEEKS[dayjs(this.value).day()]}`; } }, }, { Beschriftungen: { ausrichten: "zentriert", Formatierer: Funktion() { returniere `${dayjs(this.value).format('YYYY-Monatsmonat')}`; } }, }], yAchse: { Typ: "Kategorie", Netz: { aktiviert: true, Rahmenfarbe: 'rgba(0,0,0,0.3)', Rahmenbreite: 1, Spalten: [ { Titel: { Text: 'Fabrik' }, Beschriftungen: { Format: '{point.factory}' } }, { Titel: { Text: 'Modell' }, Beschriftungen: { Format: '{Punkt.Material}' } }, ] } }, Tooltip: { Formatierer: Funktion () { return `<div> Fabrik: ${this.point.factory}<br/> Startzeit: ${dayjs(this.point.start).format('JJJJ-MM-TT HH:mm:ss')}<br/> Endzeit: ${dayjs(this.point.end).format('JJJJ-MM-TT HH:mm:ss')}<br/> </div>` } }, Serie: [{ Daten: neueDaten }], Plotoptionen: { Serie: { Animation: false, // Abhängigkeitskonnektoren nicht animieren ziehenDrop: { draggableX: true, // horizontales Ziehen draggableY: true, // vertikales Ziehen dragMinY: 0, // Untergrenze für vertikales Ziehen dragMaxY: 3, // Obergrenze für vertikales Ziehen dragPrecisionX: 3600000 // Genauigkeit für horizontales Ziehen in Millisekunden}, Datenlabels: { aktiviert: true, Format: "{point.factory}-{point.uid}", Stil: { Cursor: "Standard", Zeigerereignisse: „keine“ } }, allowPointSelect: wahr, Punkt: { Ereignisse: { ziehenStart: ziehenStart, ziehen: ziehen, Tropfen: Tropfen, auswählen: handleSelect } } } }, exportieren: { Quellbreite: 1000 }, credits: { // Entferne die Copyright-Informationen in der unteren rechten Ecke enabled: false }, }); } Fehler abfangen { console.log(Fehler) } }) zurückkehren { gantt, Daten abrufen } }, }) </Skript> <Stilbereich> .hightChart-gantt { Überlauf-x: automatisch; -webkit-overflow-scrolling: berühren; } #Behälter { maximale Breite: 1200px; Mindestbreite: 800px; Höhe: 400px; Rand: 1em automatisch; } </Stil> Dies ist das Ende dieses Artikels mit der detaillierten Erklärung zum Ziehen und Bearbeiten des Gantt-Diagramms (Highcharts können sowohl für Vue als auch für React verwendet werden). Weitere verwandte Inhalte zum Gantt-Diagramm von Vue 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:
|
<<: Implementierungscode zur Verwendung von CSS-Texthervorhebung zum Hervorheben von Text
>>: Detailliertes Beispiel für die Blockierung von Flash durch HTML-Elemente
Inhaltsverzeichnis Was ist natives JavaScript A. ...
Dieser Artikel beschreibt anhand eines Beispiels ...
1. Tabellenanweisung erstellen: CREATE TABLE `Mit...
Ich habe vor kurzem ein kleines Programmierprojek...
In einem Satz: Datenentführung (Object.defineProp...
Geschäftsszenario: Verwenden Sie den EL-Dialog vo...
Inhaltsverzeichnis 1. Einfach zu bedienen 2. Verw...
Als ich vor einiger Zeit an einer kleinen Funktio...
Inhaltsverzeichnis 1. Hintergrund 2. Voraussetzun...
Inhaltsverzeichnis Hintergrund dieser Serie Überb...
MySQL zwischen Grenzbereich Der Bereich zwischen ...
Da immer mehr Docker-Images verwendet werden, mus...
/********************** * Linux-Speicherverwaltun...
Inhaltsverzeichnis 1. Beispielcode 2. Sehen Sie d...
Yum (vollständiger Name Yellow Dog Updater, Modif...