Skip to content

RegionPicker 地区选择器

基础用法

  • 从底部弹出的省/市/县三级行政区划滚动选择器,基于 sn-drawer + sn-region-picker-view 封装(视图懒渲染,首开性能更佳),内置中国省市区数据,无需业务传入数据源。
  • v-model 绑定各区划代码数组(String[],按列顺序排列);change 事件额外携带 SnRegionDetail(含 codes 与对应 names)。
  • 仅点击「确定」按钮才把当前选择写入 v-model 并触发 change 事件;点击「取消」、遮罩或关闭按钮均不写入。
  • mode 控制显示省、市、县(区)列的组合,支持汉字或位掩码;列始终以省开头(mode 未含省时自动补充省列)。直辖市在市列显示自身,区县列为其下辖区县。
  • 省列变化时市/县列自动级联重置为该级首项;v-model 为空时自动填充各级首项。
  • 使用时需放在 sn-page 根节点下。
vue
<template>
	<sn-region-picker ref="pickerEle" v-model="value" title="请选择地区" @change="onChange"></sn-region-picker>
</template>

更多演示请下载 demo 查看

模式组合

mode 属性控制显示省、市、县(区)列的组合,支持传入汉字或位掩码数字:

  • 汉字组合:支持 / 等价),如 省市省县
  • 位掩码1 省、2 市、4 县(区),可传按位或运算表达式的结果(如 7 即省市县),也支持英文 province / city / county 混合写法。
vue
<template>
	<sn-region-picker v-model="value1" mode="省市"></sn-region-picker>
	<sn-region-picker v-model="value2" :mode="1"></sn-region-picker>
	<sn-region-picker v-model="value3" :mode="7"></sn-region-picker>
</template>

默认 mode7(省市县)。

过滤项

传入 customFilter 函数可对各列选项数组进行过滤(如剔除特定省份)。此函数在每一列均会执行一次,请做好条件判断。

函数类型:(type: SnRegionLevel, columns: SnDataItem[]) => SnDataItem[]

  • type:当前列类型,为 province / city / county 枚举值。
  • columns:当前列的子项列表(SnDataItem[]id 为区划代码、text 为区划名称)。
vue
<template>
	<sn-region-picker v-model="value" :custom-filter="filter"></sn-region-picker>
</template>
<script lang="uts" setup>
	const filter = (type: SnRegionLevel, columns: SnDataItem[]): SnDataItem[] => {
		if (type == 'province') {
			return columns.filter((item: SnDataItem): boolean => item.id != '110000')
		}
		return columns
	}
</script>

属性

参数说明类型默认值可选值
v-model选中地区的区划代码数组(按省、市、县列顺序)SnRegionValue[]-
mode选择器模式(详见模式组合)String | Number7-
customFilter自定义过滤项函数(详见过滤项)Functionnull-
disabled是否禁用选择器(选项不可滚动、按钮不可点击)Booleanfalsetrue | false
maskClose是否可以通过点击蒙层关闭选择器Booleantruetrue | false
maskOpacity蒙层透明度Number0.40~1
preventBack是否阻止返回键/返回手势关闭选择器Booleanfalsetrue | false
height选择器整体高度(含标题与按钮区域)String | Number350px-
title选择器标题,为空时不显示标题String--
titleAlign标题对齐方式Stringcenterleft | center | right
titleColor标题颜色String$title-
titleSize标题大小String | Number$14-
cancelText取消按钮文字String取消-
confirmText确定按钮文字String确定-
cancelTextSize取消按钮文字大小String | Number$14-
confirmTextSize确定按钮文字大小String | Number$14-
showCancel是否显示取消按钮Booleantruetrue | false
showConfirm是否显示确定按钮Booleantruetrue | false
showClose是否显示右上角关闭按钮Booleantruetrue | false
columnSpacing列之间的间距String | Number10px-
actionSpacing取消/确定按钮之间的间距String | Number10px-
itemHeight选项高度String | Number$50-
itemBorderRadius选项圆角大小String | Number$8-
itemTextColor选项文字颜色String$textLight(亮色模式)/ $lineText(暗黑模式)-
itemTextSize选项文字大小String | Number$13-
activeItemTextColor激活选项文字颜色String$text-
disabledItemTextColor禁用选项文字颜色String$disabledText-
customStyle自定义根节点样式UTSJSONObject | String--
headerStyle自定义标题栏样式UTSJSONObject | String--
headerClass外部样式类String--
titleStyle自定义标题样式UTSJSONObject | String--
titleClass外部样式类String--
closeButtonStyle自定义关闭按钮样式UTSJSONObject | String--
closeButtonClass外部样式类String--
actionsStyle自定义底部按钮栏样式UTSJSONObject | String--
actionsClass外部样式类String--
cancelButtonStyle自定义取消按钮样式UTSJSONObject | String--
cancelButtonClass外部样式类String--
confirmButtonStyle自定义确定按钮样式UTSJSONObject | String--
confirmButtonClass外部样式类String--
itemStyle自定义选项样式UTSJSONObject | String--
itemClass外部样式类String--
columnStyle自定义列样式UTSJSONObject | String--
columnClass外部样式类String--

