Skip to content

SmartAddress 智能地址解析

集成智能解析算法的地址填写组件。支持从一段文字(粘贴的快递地址)中自动提取姓名、电话、省市区及详细地址并自动填充表单。 省市区功能内置三种展现形态(输入框、下拉框、级联选择),并天然支持后端返回的标准树形数据源结构。

基础用法 (输入框模式)

默认情况下,省市区为三个输入框,粘贴地址信息到输入框(例如:张三 13800138000 广东省深圳市南山区某某大厦101),点击「智能识别」。

基础用法

下拉框模式 (Select)

设置 `region-type="select"` 并传入 `region-options` 数据源。此时省市区表现为并列的三个下拉框,能够根据前一个框的配置产生上下级联动。

广东省
深圳市
南山区
下拉联动选择

级联组件模式 (Cascader)

设置 region-type="cascader" 并传入数据源,这常用于使用一体化的级联下拉面板进行深层地区选取。

级联地址选择

自定义字段与 Code 绑定

在实际业务中,后端返回的数据源字段名可能不是 label/value(如使用 name/code),且 v-model 绑定的通常是行政区划代码。 通过设置 label-fieldvalue-field 可以灵活兼容各种数据结构,组件内部会自动处理从“中文解析结果”到“对应 Code 值”的映射。

440000
440300
440305
自定义字段与 Code

标签位置 (Label Placement)

通过设置 `label-placement="top"` 可以将标签切换到输入框上方展示,适用于窄屏或特定的表单布局。

顶部对齐标签

在 Nuxt 中使用

该组件完全支持 Nuxt 3/4 的 SSR(服务端渲染)。在 Nuxt 项目中建议配合 @yh-ui/nuxt 模块使用。

Nuxt 中使用

配置方式

在你的 nuxt.config.ts 中配置好模块即可自动注册样式和组件:

ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@yh-ui/nuxt'],
  yhUI: {
    // 按需添加你所需的组件或者开启全局
    components: ['YhSmartAddress']
  }
})

API

Props

属性名说明类型默认值
model-value / v-model当前地址值AddressValue{ name: '', phone: '', ... }
region-type省市区输入形态'input' | 'select' | 'cascader''input'
region-options省市区级联数据源RegionOption[][]
label-field选项的标签字段名string'label'
value-field选项的值字段名string'value'
children-field选项的子级字段名string'children'
show-name是否显示姓名字段booleantrue
show-phone是否显示电话字段booleantrue
show-street是否显示街道字段booleanfalse
show-parser是否显示智能解析区域booleantrue
parse-placeholder智能解析框的占位符string
parse-button-text智能解析按钮文字string'智能识别'
required是否为必填项booleanfalse
disabled是否禁用整个组件booleanfalse
label-placement标签展示位置'left' | 'top''left'
parser自定义解析函数(raw: string) => ParsedAddress
theme-overrides主题变量覆盖Record<string, string>

Events

事件名说明回调参数
update:modelValue数据值变化时触发(val: AddressValue) => void
parsed智能解析完成后触发(val: ParsedAddress) => void
change任意字段变更时触发(val: AddressValue) => void

Slots

插槽名说明参数
parse-icon智能解析按钮左侧的图标插槽
region省市区输入区域的自定义插槽{ value, update }
extra组件底部的额外扩展区域插槽{ value, update }

Expose

当前组件未暴露公开实例方法或属性。

Types

AddressValue

typescript
interface AddressValue {
  name: string
  phone: string
  province: string
  city: string
  district: string
  street: string
  detail: string
}

RegionOption

typescript
interface RegionOption {
  label?: string // 标签字段
  value?: string | number // 绑定值字段
  children?: RegionOption[] // 子级字段
  [key: string]: unknown // 支持任意自定义字段
}

ParsedAddress

typescript
interface ParsedAddress {
  name: string
  phone: string
  province: string
  city: string
  district: string
  street: string
  detail: string
}

主题变量

变量名说明默认值
--yh-smart-address-parser-bg智能识别区域背景var(--yh-color-primary-light-9)
--yh-smart-address-input-bg输入框背景var(--yh-fill-color-blank)
--yh-smart-address-parse-btn-bg识别按钮背景var(--yh-color-primary)
--yh-smart-address-tip-success识别成功提示颜色var(--yh-color-success)
--yh-smart-address-tip-error识别失败提示颜色var(--yh-color-danger)
--yh-smart-address-label-width表单标签宽度72px

类型导出

名称说明
YhSmartAddressProps组件 Props 类型
YhSmartAddressEmits组件事件类型
YhSmartAddressSlots组件插槽类型
YhAddressValue地址值类型
YhRegionOption地区选项类型
YhParsedAddress智能解析结果类型
YhSmartAddressInstance组件实例类型

Released under the MIT License.