header.vue

133 阅读1分钟
<template>
  <Header :style="{position: 'absolute', top:0, width: '100%',minWidth: '1024px'}">
    <!-- 切换按钮 -->
    <div :class="[!isCollapsed?'logo-large-icon':'logo-small-icon']">
      <div v-show="!isCollapsed" class="fl logo-div">
        <img key="max-logo" :src="imgLogo" />
        <p>安盾管理平台</p>
      </div>
      <div v-show="isCollapsed" class="fl logo-div">
        <img key="min-logo" :src="imgLogo" />
      </div>
    </div>
    <!-- navbar -->
    <div :class="[!isCollapsed?'navbar':'navbar-toggle']">
      <span @click="collapsedSider">
        <Icon class="toggle-tap" type="md-menu" size="18" />
      </span>
      <router-link to="/home" tag="span" :class="routerParentMenu=='home:-'?'active':''">工作台</router-link>
      <div v-if="$route.path=='/relationship/dataBoard'" class="relationship-style">
        <calendar />
      </div>
      <div v-if="headerCtrl">
        <router-link v-for="(menu,index) in menuList" :key="index"
                     v-modulesPermission="[menu.code]"
                     :to="routerLinkTo(menu.code)" tag="span"
                     :class="routerParentMenu==menu.code?'active':''"
        >{{ menu.name }}</router-link>

        <!-- <router-link v-modulesPermission="['market-center:-']" :to="routerLinkTo('market-center:-')" tag="span" :class="routerParentMenu=='market-center:-'?'active':''">市场中心</router-link>
                <router-link v-modulesPermission="['product-center:-']" :to="routerLinkTo('product-center:-')" :class="routerParentMenu=='product-center:-'?'active':''" tag="span">产品中心</router-link>
                <router-link v-modulesPermission="['cooperation:-']" :to="routerLinkTo('cooperation:-')" tag="span" :class="routerParentMenu=='cooperation:-'?'active':''">合作团队</router-link>
                <router-link v-modulesPermission="['project:-']" :to="routerLinkTo('project:-')" :class="routerParentMenu=='project:-'?'active':''" tag="span">项目管理</router-link>
                <router-link v-modulesPermission="['clue:-']" :to="routerLinkTo('clue:-')" :class="routerParentMenu=='clue:-'?'active':''" tag="span">线索管理</router-link>
                <router-link v-modulesPermission="['case:-']" :to="routerLinkTo('case:-')" tag="span" :class="routerParentMenu=='case:-'?'active':''">案件管理</router-link>
                <router-link v-modulesPermission="['system:-']" :to="routerLinkTo('system:-')" tag="span" :class="routerParentMenu=='system:-'?'active':''">系统设置</router-link>
                <router-link v-modulesPermission="['trading-center:-']" :to="routerLinkTo('trading-center:-')" tag="span" :class="routerParentMenu=='trading-center:-'?'active':''">交易中心</router-link> -->

        <!-- <router-link v-modulesPermission="['contract:-']" :to="routerLinkTo('contract:-')" tag="span" :class="routerParentMenu=='contract:-'?'active':''">合同管理</router-link> -->
        <!-- <span @click="hideOrShow('project')" :class="router.indexOf('project')>-1?'active':''">
                    项目中心
                    <div class="inside-menu-tab" v-if="taskCtrl" style="width:180px;">
                        <router-link to="/project/protectionFile/protectionList" tag="div">
                            <Icon type="ios-locate-outline" size="24"/>
                            <h5>维权档案</h5>
                        </router-link>
                        <router-link to="/project/projectManage/myDuty" tag="div">
                            <Icon type="ios-bookmark-outline" size="24"/>
                            <h5>项目管理</h5>
                        </router-link>
                    </div>
                </span>
                <span @click="hideOrShow('case')" :class="router.indexOf('case')>-1?'active':''">
                    调查中心
                    <div class="inside-menu-tab" v-if="caseCtrl" style="width:270px;">
                        <router-link to="/case/clueDiscovery/myManageTask" tag="div">
                            <Icon type="ios-locate-outline" size="24"/>
                            <h5>线索发现</h5>
                        </router-link>
                        <router-link to="/case/propertyCase/publishedCase" tag="div">
                            <Icon type="ios-bookmark-outline" size="24"/>
                            <h5>知产案件</h5>
                        </router-link>
                        <router-link to="/case/transactionCase/unconfirmCase" tag="div">
                            <Icon type="ios-bookmark-outline" size="24"/>
                            <h5>案件交易</h5>
                        </router-link>
                    </div>
                </span> -->
      </div>
    </div>
    <!-- 通知、中英文、个人中心 -->
    <!-- 个人中心 -->
    <div class="header-right">
      <span :class="[infoCtrl?'active':'','head-img-box']" @click="hideOrShow('info')">
        <img :src="avatarSrc" alt="" :title="name">
        <Card v-show="infoCtrl" class="more-router" :padding="0">
          <Col class="info-box">
            <img class="head-img" :src="avatarSrc">
            <p>{{ name }}</p>
            <!-- <p class="small-p">开发人员特派律师事务所</p> -->
          </Col>
          <Col class="info-btn-box">
            <Button disabled>个人中心</Button>
            <!-- <Button>修改密码</Button> -->
            <Button @click="$router.push({path:'/login'});">退出</Button>
          </Col>
        </Card>
      </span>
    </div>
  </Header>
