Springboot verwendet die Front-End- und Back-End-Interaktion von Vue + Echarts, um dynamische Donut-Diagramme zu realisieren

Springboot verwendet die Front-End- und Back-End-Interaktion von Vue + Echarts, um dynamische Donut-Diagramme zu realisieren

Vorwort

Wenn wir an einem Projekt arbeiten, benötigen wir häufig statistische Diagramme, um unsere Daten anzuzeigen. Als Webentwickler ist die Fähigkeit, statistische Diagramme zu implementieren, eine Fähigkeit, die wir unbedingt besitzen müssen. Ich zeige Ihnen, wie Sie ein dynamisches Kreisdiagramm implementieren.

1. Umgebungskonfiguration

1.1 Installieren Sie acharts

//npm ist das gleiche wie cnpm install echarts --save

1.2 Globale Referenzen

Konfiguration in main.js

//E-Charts einführen
E-Charts aus „E-Charts“ importieren
//Komponente registrieren Vue.prototype.$echarts = echarts

Nachdem wir die Komponenten global registriert haben, können wir zur Sache kommen. Der erste Schritt besteht darin, ein Donut-Diagramm zu zeichnen. Zunächst das Ergebnisbild:

Bildbeschreibung hier einfügen

2. Front-End-Implementierung des Donut-Diagramms

2.1 Fügen Sie der Vue-Seite zuerst eine Rendering-Box hinzu

<Vorlage>
  <div Klasse="test2" Stil="Breite:600px;Höhe:400px;">
      <div id="meinChart" style="width:100%;height:278px;float:left;"></div>
  </div>
</Vorlage>

2.2 Implementierung der Front-End-Logik

Einführung in echart

importiere * als E-Charts von „E-Charts“

Hinweis: Hier gibt es eine große Falle. Wenn Sie eine höhere Version von Echarts installieren, müssen Sie meinen Anweisungen folgen. Importieren Sie Echarts aus „Echarts“. Viele Leute im Internet teilen dies, was zu einem Fehler beim Initialisieren der Init-Funktion führt.

<Skript>
     importiere * als E-Charts von „E-Charts“
     Standard exportieren {
       Name: 'test2',
       Daten () {
         zurückkehren {
         Abfrageinfo: {
         Abfrage: "",
         Seitennummer: 1,
         pageSize: 4, //Das Backend fordert 4 Datenkategorien an. Wenn Sie mehr als eine haben, ändern Sie diesen Parameter},
       AbfrageInfof: {
         Abfrage: "",
         Seitennummer: 1,
         Seitengröße: 100,
       },
           meinChart: '',
           MeinungDaten2:
           
           {"itemStyle":"#3F8FFF","name":"Bedrohungsangriffsprotokoll","value":200},
           {"itemStyle":"#6DC8EC","name":"Audit-URL-Ausnahme","value":388},  
           {"itemStyle":"#1FC48D","name":"Normales Netzwerkprotokoll","value":5287},         
           {"itemStyle":"red","name":"Anomalie im Verkehrsprotokoll","value":320}      
           ]
         }
       },
       montiert: Funktion () {
          dies.drawLine();

       },
     
       Methoden: {
          asynchrone Linie zeichnen() {
              // Post-Anfrage aufrufen /* const { data: res } = await this.$http.get("alldate", {
        Parameter: this.queryInfo
      });
      wenn (res.flag != "Erfolg") {
        return this.$message.error("Daten konnten nicht abgerufen werden!!!");
      }

      Konsole.log(res.flag)
       this.opinionData2 = res.opinionData2; // Die zurückgegebenen Daten zuweisen*/
           dies.meinChart = echarts.init(document.getElementById('meinChart'))
           dies.myChart.setOption({
             Titel:
               Text: ‚Analyse des abnormalen Datenverkehrs im Netzwerkprotokoll‘, // Untertext des Haupttitels: ‚‘, // Untertitel x: ‚links‘ // Ausrichtung auf der X-Achse},
             Raster: { containLabel: true },
             Tooltip: {
               Auslöser: 'Artikel',
               Formatierer: '{a} <br/>{b} : {d}%'
             },
             // Farbe: ['#1FC48D', '#F5A60A', '#6DC8EC', '#3F8FFF'],
             Farbe: ['#1FC48D', 'rot', '#6DC8EC', '#3F8FFF'],
             // Hintergrundfarbe: '#ffffff',
             Legende: {
               ausrichten: 'vertikal',
               Symbol: „Kreis“,
               ausrichten: 'links',
               x: 'rechts',
               y: 'unten',
               Daten: ['Audit-URL-Anomalie', 'Normales Netzwerkprotokoll', 'Verkehrsprotokoll-Anomalie', 'Bedrohungsangriffsprotokoll']
             },
             Serie: [
               {
                 Name: 'Netzwerkprotokollstatus',
                 Typ: "Kuchen",
                 Radius: ['50%', '70%'],
                 avoidLabelOverlap: falsch,
                 Mitte: ['40%', '50%'],
                 Artikelstil: {
                   Schwerpunkt:
                     Schattenunschärfe: 10,
                     SchattenOffsetX: 0,
                     Schattenfarbe: 'rgba(0, 0, 0, 0,5)'
                   },
                   Farbe: Funktion (Parameter) {
                     // Benutzerdefinierte Farben var colorList = ['#1FC48D', 'red', '#6DC8EC', '#3F8FFF']
                     Farbliste zurückgeben[params.dataIndex]
                   }
                 },
                 Daten: this.opinionData2
               }
             ]
           })
         },
       }
     }
     </Skript>

