wanshenmean
4 天以前 ce1292c9cf37195b6abd2699dfc5d6cb3e143c9b
Code/WCS/WIDESEAWCS_Client/src/views/Index.vue
@@ -120,7 +120,8 @@
import VolMenu from "@/components/basic/VolElementMenu.vue";
import Message from "./index/Message.vue";
import MessageConfig from "./index/MessageConfig.js";
var imgUrl = require("@/assets/imgs/wcs_x.png");
import imgUrl from "@/assets/imgs/wcs_x.png";
import errorImgSrc from "@/assets/imgs/error-img.png";
var $this;
var $interval;
var $indexDate;
@@ -150,7 +151,7 @@
      otherTabs: true,
      menuLeft: 0,
      menuTop: 0,
      //  contextMenuVisible: false, // 右键关闭显/隐
      //  contextMenuVisible: false, // 右键关闭是否可见
    };
  },
  setup(props, context) {
@@ -177,21 +178,21 @@
    ]);
    const links = ref([
      // {
      //   text: "框架视频",
      //   text: "框架视频教程",
      //   path: "https://www.cctalk.com/m/group/90268531",
      //   id: -3,
      // },
      // { text: "大屏数据", path: "/bigdata", id: -3 },
      // { text: "大数据", path: "/bigdata", id: -3 },
      // {
      //   text: "框架文档",
      //   path: "http://v2.volcore.xyz/document/guide",
      //   id: -2,
      // },   {
      //   text: "框架企业版",
      //   text: "框架产品",
      //   path: "http://pro.volcore.xyz/",
      //   id: 10,
      // },
      { text: "个人中心", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
      { text: "个人信息", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" },
      {
        text: "安全退出",
        path: "/login",
@@ -200,7 +201,7 @@
      },
    ]);
    const errorImg = ref(
      'this.src="' + require("@/assets/imgs/error-img.png") + '"'
      'this.src="' + errorImgSrc + '"'
    );
    const selectId = ref("1");
    // 【首页】标签序号(当前右键选中的菜单)
@@ -273,11 +274,11 @@
        navigation.push({
          //  orderNo: String(navigation.length),// 序号
          id: item.id + "",
          name: item.name || item.text || "无标题",
          name: item.name || item.text || "无标签",
          path: item.path,
          query: item.query, //2021.03.20修复自定义二次打开$tabs时参数丢失的问题
        });
        //新打开的tab移至最后一个选项
        //新建打开的tab选中到最后一个选项
        selectId.value = navigation.length - 1 + "";
      } else {
        selectId.value = _index + "";
@@ -289,7 +290,7 @@
        // this.$router.push(item);
      }
      currentMenuId.value = item.id * 1;
      // tab菜单绑定右键事件
      // tab右键菜单绑定点击事件
      proxy.$nextTick(function (e) {
        proxy.bindRightClickMenu(true);
      });
@@ -398,7 +399,7 @@
        visibleItem.right = selectMenuIndex.value != navigation.length - 1;
        //只有两个菜单时不显示关闭左边
        visibleItem.left = navigation.length != 2;
        //只有两个菜单时不显示关闭其他
        //只有两个菜单时不显示关闭其他菜单
        visibleItem.other = navigation.length != 2;
      }
      contextMenuVisible.value = true;
@@ -421,7 +422,7 @@
      });
    };
    /**
     * 关闭其它标签页
     * 关闭其他标签页
     * @param {*} par 关闭类型(left,right,other)
     */
    const closeTabs = (value) => {
@@ -456,7 +457,7 @@
          break;
        }
        default: {
          //关闭所有
          //关闭所有标签
          navigation.splice(1, navigation.length);
          toHome();
          break;
@@ -472,7 +473,7 @@
    watch(
      () => contextMenuVisible.value,
      (newVal, oldVal) => {
        // 监视
        // 监视 contextMenuVisible 的变化,添加或移除点击事件监听器
        if (newVal) {
          document.body.addEventListener("click", closeTabsMenu);
        } else {
@@ -484,6 +485,61 @@
    /**
     * 系统创建开始
     */
    /**
     * 方法目的:补齐后端菜单未配置时的新页面入口,避免新增页面无入口。
     * 参数含义:data 为后端返回的菜单数组。
     * 返回值:返回补齐后的菜单数组。
     * 关键逻辑:仅在菜单中不存在相同 url 时追加默认菜单,避免覆盖已有配置。
     * 异常处理:该方法仅操作内存数据,不涉及外部调用,异常由上层流程统一捕获。
     */
    const ensureBuiltinMenus = (data) => {
      const menus = Array.isArray(data) ? data : [];
      const exists = (url) => menus.some((m) => (m.url || "") === url);
      const maxId = menus.reduce((max, item) => {
        const current = Number(item.id);
        return Number.isFinite(current) ? Math.max(max, current) : max;
      }, 0);
      const defaultMenus = [
        // {
        //   id: maxId + 1001,
        //   name: "租户管理",
        //   url: "/Sys_Tenant",
        //   parentId: 0,
        //   icon: "el-icon-office-building",
        //   enable: 1,
        //   tableName: "Sys_Tenant",
        //   permission: ["Search", "Add", "Update", "Delete"],
        // },
        // {
        //   id: maxId + 1002,
        //   name: "任务历史",
        //   url: "/taskHty",
        //   parentId: 0,
        //   icon: "el-icon-time",
        //   enable: 1,
        //   tableName: "taskHty",
        //   permission: ["Search", "Export"],
        // },
        {
          id: maxId + 1003,
          name: "调度控制",
          url: "/scheduler",
          parentId: 0,
          icon: "el-icon-video-play",
          enable: 1,
          tableName: "scheduler",
          permission: ["Search", "Update"],
        },
      ];
      defaultMenus.forEach((menu) => {
        if (!exists(menu.url)) {
          menus.push(menu);
        }
      });
      return menus;
    };
    const created = () => {
      let _theme = localStorage.getItem("vol3_theme");
      if (_theme) {
@@ -500,6 +556,7 @@
      Object.assign(_config.$tabs, { open: open, close: close });
      http.get("api/Sys_Menu/getTreeMenu", {}, true).then((data) => {
        data = ensureBuiltinMenus(data);
        data.push({ id: "1", name: "首页", url: "/home" }); // 为了获取选中id使用
        data.forEach((d) => {
          d.path = (d.url || "").replace("/Manager", "");
@@ -512,7 +569,7 @@
        menuOptions.value = data;
        permissionInited.value = true;
        //开启消息推送(main.js中设置是否开启signalR)2022.05.05
         //开启消息推送(main.js中设置是否开启signalR)2022.05.05
        if (_config.$global.signalR) {
          MessageConfig(http, (result) => {
            messageList.unshift(result);
@@ -531,7 +588,7 @@
          item = links.value.find((x) => {
            return x.path == router.currentRoute.value.path; //this.$route.path;
          });
          //查找最后一次跳转的页面
          //查找最后访问的页面
          if (!item) {
            item = getItem();
          }
@@ -578,7 +635,7 @@
    };
  },
  /**
   * 挂载钩子函数
   * 挂载完成后执行的函数
   */
  mounted() {
    let _date = showTime();
@@ -593,9 +650,9 @@
  methods: {
    /**
     * 绑定右键事件
     * @param {*} enable 是否启用右键事件[true:启用;false:禁用;]
     * @param {*} $event 事件
     * 绑定右键菜单事件
     * @param {*} enable 是否启用右键菜单事件[true:启用;false:禁用;]
     * @param {*} $event 事件对象
     */
    bindRightClickMenu(enable) {
      if (!enable) return;