Merge branch 'feature/user' into develop
This commit is contained in:
		
						commit
						aa0279c5b8
					
				|  | @ -0,0 +1,21 @@ | ||||||
|  | -----BEGIN CERTIFICATE----- | ||||||
|  | MIIDazCCAlOgAwIBAgIJAJGH2ozWvd1RMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNV | ||||||
|  | BAYTAkRFMQ8wDQYDVQQIDAZTYXhvbnkxEDAOBgNVBAcMB0RyZXNkZW4xITAfBgNV | ||||||
|  | BAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDAxMTcwOTA0MDFaFw0z | ||||||
|  | MDAxMDQwOTA0MDFaMEQxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZTYXhvbnkxEDAO | ||||||
|  | BgNVBAcMB0RyZXNkZW4xEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN | ||||||
|  | AQEBBQADggEPADCCAQoCggEBALlkr1UOQypLKicESRnse52d5mAX9MjZQpH0/Y5u | ||||||
|  | V5WxpPSasmOpt4MRj5MWTfTK2ukj/jLtPAMsggUh7wMXb1uytHj7T5mtiahXBM0H | ||||||
|  | 1sUi2nScXR6doQZlmqKWDGrVS7WHULM01WhirsnxI8S8e6Evpk4F5/RafKA8FgYI | ||||||
|  | Ongg6S1B16+7T0e/FnILoMjKr1jpgzXnVkPFIneu/qVevSNco5/aw+bc6sjeS/ZA | ||||||
|  | 65dXFGpDlw0lPRHLT5/CgNyMyiLYov7KwMycZw7uxa1ynO+73tqe5tvO/DiMpAPJ | ||||||
|  | EkrSz/StYBsGJxDhwq5RT31tHVtHhTf0rk1BmaoQJ0Aq7iECAwEAAaNRME8wHwYD | ||||||
|  | VR0jBBgwFoAUt8P5gBfN9hCUAiWhtPH5fTWnctAwCQYDVR0TBAIwADALBgNVHQ8E | ||||||
|  | BAMCBPAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQCD | ||||||
|  | fBByVq8AbV1DMrY+MElb/nZA5/cuGnUpBpjSlk5OnYHWtywuQk6veiiJ0S2fNfqf | ||||||
|  | RzwOFuZDHKmIcH0574VssLfUynMKP3w3xb2ZNic3AxAdhzZ6LXLx6+qF5tYcL7oC | ||||||
|  | UWmj5Mo9SkX5HZLEGamQlVyGOGKNatxep4liyoSeKXr0AOHYfB4AkDhVZn7yQc/v | ||||||
|  | But42fLBg4mE+rk4UBYOHA4XdoFwqgTCNZq2RxKzvG9LIcok6lOc6gDnfTsH8GqE | ||||||
|  | byGpfIIQAXF8aftCm4dGXxtzMh8C5d0t2Ell9g+Rr8i/enebT2nJ9B9ptldDjhcZ | ||||||
|  | 7I0ywGsXwrh0EwFsX74/ | ||||||
|  | -----END CERTIFICATE----- | ||||||
|  | @ -0,0 +1,28 @@ | ||||||
|  | -----BEGIN PRIVATE KEY----- | ||||||
|  | MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5ZK9VDkMqSyon | ||||||
|  | BEkZ7HudneZgF/TI2UKR9P2ObleVsaT0mrJjqbeDEY+TFk30ytrpI/4y7TwDLIIF | ||||||
|  | Ie8DF29bsrR4+0+ZrYmoVwTNB9bFItp0nF0enaEGZZqilgxq1Uu1h1CzNNVoYq7J | ||||||
|  | 8SPEvHuhL6ZOBef0WnygPBYGCDp4IOktQdevu09HvxZyC6DIyq9Y6YM151ZDxSJ3 | ||||||
|  | rv6lXr0jXKOf2sPm3OrI3kv2QOuXVxRqQ5cNJT0Ry0+fwoDcjMoi2KL+ysDMnGcO | ||||||
|  | 7sWtcpzvu97anubbzvw4jKQDyRJK0s/0rWAbBicQ4cKuUU99bR1bR4U39K5NQZmq | ||||||
|  | ECdAKu4hAgMBAAECggEABoMQ3Y34sf2d52zxHGYAGZM4SlvND1kCS5otZdleXjW1 | ||||||
|  | M5pTdci6V3JAdswrxNNzSQkonqVSnFHt5zw/5v3lvXTTfgRl0WIVGcKkuobx9k65 | ||||||
|  | Gat8YdzrkQv0mI1otj/zvtaX8ROEA3yj4xgDR5/PP+QqlUcD1MNw6TfzFhcn5pxB | ||||||
|  | /RDPmvarMhzMdDW60Uub6Z7e/kVPuXWrW4bDyULd1d1NoSibnFZi+vGY0Lc1ctDW | ||||||
|  | 2Vl7A8RFTcQi6Cjx/FwgPGJTBE4UMjIBO3wnoPQBMrsSxeGhcarerqIlEafgT4XN | ||||||
|  | p9BMtRyaXE7TTb1BXc35ZYNJLDLJKQxABhrEHtFreQKBgQDpiGwuKAFK8BLPlbAx | ||||||
|  | zkShhKd9fhlwm2bfRv3cojPQZsxn0BjefmtrISbKCD79Ivyn7TnOyYAoKAxdp2q9 | ||||||
|  | wtz94aAXV2lfhUw2lhcb/aw4sXuY/s1XnVyoglOO8pYRCUN0o80pKuWFsaDyy/uL | ||||||
|  | LhINff1oMNCa7vmMdu8Ccz0o/wKBgQDLOqdTQhSFs4f1yhlDDH3pqT6eKvtFNeRJ | ||||||
|  | usxYDnAyRXHRqwhQ86z1nBZIgwXqq7PfO9V5Y/l6/2HmmA2ufjS8aBTNpCUMuvJk | ||||||
|  | y98Z4hTjKRdnVlMUjHq9ahCixJVQ8pcCnWRFdeAwSKhHQiJEFLYeYOIrUeCIYJI4 | ||||||
|  | FiCshSPI3wKBgGU0ErWZ7p18FprRIs8itYlNhIwUxo+POPCPwloIDO5GblSa0Pwy | ||||||
|  | yvhdIIMzOaDXtahMXN3pYtmEKX+4msBrnvuC+K7E2cxkZtfNCWy+7RCQkaCG45QR | ||||||
|  | hOMdv3pWVIRDgHEevz0U8uySQs6VaYgySe6A5/1sEiriX1DpBcEJEbsfAoGAKUCb | ||||||
|  | rGvSbJ1XsM24OQL1IBQJsON6o77fuxOe3RT5M0sjYnL8OipsZmKrp0ZpUgxOc7ba | ||||||
|  | i0x+3LewMLWWuV/G5qOd7WwvVRkxkMJNZByfLskthf1g2d/2HjLEc7XBtW+4tYAr | ||||||
|  | VWoq+sIU3noPKJCnsxzpa++vyx8HLzlWoo5YCDMCgYBJvGH2zMgInlQNO/2XY5nl | ||||||
|  | E53EZMex+RDq8Wzr4tRM3IrCGc2t8WKEQ/9teKNH0tg9xib0vhqqmiGl1xNfqJVo | ||||||
|  | ePJyfgFabeUx9goG3mgTdV9woSRlBJso62dM0DAC/jsJoHnVzgokysR4/BfW9Da+ | ||||||
|  | AYTxRZSNbfmsTHawXqG8Fw== | ||||||
|  | -----END PRIVATE KEY----- | ||||||
|  | @ -45,7 +45,9 @@ | ||||||
|       "@vue/prettier", |       "@vue/prettier", | ||||||
|       "eslint:recommended" |       "eslint:recommended" | ||||||
|     ], |     ], | ||||||
|     "rules": {}, |     "rules": { | ||||||
|  |       "no-console": "off" | ||||||
|  |     }, | ||||||
|     "parserOptions": { |     "parserOptions": { | ||||||
|       "parser": "babel-eslint" |       "parser": "babel-eslint" | ||||||
|     } |     } | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								src/App.vue
								
								
								
								
							
							
						
						
									
										10
									
								
								src/App.vue
								
								
								
								
							|  | @ -1,18 +1,20 @@ | ||||||
