| | |
| | | otherTabs: true, |
| | | menuLeft: 0, |
| | | menuTop: 0, |
| | | // contextMenuVisible: false, // 右键关闭显/隐 |
| | | // contextMenuVisible: false, // 右键关闭是否可见 |
| | | }; |
| | | }, |
| | | setup(props, context) { |
| | |
| | | ]); |
| | | 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", |
| | |
| | | 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 + ""; |
| | |
| | | // this.$router.push(item); |
| | | } |
| | | currentMenuId.value = item.id * 1; |
| | | // tab菜单绑定右键事件 |
| | | // tab右键菜单绑定点击事件 |
| | | proxy.$nextTick(function (e) { |
| | | proxy.bindRightClickMenu(true); |
| | | }); |
| | |
| | | visibleItem.right = selectMenuIndex.value != navigation.length - 1; |
| | | //只有两个菜单时不显示关闭左边 |
| | | visibleItem.left = navigation.length != 2; |
| | | //只有两个菜单时不显示关闭其他 |
| | | //只有两个菜单时不显示关闭其他菜单 |
| | | visibleItem.other = navigation.length != 2; |
| | | } |
| | | contextMenuVisible.value = true; |
| | |
| | | }); |
| | | }; |
| | | /** |
| | | * 关闭其它标签页 |
| | | * 关闭其他标签页 |
| | | * @param {*} par 关闭类型(left,right,other) |
| | | */ |
| | | const closeTabs = (value) => { |
| | |
| | | break; |
| | | } |
| | | default: { |
| | | //关闭所有 |
| | | //关闭所有标签 |
| | | navigation.splice(1, navigation.length); |
| | | toHome(); |
| | | break; |
| | |
| | | watch( |
| | | () => contextMenuVisible.value, |
| | | (newVal, oldVal) => { |
| | | // 监视 |
| | | // 监视 contextMenuVisible 的变化,添加或移除点击事件监听器 |
| | | if (newVal) { |
| | | document.body.addEventListener("click", closeTabsMenu); |
| | | } else { |
| | |
| | | /** |
| | | * 系统创建开始 |
| | | */ |
| | | /** |
| | | * 方法目的:补齐后端菜单未配置时的新页面入口,避免新增页面无入口。 |
| | | * 参数含义: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) { |
| | |
| | | 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", ""); |
| | |
| | | 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); |
| | |
| | | item = links.value.find((x) => { |
| | | return x.path == router.currentRoute.value.path; //this.$route.path; |
| | | }); |
| | | //查找最后一次跳转的页面 |
| | | //查找最后访问的页面 |
| | | if (!item) { |
| | | item = getItem(); |
| | | } |
| | |
| | | }; |
| | | }, |
| | | /** |
| | | * 挂载钩子函数 |
| | | * 挂载完成后执行的函数 |
| | | */ |
| | | mounted() { |
| | | let _date = showTime(); |
| | |
| | | |
| | | methods: { |
| | | /** |
| | | * 绑定右键事件 |
| | | * @param {*} enable 是否启用右键事件[true:启用;false:禁用;] |
| | | * @param {*} $event 事件 |
| | | * 绑定右键菜单事件 |
| | | * @param {*} enable 是否启用右键菜单事件[true:启用;false:禁用;] |
| | | * @param {*} $event 事件对象 |
| | | */ |
| | | bindRightClickMenu(enable) { |
| | | if (!enable) return; |