2.3 Anzeige (Sie können den Front-End-Stil entsprechend Ihren Anforderungen ändern)

Bildbeschreibung hier einfügen

3. Implementierung der Front-End- und Back-End-Dateninteraktion

3.1 Erstellen einer Datenbank

Tabellenstruktur: (Erstellen Sie diese entsprechend Ihren Geschäftsanforderungen)

Bildbeschreibung hier einfügen

Tabellendaten

Bildbeschreibung hier einfügen

3.2 Hintergrundcode schreiben

3.2.1 Erstellen Sie die QueryInfo-Klasse unter dem Bean-Paket

Diese Klasse implementiert das Abrufen der vom Front-End angeforderten Datenmenge. Entspricht der Paging-Funktionalität.

öffentliche Klasse QueryInfo {
    private String-Abfrage;
    private int Seitennummer=1;
    private int Seitengröße=1;

    öffentliche QueryInfo() {
    }

    öffentliche QueryInfo(String query, int Seitennummer, int Seitengröße) {
        diese.Abfrage = Abfrage;
        this.pageNum = Seitennummer;
        this.pageSize = Seitengröße;
    }

    öffentliche Zeichenfolge getQuery() {
        Rückfrage;
    }

    öffentliche int getPageNum() {
        Seitennummer zurückgeben;
    }

    öffentliche int getPageSize() {
        Seitengröße zurückgeben;
    }

    öffentliche void setQuery(String query) {
        diese.Abfrage = Abfrage;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = Seitennummer;
    }

    public void setPageSize(int Seitengröße) {
        this.pageSize = Seitengröße;
    }

    @Überschreiben
    öffentliche Zeichenfolge toString() {
        return "QueryInfo{" +
                "query='" + query + '\'' +
                ", Seitennummer=" + Seitennummer +
                ", Seitengröße=" + Seitengröße +
                '}';
    }
}

3.2.2 Showdate-Klasse unter Bean-Paket erstellen

öffentliche Klasse Showdate {
    privater String-Name;
    privater String-Elementstil;
    privater int-Wert;


    öffentliches Showdate() {

    }

    öffentliches Showdate(Stringname, Stringelementstil, int-Wert) {
        dieser.name = Name;
        this.itemStyle = Artikelstil;
        dieser.Wert = Wert;
    }

    öffentliche Zeichenfolge getName() {
        Rückgabename;
    }

    öffentliche void setName1(String name) {
        dieser.name= Name;
    }

    öffentliche Zeichenfolge getItemStyle() {
        Artikelstil zurückgeben;
    }

    öffentliche void setItemStyle(String itemStyle) {
        this.itemStyle = Artikelstil;
    }

    öffentliche int getValue() {
        Rückgabewert;
    }

    öffentliche void setValue(int Wert) {
        dieser.Wert = Wert;
    }

    @Überschreiben
    öffentliche Zeichenfolge toString() {
        return "Showdate{" +
                "name='" + name + '\'' +
                ", Artikelstil = '" + Artikelstil + '\'' +
                ", Wert=" + Wert +
                '}';
    }
}

