You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ke...@apache.org on 2021/11/19 01:38:35 UTC

[dolphinscheduler] branch dev updated: [Improvement-6889] split the routing module to increase subsequent maintainability. (#6892)

This is an automated email from the ASF dual-hosted git repository.

kerwin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 00813b0  [Improvement-6889] split the routing module to increase subsequent maintainability. (#6892)
00813b0 is described below

commit 00813b0a696bcd50d484670cf191efcb8921648f
Author: songjianet <17...@qq.com>
AuthorDate: Fri Nov 19 09:38:22 2021 +0800

    [Improvement-6889] split the routing module to increase subsequent maintainability. (#6892)
---
 .../src/js/conf/home/router/index.js               | 570 +--------------------
 .../src/js/conf/home/router/module/datasource.js   |  44 ++
 .../src/js/conf/home/router/module/home.js         |  33 ++
 .../src/js/conf/home/router/module/monitor.js      | 100 ++++
 .../src/js/conf/home/router/module/projects.js     | 221 ++++++++
 .../src/js/conf/home/router/module/resource.js     | 160 ++++++
 .../src/js/conf/home/router/module/security.js     | 102 ++++
 .../src/js/conf/home/router/module/user.js         |  60 +++
 8 files changed, 734 insertions(+), 556 deletions(-)

diff --git a/dolphinscheduler-ui/src/js/conf/home/router/index.js b/dolphinscheduler-ui/src/js/conf/home/router/index.js
index 8d997af..2ac01f9 100644
--- a/dolphinscheduler-ui/src/js/conf/home/router/index.js
+++ b/dolphinscheduler-ui/src/js/conf/home/router/index.js
@@ -16,11 +16,14 @@
  */
 
 import Vue from 'vue'
-import store from '@/conf/home/store'
-import localStore from '@/module/util/localStorage'
-import i18n from '@/module/i18n/index.js'
-import config from '~/external/config'
 import Router from 'vue-router'
+import home from './module/home'
+import datasource from './module/datasource'
+import monitor from './module/monitor'
+import projects from './module/projects'
+import resource from './module/resource'
+import security from './module/security'
+import user from './module/user'
 
 Vue.use(Router)
 
@@ -33,558 +36,13 @@ const router = new Router({
         name: 'home'
       }
     },
-    {
-      path: '/home',
-      name: 'home',
-      component: resolve => require(['../pages/home/index'], resolve),
-      meta: {
-        title: `${i18n.$t('Home')} - DolphinScheduler`,
-        refreshInSwitchedTab: config.refreshInSwitchedTab
-      }
-    },
-    {
-      path: '/projects',
-      name: 'projects',
-      component: resolve => require(['../pages/projects/index'], resolve),
-      meta: {
-        title: `${i18n.$t('Project')}`
-      },
-      redirect: {
-        name: 'projects-list'
-      },
-      beforeEnter: (to, from, next) => {
-        const blacklist = ['projects', 'projects-list']
-        const { projectCode } = to.params || {}
-        if (!blacklist.includes(to.name) && projectCode && projectCode !== localStore.getItem('projectCode')) {
-          store.dispatch('projects/getProjectByCode', projectCode).then(res => {
-            store.commit('dag/setProjectId', res.id)
-            store.commit('dag/setProjectCode', res.code)
-            store.commit('dag/setProjectName', res.name)
-            localStore.setItem('projectId', res.id)
-            localStore.setItem('projectCode', res.code)
-            localStore.setItem('projectName', res.name)
-            next()
-          }).catch(e => {
-            next({ name: 'projects-list' })
-          })
-        } else {
-          next()
-        }
-      },
-      children: [
-        {
-          path: '/projects/list',
-          name: 'projects-list',
-          component: resolve => require(['../pages/projects/pages/list/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Project')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/projects/:projectCode/index',
-          name: 'projects-index',
-          component: resolve => require(['../pages/projects/pages/index/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Project Home')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/projects/:projectCode/kinship',
-          name: 'projects-kinship',
-          component: resolve => require(['../pages/projects/pages/kinship/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Kinship')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/projects/:projectCode/definition',
-          name: 'definition',
-          component: resolve => require(['../pages/projects/pages/definition/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Process definition')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          },
-          redirect: {
-            name: 'projects-definition-list'
-          },
-          children: [
-            {
-              path: '/projects/:projectCode/definition/list',
-              name: 'projects-definition-list',
-              component: resolve => require(['../pages/projects/pages/definition/pages/list/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Process definition')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/projects/:projectCode/definition/list/:code',
-              name: 'projects-definition-details',
-              component: resolve => require(['../pages/projects/pages/definition/pages/details/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Process definition details')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/projects/:projectCode/definition/create',
-              name: 'definition-create',
-              component: resolve => require(['../pages/projects/pages/definition/pages/create/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Create process definition')}`
-              }
-            },
-            {
-              path: '/projects/:projectCode/definition/tree/:code',
-              name: 'definition-tree-view-index',
-              component: resolve => require(['../pages/projects/pages/definition/pages/tree/index'], resolve),
-              meta: {
-                title: `${i18n.$t('TreeView')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/projects/:projectCode/definition/list/timing/:code',
-              name: 'definition-timing-details',
-              component: resolve => require(['../pages/projects/pages/definition/timing/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Scheduled task list')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            }
-          ]
-        },
-        {
-          path: '/projects/:projectCode/instance',
-          name: 'instance',
-          component: resolve => require(['../pages/projects/pages/instance/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Process Instance')}`
-          },
-          redirect: {
-            name: 'projects-instance-list'
-          },
-          children: [
-            {
-              path: '/projects/:projectCode/instance/list',
-              name: 'projects-instance-list',
-              component: resolve => require(['../pages/projects/pages/instance/pages/list/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Process Instance')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/projects/:projectCode/instance/list/:id',
-              name: 'projects-instance-details',
-              component: resolve => require(['../pages/projects/pages/instance/pages/details/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Process instance details')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/projects/:projectCode/instance/gantt/:id',
-              name: 'instance-gantt-index',
-              component: resolve => require(['../pages/projects/pages/instance/pages/gantt/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Gantt')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            }
-          ]
-        },
-        {
-          path: '/projects/:projectCode/task-instance',
-          name: 'task-instance',
-          component: resolve => require(['../pages/projects/pages/taskInstance'], resolve),
-          meta: {
-            title: `${i18n.$t('Task Instance')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-
-        },
-        {
-          path: '/projects/:projectCode/task-definition',
-          name: 'task-definition',
-          component: resolve => require(['../pages/projects/pages/taskDefinition/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Task Definition')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/projects/:projectCode/task-record',
-          name: 'task-record',
-          component: resolve => require(['../pages/projects/pages/taskRecord'], resolve),
-          meta: {
-            title: `${i18n.$t('Task record')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/projects/:projectCode/history-task-record',
-          name: 'history-task-record',
-          component: resolve => require(['../pages/projects/pages/historyTaskRecord'], resolve),
-          meta: {
-            title: `${i18n.$t('History task record')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-
-        }
-      ]
-    },
-    {
-      path: '/resource',
-      name: 'resource',
-      component: resolve => require(['../pages/resource/index'], resolve),
-      redirect: {
-        name: 'file'
-      },
-      meta: {
-        title: `${i18n.$t('Resources')}`,
-        refreshInSwitchedTab: config.refreshInSwitchedTab
-      },
-      children: [
-        {
-          path: '/resource/file',
-          name: 'file',
-          component: resolve => require(['../pages/resource/pages/file/pages/list/index'], resolve),
-          meta: {
-            title: `${i18n.$t('File Manage')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/resource/file/create',
-          name: 'resource-file-create',
-          component: resolve => require(['../pages/resource/pages/file/pages/create/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Create Resource')}`
-          }
-        },
-        {
-          path: '/resource/file/createFolder',
-          name: 'resource-file-createFolder',
-          component: resolve => require(['../pages/resource/pages/file/pages/createFolder/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Create Resource')}`
-          }
-        },
-        {
-          path: '/resource/file/subFileFolder/:id',
-          name: 'resource-file-subFileFolder',
-          component: resolve => require(['../pages/resource/pages/file/pages/subFileFolder/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Create Resource')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/resource/file/subFile/:id',
-          name: 'resource-file-subFile',
-          component: resolve => require(['../pages/resource/pages/file/pages/subFile/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Create Resource')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/resource/file/list/:id',
-          name: 'resource-file-details',
-          component: resolve => require(['../pages/resource/pages/file/pages/details/index'], resolve),
-          meta: {
-            title: `${i18n.$t('File Details')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/resource/file/subdirectory/:id',
-          name: 'resource-file-subdirectory',
-          component: resolve => require(['../pages/resource/pages/file/pages/subdirectory/index'], resolve),
-          meta: {
-            title: `${i18n.$t('File Manage')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/resource/file/edit/:id',
-          name: 'resource-file-edit',
-          component: resolve => require(['../pages/resource/pages/file/pages/edit/index'], resolve),
-          meta: {
-            title: `${i18n.$t('File Details')}`
-          }
-        },
-        {
-          path: '/resource/udf',
-          name: 'udf',
-          component: resolve => require(['../pages/resource/pages/udf/index'], resolve),
-          meta: {
-            title: `${i18n.$t('UDF manage')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          },
-          children: [
-            {
-              path: '/resource/udf',
-              name: 'resource-udf',
-              component: resolve => require(['../pages/resource/pages/udf/pages/resource/index'], resolve),
-              meta: {
-                title: `${i18n.$t('UDF Resources')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/resource/udf/subUdfDirectory/:id',
-              name: 'resource-udf-subUdfDirectory',
-              component: resolve => require(['../pages/resource/pages/udf/pages/subUdfDirectory/index'], resolve),
-              meta: {
-                title: `${i18n.$t('UDF Resources')}`,
-                refreshInSwitchedTab: config.refreshInSwitchedTab
-              }
-            },
-            {
-              path: '/resource/udf/createUdfFolder',
-              name: 'resource-udf-createUdfFolder',
-              component: resolve => require(['../pages/resource/pages/udf/pages/createUdfFolder/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Create Resource')}`
-              }
-            },
-            {
-              path: '/resource/udf/subCreateUdfFolder/:id',
-              name: 'resource-udf-subCreateUdfFolder',
-              component: resolve => require(['../pages/resource/pages/udf/pages/subUdfFolder/index'], resolve),
-              meta: {
-                title: `${i18n.$t('Create Resource')}`
-              }
-            },
-            {
-              path: '/resource/func',
-              name: 'resource-func',
-              component: resolve => require(['../pages/resource/pages/udf/pages/function/index'], resolve),
-              meta: {
-                title: `${i18n.$t('UDF Function')}`
-              }
-            }
-          ]
-        }
-      ]
-    },
-    {
-      path: '/datasource',
-      name: 'datasource',
-      component: resolve => require(['../pages/datasource/index'], resolve),
-      meta: {
-        title: `${i18n.$t('Datasource')}`
-      },
-      redirect: {
-        name: 'datasource-list'
-      },
-      children: [
-        {
-          path: '/datasource/list',
-          name: 'datasource-list',
-          component: resolve => require(['../pages/datasource/pages/list/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Datasource')}`
-          }
-        }
-      ]
-    },
-    {
-      path: '/security',
-      name: 'security',
-      component: resolve => require(['../pages/security/index'], resolve),
-      meta: {
-        title: `${i18n.$t('Security')}`
-      },
-      redirect: {
-        name: 'tenement-manage'
-      },
-      children: [
-        {
-          path: '/security/tenant',
-          name: 'tenement-manage',
-          component: resolve => require(['../pages/security/pages/tenement/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Tenant Manage')}`
-          }
-        },
-        {
-          path: '/security/users',
-          name: 'users-manage',
-          component: resolve => require(['../pages/security/pages/users/index'], resolve),
-          meta: {
-            title: `${i18n.$t('User Manage')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/security/warning-groups',
-          name: 'warning-groups-manage',
-          component: resolve => require(['../pages/security/pages/warningGroups/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Warning group manage')}`
-          }
-        },
-        {
-          path: '/security/warning-instance',
-          name: 'warning-instance-manage',
-          component: resolve => require(['../pages/security/pages/warningInstance/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Warning instance manage')}`
-          }
-        },
-        {
-          path: '/security/queue',
-          name: 'queue-manage',
-          component: resolve => require(['../pages/security/pages/queue/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Queue manage')}`
-          }
-        },
-        {
-          path: '/security/worker-groups',
-          name: 'worker-groups-manage',
-          component: resolve => require(['../pages/security/pages/workerGroups/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Worker group manage')}`
-          }
-        },
-        {
-          path: '/security/environments',
-          name: 'environment-manage',
-          component: resolve => require(['../pages/security/pages/environment/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Environment manage')}`
-          }
-        },
-        {
-          path: '/security/token',
-          name: 'token-manage',
-          component: resolve => require(['../pages/security/pages/token/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Token manage')}`
-          }
-        }
-      ]
-    },
-    {
-      path: '/user',
-      name: 'user',
-      component: resolve => require(['../pages/user/index'], resolve),
-      meta: {
-        title: `${i18n.$t('User Center')}`
-      },
-      redirect: {
-        name: 'account'
-      },
-      children: [
-        {
-          path: '/user/account',
-          name: 'account',
-          component: resolve => require(['../pages/user/pages/account/index'], resolve),
-          meta: {
-            title: `${i18n.$t('User Information')}`
-          }
-        },
-        {
-          path: '/user/password',
-          name: 'password',
-          component: resolve => require(['../pages/user/pages/password/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Edit password')}`
-          }
-        },
-        {
-          path: '/user/token',
-          name: 'token',
-          component: resolve => require(['../pages/user/pages/token/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Token manage')}`
-          }
-        }
-      ]
-    },
-    {
-      path: '/monitor',
-      name: 'monitor',
-      component: resolve => require(['../pages/monitor/index'], resolve),
-      meta: {
-        title: 'monitor'
-      },
-      redirect: {
-        name: 'servers-master'
-      },
-      children: [
-        {
-          path: '/monitor/servers/master',
-          name: 'servers-master',
-          component: resolve => require(['../pages/monitor/pages/servers/master'], resolve),
-          meta: {
-            title: `${i18n.$t('Service-Master')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/worker',
-          name: 'servers-worker',
-          component: resolve => require(['../pages/monitor/pages/servers/worker'], resolve),
-          meta: {
-            title: `${i18n.$t('Service-Worker')}`,
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/alert',
-          name: 'servers-alert',
-          component: resolve => require(['../pages/monitor/pages/servers/alert'], resolve),
-          meta: {
-            title: 'Alert',
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/rpcserver',
-          name: 'servers-rpcserver',
-          component: resolve => require(['../pages/monitor/pages/servers/rpcserver'], resolve),
-          meta: {
-            title: 'Rpcserver',
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/apiserver',
-          name: 'servers-apiserver',
-          component: resolve => require(['../pages/monitor/pages/servers/apiserver'], resolve),
-          meta: {
-            title: 'Apiserver',
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/db',
-          name: 'servers-db',
-          component: resolve => require(['../pages/monitor/pages/servers/db'], resolve),
-          meta: {
-            title: 'DB',
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        },
-        {
-          path: '/monitor/servers/statistics',
-          name: 'statistics',
-          component: resolve => require(['../pages/monitor/pages/servers/statistics'], resolve),
-          meta: {
-            title: 'statistics',
-            refreshInSwitchedTab: config.refreshInSwitchedTab
-          }
-        }
-      ]
-    }
+    ...home,
+    ...projects,
+    ...resource,
+    ...datasource,
+    ...security,
+    ...user,
+    ...monitor
   ]
 })
 
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/datasource.js b/dolphinscheduler-ui/src/js/conf/home/router/module/datasource.js
new file mode 100644
index 0000000..20507ca
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/datasource.js
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+
+const datasource = [
+  {
+    path: '/datasource',
+    name: 'datasource',
+    component: resolve => require(['../../pages/datasource'], resolve),
+    meta: {
+      title: `${i18n.$t('Datasource')}`
+    },
+    redirect: {
+      name: 'datasource-list'
+    },
+    children: [
+      {
+        path: '/datasource/list',
+        name: 'datasource-list',
+        component: resolve => require(['../../pages/datasource/pages/list'], resolve),
+        meta: {
+          title: `${i18n.$t('Datasource')}`
+        }
+      }
+    ]
+  }
+]
+
+export default datasource
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/home.js b/dolphinscheduler-ui/src/js/conf/home/router/module/home.js
new file mode 100644
index 0000000..28516e1
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/home.js
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+import config from '~/external/config'
+
+const home = [
+  {
+    path: '/home',
+    name: 'home',
+    component: resolve => require(['../../pages/home'], resolve),
+    meta: {
+      title: `${i18n.$t('Home')} - DolphinScheduler`,
+      refreshInSwitchedTab: config.refreshInSwitchedTab
+    }
+  }
+]
+
+export default home
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/monitor.js b/dolphinscheduler-ui/src/js/conf/home/router/module/monitor.js
new file mode 100644
index 0000000..4398ed4
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/monitor.js
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+import config from '~/external/config'
+
+const monitor = [
+  {
+    path: '/monitor',
+    name: 'monitor',
+    component: resolve => require(['../../pages/monitor'], resolve),
+    meta: {
+      title: 'monitor'
+    },
+    redirect: {
+      name: 'servers-master'
+    },
+    children: [
+      {
+        path: '/monitor/servers/master',
+        name: 'servers-master',
+        component: resolve => require(['../../pages/monitor/pages/servers/master'], resolve),
+        meta: {
+          title: `${i18n.$t('Service-Master')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/worker',
+        name: 'servers-worker',
+        component: resolve => require(['../../pages/monitor/pages/servers/worker'], resolve),
+        meta: {
+          title: `${i18n.$t('Service-Worker')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/alert',
+        name: 'servers-alert',
+        component: resolve => require(['../../pages/monitor/pages/servers/alert'], resolve),
+        meta: {
+          title: 'Alert',
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/rpcserver',
+        name: 'servers-rpcserver',
+        component: resolve => require(['../../pages/monitor/pages/servers/rpcserver'], resolve),
+        meta: {
+          title: 'Rpcserver',
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/apiserver',
+        name: 'servers-apiserver',
+        component: resolve => require(['../../pages/monitor/pages/servers/apiserver'], resolve),
+        meta: {
+          title: 'Apiserver',
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/db',
+        name: 'servers-db',
+        component: resolve => require(['../../pages/monitor/pages/servers/db'], resolve),
+        meta: {
+          title: 'DB',
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/monitor/servers/statistics',
+        name: 'statistics',
+        component: resolve => require(['../../pages/monitor/pages/servers/statistics'], resolve),
+        meta: {
+          title: 'statistics',
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      }
+    ]
+  }
+]
+
+export default monitor
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/projects.js b/dolphinscheduler-ui/src/js/conf/home/router/module/projects.js
new file mode 100644
index 0000000..ffefbdc
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/projects.js
@@ -0,0 +1,221 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+import config from '~/external/config'
+import store from '@/conf/home/store'
+import localStore from '@/module/util/localStorage'
+
+const projects = [
+  {
+    path: '/projects',
+    name: 'projects',
+    component: resolve => require(['../../pages/projects'], resolve),
+    meta: {
+      title: `${i18n.$t('Project')}`
+    },
+    redirect: {
+      name: 'projects-list'
+    },
+    beforeEnter: (to, from, next) => {
+      const blacklist = ['projects', 'projects-list']
+      const { projectCode } = to.params || {}
+      if (!blacklist.includes(to.name) && projectCode && projectCode !== localStore.getItem('projectCode')) {
+        store.dispatch('projects/getProjectByCode', projectCode).then(res => {
+          store.commit('dag/setProjectId', res.id)
+          store.commit('dag/setProjectCode', res.code)
+          store.commit('dag/setProjectName', res.name)
+          localStore.setItem('projectId', res.id)
+          localStore.setItem('projectCode', res.code)
+          localStore.setItem('projectName', res.name)
+          next()
+        }).catch(e => {
+          next({ name: 'projects-list' })
+        })
+      } else {
+        next()
+      }
+    },
+    children: [
+      {
+        path: '/projects/list',
+        name: 'projects-list',
+        component: resolve => require(['../../pages/projects/pages/list'], resolve),
+        meta: {
+          title: `${i18n.$t('Project')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/projects/:projectCode/index',
+        name: 'projects-index',
+        component: resolve => require(['../../pages/projects/pages/index'], resolve),
+        meta: {
+          title: `${i18n.$t('Project Home')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/projects/:projectCode/kinship',
+        name: 'projects-kinship',
+        component: resolve => require(['../../pages/projects/pages/kinship'], resolve),
+        meta: {
+          title: `${i18n.$t('Kinship')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/projects/:projectCode/definition',
+        name: 'definition',
+        component: resolve => require(['../../pages/projects/pages/definition'], resolve),
+        meta: {
+          title: `${i18n.$t('Process definition')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        },
+        redirect: {
+          name: 'projects-definition-list'
+        },
+        children: [
+          {
+            path: '/projects/:projectCode/definition/list',
+            name: 'projects-definition-list',
+            component: resolve => require(['../../pages/projects/pages/definition/pages/list'], resolve),
+            meta: {
+              title: `${i18n.$t('Process definition')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/projects/:projectCode/definition/list/:code',
+            name: 'projects-definition-details',
+            component: resolve => require(['../../pages/projects/pages/definition/pages/details'], resolve),
+            meta: {
+              title: `${i18n.$t('Process definition details')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/projects/:projectCode/definition/create',
+            name: 'definition-create',
+            component: resolve => require(['../../pages/projects/pages/definition/pages/create'], resolve),
+            meta: {
+              title: `${i18n.$t('Create process definition')}`
+            }
+          },
+          {
+            path: '/projects/:projectCode/definition/tree/:code',
+            name: 'definition-tree-view-index',
+            component: resolve => require(['../../pages/projects/pages/definition/pages/tree'], resolve),
+            meta: {
+              title: `${i18n.$t('TreeView')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/projects/:projectCode/definition/list/timing/:code',
+            name: 'definition-timing-details',
+            component: resolve => require(['../../pages/projects/pages/definition/timing'], resolve),
+            meta: {
+              title: `${i18n.$t('Scheduled task list')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          }
+        ]
+      },
+      {
+        path: '/projects/:projectCode/instance',
+        name: 'instance',
+        component: resolve => require(['../../pages/projects/pages/instance'], resolve),
+        meta: {
+          title: `${i18n.$t('Process Instance')}`
+        },
+        redirect: {
+          name: 'projects-instance-list'
+        },
+        children: [
+          {
+            path: '/projects/:projectCode/instance/list',
+            name: 'projects-instance-list',
+            component: resolve => require(['../../pages/projects/pages/instance/pages/list'], resolve),
+            meta: {
+              title: `${i18n.$t('Process Instance')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/projects/:projectCode/instance/list/:id',
+            name: 'projects-instance-details',
+            component: resolve => require(['../../pages/projects/pages/instance/pages/details'], resolve),
+            meta: {
+              title: `${i18n.$t('Process instance details')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/projects/:projectCode/instance/gantt/:id',
+            name: 'instance-gantt-index',
+            component: resolve => require(['../../pages/projects/pages/instance/pages/gantt'], resolve),
+            meta: {
+              title: `${i18n.$t('Gantt')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          }
+        ]
+      },
+      {
+        path: '/projects/:projectCode/task-instance',
+        name: 'task-instance',
+        component: resolve => require(['../../pages/projects/pages/taskInstance'], resolve),
+        meta: {
+          title: `${i18n.$t('Task Instance')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+
+      },
+      {
+        path: '/projects/:projectCode/task-definition',
+        name: 'task-definition',
+        component: resolve => require(['../../pages/projects/pages/taskDefinition'], resolve),
+        meta: {
+          title: `${i18n.$t('Task Definition')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/projects/:projectCode/task-record',
+        name: 'task-record',
+        component: resolve => require(['../../pages/projects/pages/taskRecord'], resolve),
+        meta: {
+          title: `${i18n.$t('Task record')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/projects/:projectCode/history-task-record',
+        name: 'history-task-record',
+        component: resolve => require(['../../pages/projects/pages/historyTaskRecord'], resolve),
+        meta: {
+          title: `${i18n.$t('History task record')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+
+      }
+    ]
+  }
+]
+
+export default projects
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/resource.js b/dolphinscheduler-ui/src/js/conf/home/router/module/resource.js
new file mode 100644
index 0000000..6543995
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/resource.js
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+import config from '~/external/config'
+
+const resource = [
+  {
+    path: '/resource',
+    name: 'resource',
+    component: resolve => require(['../../pages/resource'], resolve),
+    redirect: {
+      name: 'file'
+    },
+    meta: {
+      title: `${i18n.$t('Resources')}`,
+      refreshInSwitchedTab: config.refreshInSwitchedTab
+    },
+    children: [
+      {
+        path: '/resource/file',
+        name: 'file',
+        component: resolve => require(['../../pages/resource/pages/file/pages/list'], resolve),
+        meta: {
+          title: `${i18n.$t('File Manage')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/resource/file/create',
+        name: 'resource-file-create',
+        component: resolve => require(['../../pages/resource/pages/file/pages/create'], resolve),
+        meta: {
+          title: `${i18n.$t('Create Resource')}`
+        }
+      },
+      {
+        path: '/resource/file/createFolder',
+        name: 'resource-file-createFolder',
+        component: resolve => require(['../../pages/resource/pages/file/pages/createFolder'], resolve),
+        meta: {
+          title: `${i18n.$t('Create Resource')}`
+        }
+      },
+      {
+        path: '/resource/file/subFileFolder/:id',
+        name: 'resource-file-subFileFolder',
+        component: resolve => require(['../../pages/resource/pages/file/pages/subFileFolder'], resolve),
+        meta: {
+          title: `${i18n.$t('Create Resource')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/resource/file/subFile/:id',
+        name: 'resource-file-subFile',
+        component: resolve => require(['../../pages/resource/pages/file/pages/subFile'], resolve),
+        meta: {
+          title: `${i18n.$t('Create Resource')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/resource/file/list/:id',
+        name: 'resource-file-details',
+        component: resolve => require(['../../pages/resource/pages/file/pages/details'], resolve),
+        meta: {
+          title: `${i18n.$t('File Details')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/resource/file/subdirectory/:id',
+        name: 'resource-file-subdirectory',
+        component: resolve => require(['../../pages/resource/pages/file/pages/subdirectory'], resolve),
+        meta: {
+          title: `${i18n.$t('File Manage')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/resource/file/edit/:id',
+        name: 'resource-file-edit',
+        component: resolve => require(['../../pages/resource/pages/file/pages/edit'], resolve),
+        meta: {
+          title: `${i18n.$t('File Details')}`
+        }
+      },
+      {
+        path: '/resource/udf',
+        name: 'udf',
+        component: resolve => require(['../../pages/resource/pages/udf'], resolve),
+        meta: {
+          title: `${i18n.$t('UDF manage')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        },
+        children: [
+          {
+            path: '/resource/udf',
+            name: 'resource-udf',
+            component: resolve => require(['../../pages/resource/pages/udf/pages/resource'], resolve),
+            meta: {
+              title: `${i18n.$t('UDF Resources')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/resource/udf/subUdfDirectory/:id',
+            name: 'resource-udf-subUdfDirectory',
+            component: resolve => require(['../../pages/resource/pages/udf/pages/subUdfDirectory'], resolve),
+            meta: {
+              title: `${i18n.$t('UDF Resources')}`,
+              refreshInSwitchedTab: config.refreshInSwitchedTab
+            }
+          },
+          {
+            path: '/resource/udf/createUdfFolder',
+            name: 'resource-udf-createUdfFolder',
+            component: resolve => require(['../../pages/resource/pages/udf/pages/createUdfFolder'], resolve),
+            meta: {
+              title: `${i18n.$t('Create Resource')}`
+            }
+          },
+          {
+            path: '/resource/udf/subCreateUdfFolder/:id',
+            name: 'resource-udf-subCreateUdfFolder',
+            component: resolve => require(['../../pages/resource/pages/udf/pages/subUdfFolder'], resolve),
+            meta: {
+              title: `${i18n.$t('Create Resource')}`
+            }
+          },
+          {
+            path: '/resource/func',
+            name: 'resource-func',
+            component: resolve => require(['../../pages/resource/pages/udf/pages/function'], resolve),
+            meta: {
+              title: `${i18n.$t('UDF Function')}`
+            }
+          }
+        ]
+      }
+    ]
+  }
+]
+
+export default resource
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/security.js b/dolphinscheduler-ui/src/js/conf/home/router/module/security.js
new file mode 100644
index 0000000..4087460
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/security.js
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+import config from '~/external/config'
+
+const security = [
+  {
+    path: '/security',
+    name: 'security',
+    component: resolve => require(['../../pages/security'], resolve),
+    meta: {
+      title: `${i18n.$t('Security')}`
+    },
+    redirect: {
+      name: 'tenement-manage'
+    },
+    children: [
+      {
+        path: '/security/tenant',
+        name: 'tenement-manage',
+        component: resolve => require(['../../pages/security/pages/tenement'], resolve),
+        meta: {
+          title: `${i18n.$t('Tenant Manage')}`
+        }
+      },
+      {
+        path: '/security/users',
+        name: 'users-manage',
+        component: resolve => require(['../../pages/security/pages/users'], resolve),
+        meta: {
+          title: `${i18n.$t('User Manage')}`,
+          refreshInSwitchedTab: config.refreshInSwitchedTab
+        }
+      },
+      {
+        path: '/security/warning-groups',
+        name: 'warning-groups-manage',
+        component: resolve => require(['../../pages/security/pages/warningGroups'], resolve),
+        meta: {
+          title: `${i18n.$t('Warning group manage')}`
+        }
+      },
+      {
+        path: '/security/warning-instance',
+        name: 'warning-instance-manage',
+        component: resolve => require(['../../pages/security/pages/warningInstance'], resolve),
+        meta: {
+          title: `${i18n.$t('Warning instance manage')}`
+        }
+      },
+      {
+        path: '/security/queue',
+        name: 'queue-manage',
+        component: resolve => require(['../../pages/security/pages/queue'], resolve),
+        meta: {
+          title: `${i18n.$t('Queue manage')}`
+        }
+      },
+      {
+        path: '/security/worker-groups',
+        name: 'worker-groups-manage',
+        component: resolve => require(['../../pages/security/pages/workerGroups'], resolve),
+        meta: {
+          title: `${i18n.$t('Worker group manage')}`
+        }
+      },
+      {
+        path: '/security/environments',
+        name: 'environment-manage',
+        component: resolve => require(['../../pages/security/pages/environment'], resolve),
+        meta: {
+          title: `${i18n.$t('Environment manage')}`
+        }
+      },
+      {
+        path: '/security/token',
+        name: 'token-manage',
+        component: resolve => require(['../../pages/security/pages/token'], resolve),
+        meta: {
+          title: `${i18n.$t('Token manage')}`
+        }
+      }
+    ]
+  }
+]
+
+export default security
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/module/user.js b/dolphinscheduler-ui/src/js/conf/home/router/module/user.js
new file mode 100644
index 0000000..9dd29a4
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/conf/home/router/module/user.js
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import i18n from '@/module/i18n/index.js'
+
+const user = [
+  {
+    path: '/user',
+    name: 'user',
+    component: resolve => require(['../../pages/user'], resolve),
+    meta: {
+      title: `${i18n.$t('User Center')}`
+    },
+    redirect: {
+      name: 'account'
+    },
+    children: [
+      {
+        path: '/user/account',
+        name: 'account',
+        component: resolve => require(['../../pages/user/pages/account'], resolve),
+        meta: {
+          title: `${i18n.$t('User Information')}`
+        }
+      },
+      {
+        path: '/user/password',
+        name: 'password',
+        component: resolve => require(['../../pages/user/pages/password'], resolve),
+        meta: {
+          title: `${i18n.$t('Edit password')}`
+        }
+      },
+      {
+        path: '/user/token',
+        name: 'token',
+        component: resolve => require(['../../pages/user/pages/token'], resolve),
+        meta: {
+          title: `${i18n.$t('Token manage')}`
+        }
+      }
+    ]
+  }
+]
+
+export default user