管道基础大数据平台系统开发-【前端】-新系統界面
1
Surpriseplus
2022-11-28 ac687d46631445a2ad0efebe843c300535277dec
src/components/navMenu.vue
@@ -8,20 +8,27 @@
    <div class="rightWrapper">
      <div class="rightMenu">
        <ul class="infinite-list menu_ul">
          <li
            @click="setMenuMove(index, item)"
            v-for="(item, index) in listMenu"
            class="infinite-list-item"
          >
            <div
              class="menuImage"
              :class="changeSelectStyle == index ? item.checkClass : item.class"
            ></div>
            <div
              class="menulabel"
              :class="{ changeStyle: changeSelectStyle == index }"
            >
              {{ item.label }}
          <li v-for="(item, index) in listMenu" class="infinite-list-item">
            <div @click="setMenuMove(index, item)">
              <div
                class="menuImage"
                :class="changeSelectStyle == index ? item.checkClass : item.css"
              ></div>
              <div
                class="menulabel"
                :class="{ changeStyle: changeSelectStyle == index }"
              >
                {{ item.cnName }}
              </div>
            </div>
            <div class="secondMenuDiv" v-show="item.show">
              <div
                v-for="res in item.children"
                @click="setLiClick(res)"
                :class="{ changeLiStyle: changeliSelect == res.cnName }"
              >
                {{ res.cnName }}
              </div>
            </div>
          </li>
        </ul>
@@ -40,7 +47,7 @@
        </div>
        <color-change></color-change>
      </div>
      <!-- -->
      <!-- <div class="menu"></div>
      <div class="userInfo">
        <img src="../assets/img/user.png" alt="" />
