Skip to content

AiCustomSelect 远程搜索选择器

基于 Naive UI n-select 封装的下拉选择器,支持远程搜索、本地/远程数据加载、单选/多选。

基本用法

vue
<template>
  <AiCustomSelect
    v-model:value="selectedValue"
    api="/system/user/list"
    label-field="userName"
    value-field="userId"
  />
</template>

<script setup>
import { AiCustomSelect } from '@/components/ai-form'
import { ref } from 'vue'

const selectedValue = ref(null)
</script>

远程搜索模式

vue
<AiCustomSelect
  v-model:value="user"
  api="/system/user/search"
  method="post"
  remote
  label-field="nickname"
  value-field="id"
  :params="{ status: 1 }"
/>

Props

属性类型默认值说明
valueString | Number | Arraynull当前选中值,支持 v-model:value
apiString''远程数据接口地址,如 /system/user/list
methodString'get'请求方法,getpost
labelFieldString'label'响应数据中作为显示文本的字段
valueFieldString'value'响应数据中作为值标识的字段
optionsArray[]静态选项数据(非远程模式直接使用)
paramsObject{}附加请求参数
remoteBooleanfalse是否启用远程搜索模式,每次输入触发 API 请求
multipleBooleanfalse是否开启多选
disabledBooleanfalse是否禁用
clearableBooleantrue是否可清空
filterableBooleantrue是否可搜索/筛选
placeholderString'请选择'占位文本
transformFunctionnull数据转换函数,用于将 API 原始响应转为 { label, value } 格式

透传所有 n-select 支持的属性(通过 v-bind="$attrs")。

Events

事件名参数说明
update:value(newValue)选中值变化,支持 v-model:value
change(value, selectedItem)选中值变化时触发。多选时 selectedItem 为匹配选项数组,单选时为单个选项对象

Expose 方法

方法名签名说明
loadData(searchQuery?: string) => Promise<void>从 API 加载数据,可选搜索关键词
refresh(searchQuery?: string) => Promise<void>loadData 的别名

数据格式

API 需返回包含 labelFieldvalueField 所指定字段的数组。若数据结构不标准,可使用 transform 转换:

vue
<AiCustomSelect
  api="/system/user/list"
  :transform="(list) => list.map(u => ({ label: u.nickname, value: u.userId }))"
/>

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架