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

wenhemin pushed a commit to branch 1.3.7-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/1.3.7-prepare by this push:
     new d487cd8  [1.3.7-prepare][Improvement-5567][UI] Add project id in web 
ui url for sharing and project name in project page #5568 (#5913)
d487cd8 is described below

commit d487cd8b0248954f02d75c5ece8d4a2f41b3c950
Author: Shiwen Cheng <[email protected]>
AuthorDate: Mon Aug 2 11:33:45 2021 +0800

    [1.3.7-prepare][Improvement-5567][UI] Add project id in web ui url for 
sharing and project name in project page #5568 (#5913)
---
 .../src/js/conf/home/pages/dag/_source/dag.vue     |  4 +-
 .../home/pages/dag/_source/formModel/formModel.vue |  4 +-
 .../js/conf/home/pages/dag/definitionDetails.vue   |  3 +-
 .../src/js/conf/home/pages/dag/index.vue           |  3 +-
 .../src/js/conf/home/pages/dag/instanceDetails.vue |  3 +-
 .../pages/_source/taskRecordList/index.vue         |  6 ++-
 .../pages/definition/pages/list/_source/list.vue   | 10 +++--
 .../projects/pages/definition/pages/list/index.vue |  8 +++-
 .../projects/pages/definition/pages/tree/index.vue |  9 ++++-
 .../pages/definition/timing/_source/list.vue       |  7 +++-
 .../pages/index/_source/defineUserCount.vue        |  6 ++-
 .../pages/index/_source/processStateCount.vue      |  7 +++-
 .../pages/index/_source/taskCtatusCount.vue        |  7 +++-
 .../conf/home/pages/projects/pages/index/index.vue | 10 +++--
 .../projects/pages/instance/pages/gantt/index.vue  |  2 +
 .../pages/instance/pages/list/_source/list.vue     |  8 ++--
 .../projects/pages/instance/pages/list/index.vue   |  5 +++
 .../pages/projects/pages/list/_source/list.vue     |  9 +++--
 .../projects/pages/taskInstance/_source/list.vue   |  4 +-
 .../pages/projects/pages/taskInstance/index.vue    | 10 +++--
 .../src/js/conf/home/router/index.js               | 46 ++++++++++++----------
 .../src/js/conf/home/store/dag/mutations.js        |  3 ++
 .../src/js/conf/home/store/dag/state.js            |  7 +++-
 .../src/js/conf/home/store/projects/actions.js     | 12 ++++++
 .../components/secondaryMenu/secondaryMenu.vue     |  9 ++++-
 .../src/js/module/mixin/switchProject.js           | 33 ++++++++++++++++
 .../src/js/module/project/router.js                | 38 ++++++++++++++++++
 27 files changed, 214 insertions(+), 59 deletions(-)

diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
index dbba0b0..d1cc037 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
@@ -366,7 +366,7 @@
                   // source 
@/conf/home/pages/dag/_source/editAffirmModel/index.js
                   if (sourceType !== 'affirm') {
                     // Jump process definition
-                    this.$router.push({ name: 'projects-definition-list' })
+                    this.$router.push({ name: 'projects-definition-list', 
params: { projectId: this.projectId } })
                   }
                   resolve()
                 }).catch(e => {
@@ -652,7 +652,7 @@
       }
     },
     computed: {
-      ...mapState('dag', ['tasks', 'locations', 'connects', 'isEditDag', 
'name'])
+      ...mapState('dag', ['projectId', 'tasks', 'locations', 'connects', 
'isEditDag', 'name'])
     },
     components: {}
   }
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
index 24a910a..c737759 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue
@@ -268,7 +268,7 @@
 </template>
 <script>
   import _ from 'lodash'
-  import { mapActions } from 'vuex'
+  import { mapActions, mapState } from 'vuex'
   import mLog from './log'
   import mMr from './tasks/mr'
   import mSql from './tasks/sql'