3.2.3 Mapper unter Ressourcen erstellen

1. Erstellen Sie ShowDataMapper.xml in Mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.naughty.userlogin02.dao.ShowdateDao">


    <select id="getAlldate" resultType="com.naughty.userlogin02.bean.Showdate">
        Wählen Sie * aus Datum1
        <if test="name!=null">
            WO Name wie #{name}
        </if>
        LIMIT #{pageStart},#{pageSize}
    </Auswählen>

    <Aktualisierungs-ID="aktualisierenneu">
        UPDATE date1 SET value = #{Anzahl} WHERE name = #{name}
    </Aktualisieren>


</mapper>

2. Erstellen Sie application.yml unter Ressourcen, um die Datenbank und die Portnummer zu konfigurieren

#mysql
Frühling:
  Datenquelle:
    #MySQL-Konfiguration Treiberklassenname: com.mysql.cj.jdbc.Driver
    URL: jdbc:mysql://localhost:3306/weblog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    Benutzername: root
    Passwort: root

mybatis:
  Mapper-Standorte: Klassenpfad:Mapper/*.xml
  Typ-Alias-Paket: com.example.demo.model
Server:
  Hafen: 9000

3.2.4 ShowdateDao unter Dao erstellen

Darin gibt es zwei Schnittstellen. Wenn Sie die Datenbank betreiben müssen, müssen Sie Schnittstellenmethoden in ShowdateDao schreiben.
Schreiben Sie die SQL-Anweisung in ShowDataMapper.xml.
Ich habe hier Modifikation und Suche implementiert;

importiere com.naughty.userlogin02.bean.Showdate;
importiere org.apache.ibatis.annotations.Param;
importiere org.springframework.stereotype.Repository;

importiere java.util.List;
@Repository
öffentliche Schnittstelle ShowdateDao {

    öffentliche Liste<Showdate> getAlldate(@Param("name") Stringname, @Param("pageStart") int pageStart, @Param("pageSize") int pageSize);

    öffentliche int updatenew(String-Name, int-Anzahl);
}

3.2.5 ShowdateController unter Controller erstellen

In ShowdateController müssen Sie die Verwendung von Speicherplatz kommentieren

   @Autowired
    ShowdateDao showdateDao; //Sie müssen es an die Front-End-Datenbanktabelle weitergeben @Autowired
    FlowDao flowDao; //Die Effekt-Datenbanktabelle Ihrer Datenquelle
Paket com.naughty.userlogin02.controller;

importiere com.alibaba.fastjson.JSON;
importiere com.naughty.userlogin02.bean.*;
importiere com.naughty.userlogin02.dao.CheckDao;
importiere com.naughty.userlogin02.dao.FlowDao;
importiere com.naughty.userlogin02.dao.SafeDao;
importiere com.naughty.userlogin02.dao.ShowdateDao;
importiere org.springframework.beans.factory.annotation.Autowired;
importiere org.springframework.web.bind.annotation.*;

importiere java.util.HashMap;
importiere java.util.List;
importiere java.util.Stack;

@RestController
öffentliche Klasse ShowdateController {

    @Autowired
    ShowdateDao ShowdateDao;
    @Autowired
    Dienstprogramme
//Protokolldaten an der Rezeption aktualisieren @CrossOrigin
    @RequestMapping("/alldate")//Front-End-Anforderungskanal public String getAlldateList(QueryInfo queryInfo){
        System.out.println(queryInfo);
        int SeiteStart = (queryInfo.getPageNum()-1)*queryInfo.getPageSize();
        Liste<Showdate>-Daten = showdateDao.getAlldate("%"+queryInfo.getQuery()+"%",pageStart,queryInfo.getPageSize());
   
      für(int i =0;i<dates.size();i++){
          System.out.println(dates.get(i).toString());
      }
        //Überprüfung//Das überprüfte Verkehrsprotokoll einkapseln HashMap<String, Object> res = new HashMap<>();
        res.put("Flagge","Erfolg");
        res.put("Meinungsdaten2",Daten);
        : Geben Sie date_json in das Feld date_json ein.
        System.out.println(date_json.toString());
        gibt date_json zurück;
    }

//Die Implementierungsmethode der Datenbankdatenquelle besteht darin, die Daten in der Datenbanktabelle Date1 zu ändern @RequestMapping("/getupdata")
    öffentliche Zeichenfolge updateDate(QueryInfo queryInfo){

        String s = „Ausnahme im Verkehrsprotokoll“;
        Zeichenfolge s1 = „URL-Ausnahme prüfen“;
        Zeichenfolge s2 = „Bedrohungsangriffsprotokoll“;
        String s3 = „Normales Netzwerkprotokoll“;
        /*int Anzahl = getUserList(queryInfo);
        int count1 =getChickList(queryInfo); //Die vier Methoden müssen von Ihnen entsprechend dem spezifischen Geschäft implementiert werden int count2 =getSafeDate(queryInfo);
        int Anzahl3 = alleBlognum(Abfrageinfo)-(Anzahl+Anzahl1+Anzahl2);*/
        showdateDao.updatenew(s,Anzahl);
        showdateDao.updatenew(s1,Anzahl1);
        showdateDao.updatenew(s2,Anzahl2);
        int i = showdateDao.updatenew(s3,count3);
        System.out.println("Ausnahmetyp: "+s);
        System.out.println("Anzahl der abnormalen Protokolle:"+Anzahl);
        String str = i >0?"erfolg":"Fehler";
        gibt str zurück;
    }

}

