From eb7bc7722b40efcd880f582cd9d5d67e3d8bd4bb Mon Sep 17 00:00:00 2001 From: MerCry Date: Thu, 5 Mar 2026 17:25:15 +0800 Subject: [PATCH] feat: add field_roles configuration and role filter to metadata schema page [AC-MRS-06,15] --- ai-service-admin/src/api/metadata-schema.ts | 21 +++- .../metadata/FieldRolesSelector.vue | 114 ++++++++++++++++++ ai-service-admin/src/types/metadata.ts | 18 +++ .../src/views/admin/metadata-schema/index.vue | 62 +++++++++- 4 files changed, 210 insertions(+), 5 deletions(-) create mode 100644 ai-service-admin/src/components/metadata/FieldRolesSelector.vue diff --git a/ai-service-admin/src/api/metadata-schema.ts b/ai-service-admin/src/api/metadata-schema.ts index b091a4a..a0bc59d 100644 --- a/ai-service-admin/src/api/metadata-schema.ts +++ b/ai-service-admin/src/api/metadata-schema.ts @@ -5,12 +5,20 @@ import type { MetadataFieldUpdateRequest, MetadataFieldListResponse, MetadataPayload, - MetadataScope + MetadataScope, + FieldRole } from '@/types/metadata' export const metadataSchemaApi = { - list: (status?: 'draft' | 'active' | 'deprecated') => - request({ method: 'GET', url: '/admin/metadata-schemas', params: status ? { status } : {} }), + list: (status?: 'draft' | 'active' | 'deprecated', fieldRole?: FieldRole) => + request({ + method: 'GET', + url: '/admin/metadata-schemas', + params: { + ...(status ? { status } : {}), + ...(fieldRole ? { field_role: fieldRole } : {}) + } + }), get: (id: string) => request({ method: 'GET', url: `/admin/metadata-schemas/${id}` }), @@ -31,6 +39,13 @@ export const metadataSchemaApi = { params: { scope, include_deprecated: includeDeprecated } }), + getByRole: (role: FieldRole, includeDeprecated = false) => + request({ + method: 'GET', + url: '/admin/metadata-schemas/by-role', + params: { role, include_deprecated: includeDeprecated } + }), + validate: (metadata: MetadataPayload, scope?: MetadataScope) => request<{ valid: boolean; errors?: { field_key: string; message: string }[] }>({ method: 'POST', diff --git a/ai-service-admin/src/components/metadata/FieldRolesSelector.vue b/ai-service-admin/src/components/metadata/FieldRolesSelector.vue new file mode 100644 index 0000000..8e383ec --- /dev/null +++ b/ai-service-admin/src/components/metadata/FieldRolesSelector.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/ai-service-admin/src/types/metadata.ts b/ai-service-admin/src/types/metadata.ts index ef48250..a466033 100644 --- a/ai-service-admin/src/types/metadata.ts +++ b/ai-service-admin/src/types/metadata.ts @@ -1,6 +1,7 @@ export type MetadataFieldType = 'string' | 'number' | 'boolean' | 'enum' | 'array_enum' export type MetadataFieldStatus = 'draft' | 'active' | 'deprecated' export type MetadataScope = 'kb_document' | 'intent_rule' | 'script_flow' | 'prompt_template' +export type FieldRole = 'resource_filter' | 'slot' | 'prompt_var' | 'routing_signal' export interface MetadataFieldDefinition { id: string @@ -14,6 +15,7 @@ export interface MetadataFieldDefinition { scope: MetadataScope[] is_filterable: boolean is_rank_feature: boolean + field_roles: FieldRole[] status: MetadataFieldStatus created_at?: string updated_at?: string @@ -29,6 +31,7 @@ export interface MetadataFieldCreateRequest { scope: MetadataScope[] is_filterable?: boolean is_rank_feature?: boolean + field_roles?: FieldRole[] status: MetadataFieldStatus } @@ -40,6 +43,7 @@ export interface MetadataFieldUpdateRequest { scope?: MetadataScope[] is_filterable?: boolean is_rank_feature?: boolean + field_roles?: FieldRole[] status?: MetadataFieldStatus } @@ -91,3 +95,17 @@ export const STATUS_TAG_MAP: Record = { + resource_filter: '', + slot: 'success', + prompt_var: 'warning', + routing_signal: 'danger' +} diff --git a/ai-service-admin/src/views/admin/metadata-schema/index.vue b/ai-service-admin/src/views/admin/metadata-schema/index.vue index a374fa4..ce623bc 100644 --- a/ai-service-admin/src/views/admin/metadata-schema/index.vue +++ b/ai-service-admin/src/views/admin/metadata-schema/index.vue @@ -15,6 +15,14 @@ :value="opt.value" /> + + + 新建字段 @@ -57,6 +65,22 @@ + + +