NachfragehintergrundIn der Marktberichtsliste werden zwei Arten von Berichten angezeigt: kostenlose Berichte und kostenpflichtige Berichte. Benutzer können kostenlose Berichte direkt anzeigen, während kostenpflichtige Berichte erst angezeigt werden können, nachdem Benutzer sie gekauft haben. Gedankenanalyse
UI-AnzeigeSo sieht das Zahlungs-Popup-Fenster aus, wenn es nicht abgelaufen ist. Das Zahlungs-Popup-Fenster läuft wie folgt ab Erste SchritteDa die Zahlungsfunktion eine öffentliche Funktion des Projekts ist, kapseln wir sie in einer separaten Komponente, sodass andere Module sie bei ihrer Verwendung als Unterkomponente einführen können. 1. Schreiben Sie eine Zahlungskomponentenvorlage Nachfolgend finden Sie den spezifischen Quellcode der Vorlage. Da der Stil nicht im Mittelpunkt unserer Betrachtung steht, wird der Stilcode nicht angezeigt. Sie können ihn bei Bedarf hinzufügen. <Vorlage> <div> <el-dialog Klasse = "Dialog-Bezahlung" Titel="" :visible.sync="dialogSichtbar" :anzeigen-schließen="false" @close="Zahlungsvorgang schließen" > <div Klasse="Inhalt"> <p class="tip">{{ zahlen.title }}</p> <p class="Tipp"> Zahlungsbetrag: <span class="small">¥</span ><span class="large">{{ Geld bezahlen }}</span> </p> <Bild Klasse="Bild" :style="{ Deckkraft: btnDisabled ? 1 : 0.3 }" :src="zahlen.url" /> <el-Schaltfläche Klasse="btn" :Klasse="btnDisabled ? 'deaktiviert' : ''" Typ="primär" :deaktiviert="btnDeaktiviert" @click="Code aktualisieren" >{{ btnText }}</el-button > </div> </el-dialog> </div> </Vorlage> 2. JS-Code und Beschreibung der Zahlungskomponente 1. Überwachen Sie über das Props-Attribut, ob das Zahlungs-Popup-Fenster in der untergeordneten Komponente angezeigt wird, und empfangen Sie den von der übergeordneten Komponente in der untergeordneten Komponente übergebenen Wert. Verwenden Sie watch, um pay.show zu überwachen. Das Zahlungs-Popup-Fenster wird nur angezeigt, wenn dies zutrifft, und die Methode zur Überwachung der Zahlungsergebnisse wird nach 5 Sekunden Anzeige ausgeführt. betrachten: 'zahlen.show': { handler(Wert) { wenn (Wert) { this.dialogVisible = this.pay.show setTimeout(diesen.handleReportPayNotify(), 5000) } }, sofort: wahr } }, 2. Der QR-Code beginnt mit dem Countdown. Der QR-Code startet einen 60-Sekunden-Countdown. Wenn 0 Sekunden erreicht sind, klicken Sie auf „Aktualisieren“, um den QR-Code erneut abzurufen. Der Countdown wird fortgesetzt. Wenn zu diesem Zeitpunkt 0 Sekunden erreicht sind, wird das Popup-Fenster für die Zahlung geschlossen und der Benutzer wird aufgefordert, zu lange zu warten und die Zahlung erneut zu starten. CountDown-Handle() { wenn (diese.Sekunde == 1) { wenn (diese.aktualisieren) { diese.Sekunde = 60 this.btnDisabled = falsch this.btnText = „Klicken Sie auf „Aktualisieren“, um den QR-Code erneut zu erhalten.“ wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } } anders { dies.$emit('closePay', { Typ: 'Fehler' }) Intervall löschen(dieser.Timer) this.$message.warning('Wartezeit ist zu lang, bitte Zahlung erneut einleiten.') } } anders { diese.zweite-- this.btnDisabled = wahr this.btnText = `${this.second} Sekunden bis zum Ablauf des QR-Codes` dies.downTimer = setTimeout(() => { dies.handleCountDown() }, 1000) } }, 3. Schließen Sie das Popup-Fenster zur Zahlungsüberwachung handleClosePay() { wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } wenn (dieser.downTimer) { Zeitüberschreitung löschen(diesen.downTimer) } dies.$emit('closePay', { Typ: 'Fehler' }) this.$message.warning('Sie haben die Zahlung storniert') }, 4. Es gibt zwei Arten von Rückrufergebnissen für die Zahlungsüberwachung. Wenn die Überwachung im normalen Bereich erfolgreich ist, wird die von der übergeordneten Komponente übergebene Funktion ausgeführt und der Timer gelöscht. Wenn das entsprechende Ergebnis nicht erreicht wird, wenn die Anzahl der Überwachungszeiten 12 erreicht, wird das Popup-Fenster für die Zahlung geschlossen und der Benutzer wird aufgefordert, die Wartezeit zu lang zu machen. Bitte initiieren Sie die Zahlung erneut und löschen Sie den Timer. handleReportPayNotify() { sei num = 0 dieser.timer = setzeInterval(() => { Zahl++ dies.pay.fn().then(res => { wenn (res.status == 111111) { dies.$emit('closePay', { Typ: 'Erfolg' }) Intervall löschen(dieser.Timer) } }) wenn (Zahl == 12) { dies.$emit('closePay', { Typ: 'Fehler' }) Intervall löschen(dieser.Timer) this.$message.warning('Wartezeit ist zu lang, bitte Zahlung erneut einleiten.') } }, 5000) } 5. Löschen Sie den Timer, wenn die Zahlungskomponente zerstört wird. Dieser Schritt wird leicht übersehen, muss aber durchgeführt werden. Löschen Sie den Timer rechtzeitig, wenn die Komponente zerstört wird. vorZerstören() { wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } wenn (dieser.downTimer) { Zeitüberschreitung löschen(diesen.downTimer) } } } Anhang: Vollständiger Quellcode der Komponente JS<Skript> Standard exportieren { Name: 'WechatPay', Requisiten: { bezahlen: Objekt }, Daten() { zurückkehren { dialogVisible: false, btnDisabled: wahr, btnText: '', Sekunde: 60, Timer: null, aktualisieren: true } }, betrachten: 'zahlen.show': { handler(Wert) { wenn (Wert) { this.dialogVisible = this.pay.show setTimeout(diesen.handleReportPayNotify(), 5000) } }, sofort: wahr } }, montiert() { dies.handleCountDown() }, Methoden: { /** * @description: QR-Code aktualisieren*/ handleRefreshCode() { dies.$bus.$emit('refreshCode') dies.handleCountDown() this.handleReportPayNotify() this.refresh = falsch }, /** * @Beschreibung: QR-Code-Countdown*/ CountDown-Handle() { wenn (diese.Sekunde == 1) { wenn (diese.aktualisieren) { diese.Sekunde = 60 this.btnDisabled = falsch this.btnText = „Klicken Sie auf „Aktualisieren“, um den QR-Code erneut zu erhalten.“ wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } } anders { dies.$emit('closePay', { Typ: 'Fehler' }) Intervall löschen(dieser.Timer) this.$message.warning('Wartezeit ist zu lang, bitte Zahlung erneut einleiten.') } } anders { diese.zweite-- this.btnDisabled = wahr this.btnText = `${this.second} Sekunden bis zum Ablauf des QR-Codes` dies.downTimer = setTimeout(() => { dies.handleCountDown() }, 1000) } }, /** * @descripttion: Warten Sie, bis das Popup-Fenster zur Zahlung geschlossen wird*/ handleClosePay() { wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } wenn (dieser.downTimer) { Zeitüberschreitung löschen(diesen.downTimer) } dies.$emit('closePay', { Typ: 'Fehler' }) this.$message.warning('Sie haben die Zahlung storniert') }, /** * @description: Ergebnisse des Zahlungsrückrufs überwachen*/ handleReportPayNotify() { sei num = 0 dieser.timer = setzeInterval(() => { Zahl++ dies.pay.fn().then(res => { wenn (res.status == 111111) { dies.$emit('closePay', { Typ: 'Erfolg' }) Intervall löschen(dieser.Timer) } }) wenn (Zahl == 12) { dies.$emit('closePay', { Typ: 'Fehler' }) Intervall löschen(dieser.Timer) this.$message.warning('Wartezeit ist zu lang, bitte Zahlung erneut einleiten.') } }, 5000) } }, vorZerstören() { wenn (dieser.Timer) { Intervall löschen(dieser.Timer) } wenn (dieser.downTimer) { Zeitüberschreitung löschen(diesen.downTimer) } } } </Skript> Damit ist dieser Artikel über das Implementierungsbeispiel der QR-Code-Zahlung im Vue-Projekt (mit Demo) abgeschlossen. Weitere relevante Inhalte zur Vue-QR-Code-Zahlung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Beispielanalyse der MySQL-Variablenverwendung [Systemvariablen, Benutzervariablen]
>>: So erstellen Sie schnell Ihren eigenen Server - ausführliches Tutorial (Java-Umgebung)
Name Geben Sie einen Namen für das Tag an. Format...
1. Abgerundete Ecken Heutige Webdesigns halten stä...
eins. Vorwort <br />Sie werden diese Art von...
In diesem Artikel werden anhand von Beispielen di...
1. Zwei Eigenschaften des Tabellen-Resets: ①borde...
In diesem Artikelbeispiel wird der spezifische JS...
Definition Calcite kann SQL vereinheitlichen, ind...
Offizielle Website https://cli.vuejs.org/en/guide...
Drei Funktionen: 1. Automatische vertikale Zentrie...
Vorwort Ich habe vor Kurzem MySQL 5.7 installiert...
In diesem Artikelbeispiel wird der spezifische Co...
Gestern wollte ich a:visited verwenden, um die Fa...
Inhaltsverzeichnis Warum den Lebenszyklus versteh...
Vorwort Jeder, der JavaScript gelernt hat, muss s...
Überblick Dieser Artikel ist ein Skript zum autom...