index.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. Vue.use(Router)
  4. /* Layout */
  5. import Layout from '@/layout'
  6. import LiveConsole from "@/views/live/liveConsole/index.vue";
  7. // 静态 import() 确保龙虾视图被 webpack 编译产出 chunk(防止动态 require 上下文遗漏)
  8. import '@/views/lobster/workflow-generate/index.vue'
  9. import '@/views/lobster/sales-corpus/index.vue'
  10. /**
  11. * Note: 路由配置项
  12. *
  13. * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1
  14. * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
  15. * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面
  16. * // 若你想不管路由下面的 children 声明的个数都显示你的根路由
  17. * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由
  18. * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
  19. * name:'router-name' // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
  20. * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数
  21. * meta : {
  22. noCache: true // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
  23. title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字
  24. icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg
  25. breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示
  26. activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。
  27. }
  28. */
  29. // 公共路由
  30. export const constantRoutes = [
  31. {
  32. path: '/redirect',
  33. component: Layout,
  34. hidden: true,
  35. children: [
  36. {
  37. path: '/redirect/:path(.*)',
  38. component: (resolve) => require(['@/views/redirect'], resolve)
  39. }
  40. ]
  41. },
  42. {
  43. path: '/login',
  44. component: (resolve) => require(['@/views/login'], resolve),
  45. hidden: true
  46. },
  47. {
  48. path: '/register',
  49. component: (resolve) => require(['@/views/register'], resolve),
  50. hidden: true
  51. },
  52. {
  53. path: '/404',
  54. component: (resolve) => require(['@/views/error/404'], resolve),
  55. hidden: true
  56. },
  57. {
  58. path: '/401',
  59. component: (resolve) => require(['@/views/error/401'], resolve),
  60. hidden: true
  61. },
  62. {
  63. path: '',
  64. component: Layout,
  65. redirect: 'index',
  66. children: [
  67. {
  68. path: 'index',
  69. component: (resolve) => require(['@/views/index'], resolve),
  70. name: 'Index',
  71. meta: { title: '首页', icon: 'dashboard', affix: true }
  72. }
  73. ]
  74. },
  75. {
  76. path: '/user',
  77. component: Layout,
  78. hidden: true,
  79. redirect: 'noredirect',
  80. children: [
  81. {
  82. path: 'profile',
  83. component: (resolve) => require(['@/views/system/user/profile/index'], resolve),
  84. name: 'Profile',
  85. meta: { title: '个人中心', icon: 'user' }
  86. }
  87. ]
  88. },
  89. {
  90. path: '/system/user-auth',
  91. component: Layout,
  92. hidden: true,
  93. children: [
  94. {
  95. path: 'role/:userId(\\d+)',
  96. component: (resolve) => require(['@/views/system/user/authRole'], resolve),
  97. name: 'AuthRole',
  98. meta: { title: '分配角色', activeMenu: '/system/user'}
  99. }
  100. ]
  101. },
  102. {
  103. path: '/system/role-auth',
  104. component: Layout,
  105. hidden: true,
  106. children: [
  107. {
  108. path: 'user/:roleId(\\d+)',
  109. component: (resolve) => require(['@/views/system/role/authUser'], resolve),
  110. name: 'AuthUser',
  111. meta: { title: '分配用户', activeMenu: '/system/role'}
  112. }
  113. ]
  114. },
  115. {
  116. path: '/system/dict-data',
  117. component: Layout,
  118. hidden: true,
  119. children: [
  120. {
  121. path: 'index/:dictId(\\d+)',
  122. component: (resolve) => require(['@/views/system/dict/data'], resolve),
  123. name: 'Data',
  124. meta: { title: '字典数据', activeMenu: '/system/dict'}
  125. }
  126. ]
  127. },
  128. {
  129. path: '/monitor/job-log',
  130. component: Layout,
  131. hidden: true,
  132. children: [
  133. {
  134. path: 'index',
  135. component: (resolve) => require(['@/views/monitor/job/log'], resolve),
  136. name: 'JobLog',
  137. meta: { title: '调度日志', activeMenu: '/monitor/job'}
  138. }
  139. ]
  140. },
  141. {
  142. path: '/tool/gen-edit',
  143. component: Layout,
  144. hidden: true,
  145. children: [
  146. {
  147. path: 'index',
  148. component: (resolve) => require(['@/views/tool/gen/editTable'], resolve),
  149. name: 'GenEdit',
  150. meta: { title: '修改生成配置', activeMenu: '/tool/gen'}
  151. }
  152. ]
  153. },
  154. {
  155. path: '/watch/deviceInfo/details',
  156. component: Layout,
  157. hidden: true,
  158. children: [
  159. {
  160. path: ':deviceId(\\d+)',
  161. component: (resolve) => require(['@/views/watch/deviceInfo/details'], resolve),
  162. name: 'details',
  163. meta: { title: '设备详情', activeMenu: '/watch/deviceInfo'}
  164. }
  165. ]
  166. },
  167. {
  168. path: '/course/sopTempe',
  169. component: Layout,
  170. hidden: true,
  171. children: [
  172. {
  173. path: 'updateSopTemp/:id/:type(\\d+)',
  174. component: () => import('@/views/qw/sopTemp/updateSopTemp'),
  175. name: 'updateSopTemp',
  176. meta: { title: '改动SOP模板', activeMenu: '/course/addSopTemp' }
  177. },
  178. {
  179. path: 'updateTemp/:id/:type(\\d+)',
  180. component: () => import('@/views/qw/sopTemp/updateTemp'),
  181. name: 'updateTemp',
  182. meta: { title: '改动SOP模板', activeMenu: '/course/updateTemp' }
  183. },
  184. {
  185. path: 'updateAiChatTemp/:id/:type(\\d+)',
  186. component: () => import('@/views/qw/sopTemp/updateAiChatTemp'),
  187. name: 'updateAiChatTemp',
  188. meta: { title: '改动SOP模板', activeMenu: '/course/addSopTemp' }
  189. },
  190. {
  191. path: 'courseFinishTemp/:parentId',
  192. component: (resolve) => require(['@/views/course/courseFinishTemp/index'], resolve),
  193. name: 'courseFinishTemp',
  194. meta: { title: '模板详情', activeMenu: '/course'}
  195. }
  196. ]
  197. },
  198. {
  199. path: '/qw/sopUserLogs',
  200. component: Layout,
  201. hidden: true,
  202. children: [
  203. {
  204. path: 'sopUserLogsSchedule/:id', // 动态路由参数
  205. component: () => import('@/views/qw/sopUserLogs/sopUserLogsSchedule.vue'), // 使用 import 动态加载
  206. name: 'sopUserLogsSchedule',
  207. meta: { title: '查看营期', activeMenu: '/qw/sop' }
  208. }
  209. ]
  210. },
  211. // 独立页路由:不嵌套根布局,直接渲染目标组件
  212. {
  213. path: '/live/liveConsole/:liveId',
  214. name: 'LiveConsole',
  215. component: LiveConsole, // 直接渲染目标组件,无侧边栏
  216. meta: {
  217. isIndependentPage: true // 标记为“独立页”
  218. }
  219. },
  220. {
  221. path: '/his/aiWorkflow',
  222. component: () => import('@/layout/index'),
  223. hidden: true,
  224. children: [
  225. {
  226. path: '',
  227. component: () => import('@/views/his/aiWorkflow/index'),
  228. name: 'AiWorkflow',
  229. meta: { title: 'AI工作流', icon: 'workflow' }
  230. },
  231. {
  232. path: 'design',
  233. component: () => import('@/views/his/aiWorkflow/design'),
  234. name: 'AiWorkflowDesign',
  235. meta: { title: '工作流设计', activeMenu: '/his/aiWorkflow' }
  236. },
  237. {
  238. path: 'design/:id',
  239. component: () => import('@/views/his/aiWorkflow/design'),
  240. name: 'AiWorkflowEdit',
  241. meta: { title: '编辑工作流', activeMenu: '/his/aiWorkflow' }
  242. }
  243. ]
  244. },
  245. // ======== 龙虾引擎 (Lobster Workflow Engine) ========
  246. // 静态 import() 确保龙虾视图被 webpack 编译产出 chunk(防止动态 require 上下文遗漏)
  247. // 注意:不在此注册 /admin 路由,避免拦截动态路由的子路由导致 404
  248. ]
  249. const originalPush = Router.prototype.push
  250. Router.prototype.push = function push(location) {
  251. return originalPush.call(this, location).catch(err => {
  252. if (err.name !== 'NavigationDuplicated') throw err
  253. })
  254. }
  255. export default new Router({
  256. mode: 'history', // 去掉url中的#
  257. scrollBehavior: () => ({ y: 0 }),
  258. routes: constantRoutes
  259. })