Skip to content

CpAutoComplete 自动补全

对齐旧版 AutoComplete-1.0.1下拉为多列表格形态(默认 代码 | 名称 两列,可通过 columns 扩展任意列),下拉顶部带列标题表头show-header 可关),匹配关键词红色加粗高亮,值取 Code,所有列字段大小写不敏感模糊匹配。

基础用法

基础用法
输入 sha 匹配代码 CNSHA(命中段红色加粗),输入「宁波」匹配名称;下拉为带表头的表格形态,列多时可对照标题。
显示代码 ▼

多选回填 + 搜索弹窗

多选回填 + 搜索弹窗
multiple 开启多选:选中值以逗号拼接,输入分隔符后按最后一段继续补全(旧版 delimiter 契约);dialog 显示放大镜按钮,唤起表格弹窗——打开时按输入框已有值自动勾选,弹窗内输入即自动搜索(es-toolkit 防抖,dialog-auto-search 可关),搜索到与关键词完全相等的行自动勾选,可连续搜索累积,确认后回填为 CAOZUO,cargoplus 形态(对应旧版「选中」弹窗)。
显示代码 ▼

远程检索与请求竞态

远程数据源用 load 接入,签名 (query, ctx) => Promise<rows>。组件对连续输入做了两层防护:

  1. 取消上一个请求ctx.signal 是标准 AbortSignal,透传给 fetch / axios / alova 即可
  2. 丢弃过期响应 — 按序号比对,只有最后一次输入的结果会进下拉

第 2 条才是正确性保证:abort() 只是尽力而为,响应若已在回程路上是拦不住的,此时仍要靠序号守卫把旧结果扔掉。所以即使请求库不支持取消,这个组件也不会出现旧结果覆盖新结果

请求节流沿用 el-autocomplete 自带的 debounce(默认 300ms),按需透传覆盖。

远程检索与请求竞态
左侧裸用 el-autocomplete 作对照:快速连续输入时,先发出的短关键词最后返回,把最新结果盖掉。右侧 CpAutoComplete 把 ctx.signal 交给 alova,旧请求被取消,漏网的过期响应也会被丢弃。
显示代码 ▼

请求库放在业务侧

组件只约定 load 契约,不绑定任何请求库 —— 你现有的鉴权、拦截器、错误处理照常复用。 demo 用的是 alova,桥接代码就一行:signal.addEventListener("abort", () => method.abort())

API

属性 Props

属性说明类型默认值
v-modelstring""
optionsRecord[]
load远程数据源。第二参数 ctx.signal 透传给请求库即可让上一次输入的请求被取消; 即便不取消,组件也会丢弃过期响应,不会出现旧结果覆盖新结果。 请求节流由 el-autocomplete 的 debounce 属性控制(默认 300ms,可透传覆盖)。CpLoader
code-fieldstring"Code"
name-fieldstring"Name"
columns下拉/弹窗表格列;默认 [codeField(110px), nameField]CpAutoColumn[]
placeholderstring
multiple多选回填:选中追加而非替换,值以 delimiter 拼接boolean
delimiter多值分隔符(对应旧版 delimiter 选项)string","
dialog显示输入框内搜索按钮,点击唤起选择弹窗boolean
dialog-titlestring"选中"
dialog-auto-search弹窗搜索框输入即自动检索(防抖 300ms),false 时需回车或点检索按钮booleantrue
show-header下拉顶部显示列标题表头(多列时标识每列含义)booleantrue

事件 Events

事件说明回调参数
@select(Record)
@confirm弹窗确认(多选时为全部勾选行)(Array)
@suggestions下拉建议已更新(过期响应不会触发)。 远程模式下的副作用请挂这里 —— 写在 load 内部的副作用发生在并发守卫之前, 过期请求同样会执行,导致界面被旧结果写脏。(Array)