import Layout from '@/layout'//引入admin的layout布局
import router from '../router'//引入router
import request from '../api/request.js'//自定义封装的请求
import store from '../store'//Vuex

export default {
  // 获取路由菜单
  getMenu() {
    return new Promise((resolve, reject) => {
      return request.getRoleMenu().then(res => {
      	//声明一个空数组，用来装处理好的菜单信息
        const result = []
        // 获取到路由菜单，进行数据处理
        this.parseRoute(res.data,result)
        // 添加菜单
        this.addMenu(result)
        //缓存用户菜单，我这里使用的是sessionStorage，用localStorage也可以
        // 输出成功
        resolve()
      }).catch(err =>{
        reject()
      })
    })
  },
  // 对路由菜单数据处理
  parseRoute(fullList, resultList) {
    return new Promise((resolve, reject) => {
      let result = []
      fullList.forEach( (ele,index) => {
        let routerObject = null
        const childrenList = []
        routerObject = {
          path: ele['path'],
          component: Layout,
          redirect: ele['redirect']?ele['redirect']:'noRedirect',
          alwaysShow: ele['alwaysShow'],  // 是否始终为根元素
          meta: {
            title: ele.meta['title'],
            icon: ele.meta['icon']
          },
          children: childrenList,
        }
        const itemResult = ele.children;
        for (let j = 0; j < itemResult.length; j++) {
          childrenList.push({
            path: itemResult[j]['path'],
            name: itemResult[j]['name'],
            hidden: itemResult[j]['hidden'],
            component: resolve => require([`@/views/${itemResult[j].component}`], resolve),
            meta: {
              title: itemResult[j].meta['title'],
              icon: itemResult[j].meta['icon'],
              keepAlive: itemResult[j].meta['keepAlive'] == 0 ? false : true,
            },
            
          })

        }
        //插入组装好的数据
        resultList.push(routerObject);
        //插入最终完整的数据列表
        result.push(routerObject);
      });
      //输出已经组装好并且能用的数据
      resolve(result)
    })
  },
  // 添加菜单
  addMenu(data) {
    return new Promise((resolve, reject) => {
      // 在处理完的菜单列表数据后面插入404页面，404必须存在菜单列表的最后一项，否则会对所有页面进行拦截，并跳转404页面
      data.push({
        path: '*',
        redirect: '/404',
        hidden: true
      })
      // 打印菜单列表
      // console.log(data)
      // 将可用的路由权限列表存入Vuex
      store.dispatch('user/modifyMenu', data)
      // 添加菜单
      router.addRoutes(data)
      // 将路由元注入路由对象，必须添加
      router.options.routes.push(data)
      console.log('router.options.routes', router.options.routes)
      //输出成功
      resolve()
    })
  },
  //
}