@@ -394,6 +394,7 @@
       _seeHistory () {
         this.self.$router.push({
           name: 'task-instance',
+          params: { projectId: this.projectId },
           query: {
             processInstanceId: this.self.$route.params.id,
             taskName: this.backfillItem.name
@@ -686,6 +687,7 @@
     destroyed () {
     },
     computed: {
+      ...mapState('dag', ['projectId']),
       /**
        * Child workflow entry show/hide
        */
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue
index 42c6b12..dd5e0d5 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue
@@ -25,6 +25,7 @@
   import mSpin from '@/module/components/spin/spin'
   import Affirm from './_source/jumpAffirm'
   import disabledState from '@/module/mixin/disabledState'
+  import switchProject from '@/module/mixin/switchProject'
   import { mapActions, mapMutations } from 'vuex'
 
   export default {
@@ -37,7 +38,7 @@
         releaseState: ''
       }
     },
-    mixins: [disabledState],
+    mixins: [disabledState, switchProject],
     props: {},
     methods: {
       ...mapMutations('dag', ['resetParams', 'setIsDetails']),
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue
index 078c5e6..e2f950b 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/index.vue
@@ -26,6 +26,7 @@
   import mSpin from '@/module/components/spin/spin'
   import Affirm from './_source/jumpAffirm'
   import disabledState from '@/module/mixin/disabledState'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'create-index',
@@ -36,7 +37,7 @@
       }
     },
     // mixins
-    mixins: [disabledState],
+    mixins: [disabledState, switchProject],
     props: {},
     methods: {
       ...mapMutations('dag', ['resetParams']),
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue
index f82cea4..0460796 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/instanceDetails.vue
@@ -30,6 +30,7 @@
   import mStartingParam from './_source/startingParam'
   import Affirm from './_source/jumpAffirm'
   import disabledState from '@/module/mixin/disabledState'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'instance-details',
@@ -39,7 +40,7 @@
         isLoading: true
       }
     },
-    mixins: [disabledState],
+    mixins: [disabledState, switchProject],
     props: {},
     methods: {
       ...mapMutations('dag', ['setIsDetails', 'resetParams']),
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/index.vue
index 08a964f..2c22eeb 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/taskRecordList/index.vue
@@ -42,6 +42,7 @@
   import mSpin from '@/module/components/spin/spin'
   import mNoData from '@/module/components/noData/noData'
   import listUrlParamHandle from '@/module/mixin/listUrlParamHandle'
+  import switchProject from '@/module/mixin/switchProject'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
 
@@ -66,7 +67,7 @@
         }
       }
     },
-    mixins: [listUrlParamHandle],
+    mixins: [listUrlParamHandle, switchProject],
     props: {
       config: String
     },
@@ -94,6 +95,9 @@
       },
       _onUpdate () {
         this._debounceGET()
+      },
+      _updateProject () {
+        this._debounceGET()
       }
     },
     watch: {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
index 7bc400a..2792e18 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
@@ -59,7 +59,7 @@
           </td>
           <td style="min-width: 200px;max-width: 300px;padding-right: 10px;">
             <span class="ellipsis">
-              <router-link :to="{ path: '/projects/definition/list/' + 
item.id}" tag="a" class="links" :title="item.name">
+              <router-link :to="{ path: 
`/projects/${projectId}/definition/list/${item.id}` }" tag="a" class="links" 
:title="item.name">
                 {{item.name}}
               </router-link>
             </span>
@@ -148,6 +148,7 @@
   import mTiming from './timing'
   import { mapActions } from 'vuex'
   import { publishStatus } from '@/conf/home/pages/dag/_source/config'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'definition-list',
@@ -163,6 +164,7 @@
       pageNo: Number,
       pageSize: Number
     },
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['editProcessState', 'getStartCheck', 
'getReceiver', 'deleteDefinition', 
'batchDeleteDefinition','exportDefinition','copyProcess']),
       ...mapActions('security', ['getWorkerGroupsAll']),
