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 @@
-
+
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,