système_de_gestion
Introduction
Il s'agit d'un système de gestion d'arrière-plan basé sur koa2
Utilisez jQuery
comme framework JS frontal Utilisez bootstrap
comme framework CSS Utilisez pug
/ jade
et handlebars
comme modèle de page HTML Utilisez PostgreSql
pour stocker les données commerciales Utilisez mongodb
pour stocker session
Utilisation Bookshelf
+ Knex
comme ORM
et Query Builder
Utilisez Sentry
comme plate-forme pour collecter des commentaires sur les informations d'erreur. Utilisez AJAX
pour traiter les requêtes frontales. Utilisez la bibliothèque CronJob
pour terminer l'exécution des tâches planifiées.
Pour la structure des répertoires et la configuration de Babel, veuillez vous référer à https://github.com/17koa/koa-demo
Le lien d'origine semble avoir été supprimé. C'est la version que j'ai forkée https://github.com/liuyueyi1995/koa2-demo.
Le code frontal du site Web provient d'un de mes projets précédents https://github.com/liuyueyi1995/oa
tâches de base
- Un enregistrement de connexion d'administrateur backend
- B Gestion des informations utilisateur
- Gestion des rôles d'utilisateur C
- D Gestion organisationnelle
- Gestion de projet électronique
- F Afficher le contenu obtenu par requête et recherche via la pagination back-end +
AJAX
- G Création d'utilisateurs temporaires et attribution et recyclage des rôles temporaires
- Gestion des logs H
exhaustivité
- La structure de base de MVC est terminée ;
- La tâche A est terminée, y compris l'inscription, la connexion et la lecture et l'écriture de la session ;
- La tâche B est terminée, y compris la requête d'informations sur l'utilisateur, la recherche floue, l'ajout, la suppression, la modification des informations de base et la modification du mot de passe ;
- La tâche C est terminée, y compris la requête multi-tables, la recherche floue, le traitement des menus déroulants en cascade, l'ajout et la suppression d'informations ;
- La tâche D est terminée, y compris la requête d'informations institutionnelles, la recherche floue, l'ajout, la suppression et la modification ;
- La tâche E est terminée, y compris la requête d'informations sur le projet, la recherche floue, l'ajout, la suppression et la modification ;
- La tâche F est terminée en jugeant si la zone de recherche a du contenu lorsque l'événement de clic sur le bouton de pagination est déclenché, l'ensemble de résultats renvoyé par l'arrière-plan est déterminé ;
- La tâche G est terminée. En divisant les utilisateurs en utilisateurs internes et externes, en utilisant différentes méthodes de génération de mots de passe, en ajoutant des attributs de délai d'expiration aux rôles, l'arrière-plan nettoie régulièrement les informations sur les rôles expirés ;
- La tâche G est terminée, y compris l'affichage du journal et la recherche floue ;
- La forme de présentation du formulaire a été améliorée, le menu déroulant a été modifié, un contrôle de date a été ajouté, et la saisie des valeurs booléennes se fait sous forme de radio ;
- Les deux fonctions de connexion utilisateur et de gestion des données ont été associées ;
- La distinction entre les rôles externes et les rôles internes est complétée, et la fixation des délais des rôles est complétée ;
À FAIRE
- La requête de dates, de nombres et de valeurs booléennes doit être améliorée (par exemple : horodatage, booléen) ;
- La vérification des saisies des utilisateurs doit être améliorée (par exemple : email, téléphone) ;
- Améliorer le degré de réutilisation du code ;
Se concentrer
Le fichier config.js
contenant des informations sensibles a été supprimé du dépôt et doit être ajouté lors de son utilisation :
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
Problèmes
- Il y a un bug dans le menu en cascade Initialement, la liste
site
ne peut pas être affichée sans changer type
.- Résolu.
- Cela devrait être un problème avec
onchange
. - En ajoutant une valeur nulle par défaut au menu déroulant
type
, forcez l'utilisateur à la modifier.
- Après modification de la base de données, la valeur
updated_at
n'a pas changé.- Résolu.
- Ajoutez simplement
hasTimestamps:true
lors de la définition model
.
- Après modification de la base de données, l'ordre de la liste sera perturbé.
- Résolu.
- Utilisez
orderBy
pour trier les résultats de la recherche avant que la base de données ne les renvoie.
- Sur la page de gestion des rôles, lorsque la valeur du site est vide, l'ajout peut parfois échouer.
- Résolu.
- Lorsque la
null
du front-end est renvoyée au back-end, elle devient une chaîne vide, qui entre en conflit avec integer
de la clé étrangère.
- Après la pagination, si le contenu suivant est modifié, il reviendra à la première page une fois la modification réussie.
- Pas résolu .
- Cela devrait être un problème
reload
.
- Après la pagination, si les résultats de la recherche comportent plusieurs pages de contenu, cliquer sur la deuxième page reviendra à la deuxième page des résultats d'origine.
- Résolu.
- Étant donné qu'il n'y a désormais qu'un seul traitement de pagination
AJAX
, si vous souhaitez que les résultats de la recherche soient affichés sous forme de pagination, vous devez ajouter un autre état. - Ajoutez un jugement basé sur la pagination originale,
- S'il y a du contenu dans la zone de recherche à ce moment, la base de données sera interrogée avec ce contenu et le contenu de la page correspondante sera renvoyé ;
- Si le champ de recherche est vide à ce moment, le contenu de la page correspondant aux données originales sera renvoyé.
- Après la recherche, le nombre de pages dans le composant de pagination est incorrect. Par exemple, les résultats d'origine comportent 5 pages, mais les résultats de la recherche n'ont que 2 pages, mais 5 boutons de numéro de page sont toujours affichés.
- Résolu.
- Obtenez le nombre de résultats après la recherche et redessinez le bouton de pagination.
- Lors d'une recherche multiple, le nombre de pages dans le composant de pagination est incorrect. Par exemple, le premier résultat de recherche comporte 2 pages et le deuxième résultat de recherche comporte 3 pages, mais seuls 2 boutons de numéro de page sont toujours affichés.
- Résolu.
- Obtenez le contenu du champ de recherche en temps réel et actualisez la page lorsque son contenu devient vide.
- Lors de l’utilisation du modèle
handlebars
, l’horodatage n’est pas analysé correctement.- Résolu.
- Utilisez un
helper
personnalisé pour analyser les horodatages.
- Si vous n'êtes pas connecté, la modification de l'URL ignorera la connexion et fera fonctionner directement la base de données.
- Résolu.
- Avant que chaque requête
get
ne soit renvoyée, le jugement session
est ajouté. Si session
est vide, elle passera à login
.
- La suppression des utilisateurs internes nécessite une jointure. La suppression de pgsql ne prend en charge que
using
, et Bookshelf ne prend pas en charge using
.- Résolu.
- Utilisez plutôt
knex
pour compléter la requête directement.
- valeur du champ date/heure hors plage
- Résolu.
- Bien que la base de données de test locale et la base de données Alibaba Cloud soient toutes deux pgsql9.4, les mécanismes de révision sont différents.
- La discrimination des dates d'Alibaba Cloud semble incapable d'apparaître le matin et l'après-midi (AM/PM)
- Par conséquent, une méthode
format
a été ajoutée à la classe Date
pour le formatage des dates.
- Basculer entre les résultats de recherche et tous les résultats.
- Résolu.
- La première méthode consistait à utiliser la surveillance en temps réel. Lorsque le champ de recherche est vide, la page est actualisée, mais cela n'est pas valide sur certains navigateurs et systèmes d'exploitation ;
- Par conséquent, utilisez plutôt la méthode de lien dans la bannière pour donner un lien depuis les résultats de recherche vers tous les résultats.
- Le format de date longue prend trop de pages.
- Résolu.
- Sur le backend, gérez la date en la formatant, en la simplifiant.
- Si une erreur est signalée lors du fonctionnement de la base de données en arrière-plan, le frontal ne recevra pas de retour d'informations pertinentes.
- Résolu.
- Ajoutez un bloc then().catch() au backend pour porter des jugements d'erreur.
- L'étape suivante consiste à analyser le code d'erreur spécifique et à informer le front-end des informations détaillées.
- Lors de l'ajout de rôles, les utilisateurs portant le même nom ne peuvent pas être distingués.
- Résolu.
- Distinguez les utilisateurs portant le même nom en indiquant leur adresse e-mail après le nom d'utilisateur.