// 在router 方法中加拦截

import router from '@/router'
import store  from '@/store';

// 找到要跳转到的那个路由信息
const getToRoute=(path)=>{
    const allRoutes=router.getRoutes()
    let routesItem={}
    allRoutes.forEach(route => {
        if(route.path===path){
            routesItem=route
        }
    });
    return routesItem
}


const routerPush=router.push //保存原来的push函数

// 重写push函数
router.push = function push(location) {
    // location 可能是string 也可能是obj 完全取决于 你是怎么调push的
    // console.log('push');
    // console.log(location);

    let path=''
    let query=null
    // 判断location是string 还是obj
    if(typeof location === 'string'){
        path=location
    }else{
        path=location.path
        query=location.query
    }

    // 判断是否已经存在面包屑中 
    let index=-1
    store.state.breadCrumbList.forEach((item,e) => {
        if(item.path === path){
          index=e
        }
    });
    if(index===-1){//不存在
        const routesItem=getToRoute(path)
        store.commit('setBreadCrumb', routesItem)
    }else{
        // console.log('拦截路由push改为返回');
        const _index=index-(store.state.breadCrumbList.length-1)
        if(_index!==0){
            router.go(_index)
        }
        setTimeout(() => {
            if(query){
                router.replace({
                    query:query
                })
            }else{
                router.replace(path)
            }
        }, 10);
        // return
    }


    // 调用原来的push函数，并捕获异常
    return routerPush.call(this, location).catch(error => error)
}


// 监听路由后退事件
const listenRouterBack=()=>{
    if(window.history&&window.history.pushState){{
        $(window).on('popstate',()=>{
            console.log('路由后退');
            const path=window.location.pathname
            const routesItem=getToRoute(path)
            store.commit('setBreadCrumb', routesItem)
        })
    }}
}
listenRouterBack()
