Schritte zum Erstellen des Projekts vite+vue3+element-plus

Schritte zum Erstellen des Projekts vite+vue3+element-plus

Verwenden Sie vite, um ein vue3-Projekt zu erstellen

Sie können mit Vite schnell ein Vue-Projekt erstellen, indem Sie den folgenden Befehl in Ihrem Terminal ausführen.

$ npm init vite-app <Projektname>
$ cd <Projektname>
$ npm installieren
$ npm ausführen dev

Einführung von Element Plus

Installieren Sie Element Plus:

npm installiere element-plus --save

Element Plus wird vollständig in main.js eingeführt:

importiere { createApp } von 'vue'
importiere ElementPlus von „element-plus“;
importiere „element-plus/lib/theme-chalk/index.css“;
App aus „./App.vue“ importieren;

const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

SCSS importieren

Führen Sie den Befehl zum Installieren von Sass aus, npm i sass -D, und fügen Sie dann lang="scss" zum Style-Tag der Vue-Datei hinzu. Diese sind dieselben wie vor Vue2.

npm ich sass -D

Eslint importieren

Installieren Sie eslint

npm und eslint -D

Verwenden Sie eslint, um dieses Projekt zu initialisieren

npx eslint --init

Folgen Sie den Anweisungen zur Einrichtung. Dies ist die Einstellung, die ich gewählt habe

Vue-Router importieren

Installieren Sie Vue Router 4

npm installiere vue-router@4

Erstellen Sie einen neuen Router-Ordner im src-Verzeichnis und erstellen Sie index.js unter Router für die Routing-Konfiguration

importiere * als VueRouter von „vue-router“

const Routen = [
  {
    Weg: '/',
    Komponente: () => import('../page/Home.vue')
  }, {
    Pfad: '/login',
    Komponente: () => import('../page/Login.vue')
  }
]

exportiere Standard-VueRouter.createRouter({
  Verlauf: VueRouter.createWebHashHistory(),
  Routen
})

Verwenden Sie diese Middleware in main.js

Router aus „./router“ importieren
//...
app.use(Router)

Vuex importieren

Installieren Sie vuex

npm installiere vuex@next --save

Erstellen Sie einen Store-Pfad unter src und erstellen Sie index.js unter Store

importiere { createStore } von 'vuex'

exportiere Standard createStore({
  Zustand () {
    zurückkehren {
      Benutzername: ''
    }
  },
  Mutationen:
    setUserName (Status, Nutzlast) {
      Status.Benutzername = Nutzlast
    }
  }
})

Store in main.js verwenden

vuex aus „./store“ importieren
//...
app.use(vuex)

Axios importieren

Für Netzwerkanfragen wird hier Axios verwendet. Installieren Sie zunächst Axios

npm und axios

Erstellen Sie ein API-Verzeichnis unter dem src-Verzeichnis, erstellen Sie axios.js unter dem API-Pfad und konfigurieren Sie die Axios-Instanz

// axios.js
Axios von „Axios“ importieren
// Konfiguration aus „../../config“ importieren
importiere { useRouter } von 'vue-router'

Standardfunktion exportieren () {
  // 1. Wenn beim Senden einer Anfrage ein Token vorhanden ist, muss es an den Anfrageheader angehängt werden const token = localStorage.getItem('token')
  let-Instanz = axios

  wenn (Token) {
    Instanz = axios.create({
      // Basis-URL: Konfigurationsserver,
      Überschriften: {
        Autorisierung: 'Bearer' + Token
      }
    })
  }

  const router = useRouter()
  Instanz.Interceptors.Antwort.Verwenden(
    (bzw.) => {
      // 2. Wenn beim Antworten ein Token vorhanden ist, speichern Sie das Token lokal (localstorage).
      if (bzw.Daten.Daten.Token) {
        localStorage.setItem('Token', bzw. Daten.Daten.Token)
      }
      // 3. Wenn beim Antworten der Antwortnachrichtencode 403 lautet (kein Token, Token ungültig), löschen Sie das Token lokal
      wenn (bzw.Datencode === 403) {
        localStorage.removeItem('Token')
        localStorage.removeItem('Benutzername')
        router.push({ Name: 'Anmelden' })
      }
      Rückkehr bzw.
    },
    (fehler) => {
      returniere Promise.reject(err)
    }
  )

  Rückgabeinstanz
}

