Commit c85f35205a0b585c30f8699cc01ec07ae34dbe91

Authored by Geoffrey PREUD'HOMME
1 parent d449eb6b

Modification des utilisateurs

Showing 3 changed files with 130 additions and 7 deletions   Show diff stats
@@ -92,7 +92,7 @@ @@ -92,7 +92,7 @@
92 </ul> 92 </ul>
93 </div> 93 </div>
94 <ul class="side-nav"> 94 <ul class="side-nav">
95 - <li><a>TODO</a></li> 95 + <todo></todo>
96 </ul> 96 </ul>
97 </div> 97 </div>
98 </nav> 98 </nav>
@@ -225,7 +225,7 @@ @@ -225,7 +225,7 @@
225 <div class="switch"> 225 <div class="switch">
226 <label> 226 <label>
227 Non 227 Non
228 - <input v-model="client.decouvert" type="checkbox" @click="decouvert(client.idCarte, client.decouvert, $event)"> 228 + <input v-model="client.decouvert" type="checkbox" @click="c_decouvert(client, $event)">
229 <span class="lever"></span> 229 <span class="lever"></span>
230 Oui 230 Oui
231 </label> 231 </label>
@@ -233,7 +233,7 @@ @@ -233,7 +233,7 @@
233 </li> 233 </li>
234 </ul> 234 </ul>
235 <h5>Transactions</h5> 235 <h5>Transactions</h5>
236 - <p>TODO</p> 236 + <todo></todo>
237 </div> 237 </div>
238 </li> 238 </li>
239 </ul> 239 </ul>
@@ -281,9 +281,60 @@ @@ -281,9 +281,60 @@
281 </div> 281 </div>
282 <div id="utilisateurs"> 282 <div id="utilisateurs">
283 <h4>Liste des utilisateurs</h4> 283 <h4>Liste des utilisateurs</h4>
  284 + <button @click="actuUtilisateurs">Rafraîchir</button>
  285 + <ul class="collapsible popout" data-collapsible="accordion">
  286 + <li v-for="utilisateur in utilisateurs">
  287 + <div class="collapsible-header">
  288 + <i class="material-icons" v-if="utilisateur.droit == 1">assignment_ind</i>
  289 + <i class="material-icons" v-if="utilisateur.droit == 2">perm_identity</i>
  290 + <i class="material-icons" v-if="utilisateur.droit == 3">supervisor_account</i>
  291 + {{ utilisateur.login }}
  292 + </div>
  293 + <div class="collapsible-body">
  294 + <h5>Changer de droit</h5>
  295 + <form @change="u_droit(utilisateur)">
  296 + <p>
  297 + <input :name="'droit_' + utilisateur.login" type="radio" :id="'droit_' + utilisateur.login + '_1'" v-model="utilisateur.droit" value="1"/>
  298 + <label :for="'droit_' + utilisateur.login + '_1'">BDE</label>
  299 + </p>
  300 + <p>
  301 + <input :name="'droit_' + utilisateur.login" type="radio" :id="'droit_' + utilisateur.login + '_2'" v-model="utilisateur.droit" value="2"/>
  302 + <label :for="'droit_' + utilisateur.login + '_2'">Bar</label>
  303 + </p>
  304 + <p>
  305 + <input :name="'droit_' + utilisateur.login" type="radio" :id="'droit_' + utilisateur.login + '_3'" v-model="utilisateur.droit" value="3"/>
  306 + <label :for="'droit_' + utilisateur.login + '_3'">Président</label>
  307 + </p>
  308 + </form>
  309 + <h5>Changer de mot de passe</h5>
  310 + <form @submit="u_mdp(utilisateur)">
  311 + <div class="input-field">
  312 + <i class="material-icons prefix">vpn_key</i>
  313 + <input type="password" name="mdp" v-model="utilisateur.mdp">
  314 + <label for="utilisateur.mdp">Mot de passe</label>
  315 + </div>
  316 + <button :disabled="!utilisateur.mdp">Changer de mot de passe</button>
  317 + </form>
  318 + <h5> Changer de carte </h5>
  319 + <form @submit="u_carte(utilisateur)">
  320 + <div class="input-field">
  321 + <i class="material-icons prefix">credit_card</i>
  322 + <input type="text" name="carte" length="8" v-model="utilisateur.idCarte" >
  323 + <label for="utilisateur.idCarte">Carte</label>
  324 + </div>
  325 + <button :disabled="!utilisateur.idCarte">Changer de carte</button>
  326 + </form>
  327 +
  328 + <h5>Transactions</h5>
  329 + <todo></todo>
  330 + </div>
  331 + </li>
  332 + </ul>
  333 + </div>
284 </div> 334 </div>
285 <div id="statistiques"> 335 <div id="statistiques">
286 <h4>Statistiques</h4> 336 <h4>Statistiques</h4>
  337 + <todo></todo>
287 </div> 338 </div>
288 </div> 339 </div>
289 </div> 340 </div>
@@ -12,10 +12,13 @@ var TRANSACTION_DUREE = 60 @@ -12,10 +12,13 @@ var TRANSACTION_DUREE = 60
12 var PEUT_NFC = false 12 var PEUT_NFC = false
13 13
14 // Préparation de l'interactivité 14 // Préparation de l'interactivité
  15 +function desactiverForms() {
  16 + $('form').submit(function() { return false });
  17 +}
