diff --git a/ui/src/api/types/application.ts b/ui/src/api/types/application.ts
index 02a0f9e5bd3..d38aa2ba06f 100644
--- a/ui/src/api/types/application.ts
+++ b/ui/src/api/types/application.ts
@@ -8,6 +8,7 @@ export type ApplicationType = (typeof APPLICATION_TYPE)[keyof typeof APPLICATION
export interface ApplicationDetail {
create_time?: string
desc?: string | null
+ folder?: string
folder_id?: string
icon?: string
id: string
diff --git a/ui/src/components/COMPONENT_README.md b/ui/src/components/COMPONENT_README.md
index 0b7708bfb72..541c34d6e44 100644
--- a/ui/src/components/COMPONENT_README.md
+++ b/ui/src/components/COMPONENT_README.md
@@ -959,7 +959,10 @@ Workspace 的文件夹虚拟树业务组件。组件根据当前资源上下文
文件夹树查询、搜索、排序、创建、编辑、移动和删除。通过 `v-model` 控制当前文件夹 ID,首次加载
完成后通过 `loaded` 返回该 ID 对应的完整文件夹,选择文件夹时触发 `select`。传入的 ID 不存在时,
优先回退到“全部”入口,否则回退到首个可用文件夹。`showAll`、`showShared` 分别控制全部和共享入口,
-`rootLabel` 可覆盖根入口文案,`disabledFolderIds` 用于只选场景中禁用指定节点。
+`rootLabel` 可覆盖根入口文案,`disabledFolderIds` 用于只选场景中禁用指定节点。显示“全部”入口的
+主目录树初始化时会读取字符串类型的 `folderId` query 并设置当前文件夹;用户选择文件夹时不把
+新 ID 写入路由,但会清除已有的 `folderId`,避免刷新页面后恢复到旧文件夹。隐藏“全部”入口的
+移动目录树继续以调用方传入的 `v-model` 为准。
```vue
@@ -34,7 +34,7 @@ function handleOpen() {
diff --git a/ui/src/views/application/application-card/action-dropdown/DeleteApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/DeleteApplicationAction.vue
index 09f601aa7f0..69cf1aefa15 100644
--- a/ui/src/views/application/application-card/action-dropdown/DeleteApplicationAction.vue
+++ b/ui/src/views/application/application-card/action-dropdown/DeleteApplicationAction.vue
@@ -17,13 +17,13 @@ function handleDeleteApplication() {
loading.value = true
return props.api
.deleteApplication(props.application.id)
+ .finally(() => {
+ loading.value = false
+ })
.then(() => {
emit('delete', props.application.id)
MsgSuccess('删除成功')
})
- .finally(() => {
- loading.value = false
- })
})
.catch(() => {})
}
diff --git a/ui/src/views/application/application-card/action-dropdown/MoveApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/MoveApplicationAction.vue
index 83ae52e3dc7..8f030b89b25 100644
--- a/ui/src/views/application/application-card/action-dropdown/MoveApplicationAction.vue
+++ b/ui/src/views/application/application-card/action-dropdown/MoveApplicationAction.vue
@@ -20,7 +20,7 @@ const moveToDialogRef = useTemplateRef<{ close: () => void; open: (currentFolder
function handleOpenMoveApplication() {
dialogMounted.value = true
- return nextTick(() => moveToDialogRef.value?.open(props.application.folder_id))
+ return nextTick(() => moveToDialogRef.value?.open(props.application.folder ?? props.currentFolderId))
}
function handleMoveApplication(targetFolderId: string) {
@@ -28,14 +28,14 @@ function handleMoveApplication(targetFolderId: string) {
loading.value = true
return props.api
.putMoveApplication(props.application.id, targetFolderId)
+ .finally(() => {
+ loading.value = false
+ })
.then(() => {
MsgSuccess('移动成功')
moveToDialogRef.value?.close()
if (props.currentFolderId !== FOLDER_ENTRY_ID.ALL) emit('delete', props.application.id)
})
- .finally(() => {
- loading.value = false
- })
}
function handleDialogClosed() {
diff --git a/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue
index 341520347d7..542295e47af 100644
--- a/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue
+++ b/ui/src/views/application/application-card/action-dropdown/SettingApplicationAction.vue
@@ -20,7 +20,6 @@ function handleSettingApplication(event: MouseEvent) {
type: props.application.type,
workspaceId: route.params.workspaceId,
},
- query: route.query,
})
return
}
diff --git a/ui/src/views/application/create-application/AdvancedCreateDialog.vue b/ui/src/views/application/create-application/AdvancedCreateDialog.vue
index d6e9c1838a6..03756dee396 100644
--- a/ui/src/views/application/create-application/AdvancedCreateDialog.vue
+++ b/ui/src/views/application/create-application/AdvancedCreateDialog.vue
@@ -26,8 +26,6 @@ const router = useRouter()
const props = defineProps<{ folderId: string }>()
-const emit = defineEmits<{ refresh: [] }>()
-
const dialogVisible = ref(false)
const loading = ref(false)
const selectedTemplate = ref