@@ -170,7 +172,7 @@
         return _.filter(publishStatus, v => v.code === code)[0].desc
       },
       _treeView (item) {
-        this.$router.push({ path: `/projects/definition/tree/${item.id}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/definition/tree/${item.id}` })
       },
       /**
        * Start
@@ -257,7 +259,7 @@
        * Timing manage
        */
       _timingManage (item) {
-        this.$router.push({ path: 
`/projects/definition/list/timing/${item.id}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/definition/list/timing/${item.id}` })
       },
       /**
        * Close the delete layer
@@ -296,7 +298,7 @@
        * edit
        */
       _edit (item) {
-        this.$router.push({ path: `/projects/definition/list/${item.id}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/definition/list/${item.id}` })
       },
       /**
        * Offline
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
index eb5d335..491735b 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/index.vue
@@ -20,7 +20,7 @@
       <template slot="conditions">
         <m-conditions @on-conditions="_onConditions">
           <template slot="button-group">
-            <x-button type="ghost" size="small"  @click="() => 
this.$router.push({name: 'definition-create'})">{{$t('Create 
process')}}</x-button>
+            <x-button type="ghost" size="small"  @click="() => 
this.$router.push({name: 'definition-create', params: { projectId 
}})">{{$t('Create process')}}</x-button>
             <x-button type="ghost" size="small"  
@click="_uploading">{{$t('Import process')}}</x-button>
           </template>
         </m-conditions>
@@ -48,6 +48,7 @@
   import localStore from '@/module/util/localStorage'
   import mNoData from '@/module/components/noData/noData'
   import listUrlParamHandle from '@/module/mixin/listUrlParamHandle'
+  import switchProject from '@/module/mixin/switchProject'
   import mConditions from '@/module/components/conditions/conditions'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
@@ -69,7 +70,7 @@
         isLeft: true
       }
     },
-    mixins: [listUrlParamHandle],
+    mixins: [listUrlParamHandle, switchProject],
     props: {
     },
     methods: {
@@ -126,6 +127,9 @@
         this.searchParams.pageNo = 1
         this.searchParams.searchVal = ''
         this._debounceGET()
+      },
+      _updateProject () {
+        this._debounceGET()
       }
     },
     watch: {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/index.vue
index 4bc102d..d723716 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/index.vue
@@ -79,6 +79,7 @@
   import { tasksType, tasksState } from '@/conf/home/pages/dag/_source/config'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'tree-view-index-index',
@@ -99,6 +100,7 @@
       }
     },
     props: {},
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['getViewTree']),
       /**
@@ -162,7 +164,7 @@
         if (id !== idsArr[0]) {
           query = { subProcessIds: ids.join(',') }
         }
-        this.$router.push({ path: `/projects/definition/tree/${id}`, query: 
query })
+        this.$router.push({ path: 
`/projects/${this.projectId}/definition/tree/${id}`, query: query })
       },
       /**
        * Subprocess processing
@@ -178,11 +180,14 @@
         } else {
           subProcessIds.push(this.$route.params.id)
         }
-        this.$router.push({ path: `/projects/definition/tree/${subProcessId}`, 
query: { subProcessIds: subProcessIds.join(',') } })
+        this.$router.push({ path: 
`/projects/${this.projectId}/definition/tree/${subProcessId}`, query: { 
subProcessIds: subProcessIds.join(',') } })
       },
       _onChangeSelect (o) {
         this.limit = o.value
         this._getViewTree()
+      },
+      _updateProject () {
+        this._getViewTree()
       }
     },
     watch: {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/timing/_source/list.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/timing/_source/list.vue
index 7b0b2c3..3cbded1 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/timing/_source/list.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/timing/_source/list.vue
@@ -156,6 +156,7 @@
   import mSpin from '@/module/components/spin/spin'
   import mTiming from '../../pages/list/_source/timing'
   import mNoData from '@/module/components/noData/noData'
+  import switchProject from '@/module/mixin/switchProject'
   import { publishStatus } from '@/conf/home/pages/dag/_source/config'
 
   export default {
@@ -171,6 +172,7 @@
     },
     props: {
     },
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['getScheduleList', 'scheduleOffline', 
'scheduleOnline', 'getReceiver','deleteTiming']),
       /**
@@ -182,7 +184,7 @@
         }).then(res => {
           this.$refs[`poptip-delete-${i}`][0].doClose()
           this.$message.success(res.msg)
-          this.$router.push({ name: 'projects-definition-list' })
+          this.$router.push({ name: 'projects-definition-list', params: { 
projectId: this.projectId } })
         }).catch(e => {
           this.$refs[`poptip-delete-${i}`][0].doClose()
           this.$message.error(e.msg || '')
@@ -211,6 +213,9 @@
         this.pageSize = val
         this._getScheduleList()
       },
+      _updateProject () {
+        this._getScheduleList()
+      },
       /**
        * Inquire list
        */
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/defineUserCount.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/defineUserCount.vue
index d509d50..df8924a 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/defineUserCount.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/defineUserCount.vue
@@ -28,7 +28,7 @@
 </template>
 <script>
   import _ from 'lodash'
