Surpriseplus
2022-10-26 62ae55ae397b7997b147a7b946f7ad5f1c78a45d
src/components/navMenu.vue
@@ -1,5 +1,5 @@
<template>
  <div>
  <div class="leftMenu">
    <div class="leftTopWrapper">
      <div class="logo">
        <img src="../assets/img/www.terra-it.cn.png" alt="" />
@@ -34,13 +34,13 @@
</template>
<script>
import { logout } from "@/api/api";
import { removeToken, getToken } from "@/utils/auth";
import customElMenu from "../components/customElMenu.vue";
import { queryMenuTree, updateMenuTree, queryMaxId } from "../api/api";
import { logout } from '@/api/api';
import { removeToken, getToken } from '@/utils/auth';
import customElMenu from '../components/customElMenu.vue';
import { queryMenuTree, getPerms } from '../api/api';
export default {
  name: "navMenu",
  name: 'navMenu',
  //import引入的组件需要注入到对象中才能使用
  components: {
    customElMenu,
@@ -50,10 +50,10 @@
      oriData: [], //原始树数据
      dirData: [], //el树数据
      newData: [], //拖动后数据
      lang: "zh",
      activeIndex: "/",
      lang: 'zh',
      activeIndex: '/',
      menuList: [],
      editTitle: "",
      editTitle: '',
      showPopover: false,
      showEditInfoWrapper: false,
      showEdit: false,
@@ -61,13 +61,27 @@
      editCatalogue: false,
      editUnit: false,
      itemdetail: {},
      formLabelWidth: "70px",
      formLabelWidth: '70px',
    };
  },
  mounted() {
    this.getUserPerms();
    this.getMenuTree();
  },
  computed: {},
  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;
    // },
  },
  methods: {
    getMenuTree() {
      //获取目录树最大ID,新建节点使用
@@ -78,12 +92,15 @@
      queryMenuTree().then((res) => {
        if (res.code == 200) {
          if (res.result.length != 0) {
            this.menuList = this.treeData(res.result);
            let menuLists = res.result.filter((value) => {
              return value.type == 1;
            });
            this.menuList = this.treeData(menuLists);
          } else {
            alert("暂无菜单栏数据");
            alert('暂无菜单栏数据');
          }
        } else {
          console.log("接口报错");
          console.log('接口报错');
        }
      });
    },
@@ -94,78 +111,108 @@
        return cloneData.filter((father) => {
          // 循环所有项
          let branchArr = cloneData.filter((child) => father.id == child.pid); // 对比ID,分别上下级菜单,并返回数据
          branchArr.length > 0 ? (father.children = branchArr) : ""; // 给父级添加一个children属性,并赋值
          branchArr.length > 0 ? (father.children = branchArr) : ''; // 给父级添加一个children属性,并赋值
          // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
          // 由此循环多次后,就能形成相应的树形数据结构
          return father.pid == 1; // 返回一级菜单
        });
      } else {
        alert("暂无菜单栏数据");
        alert('暂无菜单栏数据');
      }
    },
    logOut() {
      this.$confirm("确认是否退出登录?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      this.$confirm('确认是否退出登录?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(async () => {
          const data = await logout({ token: getToken() });
          console.log(data);
          if (data.code != 200) {
            return this.$message.error("退出登录失败");
            return this.$message.error('退出登录失败');
          }
          removeToken();
          this.$router.push("/login");
          this.$router.push('/login');
          this.$message({
            message: "退出登录成功",
            type: "success",
            message: '退出登录成功',
            type: 'success',
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消",
            type: 'info',
            message: '已取消',
          });
        });
    },
    switchLang() {
      //当前en
      if (this.lang == "en") {
      if (this.lang == 'en') {
        //语言换成zh
        this.lang = "zh";
        this.lang = 'zh';
        //菜单换为zh
        this.$store.commit("changeLang", "zh");
        this.$store.commit('changeLang', 'zh');
        //i18换成zh
        this.$i18n.locale = this.lang;
      }
      //当前zh
      else {
        this.lang = "en";
        this.lang = 'en';
        this.$i18n.locale = this.lang;
        this.$store.commit("changeLang", "en"); //传递点击的节点
        this.$store.commit('changeLang', 'en'); //传递点击的节点
      }
    },
    handleselect(index, indexPath) {
      if (index.indexOf("http") != -1) {
        this.$router.push("/databaseMonitoring");
        this.$store.commit("getIframe", index);
    handleselect(index, indexPath, e) {
      // console.log(e.$attrs.perms);
      this.$store.commit('currentPerms', e.$attrs.perms.perms);
      if (Window.ws != null) {
        Window.ws.close();
        Window.ws.onclose = () => {
          console.log('服务器关闭');
        };
        Window.ws = null;
      }
      if (index.indexOf('http') != -1) {
        this.$router.push('/databaseMonitoring');
        this.$store.commit('getIframe', index);
      } else if (isNaN(Number(index))) {
        this.$router.push(index);
      }
    },
    getUserPerms() {
      getPerms().then((res) => {
        if (res.code == 200) this.$store.commit('getPermsEntity', res.result);
      });
    },
  },
  watch: {
    $route() {
      this.activeIndex = this.$route.path;
      let str = this.$route.path;
      if (str[0] == '/') {
        this.activeIndex = str.slice(1);
      }
    },
  },
  created() {
    let str = this.$route.path;
    if (str[0] == '/') {
      this.activeIndex = str.slice(1);
    }
  },
};
</script>
<style lang="less" scoped>
//@import url(); 引入公共css类
.leftMenu {
  // width: 300px;
  height: 99%;
  // background-color: #bfa;
}
.leftTopWrapper {
  width: 100%;
  height: 100%;
  .logo {
    // background-color: rgb(139, 0, 0);
    width: 249px;
@@ -175,12 +222,13 @@
    }
  }
  .menu {
    height: 740px;
    height: 90%;
    margin-top: 22px;
    overflow: auto;
    // background-color: rgb(120, 121, 120);
    .el-menu {
      width: 234px;
      height: 100%;
      width: 280px;
      border-right: none;
      /deep/ .el-submenu {
        margin-bottom: 10px;