diff --git a/package.json b/package.json index e5bd71f..077122b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shrimp-admin", - "version": "0.3.2", + "version": "0.3.3", "private": true, "description": "Shrimp 框架前端 — 消费 ShrimpServer + ShrimpTable 契约的经典 Vue3 + Element Plus 实现", "main": "src/index.ts", diff --git a/src/VueAdmin.ts b/src/VueAdmin.ts index 85e7fbd..5e82bda 100644 --- a/src/VueAdmin.ts +++ b/src/VueAdmin.ts @@ -123,11 +123,19 @@ export class VueAdmin extends ShrimpClient { userName = '' config: ShrimpAdminConfig langList: { lang: string; name: string }[] + /** 已注册成功的模块路由(moduleKey → IRouteInfo),供 relation 跳转/单项查看解析路由 */ + moduleRoutes = new Map() getFieldComponent(_moduleKey: string, type: string, _fieldKey?: string): Component { return fieldRegistry.get(type) || fieldRegistry.get('string')! } + /** 目标模块能否作为「单项查看」跳转目标:已按权限注册路由 且 非子模块。返回其路由信息或 undefined(不可跳) */ + routeForModule(moduleKey: string): IRouteInfo | undefined { + if (this.moduleInfo.find(m => m.moduleKey === moduleKey)?.parent) return undefined + return this.moduleRoutes.get(moduleKey) + } + state = reactive({ isMobile: false }) private _token: string | null = null @@ -256,6 +264,7 @@ export class VueAdmin extends ShrimpClient { props: { moduleKey: info.moduleKey, events: info.events }, meta: { title: info.label } }) + this.moduleRoutes.set(info.moduleKey, info) } initRouter() { diff --git a/src/components/fields/FieldRelation.vue b/src/components/fields/FieldRelation.vue index a1bae2c..f31b2a7 100644 --- a/src/components/fields/FieldRelation.vue +++ b/src/components/fields/FieldRelation.vue @@ -1,7 +1,13 @@