-  import { mapActions } from 'vuex'
+  import { mapActions, mapState } from 'vuex'
   import { bar } from './chartConfig'
   import Chart from '@/module/ana-charts'
   import mNoData from '@/module/components/noData/noData'
@@ -61,6 +61,7 @@
           myChart.echart.on('click', e => {
             this.$router.push({
               name: 'projects-definition-list',
+              params: { projectId: this.projectId },
               query: {
                 userId: e.name.split(',')[1]
               }
@@ -83,6 +84,9 @@
     },
     mounted () {
     },
+    computed: {
+      ...mapState('dag', ['projectId'])
+    },
     components: { mNoData }
   }
 </script>
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/processStateCount.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/processStateCount.vue
index 974d57f..b873613 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/processStateCount.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/processStateCount.vue
@@ -49,7 +49,7 @@
 </template>
 <script>
   import _ from 'lodash'
-  import { mapActions } from 'vuex'
+  import { mapActions, mapState } from 'vuex'
   import { pie } from './chartConfig'
   import Chart from '@/module/ana-charts'
   import echarts from 'echarts'
@@ -74,6 +74,7 @@
       _goProcess (name) {
         this.$router.push({
           name: 'projects-instance-list',
+          params: { projectId: this.projectId },
           query: {
             stateType: _.find(stateType, ['label', name])['code'],
             startDate: this.searchParams.startDate,
@@ -136,7 +137,9 @@
     },
     destroyed () {
     },
-    computed: {},
+    computed: {
+      ...mapState('dag', ['projectId'])
+    },
     components: { mNoData }
   }
 </script>
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/taskCtatusCount.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/taskCtatusCount.vue
index 60e9413..9d4f528 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/taskCtatusCount.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/taskCtatusCount.vue
@@ -51,7 +51,7 @@
 </template>
 <script>
   import _ from 'lodash'
-  import { mapActions } from 'vuex'
+  import { mapActions, mapState } from 'vuex'
   import { pie } from './chartConfig'
   import Chart from '@/module/ana-charts'
   import echarts from 'echarts'
@@ -77,6 +77,7 @@
       _goTask (name) {
         this.$router.push({
           name: 'task-instance',
+          params: { projectId: this.projectId },
           query: {
             stateType: _.find(stateType, ['label', name])['code'],
             startDate: this.searchParams.startDate,
@@ -141,7 +142,9 @@
     },
     destroyed () {
     },
-    computed: {},
+    computed: {
+      ...mapState('dag', ['projectId'])
+    },
     components: { mNoData }
   }
 </script>
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/index.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/index.vue
index 2b5cbbc..b3dc68b 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/index.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/index.vue
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 <template>
-  <m-list-construction :title="searchParams.projectId ? $t('Project Home') : 
$t('Home')">
+  <m-list-construction :title="searchParams.projectId ? `${$t('Project Home')} 
- ${projectName}` : $t('Home')">
     <template slot="content">
       <div class="perject-home-content">
         <div class="time-model">
@@ -71,7 +71,7 @@
   import mTaskCtatusCount from './_source/taskCtatusCount'
   import mProcessStateCount from './_source/processStateCount'
   import mQueueCount from './_source/queueCount'
-  import localStore from '@/module/util/localStorage'
+  import switchProject from '@/module/mixin/switchProject'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
 
@@ -89,14 +89,18 @@
     props: {
       id: Number
     },
+    mixins: [switchProject],
     methods: {
       _datepicker (val) {
         this.searchParams.startDate = val[0]
         this.searchParams.endDate = val[1]
+      },
+      _updateProject () {
+        this.searchParams.projectId = this.id === 0 ? 0 : this.projectId
       }
     },
     created () {
-      this.searchParams.projectId = this.id === 0 ? 0 : 
localStore.getItem('projectId')
+      this.searchParams.projectId = this.id === 0 ? 0 : this.projectId
       this.searchParams.startDate = dayjs().format('YYYY-MM-DD 00:00:00')
       this.searchParams.endDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
     },
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
index e2e7d9b..a18a3ab 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/index.vue
@@ -50,6 +50,7 @@
   import mConditions from '@/module/components/conditions/conditions'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'instance-gantt-index',
@@ -68,6 +69,7 @@
       }
     },
     props: {},
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['getViewGantt']),
       /**
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
index 3dab95e..87ee5cb 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/_source/list.vue
@@ -68,7 +68,7 @@
             <span>{{parseInt(pageNo === 1 ? ($index + 1) : (($index + 1) + 
(pageSize * (pageNo - 1))))}}</span>
           </td>
           <td style="min-width: 200px;max-width: 300px;padding-right: 10px;">
-            <span class="ellipsis" style="padding-left: 4px;"><router-link 
:to="{ path: '/projects/instance/list/' + item.id , query:{id: 
item.processDefinitionId}}" tag="a" class="links" 
:title="item.name">{{item.name}}</router-link></span>
+            <span class="ellipsis" style="padding-left: 4px;"><router-link 
:to="{ path: `/projects/${projectId}/instance/list/${item.id}` , query:{id: 
item.processDefinitionId}}" tag="a" class="links" 
:title="item.name">{{item.name}}</router-link></span>
           </td>
           <td>
             <span v-html="_rtState(item.state)" style="cursor: 
pointer;"></span>
@@ -302,6 +302,7 @@
   import _ from 'lodash'
   import { mapActions } from 'vuex'
   import { tasksState, runningType } from 
'@/conf/home/pages/dag/_source/config'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'list',
@@ -320,6 +321,7 @@
       pageNo: Number,
       pageSize: Number
     },
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['editExecutorsState', 'deleteInstance', 
'batchDeleteInstance']),
       /**
@@ -372,7 +374,7 @@
        * edit
        */
       _reEdit (item) {
-        this.$router.push({ path: `/projects/instance/list/${item.id}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/instance/list/${item.id}` })
       },
       /**
        * Rerun
@@ -513,7 +515,7 @@
         }
       },
       _gantt (item) {
-        this.$router.push({ path: `/projects/instance/gantt/${item.id}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/instance/gantt/${item.id}` })
       },
 
       _topCheckBoxClick (is) {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
index be80c3b..0c9b028 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/list/index.vue
@@ -43,6 +43,7 @@
   import mSpin from '@/module/components/spin/spin'
   import localStore from '@/module/util/localStorage'
   import { setUrlParams } from '@/module/util/routerUtil'
+  import switchProject from '@/module/mixin/switchProject'
   import mNoData from '@/module/components/noData/noData'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
@@ -81,6 +82,7 @@
       }
     },
     props: {},
+    mixins: [switchProject],
     methods: {
       ...mapActions('dag', ['getProcessInstance']),
       /**
@@ -129,6 +131,9 @@
       _onUpdate () {
         this._debounceGET()
       },
+      _updateProject () {
+        this._debounceGET()
+      },
       /**
        * Routing changes
        */
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue
index 8acee8e..5947eb7 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue
@@ -132,12 +132,13 @@
     },
     methods: {
       ...mapActions('projects', ['deleteProjects']),
-      ...mapMutations('dag', ['setProjectName']),
+      ...mapMutations('dag', ['setProjectId', 'setProjectName']),
       _switchProjects (item) {
+        this.setProjectId(item.id)
         this.setProjectName(item.name)
-        localStore.setItem('projectName', `${item.name}`)
-        localStore.setItem('projectId', `${item.id}`)
-        this.$router.push({ path: `/projects/index` })
+        localStore.setItem('projectId', item.id)
+        localStore.setItem('projectName', item.name)
+        this.$router.push({ path: `/projects/${item.id}/index` })
       },
       _closeDelete (i) {
         this.$refs[`poptip-${i}`][0].doClose()
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue
index 60dd068..86416df 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/_source/list.vue
@@ -111,6 +111,7 @@
   import Permissions from '@/module/permissions'
   import mLog from '@/conf/home/pages/dag/_source/formModel/log'
   import { tasksState } from '@/conf/home/pages/dag/_source/config'
+  import switchProject from '@/module/mixin/switchProject'
 
   export default {
     name: 'list',
@@ -126,6 +127,7 @@
       pageNo: Number,
       pageSize: Number
     },
+    mixins: [switchProject],
     methods: {
       _rtState (code) {
         let o = tasksState[code]
@@ -158,7 +160,7 @@
         })
       },
       _go (item) {
-        this.$router.push({ path: 
`/projects/instance/list/${item.processInstanceId}` })
+        this.$router.push({ path: 
`/projects/${this.projectId}/instance/list/${item.processInstanceId}` })
       },
     },
     watch: {
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
index 2c07918..f3a88c8 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
@@ -43,6 +43,7 @@
   import mSpin from '@/module/components/spin/spin'
   import mNoData from '@/module/components/noData/noData'
   import listUrlParamHandle from '@/module/mixin/listUrlParamHandle'
+  import switchProject from '@/module/mixin/switchProject'
   import mSecondaryMenu from '@/module/components/secondaryMenu/secondaryMenu'
   import mListConstruction from 
'@/module/components/listConstruction/listConstruction'
   import mInstanceConditions from 
'@/conf/home/pages/projects/pages/_source/instanceConditions'
@@ -77,7 +78,7 @@
         isLeft: true
       }
     },
-    mixins: [listUrlParamHandle],
+    mixins: [listUrlParamHandle, switchProject],
     props: {},
     methods: {
       ...mapActions('dag', ['getTaskInstanceList']),
@@ -104,7 +105,7 @@
       _getList (flag) {
         this.isLoading = !flag
         if(this.searchParams.pageNo == undefined) {
-          this.$router.push({ path: `/projects/index` })
+          this.$router.push({ path: `/projects/${this.projectId}/index` })
           return false
         }
         this.getTaskInstanceList(this.searchParams).then(res => {
@@ -130,7 +131,10 @@
       }, 100, {
         'leading': false,
         'trailing': true
-      })
+      }),
+      _updateProject () {
+        this._debounceGET()
+      }
     },
     watch: {
       // router
diff --git a/dolphinscheduler-ui/src/js/conf/home/router/index.js 
b/dolphinscheduler-ui/src/js/conf/home/router/index.js
index b4236f3..e7196fd 100644
--- a/dolphinscheduler-ui/src/js/conf/home/router/index.js
+++ b/dolphinscheduler-ui/src/js/conf/home/router/index.js
@@ -17,6 +17,7 @@
 
 import Vue from 'vue'
 import i18n from '@/module/i18n/index.js'
+import { beforeProjectRoute } from '@/module/project/router'
 import Router from 'vue-router'
 
 Vue.use(Router)
@@ -48,16 +49,11 @@ const router = new Router({
       redirect: {
         name: 'projects-list'
       },
+      beforeEnter: (to, from, next) => {
+        beforeProjectRoute(to, from, next)
+      },
       children: [
         {
-          path: '/projects/index',
-          name: 'projects-index',
-          component: resolve => 
require(['../pages/projects/pages/index/index'], resolve),
-          meta: {
-            title: `${i18n.$t('Project Home')}`
-          }
-        },
-        {
           path: '/projects/list',
           name: 'projects-list',
           component: resolve => 
require(['../pages/projects/pages/list/index'], resolve),
@@ -66,7 +62,15 @@ const router = new Router({
           }
         },
         {
-          path: '/projects/definition',
+          path: '/projects/:projectId/index',
+          name: 'projects-index',
+          component: resolve => 
require(['../pages/projects/pages/index/index'], resolve),
+          meta: {
+            title: `${i18n.$t('Project Home')}`
+          }
+        },
+        {
+          path: '/projects/:projectId/definition',
           name: 'definition',
           component: resolve => 
require(['../pages/projects/pages/definition/index'], resolve),
           meta: {
@@ -77,7 +81,7 @@ const router = new Router({
           },
           children: [
             {
-              path: '/projects/definition/list',
+              path: '/projects/:projectId/definition/list',
               name: 'projects-definition-list',
               component: resolve => 
require(['../pages/projects/pages/definition/pages/list/index'], resolve),
               meta: {
@@ -85,7 +89,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/definition/list/:id',
+              path: '/projects/:projectId/definition/list/:id',
               name: 'projects-definition-details',
               component: resolve => 
require(['../pages/projects/pages/definition/pages/details/index'], resolve),
               meta: {
@@ -93,7 +97,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/definition/create',
+              path: '/projects/:projectId/definition/create',
               name: 'definition-create',
               component: resolve => 
require(['../pages/projects/pages/definition/pages/create/index'], resolve),
               meta: {
@@ -101,7 +105,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/definition/tree/:id',
+              path: '/projects/:projectId/definition/tree/:id',
               name: 'definition-tree-view-index',
               component: resolve => 
require(['../pages/projects/pages/definition/pages/tree/index'], resolve),
               meta: {
@@ -109,7 +113,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/definition/list/timing/:id',
+              path: '/projects/:projectId/definition/list/timing/:id',
               name: 'definition-timing-details',
               component: resolve => 
require(['../pages/projects/pages/definition/timing/index'], resolve),
               meta: {
@@ -119,7 +123,7 @@ const router = new Router({
           ]
         },
         {
-          path: '/projects/instance',
+          path: '/projects/:projectId/instance',
           name: 'instance',
           component: resolve => 
require(['../pages/projects/pages/instance/index'], resolve),
           meta: {
@@ -130,7 +134,7 @@ const router = new Router({
           },
           children: [
             {
-              path: '/projects/instance/list',
+              path: '/projects/:projectId/instance/list',
               name: 'projects-instance-list',
               component: resolve => 
require(['../pages/projects/pages/instance/pages/list/index'], resolve),
               meta: {
@@ -138,7 +142,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/instance/list/:id',
+              path: '/projects/:projectId/instance/list/:id',
               name: 'projects-instance-details',
               component: resolve => 
require(['../pages/projects/pages/instance/pages/details/index'], resolve),
               meta: {
@@ -146,7 +150,7 @@ const router = new Router({
               }
             },
             {
-              path: '/projects/instance/gantt/:id',
+              path: '/projects/:projectId/instance/gantt/:id',
               name: 'instance-gantt-index',
               component: resolve => 
require(['../pages/projects/pages/instance/pages/gantt/index'], resolve),
               meta: {
@@ -156,7 +160,7 @@ const router = new Router({
           ]
         },
         {
-          path: '/projects/task-instance',
+          path: '/projects/:projectId/task-instance',
           name: 'task-instance',
           component: resolve => 
require(['../pages/projects/pages/taskInstance'], resolve),
           meta: {
@@ -165,7 +169,7 @@ const router = new Router({
 
         },
         {
-          path: '/projects/task-record',
+          path: '/projects/:projectId/task-record',
           name: 'task-record',
           component: resolve => 
require(['../pages/projects/pages/taskRecord'], resolve),
           meta: {
@@ -173,7 +177,7 @@ const router = new Router({
           }
         },
         {
-          path: '/projects/history-task-record',
+          path: '/projects/:projectId/history-task-record',
           name: 'history-task-record',
           component: resolve => 
require(['../pages/projects/pages/historyTaskRecord'], resolve),
           meta: {
diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js 
b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
index 02d4668..2fda618 100755
--- a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
+++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
@@ -18,6 +18,9 @@
 import _ from 'lodash'
 
 export default {
+  setProjectId (state, payload) {
+    state.projectId = payload
+  },
   setProjectName (state, payload) {
     state.projectName = payload
   },
diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js 
b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js
index b2aad5e..0459953 100644
--- a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js
+++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js
@@ -17,7 +17,8 @@
 
 import localStore from '@/module/util/localStorage'
 
-// Get the name of the item currently clicked
+// Get the project currently clicked
+const projectId = localStore.getItem('projectId')
 const projectName = localStore.getItem('projectName')
 
 export default {
@@ -43,7 +44,9 @@ export default {
   runFlag: '',
   // Whether to edit
   isEditDag: false,
-  // Current project
+  // Current project id
+  projectId: projectId,
+  // Current project name
   projectName: projectName || '',
   // Whether to update the process definition
   syncDefine: true,
diff --git a/dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js 
b/dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js
index 43273de..6595068 100644
--- a/dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js
+++ b/dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js
@@ -31,6 +31,18 @@ export default {
     })
   },
   /**
+   * Get project by id
+   */
+  getProjectById ({ state }, payload) {
+    return new Promise((resolve, reject) => {
+      io.get('projects/query-by-id', payload, res => {
+        resolve(res.data)
+      }).catch(e => {
+        reject(e)
+      })
+    })
+  },
+  /**
    * Create project
    */
   createProjects ({ state }, payload) {
diff --git 
a/dolphinscheduler-ui/src/js/module/components/secondaryMenu/secondaryMenu.vue 
b/dolphinscheduler-ui/src/js/module/components/secondaryMenu/secondaryMenu.vue
index 36050bb..b75019e 100644
--- 
a/dolphinscheduler-ui/src/js/module/components/secondaryMenu/secondaryMenu.vue
+++ 
b/dolphinscheduler-ui/src/js/module/components/secondaryMenu/secondaryMenu.vue
@@ -27,7 +27,7 @@
             <div class="name" @click="_toggleSubMenu(item)">
               <a href="javascript:">
                 <em class="fa icon" :class="item.icon"></em>
-                <span>{{item.name}}</span>
+                <span>{{item.name}}{{ item.path === 'projects-index' ? ` - 
${projectName}` : '' }}</span>
                 <em class="fa angle" :class="item.isOpen ? 
'ans-icon-arrow-down' : 'ans-icon-arrow-right'" 
v-if="item.children.length"></em>
               </a>
             </div>
@@ -54,6 +54,7 @@
   </div>
 </template>
 <script>
+  import { mapState } from 'vuex'
   import menu from './_source/menu'
   import store from '@/conf/home/store'
   export default {
@@ -93,6 +94,9 @@
       }
     },
     mounted () {
+    },
+    computed: {
+      ...mapState('dag', ['projectName'])
     }
   }
 </script>
@@ -142,6 +146,9 @@
           display: block;
           position: relative;
           padding-left: 10px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
           >.icon {
             vertical-align: middle;
             font-size: 15px;
diff --git a/dolphinscheduler-ui/src/js/module/mixin/switchProject.js 
b/dolphinscheduler-ui/src/js/module/mixin/switchProject.js
new file mode 100644
index 0000000..9e476af
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/module/mixin/switchProject.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 { mapState } from 'vuex'
+import { beforeProjectRoute } from '@/module/project/router'
+
+export default {
+  computed: {
+    ...mapState('dag', ['projectId', 'projectName'])
+  },
+  watch: {
+    projectId () {
+      typeof this._updateProject === 'function' && this._updateProject()
+    }
+  },
+  beforeRouteUpdate (to, from, next) {
+    beforeProjectRoute(to, from, next)
+  }
+}
diff --git a/dolphinscheduler-ui/src/js/module/project/router.js 
b/dolphinscheduler-ui/src/js/module/project/router.js
new file mode 100644
index 0000000..333d386
--- /dev/null
+++ b/dolphinscheduler-ui/src/js/module/project/router.js
@@ -0,0 +1,38 @@
+/*
+ * 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 store from '@/conf/home/store'
+import localStore from '@/module/util/localStorage'
+
+export function beforeProjectRoute (to, from, next) {
+  const blacklist = ['projects', 'projects-list']
+  if (!blacklist.includes(to.name) && to.params.projectId && 
to.params.projectId !== localStore.getItem('projectId')) {
+    store.dispatch('projects/getProjectById', {
+      projectId: to.params.projectId
+    }).then(res => {
+      store.commit('dag/setProjectId', res.id)
+      store.commit('dag/setProjectName', res.name)
+      localStore.setItem('projectId', res.id)
+      localStore.setItem('projectName', res.name)
+      next()
+    }).catch(e => {
+      next({ name: 'projects-list' })
+    })
+  } else {
+    next()
+  }
+}

Reply via email to