3.2.6 Ändern der Front-End-Schnittstelle

Vollständiger Js-Code:

   <Skript>
     importiere * als E-Charts von „E-Charts“
     Standard exportieren {
       Name: 'test2',
       Daten () {
         zurückkehren {
         Abfrageinfo: {
         Abfrage: "",
         Seitennummer: 1,
         Seitengröße: 4,
       },
       AbfrageInfof: {
         Abfrage: "",
         Seitennummer: 1,
         Seitengröße: 100,
       },
           meinChart: '',
           MeinungDaten2:
     
// Front-End-Testdaten löschen]
         }
       },
       montiert: Funktion () {
          dies.drawLine();

       },
       erstellt() {
         this.getdateList(); //Aktualisieren Sie die Datenbankdaten bei jedem Aufruf der Seite, um eine dynamische Datenbindung zu erreichen},
       Methoden: {
          asynchrone Linie zeichnen() {
              // Rufen Sie die Post-Anfrage auf, um den Wert der Backend-Datenbank abzurufen const { data: res } = await this.$http.get("alldate", {
        Parameter: this.queryInfo
      });
      wenn (res.flag != "Erfolg") {
        return this.$message.error("Daten konnten nicht abgerufen werden!!!");
      }

      Konsole.log(res.flag)
       this.opinionData2 = res.opinionData2; // Weisen Sie die zurückgegebenen Daten zu this.myChart = echarts.init(document.getElementById('myChart'))
           dies.myChart.setOption({
             Titel:
               Text: ‚Analyse des abnormalen Datenverkehrs im Netzwerkprotokoll‘, // Untertext des Haupttitels: ‚‘, // Untertitel x: ‚links‘ // Ausrichtung auf der X-Achse},
             Raster: { containLabel: true },
             Tooltip: {
               Auslöser: 'Artikel',
               Formatierer: '{a} <br/>{b} : {d}%'
             },
             // Farbe: ['#1FC48D', '#F5A60A', '#6DC8EC', '#3F8FFF'],
             Farbe: ['#1FC48D', 'rot', '#6DC8EC', '#3F8FFF'],
             // Hintergrundfarbe: '#ffffff',
             Legende: {
               ausrichten: 'vertikal',
               Symbol: „Kreis“,
               ausrichten: 'links',
               x: 'rechts',
               y: 'unten',
               Daten: ['Audit-URL-Anomalie', 'Normales Netzwerkprotokoll', 'Verkehrsprotokoll-Anomalie', 'Bedrohungsangriffsprotokoll']
             },
             Serie: [
               {
                 Name: 'Netzwerkprotokollstatus',
                 Typ: "Kuchen",
                 Radius: ['50%', '70%'],
                 avoidLabelOverlap: falsch,
                 Mitte: ['40%', '50%'],
                 Artikelstil: {
                   Schwerpunkt:
                     Schattenunschärfe: 10,
                     SchattenOffsetX: 0,
                     Schattenfarbe: 'rgba(0, 0, 0, 0,5)'
                   },
                   Farbe: Funktion (Parameter) {
                     // Benutzerdefinierte Farben var colorList = ['#1FC48D', 'red', '#6DC8EC', '#3F8FFF']
                     Farbliste zurückgeben[params.dataIndex]
                   }
                 },
                 Daten: this.opinionData2
               }
             ]
           })
         },
         asynchron getdateList() {
      // Post-Anfrage aufrufen const { data: res } = await this.$http.get("getupdata", {
        Parameter: this.queryInfof
      });
      wenn (res != "Erfolg") {
        return this.$message.error("Daten konnten nicht abgerufen werden!!!");
      }
      Konsole.log(res)
        },
       }
     }
     </Skript>
     

