From 1d4c1dfb1127c7bb79cf50d0e63f868a57f27d3e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=85=AC=E6=98=8E?=
<83812544+Ed1s0nZ@users.noreply.github.com>
Date: Mon, 12 Jan 2026 19:55:27 +0800
Subject: [PATCH] Add files via upload
---
web/static/js/roles.js | 74 +++++++++++++++++++++++++++++-------------
1 file changed, 51 insertions(+), 23 deletions(-)
diff --git a/web/static/js/roles.js b/web/static/js/roles.js
index f32016eb..deae556e 100644
--- a/web/static/js/roles.js
+++ b/web/static/js/roles.js
@@ -671,11 +671,13 @@ function updateRoleToolsStats() {
if (roleUsesAllTools) {
// 使用从API响应中获取的已启用工具总数
const totalEnabled = totalEnabledToolsInMCP || 0;
- // 当前页分母应该是当前页已启用的工具数,而不是所有工具数
- const currentPageDenominator = currentPageEnabledInMCP > 0 ? currentPageEnabledInMCP : document.querySelectorAll('#role-tools-list input[type="checkbox"]').length;
+ // 当前页分母应该是当前页的总工具数(每页20个),而不是当前页已启用的工具数
+ const currentPageTotal = document.querySelectorAll('#role-tools-list input[type="checkbox"]').length;
+ // 总工具数(所有工具,包括已启用和未启用的)
+ const totalTools = roleToolsPagination.total || 0;
statsEl.innerHTML = `
- ✅ 当前页已选中: ${currentPageEnabled} / ${currentPageDenominator}
- 📊 总计已选中: ${totalEnabled} / ${totalEnabled} (使用所有已启用工具)
+ ✅ 当前页已选中: ${currentPageEnabled} / ${currentPageTotal}
+ 📊 总计已选中: ${totalEnabled} / ${totalTools} (使用所有已启用工具)
`;
return;
}
@@ -720,12 +722,14 @@ function updateRoleToolsStats() {
});
}
- // 当前页分母应该是当前页已启用的工具数,而不是所有工具数
- const currentPageDenominator = currentPageEnabledInMCP > 0 ? currentPageEnabledInMCP : document.querySelectorAll('#role-tools-list input[type="checkbox"]').length;
+ // 当前页分母应该是当前页的总工具数(每页20个),而不是当前页已启用的工具数
+ const currentPageTotal = document.querySelectorAll('#role-tools-list input[type="checkbox"]').length;
+ // 总工具数(所有工具,包括已启用和未启用的)
+ const totalTools = roleToolsPagination.total || 0;
statsEl.innerHTML = `
- ✅ 当前页已选中: ${currentPageEnabled} / ${currentPageDenominator}
- 📊 总计已选中: ${totalSelected} / ${totalEnabledForRole}
+ ✅ 当前页已选中: ${currentPageEnabled} / ${currentPageTotal}
+ 📊 总计已选中: ${totalSelected} / ${totalTools}
`;
}
@@ -1142,7 +1146,7 @@ async function saveRole() {
saveCurrentRolePageToolStates();
// 收集所有选中的工具(包括未在MCP管理中启用的)
- const allSelectedTools = getAllSelectedRoleTools();
+ let allSelectedTools = getAllSelectedRoleTools();
// 如果是首次添加角色且没有选择工具,默认使用全部工具
if (isFirstUserRole && allSelectedTools.length === 0) {
@@ -1176,24 +1180,48 @@ async function saveRole() {
});
roleUsesAllTools = false;
+ } else {
+ // 即使使用所有工具,也需要加载所有工具到状态映射中,以便检查是否有未启用的工具被选中
+ // 这样可以检测用户是否手动选择了一些未启用的工具
+ await loadAllToolsToStateMap();
+
+ // 检查是否有未启用的工具被手动选中(enabled为true但mcpEnabled为false)
+ let hasDisabledToolsSelected = false;
+ roleToolStateMap.forEach((state) => {
+ if (state.enabled && state.mcpEnabled === false) {
+ hasDisabledToolsSelected = true;
+ }
+ });
+
+ // 如果没有未启用的工具被选中,将所有已启用的工具标记为选中(这是使用所有工具的默认行为)
+ if (!hasDisabledToolsSelected) {
+ roleToolStateMap.forEach((state) => {
+ if (state.mcpEnabled !== false) {
+ state.enabled = true;
+ }
+ });
+ }
+
+ // 更新 allSelectedTools,因为现在状态映射中包含了所有工具
+ allSelectedTools = getAllSelectedRoleTools();
+ }
+ }
+
+ // 检查哪些工具未在MCP管理中启用(无论是否使用所有工具都要检查)
+ disabledTools = getDisabledTools(allSelectedTools);
+
+ // 如果有未启用的工具,提示用户
+ if (disabledTools.length > 0) {
+ const toolNames = disabledTools.map(t => t.name).join('、');
+ const message = `以下 ${disabledTools.length} 个工具未在MCP管理中启用,无法在角色中配置:\n\n${toolNames}\n\n请先在"MCP管理"中启用这些工具,然后再在角色中配置。\n\n是否继续保存?(将只保存已启用的工具)`;
+
+ if (!confirm(message)) {
+ return; // 用户取消保存
}
}
// 如果使用所有工具,不需要获取工具列表
if (!roleUsesAllTools) {
- // 检查哪些工具未在MCP管理中启用
- disabledTools = getDisabledTools(allSelectedTools);
-
- // 如果有未启用的工具,提示用户
- if (disabledTools.length > 0) {
- const toolNames = disabledTools.map(t => t.name).join('、');
- const message = `以下 ${disabledTools.length} 个工具未在MCP管理中启用,无法在角色中配置:\n\n${toolNames}\n\n请先在"MCP管理"中启用这些工具,然后再在角色中配置。\n\n是否继续保存?(将只保存已启用的工具)`;
-
- if (!confirm(message)) {
- return; // 用户取消保存
- }
- }
-
// 获取选中的工具列表(只包含在MCP管理中已启用的工具)
tools = await getSelectedRoleTools();
}
@@ -1232,7 +1260,7 @@ async function saveRole() {
toolNames = toolNames.substring(0, 100) + '...';
}
showNotification(
- `${isEdit ? '角色已更新' : '角色已创建'},但已过滤 ${disabledTools.length} 个未在MCP管理中启用的工具。请先在"MCP管理"中启用这些工具,然后再在角色中配置。`,
+ `${isEdit ? '角色已更新' : '角色已创建'},但已过滤 ${disabledTools.length} 个未在MCP管理中启用的工具:${toolNames}。请先在"MCP管理"中启用这些工具,然后再在角色中配置。`,
'warning'
);
} else {