From 7578f54b622076832adf72a09d454bcdeaea0873 Mon Sep 17 00:00:00 2001 From: "xinxin.wu" Date: Mon, 26 Oct 2026 15:57:51 +0800 Subject: [PATCH] feat: system application for shelves --- ui/src/api/API_README.md | 8 ++++---- .../system/resource-management/application/application.ts | 5 +++-- ui/src/api/admin/workspace/application/application.ts | 2 +- ui/src/views/VIEW_README.md | 3 ++- .../system/identity/resource-authorization/index.vue | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index 3a731e97d8f..1c413df1cd4 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -390,10 +390,10 @@ API 对象和工作空间上下文,作为该抽屉的范围选择例外。Syst - 知识库 Workflow API 记录为 `//action//`,筛选 user_name、state; 详情和取消为 GET action/、POST action//cancel。 - 智能体复制查询完整 ApplicationDetail,model 映射 model_id 后创建,不使用卡片摘要。 -- Workspace 与 System 资源管理的 Application API 提供 `putApplicationPortal(applicationId, isPortal)` 和 - `exportApplicationSkills(applicationId, applicationName)` 的本地 mock;前者返回 `{ id, is_portal }`, - 后者返回 `{ application_id, name }`,均不发送请求或持久化,也不生成 Skills 文件。真实接口待接入, - 不通过智能体配置保存接口模拟上下架。 +- Workspace 与 System 资源管理的 Application API 通过 `putApplicationPortal(applicationId, isPortal)` + 向各自范围的 `application/` 发送 PUT 请求,仅提交 `{ is_portal }`,返回 `ApplicationDetail`。 + `exportApplicationSkills(applicationId, applicationName)` 仍为本地 mock,返回 `{ application_id, name }`, + 不发送请求或生成 Skills 文件,真实下载接口待接入。 ### 智能体概览 diff --git a/ui/src/api/admin/system/resource-management/application/application.ts b/ui/src/api/admin/system/resource-management/application/application.ts index cdd7482413a..2b69f2352a1 100644 --- a/ui/src/api/admin/system/resource-management/application/application.ts +++ b/ui/src/api/admin/system/resource-management/application/application.ts @@ -26,8 +26,9 @@ const exportApplication = (applicationId: string, applicationName: string) => { const exportApplicationSkills = (applicationId: string, applicationName: string) => Promise.resolve({ application_id: applicationId, name: applicationName }) -/** 模拟 System 资源管理智能体门户上下架;TODO:接入真实接口,当前不持久化。 */ -const putApplicationPortal = (applicationId: string, isPortal: boolean) => Promise.resolve({ id: applicationId, is_portal: isPortal }) +/** 修改 System 资源管理智能体门户上下架状态。 */ +const putApplicationPortal = (applicationId: string, isPortal: boolean) => + put<{ is_portal: boolean }, ApplicationDetail>(`${prefix}/${applicationId}`, { is_portal: isPortal }) /** 获取 System 资源管理智能体详情。 */ const getApplicationDetail = (applicationId: string) => get(`${prefix}/${applicationId}`) diff --git a/ui/src/api/admin/workspace/application/application.ts b/ui/src/api/admin/workspace/application/application.ts index 19c788b07fb..36d0b5cf1b0 100644 --- a/ui/src/api/admin/workspace/application/application.ts +++ b/ui/src/api/admin/workspace/application/application.ts @@ -51,7 +51,7 @@ const exportApplication = (applicationId: string, applicationName: string) => { const exportApplicationSkills = (applicationId: string, applicationName: string) => Promise.resolve({ application_id: applicationId, name: applicationName }) -/** 模拟工作空间智能体门户上下架。 */ +/** 修改工作空间智能体门户上下架状态。 */ const putApplicationPortal = (applicationId: string, isPortal: boolean) => { return put<{ is_portal: boolean }, ApplicationDetail>(`${getPrefix()}/${applicationId}`, { is_portal: isPortal }) } diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index a2a52db3119..426add95477 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -90,7 +90,8 @@ 不依赖下拉菜单挂载或维护逐卡片 Action Ref;`EditToolAction` 复用相同表单调度组件。 表单按类型打开,关闭动画后卸载具体表单;编辑、启停成功局部更新。 - 智能体的 Workspace 卡片与 System 资源列表复用门户上下架和导出 Action;门户入口按 `is_portal` - 显示“上架到门户/从门户下架”,当前通过 mock 接口更新列表局部状态,刷新后恢复服务端状态。 + 显示“上架到门户/从门户下架”,通过当前范围 API 保存,成功后按响应更新列表局部状态,失败保留原状态。 + 未上架时仅 `is_publish` 为 true 才显示并允许上架;已上架时保留下架入口,下架不修改发布状态。 导出使用二级菜单,包含“导出为 Skills”和“导出智能体”;Skills 当前调用 mock 接口并明确提示 尚未生成文件,智能体沿用现有文件导出。 商店列表由页面加载,卡片和版本更新按钮不重复查询。 diff --git a/ui/src/views/system/identity/resource-authorization/index.vue b/ui/src/views/system/identity/resource-authorization/index.vue index d20bf3767ce..e17ac76be24 100644 --- a/ui/src/views/system/identity/resource-authorization/index.vue +++ b/ui/src/views/system/identity/resource-authorization/index.vue @@ -97,7 +97,6 @@ const loadingPermissions = ref(false) const resourcePermissions = ref([]) function loadResourcePermissions() { - loadingPermissions.value = true const targetId = targetType.value === 'user-group' ? selectedUserGroupId.value : selectedUserId.value if (!targetId) { @@ -106,6 +105,7 @@ function loadResourcePermissions() { return Promise.resolve() } + loadingPermissions.value = true const permissionRequest = targetType.value === 'user-group' ? ResourceAuthorizationApi.getUserGroupResourcePermissions(selectedWorkspaceId.value, targetId, resourceType.value)