Newer
Older
cockpit_hxrq_front / src / views / dashboard / appIndex.vue
StephanieGitHub on 3 Jun 2021 4 KB MOD:新增综合业务
<template>
  <div class="dashboard-container">
    <div class="logo">
      <img :src="logoImg">
      <div class="title">
        管理者驾驶舱
      </div>
    </div>
    <div class="dashboard">
      <div class="dashboard-middle">
        <div v-for="(system,index) of currentSystems" :key="system.id" class="system-div" @mouseover="changeImg(1,index)" @click="changeSystem(system)">
          <div class="icon-div"><svg-icon :icon-class="system.icon"/></div>
          <div class="system-title-div">{{ system.name }}</div>
        </div>
      </div>
    </div>
    <div title="注销" class="outSystem">
      <svg-icon title="注销" icon-class="icon-out" @click="logout"/>
    </div>
  </div>
</template>

<script>
import { getMenus } from '@/api/login'
export default {
  name: 'AppIndex',
  data() {
    return {
      systems: [], // 主题域
      logoImg: require('@/assets/login_images/logo-simple.png'),
      title: this.baseConfig.title,
      bgUrl: require('../../assets/login_images/bg3.jpg'), // 背景图片
      sysUrl: require('../../assets/login_images/btn-bg.png'),
      sysHoverUrl: require('../../assets/login_images/sys-hover.png'),
      hoverIndex: null,
      loading: true, // 加载状态
      pageSize: 9, // 一页子系统数量
      page: 1 // 第几页
    }
  },
  computed: {
    currentSystems() {
      return this.systems
    },
    fullPage() {
      return Math.ceil(this.$store.getters.systems.length / this.pageSize)
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    changeImg(state, index) {
      this.hoverIndex = index
    },
    fetchData() {
      const loading = this.$loading({
        lock: true,
        text: 'Loading'
      })
      const params = {
        resourceType: '05'
      }
      getMenus(params).then(response => { // 处理返回值
        const data = response.data
        if (data.menus && data.menus.length > 0) {
          this.systems = data.menus
          loading.close()
        }
      })
    },
    changeSystem(system) {
      console.log(system.url)
      this.$store.commit('SET_SYSTEM', system)
      // 判断是外部链接还是本项目的路由
      if (system.url.indexOf('http') > -1) {
        // 跳转数据中台的
        const params = '?token=' + this.$store.getters.token + '&url=' + system.url
        const loginUrl = 'http://59.49.106.24:9001/sso/integrationConfig/login'
        // window.location.href = loginUrl + params
        this.$router.push({ path: '/appSubject', query: { name: system.name, url: loginUrl + params }})
      }
    },
    logout() {
      this.$store.dispatch('LogOut').then(() => {
        location.reload() // 为了重新实例化vue-router对象 避免bug
      })
    },
    // 下一页
    nextPage() {
      if (this.page < this.fullPage) {
        this.page++
      }
    },
    // 上一页
    prevPage() {
      if (this.page > 1) {
        this.page--
      }
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  $iconheight: 70%;
  $titleheight: 30%;
  .dashboard-container{
    width: 100%;
    height: 50%;
    /*position: relative;*/
    background-color: #54A2F7;
    .logo {
      text-align: center;
      padding-top: 15%;
      img {
        text-align: center;
        height: 20vw;
        width:20vw;
      }
      .title{
        margin-top: 20px;
        font-size:20px;
        color:#ffffff;
      }
    }
    .dashboard {
      background-color: white;
      margin-bottom: 20px;
      width: 90%;
      position: absolute;
      text-align: center;
      left: 50%;
      top:30%;
      transform: translateX(-50%);
      z-index: 5;
      border-radius: 7px;
      border: 1px solid #f0f0f0;
      .dashboard-middle{
        width:100%;
        height:100%;
        text-align: center;
        float: left;
        padding: 30px 10px 10px 10px;
        display: flex;
        justify-content: start;
        align-content: start;
        flex-wrap: wrap;
      }
      &-text {
        font-size: 16px;
        line-height: 46px;
      }
      .system-div{
        width:33%;
        padding:10px;
        text-align: center;
        display: flex;
        flex-direction: column;
        align-items: center;
        color: #54A1FD;
        justify-content: center;
        .icon-div{
          padding-bottom: 12px;
          font-size:13vw;
        }
        .system-title-div{
          color: #131313;
          line-height: $titleheight+px;
          font-size: 15px;
        }
      }
      .system-div:hover{
        cursor: pointer;
      }
    }
    .outSystem{
      position: fixed;
      top: 15px;
      right: 15px;
      color: #ffffff;
      font-size: 25px;
      z-index: 9999;
    }
    .outSystem:hover{
      color: #3c82f0;
      cursor: pointer;
    }
  }
</style>