diff --git a/ui/src/api/admin/workspace/folder.ts b/ui/src/api/admin/workspace/folder.ts index dd9a32282eb..f7afe1cadea 100644 --- a/ui/src/api/admin/workspace/folder.ts +++ b/ui/src/api/admin/workspace/folder.ts @@ -1,35 +1,22 @@ import { del, get, post, put } from '../core/request' -import type { - FolderSource, - WorkspaceFolder, - WorkspaceFolderCreatePayload, - WorkspaceFolderQuery, - WorkspaceFolderUpdatePayload, -} from '@/api/types' +import type { FolderSource, FolderItem, RequestParams, FolderRequest } from '@/api/types' const getPrefix = (workspaceId: string, source: FolderSource) => `/workspace/${workspaceId}/${source}/folder` /** 获取指定资源模块的 Workspace 文件夹树。 */ -const getFolderTree = (workspaceId: string, source: FolderSource, query?: WorkspaceFolderQuery) => { - return get(getPrefix(workspaceId, source), query) +const getFolderTree = (workspaceId: string, source: FolderSource, query?: RequestParams) => { + return get(getPrefix(workspaceId, source), query) } /** 获取指定 Workspace 文件夹详情。 */ const getFolderDetail = (workspaceId: string, source: FolderSource, folderId: string) => { - return get(`${getPrefix(workspaceId, source)}/${folderId}`) + return get(`${getPrefix(workspaceId, source)}/${folderId}`) } /** 在指定资源模块中创建 Workspace 文件夹。 */ -const postFolder = ( - workspaceId: string, - source: FolderSource, - payload: WorkspaceFolderCreatePayload, -) => { - return post( - getPrefix(workspaceId, source), - payload, - ) +const postFolder = (workspaceId: string, source: FolderSource, payload: FolderRequest) => { + return post(getPrefix(workspaceId, source), payload) } /** 更新指定 Workspace 文件夹。 */ @@ -37,17 +24,14 @@ const putFolder = ( workspaceId: string, source: FolderSource, folderId: string, - payload: WorkspaceFolderUpdatePayload, + payload: FolderRequest, ) => { - return put( - `${getPrefix(workspaceId, source)}/${folderId}`, - payload, - ) + return put(`${getPrefix(workspaceId, source)}/${folderId}`, payload) } /** 删除指定 Workspace 文件夹及其中的资源。 */ const deleteFolder = (workspaceId: string, source: FolderSource, folderId: string) => { - return del(`${getPrefix(workspaceId, source)}/${folderId}`) + return del(`${getPrefix(workspaceId, source)}/${folderId}`) } export default { diff --git a/ui/src/api/admin/workspace/tool/tool.ts b/ui/src/api/admin/workspace/tool/tool.ts index ee215d88bac..302ac29896e 100644 --- a/ui/src/api/admin/workspace/tool/tool.ts +++ b/ui/src/api/admin/workspace/tool/tool.ts @@ -10,6 +10,14 @@ import type { const getPrefix = (workspaceId: string) => `/workspace/${workspaceId}/tool` +/** 获取工具分页列表。 */ +const getToolPage = (workspaceId: string, page: ParamsPage, query?: ToolListQuery) => { + return get>( + `${getPrefix(workspaceId)}/${page.currentPage}/${page.pageSize}`, + query, + ) +} + /** 获取当前目录下的工具和子文件夹。 */ const getToolTree = (workspaceId: string, query?: ToolListQuery) => { return get(getPrefix(workspaceId), query) @@ -20,14 +28,6 @@ const getToolCatalog = (workspaceId: string, query?: ToolListQuery) => { return get(`${getPrefix(workspaceId)}/tool_list`, query) } -/** 获取工具分页列表。 */ -const getToolPage = (workspaceId: string, page: ParamsPage, query?: ToolListQuery) => { - return get>( - `${getPrefix(workspaceId)}/${page.currentPage}/${page.pageSize}`, - query, - ) -} - /** 创建工作空间工具。 */ const postTool = (workspaceId: string, payload: ToolPayload) => { return post(getPrefix(workspaceId), payload) diff --git a/ui/src/api/types/workspace-folder.ts b/ui/src/api/types/folder.ts similarity index 59% rename from ui/src/api/types/workspace-folder.ts rename to ui/src/api/types/folder.ts index 7245b1d52e0..6e095501632 100644 --- a/ui/src/api/types/workspace-folder.ts +++ b/ui/src/api/types/folder.ts @@ -8,8 +8,8 @@ export const FOLDER_SOURCE = { export type FolderSource = (typeof FOLDER_SOURCE)[keyof typeof FOLDER_SOURCE] -export interface WorkspaceFolder { - children?: WorkspaceFolder[] +export interface FolderItem { + children?: FolderItem[] create_time?: string desc?: string | null id: string @@ -17,22 +17,11 @@ export interface WorkspaceFolder { parent_id?: string | null update_time?: string user_id?: string | null - workspace_id: string + workspace_id?: string } -export interface WorkspaceFolderCreatePayload { - desc?: string | null - name: string - parent_id?: string | null -} - -export interface WorkspaceFolderUpdatePayload { +export interface FolderRequest { desc?: string | null name?: string parent_id?: string | null } - -export interface WorkspaceFolderQuery { - name?: string - [key: string]: unknown -} diff --git a/ui/src/api/types/index.ts b/ui/src/api/types/index.ts index b39aa8fc968..430090e517e 100644 --- a/ui/src/api/types/index.ts +++ b/ui/src/api/types/index.ts @@ -11,5 +11,5 @@ export type * from './system-operate-log' export * from './system-role' export type * from './system-email' export * from './workspace-model' -export * from './workspace-folder' +export * from './folder' export * from './workspace-tool' diff --git a/ui/src/api/types/workspace-tool.ts b/ui/src/api/types/workspace-tool.ts index 3234818bf26..1fcaa1b9419 100644 --- a/ui/src/api/types/workspace-tool.ts +++ b/ui/src/api/types/workspace-tool.ts @@ -1,6 +1,6 @@ /** Workspace 工具列表和工具维护共用的业务类型。 */ -import type { WorkspaceFolder } from './workspace-folder' +import type { WorkspaceFolder } from './folder' export const TOOL_SCOPE = { INTERNAL: 'INTERNAL', diff --git a/ui/src/components/business/folder-tree/VirtualizedTree.vue b/ui/src/components/business/folder-tree/VirtualizedTree.vue index a0f1be35173..32fd703fe5d 100644 --- a/ui/src/components/business/folder-tree/VirtualizedTree.vue +++ b/ui/src/components/business/folder-tree/VirtualizedTree.vue @@ -1,12 +1,13 @@ - diff --git a/ui/src/components/business/folder-tree/index.vue b/ui/src/components/business/folder-tree/index.vue index e3c92f68d2e..9ef1468f049 100644 --- a/ui/src/components/business/folder-tree/index.vue +++ b/ui/src/components/business/folder-tree/index.vue @@ -1,41 +1,55 @@ @@ -250,23 +252,74 @@ defineExpose({ openCreate: handleOpenCreateFolder, refresh: loadFolders }) - +
+ + + 共享模型 + + + + + + + 全部模型 + +
- + @node-click="handleFolderSelect" + > + + + +
diff --git a/ui/src/components/global/mk-filterable-dropdown/index.vue b/ui/src/components/global/mk-filterable-dropdown/index.vue index 529251512af..d687b72f504 100644 --- a/ui/src/components/global/mk-filterable-dropdown/index.vue +++ b/ui/src/components/global/mk-filterable-dropdown/index.vue @@ -93,25 +93,27 @@ function handleItemClick(option: TOption) { - - - - - {{ getOptionLabel(option) }} - - - +
+ + + + + {{ getOptionLabel(option) }} + + + - - {{ emptyText }} - - + + {{ emptyText }} + + +
diff --git a/ui/src/styles/element-plus.scss b/ui/src/styles/element-plus.scss index 19253fbe774..bf61f4c95cb 100644 --- a/ui/src/styles/element-plus.scss +++ b/ui/src/styles/element-plus.scss @@ -189,7 +189,7 @@ } } .el-cascader-node { - border-radius: var(--el-border-radius-small); + border-radius: var(--el-border-radius-base); padding: 0 calc(var(--spacing) * 8) 0 calc(var(--spacing) * 2); &__label { @@ -321,7 +321,7 @@ .el-dropdown-menu { padding: calc(var(--spacing) * 1) 0; &__item { - border-radius: var(--el-border-radius-small); + border-radius: var(--el-border-radius-base); color: var(--el-text-color-primary); gap: calc(var(--spacing) * 2); margin: 0 calc(var(--spacing) * 1); @@ -600,7 +600,7 @@ padding: 4px; } &__item { - border-radius: var(--el-border-radius-small); + border-radius: var(--el-border-radius-base); color: var(--el-text-color-primary); padding: 0 calc(var(--spacing) * 8) 0 calc(var(--spacing) * 2); max-width: 100%; diff --git a/ui/src/views/model/ModelView.vue b/ui/src/views/model/ModelView.vue index d18d9a92c0d..1897f9e930e 100644 --- a/ui/src/views/model/ModelView.vue +++ b/ui/src/views/model/ModelView.vue @@ -23,7 +23,10 @@ const DEFAULT_MODEL_PROVIDER: ModelProviderItem = { } const route = useRoute() -const workspaceId = computed(() => String(route.params.workspaceId)) +const { + params: { workspaceId}, +} = route + const loading = ref(false) const currentProvider = ref(DEFAULT_MODEL_PROVIDER) const modelProviders = ref([]) @@ -57,7 +60,7 @@ const searchFields = computed(() => [ function loadCreatorOptions(keyword: string) { const request = isShared.value ? CommonSystemApi.getAllUsers(keyword ? { nick_name: keyword } : undefined) - : CommonApi.getAllUsers(workspaceId.value, keyword ? { nick_name: keyword } : undefined) + : CommonApi.getAllUsers(workspaceId, keyword ? { nick_name: keyword } : undefined) return request.then((users) => { creatorOptions.value = users.map(({ id, nick_name }) => ({ label: nick_name, value: id })) @@ -80,8 +83,8 @@ function loadModels() { } const request = isShared.value - ? ModelSharedApi.getModelList(workspaceId.value, modelQuery.value) - : ModelApi.getModelList(workspaceId.value, query) + ? ModelSharedApi.getModelList(workspaceId, modelQuery.value) + : ModelApi.getModelList(workspaceId, query) return request .then((models) => { diff --git a/ui/src/views/tool/ToolView.vue b/ui/src/views/tool/ToolView.vue index fa84ea27f8b..461cf47b891 100644 --- a/ui/src/views/tool/ToolView.vue +++ b/ui/src/views/tool/ToolView.vue @@ -1,22 +1,19 @@