@@ -54,11 +61,13 @@
</template>
<script>
import { logout } from '@/api/api';
import { logout, selectMenuRecursive } from '@/api/api';
import { removeToken, getToken } from '@/utils/auth';
import customElMenu from '../components/customElMenu.vue';
import { queryMenuTree, getPerms } from '../api/api';
import { queryMenuTree } from '../api/api';
import colorChange from '../views/maintenance/colorChange.vue';
import { containsCoordinate } from 'ol/extent';
import Vue from 'vue';
export default {
  name: 'navMenu',
  //import引入的组件需要注入到对象中才能使用
@@ -86,95 +95,103 @@
      formLabelWidth: '70px',
      count: 5,
      changeSelectStyle: 5,
      changeliSelect: null,
      changeSelectdiv: false,
      listMenu: [
        {
          label: '数据质检',
          class: 'm1',
          cnName: '数据质检',
          css: 'm1',
          checkClass: 'm11',
          url: '',
        },
        {
          label: '数据交换',
          class: 'm2',
          cnName: '数据交换',
          css: 'm2',
          checkClass: 'm21',
          url: '',
        },
        {
          label: '数据管理',
          class: 'm3',
          checkClass: 'm31',
        },
        {
          label: '服务管理',
          class: 'm4',
          cnName: '服务管理',
          css: 'm4',
          checkClass: 'm41',
        },
        {
          label: '综合展示',
          class: 'm5',
          checkClass: 'm51',
        },
        {
          label: '运维管理',
          class: 'm6',
          checkClass: 'm61',
          url: '',
        },
      ],
      showFlag: null,
    };
  },
  created() {},
  mounted() {
    this.getUserPerms();
    this.getMenuTree();
  },
  computed: {
    // 我们使用计算属性来获取到当前点击的菜单的路由路径,然后设置default-active中的值
    // 使得菜单在载入时就能对应高亮
    // activeIndex() {
    //   const route = this.$route;
    //   const { meta, path } = route;
    //   // if set path, the sidebar will highlight the path you set
    //   // 可以在路由配置文件中设置自定义的路由路径到meta.activeMenu属性中,来控制菜单自定义高亮显示
    //   if (meta.activeMenu) {
    //     return meta.activeMenu;
    //   }
    //   return path;
    // },
  },
  computed: {},
  methods: {
    //主题切换
    setThemeColors() {
      // var value;
      // if (this.themeColor) {
      //   value = '#303030';
      // } else {
      //   value = '#409EFF';
      // }
      // localStorage.setItem('theme', value);
      // this.$store.commit('setSkin', value);
    },
    setThemeColors() {},
    //鼠标移入菜单事件
    setMenuMove(index, item) {
      var that = this;
      if (item.perms != null) {
        this.$router.push(item.url);
        if (this.showFlag != null) {
          this.setShowFalseDiv(false);
          this.changeliSelect = '呵呵';
          this.showFlag = null;
        }
      } else {
        if (this.showFlag != index) {
          this.showFlag = index;
          this.setShowFalseDiv(true);
        } else {
          let newItem = this.listMenu[index];
          newItem.show = !this.listMenu[index].show;
          Vue.set(this.listMenu, index, newItem);
        }
      }
      this.changeSelectStyle = index;
    },
    getMenuTree() {
      //获取目录树最大ID,新建节点使用
      // queryMaxId().then((res) => {
      //   this.id = res.data;
      // });
      // 获取目录树数据
      queryMenuTree().then((res) => {
        if (res.code == 200) {
          if (res.result.length != 0) {
            let menuLists = res.result.filter((value) => {
              return value.pid == 1;
            });
            // console.log(menuLists);
            this.menuList = menuLists;
          } else {
            alert('暂无菜单栏数据');
          }
    setShowFalseDiv(bolean) {
      var index = this.showFlag;
      let newItem = this.listMenu[index];
      newItem.show = bolean;
      Vue.set(this.listMenu, index, newItem);
    },
    setLiClick(res) {
      this.setShowFalseDiv(false);
      this.changeliSelect = res.cnName;
      this.$router.push(res.url);
      this.$store.commit('currentPerms', res.perms);
    },
    async getMenuTree() {
      const data = await queryMenuTree();
      var that = this;
      if (data.code == 200) {
        if (data.result.length != 0) {
          let menuLists = data.result.filter((value) => {
            return value.pid == 1;
          });
          that.menuList = menuLists;
          that.setMenuTree(menuLists);
        } else {
          console.log('接口报错');
          alert('暂无菜单栏数据');
        }
      });
      }
    },
    async setMenuTree(res) {
      for (var i in res) {
        res[i].checkClass = res[i].css + '1';
        res[i].show = false; //控制显隐
        if (res[i].perms == null) {
          const result = await selectMenuRecursive({ name: res[i].cnName });
          res[i].children = result.result.filter((value) => {
            return value.pid == res[i].id;
          });
        }
        this.listMenu.push(res[i]);
      }
    },
    treeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
@@ -253,11 +270,6 @@
        this.$router.push(index);
      }
    },
    getUserPerms() {
      getPerms().then((res) => {
        if (res.code == 200) this.$store.commit('getPermsEntity', res.result);
      });
    },
  },
  watch: {
    $route() {
@@ -287,9 +299,9 @@
  .logo {
    width: 80px;
    height: 80px;
    margin-left: 30px;
    margin-top: 33px;
    background: url('../assets/img/图层 34.png') no-repeat 100% 100%;
    // margin-left: 30px;
    // margin-top: 33px;
    // background: url('../assets/img/图层 34.png') no-repeat 100% 100%;
  }
  // .rightWrapper {
  //   width: 70%;
@@ -481,5 +493,43 @@
  /deep/ .el-link.el-link--default {
    color: white !important;
  }
  /deep/ ul.el-menu-vertical-demo.el-menu {
    // 添加背景颜色
    background-image: rgba(255, 255, 255, 0.1) !important;
  }
  /deep/ li.el-menu-item.is-active {
    // 添加样式,只针对导航栏首菜单
    background-color: transparent;
  }
  .el-submenu /deep/.el-submenu__title:hover {
    color: #2e95fb !important;
    background: linear-gradient(#112f57, #122344) !important;
  }
  .secondMenuDiv {
    position: absolute;
    z-index: 30;
    margin-top: 10px;
    border: 1px solid white;
    border-radius: 5px;
    div {
      line-height: 30px;
      background: #303030;
      padding: 10px;
      font-size: 18px;
      font-family: Microsoft YaHei;
      font-weight: 400;
      color: #ffffff;
      line-height: 49px;
      width: 100px;
    }
    .changeLiStyle {
      color: #fec801;
      background: linear-gradient(180deg, #002992, #080472);
    }
  }
}
</style>