| <template> | <template> | ||||||
|   <v-app> |   <v-app> | ||||||
|  |     <TitleBar /> | ||||||
|     <router-view /> |     <router-view /> | ||||||
|     <v-footer app> |     <v-footer app> | ||||||
|       <span class="px-4">© {{ new Date().getFullYear()}} Studentenclub Wu 5 e.v.</span> |       <span class="px-4" | ||||||
|  |         >© {{ new Date().getFullYear() }} Studentenclub Wu 5 e.v.</span | ||||||
|  |       > | ||||||
|     </v-footer> |     </v-footer> | ||||||
|   </v-app> |   </v-app> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
|  | import TitleBar from './components/TitleBar' | ||||||
| export default { | export default { | ||||||
|   name: 'App', |   name: 'App', | ||||||
| 
 |   components: { TitleBar }, | ||||||
|   components: {}, |  | ||||||
| 
 |  | ||||||
|   data: () => ({ |   data: () => ({ | ||||||
|     // |     // | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| <template> | <template> | ||||||
|   <v-app-bar app clipped-left hide-on-scroll color="blue accent-4" class="elevation-4" dark> |   <v-app-bar app clipped-left clipped-right hide-on-scroll color="blue accent-4" class="elevation-4" dark> | ||||||
|     <v-btn icon> |     <v-btn icon> | ||||||
|       <v-img src="@/assets/logo-big.png" contain height="40"></v-img> |       <v-img src="@/assets/logo-big.png" contain height="40"></v-img> | ||||||
|     </v-btn> |     </v-btn> | ||||||
|  | @ -8,42 +8,27 @@ | ||||||
|     <v-btn icon v-if="isFinanzer" href="finanzer"> |     <v-btn icon v-if="isFinanzer" href="finanzer"> | ||||||
|       <v-icon>attach_money</v-icon> |       <v-icon>attach_money</v-icon> | ||||||
|     </v-btn> |     </v-btn> | ||||||
|     <v-btn icon v-if="isBar" href="bar"> |     <v-btn icon v-if="isBar"> | ||||||
|       <v-icon>local_bar</v-icon> |       <v-icon>local_bar</v-icon> | ||||||
|     </v-btn> |     </v-btn> | ||||||
|     <v-btn v-if="isLoggedIn" @click="logout">Logout</v-btn> |     <v-btn icon v-if="isUser"> | ||||||
|  |       <v-icon>person</v-icon> | ||||||
|  |     </v-btn> | ||||||
|   </v-app-bar> |   </v-app-bar> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import { mapActions } from 'vuex' | import { mapActions, mapGetters } from 'vuex' | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
|   name: 'TitleBar', |   name: 'TitleBar', | ||||||
|   computed: { |   computed: { | ||||||
|     isBar() { |     ...mapGetters(['isBar', 'isFinanzer', 'isUser', 'isLoggedIn']) | ||||||
|       try { |  | ||||||
|         return this.$store.getters.getGroup.includes('bar') ? true : false |  | ||||||
|       } catch (e) { |  | ||||||
|         return false |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     isFinanzer() { |  | ||||||
|       try { |  | ||||||
|         return this.$store.getters.getGroup.includes('moneymaster') |  | ||||||
|           ? true |  | ||||||
|           : false |  | ||||||
|       } catch (e) { |  | ||||||
|         return false |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     isLoggedIn() { |  | ||||||
|       return this.$store.getters.getToken |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     ...mapActions(['logout']) |     ...mapActions(['logout']) | ||||||
|   } |   }, | ||||||
|  | 
 | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,20 @@ | ||||||
|  | <template> | ||||||
|  |   <v-list> | ||||||
|  |     <v-list-item link to="/main/bar/geruecht"> | ||||||
|  |       <v-list-item-icon> | ||||||
|  |         <v-icon>local_drink</v-icon> | ||||||
|  |       </v-list-item-icon> | ||||||
|  |       <v-list-item-title> | ||||||
|  |         Geruecht | ||||||
|  |       </v-list-item-title> | ||||||
|  |     </v-list-item> | ||||||
|  |   </v-list> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'BarNavigation' | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,49 @@ | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <v-list> | ||||||
|  |       <v-list-item | ||||||
|  |         class="title" | ||||||
|  |         link | ||||||
|  |         to="/main/finanzer/overview" | ||||||
|  |       > | ||||||
|  |         <v-list-item-icon> | ||||||
|  |           <v-icon>home</v-icon> | ||||||
|  |         </v-list-item-icon> | ||||||
|  |         <v-list-item-title>Gesamtübersicht</v-list-item-title> | ||||||
|  |       </v-list-item> | ||||||
|  |     </v-list> | ||||||
|  |     <v-divider /> | ||||||
|  |     <v-list> | ||||||
|  |       <div v-for="user in users" v-bind:key="users.indexOf(user)"> | ||||||
|  |         <v-list-item | ||||||
|  |           :to="{ name: 'activeUser', params: { id: user.username } }" | ||||||
|  |           link | ||||||
|  |         > | ||||||
|  |           <v-list-item-title | ||||||
|  |             >{{ user.lastname }}, {{ user.firstname }} | ||||||
|  |           </v-list-item-title> | ||||||
|  |         </v-list-item> | ||||||
|  |       </div> | ||||||
|  |     </v-list> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import { mapGetters, mapActions } from 'vuex' | ||||||
|  | export default { | ||||||
|  |   name: 'FinanzerNavigation', | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions({ | ||||||
|  |       addUser: 'finanzerUsers/addUser', | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapGetters({ | ||||||
|  |       users: 'finanzerUsers/users', | ||||||
|  |       allUsers: 'finanzerUsers/allUsers' | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| <template> | <template> | ||||||
|   <div> |   <v-content> | ||||||
|     <v-toolbar tile> |     <v-toolbar tile> | ||||||
|       <v-toolbar-title>Gesamtübersicht</v-toolbar-title> |       <v-toolbar-title>Gesamtübersicht</v-toolbar-title> | ||||||
|       <v-spacer /> |       <v-spacer /> | ||||||
|  | @ -17,12 +17,23 @@ | ||||||
|       <v-spacer /> |       <v-spacer /> | ||||||
|       <v-toolbar-items> |       <v-toolbar-items> | ||||||
|         <v-btn text @click="sendMails">Emails senden</v-btn> |         <v-btn text @click="sendMails">Emails senden</v-btn> | ||||||
|         <v-text-field |         <v-autocomplete | ||||||
|           v-model="filter" |  | ||||||
|           style="margin-top: 3px" |  | ||||||
|           append-icon="search" |  | ||||||
|           outlined |           outlined | ||||||
|         ></v-text-field> |           return-object | ||||||
|  |           v-model="user" | ||||||
|  |           style="margin-top: 3px" | ||||||
|  |           placeholder="Suche Person" | ||||||
|  |           :items="allUsers" | ||||||
|  |           item-text="fullName" | ||||||
|  |           prepend-inner-icon="search" | ||||||
|  |           full-width | ||||||
|  |           :search-input.sync="filter" | ||||||
|  |         /> | ||||||
|  |         <v-btn | ||||||
|  |           text | ||||||
|  |           @click="addToUser(user)" | ||||||
|  |           >Hinzufügen</v-btn | ||||||
|  |         > | ||||||
|       </v-toolbar-items> |       </v-toolbar-items> | ||||||
|     </v-toolbar> |     </v-toolbar> | ||||||
|     <v-expand-transition> |     <v-expand-transition> | ||||||
|  | @ -189,7 +200,7 @@ | ||||||
|         </v-container> |         </v-container> | ||||||
|       </v-card> |       </v-card> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </v-content> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
|  | @ -204,6 +215,7 @@ export default { | ||||||
|       errorExpand: false, |       errorExpand: false, | ||||||
| 
 | 
 | ||||||
|       filter: '', |       filter: '', | ||||||
|  |       user: null, | ||||||
| 
 | 
 | ||||||
|       amount: null, |       amount: null, | ||||||
|       isNumber: value => !isNaN(value) || 'Betrag muss eine Zahl sein.', |       isNumber: value => !isNaN(value) || 'Betrag muss eine Zahl sein.', | ||||||
|  | @ -238,7 +250,8 @@ export default { | ||||||
|       addAmount: 'finanzerUsers/addAmount', |       addAmount: 'finanzerUsers/addAmount', | ||||||
|       addCredit: 'finanzerUsers/addCredit', |       addCredit: 'finanzerUsers/addCredit', | ||||||
|       countYear: 'finanzerUsers/countYear', |       countYear: 'finanzerUsers/countYear', | ||||||
|       sendMails: 'finanzerUsers/sendMails' |       sendMails: 'finanzerUsers/sendMails', | ||||||
|  |       addUser: 'finanzerUsers/addUser' | ||||||
|     }), |     }), | ||||||
|     async getData(promise) { |     async getData(promise) { | ||||||
|       return await promise |       return await promise | ||||||
|  | @ -307,10 +320,18 @@ export default { | ||||||
|       ) |       ) | ||||||
|     }, |     }, | ||||||
|     isFiltered(user) { |     isFiltered(user) { | ||||||
|  |       try { | ||||||
|         return ( |         return ( | ||||||
|           user.firstname.toLowerCase().includes(this.filter.toLowerCase()) || |           user.firstname.toLowerCase().includes(this.filter.toLowerCase()) || | ||||||
|           user.lastname.toLowerCase().includes(this.filter.toLowerCase()) |           user.lastname.toLowerCase().includes(this.filter.toLowerCase()) | ||||||
|         ) |         ) | ||||||
|  |       } catch (e) { | ||||||
|  |         return true | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     addToUser(user) { | ||||||
|  |       this.addUser(user) | ||||||
|  |       this.$router.push({name: 'activeUser', params: {id: user.username}}) | ||||||
|     }, |     }, | ||||||
|     createDefault() { |     createDefault() { | ||||||
|       this.amount = null |       this.amount = null | ||||||
|  | @ -344,6 +365,7 @@ export default { | ||||||
|     }, |     }, | ||||||
|     ...mapGetters({ |     ...mapGetters({ | ||||||
|       users: 'finanzerUsers/users', |       users: 'finanzerUsers/users', | ||||||
|  |       allUsers: 'finanzerUsers/allUsers', | ||||||
|       errorMails: 'finanzerUsers/errorMails', |       errorMails: 'finanzerUsers/errorMails', | ||||||
|       year: 'finanzerUsers/year', |       year: 'finanzerUsers/year', | ||||||
|       years: 'finanzerUsers/years', |       years: 'finanzerUsers/years', | ||||||
|  |  | ||||||
|  | @ -1,15 +1,21 @@ | ||||||
| <template> | <template> | ||||||
|   <div> |   <v-content v-if="activeUser"> | ||||||
|     <v-toolbar tile> |     <v-toolbar tile> | ||||||
|       <v-toolbar-title>{{activeUser.lastname}}, {{activeUser.firstname}}</v-toolbar-title> |       <v-toolbar-title | ||||||
|  |         >{{ activeUser.lastname }}, {{ activeUser.firstname }}</v-toolbar-title | ||||||
|  |       > | ||||||
|       <v-spacer /> |       <v-spacer /> | ||||||
|       <v-toolbar-items> |       <v-toolbar-items> | ||||||
|         <v-btn @click="sendMail({username: activeUser.username})" text>Email senden</v-btn> |         <v-btn @click="sendMail({ username: activeUser.username })" text | ||||||
|  |           >Email senden</v-btn | ||||||
|  |         > | ||||||
|       </v-toolbar-items> |       </v-toolbar-items> | ||||||
|     </v-toolbar> |     </v-toolbar> | ||||||
|     <v-expand-transition> |     <v-expand-transition> | ||||||
|       <v-card style="margin-top: 3px" v-show="errorMail"> |       <v-card style="margin-top: 3px" v-show="errorMail"> | ||||||
|         <v-alert dense :type="computeError(errorMail)">{{errorMessage(errorMail)}}</v-alert> |         <v-alert dense :type="computeError(errorMail)">{{ | ||||||
|  |           errorMessage(errorMail) | ||||||
|  |         }}</v-alert> | ||||||
|       </v-card> |       </v-card> | ||||||
|     </v-expand-transition> |     </v-expand-transition> | ||||||
|     <v-card style="margin-top: 3px;"> |     <v-card style="margin-top: 3px;"> | ||||||
|  | @ -24,12 +30,16 @@ | ||||||
|               <v-chip |               <v-chip | ||||||
|                 outlined |                 outlined | ||||||
|                 :text-color="getLockedColor(activeUser.locked)" |                 :text-color="getLockedColor(activeUser.locked)" | ||||||
|               >{{activeUser.locked ? 'Gesperrt': 'nicht Gesperrt'}}</v-chip> |                 >{{ activeUser.locked ? 'Gesperrt' : 'nicht Gesperrt' }}</v-chip | ||||||
|  |               > | ||||||
|             </v-col> |             </v-col> | ||||||
|             <v-col> |             <v-col> | ||||||
|               <v-btn |               <v-btn | ||||||
|                 @click="doLock({user: activeUser, locked: !activeUser.locked})" |                 @click=" | ||||||
|               >{{activeUser.locked ? 'Entperren' : 'Sperren'}}</v-btn> |                   doLock({ user: activeUser, locked: !activeUser.locked }) | ||||||
|  |                 " | ||||||
|  |                 >{{ activeUser.locked ? 'Entperren' : 'Sperren' }}</v-btn | ||||||
|  |               > | ||||||
|             </v-col> |             </v-col> | ||||||
|           </v-row> |           </v-row> | ||||||
|           <v-divider style="margin-bottom: 15px;" /> |           <v-divider style="margin-bottom: 15px;" /> | ||||||
|  | @ -46,7 +56,10 @@ | ||||||
|                 return-object |                 return-object | ||||||
|                 v-model="autoLock" |                 v-model="autoLock" | ||||||
|                 label="Automatische Sperre" |                 label="Automatische Sperre" | ||||||
|                 :items="[{value: true, text: 'Aktiviert'}, {value: false, text: 'Deaktiviert'}]" |                 :items="[ | ||||||
|  |                   { value: true, text: 'Aktiviert' }, | ||||||
|  |                   { value: false, text: 'Deaktiviert' } | ||||||
|  |                 ]" | ||||||
|                 item-text="text" |                 item-text="text" | ||||||
|                 item-value="value" |                 item-value="value" | ||||||
|               /> |               /> | ||||||
|  | @ -55,8 +68,15 @@ | ||||||
|           <v-row> |           <v-row> | ||||||
|             <v-btn |             <v-btn | ||||||
|               block |               block | ||||||
|               @click="saveConfig({user: activeUser, limit: limit, autoLock: autoLock.value})" |               @click=" | ||||||
|             >Speichern</v-btn> |                 saveConfig({ | ||||||
|  |                   user: activeUser, | ||||||
|  |                   limit: limit, | ||||||
|  |                   autoLock: autoLock.value | ||||||
|  |                 }) | ||||||
|  |               " | ||||||
|  |               >Speichern</v-btn | ||||||
|  |             > | ||||||
|           </v-row> |           </v-row> | ||||||
|         </v-form> |         </v-form> | ||||||
|       </v-card-text> |       </v-card-text> | ||||||
|  | @ -67,14 +87,21 @@ | ||||||
|         <v-form style="margin-left: 15px; margin-right: 15px"> |         <v-form style="margin-left: 15px; margin-right: 15px"> | ||||||
|           <v-row> |           <v-row> | ||||||
|             <v-col> |             <v-col> | ||||||
|               <v-text-field :rules="[isNumber]" label="Betrag" v-model="amount"></v-text-field> |               <v-text-field | ||||||
|  |                 :rules="[isNumber]" | ||||||
|  |                 label="Betrag" | ||||||
|  |                 v-model="amount" | ||||||
|  |               ></v-text-field> | ||||||
|             </v-col> |             </v-col> | ||||||
|             <v-col> |             <v-col> | ||||||
|               <v-select |               <v-select | ||||||
|                 return-object |                 return-object | ||||||
|                 v-model="type" |                 v-model="type" | ||||||
|                 label="Typ" |                 label="Typ" | ||||||
|                 :items="[{value: 'amount', text: 'Schulden'}, {value: 'credit', text: 'Guthaben'}]" |                 :items="[ | ||||||
|  |                   { value: 'amount', text: 'Schulden' }, | ||||||
|  |                   { value: 'credit', text: 'Guthaben' } | ||||||
|  |                 ]" | ||||||
|                 item-text="text" |                 item-text="text" | ||||||
|                 item-value="value" |                 item-value="value" | ||||||
|               ></v-select> |               ></v-select> | ||||||
|  | @ -108,7 +135,7 @@ | ||||||
|     </v-card> |     </v-card> | ||||||
|     <div v-for="year in years" :key="years.indexOf(year)"> |     <div v-for="year in years" :key="years.indexOf(year)"> | ||||||
|       <v-card style="margin-top: 3px;"> |       <v-card style="margin-top: 3px;"> | ||||||
|         <v-card-title>{{year}}</v-card-title> |         <v-card-title>{{ year }}</v-card-title> | ||||||
|         <Table v-bind:user="activeUser" v-bind:year="year" /> |         <Table v-bind:user="activeUser" v-bind:year="year" /> | ||||||
|         <v-container fluid> |         <v-container fluid> | ||||||
|           <v-col> |           <v-col> | ||||||
|  | @ -119,8 +146,13 @@ | ||||||
|               <v-col> |               <v-col> | ||||||
|                 <v-chip |                 <v-chip | ||||||
|                   outlined |                   outlined | ||||||
|                   :text-color="getLastColor(activeUser.creditList[year][1].last)" |                   :text-color=" | ||||||
|                 >{{(activeUser.creditList[year][1].last / 100).toFixed(2)}}</v-chip> |                     getLastColor(activeUser.creditList[year][1].last) | ||||||
|  |                   " | ||||||
|  |                   >{{ | ||||||
|  |                     (activeUser.creditList[year][1].last / 100).toFixed(2) | ||||||
|  |                   }}</v-chip | ||||||
|  |                 > | ||||||
|               </v-col> |               </v-col> | ||||||
|               <v-col> |               <v-col> | ||||||
|                 <v-label>Gesamt:</v-label> |                 <v-label>Gesamt:</v-label> | ||||||
|  | @ -129,10 +161,23 @@ | ||||||
|                 <v-chip |                 <v-chip | ||||||
|                   outlined |                   outlined | ||||||
|                   x-large |                   x-large | ||||||
|                   :text-color="getLastColor(getAllSum(activeUser.creditList[year][2].sum ,activeUser.creditList[year][1].last))" |                   :text-color=" | ||||||
|  |                     getLastColor( | ||||||
|  |                       getAllSum( | ||||||
|  |                         activeUser.creditList[year][2].sum, | ||||||
|  |                         activeUser.creditList[year][1].last | ||||||
|  |                       ) | ||||||
|  |                     ) | ||||||
|  |                   " | ||||||
|                 > |                 > | ||||||
|                   {{(getAllSum(activeUser.creditList[year][2].sum ,activeUser.creditList[year][1].last) / |                   {{ | ||||||
|                   100).toFixed(2)}} |                     ( | ||||||
|  |                       getAllSum( | ||||||
|  |                         activeUser.creditList[year][2].sum, | ||||||
|  |                         activeUser.creditList[year][1].last | ||||||
|  |                       ) / 100 | ||||||
|  |                     ).toFixed(2) | ||||||
|  |                   }} | ||||||
|                 </v-chip> |                 </v-chip> | ||||||
|               </v-col> |               </v-col> | ||||||
|             </v-row> |             </v-row> | ||||||
|  | @ -140,7 +185,7 @@ | ||||||
|         </v-container> |         </v-container> | ||||||
|       </v-card> |       </v-card> | ||||||
|     </div> |     </div> | ||||||
|   </div> |   </v-content> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
|  | @ -148,6 +193,9 @@ import Table from './Table' | ||||||
| import { mapGetters, mapActions } from 'vuex' | import { mapGetters, mapActions } from 'vuex' | ||||||
| export default { | export default { | ||||||
|   name: 'User', |   name: 'User', | ||||||
|  |   props: { | ||||||
|  |     id: String | ||||||
|  |   }, | ||||||
|   components: { Table }, |   components: { Table }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|  | @ -180,11 +228,7 @@ export default { | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   created() { |   created() { | ||||||
|     this.limit = (this.activeUser.limit / 100).toFixed(2) |     this.setActiveUser(this.$route.params.id) | ||||||
|     this.autoLock = { |  | ||||||
|       value: this.activeUser.autoLock, |  | ||||||
|       text: this.activeUser.autoLock ? 'Aktiviert' : 'Deaktiviert' |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     ...mapActions({ |     ...mapActions({ | ||||||
|  | @ -192,7 +236,8 @@ export default { | ||||||
|       addCredit: 'finanzerUsers/addCredit', |       addCredit: 'finanzerUsers/addCredit', | ||||||
|       sendMail: 'finanzerUsers/sendMail', |       sendMail: 'finanzerUsers/sendMail', | ||||||
|       doLock: 'finanzerUsers/doLock', |       doLock: 'finanzerUsers/doLock', | ||||||
|       saveConfig: 'finanzerUsers/saveConfig' |       saveConfig: 'finanzerUsers/saveConfig', | ||||||
|  |       setActiveUser: 'finanzerUsers/setActiveUser' | ||||||
|     }), |     }), | ||||||
|     getLastColor(value) { |     getLastColor(value) { | ||||||
|       return value < 0 ? 'red' : 'green' |       return value < 0 ? 'red' : 'green' | ||||||
|  | @ -296,15 +341,19 @@ export default { | ||||||
|   }, |   }, | ||||||
|   watch: { |   watch: { | ||||||
|     activeUser(newVal) { |     activeUser(newVal) { | ||||||
|  |       console.log(newVal) | ||||||
|       this.limit = (newVal.limit / 100).toFixed(2) |       this.limit = (newVal.limit / 100).toFixed(2) | ||||||
|       this.autoLock = { |       this.autoLock = { | ||||||
|         value: newVal.autoLock, |         value: newVal.autoLock, | ||||||
|         text: newVal.autoLock ? 'Aktiviert' : 'Deaktiviert' |         text: newVal.autoLock ? 'Aktiviert' : 'Deaktiviert' | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     id(newVal) { | ||||||
|  |       console.log(newVal) | ||||||
|  |       this.setActiveUser(newVal) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped></style> | ||||||
| </style> |  | ||||||
|  |  | ||||||
|  | @ -0,0 +1,132 @@ | ||||||
|  | <template> | ||||||
|  |   <v-container v-if="user"> | ||||||
|  |     <v-card> | ||||||
|  |       <v-list-item> | ||||||
|  |         <v-list-item-title class="title" | ||||||
|  |           >{{ user.firstname }} {{ user.lastname }}</v-list-item-title | ||||||
|  |         > | ||||||
|  |       </v-list-item> | ||||||
|  |       <v-card-text> | ||||||
|  |         <v-row> | ||||||
|  |           <v-col cols="10"> | ||||||
|  |             <v-row> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(200)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >2 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(100)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >1 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(50)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >0,50 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |             </v-row> | ||||||
|  |             <v-row> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(40)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >0,40 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(20)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >0,20 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-btn | ||||||
|  |                   class="creditBtn" | ||||||
|  |                   block | ||||||
|  |                   @click="addAmount(10)" | ||||||
|  |                   :color="color" | ||||||
|  |                   :disabled="user.locked" | ||||||
|  |                   >0,10 €</v-btn | ||||||
|  |                 > | ||||||
|  |               </v-col> | ||||||
|  |             </v-row> | ||||||
|  |           </v-col> | ||||||
|  |           <v-col align-self="center"> | ||||||
|  |             <v-row> | ||||||
|  |               <v-list-item> | ||||||
|  |                 <v-list-item-action-text :class="getColor(getAllSum())" | ||||||
|  |                   >{{ | ||||||
|  |                     (getAllSum() / 100).toFixed(2) | ||||||
|  |                   }} | ||||||
|  |                   €</v-list-item-action-text | ||||||
|  |                 > | ||||||
|  |               </v-list-item> | ||||||
|  |             </v-row> | ||||||
|  |           </v-col> | ||||||
|  |         </v-row> | ||||||
|  |         <v-alert v-if="user.locked" type="error" | ||||||
|  |           >{{ user.firstname }} darf nicht mehr anschreiben. | ||||||
|  |           {{ user.firstname }} sollte sich lieber mal beim Finanzer | ||||||
|  |           melden.</v-alert | ||||||
|  |         > | ||||||
|  |       </v-card-text> | ||||||
|  |     </v-card> | ||||||
|  |   </v-container> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  |   import {mapGetters, mapActions} from 'vuex' | ||||||
|  | export default { | ||||||
|  |   name: 'AddAmount', | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       color: 'green accent-4' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions({ | ||||||
|  |       addAmount: 'user/addAmount' | ||||||
|  |     }), | ||||||
|  |     getColor(value) { | ||||||
|  |       return value >= 0 ? 'title green--text' : 'title red--text' | ||||||
|  |     }, | ||||||
|  |     getAllSum() { | ||||||
|  |       console.log("getAllSum", this.user) | ||||||
|  |       if (this.user) | ||||||
|  |         return this.user.creditList[this.year][2].sum + this.user.creditList[this.year][1].last | ||||||
|  |       return 0 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapGetters({ | ||||||
|  |       user: 'user/user', | ||||||
|  |       year: 'user/year' | ||||||
|  |     }), | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,107 @@ | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <v-toolbar> | ||||||
|  |       <v-toolbar-title>Gesamtübersicht</v-toolbar-title> | ||||||
|  |       <v-spacer /> | ||||||
|  |       <v-toolbar-items> | ||||||
|  |         <v-text-field | ||||||
|  |           v-model="filter" | ||||||
|  |           style="margin-top: 3px" | ||||||
|  |           append-icon="search" | ||||||
|  |           outlined | ||||||
|  |           :rules="[isNumber]" | ||||||
|  |         ></v-text-field> | ||||||
|  |       </v-toolbar-items> | ||||||
|  |     </v-toolbar> | ||||||
|  |     <div v-for="year in years" :key="years.indexOf(year)"> | ||||||
|  |       <v-card style="margin-top: 3px" v-if="isFiltered(year)"> | ||||||
|  |         <v-card-title>{{ year }}</v-card-title> | ||||||
|  |         <Table v-bind:user="user" v-bind:year="year" /> | ||||||
|  |         <v-container fluid> | ||||||
|  |           <v-col> | ||||||
|  |             <v-row> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-label>Vorjahr:</v-label> | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-chip | ||||||
|  |                   outlined | ||||||
|  |                   :text-color="getLastColor(user.creditList[year][1].last)" | ||||||
|  |                   >{{ (user.creditList[year][1].last / 100).toFixed(2) }} | ||||||
|  |                 </v-chip> | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-label>Gesamt:</v-label> | ||||||
|  |               </v-col> | ||||||
|  |               <v-col> | ||||||
|  |                 <v-chip | ||||||
|  |                   outlined | ||||||
|  |                   x-large | ||||||
|  |                   :text-color=" | ||||||
|  |                     getLastColor( | ||||||
|  |                       getAllSum( | ||||||
|  |                         user.creditList[year][2].sum, | ||||||
|  |                         user.creditList[year][1].last | ||||||
|  |                       ) | ||||||
|  |                     ) | ||||||
|  |                   " | ||||||
|  |                 > | ||||||
|  |                   {{ | ||||||
|  |                     ( | ||||||
|  |                       getAllSum( | ||||||
|  |                         user.creditList[year][2].sum, | ||||||
|  |                         user.creditList[year][1].last | ||||||
|  |                       ) / 100 | ||||||
|  |                     ).toFixed(2) | ||||||
|  |                   }} | ||||||
|  |                 </v-chip> | ||||||
|  |               </v-col> | ||||||
|  |             </v-row> | ||||||
|  |           </v-col> | ||||||
|  |         </v-container> | ||||||
|  |       </v-card> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import { mapGetters } from 'vuex' | ||||||
|  | import Table from '../finanzer/Table' | ||||||
|  | export default { | ||||||
|  |   name: 'CreditOverview', | ||||||
|  |   components: { Table }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       isNumber: value => Number.isInteger(parseInt(value === '' ? 0 : value)) || "Muss eine Zahl sein.", | ||||||
|  |       filter: '' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     getLastColor(value) { | ||||||
|  |       return value < 0 ? 'red' : 'green' | ||||||
|  |     }, | ||||||
|  |     getAllSum(sum, lastYear) { | ||||||
|  |       return lastYear + sum | ||||||
|  |     }, | ||||||
|  |     isFiltered(value) { | ||||||
|  |       return value.toString().includes(this.filter) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapGetters({ | ||||||
|  |       user: 'user/user' | ||||||
|  |     }), | ||||||
|  |     years() { | ||||||
|  |       let years = [] | ||||||
|  |       if (this.user) { | ||||||
|  |         for (let year in this.user.creditList) { | ||||||
|  |           years.unshift(parseInt(year)) | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       return years | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | <template> | ||||||
|  |   <v-list> | ||||||
|  |     <v-list-item link to="/main/user/add"> | ||||||
|  |       <v-list-item-icon> | ||||||
|  |         <v-icon>home</v-icon> | ||||||
|  |       </v-list-item-icon> | ||||||
|  |       <v-list-item-title> | ||||||
|  |         Home | ||||||
|  |       </v-list-item-title> | ||||||
|  |     </v-list-item> | ||||||
|  |     <v-list-item link to="/main/user/overview"> | ||||||
|  |       <v-list-item-icon> | ||||||
|  |         <v-icon>account_balance</v-icon> | ||||||
|  |       </v-list-item-icon> | ||||||
|  |       <v-list-item-title>Finanzübersicht</v-list-item-title> | ||||||
|  |     </v-list-item> | ||||||
|  |   </v-list> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'UserNavigation' | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| //const main = 'http://192.168.5.118:5000/'
 | //const main = 'http://192.168.5.118:5000/'
 | ||||||
| const main = 'http://localhost:5000/' | const main = 'https://localhost:5000/' | ||||||
| 
 | 
 | ||||||
| const url = { | const url = { | ||||||
|   login: main + 'login', |   login: main + 'login', | ||||||
|  | @ -15,7 +15,9 @@ const url = { | ||||||
|   finanzerSetConfig: main + 'finanzerSetConfig', |   finanzerSetConfig: main + 'finanzerSetConfig', | ||||||
|   finanzerAddUser: main + 'finanzerAddUser', |   finanzerAddUser: main + 'finanzerAddUser', | ||||||
|   finanzerSendAllMail: main + 'finanzerSendAllMail', |   finanzerSendAllMail: main + 'finanzerSendAllMail', | ||||||
|   finanzerSendOneMail: main + 'finanzerSendOneMail' |   finanzerSendOneMail: main + 'finanzerSendOneMail', | ||||||
|  |   userMain: main + 'user/main', | ||||||
|  |   userAddAmount: main + 'user/addAmount' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export default url | export default url | ||||||
|  |  | ||||||
|  | @ -3,7 +3,17 @@ import VueRouter from 'vue-router' | ||||||
| import FinanzerView from '@/views/FinanzerView' | import FinanzerView from '@/views/FinanzerView' | ||||||
| import Login from '@/views/Login' | import Login from '@/views/Login' | ||||||
| import store from '@/store/index' | import store from '@/store/index' | ||||||
| import BarView from '@/views/BarView' | import GeruechteView from '../views/contents/GeruechteView' | ||||||
|  | import AddAmount from '../components/user/AddAmount' | ||||||
|  | import CreditOverview from '../components/user/CreditOverview' | ||||||
|  | import MainView from '../views/MainView' | ||||||
|  | import UserView from '../views/UserView' | ||||||
|  | import BarView from '../views/BarView' | ||||||
|  | import UserNavigation from '../components/user/UserNavigation' | ||||||
|  | import BarNavigation from '../components/baruser/BarNavigation' | ||||||
|  | import FinanzerNavigation from '../components/finanzer/FinanzerNavigation' | ||||||
|  | import Overview from '../components/finanzer/Overview' | ||||||
|  | import User from '../components/finanzer/User' | ||||||
| 
 | 
 | ||||||
| Vue.use(VueRouter) | Vue.use(VueRouter) | ||||||
| 
 | 
 | ||||||
|  | @ -14,14 +24,57 @@ const routes = [ | ||||||
|     component: Login |     component: Login | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     path: '/finanzer', |     path: '/main', | ||||||
|     name: 'finanzer', |     name: 'main', | ||||||
|     component: FinanzerView |     component: MainView, | ||||||
|  |     children: [ | ||||||
|  |       { | ||||||
|  |         path: 'user', | ||||||
|  |         name: 'user', | ||||||
|  |         components: { userNav: UserNavigation, default: UserView }, | ||||||
|  |         children: [ | ||||||
|  |           { | ||||||
|  |             path: 'add', | ||||||
|  |             name: 'add', | ||||||
|  |             component: AddAmount | ||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|     path: '/bar', |             path: 'overview', | ||||||
|  |             name: 'userOverview', | ||||||
|  |             component: CreditOverview | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         path: 'bar', | ||||||
|         name: 'bar', |         name: 'bar', | ||||||
|     component: BarView |         components: { userNav: BarNavigation, default: BarView }, | ||||||
|  |         children: [ | ||||||
|  |           { | ||||||
|  |             path: 'geruecht', | ||||||
|  |             name: 'geruecht', | ||||||
|  |             component: GeruechteView | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         path: 'finanzer', | ||||||
|  |         name: 'finanzer', | ||||||
|  |         components: { default: FinanzerView, finanzerNav: FinanzerNavigation }, | ||||||
|  |         children: [ | ||||||
|  |           { | ||||||
|  |             path: 'overview', | ||||||
|  |             component: Overview | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             path: 'user/:id', | ||||||
|  |             name: 'activeUser', | ||||||
|  |             props: true, | ||||||
|  |             component: User | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     path: '*', |     path: '*', | ||||||
|  | @ -39,18 +92,23 @@ const router = new VueRouter({ | ||||||
| 
 | 
 | ||||||
| router.beforeEach((to, from, next) => { | router.beforeEach((to, from, next) => { | ||||||
|   store.dispatch('fetchAccessToken') |   store.dispatch('fetchAccessToken') | ||||||
|   let sites = ['/finanzer', '/bar'] |   console.log('fullPath', to.fullPath) | ||||||
|   if (sites.includes(to.fullPath)) { |   if (to.fullPath.includes('/main')) { | ||||||
|     if (to.fullPath === '/finanzer') { |     if (to.fullPath.includes('/main/finanzer')) { | ||||||
|       if (!store.state.login.user.group.includes('moneymaster')) { |       if (!store.state.login.user.group.includes('moneymaster')) { | ||||||
|         next('/login') |         next('/login') | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     if (to.fullPath === '/bar') { |     if (to.fullPath.includes('/main/bar')) { | ||||||
|       if (!store.state.login.user.group.includes('bar')) { |       if (!store.state.login.user.group.includes('bar')) { | ||||||
|         next('/login') |         next('/login') | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     if (to.fullPath.includes('/main/user')) { | ||||||
|  |       if (!store.state.login.user.group.includes('user')) { | ||||||
|  |         next('/login') | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     if (!store.state.login.user.accessToken) { |     if (!store.state.login.user.accessToken) { | ||||||
|       next('/login') |       next('/login') | ||||||
|     } |     } | ||||||
|  | @ -58,9 +116,11 @@ router.beforeEach((to, from, next) => { | ||||||
|   if (to.fullPath === '/login') { |   if (to.fullPath === '/login') { | ||||||
|     if (store.state.login.user.accessToken) { |     if (store.state.login.user.accessToken) { | ||||||
|       if (store.state.login.user.group.includes('moneymaster')) { |       if (store.state.login.user.group.includes('moneymaster')) { | ||||||
|         next('/finanzer') |         next('/main/finanzer') | ||||||
|       } else if (store.state.login.user.group.includes('bar')) { |       } else if (store.state.login.user.group.includes('bar')) { | ||||||
|         next('/bar') |         next('/main/bar/geruecht') | ||||||
|  |       } else if (store.state.login.user.group.includes('user')) { | ||||||
|  |         next('/main/user/add') | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ import Vuex from 'vuex' | ||||||
| import login from './modules/login' | import login from './modules/login' | ||||||
| import finanzerUsers from './modules/finanzerUsers' | import finanzerUsers from './modules/finanzerUsers' | ||||||
| import barUsers from '@/store/modules/barUsers' | import barUsers from '@/store/modules/barUsers' | ||||||
|  | import user from '@/store/modules/user' | ||||||
| 
 | 
 | ||||||
| Vue.use(Vuex) | Vue.use(Vuex) | ||||||
| 
 | 
 | ||||||
|  | @ -10,6 +11,7 @@ export default new Vuex.Store({ | ||||||
|   modules: { |   modules: { | ||||||
|     login, |     login, | ||||||
|     finanzerUsers, |     finanzerUsers, | ||||||
|     barUsers |     barUsers, | ||||||
|  |     user | ||||||
|   } |   } | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  | @ -4,9 +4,7 @@ import url from '@/plugins/routes' | ||||||
| 
 | 
 | ||||||
| const state = { | const state = { | ||||||
|   users: [], |   users: [], | ||||||
|   activeUser: { |   activeUser: '', | ||||||
|     username: null |  | ||||||
|   }, |  | ||||||
|   allUsers: [], |   allUsers: [], | ||||||
|   user: null, |   user: null, | ||||||
|   errorMails: null, |   errorMails: null, | ||||||
|  | @ -38,13 +36,8 @@ const mutations = { | ||||||
|         state.allUsers[i].firstname + ' ' + state.allUsers[i].lastname |         state.allUsers[i].firstname + ' ' + state.allUsers[i].lastname | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   setActiveUser: (state, user) => { |   setActiveUser: (state, username) => { | ||||||
|     if (state.activeUser.username === user.username) { |     state.activeUser = username | ||||||
|       state.activeUser = { username: null } |  | ||||||
|     } else { |  | ||||||
|       state.activeUser = user |  | ||||||
|     } |  | ||||||
|     state.errorMail = null |  | ||||||
|   }, |   }, | ||||||
|   setUsers: (state, users) => { |   setUsers: (state, users) => { | ||||||
|     for (let user in users) { |     for (let user in users) { | ||||||
|  | @ -256,8 +249,8 @@ const actions = { | ||||||
|           dispatch('logout', null, { root: true }) |           dispatch('logout', null, { root: true }) | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   setActiveUser({ commit }, user) { |   setActiveUser({ commit }, username) { | ||||||
|     commit('setActiveUser', user) |     commit('setActiveUser', username) | ||||||
|   }, |   }, | ||||||
|   async addAmount({ commit, rootState, dispatch }, data) { |   async addAmount({ commit, rootState, dispatch }, data) { | ||||||
|     try { |     try { | ||||||
|  | @ -390,7 +383,9 @@ const getters = { | ||||||
|     return state.users |     return state.users | ||||||
|   }, |   }, | ||||||
|   activeUser: state => { |   activeUser: state => { | ||||||
|     return state.activeUser |     return state.users.find(user => { | ||||||
|  |       return user.username === state.activeUser | ||||||
|  |     }) | ||||||
|   }, |   }, | ||||||
|   allUsers: state => { |   allUsers: state => { | ||||||
|     return state.allUsers |     return state.allUsers | ||||||
|  |  | ||||||
|  | @ -55,9 +55,11 @@ const actions = { | ||||||
|       commit('loginStop', null) |       commit('loginStop', null) | ||||||
|       commit('updateAccessToken', response.data) |       commit('updateAccessToken', response.data) | ||||||
|       if (state.user.group.includes('moneymaster')) { |       if (state.user.group.includes('moneymaster')) { | ||||||
|         router.push('/finanzer') |         router.push('/main/finanzer/overview') | ||||||
|       } else if (state.user.group.includes('bar')) { |       } else if (state.user.group.includes('bar')) { | ||||||
|         router.push('/bar') |         router.push('/main/bar/geruecht') | ||||||
|  |       } else if (state.user.group.includes('user')) { | ||||||
|  |         router.push('/main/user/add') | ||||||
|       } |       } | ||||||
|     } catch (err) { |     } catch (err) { | ||||||
|       commit('loginStop', err.response.data.error) |       commit('loginStop', err.response.data.error) | ||||||
|  | @ -96,6 +98,30 @@ const getters = { | ||||||
|   }, |   }, | ||||||
|   loginError: state => { |   loginError: state => { | ||||||
|     return state.loginError |     return state.loginError | ||||||
|  |   }, | ||||||
|  |   isBar: state => { | ||||||
|  |     try { | ||||||
|  |       return state.user.group.includes('bar') ? true : false | ||||||
|  |     } catch (e) { | ||||||
|  |       return false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   isFinanzer: state => { | ||||||
|  |     try { | ||||||
|  |       return state.user.group.includes('moneymaster') ? true : false | ||||||
|  |     } catch (e) { | ||||||
|  |       return false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   isUser: state => { | ||||||
|  |     try { | ||||||
|  |       return state.user.group.includes('user') ? true : false | ||||||
|  |     } catch (e) { | ||||||
|  |       return false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   isLoggedIn: state => { | ||||||
|  |     return state.user.accessToken ? true : false | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,168 @@ | ||||||
|  | import axios from 'axios' | ||||||
|  | import url from '@/plugins/routes' | ||||||
|  | 
 | ||||||
|  | const state = { | ||||||
|  |   user: null, | ||||||
|  |   creditList: [] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const mutations = { | ||||||
|  |   setUser: (state, user) => { | ||||||
|  |     state.user = user | ||||||
|  |     let list = {} | ||||||
|  |     for (let creditList in user['creditList']) { | ||||||
|  |       console.log(creditList) | ||||||
|  |       let amount = mutations.createAmount(user['creditList'][creditList]) | ||||||
|  |       let credit = mutations.createCredit(user['creditList'][creditList]) | ||||||
|  |       let sum = mutations.createSum(credit, amount) | ||||||
|  |       list[creditList] = [{ ...credit }, { ...amount }, { ...sum }] | ||||||
|  |     } | ||||||
|  |     state.user.creditList = list | ||||||
|  |     state.creditList = [] | ||||||
|  |     console.log(state.user) | ||||||
|  |   }, | ||||||
|  |   createAmount(creditList) { | ||||||
|  |     let amount = { | ||||||
|  |       type: 'Schulden', | ||||||
|  |       jan_amount: 0 - creditList.jan.depts, | ||||||
|  |       feb_amount: 0 - creditList.feb.depts, | ||||||
|  |       maer_amount: 0 - creditList.maer.depts, | ||||||
|  |       apr_amount: 0 - creditList.apr.depts, | ||||||
|  |       mai_amount: 0 - creditList.mai.depts, | ||||||
|  |       jun_amount: 0 - creditList.jun.depts, | ||||||
|  |       jul_amount: 0 - creditList.jul.depts, | ||||||
|  |       aug_amount: 0 - creditList.aug.depts, | ||||||
|  |       sep_amount: 0 - creditList.sep.depts, | ||||||
|  |       okt_amount: 0 - creditList.okt.depts, | ||||||
|  |       nov_amount: 0 - creditList.nov.depts, | ||||||
|  |       dez_amount: 0 - creditList.dez.depts, | ||||||
|  |       last: 0 - creditList['last'] | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     amount.sum = | ||||||
|  |       amount.jan_amount + | ||||||
|  |       amount.feb_amount + | ||||||
|  |       amount.maer_amount + | ||||||
|  |       amount.apr_amount + | ||||||
|  |       amount.mai_amount + | ||||||
|  |       amount.jun_amount + | ||||||
|  |       amount.jul_amount + | ||||||
|  |       amount.aug_amount + | ||||||
|  |       amount.sep_amount + | ||||||
|  |       amount.okt_amount + | ||||||
|  |       amount.nov_amount + | ||||||
|  |       amount.dez_amount | ||||||
|  |     return amount | ||||||
|  |   }, | ||||||
|  |   createCredit(creditList) { | ||||||
|  |     let credit = { | ||||||
|  |       type: 'Guthaben', | ||||||
|  |       jan_amount: creditList.jan.credit, | ||||||
|  |       feb_amount: creditList.feb.credit, | ||||||
|  |       maer_amount: creditList.maer.credit, | ||||||
|  |       apr_amount: creditList.apr.credit, | ||||||
|  |       mai_amount: creditList.mai.credit, | ||||||
|  |       jun_amount: creditList.jun.credit, | ||||||
|  |       jul_amount: creditList.jul.credit, | ||||||
|  |       aug_amount: creditList.aug.credit, | ||||||
|  |       sep_amount: creditList.sep.credit, | ||||||
|  |       okt_amount: creditList.okt.credit, | ||||||
|  |       nov_amount: creditList.nov.credit, | ||||||
|  |       dez_amount: creditList.dez.credit | ||||||
|  |     } | ||||||
|  |     credit.sum = | ||||||
|  |       credit.jan_amount + | ||||||
|  |       credit.feb_amount + | ||||||
|  |       credit.maer_amount + | ||||||
|  |       credit.apr_amount + | ||||||
|  |       credit.mai_amount + | ||||||
|  |       credit.jun_amount + | ||||||
|  |       credit.jul_amount + | ||||||
|  |       credit.aug_amount + | ||||||
|  |       credit.sep_amount + | ||||||
|  |       credit.okt_amount + | ||||||
|  |       credit.nov_amount + | ||||||
|  |       credit.dez_amount | ||||||
|  |     return credit | ||||||
|  |   }, | ||||||
|  |   createSum(credit, amount) { | ||||||
|  |     let sum = { | ||||||
|  |       type: 'Summe', | ||||||
|  |       jan_amount: credit.jan_amount + amount.jan_amount, | ||||||
|  |       feb_amount: credit.feb_amount + amount.feb_amount, | ||||||
|  |       maer_amount: credit.maer_amount + amount.maer_amount, | ||||||
|  |       apr_amount: credit.apr_amount + amount.apr_amount, | ||||||
|  |       mai_amount: credit.mai_amount + amount.mai_amount, | ||||||
|  |       jun_amount: credit.jun_amount + amount.jun_amount, | ||||||
|  |       jul_amount: credit.jul_amount + amount.jul_amount, | ||||||
|  |       aug_amount: credit.aug_amount + amount.aug_amount, | ||||||
|  |       sep_amount: credit.sep_amount + amount.sep_amount, | ||||||
|  |       okt_amount: credit.okt_amount + amount.okt_amount, | ||||||
|  |       nov_amount: credit.nov_amount + amount.nov_amount, | ||||||
|  |       dez_amount: credit.dez_amount + amount.dez_amount | ||||||
|  |     } | ||||||
|  |     sum.sum = | ||||||
|  |       sum.jan_amount + | ||||||
|  |       sum.feb_amount + | ||||||
|  |       sum.maer_amount + | ||||||
|  |       sum.apr_amount + | ||||||
|  |       sum.mai_amount + | ||||||
|  |       sum.jun_amount + | ||||||
|  |       sum.jul_amount + | ||||||
|  |       sum.aug_amount + | ||||||
|  |       sum.sep_amount + | ||||||
|  |       sum.okt_amount + | ||||||
|  |       sum.nov_amount + | ||||||
|  |       sum.dez_amount | ||||||
|  |     return sum | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const actions = { | ||||||
|  |   async getUser({ commit, rootState, dispatch }) { | ||||||
|  |     try { | ||||||
|  |       const response = await axios.get(url.userMain, { | ||||||
|  |         headers: { Token: rootState.login.user.accessToken } | ||||||
|  |       }) | ||||||
|  |       commit('setUser', response.data) | ||||||
|  |     } catch (e) { | ||||||
|  |       if (e.response) | ||||||
|  |         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   async addAmount({ commit, rootState, dispatch }, amount) { | ||||||
|  |     try { | ||||||
|  |       const response = await axios.post( | ||||||
|  |         url.userAddAmount, | ||||||
|  |         { amount: amount }, | ||||||
|  |         { headers: { Token: rootState.login.user.accessToken } } | ||||||
|  |       ) | ||||||
|  |       commit('setUser', response.data) | ||||||
|  |     } catch (e) { | ||||||
|  |       if (e.response) | ||||||
|  |         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const getters = { | ||||||
|  |   user: state => { | ||||||
|  |     return state.user | ||||||
|  |   }, | ||||||
|  |   year: state => { | ||||||
|  |     let year = 0 | ||||||
|  |     for (let creditList in state.user.creditList) { | ||||||
|  |       let currentYear = parseInt(creditList) | ||||||
|  |       if (currentYear > year) year = currentYear | ||||||
|  |     } | ||||||
|  |     return year | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default { | ||||||
|  |   namespaced: true, | ||||||
|  |   state, | ||||||
|  |   mutations, | ||||||
|  |   actions, | ||||||
|  |   getters | ||||||
|  | } | ||||||
|  | @ -1,29 +1,13 @@ | ||||||
| <template> | <template> | ||||||
|   <div> |  | ||||||
|     <TitleBar /> |  | ||||||
|   <v-content> |   <v-content> | ||||||
|       <SearchBar /> |     <router-view/> | ||||||
|       <CreditLists></CreditLists> |  | ||||||
|   </v-content> |   </v-content> | ||||||
|   </div> |  | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import TitleBar from '@/components/TitleBar' |  | ||||||
| import CreditLists from '@/components/baruser/CreditLists' |  | ||||||
| // eslint-disable-next-line no-unused-vars |  | ||||||
| import axios from 'axios' |  | ||||||
| import SearchBar from '../components/baruser/SearchBar' |  | ||||||
| export default { | export default { | ||||||
|   name: 'BarView', |   name: 'BarView' | ||||||
|   components: { SearchBar, CreditLists, TitleBar }, |  | ||||||
|   created() {}, |  | ||||||
|   data() { |  | ||||||
|     return {} |  | ||||||
|   }, |  | ||||||
|   methods: {} |  | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped></style> | ||||||
| </style> |  | ||||||
|  |  | ||||||
|  | @ -1,27 +1,14 @@ | ||||||
| <template> | <template> | ||||||
|   <div> |   <div> | ||||||
|     <TitleBar /> |     <v-navigation-drawer | ||||||
|     <v-navigation-drawer mini-variant expand-on-hover app clipped permanent overflow> |       mini-variant | ||||||
|       <v-list> |       expand-on-hover | ||||||
|         <v-list-item class="title" link @click="setActiveUser(activeUser)"> |       app | ||||||
|           <v-list-item-icon> |       clipped | ||||||
|             <v-icon>home</v-icon> |       permanent | ||||||
|           </v-list-item-icon> |       overflow | ||||||
|           <v-list-item-title>Gesamtübersicht</v-list-item-title> |       right | ||||||
|         </v-list-item> |  | ||||||
|       </v-list> |  | ||||||
|       <v-divider /> |  | ||||||
|       <v-list> |  | ||||||
|         <v-list-item |  | ||||||
|           v-for="user in users" |  | ||||||
|           v-bind:key="users.indexOf(user)" |  | ||||||
|           :class="user.username === activeUser.username ? 'v-list-item--highlighted' : ''" |  | ||||||
|           link |  | ||||||
|           @click="setActiveUser(user)" |  | ||||||
|     > |     > | ||||||
|           <v-list-item-title>{{user.lastname}}, {{user.firstname}}</v-list-item-title> |  | ||||||
|         </v-list-item> |  | ||||||
|       </v-list> |  | ||||||
|       <template v-slot:append> |       <template v-slot:append> | ||||||
|         <v-list> |         <v-list> | ||||||
|           <v-list-item> |           <v-list-item> | ||||||
|  | @ -53,29 +40,22 @@ | ||||||
|         </v-list> |         </v-list> | ||||||
|       </template> |       </template> | ||||||
|     </v-navigation-drawer> |     </v-navigation-drawer> | ||||||
|     <v-content v-if="!activeUser.username"> |     <router-view /> | ||||||
|       <Overview /> |  | ||||||
|     </v-content> |  | ||||||
|     <v-content v-else> |  | ||||||
|       <User /> |  | ||||||
|     </v-content> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import TitleBar from '@/components/TitleBar' |  | ||||||
| import Overview from '../components/finanzer/Overview' |  | ||||||
| import User from '../components/finanzer/User' |  | ||||||
| // eslint-disable-next-line no-unused-vars | // eslint-disable-next-line no-unused-vars | ||||||
| import { mapGetters } from 'vuex' | import { mapGetters } from 'vuex' | ||||||
| import { mapActions } from 'vuex' | import { mapActions } from 'vuex' | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
|   name: 'FinanzerView', |   name: 'FinanzerView', | ||||||
|   components: { User, Overview, TitleBar }, |   components: {}, | ||||||
|   created() { |   created() { | ||||||
|     this.getAllUsers() |     this.getAllUsers() | ||||||
|     this.getUsers() |     this.getUsers() | ||||||
|  |     this.createYears() | ||||||
|   }, |   }, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|  | @ -86,7 +66,9 @@ export default { | ||||||
|     getAllUsers: 'finanzerUsers/getAllUsers', |     getAllUsers: 'finanzerUsers/getAllUsers', | ||||||
|     setActiveUser: 'finanzerUsers/setActiveUser', |     setActiveUser: 'finanzerUsers/setActiveUser', | ||||||
|     getUsers: 'finanzerUsers/getUsers', |     getUsers: 'finanzerUsers/getUsers', | ||||||
|     finanzerUsers: 'finanzerUsers/addUser' |     finanzerUsers: 'finanzerUsers/addUser', | ||||||
|  |     createYears: 'finanzerUsers/createYears', | ||||||
|  |     logout: 'logout' | ||||||
|   }), |   }), | ||||||
|   computed: mapGetters({ |   computed: mapGetters({ | ||||||
|     users: 'finanzerUsers/users', |     users: 'finanzerUsers/users', | ||||||
|  | @ -96,5 +78,4 @@ export default { | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped></style> | ||||||
| </style> |  | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| <template> | <template> | ||||||
|   <div> |   <div> | ||||||
|     <TitleBar /> |  | ||||||
|     <v-content> |     <v-content> | ||||||
|       <v-container class="fill-height" fluid> |       <v-container class="fill-height" fluid> | ||||||
|         <v-row align="center" justify="center"> |         <v-row align="center" justify="center"> | ||||||
|  | @ -19,7 +18,9 @@ | ||||||
|                     type="text" |                     type="text" | ||||||
|                     v-model="username" |                     v-model="username" | ||||||
|                     ref="first" |                     ref="first" | ||||||
|                     @keyup.enter="doLogin({username: username, password: password})" |                     @keyup.enter=" | ||||||
|  |                       doLogin({ username: username, password: password }) | ||||||
|  |                     " | ||||||
|                     @input="resetLoginError" |                     @input="resetLoginError" | ||||||
|                   /> |                   /> | ||||||
| 
 | 
 | ||||||
|  | @ -30,19 +31,26 @@ | ||||||
|                     prepend-icon="lock" |                     prepend-icon="lock" | ||||||
|                     type="password" |                     type="password" | ||||||
|                     v-model="password" |                     v-model="password" | ||||||
|                     @keyup.enter="doLogin({username: username, password: password})" |                     @keyup.enter=" | ||||||
|  |                       doLogin({ username: username, password: password }) | ||||||
|  |                     " | ||||||
|                     @input="resetLoginError" |                     @input="resetLoginError" | ||||||
|                   /> |                   /> | ||||||
|                 </v-form> |                 </v-form> | ||||||
|               </v-card-text> |               </v-card-text> | ||||||
|               <v-alert v-if="loginError" dense type="error">{{ loginError }}</v-alert> |               <v-alert v-if="loginError" dense type="error">{{ | ||||||
|  |                 loginError | ||||||
|  |               }}</v-alert> | ||||||
|               <v-card-actions> |               <v-card-actions> | ||||||
|                 <v-spacer /> |                 <v-spacer /> | ||||||
|                 <v-btn |                 <v-btn | ||||||
|                   @click="doLogin({username: username, password: password})" |                   @click="doLogin({ username: username, password: password })" | ||||||
|                   @submit.prevent="doLogin({username: username, password: password})" |                   @submit.prevent=" | ||||||
|  |                     doLogin({ username: username, password: password }) | ||||||
|  |                   " | ||||||
|                   color="primary" |                   color="primary" | ||||||
|                 >Login</v-btn> |                   >Login</v-btn | ||||||
|  |                 > | ||||||
|               </v-card-actions> |               </v-card-actions> | ||||||
|             </v-card> |             </v-card> | ||||||
|           </v-col> |           </v-col> | ||||||
|  | @ -53,13 +61,12 @@ | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import TitleBar from '@/components/TitleBar' |  | ||||||
| // eslint-disable-next-line no-unused-vars | // eslint-disable-next-line no-unused-vars | ||||||
| import { mapActions } from 'vuex' | import { mapActions } from 'vuex' | ||||||
| import { mapGetters } from 'vuex' | import { mapGetters } from 'vuex' | ||||||
| export default { | export default { | ||||||
|   name: 'Login', |   name: 'Login', | ||||||
|   components: { TitleBar }, |   components: {}, | ||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       username: null, |       username: null, | ||||||
|  | @ -71,5 +78,4 @@ export default { | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped></style> | ||||||
| </style> |  | ||||||
|  |  | ||||||
|  | @ -0,0 +1,79 @@ | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <v-navigation-drawer | ||||||
|  |       v-if="isLoggedIn" | ||||||
|  |       mini-variant | ||||||
|  |       expand-on-hover | ||||||
|  |       app | ||||||
|  |       clipped | ||||||
|  |       permanent | ||||||
|  |       overflow | ||||||
|  |     > | ||||||
|  |       <v-list> | ||||||
|  |         <v-list-item v-if="isUser" class="title" link to="/main/user/add"> | ||||||
|  |           <v-list-item-icon> | ||||||
|  |             <v-icon>person</v-icon> | ||||||
|  |           </v-list-item-icon> | ||||||
|  |           <v-list-item-title>Account</v-list-item-title> | ||||||
|  |         </v-list-item> | ||||||
|  |         <v-list-item v-if="isBar" class="title" link to="/main/bar/geruecht"> | ||||||
|  |           <v-list-item-icon> | ||||||
|  |             <v-icon>local_bar</v-icon> | ||||||
|  |           </v-list-item-icon> | ||||||
|  |           <v-list-item-title> | ||||||
|  |             Gerüchte | ||||||
|  |           </v-list-item-title> | ||||||
|  |         </v-list-item> | ||||||
|  |         <v-list-item v-if="isFinanzer" class="title" link to="/main/finanzer/overview"> | ||||||
|  |           <v-list-item-icon> | ||||||
|  |             <v-icon>attach_money</v-icon> | ||||||
|  |           </v-list-item-icon> | ||||||
|  |           <v-list-item-title>Finanzer</v-list-item-title> | ||||||
|  |         </v-list-item> | ||||||
|  |       </v-list> | ||||||
|  |       <v-divider /> | ||||||
|  |       <router-view name="finanzerNav" /> | ||||||
|  |       <router-view name="userNav"/> | ||||||
|  |       <router-view name="barNav"/> | ||||||
|  |       <template v-slot:append> | ||||||
|  |         <v-list> | ||||||
|  |           <v-list-item> | ||||||
|  |             <v-list-item-icon> | ||||||
|  |               <v-icon>exit_to_app</v-icon> | ||||||
|  |             </v-list-item-icon> | ||||||
|  |             <v-list-item-title> | ||||||
|  |               <v-btn block text @click="logout">Logout</v-btn> | ||||||
|  |             </v-list-item-title> | ||||||
|  |           </v-list-item> | ||||||
|  |         </v-list> | ||||||
|  |       </template> | ||||||
|  |     </v-navigation-drawer> | ||||||
|  |     <router-view /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import { mapActions, mapGetters } from 'vuex' | ||||||
|  | export default { | ||||||
|  |   name: 'MainView', | ||||||
|  |   components: {  }, | ||||||
|  |   created() { | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions({ | ||||||
|  |       logout: 'logout' | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapGetters({ | ||||||
|  |       group: 'group', | ||||||
|  |       isBar: 'isBar', | ||||||
|  |       isUser: 'isUser', | ||||||
|  |       isFinanzer: 'isFinanzer', | ||||||
|  |       isLoggedIn: 'isLoggedIn' | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,27 @@ | ||||||
|  | <template> | ||||||
|  |     <v-content> | ||||||
|  |         <router-view/> | ||||||
|  |     </v-content> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import { mapActions, mapGetters } from 'vuex' | ||||||
|  | export default { | ||||||
|  |   name: 'UserView', | ||||||
|  |   created() { | ||||||
|  |     this.getUser() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions({ | ||||||
|  |       getUser: 'user/getUser' | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     ...mapGetters({ | ||||||
|  |       user: 'user/user' | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,27 @@ | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <SearchBar /> | ||||||
|  |     <CreditLists></CreditLists> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import CreditLists from '@/components/baruser/CreditLists' | ||||||
|  | import { mapActions } from 'vuex' | ||||||
|  | // eslint-disable-next-line no-unused-vars | ||||||
|  | import axios from 'axios' | ||||||
|  | import SearchBar from '../../components/baruser/SearchBar' | ||||||
|  | export default { | ||||||
|  |   name: 'GeruechteView', | ||||||
|  |   components: { SearchBar, CreditLists }, | ||||||
|  |   created() {}, | ||||||
|  |   data() { | ||||||
|  |     return {} | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     ...mapActions(['logout']) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -1,8 +1,12 @@ | ||||||
|  | //const fs = require('fs')
 | ||||||
|  | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|   "transpileDependencies": [ |   transpileDependencies: ['vuetify'], | ||||||
|     "vuetify" |  | ||||||
|   ], |  | ||||||
|   devServer: { |   devServer: { | ||||||
|     disableHostCheck: true |     disableHostCheck: true | ||||||
|  |     // https: {
 | ||||||
|  |     //   key: fs.readFileSync('./cert/server.key'),
 | ||||||
|  |     //   cert: fs.readFileSync('./cert/server.crt')
 | ||||||
|  |     // }
 | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue