AiRecordSelectorModal 记录选择器弹窗
模态框形式的业务记录选择器,支持远程搜索、多选、字段映射确认。常用于关联数据选择场景(如选择关联客户、关联订单等)。
基本用法
vue
<template>
<AiRecordSelectorModal
v-model:show="showSelector"
object-code="Customer"
:display-fields="['name', 'phone', 'address']"
:keyword-fields="['name', 'phone']"
multiple
@confirm="handleConfirm"
/>
</template>
<script setup>
import { AiRecordSelectorModal } from '@/components/ai-form'
import { ref } from 'vue'
const showSelector = ref(false)
const handleConfirm = ({ rows, mappings }) => {
console.log('选中记录:', rows)
console.log('字段映射:', mappings)
}
</script>带字段映射的选择
vue
<AiRecordSelectorModal
v-model:show="showSelector"
object-code="Order"
:display-fields="['orderNo', 'customerName', 'totalAmount']"
:field-mappings="[
{ sourceField: 'orderNo', targetField: 'relatedOrderNo' },
{ sourceField: 'customerName', targetField: 'relatedCustomer' }
]"
@confirm="handleConfirm"
/>Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
show | Boolean | false | 控制弹窗显示/隐藏,支持 v-model:show |
title | String | '选择记录' | 弹窗标题 |
objectCode | String | '' | 目标对象编码(首选) |
businessObjectCode | String | '' | 业务对象编码(objectCode 为空时备选) |
targetObjectCode | String | '' | 目标对象编码(备选) |
targetEntityCode | String | '' | 目标实体编码(备选) |
candidateObjectCode | String | '' | 候选对象编码(备选) |
referenceObjectCode | String | '' | 引用对象编码(备选) |
refObjectCode | String | '' | 引用对象编码(备选) |
sourceObjectCode | String | '' | 源对象编码(备选) |
targetCode | String | '' | 目标编码(备选) |
suiteCode | String | '' | 业务套件编码 |
displayFields | Array | [] | 表格中显示的字段列表 |
keywordFields | Array | [] | 搜索关键词应用的目标字段 |
fieldMappings | Array | Object | [] | 源字段到目标字段的映射配置 |
searchParams | Object | {} | 附加搜索参数,支持 ${context.path} 模板语法 |
runtimeContext | Object | {} | 解析 searchParams 中模板表达式的运行时上下文 |
multiple | Boolean | false | 是否启用多选模式 |
pageSize | Number | 10 | 每页显示条数 |
objectCode 解析优先级:
objectCode→businessObjectCode→targetObjectCode→targetEntityCode→candidateObjectCode→referenceObjectCode→refObjectCode→sourceObjectCode→targetCode,取第一个非空值。
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
update:show | (visible: Boolean) | 弹窗显示状态变更 |
confirm | ({ rows, mappings }) | 点击"确定"时触发,rows 为选中行数组,mappings 为规范化后的字段映射 |
Slots
| 插槽名 | 说明 |
|---|---|
footer | 自定义弹窗页脚,默认显示「已选 N 条」计数 + 取消/确定按钮 |
工具函数
js
import {
normalizeSelectorMappings,
applyRecordFieldMappings,
resolveSelectorSearchParams,
normalizeRecordSelectorConfig
} from '@/components/ai-form/record-selector-utils'normalizeSelectorMappings(mappings)— 将字段映射规范化为{ sourceField, targetField }格式applyRecordFieldMappings(rows, mappings)— 将映射应用到选中行resolveSelectorSearchParams(params, context)— 解析搜索参数中的${context.path}模板normalizeRecordSelectorConfig(config)— 规范化选择器配置对象
