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
index.html
... ... @@ -92,7 +92,7 @@
92 92 </ul>
93 93 </div>
94 94 <ul class="side-nav">
95   - <li><a>TODO</a></li>
  95 + <todo></todo>
96 96 </ul>
97 97 </div>
98 98 </nav>
... ... @@ -225,7 +225,7 @@
225 225 <div class="switch">
226 226 <label>
227 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 229 <span class="lever"></span>
230 230 Oui
231 231 </label>
... ... @@ -233,7 +233,7 @@
233 233 </li>
234 234 </ul>
235 235 <h5>Transactions</h5>
236   - <p>TODO</p>
  236 + <todo></todo>
237 237 </div>
238 238 </li>
239 239 </ul>
... ... @@ -281,9 +281,60 @@
281 281 </div>
282 282 <div id="utilisateurs">
283 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 334 </div>
285 335 <div id="statistiques">
286 336 <h4>Statistiques</h4>
  337 + <todo></todo>
287 338 </div>
288 339 </div>
289 340 </div>
... ...
js/init.js
... ... @@ -12,10 +12,13 @@ var TRANSACTION_DUREE = 60
12 12 var PEUT_NFC = false
13 13  
14 14 // Préparation de l'interactivité
  15 +function desactiverForms() {
  16 + $('form').submit(function() { return false });
  17 +}
15 18 $(function(){
16 19 $('.button-collapse').sideNav();
17 20 $('.modal-trigger').leanModal()
18   - $('form').submit(function() { return false });
  21 + desactiverForms()
19 22 $('[name=idCarte]').characterCounter();
20 23 });
21 24  
... ... @@ -39,6 +42,7 @@ var app = new Vue({
39 42 // Données
40 43 clients: [],
41 44 transactions: [],
  45 + utilisateurs: [],
42 46 },
43 47 methods: {
44 48 // API
... ... @@ -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 106 // Affichage
89 107 toast: function(texte) {
... ... @@ -120,15 +138,57 @@ var app = new Vue({
120 138 }))
121 139 that.toast(interieur);
122 140 },
123   - decouvert: function(idCarte, decouvert, e) {
  141 + c_decouvert: function(client, e) {
124 142 var that = this
125 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 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 161 switch(retour) {
131 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 192 break;
133 193  
134 194 default:
... ... @@ -231,6 +291,14 @@ var app = new Vue({
231 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 304 Vue.filter('date', function(timestamp) {
... ...
scss/style.scss
... ... @@ -27,6 +27,7 @@ $tabs-bg-color: $primary-color !default;
27 27  
28 28 // Permet le footer de se mettre toujours en bas
29 29 body {
  30 + overflow-y: scroll; // Toujours afficher la barre de défilment pour éviter les sautements
30 31 display: flex;
31 32 min-height: 100vh;
32 33 flex-direction: column;
... ... @@ -107,6 +108,9 @@ form {
107 108  
108 109 .collapsible-body {
109 110 padding: 20px;
  111 + p {
  112 + padding: inherit;
  113 + }
110 114 }
111 115  
112 116  
... ...