From 2a112f9253af52b25cc2bd8684b9d0263460992d Mon Sep 17 00:00:00 2001 From: npmrun <1549469775@qq.com> Date: Thu, 6 Aug 2026 09:37:24 +0800 Subject: [PATCH] feat: add adminOnly field to agent tools and update related API endpoints - Added adminOnly field to CreateAgentToolInput and UpdateAgentToolInput interfaces. - Updated API endpoints to handle adminOnly field in agent tools. - Modified getEnabledToolInfos and getEnabledToolsForLlm functions to filter tools based on user role. - Enhanced the chat tools API to retrieve enabled tools considering user roles. - Updated migration journal to include new patch for adminOnly feature. --- app/components/AgentToolFormModal.vue | 8 + app/components/TopNav.vue | 2 +- app/pages/admin/agent-tools/index.vue | 35 +- app/pages/ideas/index copy.vue | 1125 ++++++++++++ app/pages/ideas/index.vue | 541 ++++++ app/pages/index.vue | 41 + app/pages/index/index copy.vue | 1125 ------------ app/pages/index/index.vue | 541 ------ packages/drizzle-pkg/db.sqlite | Bin 614400 -> 614400 bytes packages/drizzle-pkg/lib/schema/agent-tool.ts | 1 + .../drizzle-pkg/migrations/0016_broken_patch.sql | 1 + .../drizzle-pkg/migrations/meta/0016_snapshot.json | 1885 ++++++++++++++++++++ packages/drizzle-pkg/migrations/meta/_journal.json | 7 + server/api/agent-tools/[id].put.ts | 3 +- server/api/agent-tools/index.post.ts | 3 +- server/api/llm/chat/index.post.ts | 2 +- server/api/llm/chat/tools.get.ts | 6 +- server/service/agent-tool/index.ts | 18 +- 18 files changed, 3669 insertions(+), 1675 deletions(-) create mode 100644 app/pages/ideas/index copy.vue create mode 100644 app/pages/ideas/index.vue create mode 100644 app/pages/index.vue delete mode 100644 app/pages/index/index copy.vue delete mode 100644 app/pages/index/index.vue create mode 100644 packages/drizzle-pkg/migrations/0016_broken_patch.sql create mode 100644 packages/drizzle-pkg/migrations/meta/0016_snapshot.json diff --git a/app/components/AgentToolFormModal.vue b/app/components/AgentToolFormModal.vue index a1df3c2..eaf05d0 100644 --- a/app/components/AgentToolFormModal.vue +++ b/app/components/AgentToolFormModal.vue @@ -34,6 +34,7 @@ const form = reactive({ inputSchema: "", enabled: props.tool ? props.tool.enabled === 1 : true, needsApproval: props.tool ? props.tool.needsApproval === 1 : false, + adminOnly: props.tool ? props.tool.adminOnly === 1 : false, sortOrder: props.tool?.sortOrder ?? 0, }) @@ -92,6 +93,7 @@ async function save() { config: parsedConfig, enabled: form.enabled ? 1 : 0, needsApproval: form.needsApproval ? 1 : 0, + adminOnly: form.adminOnly ? 1 : 0, sortOrder: Number(form.sortOrder) || 0, } @@ -191,6 +193,12 @@ function onOverlayClick(e: MouseEvent) { 需要审批 +
+ +
diff --git a/app/components/TopNav.vue b/app/components/TopNav.vue index 0929731..f506225 100644 --- a/app/components/TopNav.vue +++ b/app/components/TopNav.vue @@ -9,7 +9,7 @@ const { loggedIn, user, clear, initialized } = useAuthSession() const { config: globalConfig } = useGlobalConfig() const links: any = [ - { to: "/", label: "首页" }, + { to: "/ideas", label: "创意" }, { to: "/projects", label: "项目" }, { to: "/articles", label: "文章" }, { to: "/collect", label: "收藏" }, diff --git a/app/pages/admin/agent-tools/index.vue b/app/pages/admin/agent-tools/index.vue index 55f3b29..16d3505 100644 --- a/app/pages/admin/agent-tools/index.vue +++ b/app/pages/admin/agent-tools/index.vue @@ -8,6 +8,7 @@ interface AgentToolRow { config: string enabled: number needsApproval: number + adminOnly: number sortOrder: number createdAt: string updatedAt: string @@ -82,6 +83,19 @@ async function handleToggleApproval(tool: AgentToolRow) { } } +async function handleToggleAdminOnly(tool: AgentToolRow) { + try { + await $fetch(`/api/agent-tools/${tool.id}`, { + method: "PUT", + body: { adminOnly: !tool.adminOnly }, + }) + $toast.success(tool.adminOnly ? "已设为所有人可用" : "已设为仅管理员可用") + refresh() + } catch (e: any) { + $toast.error(e?.data?.message ?? "操作失败") + } +} + function openEdit(tool: AgentToolRow) { editingTool.value = tool showFormModal.value = true @@ -134,13 +148,14 @@ function onExecuteClose() { 类型 状态 审批 + 权限 排序 操作 - 暂无工具 + 暂无工具 @@ -161,6 +176,11 @@ function onExecuteClose() { {{ t.needsApproval ? '需审批' : '直接执行' }} + + + {{ t.adminOnly ? '仅管理员' : '所有人' }} + + {{ t.sortOrder }}
@@ -171,6 +191,9 @@ function onExecuteClose() { +
@@ -390,6 +413,16 @@ function onExecuteClose() { color: #666; } +.badge-admin-only { + background: #fef0f0; + color: #e53e3e; +} + +.badge-all-users { + background: #f0f0f0; + color: #666; +} + .sort-cell { color: var(--color-muted); font-size: 13px; diff --git a/app/pages/ideas/index copy.vue b/app/pages/ideas/index copy.vue new file mode 100644 index 0000000..3970b77 --- /dev/null +++ b/app/pages/ideas/index copy.vue @@ -0,0 +1,1125 @@ + + + + + diff --git a/app/pages/ideas/index.vue b/app/pages/ideas/index.vue new file mode 100644 index 0000000..1ea5f3d --- /dev/null +++ b/app/pages/ideas/index.vue @@ -0,0 +1,541 @@ + + +