Managementsystem
Einführung
Dies ist ein Hintergrundverwaltungssystem, das auf koa2 basiert
Verwenden Sie jQuery als Front-End-JS-Framework. Verwenden Sie bootstrap als CSS-Framework. Verwenden Sie pug / jade und handlebars als HTML-Seitenvorlage. Verwenden Sie PostgreSql zum Speichern von Geschäftsdaten. Verwenden Sie mongodb zum Speichern session
Verwendung von Bookshelf + Knex als ORM und Query Builder
Verwenden Sie Sentry als Plattform zum Sammeln von Feedback zu Fehlerinformationen. Verwenden Sie AJAX um Front-End-Anfragen zu verarbeiten. Verwenden Sie die CronJob -Bibliothek, um die Ausführung geplanter Aufgaben abzuschließen.
Informationen zur Verzeichnisstruktur und Babel-Konfiguration finden Sie unter https://github.com/17koa/koa-demo
Der ursprüngliche Link scheint gelöscht worden zu sein. Dies ist die Version, die ich geforkt habe: https://github.com/liuyueyi1995/koa2-demo
Der Front-End-Code der Website stammt aus einem früheren Projekt von mir https://github.com/liuyueyi1995/oa
Grundaufgaben
- Eine Anmelderegistrierung für den Backend-Administrator
- B Benutzerinformationsverwaltung
- C-Benutzerrollenverwaltung
- D Organisationsmanagement
- E-Projektmanagement
- F Zeigen Sie den durch Abfrage erhaltenen Inhalt an und suchen Sie über Back-End-Paging +
AJAX - G Erstellung temporärer Benutzer sowie Zuweisung und Wiederverwendung temporärer Rollen
- H-Protokollverwaltung
Vollständigkeit
- Die grundlegende MVC-Struktur wurde fertiggestellt.
- Aufgabe A wurde abgeschlossen, einschließlich Registrierung, Anmeldung sowie Lesen und Schreiben der Sitzung.
- Aufgabe B wurde abgeschlossen, einschließlich Benutzerinformationsabfrage, Fuzzy-Suche, Hinzufügen, Löschen, Ändern grundlegender Informationen und Passwortänderung;
- Aufgabe C wurde abgeschlossen, einschließlich Abfrage mehrerer Tabellen, Fuzzy-Suche, Verarbeitung kaskadierender Dropdown-Menüs sowie Hinzufügen und Löschen von Informationen.
- Aufgabe D wurde abgeschlossen, einschließlich der Abfrage institutioneller Informationen, der Fuzzy-Suche, des Hinzufügens, Löschens und Änderns.
- Aufgabe E wurde abgeschlossen, einschließlich der Abfrage von Projektinformationen, der Fuzzy-Suche, des Hinzufügens, Löschens und Änderns.
- Aufgabe F wurde abgeschlossen, indem beurteilt wurde, ob das Suchfeld Inhalt hat, wenn das Klickereignis für die Paging-Schaltfläche ausgelöst wird, und die vom Hintergrund zurückgegebene Ergebnismenge bestimmt wird.
- Aufgabe G wurde abgeschlossen, indem Benutzer in interne und externe Benutzer unterteilt, verschiedene Methoden zur Kennwortgenerierung verwendet und Ablaufzeitattribute zu Rollen hinzugefügt wurden. Der Hintergrund bereinigt regelmäßig abgelaufene Rolleninformationen.
- Aufgabe G wurde abgeschlossen, einschließlich Protokollanzeige und Fuzzy-Suche;
- Die Darstellungsform des Formulars wurde verbessert, das Dropdown-Menü wurde geändert, eine Datumssteuerung wurde hinzugefügt und die Eingabe boolescher Werte erfolgt in Form eines Radios;
- Die beiden Funktionen Benutzeranmeldung und Datenverwaltung wurden miteinander verknüpft;
- Die Unterscheidung zwischen externen Rollen und internen Rollen wurde abgeschlossen und die Fristensetzung der Rollen wurde abgeschlossen;
TODOs
- Die Abfrage nach Datumsangaben, Zahlen und booleschen Werten muss verbessert werden (z. B. Zeitstempel, boolescher Wert);
- Die Überprüfung der Benutzereingaben muss verbessert werden (z. B. E-Mail, Telefon);
- Verbessern Sie den Grad der Code-Wiederverwendung.
Fokus
Die Datei config.js mit vertraulichen Informationen wurde aus dem Repo gelöscht und muss bei Verwendung hinzugefügt werden:
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
Probleme
- Es liegt ein Fehler im kaskadierenden Menü vor. Die
site -Liste kann zunächst nicht angezeigt werden, ohne type zu ändern.- Gelöst.
- Es sollte ein Problem mit
onchange sein. - Durch Hinzufügen eines Standard-Nullwerts zum
type -Dropdown-Menü können Sie den Benutzer dazu zwingen, ihn zu ändern.
- Nach der Änderung der Datenbank hat sich der Wert
updated_at nicht geändert.- Gelöst.
- Fügen Sie einfach
hasTimestamps:true hinzu, wenn Sie model definieren.
- Nach einer Änderung der Datenbank wird die Reihenfolge der Liste gestört.
- Gelöst.
- Verwenden Sie
orderBy um die Suchergebnisse zu sortieren, bevor die Datenbank sie zurückgibt.
- Wenn der Site-Wert auf der Rollenverwaltungsseite leer ist, schlägt das Hinzufügen gelegentlich fehl.
- Gelöst.
- Wenn der Front-End
null an das Back-End zurückgegeben wird, wird er zu einer leeren Zeichenfolge, die mit integer des Fremdschlüssels in Konflikt steht.
- Wenn nach dem Paging der nachfolgende Inhalt geändert wird, springt er nach erfolgreicher Änderung zur ersten Seite zurück.
- Nicht gelöst .
- Es sollte ein
reload sein.
- Wenn die Suchergebnisse nach dem Umblättern mehrere Inhaltsseiten umfassen, kehren Sie durch Klicken auf die zweite Seite zur zweiten Seite der ursprünglichen Ergebnisse zurück.
- Gelöst.
- Da es jetzt nur noch eine Paging-
AJAX Verarbeitung gibt, müssen Sie einen weiteren Status hinzufügen, wenn Sie möchten, dass die Suchergebnisse im Paging angezeigt werden. - Fügen Sie ein Urteil basierend auf der Originalseite hinzu.
- Befindet sich zu diesem Zeitpunkt Inhalt im Suchfeld, wird die Datenbank mit diesem Inhalt abgefragt und der Inhalt der entsprechenden Seite zurückgegeben;
- Wenn das Suchfeld zu diesem Zeitpunkt leer ist, wird der Inhalt der Seite zurückgegeben, der den Originaldaten entspricht.
- Nach der Suche ist die Anzahl der Seiten in der Paging-Komponente falsch. Die ursprünglichen Ergebnisse umfassen beispielsweise 5 Seiten, die Suchergebnisse umfassen jedoch nur 2 Seiten, es werden jedoch weiterhin 5 Seitenzahlschaltflächen angezeigt.
- Gelöst.
- Ermitteln Sie die Anzahl der Ergebnisse nach der Suche und zeichnen Sie die Paginierungsschaltfläche neu.
- Bei mehrmaliger Suche ist die Anzahl der Seiten in der Paging-Komponente falsch. Beispielsweise hat das erste Suchergebnis 2 Seiten und das zweite Suchergebnis 3 Seiten, aber es werden immer noch nur 2 Seitenzahlschaltflächen angezeigt.
- Gelöst.
- Rufen Sie den Inhalt des Suchfelds in Echtzeit ab und aktualisieren Sie die Seite, wenn der Inhalt leer ist.
- Bei Verwendung der
handlebars wird der Zeitstempel falsch analysiert.- Gelöst.
- Verwenden Sie einen benutzerdefinierten
helper , um Zeitstempel zu analysieren.
- Wenn Sie nicht angemeldet sind, wird beim Ändern der URL die Anmeldung übersprungen und die Datenbank direkt bedient.
- Gelöst.
- Bevor jede
get -Anfrage zurückgegeben wird, wird die session hinzugefügt. Wenn session leer ist, wird zur login gesprungen.
- Zum Löschen interner Benutzer ist ein Beitritt erforderlich. Das Löschen von pgsql unterstützt nur
using von und Bookshelf unterstützt using nicht.- Gelöst.
- Verwenden Sie stattdessen
knex , um die Abfrage direkt abzuschließen.
- Datums-/Uhrzeitfeldwert liegt außerhalb des gültigen Bereichs
- Gelöst.
- Obwohl die lokale Testdatenbank und die Alibaba Cloud-Datenbank beide pgsql9.4 sind, sind die Überprüfungsmechanismen unterschiedlich.
- Die Datumsunterscheidung von Alibaba Cloud scheint morgens und nachmittags (AM/PM) nicht angezeigt zu werden.
- Daher wurde der
Date Klasse eine format zum Formatieren von Datumsangaben hinzugefügt.
- Zwischen Suchergebnissen und allen Ergebnissen wechseln.
- Gelöst.
- Die früheste Methode bestand darin, die Echtzeitüberwachung zu verwenden. Wenn das Suchfeld leer ist, wird die Seite aktualisiert. Dies ist jedoch bei einigen Browsern und Betriebssystemen ungültig.
- Nutzen Sie daher stattdessen die Methode der Verlinkung im Banner, um einen Link von den Suchergebnissen zu allen Ergebnissen bereitzustellen.
- Das lange Datumsformat nimmt zu viele Seiten ein.
- Gelöst.
- Behandeln Sie das Datum im Backend, indem Sie es formatieren und vereinfachen.
- Wenn im Hintergrund-Datenbankbetrieb ein Fehler gemeldet wird, erhält das Frontend keine Rückmeldung über relevante Informationen.
- Gelöst.
- Fügen Sie dem Backend einen Block then().catch() hinzu, um Fehlerbeurteilungen vorzunehmen.
- Der nächste Schritt besteht darin, den spezifischen Fehlercode zu analysieren und das Frontend über die detaillierten Informationen zu informieren.
- Beim Hinzufügen von Rollen können Benutzer mit demselben Namen nicht unterschieden werden.
- Gelöst.
- Unterscheiden Sie Benutzer mit demselben Namen, indem Sie nach dem Benutzernamen ihre E-Mail-Adresse angeben.