Navbar.vue 7.23 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'">
10 11 12
        <div class="right-menu-item">
          <el-image style="width: 22px;height: 22px;cursor: pointer;" :src="helpIcon" @click="tohelp"></el-image>
        </div>
dcy's avatar
dcy committed
13
        <el-badge :value="matterNum !== 0 ? matterNum : '' " class="right-menu-item badge">
14
         <div @click="$router.push('/task/todo')" style="font-size: 28px; color: #cccccc;cursor: pointer;" class="el-icon-postcard"></div>
dcy's avatar
dcy committed
15
        </el-badge>
16 17


dcy's avatar
dcy committed
18
        <el-badge :value="notMessage !== 0 ? notMessage : '' " class="right-menu-item badge">
dcy's avatar
dcy committed
19
         <el-image style="width: 22px;height: 20px;cursor: pointer;" :src="unreadMessage" @click="notRead"></el-image>
jiuping520's avatar
jiuping520 committed
20 21 22 23
        </el-badge>



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

jiuping520's avatar
jiuping520 committed
26

sunhongwei's avatar
sunhongwei committed
27

Marcus's avatar
Marcus committed
28
<!--        <el-tooltip :content="$t('文档地址')" effect="dark" placement="bottom">-->
houjn@hikoon.cn's avatar
houjn@hikoon.cn committed
29 30
<!--          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
<!--        </el-tooltip>-->
sunhongwei's avatar
sunhongwei committed
31 32 33

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

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

      </template>

Marcus's avatar
Marcus committed
40
      <!-- <el-select v-model="locale" :placeholder="$t('语言')" class="right-menu-item select-nav"  @change="localeChange">
sunhongwei's avatar
sunhongwei committed
41
        <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
42 43 44
      </el-select> -->

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

sunhongwei's avatar
sunhongwei committed
46
      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
47

dragondean@qq.com's avatar
dragondean@qq.com committed
48 49 50
        <div class="avatar-wrapper flex-center">
          {{$store.getters.name}}
          <img :src="avatar" class="user-avatar ml-10">
sunhongwei's avatar
sunhongwei committed
51 52 53 54
          <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
55
            <el-dropdown-item>{{$t('个人中心')}}</el-dropdown-item>
sunhongwei's avatar
sunhongwei committed
56 57
          </router-link>
          <el-dropdown-item @click.native="setting = true">
Marcus's avatar
Marcus committed
58
            <span>{{ $t('布局设置') }}</span>
sunhongwei's avatar
sunhongwei committed
59 60
          </el-dropdown-item>
          <el-dropdown-item divided @click.native="logout">
Marcus's avatar
Marcus committed
61
            <span>{{ $t('退出登录') }}</span>
sunhongwei's avatar
sunhongwei committed
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
          </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
79
import {getLocale, saveLocale} from "@/utils/db";
dcy's avatar
dcy committed
80
import unreadMessage from  "@/assets/images/unread-message.png"
81
import helpIcon from  "@/assets/images/help.png"
dragondean@qq.com's avatar
dragondean@qq.com committed
82
import i18n from '@/i18n'
sunhongwei's avatar
sunhongwei committed
83
export default {
sunhongwei's avatar
sunhongwei committed
84 85
  data() {
    return {
dcy's avatar
dcy committed
86
      unreadMessage,
87
      helpIcon,
88
      // locale: getLocale(),
sunhongwei's avatar
sunhongwei committed
89
      // 枚举
dragondean@qq.com's avatar
dragondean@qq.com committed
90
      // langDatas: LangEnum.LANG,
jiuping520's avatar
jiuping520 committed
91
      notReadTotal:0,//要去取VUEX里面的未读数据总数,我不会,登录之后要调得到当前人未读记录总数接口放到VUEX中
dragondean@qq.com's avatar
dragondean@qq.com committed
92
      lang: i18n.locale, // 当前语言
sunhongwei's avatar
sunhongwei committed
93 94
    }
  },
dcy's avatar
dcy committed
95
  created() {
96 97 98 99
    this.updateMessage()
    setInterval(() => {
    this.updateMessage()
    }, 10000)
dragondean@qq.com's avatar
dragondean@qq.com committed
100
  },
sunhongwei's avatar
sunhongwei committed
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 126 127 128 129 130 131
  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
132 133 134
    },
    notMessage(){
      return this.$store.state.user.notMessage
dcy's avatar
dcy committed
135 136 137
    },
    matterNum(){
      return this.$store.state.user.matterNum
sunhongwei's avatar
sunhongwei committed
138 139
    }
  },
dragondean@qq.com's avatar
dragondean@qq.com committed
140 141 142 143 144 145 146
  watch:{
    lang(val){
      console.log('切换了语言', val)
      this.$i18n.locale = val
      saveLocale(val)
    }
  },
sunhongwei's avatar
sunhongwei committed
147
  methods: {
148 149 150 151
    updateMessage(){
      this.$store.dispatch('getNotMessage');
      this.$store.dispatch('getToDoList');
    },
sunhongwei's avatar
sunhongwei committed
152 153 154
    toggleSideBar() {
      this.$store.dispatch('app/toggleSideBar')
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
155
    /* localeChange(value) {
sunhongwei's avatar
sunhongwei committed
156 157
      console.log(value)
      saveLocale(value)
dragondean@qq.com's avatar
dragondean@qq.com committed
158
    }, */
sunhongwei's avatar
sunhongwei committed
159 160 161
    async logout() {
      this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
        this.$store.dispatch('LogOut').then(() => {
sunhongwei's avatar
sunhongwei committed
162
          location.href = '/';
sunhongwei's avatar
sunhongwei committed
163 164
        })
      }).catch(() => {});
jiuping520's avatar
jiuping520 committed
165 166
    },
    notRead(){
dcy's avatar
dcy committed
167
      this.$router.push({path:'/system/internalMessage/my-internal-message',query:{status:'0'}});
168 169 170
    },
    tohelp(){
      this.$router.push({path:'/operation_manage/info'});
sunhongwei's avatar
sunhongwei committed
171 172 173 174 175 176 177 178 179 180 181 182 183
    }
  }
}
</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
184

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

        &:hover {
          background: rgba(0, 0, 0, .025)
        }
      }
    }
dcy's avatar
dcy committed
244 245 246 247 248 249 250 251 252 253 254
   ::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
255 256 257 258 259 260 261 262 263
    .avatar-container {
      margin-right: 30px;

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

        .user-avatar {
          cursor: pointer;
dcy's avatar
dcy committed
264 265 266 267
          width: 32px;
          height: 32px;
          border-radius: 50%;
          vertical-align: sub;
sunhongwei's avatar
sunhongwei committed
268 269 270 271 272
        }

        .el-icon-caret-bottom {
          cursor: pointer;
          position: absolute;
dcy's avatar
dcy committed
273 274 275
          right: -16px;
          top: 10px;
          font-size: 14px;
sunhongwei's avatar
sunhongwei committed
276 277 278 279 280 281
        }
      }
    }
  }
}
</style>