选中值(v-model):各级区划代码数组。

类型说明
string[]各级区划代码数组

事件

名称类型说明
change(value: SnRegionValue, detail: SnRegionDetail) => Void点击确定后,选中值写入 v-model 时触发,detail 含代码与名称
confirm() => Void点击确定按钮时触发(在 change 之前触发)
cancel() => Void点击取消按钮时触发
open() => Void选择器打开后触发
close() => Void选择器关闭后触发
clickoverlay() => Void点击蒙层时触发
beforeenter() => Void进入动画开始前触发
enter() => Void进入动画开始时触发
afterenter() => Void进入动画结束后触发
beforeleave() => Void离开动画开始前触发
leave() => Void离开动画开始时触发
afterleave() => Void离开动画结束后触发

change 事件返回详情。

名称类型必填描述
codesString[]选中各级区划代码
namesString[]选中各级区划名称(无对应项时为空字符串)

方法

名称参数返回值描述
open--打开选择器(打开前会将 v-model 当前值复制为内部临时值,仅确定后才写回)
close--关闭选择器

sn-region-picker-view 地区选择器容器

sn-region-picker-view 基于 sn-picker-view 封装,是地区选择的核心视图,可独立在页面内使用。滚动选择实时生效,change 防抖 120ms 后触发。

vue
<template>
	<sn-region-picker-view v-model="value" @change="onChange"></sn-region-picker-view>
</template>

sn-region-picker-view 属性

参数说明类型默认值可选值
v-model选中地区的区划代码数组(按列顺序)SnRegionValue[]-
mode选择器模式(同 sn-region-picker)String | Number7-
customFilter自定义过滤项函数Functionnull-
disabled是否禁用选择器容器Booleanfalsetrue | false
height选择器容器高度String | Number250px-
itemHeight选项高度String | Number$50-
itemBorderRadius选项圆角大小String | Number$8-
itemTextColor选项文字颜色String$textLight(亮色模式)/ $lineText(暗黑模式)-
itemTextSize选项文字大小String | Number$13-
activeItemTextColor激活选项文字颜色String$text-
disabledItemTextColor禁用选项文字颜色String$disabledText-
columnSpacing列间距String | Number10px-
customStyle自定义根节点样式UTSJSONObject | String--
customClass自定义根节点外部样式类String--
itemStyle自定义选项样式UTSJSONObject | String--
itemClass外部样式类String--
columnStyle自定义列样式UTSJSONObject | String--
columnClass外部样式类String--

sn-region-picker-view 事件

名称类型说明
change(value: SnRegionValue, detail: SnRegionDetail) => Void滚动选择后触发(防抖 120ms),detail 含代码与名称

类型

SnRegionLevel

'province' | 'city' | 'county' —— 列类型枚举。

行政区划节点。

名称类型必填描述
codeString行政区划代码
nameString区划名称
childrenSnRegionNode[]下级区划

SnRegionValue

String[]:选中地区各级区划代码数组(按列顺序)。

使用 MIT 协议