import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'
import Login from '@/views/Login.vue'
import NotFound from '@/views/NotFound.vue'
import Home from '@/views/Home.vue'
import menuContent from '@/views/menuContent.vue'
import Statement from '@/views/Statement.vue'
import req from '@/request.js'
import uc from '@/api/uc.js'
import { Message } from 'element-ui'
import { Loading } from 'element-ui'
//导入养护管理的路由
import mainRouter from '@/module_router.js'
// 移动端企业微信应用相关路由
import routerMobile from '@/routerMobile.js' 
// URL表单路由
// import flowformRouter from '@/components/flowURLForm/formRouter.js'
Vue.use(Router)

var router = new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/testLogin/:tenant',
      name: 'testLoginTenant',
      props: true,
      component:  () => import('@/views/app/Login.vue'),
      meta: {
        single: true,
        anonymous: true,
      },
    },
    {
      path: '/testLogin',
      name: 'testLogin',
      component:  () => import('@/views/app/Login.vue'),
      meta: {
        single: true,
        anonymous: true,
        isLogin: true,
      },
    },
    {
      path: '/oauth/:id',
      name: 'oauth',
      props: true,
      component: () => import('@/views/app/oauth.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:true
      },
    },
    {
      path: '/index',
      name: 'index',
      props: true,
      component: () => import('@/views/app/index.vue'),

      meta: {
        single: true,
        anonymous: true,
        isTrue:true,
        isApp:true,
        isBack:false,
      },
    },
    {
      path: '/selParticipants',
      name: 'selParticipants',
      props: true,
      component: () => import('@/views/app/selParticipants.vue'),

      meta: {
        single: true,
        anonymous: true,
        isTrue:false,
        isApp:true,
        keepAlive:true,
        isBack:true,
      },
    },
    {
      path: '/setting',
      name: 'setting',
      props: true,
      component: () => import('@/views/app/setting.vue'),

      meta: {
        single: true,
        anonymous: true,
        isTrue:false,
        isApp:true,
        // keepAlive:true,
        isBack:true,
      },
    },
    {
      path: '/selDeptUsers',
      name: 'selDeptUsers',
      props: true,
      component: () => import('@/views/app/selDeptUsers.vue'),

      meta: {
        single: true,
        anonymous: true,
        isTrue:false,
        isApp:true,
        // keepAlive:true,
        isBack:true,
      },
    },
    {
      path: '/unfinished',
      name: 'unfinished',
      props: true,
      component: () => import('@/views/app/unfinished.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:true,
        isApp:true,
        isBack:false,
      },
    },
    {
      path: '/order',
      name: 'order',
      props: true,
      component: () => import('@/views/app/order.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:true,
        isApp:true,
        isBack:false,
        order:true,
        // keepAlive:true
      },
    },
    {
      path: '/order/:room',
      name: 'order2',
      props: true,
      component: () => import('@/views/app/order.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:true,
        isApp:true,
        isBack:false,
      },
    },
    {
      path: '/history',
      name: 'history',
      props: true,
      component: () => import('@/views/app/history.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:true,
        isApp:true,
        isBack:false,
      },
    }, 
    {
      path: '/meetingDetail',
      name: 'meetingDetail',
      props: true,
      component: () => import('@/views/app/meetingDetail.vue'),
      meta: {
        single: true,
        anonymous: true,
        isTrue:false,
        isApp:true,
        isBack:true,
      },
    },
    {
      path: '/particiDetail/:partici',
      name: 'particiDetail',
      props: true,
      component: () => import('@/views/app/participantsDetail.vue'),
      meta: {
        single: true,
        anonymous: true,
        isApp:true,
        isTrue:false,
        isBack:true,
      },
    },
    {
      path: '/selMeetingRoom',
      name: 'selMeetingRoom',
      props: true,
      component: () => import('@/views/app/selMeetingRoom.vue'),
      meta: {
        single: true,
        anonymous: true,
        isApp:true,
        isTrue:false,
        keepAlive:true,
        isBack:true,
      },
    },
    {
      path: '/selMeetingRooms',
      name: 'selMeetingRooms',
      props: true,
      component: () => import('@/views/app/selMeetingRooms.vue'),
      meta: {
        single: true,
        anonymous: true,
        isApp:true,
        isTrue:false,
        keepAlive:true,
        isBack:true,
      },
    },
    {
      path: '/frontPlat',
      name: 'frontPlat',
      component: () =>
        import('@/components/layout/Layout'),
      children: [{
        //系统首页
        path: 'frontIndex',
        name: 'frontIndex',
        component: () =>
          import('@/views/SysIndex.vue'),
        meta: {
          isHome: true,
          single: true,
        },
      },
        ...mainRouter,
      {
        path: 'v-todo',
        name: 'todo',
        component: () =>
          import('@/components/flow/todo.vue'),
      },
      {
        path: 'v-todo/:orgName/:orgId',
        name: 'todoByOrgId',
        component: () =>
          import('@/components/flow/todo.vue'),
        props: true,
      },
      {
        path: 'v-leader',
        name: 'leader',
        component: () =>
          import('@/components/flow/leaderTodo.vue'),
      },

      {
        path: 'v-todo/:defKey',
        name: 'todo-defKey',
        component: () =>
          import('@/components/flow/todo.vue'),
        props: true,
        meta: {
          single: true,
        },
      },

      {
        path: 'v-done',
        name: 'done',
        component: () =>
          import('@/components/flow/done.vue'),
      },
      {
        path: 'v-done/:defKey',
        name: 'done-defKey',
        component: () =>
          import('@/components/flow/done.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      {
        path: 'v-request',
        name: 'request',
        component: () =>
          import('@/components/flow/myRequest.vue'),
      },
      {
        path: 'v-request/:defKey',
        name: 'request-defKey',
        component: () =>
          import('@/components/flow/myRequest.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      {
        path: 'v-flowList',
        name: 'flowList',
        component: () =>
          import('@/components/flow/flowList.vue'),
      },
      {
        path: 'v-todoRead',
        name: 'todoRead',
        component: () =>
          import('@/components/flow/todoRead.vue'),
      },
      {
        path: 'v-todoRead/:defKey',
        name: 'todoRead-defKey',
        component: () =>
          import('@/components/flow/todoRead.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      {
        path: 'v-doneRead',
        name: 'doneRead',
        component: () =>
          import('@/components/flow/doneRead.vue'),
      },
      {
        path: 'v-doneRead/:defKey',
        name: 'doneRead-defKey',
        component: () =>
          import('@/components/flow/doneRead.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      {
        path: 'v-myRead',
        name: 'myRead',
        component: () =>
          import('@/components/flow/myRead.vue'),
      },
      {
        path: 'v-myRead/:defKey',
        name: 'myRead-defKey',
        component: () =>
          import('@/components/flow/myRead.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      {
        path: 'v-myDelegate',
        name: 'myDelegate',
        component: () =>
          import('@/components/flow/myDelegate.vue'),
      },
      {
        path: 'v-myDelegate/:defKey',
        name: 'myDelegate-defKey',
        component: () =>
          import('@/components/flow/myDelegate.vue'),
        props: true,
        meta: {
          single: true,
        },
      },
      ],
    },
    {
      path: '/qywxOauth',
      name: 'qywxOauth',
      props: true,
      component: () => import('@/components/jump/wcw_jump.vue'),
      meta: {
        single: true,
        anonymous: true,
      },
    },
    ...routerMobile,
    {
      path: '/',
      // redirect: {
      //   name: '/frontPlat/frontIndex'
      // }
    },
    // {
    //   path: '/newOpen/cockpit', // newOpen 新窗口打开的页面
    //   name: '/newOpen/cockpit',
    //   props: true,
    //   component: () => import('@/views/dataScreen/cockpit.vue'),
    //   meta: {
    //     single: true,
    //     anonymous: true
    //   }
    // },
    // {
    //   path: '/newOpen/cockpit', // newOpen 新窗口打开的页面
    //   name: '/newOpen/cockpit',
    //   props: true,
    //   component: () => import('@/views/dataScreen/dataScreenCopy/BigData.vue'),
    //   meta: {
    //     single: true,
    //     anonymous: false
    //   }
    // },

    {
      path: '/login/:tenant',
      name: 'loginTenant',
      props: true,
      component: Login,
      meta: {
        single: true,
        anonymous: true,
      },
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      meta: {
        single: true,
        anonymous: true,
        isLogin: true,
      },
    },
    {
      path: '/resetPwdView',
      name: 'resetPwdView',
      props: true,
      component: () =>
        import('@/views/ResetPwdView.vue'),
      meta: {
        single: true,
        anonymous: true,
      },
    },
    {
      path: '/formManage/:instId/:type',
      name: 'formManage',
      component: () =>
        import('@/components/flow/formManage.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/home',
      name: 'home',
      component: Home,
      meta: {
        isHome: true,
      },
    },
    // {
    //   path: '/v-flow',
    //   component: menuContent,
    //   children: [{
    //       path: '/',
    //       name: 'todo-default',
    //       redirect: 'v-todo'
    //     },
    //     {
    //       path: 'v-todo',
    //       name: 'todo',
    //       component: () => import('@/components/flow/todo.vue')
    //     },
    //     {
    //       path: 'v-todo/:orgName/:orgId',
    //       name: 'todoByOrgId',
    //       component: () => import('@/components/flow/todo.vue'),
    //       props: true
    //     },
    //     {
    //       path: 'v-leader',
    //       name: 'leader',
    //       component: () => import('@/components/flow/leaderTodo.vue')
    //     },

    //     {
    //       path: 'v-todo/:defKey',
    //       name: 'todo-defKey',
    //       component: () => import('@/components/flow/todo.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },

    //     {
    //       path: 'v-done',
    //       name: 'done',
    //       component: () => import('@/components/flow/done.vue')
    //     },
    //     {
    //       path: 'v-done/:defKey',
    //       name: 'done-defKey',
    //       component: () => import('@/components/flow/done.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'v-request',
    //       name: 'request',
    //       component: () => import('@/components/flow/myRequest.vue')
    //     },
    //     {
    //       path: 'v-request/:defKey',
    //       name: 'request-defKey',
    //       component: () => import('@/components/flow/myRequest.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'v-flowList',
    //       name: 'flowList',
    //       component: () => import('@/components/flow/flowList.vue')
    //     },
    //     {
    //       path: 'v-todoRead',
    //       name: 'todoRead',
    //       component: () => import('@/components/flow/todoRead.vue')
    //     },
    //     {
    //       path: 'v-todoRead/:defKey',
    //       name: 'todoRead-defKey',
    //       component: () => import('@/components/flow/todoRead.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'v-doneRead',
    //       name: 'doneRead',
    //       component: () => import('@/components/flow/doneRead.vue')
    //     },
    //     {
    //       path: 'v-doneRead/:defKey',
    //       name: 'doneRead-defKey',
    //       component: () => import('@/components/flow/doneRead.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'v-myRead',
    //       name: 'myRead',
    //       component: () => import('@/components/flow/myRead.vue')
    //     },
    //     {
    //       path: 'v-myRead/:defKey',
    //       name: 'myRead-defKey',
    //       component: () => import('@/components/flow/myRead.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'v-myDelegate',
    //       name: 'myDelegate',
    //       component: () => import('@/components/flow/myDelegate.vue')
    //     },
    //     {
    //       path: 'v-myDelegate/:defKey',
    //       name: 'myDelegate-defKey',
    //       component: () => import('@/components/flow/myDelegate.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     }
    //   ]
    // },
    /* 跳转启动流程 */
    {
      path: '/agentStart/:defId/:leaderId',
      name: 'defStart',
      component: () =>
        import('@/components/flow/start.vue'),
      props: true,
    },
    /*复制流程启动 */
    {
      path: '/agentStart/:defId/:leaderId/:copyInstId',
      name: 'defCopyStart',
      component: () =>
        import('@/components/flow/start.vue'),
      props: true,
    },
    //根据流程定义key启动流程
    {
      path: '/agentStartByKey/:defKey',
      name: 'defKeyStart',
      component: () =>
        import('@/components/flow/startByKey.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/sysModulePreview/:id/:appName',
      name: 'sysModulePreview',
      component: () =>
        import('@/components/generator/sysModulePreview.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/start/:defId/:instId',
      name: 'instStart',
      component: () =>
        import('@/components/flow/start.vue'),
      props: true,
    },
    // /* 跳转任务详情 */
    // {
    //   path: '/inst/:instId/:type',
    //   name: 'inst',
    //   component: () => import('@/components/flow/task.vue'),
    //   props: true
    // },

    /* 待阅列表跳转 */
    {
      path: '/inst/:instId/:type/:readId',
      name: 'instRead-read',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },
    /* 模块开发代办跳转 */
    {
      path: '/sysModuleInst/:taskId/:leaderId/:defKey/:noSingle',
      name: 'sysModuleInst',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 数据报表模块开发代办跳转 */
    {
      path: '/reportModuleInst/:taskId/:leaderId/:defKey/:noSingle/:templateKey',
      name: 'reportModuleInst',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 模块开发已办列表跳转 */
    {
      path: '/sysModuleInst/:instId/:type/:defKey',
      name: 'sysModuleInstJump',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },

    /* 数据报表模块开发已办列表跳转 */
    {
      path: '/reportModuleInstDone/:instId/:type/:defKey/:templateKey',
      name: 'reportModuleInstDone',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 状态为FOLLOW时候模块开发待阅跳转 */
    {
      path: '/sysModuleInstTaskRead/:taskId/:task_state/:defKey',
      name: 'sysModuleInstTaskRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 模块开发待阅跳转 */
    {
      path: '/sysModuleInstRead/:instId/:type/:readId/:defKey',
      name: 'sysModuleInstReadJump',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 状态为FOLLOW时候数据报表模块开发待阅跳转 */
    {
      path: '/reportModuleInstTaskRead/:taskId/:task_state/:defKey/:templateKey',
      name: 'reportModuleInstTaskRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 数据报表模块开发待阅跳转 */
    {
      path: '/reportModuleInstRead/:instId/:type/:readId/:defKey/:templateKey',
      name: 'reportModuleInstRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 模块开发已阅列表跳转 */
    {
      path: '/sysModuleInstDone/:instId/:type/:readType/:readDoneId/:defKey',
      name: 'sysModuleInstDone',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 数据报表模块开发已阅列表跳转 */
    {
      path: '/reportModuleInstDone/:instId/:type/:readType/:readDoneId/:defKey/:templateKey',
      name: 'reportModuleInstDoneRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 模块开发我传阅列表跳转 */
    {
      path: '/sysModuleInstMyRead/:instId/:readId/:myReadType/:defKey',
      name: 'sysModuleInstMyRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    /* 数据报表模块开发我传阅列表跳转 */
    {
      path: '/reportModuleInstMyRead/:instId/:readId/:myReadType/:defKey/:templateKey',
      name: 'reportModuleInstMyRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    //模块开发我传阅的列表跳转
    {
      path: '/sysModuleInstRead/:instId/:myReadType/:defKey',
      name: 'sysModuleInstRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    //数据报表模块开发我传阅的列表跳转
    {
      path: '/reportModuleInstRead/:instId/:myReadType/:defKey/:templateKey',
      name: 'reportModuleInstReadJump',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },

    /* 已阅列表跳转 */
    {
      path: '/inst/:instId/:type/:readType/:readDoneId',
      name: 'instRead-done',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },

    /* 我传阅的列表跳转 */
    {
      path: '/myRead/:instId/:readId/:myReadType',
      name: 'myRead-type',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },
    {
      path: '/instRead/:instId/:myReadType',
      name: 'instRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },

    {
      path: '/taskRead/:taskId/:task_state',
      name: 'taskRead',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },
    {
      path: '/inst/:instId',
      name: 'defaultInst',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
    },
    // {
    //   path: '/task/:taskId/:leaderId',
    //   name: 'task',
    //   component: () => import('@/components/flow/task.vue'),
    //   props: true
    // },
    {
      path: '/task/:taskId/:leaderId',
      name: 'task',
      component: () =>
        import('@/components/flow/taskFlowComponents/flowTask.vue'),
      props: true,
    },
    /* 跳转任务详情 */
    {
      path: '/inst/:instId/:type',
      name: 'inst',
      component: () =>
        import('@/components/flow/taskFlowComponents/flowTask.vue'),
      props: true,
    },
    {
      path: '/task/:taskId/:leaderId/:noSingle',
      name: 'taskNosingle',
      component: () =>
        import('@/components/flow/task.vue'),
      props: true,
      meta: {
        single: true,
      },
    },

    /* 邮箱页面开始 */
    {
      path: '/v-mail',
      component: menuContent,
      children: [{
        path: '/',
        name: 'mailList-default',
        redirect: 'v-mailList',
      },
      {
        path: 'v-mailList',
        name: 'mailList',
        component: () =>
          import('@/components/mail/mailList.vue'),
      },
      {
        path: 'v-linkmanList',
        name: 'linkmanList',
        component: () =>
          import('@/components/mail/mailLinkmanList.vue'),
      },
      {
        path: 'v-settingList',
        name: 'settingList',
        component: () =>
          import('@/components/mail/mailSettingList.vue'),
      },
      ],
    },
    {
      path: '/mail/mailGet/:id',
      name: 'mailGet',
      component: () =>
        import('@/components/mail/mailGet.vue'),
      props: true,
    },
    {
      path: '/mail/mailAdd',
      name: 'mailAdd',
      component: () =>
        import('@/components/mail/mailAdd.vue'),
    },
    {
      path: '/mail/mailEdit/:id',
      name: 'mailEdit',
      component: () =>
        import('@/components/mail/mailEdit.vue'),
      props: true,
    },
    {
      path: '/mail/linkmanEdit/:id',
      name: 'mailLinkmanEdit',
      component: () =>
        import('@/components/mail/mailLinkmanEdit.vue'),
      props: true,
    },
    {
      path: '/mail/linkmanGet/:id',
      name: 'mailLinkmanGet',
      component: () =>
        import('@/components/mail/mailLinkmanGet.vue'),
      props: true,
    },
    {
      path: '/mail/settingAdd',
      name: 'mailSettingAdd',
      component: () =>
        import('@/components/mail/mailSettingAdd.vue'),
    },
    {
      path: '/mail/settingEdit/:id',
      name: 'mailSettingEdit',
      component: () =>
        import('@/components/mail/mailSettingEdit.vue'),
      props: true,
    },
    {
      path: '/mail/settingGet/:id',
      name: 'mailSettingGet',
      component: () =>
        import('@/components/mail/mailSettingGet.vue'),
      props: true,
    },
    /* 邮箱页面结束*/

    {
      path: '/v-personal',
      component: menuContent,
      children: [{
        path: '/',
        name: 'approvalItem-default',
        redirect: 'v-approvalItem',
      },
      {
        path: 'v-approvalItem',
        name: 'approvalItemList',
        component: () =>
          import('@/components/approvalItem/approvalItemList.vue'),
      },
      {
        path: 'v-agent',
        name: 'agentList',
        component: () =>
          import('@/components/agent/agentList.vue'),
      },
      {
        path: 'v-secretary',
        name: 'secretary',
        component: () =>
          import('@/components/secretary/secretaryList.vue'),
      },
      {
        path: 'v-bpmDeputy',
        name: 'bpmDeputy',
        component: () =>
          import('@/components/bpmDeputy/bpmDeputyList.vue'),
      },
      {
        path: 'v-myLayout',
        name: 'myLayout',
        component: () =>
          import('@/components/myLayout/myLayoutList.vue'),
      },
      {
        path: 'v-messageReceiver',
        name: 'messageReceiverList',
        component: () =>
          import('@/components/message/messageReceiverList.vue'),
      },
      ],
    },
    {
      path: '/v-approvalItem',
      name: 'approvalItem',
      component: () =>
        import('@/components/approvalItem/approvalItemList.vue'),
      props: true,
    },
    {
      path: '/approvalItem/approvalItemEdit/:id',
      name: 'approvalItemEdit',
      component: () =>
        import('@/components/approvalItem/approvalItemEdit.vue'),
      props: true,
    },
    {
      path: '/approvalItem/approvalItemAdd',
      name: 'approvalItemAdd',
      component: () =>
        import('@/components/approvalItem/approvalItemEdit.vue'),
      props: true,
    },
    {
      path: '/approvalItem/approvalItemGet/:id',
      name: 'approvalItemGet',
      component: () =>
        import('@/components/approvalItem/approvalItemGet.vue'),
      props: true,
    },
    {
      path: '/v-agent',
      name: 'agent',
      component: () =>
        import('@/components/agent/agentList.vue'),
      props: true,
    },
    {
      path: '/agent/agentAdd',
      name: 'agentAdd',
      component: () =>
        import('@/components/agent/agentAdd.vue'),
      props: true,
    },
    {
      path: '/agent/agentEdit/:id',
      name: 'agentEdit',
      component: () =>
        import('@/components/agent/agentEdit.vue'),
      props: true,
    },
    {
      path: '/agent/agentGet/:id',
      name: 'agentGet',
      component: () =>
        import('@/components/agent/agentGet.vue'),
      props: true,
    },
    {
      path: '/secretary/secretaryEdit/:id',
      name: 'secretaryEdit',
      component: () =>
        import('@/components/secretary/secretaryEdit.vue'),
      props: true,
    },
    {
      path: 'v-bpmDeputy',
      name: 'bpmDeputyList',
      component: () =>
        import('@/components/bpmDeputy/bpmDeputyList.vue'),
      props: true,
    },
    {
      path: '/bpmDeputy/bpmDeputySetting/',
      name: 'bpmDeputySetting',
      component: () =>
        import('@/components/bpmDeputy/bpmDeputySetting.vue'),
      props: true,
    },
    {
      path: '/bpmDeputy/bpmDeputySetting/:id',
      name: 'bpmDeputySetting-id',
      component: () =>
        import('@/components/bpmDeputy/bpmDeputySetting.vue'),
      props: true,
    },
    /* 跳转新闻动态列表 */
    {
      path: '/newsList/:type',
      name: 'newsList',
      component: () =>
        import('@/components/news/newsList.vue'),
      props: true,
    },
    {
      path: '/news/:newsId',
      name: 'newsGet',
      component: () =>
        import('@/components/news/newsGet.vue'),
      props: true,
    },
    // 预览文件
    {
      path: '/pdf/:src/:fileId',
      name: 'pdf',
      component: () =>
        import('@/components/common/pdf.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/iframeSrc/:iframeSrc/:fileId',
      name: 'iframeSrc',
      component: () =>
        import('@/components/common/iframeSrc.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/previewForm/:formId',
      name: 'previewForm',
      component: () =>
        import('@/components/common/previewForm.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/previewForm/:formId/:single',
      name: 'previewForm-single',
      component: () =>
        import('@/components/common/previewForm.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/previewInstForm/:defId/:instId',
      name: 'previewInstForm',
      component: () =>
        import('@/components/common/previewInstForm.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/QRCodeForm/:templateKey/:action',
      name: 'QRCodeForm',
      component: () =>
        import('@/components/dataTemplate/QRCodeForm.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    // {
    //   path: '/statement',
    //   name: 'statement',
    //   component: Statement,
    //   children: [{
    //       path: '/',
    //       name: 'template-default',
    //       redirect: '/statement/draftList'
    //     },
    //     {
    //       path: 'draftList/:tempAlias/:dataViewFlag',
    //       name: 'templateDraftList',
    //       component: () =>
    //         import('@/components/dataTemplate/TemplateDraft.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: '/href/template/:alias',
    //       name: 'templateHref',
    //       component: () => import('@/components/dataTemplate/templateHref.vue'),
    //       props: true
    //     },
    //     {
    //       path: 'template/preview/:templateKey',
    //       name: 'templatePreview',
    //       component: () =>
    //         import('@/components/dataTemplate/templatePreview.vue'),
    //       props: true
    //     },
    //     {
    //       path: 'template/preview/:templateKey/:single',
    //       name: 'templatePreview-single',
    //       component: () =>
    //         import('@/components/dataTemplate/templatePreview.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'template/preview/:templateKey/:single/:parameterqQuerys',
    //       name: 'templatePreview-singleQuerys',
    //       component: () =>
    //         import('@/components/dataTemplate/templatePreview.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'template/preview/:templateKey/:taskType/:defKey/:isJoinFlow',
    //       component: () =>
    //         import('@/components/dataTemplate/templatePreview.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'template/form/:templateKey/:action',
    //       name: 'templateForm',
    //       component: () => import('@/components/dataTemplate/templateForm.vue'),
    //       props: true
    //     },
    //     {
    //       path: 'template/form/:templateKey/:action/:single',
    //       name: 'templateFormSingle',
    //       component: () => import('@/components/dataTemplate/templateForm.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'template/form/:templateKey/:action/:single/:openType',
    //       name: 'templateFormSingleOpenType',
    //       component: () => import('@/components/dataTemplate/templateForm.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'template/form/:templateKey/:action/:single/:isShare',
    //       name: 'templateShare',
    //       component: () => import('@/components/dataTemplate/templateForm.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     },
    //     {
    //       path: 'querySql/queryView/:sqlAlias/:alias',
    //       name: 'querySqlContent',
    //       component: () => import('@/components/querySql/querySqlContent.vue'),
    //       props: true
    //     },
    //     {
    //       path: 'querySql/queryView/:sqlAlias/:alias/:single',
    //       name: 'querySql-single',
    //       component: () => import('@/components/querySql/querySqlContent.vue'),
    //       props: true,
    //       meta: {
    //         single: true
    //       }
    //     }
    //   ]
    // },
    {
      path: '/sysModulePreview/statement', //用来区分是否是模块开发里面的表单列表
      name: 'sysModulePreviewStatement',
      component: Statement,
      children: [{
        path: 'template/preview/:templateKey/:single/:isJoinFlow',
        name: 'sysModulePreviewStatement-single',
        component: () =>
          import('@/components/dataTemplate/templatePreview.vue'),
        props: true,
        meta: {
          single: true,
        },
      },],
    },
    {
      path: '/column/preview/:previewAlias',
      name: 'columnpreview',
      component: () =>
        import('@/views/ColumnPreview.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/onlineForm',
      name: 'onlineForm',
      component: () =>
        import('@/components/flow/OnlineForm.vue'),
      props: true,
    },
    /* 已办结流程 */
    {
      path: '/completeView/:procDefKey',
      name: 'completeView',
      component: () =>
        import('@/components/flow/completeView.vue'),
      props: true,
    },
    /* 办结流程，只读表单 */
    {
      path: '/doneReadOnly/:instId',
      name: 'doneReadOnly',
      component: () =>
        import('@/components/flow/task/doneReadOnly.vue'),
      props: true,
    },
    {
      path: '/appCenterFront',
      name: 'appCenter',
      component: () =>
        import('@/components/appCenter/AppCenter.vue'),
    },
    {
      path: '/appContent/:type/:id/:otherId/:appName',
      name: 'appContent',
      component: () =>
        import('@/components/appCenter/AppContent.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/webOffice/:fileId/:isRevision/:inputWriteable',
      name: 'webOffice',
      component: () =>
        import('@/views/WebOffice.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/navigationMsg/:type/:id',
      name: 'navigationMsg',
      component: () =>
        import('@/components/home/navigationMsg.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/file/preview/:fileId',
      name: 'attanchmentPreview',
      component: () =>
        import('@/views/AttanchmentPreview.vue'),
      props: true,
      meta: {
        single: true,
      },
    },
    {
      path: '/messageFillPage/:tipId',
      name: 'messageFillPage',
      component: () =>
        import('@/views/MessageFillPage.vue'),
      props: true,
      meta: {
        single: true,
        anonymous: true,
      },
    },
    {
      path: '*',
      component: NotFound,
      meta: {
        single: true,
      },
    },
    // ...flowformRouter
  ],
})

const createRouter = () =>
  new Router({
    mode: 'history',
    routes: [],
  })

//重写动态添加路由方法
router.$addRoutes = (params) => {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher //重置路由规则
  router.addRoutes(params) // 添加路由
}

//动态新增二级路由
router.addList = (path, list) => {
  let isAddPath = false
  let isChildren = false
  for (let i = 0; i < list.length; i++) {
    //判断当前点击菜单的路由别名是否存在 router.js 里面
    if (path == list[i].path) {
      //存在
      //动态注册路由
      let index = path.replace('/', '')
      let templatePreview_new = {
        path: 'template/preview/:templateKey',
        name: 'templatePreview_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/templatePreview.vue'], resolve),
      } //数据报表
      let templateHref_new = {
        path: 'href/template/:alias',
        name: 'templateHref_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/templateHref.vue'], resolve),
      } //URL菜单
      let querySql_new = {
        path: 'querySql/queryView/:sqlAlias/:alias',
        name: 'querySql_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/querySql/querySqlContent.vue'], resolve),
      } //自定义视图
      let template_new = {
        path: 'template/form/:templateKey/:action',
        name: 'template_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/templateForm.vue'], resolve),
      } //数据报表
      let draftList_new = {
        path: 'draftList/:tempAlias/:dataViewFlag',
        name: 'template_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/TemplateDraft.vue'], resolve),
      } //数据报表
      let templateSingle_new = {
        path: 'template/form/:templateKey/:action/:single',
        name: 'templateSingle_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/templateForm.vue'], resolve),
      } //数据报表
      let templateQuerys_new = {
        path: 'template/preview/:templateKey/:single/:parameterqQuerys',
        name: 'templateQuerys_' + index,
        props: true,
        component: (resolve) =>
          require(['@/components/dataTemplate/templatePreview.vue'], resolve),
      } //数据报表
      if (list[i].children) {
        //判断是否重复添加路由
        for (let j = 0; j < list[i].children.length; j++) {
          let children = list[i].children[j]
          if (children.name == templatePreview_new.name) {
            isAddPath = true // true ： 重复路由
            break
          }
        }
        if (!isAddPath) {
          list[i].children.push(templatePreview_new)
          list[i].children.push(templateHref_new)
          list[i].children.push(querySql_new)
          list[i].children.push(template_new)
          list[i].children.push(templateSingle_new)
          list[i].children.push(templateQuerys_new)
          list[i].children.push(draftList_new)
          router.$addRoutes(list)
        }
        isChildren = true
        break
      } else isChildren = true
    }
  }
  return isChildren
}

let registerRouteFresh = true

const ssoRedirect = () => {
  if (window.ssoConfig.mode == 'cas') {
    let service = window.location.href
    localStorage.setItem('service', service)
    window.location.href = window.ssoConfig.url + '?service=' + service
  } else if (window.ssoConfig.mode == 'oauth') {
    if (!window.ssoConfig.clientId) {
      throw 'oauth模式下必须提供clientId'
    }
    const service = window.location.href
    localStorage.setItem('service', service)
    window.location.href = `${window.ssoConfig.url}?response_type=code&client_id=${window.ssoConfig.clientId}&redirect_uri=${service}`
  }
}

const handelShortUrl = (to, from, next) => {
  req
    .get(
      '${portal}/portal/shorturlManage/v1/getLongUrlByShortUrl?shortUrl=' +
      to.fullPath.substr(1),
      '',
      false
    )
    .then((resp) => {
      if (resp && resp.data && resp.data.state) {
        store
          .dispatch(
            'login/validAndCompletedCurrent',
            resp.data.value.guestToken
          )
          .then(() => {
            next({
              path: resp.data.value.url,
            })
          })
          .catch(() => {
            logoutAndCleanUp(to, from, next)
          })
      } else {
        next({
          path: '/messageFillPage/' + resp.data.message,
        })
      }
    })
    .catch(() => {
      logoutAndCleanUp(to, from, next)
    })
}

const logoutAndCleanUp = (to, from, next) => {
  store.dispatch('login/logoutAndCleanUp').then(() => {
    if (window.ssoConfig.mode && window.ssoConfig.mode != 'jwt' && !ticket) {
      ssoRedirect()
    } else if (!window.ssoConfig.mode || window.ssoConfig.mode == 'jwt') {
      next({
        path: '/login',
        query: {
          redirect: to.fullPath,
        },
      })
    } else {
      throw '登录失败'
    }
  })
}

// 移除url后面的指定参数
const removeUrlParams = (param) => {
  const query = window.location.search.substring(1)
  if (!query) {
    return
  }
  const vars = query.split('&')
  const newVars = []
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split('=')
    if (pair[0] != param) {
      newVars.push(vars[i])
    }
  }
  setTimeout(() => {
    const path = `${window.location.pathname}${newVars.length > 0 ? '?' : ''
      }${newVars.join('&')}`
    window.history.replaceState(null, null, path)
  }, 1000)
}
let loadingInstance
const tokenLogin = (userInfo, next) => {
  store.dispatch('login/loginByPrincipal', userInfo).then((loginStatus) => {
    if (loginStatus && loginStatus == true) {
      store.dispatch('menu/actionFrontMenus').then((res) => {
        next({
          path: `/frontPlat/${res[0].alias}`,
          // path: `/newOpen/cockpit`
        })
        removeUrlParams('tokenKey')
        // loadingInstance.close()
      })
    }
  })
}

router.beforeEach((to, from, next) => {
  // 用户中心登录到养护系统 携带tokenKey
  if (to.name == 'login' && to.query.tokenKey) {
    // loadingInstance = Loading.service({ fullscreen: true ,background: 'rgba(0, 0, 0, 0.6)'});
    let data = {
      key: to.query.tokenKey,
    }
    let token = {
      token: '',
    }
    // tokenLogin({
    //   account: "admin",
    //   password: "artfess"
    // }, next);
    uc.authFormUserTokenKey(data).then((res) => {
      // debugger;
      console.log(res)
      if (res.success) {
        token.token = res.data
        uc.authUserInfo(token).then((res) => {
          console.log(res, 'resresresres')
          if (res.success) {
            //同步后获取用户名密码登录
            tokenLogin({
              account: 'admin',
              password: 'artfess',
            },
              next
            )
          } else {
            Message.error(res.msg)
            // loadingInstance.close()
          }
        })
      } else {
        Message.error(res.msg)
        // loadingInstance.close()
      }
    })
  }

  store.dispatch('menu/getAllmenus', {}).then((menus) => {
    //href菜单不进这段代码
    if (to.fullPath.indexOf('href') == -1) {
      let alias = to.fullPath.split('/')[1]
      for (let i = 0; i < menus.length; i++) {
        if (menus[i].alias === alias) {
          store.dispatch('menu/getCurrentMenu', {
            alias: menus[i].alias,
            name: menus[i].name,
          })
          break
        }
      }
    }
  })
  if (to.fullPath.startsWith('/surl/')) {
    handelShortUrl(to, from, next)
    return
  }

  // 1.当前为单点登录模式，且要路由到login页面，则做单点登录重定向；
  if (
    to.name == 'login' &&
    window.ssoConfig.mode &&
    window.ssoConfig.mode != 'jwt'
  ) {
    // 单点登录时如果已经携带了code或者ticket时，如果是/login路径需要跳转到默认页面（解决反复跳转的问题）
    if (
      (window.ssoConfig.mode == 'cas' || window.ssoConfig.mode == 'oauth') &&
      (to.query.code || to.query.ticket)
    ) {
      window.location.href = window.location.href.replace('/login', '')
      return
    } else {
      ssoRedirect()
    }
  }

  if (from.name != 'defStart' || to.name != 'instStart') {
    sessionStorage.removeItem('formImportTempRefId')
    sessionStorage.removeItem('formImportTempJson')
  }

  if (
    sessionStorage.menu_alias &&
    to.fullPath &&
    to.fullPath.split('/')[1] == 'home'
  ) {
    sessionStorage.menu_alias = ''
  }
  if (to.matched.some((record) => !record.meta.anonymous)) {
    let ticket = to.query.token
    // 2.当前已经从单点页面重定向回来了，且在url地址中携带了ticket或code；
    if (window.ssoConfig.mode == 'cas') {
      ticket = to.query.ticket
    } else if (window.ssoConfig.mode == 'oauth') {
      ticket = to.query.code
    }
    store
      // 3.携带ticket做用户鉴权；
      .dispatch('login/validAndCompletedCurrent', ticket)
      .then(() => {
        store._vm.$root.$emit('login-completed')
        if (registerRouteFresh) {
          if (sessionStorage.menu_alias) {
            let path = '/' + sessionStorage.menu_alias
            let isChildren = router.addList(path, router.options.routes) //动态新增二级路由
            //当前点击菜单的路由别名不存在 router.js 里面
            if (!isChildren) {
              let alias_new = {
                path: path,
                name: 'alias_new',
                component: (resolve) =>
                  require(['@/views/menuContent.vue'], resolve),
                children: [],
              }
              router.options.routes.push(alias_new)
              router.addList(path, router.options.routes) //动态新增二级路由
            }
            router.replace({
              path: to.path,
              query: to.query,
            })
          }
          registerRouteFresh = false
        }
        next()
        // url地址带token的方式认证成功后删除url中的token
        removeUrlParams('token')
      })
      .catch(() => {
        // 4.鉴权失败时根据当前模式重定向到对应页面。
        logoutAndCleanUp(to, from, next)
      })
  } else {
    next()
  }
})

export default router