</template>
<script>
import store from '@/store/store.js'
export default {
  directives: {
    modulesPermission: {
      inserted: function(el, binding, vnode) {
        const { value } = binding
        const menuJson = store.state.permission && store.state.permission.roles
        const headerBarList = Object.keys(menuJson)
        if (value && value instanceof Array && value.length > 0) {
          const permissionRoles = value
          const hasPermission = headerBarList.some(role => {
            return permissionRoles.includes(role)
          })
          if (!hasPermission) {
            el.parentNode && el.parentNode.removeChild(el)
          }
        } else {
          throw new Error(`need roles! Like v-permission="['admin','editor']"`)
        }
      }
    }
  },
  components: {

  },
  props: [''],
  data () {
    return {
      isCollapsed: false,
      taskCtrl: false,
      caseCtrl: false,
      infoCtrl: false,
      imgLogo: require('@/assets/images/logoComputer.png'),
      avatarSrc: require('@/assets/images/portrait.png'),
      name: '',
      headerCtrl: false,
      menuList: [] // 菜单list
    }
  },
  computed: {
    routerParentMenu() {
      this.getMenu(this.$route.meta.parentMenu)
      return this.$route.meta.parentMenu
    },
    menuJson() {
      return this.$store.state.permission.roles
    }
  },
  watch: {
    // 'this.$route.meta.parentMenu': {
    //     handler(val) {
    //         console.log(val)
    //     },
    //     immediate: true,
    //     deep: true
    // }
    menuJson: {
      deep: true,
      handler(newVal, oldVal) {
        if (newVal) {
          this.menuList = store.state.permission && store.state.permission.menu
          this.headerCtrl = true
        }
      }
    }
  },
  created() {

  },
  beforeMount() {
    if (window.localStorage.getItem('account')) {
      this.name = JSON.parse(window.localStorage.getItem('account')).name
      if (JSON.parse(window.localStorage.getItem('account')).icon) {
        this.avatarSrc = JSON.parse(window.localStorage.getItem('account')).icon
      }
    }
  },
  mounted() {
    document.addEventListener('click', (e) => {
      if (!this.$el.contains(e.target)) {
        this.taskCtrl = false
        this.caseCtrl = false
        this.infoCtrl = false
      }
    })
    if (Object.keys(this.menuJson).length !== 0) {
      this.menuList = store.state.permission && store.state.permission.menu
      this.headerCtrl = true
    }
  },
  updated() {

  },
  methods: {
    collapsedSider () {
      this.isCollapsed = !this.isCollapsed
      this.$store.commit('toggleCollapsed', this.isCollapsed)
    },
    // 控制路由
    getMenu(val) {
      const menu = store.state.permission.roles
      this.$store.commit('changeMenu', menu[val])
    },
    hideOrShow(type) {
      if (type === 'project') {
        this.taskCtrl = !this.taskCtrl
        this.caseCtrl = false
        this.infoCtrl = false
      } else if (type === 'case') {
        this.caseCtrl = !this.caseCtrl
        this.taskCtrl = false
        this.infoCtrl = false
      } else if (type === 'info') {
        this.infoCtrl = !this.infoCtrl
        this.taskCtrl = false
        this.caseCtrl = false
      }
    },
    routerLinkTo(val) {
      const menuJson = store.state.permission && store.state.permission.roles
      if (menuJson[val]) {
        if (!menuJson[val][0]['hasChildList']) {
          return menuJson[val][0]['href']
        } else if (menuJson[val][0]['hasChildList']) {
          return menuJson[val][0]['childList'][0]['href']
        }
      } else {
        return ''
      }
    }
  }
}
</script>
<style lang="sass" scoped>
 @import './header.scss';
</style>
<style lang="scss">
    .notice-tips .ivu-cell-arrow {
        right: 5px;
    }
    .notice-tips .ivu-cell-title {
        line-height: normal;
    }
    .ivu-cell-title {
        line-height: 24px;
        font-size: 14px;
    }
    .notice-tips:last-child {
        border: none;
    }
    .more-router {
        z-index: 1;
        .ivu-card-head {
            padding: 7px 10px;
        }
        .ivu-scroll-loader:first-child {
            display: none;
        }
        .ivu-spin-text {
            i {
                opacity: 0;
            }
        }
    }
</style>