Vue集成Iframe页面的方法示例(4)

'@/utils/storage.js' export default{ data(){ return { funMenu: { // 一级菜单 firstMenu: [], // 二级菜单 nextMenu: [], // 三级菜单 lastMenu: [], // 是否显示 menuIsShow: true } } }, computed: mapState({ // 箭头函数可使代码更简练 funcMenuList: state => state.funcMenuList, }), methods: { // 跳转首页 goHome(){ // 跳转首页就关闭iframe this.$store.commit(mainConst.M_HIDE_IFRAME) this.$router.push(`/${this.$store.state.systemName}`) }, // ★★★★★调用方法获取三级菜单列表★★★★★ getMainMenu(){ var _this = this if (this.funMenu.firstMenu.length) { this.funMenu.menuIsShow = true } else { if (config.setting.funcMenu) { _this.funMenu.firstMenu = storage.getItem('hivescm.userAuthor').menus.funcs } else { axios.get("data/menu_json.json") .then(function (res) { _this.funMenu.firstMenu = res.data.result.funcs }) } } }, // 点击菜单展开下一级别列表事件 clickByMenu(e, menuItem, level){ let menuList = this.funMenu[level] switch (level) { case "firstMenu": { this.funMenu.nextMenu = this.getFirstAndNextVal(menuList, menuItem) this.funMenu.lastMenu = [] } break case "nextMenu": { if (!menuItem.url.length) this.funMenu.lastMenu = this.getFirstAndNextVal(menuList, menuItem) // menuItem.url.length ? this.clickMenuJump(menuList, menuItem) : this.funMenu.lastMenu = this.getFirstAndNextVal(menuList, menuItem) } break case "lastMenu": { this.clickMenuJump(menuList, menuItem) } break } }, // ★★★★★点击有url的菜单,跳转事件★★★★★ clickMenuJump(menuList, menuItem){ if (!menuItem.url.length) return this.funMenu.menuIsShow = false this.lastmenuChange(menuList, menuItem) let iframeTabItem = {} // 1、路由跳转和iframe的显示隐藏 if (menuItem.url.toLowerCase().indexOf("/") != 0 || menuItem.url.toLowerCase().indexOf("/iframe") == 0) { // 判断如果是iframe的url,显示iframe // 定义一个新的item对象,防止对象的引用 iframeTabItem = Object.assign({}, menuItem) this.$store.commit(mainConst.M_SHOW_IFRAME) // 待优化:应该有优化为手动赋值样式 // (1)、此处利用router-view的特性,让一级tab变颜色 // (2)、这个还是控制一级tab点击切换tab标签的重要因素 // 因为原始的iframe的url已经改变,所以要保存到一个新的变量里面,如果已经有了就不需要在放了 if (!menuItem.iframeUrl) { menuItem.iframeUrl = menuItem.url let userId = storage.getItem('hivescm.userAuthor').id let token = storage.getItem('hivescm.userAuthor').token iframeTabItem.url = `${menuItem.url}?userId=${userId}&token=${token}` } else { let userId = storage.getItem('hivescm.userAuthor').id let token = storage.getItem('hivescm.userAuthor').token iframeTabItem.url = `${menuItem.iframeUrl}?userId=${userId}&token=${token}` console.log(iframeTabItem.url) // iframeTabItem.url = menuItem.iframeUrl } menuItem.url = `/iframe/${menuItem.tag}` this.$router.push(`/iframe/${menuItem.tag}`) } else { // 判断如果是spa的url,隐藏iframe this.$store.commit(mainConst.M_HIDE_IFRAME) menuItem.url=`${menuItem.url}?permissionId=${menuItem.permissionId}` this.$router.push({path:menuItem.url,query:{permissionId:menuItem.permissionId}}) } // 2、判断vuex中是否有重复的tab标签 let navTabData = this.$store.state.navTabData for (let i = 0; i < navTabData.length; i++) { if (navTabData[i].url == menuItem.url) { // 已经有页签了,一级tab内容不重新渲染 // 切换一级tab页签的激活样式 this.$store.commit(mainConst.M_UPDATE_NAVTABDATA, {navIndex: i}) // 从新计算一级tab位置 this.$root.bus.$emit("clickLastMenu", menuItem) if (menuItem.url.toLowerCase().indexOf("/iframe") == 0) { // 如果已经iframe中的tab已经存在,那么触发iframe中的切换事件 // this.$store.commit(mainConst.M_SHOW_IFRAME) this.$root.bus.$emit("changeIframeTab", menuItem.url.slice(8)) } return } } // 3、向vuex中添加一级tab // 默认是否选中 menuItem.active = true // 向一级tab中添加新的tab标签 this.$store.commit(mainConst.M_PUSH_NAVTABDATA, menuItem) this.$store.commit(mainConst.M_UPDATE_NAVTABDATA, {navIndex: navTabData.length - 1}) // 向iframe中的tab添加页签 this.$root.bus.$emit("addIframeTab", iframeTabItem) }, // 清空导航属性值,确保再次点击无选中样式及不匹配数据 lastmenuChange(menuList, menuItem){ this.funMenu.firstMenu.forEach(function (item) { item.active = false }) this.funMenu.nextMenu.forEach(function (item) { item.active = false }) this.funMenu.lastMenu.forEach(function (item) { item.active = false }) this.funMenu.nextMenu = [] this.funMenu.lastMenu = [] }, // 增加选中样式及赋值下级菜单 getFirstAndNextVal(menuList, menuItem){ var childFuncs = [] for (let i = 0; i < menuList.length; i++) { if (menuList[i].permissionId == menuItem.permissionId) { menuList[i].active = true childFuncs = menuList[i].childFuncs || [] } else { menuList[i].active = false } } return childFuncs } } } </script>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/840.html