diff --git a/apps/jingrow/frontend/src/shared/stores/tools.ts b/apps/jingrow/frontend/src/shared/stores/tools.ts index 588222a..176201b 100644 --- a/apps/jingrow/frontend/src/shared/stores/tools.ts +++ b/apps/jingrow/frontend/src/shared/stores/tools.ts @@ -2,7 +2,7 @@ import { defineStore } from 'pinia' import { computed, ref } from 'vue' import type { Router } from 'vue-router' import { t } from '../i18n' -import { registerToolRoute, unregisterToolRoute, registerAllToolRoutes } from '../utils/dynamicRoutes' +import { registerToolRoute, unregisterToolRoute, registerAllToolRoutes, ensureToolRoutes } from '../utils/dynamicRoutes' export interface Tool { id: string @@ -130,15 +130,18 @@ export const useToolsStore = defineStore('tools', () => { t => !hiddenDefaultToolIds.value.includes(t.id) ).length - tool.order = defaultToolsCount + userTools.value.length + 1 - tool.isDefault = false - userTools.value.push(tool) + // 确保工具具有 routeName 和 routePath(如果缺失则自动生成) + // 这样保存到 localStorage 的数据也会包含这些字段 + const toolWithRoutes = ensureToolRoutes({ ...tool }) + + toolWithRoutes.order = defaultToolsCount + userTools.value.length + 1 + toolWithRoutes.isDefault = false + userTools.value.push(toolWithRoutes) saveUserTools(userTools.value) - // 如果是路由类型工具,注册路由(如果提供了 router) - // routeName 会在 registerToolRoute 中自动生成 - if (tool.type === 'route' && router) { - registerToolRoute(router, tool, componentPath) + // 注册路由(如果提供了 router) + if (router) { + registerToolRoute(router, toolWithRoutes, componentPath) } } @@ -165,8 +168,8 @@ export const useToolsStore = defineStore('tools', () => { }) saveUserTools(userTools.value) - // 如果是路由类型工具,移除路由(如果提供了 router) - if (tool?.type === 'route' && tool.routeName && router) { + // 移除路由(如果提供了 router) + if (tool && tool.routeName && router) { unregisterToolRoute(router, tool.routeName) } } diff --git a/apps/jingrow/frontend/src/shared/utils/dynamicRoutes.ts b/apps/jingrow/frontend/src/shared/utils/dynamicRoutes.ts index 6fdb910..4e2e3d5 100644 --- a/apps/jingrow/frontend/src/shared/utils/dynamicRoutes.ts +++ b/apps/jingrow/frontend/src/shared/utils/dynamicRoutes.ts @@ -30,21 +30,23 @@ function generateRoutePath(toolName: string): string { /** * 确保工具具有 routeName 和 routePath(如果缺失则自动生成) + * 优先使用 tool.marketplaceId(即 tool_name),如果没有则使用 tool.name(工具显示名称) + * 这样从市场安装的工具会使用 tool_name,手动添加的工具会使用 name */ -function ensureToolRoutes(tool: Tool): Tool { - if (tool.type === 'route') { - // 如果没有 routeName,基于 tool.id 或 tool.name 生成 - if (!tool.routeName) { - const baseName = tool.id || tool.name - tool.routeName = generateRouteName(baseName) - } - - // 如果没有 routePath,基于 tool.id 或 tool.name 生成 - if (!tool.routePath) { - const baseName = tool.id || tool.name - tool.routePath = generateRoutePath(baseName) - } +export function ensureToolRoutes(tool: Tool): Tool { + // 确定基础名称:优先使用 marketplaceId(即 tool_name,稳定标识符),如果没有则使用 name(工具显示名称),最后回退到 id + const baseName = tool.marketplaceId || tool.name || tool.id + + // 如果没有 routeName,基于基础名称生成 + if (!tool.routeName) { + tool.routeName = generateRouteName(baseName) } + + // 如果没有 routePath,基于基础名称生成 + if (!tool.routePath) { + tool.routePath = generateRoutePath(baseName) + } + return tool } @@ -62,7 +64,8 @@ export function registerToolRoute( // 确保工具具有 routeName 和 routePath const toolWithRoutes = ensureToolRoutes({ ...tool }) - if (toolWithRoutes.type !== 'route' || !toolWithRoutes.routeName) { + // 如果没有 routeName,无法注册路由 + if (!toolWithRoutes.routeName) { return false } @@ -135,8 +138,8 @@ export function unregisterToolRoute(router: Router, routeName: string): boolean * @param tools 工具列表 */ export function registerAllToolRoutes(router: Router, tools: Tool[]): void { - // 过滤出路由类型的工具(routeName 会在 registerToolRoute 中自动生成) - const routeTools = tools.filter(t => t.type === 'route' && !t.isDefault) + // 过滤出用户工具(routeName 会在 registerToolRoute 中自动生成) + const routeTools = tools.filter(t => !t.isDefault) routeTools.forEach(tool => { registerToolRoute(router, tool) diff --git a/apps/jingrow/frontend/src/views/Tools.vue b/apps/jingrow/frontend/src/views/Tools.vue index cd40a1a..efb1656 100644 --- a/apps/jingrow/frontend/src/views/Tools.vue +++ b/apps/jingrow/frontend/src/views/Tools.vue @@ -106,7 +106,7 @@ - + @@ -127,16 +127,8 @@ - - - - - + + - - - - -