Erstellen Sie index.js unter dem API-Pfad und schreiben Sie die API

Importanforderung von „./axios.js“
Konfiguration aus „../../config“ importieren
Standard exportieren {
  // Anmelden login (Parameter) {
    Rückgabeanforderung (). Post (`${config.server}/login`, Parameter)
  },
  // Benutzerliste abrufen getUserList (params) {
    returniere Anfrage().get(`${config.server}/user/list`, {
      Parameter: Parameter
    })
  },
  // Einen Benutzer hinzufügen createUser (params) {
    Rückgabeanforderung (). Post (`${config.server}/user/`, Parameter)
  },
  //...

Als nächstes verwenden wir die Composition API von vue3, um Komponenten zu entwickeln. Hier ist ein Beispiel für die Entwicklung eines Benutzermoduls:

<Vorlage>
  <div Klasse="Benutzer-Wrap">
      <el-Schaltfläche
        Klasse="create-btn"
        Typ="Erfolg"
        Größe="klein"
      @click="handleCreate">Benutzer hinzufügen+</el-button>
      <el-Tabelle
        :data="Tabellendaten"
        Stil="Breite: 100%">
        <el-table-column
            label="Benutzername"
            prop="Benutzername">
        </el-Tabellenspalte>
        <el-table-column
            label="Passwort"
            prop="Passwort">
        </el-Tabellenspalte>
        <el-table-column
            align="rechts">
            <Vorlage #header>
                <el-Eingabe
                v-model="Suche"
                @blur="Suchbenutzer"
                Größe="mini"
                Platzhalter="Benutzernamen für die Suche eingeben"/>
            </Vorlage>
            <Vorlage #default="Umfang">
                <el-Schaltfläche
                Größe="mini"
                @click="handleEdit(scope.$index, scope.row)">Bearbeiten</el-button>
                <el-Schaltfläche
                Größe="mini"
                Typ="Gefahr"
                @click="handleDelete(scope.$index, scope.row)">Löschen</el-button>
            </Vorlage>
        </el-Tabellenspalte>
    </el-Tabelle>
    <el-pagination
      :hide-on-single-page="AufEinzelnerSeiteausblenden"
      Klasse="Seitenumbruch"
      @size-change="Größenänderungsgriff"
      @current-change="AktuelleÄnderung handhaben"
      :current-page="aktuelleSeite"
      :Seitengrößen="[10, 20, 30, 40]"
      :page-size="Seitengröße"
      Layout = "Gesamt, Größen, Zurück, Pager, Weiter, Jumper"
      :total="Gesamtzahl">
    </el-pagination>
    <el-dialog title="Benutzerinformationen" v-model="dialogFormVisible">
        <el-form :model="form">
            <el-form-item label="Benutzername" :label-width="formLabelWidth">
                <el-input v-model="form.username" autocomplete="off"></el-input>
            </el-form-item>
            <el-form-item label="Passwort" :label-width="formLabelWidth">
                <el-input v-model="form.password" autocomplete="off"></el-input>
            </el-form-item>
        </el-form>
        <Vorlage #Fußzeile>
            <span class="dialog-footer">
                <el-button @click="dialogFormVisible = false">Abbrechen</el-button>
                <el-button type="primary" @click="confirmUser">Bestätigen</el-button>
            </span>
        </Vorlage>
    </el-dialog>
  </div>
</Vorlage>

<Skript>
importiere { ref, berechnet } von 'vue'
API importieren aus '../../../api/index'
importiere { ElMessage, ElMessageBox } von 'element-plus'

