Navbar.vue 6.9 KB
Newer Older
sunhongwei's avatar
sunhongwei committed
1 2 3 4 5 6 7 8 9
<template>
  <div class="navbar">
    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />

    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>

    <div class="right-menu">
      <template v-if="device!=='mobile'">
dcy's avatar
dcy committed
10
        <el-badge :value="matterNum !== 0 ? matterNum : '' " class="right-menu-item badge">
11
         <div @click="$router.push('/task/todo')" style="font-size: 28px; color: #cccccc;cursor: pointer;" class="el-icon-postcard"></div>
dcy's avatar
dcy committed
12
        </el-badge>
dragondean@qq.com's avatar
dragondean@qq.com committed
13
        
dcy's avatar
dcy committed
14
        <el-badge :value="notMessage !== 0 ? notMessage : '' " class="right-menu-item badge">
dcy's avatar
dcy committed
15
         <el-image style="width: 22px;height: 20px;cursor: pointer;" :src="unreadMessage" @click="notRead"></el-image>
jiuping520's avatar
jiuping520 committed
16 17 18 19
        </el-badge>



sunhongwei's avatar
sunhongwei committed
20 21
        <search id="header-search" class="right-menu-item" />

jiuping520's avatar
jiuping520 committed
22

sunhongwei's avatar
sunhongwei committed
23

houjn@hikoon.cn's avatar
houjn@hikoon.cn committed
24 25 26
<!--        <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
<!--          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
<!--        </el-tooltip>-->
sunhongwei's avatar
sunhongwei committed
27 28 29

        <screenfull id="screenfull" class="right-menu-item hover-effect" />

dragondean@qq.com's avatar
dragondean@qq.com committed
30
        <el-tooltip :content="$t('布局大小')" effect="dark" placement="bottom">
sunhongwei's avatar
sunhongwei committed
31 32 33 34 35
          <size-select id="size-select" class="right-menu-item hover-effect" />
        </el-tooltip>

      </template>

dragondean@qq.com's avatar
dragondean@qq.com committed
36
      <!-- <el-select v-model="locale" placeholder="语言" class="right-menu-item select-nav"  @change="localeChange">
sunhongwei's avatar
sunhongwei committed
37
        <el-option v-for="dict in langDatas" :key="dict.value" :label="dict.label" :value="dict.value"/>
dragondean@qq.com's avatar
dragondean@qq.com committed
38 39 40
      </el-select> -->

      <dict-selector :type="DICT_TYPE.SYSTEM_LOCALE" v-model="lang" defaultable class="right-menu-item select-nav" />
sunhongwei's avatar
sunhongwei committed
41

sunhongwei's avatar
sunhongwei committed
42
      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
dragondean@qq.com's avatar
dragondean@qq.com committed
43 44 45 46
        
        <div class="avatar-wrapper flex-center">
          {{$store.getters.name}}
          <img :src="avatar" class="user-avatar ml-10">
sunhongwei's avatar
sunhongwei committed
47 48 49 50
          <i class="el-icon-caret-bottom" />
        </div>
        <el-dropdown-menu slot="dropdown">
          <router-link to="/user/profile">
dragondean@qq.com's avatar
dragondean@qq.com committed
51
            <el-dropdown-item>{{$t('个人中心')}}</el-dropdown-item>
