diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index 5eca4b1b81d..c077e200417 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -594,29 +594,40 @@ System 前缀中的额外 `knowledge` 段暂按 V2 保留,不能依据普通 调用方直接读取已解包数据并管理 loading;共享只读 API 不补写方法以凑齐接口集合。 公共类型维护在 `types/chat-user.ts`,经 `@/api/types` 导出;用户组已授权人数读取 `authorized_count`,不用分页用户数据推算全组人数。 -智能体对话用户页继续直接调用普通 `workspace/chat-user.ts`。知识库对话用户页通过详情 context +智能体对话用户页通过 `application-detail/context.ts` 的 `resourceApi.chatUser` 选择 Workspace 或 +System 资源管理 API,不包含 Workspace 共享和 System 共享。知识库对话用户页通过详情 context 的 `resourceApi.chatUser` 选择四套现有完整 API,传 `RESOURCE_TYPE.KNOWLEDGE` 和上下文知识库 ID。 共有查询方法为必填,部分范围缺失的保存方法按 ScheduledSync、Tags、Document 同样的规则标记为可选, 调用使用 `?.`;缺失方法不发请求、不提示保存成功,不回退普通 Workspace,不修改现有接口协议。 ### 智能体对话日志 -`workspace/application/chat-log.ts` 使用 Admin 请求客户端,日志分页请求 +智能体详情 context 仅装配 Workspace 和 System 资源管理的完整 Application、Overview、Access、ChatLog、 +Workflow 与 ChatUser API。System 智能体接口统一使用 `/system/resource/application` 前缀, +详情 GET、配置 PUT 使用 `/`,发布 PUT 使用 `//publish`; +概览统计、Tokens 排行、提问排行分别为 GET `application_stats`、`application_token_usage`、`top_questions`。 +发布历史使用 GET `//application_version`,版本编辑使用 PUT 追加版本 ID。 +DebugPanel 与日志正文仍使用现有 Workspace conversation/聊天记录实现,尚未按 System 范围适配。 + +`workspace/application/chat-log.ts` 和 `system/resource-management/application/chat-log.ts` 使用 Admin 请求客户端, +前缀分别为 `/workspace//application` 和 `/system/resource/application`。日志分页请求 `//chat//`,导出使用 `postExportExcel` 请求 `//chat/export`,查询包含日期、摘要或用户及点赞、点踩下限; 导出请求体为 `{ select_ids }`,空数组表示导出当前筛选结果。 日志业务类型经 `@/api/types` 导出,来源枚举经 `@/api/enums` 导出,loading 由调用方维护。 -清除策略通过 PUT `batch_clean_time` 提交当前智能体的单元素 `id_list`、`clean_time`、 -`file_clean_time`,避免调用通用应用编辑流程;成功后页面刷新应用详情。 +Workspace 清除策略通过 PUT `batch_clean_time` 提交当前智能体的单元素 `id_list`、`clean_time`、 +`file_clean_time`;System 沿用 v2 的单个智能体 PUT `/` 保存两个清除天数字段。 +成功后页面刷新应用详情。 添加知识库通过 POST `//add_knowledge` 提交 `ChatLogAddKnowledgePayload` (`knowledge_id`、`document_id`、`chat_ids`),将所选对话的问答写入目标文档。 -目标文档选项通过 `workspace/knowledge/document.ts` 的 `getAllDocuments(knowledgeId)` -请求不分页的文档列表。聊天记录与标注接口保留在同一 API 文件,尚未接入日志详情正文。 +知识库及目标文档选项通过当前范围 Knowledge/Document API 查询,文档使用 `getAllDocuments(knowledgeId)`。 +聊天记录与标注接口保留在同一 API 文件;日志详情使用现有 `LogConversation`,其聊天记录查询仍使用 Workspace API。 ### 智能体发布渠道 -`admin/workspace/application/access.ts` 独立维护发布渠道接口,前缀为 -`/workspace//application//platform`,沿用 v2 协议。 +`admin/workspace/application/access.ts` 和 `admin/system/resource-management/application/access.ts` +独立维护发布渠道接口,前缀分别为 `/workspace//application//platform` +与 `/system/resource/application//platform`,沿用 v2 协议。 GET `/status` 返回按平台标识索引的 `[是否已配置, 是否启用]`;POST `/status` 提交 `{ type, status }`。GET、POST `/` 查询与保存对应平台配置,不由通用 application.ts 转发。 平台标识由 `APPLICATION_ACCESS_PLATFORM` 定义,业务类型在 `types/application.ts` 经公共入口导出。 diff --git a/ui/src/api/admin/system/resource-management/application/access.ts b/ui/src/api/admin/system/resource-management/application/access.ts new file mode 100644 index 00000000000..6abe84d369d --- /dev/null +++ b/ui/src/api/admin/system/resource-management/application/access.ts @@ -0,0 +1,21 @@ +/** System 资源管理智能体发布渠道配置与启停接口。 */ +import { get, post } from '@/api/admin/core/request' +import type { ApplicationAccessConfig, ApplicationAccessPlatform, ApplicationAccessStatus, ApplicationAccessStatusPayload } from '@/api/types' + +const getPrefix = (applicationId: string) => `/system/resource/application/${applicationId}/platform` + +/** 获取智能体各发布渠道的配置及启用状态。 */ +const getPlatformStatus = (applicationId: string) => get(`${getPrefix(applicationId)}/status`) + +/** 启用或停用智能体发布渠道。 */ +const postPlatformStatus = (applicationId: string, payload: ApplicationAccessStatusPayload) => post(`${getPrefix(applicationId)}/status`, payload) + +/** 获取智能体指定发布渠道的配置。 */ +const getPlatformConfig = (applicationId: string, platform: ApplicationAccessPlatform) => + get(`${getPrefix(applicationId)}/${platform}`) + +/** 保存智能体指定发布渠道的配置。 */ +const postPlatformConfig = (applicationId: string, platform: ApplicationAccessPlatform, payload: ApplicationAccessConfig) => + post(`${getPrefix(applicationId)}/${platform}`, payload) + +export default { getPlatformStatus, postPlatformStatus, getPlatformConfig, postPlatformConfig } 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 e2cd5044b96..87b2a062909 100644 --- a/ui/src/api/admin/system/resource-management/application/application.ts +++ b/ui/src/api/admin/system/resource-management/application/application.ts @@ -1,6 +1,6 @@ -import { del, get, getExportFile } from '@/api/admin/core/request' +import { del, get, getExportFile, put } from '@/api/admin/core/request' import type { ParamsPage, ResponsePage } from '@/api/admin/core/types' -import type { ApplicationDetail, Dict } from '@/api/types' +import type { ApplicationDetail, ApplicationFormPayload, Dict } from '@/api/types' const prefix = '/system/resource/application' @@ -22,7 +22,24 @@ const exportApplication = (applicationId: string, applicationName: string) => { return getExportFile(`${applicationName}.mk`, `${prefix}/${applicationId}/export`) } +/** 获取 System 资源管理智能体详情。 */ +const getApplicationDetail = (applicationId: string) => get(`${prefix}/${applicationId}`) + +/** 保存 System 资源管理智能体配置。 */ +const putApplication = (applicationId: string, data: ApplicationFormPayload) => + put(`${prefix}/${applicationId}`, data) + +/** 发布 System 资源管理智能体。 */ +const putApplicationPublish = (applicationId: string, publishName: string, publishDesc?: string) => + put, ApplicationDetail>(`${prefix}/${applicationId}/publish`, { + publish_name: publishName, + publish_desc: publishDesc, + }) + export default { + getApplicationDetail, + putApplication, + putApplicationPublish, getAllApplication, getApplicationPage, deleteApplication, diff --git a/ui/src/api/admin/system/resource-management/application/chat-log.ts b/ui/src/api/admin/system/resource-management/application/chat-log.ts new file mode 100644 index 00000000000..b7309fe3af3 --- /dev/null +++ b/ui/src/api/admin/system/resource-management/application/chat-log.ts @@ -0,0 +1,68 @@ +import { del, get, post, postExportExcel, put } from '@/api/admin/core/request' +import type { ParamsPage, ResponsePage } from '@/api/admin/core/types' +import type { ChatLog, ChatLogAddKnowledgePayload, ChatLogRecord, ApplicationDetail, Dict } from '@/api/types' + +const getPrefix = () => `/system/resource/application` + +/** 分页获取智能体对话日志。 */ +const getChatLog = (applicationId: string, page: ParamsPage, query: Dict) => + get>(`${getPrefix()}/${applicationId}/chat/${page.currentPage}/${page.pageSize}`, query) + +/** 导出筛选结果或选中的对话日志。 */ +const postExportChatLog = (applicationId: string, applicationName: string, query: Dict, data: { select_ids: string[] }) => + postExportExcel(`${applicationName}.xlsx`, `${getPrefix()}/${applicationId}/chat/export`, query, data) + +/** 保存 System 智能体的日志与文件清除策略,沿用单个智能体更新协议。 */ +const putChatLogCleanTime = (applicationId: string, cleanTime: number, fileCleanTime: number) => + put<{ clean_time: number; file_clean_time: number }, ApplicationDetail>(`${getPrefix()}/${applicationId}`, { + clean_time: cleanTime, + file_clean_time: fileCleanTime, + }) + +/** 将对话记录添加至知识库。 */ +const postChatLogAddKnowledge = (applicationId: string, data: ChatLogAddKnowledgePayload) => + post(`${getPrefix()}/${applicationId}/add_knowledge`, data) + +/** 分页获取对话中的聊天记录。 */ +const getChatRecordLog = (applicationId: string, chatId: string, page: ParamsPage, orderAsc = true) => + get>(`${getPrefix()}/${applicationId}/chat/${chatId}/chat_record/${page.currentPage}/${page.pageSize}`, { + order_asc: orderAsc, + }) + +/** 获取聊天记录的标注段落。 */ +const getMarkChatRecord = (applicationId: string, chatId: string, chatRecordId: string) => + get[]>(`${getPrefix()}/${applicationId}/chat/${chatId}/chat_record/${chatRecordId}/improve`) + +/** 保存聊天记录的知识库标注内容。 */ +const putChatRecordLog = ( + applicationId: string, + chatId: string, + chatRecordId: string, + knowledgeId: string, + documentId: string, + data: Dict, +) => put(`${getPrefix()}/${applicationId}/chat/${chatId}/chat_record/${chatRecordId}/knowledge/${knowledgeId}/document/${documentId}/improve`, data) + +/** 删除聊天记录的知识库标注。 */ +const deleteMarkChatRecord = ( + applicationId: string, + chatId: string, + chatRecordId: string, + knowledgeId: string, + documentId: string, + paragraphId: string, +) => + del( + `${getPrefix()}/${applicationId}/chat/${chatId}/chat_record/${chatRecordId}/knowledge/${knowledgeId}/document/${documentId}/paragraph/${paragraphId}/improve`, + ) + +export default { + getChatLog, + postExportChatLog, + putChatLogCleanTime, + postChatLogAddKnowledge, + getChatRecordLog, + getMarkChatRecord, + putChatRecordLog, + deleteMarkChatRecord, +} diff --git a/ui/src/api/admin/system/resource-management/application/overview.ts b/ui/src/api/admin/system/resource-management/application/overview.ts new file mode 100644 index 00000000000..d4faf68636d --- /dev/null +++ b/ui/src/api/admin/system/resource-management/application/overview.ts @@ -0,0 +1,23 @@ +/** System 资源管理智能体概览的使用统计与用户排行接口。 */ +import { get } from '@/api/admin/core/request' +import type { ApplicationTokenUsage, ApplicationTopQuestion, HomeDateRange, HomeMonitoringDay } from '@/api/types' + +const getPrefix = () => '/system/resource/application' + +/** 获取智能体每日对话、用户、Tokens 与满意度统计。 */ +const getMonitoring = (_workspaceId: string, range: HomeDateRange, applicationId: string) => + get(`${getPrefix()}/${applicationId}/application_stats`, { ...range }) + +/** 获取智能体按用户排序的 Tokens 消耗。 */ +const getTokenUsage = (applicationId: string, range: HomeDateRange) => + get(`${getPrefix()}/${applicationId}/application_token_usage`, { ...range }) + +/** 获取智能体按用户排序的提问次数。 */ +const getTopQuestions = (applicationId: string, range: HomeDateRange) => + get(`${getPrefix()}/${applicationId}/top_questions`, { ...range }) + +export default { + getMonitoring, + getTokenUsage, + getTopQuestions, +} diff --git a/ui/src/api/admin/system/resource-management/application/workflow.ts b/ui/src/api/admin/system/resource-management/application/workflow.ts new file mode 100644 index 00000000000..ad5114a9cd7 --- /dev/null +++ b/ui/src/api/admin/system/resource-management/application/workflow.ts @@ -0,0 +1,13 @@ +import { get, put } from '@/api/admin/core/request' +import type { WorkflowVersion, WorkflowVersionPayload } from '@/api/types' + +const getPrefix = (applicationId: string) => `/system/resource/application/${applicationId}/application_version` + +/** 获取智能体发布历史,按发布时间倒序返回完整版本快照。 */ +const getWorkflowVersions = (applicationId: string) => get(getPrefix(applicationId)) + +/** 修改智能体历史版本标题和更新说明,更新说明需要服务端支持 description 字段。 */ +const putWorkflowVersion = (applicationId: string, versionId: string, data: WorkflowVersionPayload) => + put(`${getPrefix(applicationId)}/${versionId}`, data) + +export default { getWorkflowVersions, putWorkflowVersion } diff --git a/ui/src/router/ROUTE_README.md b/ui/src/router/ROUTE_README.md index f944c01739c..a5bcf20e799 100644 --- a/ui/src/router/ROUTE_README.md +++ b/ui/src/router/ROUTE_README.md @@ -245,7 +245,6 @@ Workspace 共享覆盖 resourceScope,保留 Workspace scope 及知识库 activ | 授权与集成 | integration/chat-user、integration/external-retrieval | | 设置 | BASE 单独 setting;WEB 分组含 setting/base、document-strategy、scheduled-sync;LARK/WORKFLOW 含 base、scheduled-sync | -召回测试子路由通过 `props` 传入资源范围与知识库 ID 组成的 Vue `key`,切换资源时重建该页。 分组不挂 View,直接访问重定向首个子页,保留参数、query、hash。 设置只用 detailMenuVisible 控制菜单类型,不添加类型访问守卫。资料库 View 的目录是 library/tags,URL 仍为 tag。 @@ -257,15 +256,22 @@ Workspace 共享覆盖 resourceScope,保留 Workspace scope 及知识库 activ ### 智能体 Workspace 详情父路由为 workspace-application-detail-layout,详情参数包含 applicationId 与 ApplicationDetail.type。 +System 资源管理详情为 `/system/resource/application/:applicationId/:type`,父路由名为 +`system-resource-application-detail-layout`,默认进入 `system-resource-application-overview`。 +配置集中在 `admin/system/modules/application-system-resource.ts`,由 System 路由汇总接入。 +两种范围独立维护 children,复用 `application-detail` 页面;System 隐藏系统侧栏,不携带 workspaceId, +不提供 Workspace 共享或 System 共享的智能体详情。System 列表点击名称进入详情。 菜单为概览、设置、发布渠道、对话用户、对话日志;SIMPLE 的 setting 与高级 workflow-entry 互斥显示。 发布渠道使用 access 路径、workspace-application-access 路由名,对应 application-detail/access 页面。 高级设置重定向 workflow-application,保留 workspaceId、applicationId 和 query。 +System 高级设置重定向 `system-resource-workflow-application`,地址为 +`/system/resource/application/:applicationId/workflow`,保留 applicationId 和 query。 对话日志保留 operation-log 路径和 workspace-application-operation-log 名称。 workflow/application/navigation.ts 按详情子路由 order 查找首个有名称、标题、未隐藏且 canAccess 允许的页面。 未配置 canAccess 默认允许;它仅用于返回导航,不替代守卫或后端鉴权。 概览使用 overviewRead,简易设置要求 SIMPLE 与编辑权限,高级设置 canAccess 为 false,避免返回画布。 -无可访问详情或 System 详情父路由未实现时返回对应列表,不在导航函数硬编码子页分支。 +无可访问详情时返回对应列表,不在导航函数硬编码子页分支。 ### 工具 diff --git a/ui/src/router/admin/system/index.ts b/ui/src/router/admin/system/index.ts index 41a70255dc1..d1733491bbe 100644 --- a/ui/src/router/admin/system/index.ts +++ b/ui/src/router/admin/system/index.ts @@ -1,6 +1,6 @@ import type { RouteRecordRaw } from 'vue-router' import { RESOURCE_TYPE } from '@/api/enums' -import { systemApplicationRoutes } from './modules/application' +import { systemResourceApplicationRoutes } from './modules/application-system-resource' import { systemResourceKnowledgeRoutes } from './modules/knowledge-system-resource' import { systemSharedKnowledgeRoutes } from './modules/knowledge-system-shared' import perm from '@/permission/index' @@ -181,7 +181,7 @@ export const systemRoutes: RouteRecordRaw = { }, ], }, - ...systemApplicationRoutes, + ...systemResourceApplicationRoutes, { path: 'shared', name: 'system-shared', diff --git a/ui/src/router/admin/system/modules/application-system-resource.ts b/ui/src/router/admin/system/modules/application-system-resource.ts new file mode 100644 index 00000000000..166a6ab3dcb --- /dev/null +++ b/ui/src/router/admin/system/modules/application-system-resource.ts @@ -0,0 +1,74 @@ +import type { RouteRecordRaw } from 'vue-router' +import { APPLICATION_TYPE } from '@/api/enums' + +/** System 资源管理智能体详情,与 Workspace 复用页面,不提供共享详情。 */ +export const systemResourceApplicationRoutes: RouteRecordRaw[] = [ + { + path: '/system/resource/application/:applicationId/:type', + name: 'system-resource-application-detail', + component: () => import('@/views/application-detail/index.vue'), + redirect: { name: 'system-resource-application-overview' }, + meta: { title: '智能体详情', hidden: true, hideSidebar: true, resourceDetailRoot: true, scope: 'system', resourceScope: 'system-resource' }, + children: [ + { + path: 'overview', + name: 'system-resource-application-overview', + component: () => import('@/views/application-detail/overview/index.vue'), + meta: { + title: '概览', + icon: 'icon_screen_outlined', + activeIcon: 'icon_screen_filled', + order: 10, + }, + }, + { + path: 'setting', + name: 'system-resource-application-simple-setting', + component: () => import('@/views/application-detail/setting/index.vue'), + meta: { + title: '设置', + icon: 'icon_setting', + activeIcon: 'icon_setting_filled', + order: 20, + detailMenuVisible: (params) => params.type === APPLICATION_TYPE.SIMPLE, + }, + }, + { + path: 'workflow-entry', + name: 'system-resource-application-workflow-setting', + redirect: (to) => ({ + name: 'system-resource-workflow-application', + params: { applicationId: to.params.applicationId }, + query: to.query, + }), + meta: { + title: '设置', + icon: 'icon_setting', + activeIcon: 'icon_setting_filled', + order: 20, + detailMenuVisible: (params) => params.type === APPLICATION_TYPE.WORK_FLOW, + // 工作流跳转入口不能作为画布返回的落脚页。 + canAccess: () => false, + }, + }, + { + path: 'access', + name: 'system-resource-application-access', + component: () => import('@/views/application-detail/access/index.vue'), + meta: { title: '发布渠道', icon: 'icon_application_outlined', activeIcon: 'icon_application_filled', order: 30 }, + }, + { + path: 'chat-user', + name: 'system-resource-application-chat-user', + component: () => import('@/views/application-detail/chat-user/index.vue'), + meta: { title: '对话用户', icon: 'icon_contacts_outlined', activeIcon: 'icon_contacts_filled', order: 40 }, + }, + { + path: 'operation-log', + name: 'system-resource-application-operation-log', + component: () => import('@/views/application-detail/chat-log/index.vue'), + meta: { title: '对话日志', icon: 'icon_logs_outlined', activeIcon: 'icon_logs_filled', order: 50 }, + }, + ], + }, +] diff --git a/ui/src/router/admin/system/modules/application.ts b/ui/src/router/admin/system/modules/application.ts deleted file mode 100644 index 68db60a1a53..00000000000 --- a/ui/src/router/admin/system/modules/application.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router' - -/** System 来源的智能体详情路由,与 Workspace 复用页面组件。 */ -export const systemApplicationRoutes: RouteRecordRaw[] = [ - -] diff --git a/ui/src/router/admin/system/modules/knowledge-system-resource.ts b/ui/src/router/admin/system/modules/knowledge-system-resource.ts index 0fac4343403..fd903fcb4dd 100644 --- a/ui/src/router/admin/system/modules/knowledge-system-resource.ts +++ b/ui/src/router/admin/system/modules/knowledge-system-resource.ts @@ -62,7 +62,6 @@ export const systemResourceKnowledgeRoutes: RouteRecordRaw[] = [ path: 'hit-test', name: 'system-resource-knowledge-hit-test', component: () => import('@/views/knowledge-detail/hit-test/index.vue'), - props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/system/modules/knowledge-system-shared.ts b/ui/src/router/admin/system/modules/knowledge-system-shared.ts index 02b8714dd90..2575cada38f 100644 --- a/ui/src/router/admin/system/modules/knowledge-system-shared.ts +++ b/ui/src/router/admin/system/modules/knowledge-system-shared.ts @@ -62,7 +62,6 @@ export const systemSharedKnowledgeRoutes: RouteRecordRaw[] = [ path: 'hit-test', name: 'system-shared-knowledge-hit-test', component: () => import('@/views/knowledge-detail/hit-test/index.vue'), - props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/workflow/index.ts b/ui/src/router/admin/workflow/index.ts index 8b4f97c4ba9..7632709b8dd 100644 --- a/ui/src/router/admin/workflow/index.ts +++ b/ui/src/router/admin/workflow/index.ts @@ -8,6 +8,12 @@ export const workflowRoutes: RouteRecordRaw[] = [ component: () => import('@/views/workflow/application/index.vue'), meta: { title: '智能体工作流', resourceScope: 'workspace' }, }, + { + path: '/system/resource/application/:applicationId/workflow', + name: 'system-resource-workflow-application', + component: () => import('@/views/workflow/application/index.vue'), + meta: { title: '智能体工作流', resourceScope: 'system-resource' }, + }, { path: '/workspace/:workspaceId/tool/:toolId/workflow', name: 'workflow-tool', diff --git a/ui/src/router/admin/workspace/modules/knowledge-shared.ts b/ui/src/router/admin/workspace/modules/knowledge-shared.ts index cd2e15aa973..89ffbc2456e 100644 --- a/ui/src/router/admin/workspace/modules/knowledge-shared.ts +++ b/ui/src/router/admin/workspace/modules/knowledge-shared.ts @@ -62,7 +62,6 @@ export const sharedKnowledgeRoutes: RouteRecordRaw[] = [ path: 'hit-test', name: 'workspace-shared-knowledge-hit-test', component: () => import('@/views/knowledge-detail/hit-test/index.vue'), - props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/workspace/modules/knowledge.ts b/ui/src/router/admin/workspace/modules/knowledge.ts index 6ef4c6f6f11..7e2ab0bba85 100644 --- a/ui/src/router/admin/workspace/modules/knowledge.ts +++ b/ui/src/router/admin/workspace/modules/knowledge.ts @@ -74,7 +74,6 @@ export const knowledgeRoutes: RouteRecordRaw[] = [ path: 'hit-test', name: 'workspace-knowledge-hit-test', component: () => import('@/views/knowledge-detail/hit-test/index.vue'), - props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index eb365bd1831..5c48f319ea0 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -77,6 +77,10 @@ - 普通 Workspace 详情返回列表时恢复所属 `folderId`;共享知识库返回 `folderId: 'shared'`。 文件夹地址同步与工作空间切换规则见路由文档。 - `application-detail/context.ts` 提供只读详情、替换和刷新;完整响应局部替换,部分响应重新查询。 + 通过 `provideApplicationDetailContext`/`useApplicationDetailContext` 统一提供 `applicationId`、 + `resourceApi`、`listRouteName` 与 `routeParams`,仅支持 Workspace 和 System 资源管理。 + `resourceApi.application / chatUser / overview / access / chatLog / workflow` 按范围选择完整 API, + 不包含 Workspace 共享或 System 共享,不将缺失方法回退到 Workspace。 切换二级菜单不重复挂载详情容器。 - 创建模型入口接收完整 Model API;创建成功刷新基础资料后通知调用方刷新选项。 - 工具表单按类型放在 `tool-form/`,共用参数及 Python 设置放在 `tool-form/component/`。 @@ -155,7 +159,7 @@ System 资源管理或 System 共享 Knowledge API 的 `postKnowledgeHitTest`; 测试期间冻结参数与输入;结果使用 `MkSourceCard` 展示分段、得分、文档名称及命中图片,Markdown 只读。 点击结果卡片按需挂载 `ParagraphDialog`,按命中分段的知识库和文档 ID 加载详情,关闭动画后卸载;保存正文后同步当前结果,保留检索得分。 “本次查询”展示成功请求的文本与图片快照,图片位于文本上方,缩略图自动换行并支持预览,不使用横向滚动。 -初始与无命中分别展示空态;请求失败由请求层提示,保留输入与已有结果供重试。切换知识库或资源范围通过路由 key 重建召回测试页,隔离查询与结果状态。 +初始与无命中分别展示空态;请求失败由请求层提示,保留输入与已有结果供重试。 ### 文档列表与导入 @@ -279,6 +283,7 @@ View 负责路由、资源与模式、图加载、保存/发布/调试编排 创建模板由资源创建流程负责,取消/失败保留模板中心。 - 调试与导出先保存未提交修改,保存失败不继续;打开历史、模板或默认模型时按原流程关闭调试。 - 智能体复用对话模块 DebugPanel;工具使用 debug Drawer、SSE 和执行详情;知识库保留任务轮询与导入 Action。 + 智能体画布按 Workspace/System 资源管理选择详情、保存、发布、模型和历史 API;DebugPanel 尚未按 System 范围适配。 客户端停止读取不等于服务端停止任务。 - 知识库导出仅工作流 `.kbwf`;导入确认覆盖后直接上传,不先保存旧草稿,成功重载;取消/失败保留图。 正式导入文档要求已发布;转换使用 Knowledge API,保留已有文档,不能用保存代替转换。 @@ -300,12 +305,12 @@ View 负责路由、资源与模式、图加载、保存/发布/调试编排 概览内暂时隐藏卡片详情入口,不接入排行抽屉、搜索、分页或导出。 - 触发器表单共用创建/编辑,保留任务 ID 和参数;资源模式固定单任务,完整输入定义不足时补查详情。 保存校验全部折叠任务;参数初始化不覆盖已配置值,移除事件引用时恢复自定义默认值。 -- 智能体/知识库对话用户页使用双栏布局和当前页授权;知识库从 context 取四范围 ChatUser API。 +- 智能体/知识库对话用户页使用双栏布局和当前页授权;智能体从 context 取 Workspace/System 资源管理 ChatUser API,知识库取四范围 API。 自动授权立即保存,手动保存只提交当前页;请求共用 loading 与 inert,失败保留勾选。 授权人数取 `authorized_count`,不以分页勾选推算。 - 对话日志筛选、导出使用同组查询;无勾选导出筛选结果,日期清空禁用导出。 - 清除策略使用专用接口、弹窗自身 loading;添加知识库固定所选对话 ID。 - `ChatLogDetailDrawer` 目前正文为空,上一条/下一条与跨页由页面管理。 + 清除策略通过当前范围 ChatLog API 保存、使用弹窗自身 loading;添加知识库固定所选对话 ID,选项使用当前范围 Knowledge/Document API。 + `ChatLogDetailDrawer` 使用现有 `LogConversation` 展示只读历史对话与执行详情,正文查询仍使用 Workspace API;上一条/下一条与跨页由页面管理。 - 外部检索页从 context 读取四范围 ExternalRetrieval API;Workspace 共享只读,禁用开关并阻止提交。 查询失败展示重新加载入口,不展示默认开关;保存期间使用 loading 与 inert,失败保留已保存配置。 知识库或资源范围变化时重新查询;示例与地址来自响应,只读展示/复制,不在前端拼接。 diff --git a/ui/src/views/application-detail/access/AccessSettingDrawer.vue b/ui/src/views/application-detail/access/AccessSettingDrawer.vue index da44fbbdaee..264763d68a6 100644 --- a/ui/src/views/application-detail/access/AccessSettingDrawer.vue +++ b/ui/src/views/application-detail/access/AccessSettingDrawer.vue @@ -1,7 +1,8 @@ diff --git a/ui/src/views/system/resource-management/application/index.vue b/ui/src/views/system/resource-management/application/index.vue index 80485f58101..7a123f68e8b 100644 --- a/ui/src/views/system/resource-management/application/index.vue +++ b/ui/src/views/system/resource-management/application/index.vue @@ -1,5 +1,6 @@