Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ui/src/components/COMPONENT_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,7 @@ Workspace 的文件夹虚拟树业务组件。组件根据当前资源上下文
后可调用 `refresh()` 重新加载文件夹树。
`VirtualizedTree.vue` 基于 `@he-tree/vue` 的 `Draggable` 实现虚拟渲染和拖拽交互,只负责树 UI,
不调用 API;不要替换为 Element Plus `el-tree-v2`。
“全部”入口 ID 使用当前工作空间 ID;未传入 `v-model` 时,在实例创建时读取该 ID 作为默认选择。

### MoveToDialog

Expand Down
2 changes: 1 addition & 1 deletion ui/src/components/business/folder-tree/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const props = withDefaults(
{ canEdit: true, disabledFolderIds: () => [], draggable: false, rootLabel: '', showAll: true, showShared: true },
)

const currentNodeKey = defineModel<string>({ default: FOLDER_ENTRY_ID.ALL })
const currentNodeKey = defineModel<string>({ default: () => FOLDER_ENTRY_ID.ALL })
const route = useRoute()
const router = useRouter()
const routeFolderId = route.query.folderId
Expand Down
3 changes: 3 additions & 0 deletions ui/src/constants/CONSTANT_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
不要创建收集无关常量的通用文件,也不要为了统一导出而新增只做二次转发的 `index.ts`。
常量名称使用能够表达所属领域和用途的全大写命名,使用方从具体文件直接导入。

`folder.ts` 的 `FOLDER_ENTRY_ID.ALL` 与 `FOLDER_ENTRIES` 的全部入口 ID 在读取时取当前路由的工作空间 ID,
不在模块初始化时缓存;无工作空间上下文时保留 `default`,共享入口固定为 `shared`。

后端枚举与类型归属统一见 [API_README.md](../api/API_README.md#枚举与类型组织)。`constants` 只维护标签、颜色、选项等前端映射;映射的键应引用
API 枚举值。例如角色类型和登录方式以 `src/api/enums` 为唯一数据源,`constants/auth.ts`
只维护它们的展示文案。
Expand Down
28 changes: 24 additions & 4 deletions ui/src/constants/folder.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,30 @@
/** 提供资源文件夹的全部与共享入口,全部入口使用当前工作空间 ID。 */

import { RESOURCE_TYPE } from '@/api/enums'
import type { FolderItem, FolderSource } from '@/api/types'
import { getWorkspaceId } from '@/utils/resource-context'

export const FOLDER_ENTRY_ID = {
get ALL() {
return getWorkspaceId() ?? 'default'
},
SHARED: 'shared',
} as const

export const FOLDER_ENTRY_ID = { ALL: 'default', SHARED: 'shared' } as const
function createFolderEntries(resourceName: string) {
return {
all: {
get id() {
return FOLDER_ENTRY_ID.ALL
},
name: `全部${resourceName}`,
},
shared: { id: FOLDER_ENTRY_ID.SHARED, name: `共享${resourceName}` },
}
}

export const FOLDER_ENTRIES = {
[RESOURCE_TYPE.APPLICATION]: { all: { id: FOLDER_ENTRY_ID.ALL, name: '全部智能体' }, shared: { id: FOLDER_ENTRY_ID.SHARED, name: '共享智能体' } },
[RESOURCE_TYPE.KNOWLEDGE]: { all: { id: FOLDER_ENTRY_ID.ALL, name: '全部知识库' }, shared: { id: FOLDER_ENTRY_ID.SHARED, name: '共享知识库' } },
[RESOURCE_TYPE.TOOL]: { all: { id: FOLDER_ENTRY_ID.ALL, name: '全部工具' }, shared: { id: FOLDER_ENTRY_ID.SHARED, name: '共享工具' } },
[RESOURCE_TYPE.APPLICATION]: createFolderEntries('智能体'),
[RESOURCE_TYPE.KNOWLEDGE]: createFolderEntries('知识库'),
[RESOURCE_TYPE.TOOL]: createFolderEntries('工具'),
} satisfies Record<FolderSource, { all: FolderItem; shared: FolderItem }>
5 changes: 3 additions & 2 deletions ui/src/views/tool/tool-store/ApplyStoreToolDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import WorkspaceToolStoreApi from '@/api/admin/workspace/tool/store'
import SystemSharedToolApi from '@/api/admin/system/shared-resources/tool/tool'
import SystemSharedToolStoreApi from '@/api/admin/system/shared-resources/tool/store'
import { TOOL_TYPE } from '@/api/enums'
import { FOLDER_ENTRY_ID } from '@/constants/folder'
import type { ToolItem, ToolStoreItem } from '@/api/types'
import { useStore } from '@/stores'
import { MsgSuccess } from '@/utils/message'
Expand All @@ -17,7 +18,7 @@ const props = withDefaults(
defineProps<{
folderId: string
}>(),
{ folderId: 'default' },
{ folderId: () => FOLDER_ENTRY_ID.ALL },
)

const { auth } = useStore()
Expand All @@ -43,7 +44,7 @@ function handleSubmit() {
const name = storeToolForm.name
loading.value = true

const commonPayload = { folder_id: props.folderId || 'default', name }
const commonPayload = { folder_id: props.folderId || FOLDER_ENTRY_ID.ALL, name }
const isSharedResource = isSystemSharedResource()
let request: Promise<ToolItem>

Expand Down
5 changes: 3 additions & 2 deletions ui/src/views/tool/tool-store/ToolStoreDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { computed, nextTick, ref, shallowRef, useTemplateRef } from 'vue'
import StoreApi from '@/api/admin/store.ts'
import { TOOL_TYPE } from '@/api/enums'
import { FOLDER_ENTRY_ID } from '@/constants/folder'
import type { ToolStoreItem, ToolStoreTag, ToolType } from '@/api/types'
import ToolStoreCard from './component/ToolStoreCard.vue'
import ApplyStoreToolDialog from './ApplyStoreToolDialog.vue'
Expand All @@ -24,7 +25,7 @@ const visible = ref(false)
const loading = ref(false)
const activeCategoryId = ref('')
const appliedSearchKeyword = ref('')
const folderId = ref('default')
const folderId = ref(FOLDER_ENTRY_ID.ALL)
const searchKeyword = ref('')
const storeTools = ref<ToolStoreItem[]>([])
const storeTags = ref<ToolStoreTag[]>([])
Expand Down Expand Up @@ -85,7 +86,7 @@ function loadStoreTools() {
}

function open(targetFolderId: string) {
folderId.value = targetFolderId || 'default'
folderId.value = targetFolderId || FOLDER_ENTRY_ID.ALL
visible.value = true
loadStoreTools()
}
Expand Down
Loading