sunhongwei's avatar
sunhongwei committed
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
          </router-link>
          <el-dropdown-item @click.native="setting = true">
            <span>布局设置</span>
          </el-dropdown-item>
          <el-dropdown-item divided @click.native="logout">
            <span>退出登录</span>
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
sunhongwei's avatar
sunhongwei committed
75
import {getLocale, saveLocale} from "@/utils/db";
dcy's avatar
dcy committed
76
import unreadMessage from  "@/assets/images/unread-message.png"
dragondean@qq.com's avatar
dragondean@qq.com committed
77
import i18n from '@/i18n'
sunhongwei's avatar
sunhongwei committed
78
export default {
sunhongwei's avatar
sunhongwei committed
79 80
  data() {
    return {
dcy's avatar
dcy committed
81
      unreadMessage,
82
      // locale: getLocale(),
sunhongwei's avatar
sunhongwei committed
83
      // 枚举
dragondean@qq.com's avatar
dragondean@qq.com committed
84
      // langDatas: LangEnum.LANG,
jiuping520's avatar
jiuping520 committed
85
      notReadTotal:0,//要去取VUEX里面的未读数据总数,我不会,登录之后要调得到当前人未读记录总数接口放到VUEX中
dragondean@qq.com's avatar
dragondean@qq.com committed
86
      lang: i18n.locale, // 当前语言
sunhongwei's avatar
sunhongwei committed
87 88
    }
  },
dcy's avatar
dcy committed
89
  created() {
90 91 92 93
    this.updateMessage()
    setInterval(() => {
    this.updateMessage()
    }, 10000)
dragondean@qq.com's avatar
dragondean@qq.com committed
94
  },
sunhongwei's avatar
sunhongwei committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
  components: {
    Breadcrumb,
    TopNav,
    Hamburger,
    Screenfull,
    SizeSelect,
    Search,
    RuoYiGit,
    RuoYiDoc
  },
  computed: {
    ...mapGetters([
      'sidebar',
      'avatar',
      'device'
    ]),
    setting: {
      get() {
        return this.$store.state.settings.showSettings
      },
      set(val) {
        this.$store.dispatch('settings/changeSetting', {
          key: 'showSettings',
          value: val
        })
      }
    },
    topNav: {
      get() {
        return this.$store.state.settings.topNav
      }
dcy's avatar
dcy committed
126 127 128
    },
    notMessage(){
      return this.$store.state.user.notMessage
dcy's avatar
dcy committed
129 130 131
    },
    matterNum(){
      return this.$store.state.user.matterNum
sunhongwei's avatar
sunhongwei committed
132 133
    }
  },
dragondean@qq.com's avatar
dragondean@qq.com committed
134 135 136 137 138 139 140
  watch:{
    lang(val){
      console.log('切换了语言', val)
      this.$i18n.locale = val
      saveLocale(val)
    }
  },
sunhongwei's avatar
sunhongwei committed
141
  methods: {
142 143 144 145
    updateMessage(){
      this.$store.dispatch('getNotMessage');
      this.$store.dispatch('getToDoList');
    },
sunhongwei's avatar
sunhongwei committed
146 147 148
    toggleSideBar() {
      this.$store.dispatch('app/toggleSideBar')
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
149
    /* localeChange(value) {
sunhongwei's avatar
sunhongwei committed
150 151
      console.log(value)
      saveLocale(value)
dragondean@qq.com's avatar
dragondean@qq.com committed
152
    }, */
sunhongwei's avatar
sunhongwei committed
153 154 155
    async logout() {
      this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
        this.$store.dispatch('LogOut').then(() => {
sunhongwei's avatar
sunhongwei committed
156
          location.href = '/';
sunhongwei's avatar
sunhongwei committed
157 158
        })
      }).catch(() => {});
jiuping520's avatar
jiuping520 committed
159 160
    },
    notRead(){
dcy's avatar
dcy committed
161
      this.$router.push({path:'/system/internalMessage/my-internal-message',query:{status:'0'}});
sunhongwei's avatar
sunhongwei committed
162 163 164 165 166 167 168 169 170 171 172 173 174
    }
  }
}
</script>

<style lang="scss" scoped>
.navbar {
  height: 50px;
  overflow: hidden;
  position: relative;
  background: #fff;
  box-shadow: 0 1px 4px rgba(0,21,41,.08);

jiuping520's avatar
jiuping520 committed
175

sunhongwei's avatar
sunhongwei committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
  .hamburger-container {
    line-height: 46px;
    height: 100%;
    float: left;
    cursor: pointer;
    transition: background .3s;
    -webkit-tap-highlight-color:transparent;

    &:hover {
      background: rgba(0, 0, 0, .025)
    }
  }

  .breadcrumb-container {
    float: left;
  }

  .topmenu-container {
    position: absolute;
    left: 50px;
  }

  .errLog-container {
    display: inline-block;
    vertical-align: top;
  }

  .right-menu {
    float: right;
    height: 100%;
    line-height: 50px;

    &:focus {
      outline: none;
    }
dcy's avatar
dcy committed
211 212 213 214
    ::v-deep.el-badge{
     .el-badge__content{
       top: 13px;
       right:15px;
dcy's avatar
dcy committed
215
       height: 20px;
dcy's avatar
dcy committed
216 217
     }
    }
sunhongwei's avatar
sunhongwei committed
218 219 220 221 222 223 224
    .right-menu-item {
      display: inline-block;
      padding: 0 8px;
      height: 100%;
      font-size: 18px;
      color: #5a5e66;
      vertical-align: text-bottom;
225
      margin-right: 15px;
sunhongwei's avatar
sunhongwei committed
226 227 228 229 230 231 232 233 234
      &.hover-effect {
        cursor: pointer;
        transition: background .3s;

        &:hover {
          background: rgba(0, 0, 0, .025)
        }
      }
    }
dcy's avatar
dcy committed
235 236 237 238 239 240 241 242 243 244 245
   ::v-deep.select-nav{
     width: 110px;
     height: 32px;
     vertical-align: top;
     .el-input__inner{
       font-size: 14px;
       font-family: PingFang SC;
       font-weight: 400;
       color: #D9D9D9;
     }
   }
sunhongwei's avatar
sunhongwei committed
246 247 248 249 250 251 252 253 254
    .avatar-container {
      margin-right: 30px;

      .avatar-wrapper {
        margin-top: 5px;
        position: relative;

        .user-avatar {
          cursor: pointer;
dcy's avatar
dcy committed
255 256 257 258
          width: 32px;
          height: 32px;
          border-radius: 50%;
          vertical-align: sub;
sunhongwei's avatar
sunhongwei committed
259 260 261 262 263
        }

        .el-icon-caret-bottom {
          cursor: pointer;
          position: absolute;
dcy's avatar
dcy committed
264 265 266
          right: -16px;
          top: 10px;
          font-size: 14px;
sunhongwei's avatar
sunhongwei committed
267 268 269 270 271 272
        }
      }
    }
  }
}
</style>