15 $(function(){ 18 $(function(){
16 $('.button-collapse').sideNav(); 19 $('.button-collapse').sideNav();
17 $('.modal-trigger').leanModal() 20 $('.modal-trigger').leanModal()
18 - $('form').submit(function() { return false }); 21 + desactiverForms()
19 $('[name=idCarte]').characterCounter(); 22 $('[name=idCarte]').characterCounter();
20 }); 23 });
21 24
@@ -39,6 +42,7 @@ var app = new Vue({ @@ -39,6 +42,7 @@ var app = new Vue({
39 // Données 42 // Données
40 clients: [], 43 clients: [],
41 transactions: [], 44 transactions: [],
  45 + utilisateurs: [],
42 }, 46 },
43 methods: { 47 methods: {
44 // API 48 // API
@@ -84,6 +88,20 @@ var app = new Vue({ @@ -84,6 +88,20 @@ var app = new Vue({
84 } 88 }
85 }) 89 })
86 }, 90 },
  91 + actuUtilisateurs: function() {
  92 + var that = this
  93 + this.api("utilisateur/liste", {}, function(retour, donnees) {
  94 + switch(retour) {
  95 + case "ok":
  96 + that.utilisateurs = donnees.utilisateurs
  97 + break;
  98 +
  99 + default:
  100 + that.erreur(retour, donnees);
  101 + break;
  102 + }
  103 + })
  104 + },
87 105
88 // Affichage 106 // Affichage
89 toast: function(texte) { 107 toast: function(texte) {
@@ -120,15 +138,57 @@ var app = new Vue({ @@ -120,15 +138,57 @@ var app = new Vue({
120 })) 138 }))
121 that.toast(interieur); 139 that.toast(interieur);
122 }, 140 },
123 - decouvert: function(idCarte, decouvert, e) { 141 + c_decouvert: function(client, e) {
124 var that = this 142 var that = this
125 // Hack pour récupérer la vraie valeur (decouvert peut mais pas obligatoirement avoir la bonne valeur tel qu'implémenté dans le HTML actuellmenent) 143 // Hack pour récupérer la vraie valeur (decouvert peut mais pas obligatoirement avoir la bonne valeur tel qu'implémenté dans le HTML actuellmenent)
126 if (typeof(e) == 'object') { 144 if (typeof(e) == 'object') {
127 - decouvert = $(e.target).is(':checked') 145 + client.decouvert = $(e.target).is(':checked')
128 } 146 }
129 - this.api("client/decouvert", {idCarte: idCarte, decouvert: decouvert}, function(retour, donnees) { 147 + this.api("client/decouvert", {idCarte: client.idCarte, decouvert: client.decouvert}, function(retour, donnees) {
  148 + switch(retour) {
  149 + case "ok":
  150 + break;
  151 +
  152 + default:
  153 + that.erreur(retour, donnees);
  154 + break;
  155 + }
  156 + });
  157 + },
  158 + u_mdp: function(utilisateur) {
  159 + var that = this
  160 + this.api("utilisateur/mdp", {login: utilisateur.login, mdp: utilisateur.mdp}, function(retour, donnees) {
130 switch(retour) { 161 switch(retour) {
131 case "ok": 162 case "ok":
  163 + that.toast(utilisateur.login + " : mot de passe changé")
  164 + break;
  165 +
  166 + default:
  167 + that.erreur(retour, donnees);
  168 + break;
  169 + }
  170 + });
  171 + },
  172 + u_droit: function(utilisateur) {
  173 + var that = this
  174 + this.api("utilisateur/droit", {login: utilisateur.login, droit: utilisateur.droit}, function(retour, donnees) {
  175 + switch(retour) {
  176 + case "ok":
  177 + that.toast(utilisateur.login + " : droit changé")
  178 + break;
  179 +
  180 + default:
  181 + that.erreur(retour, donnees);
  182 + break;
  183 + }
  184 + });
  185 + },
  186 + u_carte: function(utilisateur) {
  187 + var that = this
  188 + this.api("utilisateur/carte", {login: utilisateur.login, idCarte: utilisateur.idCarte}, function(retour, donnees) {
  189 + switch(retour) {
  190 + case "ok":
  191 + that.toast(utilisateur.login + " : carte changée")
132 break; 192 break;
133 193
134 default: 194 default:
@@ -231,6 +291,14 @@ var app = new Vue({ @@ -231,6 +291,14 @@ var app = new Vue({
231 return minutes + ':' + (secondes < 10 ? '0' : '') + secondes 291 return minutes + ':' + (secondes < 10 ? '0' : '') + secondes
232 } 292 }
233 }, 293 },
  294 + components: {
  295 + 'todo': Vue.extend({template: '<div class="chip green"> Prochainement </div>'}),
  296 + },
  297 + watch: {
  298 + utilisateurs: function() {
  299 + desactiverForms()
  300 + }
  301 + }
234 }) 302 })
235 303
236 Vue.filter('date', function(timestamp) { 304 Vue.filter('date', function(timestamp) {
@@ -27,6 +27,7 @@ $tabs-bg-color: $primary-color !default; @@ -27,6 +27,7 @@ $tabs-bg-color: $primary-color !default;
27 27
28 // Permet le footer de se mettre toujours en bas 28 // Permet le footer de se mettre toujours en bas
29 body { 29 body {
  30 + overflow-y: scroll; // Toujours afficher la barre de défilment pour éviter les sautements
30 display: flex; 31 display: flex;
31 min-height: 100vh; 32 min-height: 100vh;
32 flex-direction: column; 33 flex-direction: column;
@@ -107,6 +108,9 @@ form { @@ -107,6 +108,9 @@ form {
107 108
108 .collapsible-body { 109 .collapsible-body {
109 padding: 20px; 110 padding: 20px;
  111 + p {
  112 + padding: inherit;
  113 + }
110 } 114 }
111 115
112 116