Standard exportieren {
  aufstellen () {
    let status = ''
    let userId = null
    const formLabelWidth = ref('120px')

    // Benutzerliste abrufen const tableData = ref([])
    asynchrone Funktion getList (Parameter) {
      const res = warte auf api.getUserList(params)
      wenn (res.data.success) {
        tableData.value = res.data.data.userList
        totalCount.value = res.data.data.count
        Suchwert = ''
      } anders {
        ElMessage.error('Benutzerliste konnte nicht abgerufen werden:' + res.data.msg)
      }
    }
    getList()

    Konstante Form = ref({
      Benutzername: '',
      Passwort: ''
    })

    const dialogFormVisible = ref(false)

    // Benutzerinformationen übermitteln async function confirmUser () {
      // Überprüfen Sie, ob die Informationen vollständig sind, wenn (!(form.value.username && form.value.password)) {
        ElMessage.error('Unvollständige Formularinformationen')
        zurückkehren
      }
      Schalter (Status) {
        Fall 'erstellen':
          Benutzer erstellen(Formular.Wert)
          brechen
        Fall 'Bearbeiten':
          updateUser(Benutzer-ID, Formularwert)
          brechen
      }
    }

    // Benutzer hinzufügen asynchrone Funktion handleCreate () {
      form.value = {
        Benutzername: '',
        Passwort: ''
      }
      dialogFormVisible.value = true
      Status = "Erstellen"
    }
    // Benutzerinformationen hinzufügen async function createUser (params) {
      const res = warte auf api.createUser(params)
      wenn (res.data.success) {
        getList()
        ElMessage.success({
          Meldung: „Erfolgreich hinzugefügt“,
          Typ: "Erfolg"
        })
        dialogFormVisible.value = false
      } anders {
        ElMessage.error('Hinzufügen fehlgeschlagen:' + res.data.msg)
      }
    }

    // Benutzer bearbeiten asynchrone Funktion handleEdit (Index, Zeile) {
      console.log(Index, Zeile)
      dialogFormVisible.value = true
      Status = "Bearbeiten"
      form.value.username = row.username
      form.value.password = row.password
      Benutzer-ID = Zeile.ID
    }
    // Benutzerinformationen ändern async function updateUser (id, params) {
      const res = warte auf api.updateUser(id, params)
      wenn (res.data.success) {
        ElMessage.success({
          Meldung: 'Änderung erfolgreich',
          Typ: "Erfolg"
        })
        getList()
        dialogFormVisible.value = false
      } anders {
        ElMessage.error('Änderung fehlgeschlagen: ' + res.data.msg)
      }
    }

    // Benutzer löschen const handleDelete = async (index, row) => {
      ElMessageBox.confirm('Dieser Vorgang löscht den Benutzer dauerhaft. Möchten Sie fortfahren?', 'Prompt', {
        confirmButtonText: 'Bestätigen',
        cancelButtonText: 'Abbrechen',
        Typ: "Warnung"
      }).dann(async () => {
        warte auf delUser(row.id)
      }).catch(() => {
        ElMessage({
          Typ: "Info",
          Nachricht: ‚Gelöscht‘
        })
      })
    }
    // Benutzerinformationen löschen async function delUser (id) {
      const res = warte auf api.delUser(id).
      wenn (res.data.success) {
        getList()
        ElMessage.success({
          Typ: "Erfolg",
          Nachricht: „Erfolgreich gelöscht!“
        })
      } anders {
        ElMessage.error('Löschen fehlgeschlagen: ' + res.data.msg)
      }
    }

    // Benutzer suchen const search = ref('')
    asynchrone Funktion searchUser () {
      aktuellerSeitenwert = 1
      Seitengröße.Wert = 10
      wenn (Suchwert === '') {
        getList({ Seitenindex: aktuelleSeite.Wert, Seitengröße: Seitengröße.Wert })
        zurückkehren
      }
      aktuelleSeite.val = 1
      const res = warte auf api.findUserByUsername({ Benutzername: Suchwert })
      wenn (res.data.success) {
        tableData.value = res.data.data.userList
        ElMessage.success({
          Meldung: 'Suche erfolgreich',
          Typ: "Erfolg"
        })
      } anders {
        ElMessage.error('Änderung fehlgeschlagen: ' + res.data.msg)
      }
    }

    // Seitenbezogen const totalCount = ref(0)
    const aktuelleSeite = ref(1)
    const Seitengröße = ref(10)
    Funktion handleSizeChange (Wert) {
      Seitengröße.Wert = Wert
      getList({ Seitenindex: aktuelleSeite.Wert, Seitengröße: Wert })
    }
    Funktion handleCurrentChange (Wert) {
      aktuelleSeite.Wert = Wert
      getList({ Seitenindex: Wert, Seitengröße: Seitengröße.Wert })
    }
    // Blende das Paging-Plugin aus, wenn mehr als eine Seite vorhanden ist. const hideOnSinglePage = computed(() => {
      gibt totalCount.value <= 10 zurück
    })

    zurückkehren {
      Tabellendaten,
      suchen,
      DialogFormSichtbar,
      bilden,
      Formlabelbreite,
      Benutzer erstellen,
      Griff
      handleDelete,
      Benutzer bestätigen,
      GriffErstellen,
      Suchbenutzer,
      aktuelleSeite,
      Gesamtanzahl,
      Größenänderung des Griffs,
      Aktuelle Änderung behandeln,
      Seitengröße,
      AufEinzelseiteausblenden
    }
  }
}
</Skript>