Bildbeschreibung hier einfügen

Backend-Rückgabedaten:

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über Springboot, das die Front-End- und Back-End-Interaktion von vue+echarts verwendet, um dynamische Kreisdiagramme zu implementieren. Weitere verwandte Inhalte zu dynamischen Kreisdiagrammen von Springboot vue finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder stöbern Sie weiter in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Vue implementiert einen dynamischen kreisförmigen prozentualen Fortschrittsbalken
  • Verwenden der Front-End- und Back-End-Interaktion von vue+ElementUI+echarts zum Realisieren dynamischer Donut-Diagramme im Springboot-Projekt (empfohlen)
  • Implementierung der Funktion der kreisförmigen prozentualen Fortschrittsbalkenkomponente von Vue
  • Beispiel für die Implementierung eines kreisförmigen Fortschrittsbalkens in Vue
  • Vue zeichnet dynamisch den Effekt eines Dreiviertel-Donut-Diagramms
  • Beispielcode für die Verwendung von Echarts zum Erstellen eines Donut-Diagramms in Vue
  • Vue verwendet Canvas, um einen Kreis zu zeichnen

<<:  Detaillierte Erläuterung der SRIOV-Passthrough-Konfiguration und Leistungstests basierend auf KVM

>>:  Tutorial zur Änderung des Root-Passworts in MySQL 5.6

Artikel empfehlen

CSS zur Erzielung einer kompatiblen Textausrichtung in verschiedenen Browsern

Beim Front-End-Layout des Formulars müssen wir hä...

Detaillierte Erläuterung der Anwendung der vier Zustände der Hyperverbindung

Obwohl Sie denken, dass es sich möglicherweise um...

Kurze Analyse der Einführung und grundlegenden Verwendung von Promise

Promise ist eine neue Lösung für die asynchrone P...

Einführung in die Installation und Konfiguration von JDK unter CentOS-Systemen

Inhaltsverzeichnis Vorwort Überprüfen und deinsta...

Lösung für ungültige obere Ränder von Elementen in Div-Tags

Genau wie der Titel sagt. Die Frage ist sehr merkw...

Tiefgreifendes Verständnis des Vue-Übergangs und der Animation

1. Wenn Sie DOM-Elemente einfügen, aktualisieren ...

CSS3-Beispielcode zum Erreichen einer Elementbogenbewegung

So verwenden Sie CSS, um die Bogenbewegung von El...

MySQL 8.0.13 Download- und Installations-Tutorial mit Bildern und Text

MySQL ist die am häufigsten verwendete Datenbank....