import Vue from 'vue';
import VueRouter from 'vue-router';
import iView from 'view-design';

import util from '@/libs/util'

import Setting from '@/setting';

import store from '@/store/index';
// 路由数据
import routes from './routes';
Vue.use(VueRouter);

// 导出路由 在 main.js 里使用
const router = new VueRouter({
  routes,
  mode: Setting.routerMode,
  
  // 二级目录新增设置,一级目录时默认值为"/"
  base:Setting.publicPath
  
});



//获取原型对象上的push函数
const originalPush = VueRouter.prototype.push
//修改原型对象中的push方法
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}



/**
 * 武:解决报错问题
 * @param {Object} location
 */
const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function replace(location) {
    return originalReplace.call(this, location).catch(err => err);
};


/**
 * 路由拦截
 * 权限验证
 */

router.beforeEach(async (to, from, next) => {
  if (Setting.showProgressBar) iView.LoadingBar.start();
  next();
});

// 导出路由 在 main.js 里使用
router.afterEach(to => {
  if (Setting.showProgressBar) iView.LoadingBar.finish();

  /************主系统规则****************/
  // 更改标题
  util.title({
    title: to.meta.title
  });
  //不记录打开路由
  let notAr = ['/system/login'];
  if(to.path.indexOf('/system/') == 0 && notAr.indexOf(to.path) < 0) {
    store.dispatch('system/page/open', to);
    // 返回页面顶端
    window.scrollTo(0, 0);
    return;
  }
  


});

export default router;