<style lang="scss" scoped>
    .Benutzer-Wrap{
        Breite: 100 %;
        Mindestbreite: 500px;
        .erstellen-btn{
            Rand unten: 10px;
            Anzeige: Flex;
            Inhalt ausrichten: Flex-Ende;
        }
        .Seitenumbruch{
            Rand oben: 10px;
        }
    }
</Stil>

Dies ist das Ende dieses Artikels über die Schritte zum Erstellen des Projekts vite+vue3+element-plus. Weitere relevante Inhalte zum Erstellen von vite vue3+ElementPlus finden Sie in früheren Artikeln auf 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:
  • Vite erstellt Projekte und unterstützt Micro-Frontends
  • Dieser Artikel zeigt Ihnen, was Vite mit der Anfrage des Browsers macht
  • Vite+Electron zum schnellen Erstellen von VUE3-Desktopanwendungen
  • So fügen Sie Vite-Unterstützung zu alten Vue-Projekten hinzu
  • Vite2.0 Fallstricke
  • Vue3.0+vite2 implementiert dynamisches asynchrones Lazy Loading von Komponenten
  • Implementierung von vite+vue3.0+ts+element-plus zum schnellen Erstellen eines Projekts
  • Lernen Sie die Prinzipien von Vite

<<:  Detailliertes Tutorial zur Installation von Docker und Nvidia-Docker unter Ubuntu 16.04

>>:  Detaillierte Erklärung zur Implementierung des sekundären Caches mit MySQL und Redis

Artikel empfehlen

Schritte zum Übertragen des neuen Kernels auf das Linux-System

1. Laden Sie das Ubuntu16.04-Image und den entspr...

IDEA verwendet das Docker-Plugin (Tutorial für Anfänger)

Inhaltsverzeichnis veranschaulichen 1. Aktivieren...

Ein Beispiel für die Implementierung eines adaptiven Quadrats mit CSS

Die traditionelle Methode besteht darin, ein Quad...

Detaillierte Beschreibung allgemeiner Ereignisse und Methoden von HTML-Text

Veranstaltungsbeschreibung onactivate: Wird ausgel...

Einführung in die Verwendung von Unicode-Zeichen in Webseiten (&#, \u usw.)

Die ersten Computer konnten nur ASCII-Zeichen ver...

ElementUI implementiert kaskadierenden Selektor

In diesem Artikelbeispiel wird der spezifische Co...

Webdesign-Tutorial (5): Visuelles Webdesign

<br />Vorheriger Artikel: Webdesign-Tutorial...

Docker-Bereitstellung von Implementierungsschritten für Flask-Anwendungen

1. Zweck Schreiben Sie lokal eine Flask-Anwendung...

HTML-Tabellen-Tag-Tutorial (25): vertikales Ausrichtungsattribut VALIGN

In vertikaler Richtung können Sie die Zeilenausri...

Detaillierte Erklärung gängiger Vorlagenbefehle in docker-compose.yml-Dateien

Hinweis: Beim Schreiben der Datei docker-compose....

Docker-Bereinigungsumgebungsvorgang

Beginnen Sie vorsichtig mit der Reinigung! Auflis...

Einige Details zu Semikolons in JavaScript

Vorwort Semikolons sind in JavaScript optional un...