diff --git a/plugins/manager/client/components/index.vue b/plugins/manager/client/components/index.vue
index cb22c76..6e22222 100644
--- a/plugins/manager/client/components/index.vue
+++ b/plugins/manager/client/components/index.vue
@@ -41,16 +41,16 @@
请在左侧选择插件
-
+
{{ currentEntry.name }}
正在加载插件信息……
-
+
{{ currentEntry.name }}
- 插件信息失败,这可能是插件本身的问题所致。
+ 插件信息失败,这可能是插件本身的问题所致。请检查错误日志。
diff --git a/plugins/manager/client/index.ts b/plugins/manager/client/index.ts
index 3e2f56c..ee5ad51 100644
--- a/plugins/manager/client/index.ts
+++ b/plugins/manager/client/index.ts
@@ -49,10 +49,11 @@ export interface SubRoute {
title: string | ((params: any) => string)
label?: string | ((params: any) => string)
component: any
- hidden?(entry: EntryData, params: any): boolean
+ hidden?(entry: EntryData): boolean
list?(entry: EntryData): any[]
indent?: number
params?: Dict
+ order?: number
}
export default class Manager extends Service {
@@ -136,8 +137,8 @@ export default class Manager extends Service {
* getRoutes(entry: EntryData) {
for (const route of this.routes) {
const matrix = route.list?.(entry) ?? [undefined]
+ if (route.hidden?.(entry)) continue
for (const params of matrix) {
- if (route.hidden?.(entry, params)) continue
const path = route.path.replace(/:(\w+)/g, (_, $1) => params[$1] ?? '')
const title = typeof route.title === 'function' ? route.title(params) : route.title
const label = route.label ? typeof route.label === 'function' ? route.label(params) : route.label : title
@@ -242,12 +243,14 @@ export default class Manager extends Service {
path: '',
title: '概览',
component: MainPage,
+ order: -Infinity,
})
this.subroute({
path: 'config',
title: '配置',
component: ConfigPage,
+ order: -500,
hidden: (entry) => {
return !hasSchema(this.data.value.packages[entry.name]?.runtime?.schema)
},
@@ -258,6 +261,7 @@ export default class Manager extends Service {
title: '服务管理',
label: '服务',
component: ServicesPage,
+ order: 500,
hidden: (entry) => {
return !this.data.value.packages[entry.name]?.runtime
},
@@ -268,12 +272,13 @@ export default class Manager extends Service {
title: ({ name }) => '服务:' + name,
label: ({ name }) => name,
component: InterceptPage,
+ order: 600,
hidden: (entry) => {
return !this.data.value.packages[entry.name]?.runtime
},
list: (entry) => {
const inject = {
- ...Inject.resolve(this.data.value.packages[entry.name]!.runtime!.inject),
+ ...Inject.resolve(this.data.value.packages[entry.name]?.runtime?.inject),
...Inject.resolve(entry.inject),
}
return Object.keys(inject).map(name => ({ name }))
@@ -451,9 +456,15 @@ export default class Manager extends Service {
}
subroute(options: SubRoute) {
+ options.order ??= 0
options.component = this.ctx.wrapComponent(options.component)
return this.ctx.effect(() => {
- this.routes.push(options)
+ const index = this.routes.findIndex(route => route.order! > options.order!)
+ if (index === -1) {
+ this.routes.push(options)
+ } else {
+ this.routes.splice(index, 0, options)
+ }
return () => remove(this.routes, options)
})
}
diff --git a/plugins/manager/client/routes/main.vue b/plugins/manager/client/routes/main.vue
index 01d9df8..082ee8f 100644
--- a/plugins/manager/client/routes/main.vue
+++ b/plugins/manager/client/routes/main.vue
@@ -1,11 +1,12 @@
{{ current.name }}
- {{ local.manifest.description }}
+
+
-
+
-
+
此插件将会提供 {{ name }} 服务,但此服务已被其他插件实现。
@@ -34,7 +35,7 @@
-
+
此插件已在运行且不可重用,启用可能会导致非预期的问题。
@@ -44,7 +45,7 @@
-
+
@@ -55,12 +56,7 @@
-
-
-
-
-
-
+
{{ configState[1] }}
@@ -80,16 +76,21 @@