Advertisement
firmansmoh

Navbar.vue

Apr 8th, 2020
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <template>
  2.     <nav>
  3.         <v-app-bar app dark flat color="primary" extended v-if="isHome">
  4.             <v-app-bar-nav-icon @click="drawer = !drawer"></v-app-bar-nav-icon>
  5.             <v-toolbar-title class="text-uppercase font-weight-light">{{appName}}</v-toolbar-title>
  6.  
  7.             <v-spacer></v-spacer>
  8.  
  9.             <!-- dropdown menu  -->
  10.  
  11.  
  12.             <v-btn icon>
  13.                 <v-badge color="orange" overlap >
  14.                     <template v-slot:badge v-if="count>0">
  15.                         <span>{{count}}</span>
  16.                     </template>    
  17.                 <v-icon>
  18.                     mdi-cart
  19.                 </v-icon>
  20.                 </v-badge>
  21.             </v-btn>
  22.  
  23.             <v-text-field slot="extension" hide-details append-icon="mdi-microphone" flat label="Search" prepend-inner-icon="mdi-magnify" solo-inverted
  24.             @click="setDialogComponent('Search')"></v-text-field>
  25.         </v-app-bar>
  26.  
  27.         <v-app-bar app dark  color="primary" v-else>
  28.             <v-btn icon @click="back()">
  29.                 <v-icon>mdi-arrow-left-circle</v-icon>
  30.             </v-btn>
  31.             <v-spacer></v-spacer>
  32.  
  33.             <!-- dropdown menu  -->
  34.  
  35.  
  36.             <v-btn icon>
  37.                 <v-badge color="orange" overlap>
  38.                     <template v-slot:badge v-if="count > 0">
  39.                         <span>{{count}}</span>
  40.                     </template>    
  41.                 <v-icon>
  42.                     mdi-cart
  43.                 </v-icon>
  44.                 </v-badge>
  45.             </v-btn>
  46.  
  47.         </v-app-bar>
  48.    
  49.         <v-navigation-drawer app v-model="drawer">
  50.             <!-- <v-btn icon dark @click="drawer = !drawer">
  51.                 <v-icon>
  52.                     mdi-close
  53.                 </v-icon>
  54.  
  55.             </v-btn> -->
  56.  
  57.                 <v-list>
  58.                     <v-list-item v-if="!guest">
  59.  
  60.                     <v-list-item-avatar class="">
  61.                         <v-img :src="getImage(user.avatar)"></v-img>
  62.                     </v-list-item-avatar>
  63.                         <v-list-item-content>
  64.                             <v-list-item-title>{{user.name}}</v-list-item-title>
  65.                         </v-list-item-content>
  66.                     </v-list-item>
  67.  
  68.                     <v-list-item v-else>
  69.                         <div class="pa-2 flex">
  70.                             <v-btn block color="primary" class="mb-1" @click="setDialogComponent('Login')" >
  71.                                 <v-icon left >
  72.                                     mdi-lock
  73.                                 </v-icon>
  74.                                 <span class="text-uppercase">
  75.                                     Login
  76.                                 </span>
  77.                             </v-btn>
  78.                             <v-btn block color="success" class="mb-1">
  79.                                 <v-icon left>
  80.                                     mdi-account
  81.                                 </v-icon>
  82.                                 <span class="text-uppercase">Register</span>
  83.                             </v-btn>
  84.                             </div>
  85.                     </v-list-item>
  86.                     <v-divider></v-divider>
  87.                     <v-list-item  v-for="menu in menus" :key="menu.text" router :to="menu.route ">
  88.                        
  89.                         <v-list-item-icon>
  90.                             <v-icon>{{menu.icon}}</v-icon>
  91.                         </v-list-item-icon>
  92.                         <v-list-item-content>
  93.                             <v-list-item-title>{{menu.text}}</v-list-item-title>
  94.                         </v-list-item-content>
  95.                     </v-list-item>
  96.                 </v-list>
  97.                     <template v-slot:append v-if="!guest">
  98.                     <div class="pa-2">
  99.                     <v-btn block color="red" dark @click="logout">
  100.                     <v-icon left >mdi-lock</v-icon>
  101.                     Logout
  102.                     </v-btn>
  103.                     </div>
  104.                     </template>
  105.  
  106.         </v-navigation-drawer>
  107.     </nav>
  108. </template>
  109.  
  110. <script>
  111. import { mapGetters,mapActions } from 'vuex';
  112. import Axios from 'axios';
  113.  
  114.     export default {
  115.         name : 'Navbar',
  116.         data() {
  117.             return {
  118.                 drawer : false,
  119.                 menus : [
  120.                     {icon:'mdi-home', text :'Home', route:'/'},
  121.                     {icon:'mdi-folder', text :'My Project', route:'/projects'},
  122.                     {icon:'mdi-account', text :'Team', route:'/team'},
  123.                 ],
  124.             }
  125.         },
  126.         computed : {
  127.             isHome(){
  128.             return (this.$route.path === '/');
  129.             },  
  130.             ...mapGetters({
  131.                 count : 'cart/count',
  132.                 user  : 'auth/user',
  133.                 guest : 'auth/guest',
  134.                 dialogStatus : 'dialog/status',
  135.                 currentComponent : 'dialog/component',
  136.             }),
  137.             dialog : {
  138.                 get() {
  139.                     return this.dialogStatus
  140.                 },
  141.                 set(value) {
  142.                     this.setDialogStatus(value)
  143.                 }
  144.             }
  145.         },
  146.         methods : {
  147.             back(){
  148.             this.$router.go(-1);
  149.             },
  150.             ...mapActions({
  151.                 setDialogStatus : 'dialog/setStatus',
  152.                 setDialogComponent : 'dialog/setComponent',
  153.             }),
  154.             logout(){
  155.                 let config = {
  156.                     headers : {
  157.                         'Authorization':'Bearer' + this.user.api_token,
  158.                     },
  159.                 }
  160.                 let url = 'http://localhost:8000/api/v1/logout'
  161.                 Axios.post(url,{},config)
  162.                 .then(response => {
  163.                     this.setAuth({})
  164.                     this.setAlert({
  165.                         status : true,
  166.                         color : 'success',
  167.                         text : response,
  168.                     })
  169.                     .catch(error => {
  170.                     console.log(this.user)
  171.                     console.log(config.headers)
  172.                         let {data} = error.response
  173.                         this.setAlert({
  174.                             status : true,
  175.                             color:'error',
  176.                             text : data
  177.                         })
  178.                     })
  179.                 })
  180.             }
  181.         }
  182.     }
  183. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement