Commit c85f35205a0b585c30f8699cc01ec07ae34dbe91
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 | ... | ... |