index.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. import Vue from 'vue'
  18. import store from '@/conf/home/store'
  19. import localStore from '@/module/util/localStorage'
  20. import i18n from '@/module/i18n/index.js'
  21. import config from '~/external/config'
  22. import Router from 'vue-router'
  23. Vue.use(Router)
  24. const router = new Router({
  25. routes: [
  26. {
  27. path: '/',
  28. name: 'index',
  29. redirect: {
  30. name: 'home'
  31. }
  32. },
  33. {
  34. path: '/home',
  35. name: 'home',
  36. component: resolve => require(['../pages/home/index'], resolve),
  37. meta: {
  38. title: `${i18n.$t('Home')} - DolphinScheduler`,
  39. refreshInSwitchedTab: config.refreshInSwitchedTab
  40. }
  41. },
  42. {
  43. path: '/projects',
  44. name: 'projects',
  45. component: resolve => require(['../pages/projects/index'], resolve),
  46. meta: {
  47. title: `${i18n.$t('Project')}`
  48. },
  49. redirect: {
  50. name: 'projects-list'
  51. },
  52. beforeEnter: (to, from, next) => {
  53. const blacklist = ['projects', 'projects-list']
  54. const { projectCode } = to.params || {}
  55. if (!blacklist.includes(to.name) && projectCode && projectCode !== localStore.getItem('projectCode')) {
  56. store.dispatch('projects/getProjectByCode', projectCode).then(res => {
  57. store.commit('dag/setProjectId', res.id)
  58. store.commit('dag/setProjectCode', res.code)
  59. store.commit('dag/setProjectName', res.name)
  60. localStore.setItem('projectId', res.id)
  61. localStore.setItem('projectCode', res.code)
  62. localStore.setItem('projectName', res.name)
  63. next()
  64. }).catch(e => {
  65. next({ name: 'projects-list' })
  66. })
  67. } else {
  68. next()
  69. }
  70. },
  71. children: [
  72. {
  73. path: '/projects/list',
  74. name: 'projects-list',
  75. component: resolve => require(['../pages/projects/pages/list/index'], resolve),
  76. meta: {
  77. title: `${i18n.$t('Project')}`,
  78. refreshInSwitchedTab: config.refreshInSwitchedTab
  79. }
  80. },
  81. {
  82. path: '/projects/:projectCode/index',
  83. name: 'projects-index',
  84. component: resolve => require(['../pages/projects/pages/index/index'], resolve),
  85. meta: {
  86. title: `${i18n.$t('Project Home')}`,
  87. refreshInSwitchedTab: config.refreshInSwitchedTab
  88. }
  89. },
  90. {
  91. path: '/projects/:projectCode/kinship',
  92. name: 'projects-kinship',
  93. component: resolve => require(['../pages/projects/pages/kinship/index'], resolve),
  94. meta: {
  95. title: `${i18n.$t('Kinship')}`,
  96. refreshInSwitchedTab: config.refreshInSwitchedTab
  97. }
  98. },
  99. {
  100. path: '/projects/:projectCode/definition',
  101. name: 'definition',
  102. component: resolve => require(['../pages/projects/pages/definition/index'], resolve),
  103. meta: {
  104. title: `${i18n.$t('Process definition')}`,
  105. refreshInSwitchedTab: config.refreshInSwitchedTab
  106. },
  107. redirect: {
  108. name: 'projects-definition-list'
  109. },
  110. children: [
  111. {
  112. path: '/projects/:projectCode/definition/list',
  113. name: 'projects-definition-list',
  114. component: resolve => require(['../pages/projects/pages/definition/pages/list/index'], resolve),
  115. meta: {
  116. title: `${i18n.$t('Process definition')}`,
  117. refreshInSwitchedTab: config.refreshInSwitchedTab
  118. }
  119. },
  120. {
  121. path: '/projects/:projectCode/definition/list/:code',
  122. name: 'projects-definition-details',
  123. component: resolve => require(['../pages/projects/pages/definition/pages/details/index'], resolve),
  124. meta: {
  125. title: `${i18n.$t('Process definition details')}`,
  126. refreshInSwitchedTab: config.refreshInSwitchedTab
  127. }
  128. },
  129. {
  130. path: '/projects/:projectCode/definition/create',
  131. name: 'definition-create',
  132. component: resolve => require(['../pages/projects/pages/definition/pages/create/index'], resolve),
  133. meta: {
  134. title: `${i18n.$t('Create process definition')}`
  135. }
  136. },
  137. {
  138. path: '/projects/:projectCode/definition/tree/:code',
  139. name: 'definition-tree-view-index',
  140. component: resolve => require(['../pages/projects/pages/definition/pages/tree/index'], resolve),
  141. meta: {
  142. title: `${i18n.$t('TreeView')}`,
  143. refreshInSwitchedTab: config.refreshInSwitchedTab
  144. }
  145. },
  146. {
  147. path: '/projects/:projectCode/definition/list/timing/:code',
  148. name: 'definition-timing-details',
  149. component: resolve => require(['../pages/projects/pages/definition/timing/index'], resolve),
  150. meta: {
  151. title: `${i18n.$t('Scheduled task list')}`,
  152. refreshInSwitchedTab: config.refreshInSwitchedTab
  153. }
  154. }
  155. ]
  156. },
  157. {
  158. path: '/projects/:projectCode/instance',
  159. name: 'instance',
  160. component: resolve => require(['../pages/projects/pages/instance/index'], resolve),
  161. meta: {
  162. title: `${i18n.$t('Process Instance')}`
  163. },
  164. redirect: {
  165. name: 'projects-instance-list'
  166. },
  167. children: [
  168. {
  169. path: '/projects/:projectCode/instance/list',
  170. name: 'projects-instance-list',
  171. component: resolve => require(['../pages/projects/pages/instance/pages/list/index'], resolve),
  172. meta: {
  173. title: `${i18n.$t('Process Instance')}`,
  174. refreshInSwitchedTab: config.refreshInSwitchedTab
  175. }
  176. },
  177. {
  178. path: '/projects/:projectCode/instance/list/:id',
  179. name: 'projects-instance-details',
  180. component: resolve => require(['../pages/projects/pages/instance/pages/details/index'], resolve),
  181. meta: {
  182. title: `${i18n.$t('Process instance details')}`,
  183. refreshInSwitchedTab: config.refreshInSwitchedTab
  184. }
  185. },
  186. {
  187. path: '/projects/:projectCode/instance/gantt/:id',
  188. name: 'instance-gantt-index',
  189. component: resolve => require(['../pages/projects/pages/instance/pages/gantt/index'], resolve),
  190. meta: {
  191. title: `${i18n.$t('Gantt')}`,
  192. refreshInSwitchedTab: config.refreshInSwitchedTab
  193. }
  194. }
  195. ]
  196. },
  197. {
  198. path: '/projects/:projectCode/task-instance',
  199. name: 'task-instance',
  200. component: resolve => require(['../pages/projects/pages/taskInstance'], resolve),
  201. meta: {
  202. title: `${i18n.$t('Task Instance')}`,
  203. refreshInSwitchedTab: config.refreshInSwitchedTab
  204. }
  205. },
  206. {
  207. path: '/projects/:projectCode/task-record',
  208. name: 'task-record',
  209. component: resolve => require(['../pages/projects/pages/taskRecord'], resolve),
  210. meta: {
  211. title: `${i18n.$t('Task record')}`,
  212. refreshInSwitchedTab: config.refreshInSwitchedTab
  213. }
  214. },
  215. {
  216. path: '/projects/:projectCode/history-task-record',
  217. name: 'history-task-record',
  218. component: resolve => require(['../pages/projects/pages/historyTaskRecord'], resolve),
  219. meta: {
  220. title: `${i18n.$t('History task record')}`,
  221. refreshInSwitchedTab: config.refreshInSwitchedTab
  222. }
  223. }
  224. ]
  225. },
  226. {
  227. path: '/resource',
  228. name: 'resource',
  229. component: resolve => require(['../pages/resource/index'], resolve),
  230. redirect: {
  231. name: 'file'
  232. },
  233. meta: {
  234. title: `${i18n.$t('Resources')}`,
  235. refreshInSwitchedTab: config.refreshInSwitchedTab
  236. },
  237. children: [
  238. {
  239. path: '/resource/file',
  240. name: 'file',
  241. component: resolve => require(['../pages/resource/pages/file/pages/list/index'], resolve),
  242. meta: {
  243. title: `${i18n.$t('File Manage')}`,
  244. refreshInSwitchedTab: config.refreshInSwitchedTab
  245. }
  246. },
  247. {
  248. path: '/resource/file/create',
  249. name: 'resource-file-create',
  250. component: resolve => require(['../pages/resource/pages/file/pages/create/index'], resolve),
  251. meta: {
  252. title: `${i18n.$t('Create Resource')}`
  253. }
  254. },
  255. {
  256. path: '/resource/file/createFolder',
  257. name: 'resource-file-createFolder',
  258. component: resolve => require(['../pages/resource/pages/file/pages/createFolder/index'], resolve),
  259. meta: {
  260. title: `${i18n.$t('Create Resource')}`
  261. }
  262. },
  263. {
  264. path: '/resource/file/subFileFolder/:id',
  265. name: 'resource-file-subFileFolder',
  266. component: resolve => require(['../pages/resource/pages/file/pages/subFileFolder/index'], resolve),
  267. meta: {
  268. title: `${i18n.$t('Create Resource')}`,
  269. refreshInSwitchedTab: config.refreshInSwitchedTab
  270. }
  271. },
  272. {
  273. path: '/resource/file/subFile/:id',
  274. name: 'resource-file-subFile',
  275. component: resolve => require(['../pages/resource/pages/file/pages/subFile/index'], resolve),
  276. meta: {
  277. title: `${i18n.$t('Create Resource')}`,
  278. refreshInSwitchedTab: config.refreshInSwitchedTab
  279. }
  280. },
  281. {
  282. path: '/resource/file/list/:id',
  283. name: 'resource-file-details',
  284. component: resolve => require(['../pages/resource/pages/file/pages/details/index'], resolve),
  285. meta: {
  286. title: `${i18n.$t('File Details')}`,
  287. refreshInSwitchedTab: config.refreshInSwitchedTab
  288. }
  289. },
  290. {
  291. path: '/resource/file/subdirectory/:id',
  292. name: 'resource-file-subdirectory',
  293. component: resolve => require(['../pages/resource/pages/file/pages/subdirectory/index'], resolve),
  294. meta: {
  295. title: `${i18n.$t('File Manage')}`,
  296. refreshInSwitchedTab: config.refreshInSwitchedTab
  297. }
  298. },
  299. {
  300. path: '/resource/file/edit/:id',
  301. name: 'resource-file-edit',
  302. component: resolve => require(['../pages/resource/pages/file/pages/edit/index'], resolve),
  303. meta: {
  304. title: `${i18n.$t('File Details')}`
  305. }
  306. },
  307. {
  308. path: '/resource/udf',
  309. name: 'udf',
  310. component: resolve => require(['../pages/resource/pages/udf/index'], resolve),
  311. meta: {
  312. title: `${i18n.$t('UDF manage')}`,
  313. refreshInSwitchedTab: config.refreshInSwitchedTab
  314. },
  315. children: [
  316. {
  317. path: '/resource/udf',
  318. name: 'resource-udf',
  319. component: resolve => require(['../pages/resource/pages/udf/pages/resource/index'], resolve),
  320. meta: {
  321. title: `${i18n.$t('UDF Resources')}`,
  322. refreshInSwitchedTab: config.refreshInSwitchedTab
  323. }
  324. },
  325. {
  326. path: '/resource/udf/subUdfDirectory/:id',
  327. name: 'resource-udf-subUdfDirectory',
  328. component: resolve => require(['../pages/resource/pages/udf/pages/subUdfDirectory/index'], resolve),
  329. meta: {
  330. title: `${i18n.$t('UDF Resources')}`,
  331. refreshInSwitchedTab: config.refreshInSwitchedTab
  332. }
  333. },
  334. {
  335. path: '/resource/udf/createUdfFolder',
  336. name: 'resource-udf-createUdfFolder',
  337. component: resolve => require(['../pages/resource/pages/udf/pages/createUdfFolder/index'], resolve),
  338. meta: {
  339. title: `${i18n.$t('Create Resource')}`
  340. }
  341. },
  342. {
  343. path: '/resource/udf/subCreateUdfFolder/:id',
  344. name: 'resource-udf-subCreateUdfFolder',
  345. component: resolve => require(['../pages/resource/pages/udf/pages/subUdfFolder/index'], resolve),
  346. meta: {
  347. title: `${i18n.$t('Create Resource')}`
  348. }
  349. },
  350. {
  351. path: '/resource/func',
  352. name: 'resource-func',
  353. component: resolve => require(['../pages/resource/pages/udf/pages/function/index'], resolve),
  354. meta: {
  355. title: `${i18n.$t('UDF Function')}`
  356. }
  357. }
  358. ]
  359. }
  360. ]
  361. },
  362. {
  363. path: '/datasource',
  364. name: 'datasource',
  365. component: resolve => require(['../pages/datasource/index'], resolve),
  366. meta: {
  367. title: `${i18n.$t('Datasource')}`
  368. },
  369. redirect: {
  370. name: 'datasource-list'
  371. },
  372. children: [
  373. {
  374. path: '/datasource/list',
  375. name: 'datasource-list',
  376. component: resolve => require(['../pages/datasource/pages/list/index'], resolve),
  377. meta: {
  378. title: `${i18n.$t('Datasource')}`
  379. }
  380. }
  381. ]
  382. },
  383. {
  384. path: '/security',
  385. name: 'security',
  386. component: resolve => require(['../pages/security/index'], resolve),
  387. meta: {
  388. title: `${i18n.$t('Security')}`
  389. },
  390. redirect: {
  391. name: 'tenement-manage'
  392. },
  393. children: [
  394. {
  395. path: '/security/tenant',
  396. name: 'tenement-manage',
  397. component: resolve => require(['../pages/security/pages/tenement/index'], resolve),
  398. meta: {
  399. title: `${i18n.$t('Tenant Manage')}`
  400. }
  401. },
  402. {
  403. path: '/security/users',
  404. name: 'users-manage',
  405. component: resolve => require(['../pages/security/pages/users/index'], resolve),
  406. meta: {
  407. title: `${i18n.$t('User Manage')}`,
  408. refreshInSwitchedTab: config.refreshInSwitchedTab
  409. }
  410. },
  411. {
  412. path: '/security/warning-groups',
  413. name: 'warning-groups-manage',
  414. component: resolve => require(['../pages/security/pages/warningGroups/index'], resolve),
  415. meta: {
  416. title: `${i18n.$t('Warning group manage')}`
  417. }
  418. },
  419. {
  420. path: '/security/warning-instance',
  421. name: 'warning-instance-manage',
  422. component: resolve => require(['../pages/security/pages/warningInstance/index'], resolve),
  423. meta: {
  424. title: `${i18n.$t('Warning instance manage')}`
  425. }
  426. },
  427. {
  428. path: '/security/queue',
  429. name: 'queue-manage',
  430. component: resolve => require(['../pages/security/pages/queue/index'], resolve),
  431. meta: {
  432. title: `${i18n.$t('Queue manage')}`
  433. }
  434. },
  435. {
  436. path: '/security/worker-groups',
  437. name: 'worker-groups-manage',
  438. component: resolve => require(['../pages/security/pages/workerGroups/index'], resolve),
  439. meta: {
  440. title: `${i18n.$t('Worker group manage')}`
  441. }
  442. },
  443. {
  444. path: '/security/environments',
  445. name: 'environment-manage',
  446. component: resolve => require(['../pages/security/pages/environment/index'], resolve),
  447. meta: {
  448. title: `${i18n.$t('Environment manage')}`
  449. }
  450. },
  451. {
  452. path: '/security/token',
  453. name: 'token-manage',
  454. component: resolve => require(['../pages/security/pages/token/index'], resolve),
  455. meta: {
  456. title: `${i18n.$t('Token manage')}`
  457. }
  458. }
  459. ]
  460. },
  461. {
  462. path: '/user',
  463. name: 'user',
  464. component: resolve => require(['../pages/user/index'], resolve),
  465. meta: {
  466. title: `${i18n.$t('User Center')}`
  467. },
  468. redirect: {
  469. name: 'account'
  470. },
  471. children: [
  472. {
  473. path: '/user/account',
  474. name: 'account',
  475. component: resolve => require(['../pages/user/pages/account/index'], resolve),
  476. meta: {
  477. title: `${i18n.$t('User Information')}`
  478. }
  479. },
  480. {
  481. path: '/user/password',
  482. name: 'password',
  483. component: resolve => require(['../pages/user/pages/password/index'], resolve),
  484. meta: {
  485. title: `${i18n.$t('Edit password')}`
  486. }
  487. },
  488. {
  489. path: '/user/token',
  490. name: 'token',
  491. component: resolve => require(['../pages/user/pages/token/index'], resolve),
  492. meta: {
  493. title: `${i18n.$t('Token manage')}`
  494. }
  495. }
  496. ]
  497. },
  498. {
  499. path: '/monitor',
  500. name: 'monitor',
  501. component: resolve => require(['../pages/monitor/index'], resolve),
  502. meta: {
  503. title: 'monitor'
  504. },
  505. redirect: {
  506. name: 'servers-master'
  507. },
  508. children: [
  509. {
  510. path: '/monitor/servers/master',
  511. name: 'servers-master',
  512. component: resolve => require(['../pages/monitor/pages/servers/master'], resolve),
  513. meta: {
  514. title: `${i18n.$t('Service-Master')}`,
  515. refreshInSwitchedTab: config.refreshInSwitchedTab
  516. }
  517. },
  518. {
  519. path: '/monitor/servers/worker',
  520. name: 'servers-worker',
  521. component: resolve => require(['../pages/monitor/pages/servers/worker'], resolve),
  522. meta: {
  523. title: `${i18n.$t('Service-Worker')}`,
  524. refreshInSwitchedTab: config.refreshInSwitchedTab
  525. }
  526. },
  527. {
  528. path: '/monitor/servers/alert',
  529. name: 'servers-alert',
  530. component: resolve => require(['../pages/monitor/pages/servers/alert'], resolve),
  531. meta: {
  532. title: 'Alert',
  533. refreshInSwitchedTab: config.refreshInSwitchedTab
  534. }
  535. },
  536. {
  537. path: '/monitor/servers/rpcserver',
  538. name: 'servers-rpcserver',
  539. component: resolve => require(['../pages/monitor/pages/servers/rpcserver'], resolve),
  540. meta: {
  541. title: 'Rpcserver',
  542. refreshInSwitchedTab: config.refreshInSwitchedTab
  543. }
  544. },
  545. {
  546. path: '/monitor/servers/apiserver',
  547. name: 'servers-apiserver',
  548. component: resolve => require(['../pages/monitor/pages/servers/apiserver'], resolve),
  549. meta: {
  550. title: 'Apiserver',
  551. refreshInSwitchedTab: config.refreshInSwitchedTab
  552. }
  553. },
  554. {
  555. path: '/monitor/servers/db',
  556. name: 'servers-db',
  557. component: resolve => require(['../pages/monitor/pages/servers/db'], resolve),
  558. meta: {
  559. title: 'DB',
  560. refreshInSwitchedTab: config.refreshInSwitchedTab
  561. }
  562. },
  563. {
  564. path: '/monitor/servers/statistics',
  565. name: 'statistics',
  566. component: resolve => require(['../pages/monitor/pages/servers/statistics'], resolve),
  567. meta: {
  568. title: 'statistics',
  569. refreshInSwitchedTab: config.refreshInSwitchedTab
  570. }
  571. }
  572. ]
  573. }
  574. ]
  575. })
  576. const VueRouterPush = Router.prototype.push
  577. Router.prototype.push = function push (to) {
  578. return VueRouterPush.call(this, to).catch(err => err)
  579. }
  580. router.beforeEach((to, from, next) => {
  581. const $body = $('body')
  582. $body.find('.tooltip.fade.top.in').remove()
  583. if (to.meta.title) {
  584. document.title = `${to.meta.title} - DolphinScheduler`
  585. }
  586. next()
  587. })
  588. export default router