ai-robot-core/ai-service-admin/src/components/metadata/FieldRolesSelector.vue

115 lines
2.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="field-roles-selector">
<label class="selector-label">
字段角色
<el-tooltip content="为字段分配角色,工具将按角色精准消费字段" placement="top">
<el-icon class="help-icon"><QuestionFilled /></el-icon>
</el-tooltip>
</label>
<el-checkbox-group v-model="selectedRoles" class="roles-checkbox-group">
<el-checkbox
v-for="role in availableRoles"
:key="role.value"
:value="role.value"
class="role-checkbox"
>
<div class="role-item">
<span class="role-label">{{ role.label }}</span>
<el-tooltip :content="role.description" placement="top">
<el-icon class="role-help-icon"><QuestionFilled /></el-icon>
</el-tooltip>
</div>
</el-checkbox>
</el-checkbox-group>
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue'
import { QuestionFilled } from '@element-plus/icons-vue'
import type { FieldRole } from '@/types/metadata'
const props = defineProps<{
modelValue: FieldRole[]
}>()
const emit = defineEmits<{
(e: 'update:modelValue', value: FieldRole[]): void
}>()
const availableRoles: { value: FieldRole; label: string; description: string }[] = [
{
value: 'resource_filter',
label: '资源过滤',
description: '用于 KB 文档检索时的元数据过滤kb_search_dynamic 工具将消费此类字段'
},
{
value: 'slot',
label: '运行时槽位',
description: '对话流程中的结构化槽位用于信息收集memory_recall 工具将消费此类字段'
},
{
value: 'prompt_var',
label: '提示词变量',
description: '注入到 LLM Prompt 中的变量template_engine 将消费此类字段'
},
{
value: 'routing_signal',
label: '路由信号',
description: '用于意图路由和风险判断的信号intent_hint/high_risk_check 工具将消费此类字段'
}
]
const selectedRoles = computed({
get: () => props.modelValue || [],
set: (val: FieldRole[]) => emit('update:modelValue', val)
})
</script>
<style scoped lang="scss">
.field-roles-selector {
width: 100%;
}
.selector-label {
display: flex;
align-items: center;
gap: 4px;
font-size: 14px;
color: var(--el-text-color-regular);
margin-bottom: 8px;
}
.help-icon {
font-size: 14px;
color: var(--el-text-color-secondary);
cursor: help;
}
.roles-checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 12px;
}
.role-checkbox {
margin-right: 0 !important;
}
.role-item {
display: flex;
align-items: center;
gap: 4px;
}
.role-label {
font-size: 14px;
}
.role-help-icon {
font-size: 12px;
color: var(--el-text-color-secondary);
cursor: help;
}
</style>