diff --git a/core/core-frontend/src/hooks/web/useFilter.ts b/core/core-frontend/src/hooks/web/useFilter.ts
index 4116247b81..33f2580726 100644
--- a/core/core-frontend/src/hooks/web/useFilter.ts
+++ b/core/core-frontend/src/hooks/web/useFilter.ts
@@ -42,7 +42,7 @@ const forMatterValue = (
     : getRange(selectValue, timeGranularity)
 }
 
-const getRange = (selectValue, timeGranularity) => {
+export const getRange = (selectValue, timeGranularity) => {
   switch (timeGranularity) {
     case 'year':
       return getYearEnd(selectValue)
diff --git a/core/core-frontend/src/layout/components/AiTips.vue b/core/core-frontend/src/layout/components/AiTips.vue
index b419cb3723..ef01cf88a1 100644
--- a/core/core-frontend/src/layout/components/AiTips.vue
+++ b/core/core-frontend/src/layout/components/AiTips.vue
@@ -22,7 +22,7 @@ onMounted(() => {
     <div class="ai-popper-tips-content">
       <p class="title">DataEase 智能客服</p>
       <p class="constant">
-        你好,我是DataEase智能客服<br />点击一下,开启高效解答模式~<br />&nbsp;
+        你好,我是 DataEase 智能客服<br />点击一下,开启高效解答模式~<br />&nbsp;
       </p>
       <div class="bottom">
         <el-button size="middle" @click="confirm"> 我知道了 </el-button>
diff --git a/core/core-frontend/src/views/visualized/data/datasource/index.vue b/core/core-frontend/src/views/visualized/data/datasource/index.vue
index 9e32c34fdd..e1c3e1c681 100644
--- a/core/core-frontend/src/views/visualized/data/datasource/index.vue
+++ b/core/core-frontend/src/views/visualized/data/datasource/index.vue
@@ -13,7 +13,7 @@ import CreatDsGroup from './form/CreatDsGroup.vue'
 import type { Tree } from '../dataset/form/CreatDsGroup.vue'
 import { previewData, getById } from '@/api/datasource'
 import { useI18n } from '@/hooks/web/useI18n'
-import { useRouter } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
 import DatasetDetail from '@/views/visualized/data/dataset/DatasetDetail.vue'
 import { timestampFormatDate } from '@/views/visualized/data/dataset/form/util'
 import EmptyBackground from '@/components/empty-background/src/EmptyBackground.vue'
@@ -42,6 +42,7 @@ import { useMoveLine } from '@/hooks/web/useMoveLine'
 import { cloneDeep } from 'lodash-es'
 import { interactiveStoreWithOut } from '@/store/modules/interactive'
 import treeSort from '@/utils/treeSortUtils'
+const route = useRoute()
 const interactiveStore = interactiveStoreWithOut()
 interface Field {
   fieldShortName: string
@@ -401,6 +402,9 @@ const listDs = () => {
       if (!!id) {
         Object.assign(nodeInfo, cloneDeep(defaultInfo))
         dfsDatasourceTree(state.datasourceTree, id)
+        nextTick(() => {
+          dsListTree.value.setCurrentKey(id, true)
+        })
       }
     })
 }
@@ -418,8 +422,6 @@ const dfsDatasourceTree = (ds, id) => {
   })
 }
 
-listDs()
-
 const creatDsFolder = ref()
 const sortList = [
   {
@@ -690,6 +692,8 @@ const defaultProps = {
   label: 'name'
 }
 onMounted(() => {
+  nodeInfo.id = (route.params.id as string) || ''
+  listDs()
   const { opt } = router.currentRoute.value.query
   if (opt && opt === 'create') {
     datasourceEditor.value.init(null, null)
diff --git a/core/core-frontend/src/views/workbranch/ShortcutTable.vue b/core/core-frontend/src/views/workbranch/ShortcutTable.vue
index 20afb45742..6c3dc68b8a 100644
--- a/core/core-frontend/src/views/workbranch/ShortcutTable.vue
+++ b/core/core-frontend/src/views/workbranch/ShortcutTable.vue
@@ -3,7 +3,7 @@ import { useI18n } from '@/hooks/web/useI18n'
 import { ref, reactive, onMounted, computed } from 'vue'
 import type { TabsPaneContext } from 'element-plus-secondary'
 import GridTable from '@/components/grid-table/src/GridTable.vue'
-import { useRouter } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
 import dayjs from 'dayjs'
 import { shortcutOption } from './ShortcutOption'
 /* import { XpackComponent } from '@/components/plugin' */
@@ -13,11 +13,17 @@ import { useCache } from '@/hooks/web/useCache'
 import { useUserStoreWithOut } from '@/store/modules/user'
 import ShareGrid from '@/views/share/share/ShareGrid.vue'
 import ShareHandler from '@/views/share/share/ShareHandler.vue'
+import { useAppStoreWithOut } from '@/store/modules/app'
+import { useEmbedded } from '@/store/modules/embedded'
 const userStore = useUserStoreWithOut()
 const { resolve } = useRouter()
 const { t } = useI18n()
 const interactiveStore = interactiveStoreWithOut()
 const { wsCache } = useCache()
+const appStore = useAppStoreWithOut()
+const embeddedStore = useEmbedded()
+const route = useRoute()
+const { push } = useRouter()
 defineProps({
   expand: {
     type: Boolean,
@@ -161,9 +167,26 @@ const handleCellClick = row => {
       window.open('#/panel/index?dvId=' + row.id, '_self')
     } else if (['dataV', 'screen'].includes(row.type)) {
       window.open('#/screen/index?dvId=' + row.id, '_self')
+    } else if (['dataset'].includes(row.type)) {
+      const routeName =
+        embeddedStore.getToken && appStore.getIsIframe ? 'dataset-embedded' : 'dataset'
+      push({
+        name: routeName,
+        params: {
+          id: row.id
+        }
+      })
+    } else if (['datasource'].includes(row.type)) {
+      push({
+        name: 'datasource',
+        params: {
+          id: row.id
+        }
+      })
     }
   }
 }
+
 const setLoading = (val: boolean) => {
   loading.value = val
 }