diff --git a/package.json b/package.json index 5bbcbae..9e894f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "saber-admin", - "version": "2.7.0", + "version": "2.7.1", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/src/cache.js b/src/cache.js index 391ce59..fdd723d 100644 --- a/src/cache.js +++ b/src/cache.js @@ -1,12 +1,25 @@ import Vue from 'vue' import store from './store'; Vue.mixin({ + beforeRouteEnter: function (to, from, next) { + next(() => { + let avueView = document.getElementById('avue-view'); + if (avueView && to.meta.savedPosition) { + avueView.scrollTop = to.meta.savedPosition + } + }) + }, beforeRouteLeave: function (to, from, next) { - if (this.$route.meta.keepAlive === true) { + let avueView = document.getElementById('avue-view'); + if (from && from.meta.keepAlive) { + if (avueView) { + from.meta.savedPosition = avueView.scrollTop + } const result = this.$route.meta.keepAlive === true && store.state.tags.tagList.some(ele => { return ele.value === this.$route.fullPath; }); if (this.$vnode && !result) { + from.meta.savedPosition = 0 if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) { if (this.$vnode.componentOptions) { let key = this.$vnode.key == null diff --git a/src/page/index/index.vue b/src/page/index/index.vue index 862146e..7e1ad9e 100644 --- a/src/page/index/index.vue +++ b/src/page/index/index.vue @@ -18,9 +18,9 @@
- + - +
diff --git a/src/page/index/layout.vue b/src/page/index/layout.vue index b0274dc..96976dd 100644 --- a/src/page/index/layout.vue +++ b/src/page/index/layout.vue @@ -1,8 +1,8 @@ diff --git a/src/permission.js b/src/permission.js index 8fc72d8..3f9b97d 100644 --- a/src/permission.js +++ b/src/permission.js @@ -30,7 +30,9 @@ router.beforeEach((to, from, next) => { const label = to.query.name || to.name; const meta = to.meta || router.$avueRouter.meta || {}; const i18n = to.query.i18n; - if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) { + if (to.query.target) { + window.open(value) + } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) { store.commit('ADD_TAG', { label: label, value: value, diff --git a/src/router/avue-router.js b/src/router/avue-router.js index fb1c348..e50dc79 100644 --- a/src/router/avue-router.js +++ b/src/router/avue-router.js @@ -3,10 +3,10 @@ let RouterPlugin = function () { this.$store = null; }; -RouterPlugin.install = function (vue, router, store, i18n) { - this.$router = router; - this.$store = store; - this.$vue = new vue({i18n}); +RouterPlugin.install = function (vue, option = {}) { + this.$router = option.router; + this.$store = option.store; + this.$vue = new vue({ i18n: option.i18n }); // 这个的作用是 为了检查出网页链接,因为本项目用到了 iframe function isURL(s) { @@ -129,9 +129,9 @@ RouterPlugin.install = function (vue, router, store, i18n) { meta = oMenu[propsDefault.meta] || {}; // meta中 keepalive 的处理 meta = Object.assign(meta, (function () { - if (meta.keepAlive === true) { + if (option.keepAlive === true) { return { - $keepAlive: true + keepAlive: true } } })()); diff --git a/src/router/router.js b/src/router/router.js index 34eb10c..017af95 100644 --- a/src/router/router.js +++ b/src/router/router.js @@ -16,33 +16,26 @@ import Store from '../store/'; // vuex Vue.use(VueRouter) //创建路由 export const createRouter = () => new VueRouter({ - // https://router.vuejs.org/zh/guide/advanced/scroll-behavior.html#%E5%BC%82%E6%AD%A5%E6%BB%9A%E5%8A%A8 - // 这个方法 是控制滚动条 - // 如果 retuen falsy || {} ,则不发生滚动 - scrollBehavior (to, from, savedPosition) { - // savedPosition 这个参数当且仅当导航 (通过浏览器的 前进/后退 按钮触发) 时才可用 效果和 router.go() 或 router.back() - if (savedPosition) { - // 返回savedPosition 其实就是 当用户点击 返回的话,保持之前游览的高度 - return savedPosition - } else { - if (from.meta.keepAlive) { - from.meta.savedPosition = document.body.scrollTop - } - return { - x: 0, - y: to.meta.savedPosition || 0 - } - } - }, routes: [...PageRouter, ...ViewsRouter] }) const Router = createRouter() // 获得 route 实例 -AvueRouter.install(Vue, Router, Store, i18n); // 初始化和注册 AvueRouter +// 初始化和注册 AvueRouter +AvueRouter.install(Vue, { + router: Router, + store: Store, + i18n: i18n, + keepAlive: false, +}); Router.$avueRouter.formatRoutes(Store.state.user.menuAll, true); // 动态路由核心方法 Router.addRoutes([...PageRouter, ...ViewsRouter]); export function resetRouter () { // 重置路由 比如用于身份验证失败,需要重新登录时 先清空当前的路有权限 const newRouter = createRouter() Router.matcher = newRouter.matcher // reset router - AvueRouter.install(Vue, Router, Store, i18n); + AvueRouter.install(Vue, { + router: Router, + store: Store, + i18n: i18n, + keepAlive: false, + }); } export default Router diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue index cca1490..4b9af5d 100644 --- a/src/views/wel/index.vue +++ b/src/views/wel/index.vue @@ -9,7 +9,7 @@

- Downloads + Downloads Build Status Coverage Status Downloads diff --git a/vue.config.js b/vue.config.js index 806cffa..a3ad8ef 100644 --- a/vue.config.js +++ b/vue.config.js @@ -17,6 +17,9 @@ module.exports = { entry.add('classlist-polyfill').end(); entry.add('@/mock').end(); }, + css: { + extract: { ignoreOrder: true } + }, //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理 devServer: { port: 1888,