Skip to content

RegionPicker 地区选择

VRegionPicker 是受控的多级地区选择器。组件负责层级导航、快捷地区、禁用态、确认结果,以及根节点/子节点的异步加载反馈;接口实现、缓存、权限和坐标解析仍由业务层处理。

演示

活动地点尚未选择
动态接口 · 第 0 次请求/api/regions?parent=root等待请求

打开时请求根节点,选择父级后按 path 查询子级;浙江城市接口首次失败,用面板内“重试”恢复。

安装

bash
pnpm dlx @varo-ui/cli add --target h5 region-picker
pnpm dlx @varo-ui/cli add --target weapp region-picker

使用

vue
<script setup lang="ts">
import { shallowRef } from 'wevu'
import { VRegionPicker } from '@/components/ui/region-picker'

const visible = shallowRef(false)
const path = shallowRef([])
const options = [
  {
    label: '浙江省',
    value: 'zhejiang',
    children: [
      { label: '杭州市', value: 'hangzhou', latitude: 30.274, longitude: 120.155 }
    ]
  }
]
</script>

<template>
  <VRegionPicker
    v-model="path"
    v-model:visible="visible"
    :options="options"
    @confirm="saveRegion"
  />
</template>

动态接口加载

options 可以为空;面板打开时会调用一次 loadChildren({ path: [], level: 0 })。带 hasChildren: true 但尚无 children 的节点被选择后,会继续按完整 path 请求下一级。

vue
<script setup lang="ts">
import type { VaroRegionLoadContext } from '@/components/ui/region-picker.types'

async function loadChildren(context: VaroRegionLoadContext) {
  const parent = context.option?.value ?? 'root'
  const response = await regionApi.list({ parent, path: context.path })
  return response.items
}
</script>

<template>
  <VRegionPicker
    v-model="path"
    v-model:visible="visible"
    :load-children="loadChildren"
    :options="[]"
    error-text="地区服务暂时不可用"
    retry-text="重新请求"
    @load-error="reportRegionFailure"
  />
</template>

加载时列表输出 aria-busy;失败后保留当前面包屑并显示重试动作。组件会缓存当前实例已经返回的 children,不会再次请求同一已加载节点。

Props

PropTypeDefault说明
visiblebooleanfalse是否显示
modelValueRegionValue[][]已选路径
optionsVaroRegionOption[][]地区树
shortcutsVaroRegionShortcut[][]快捷地区路径
titlestring'选择地区'标题
placeholderstring'请选择'未选层级文案
loadingbooleanfalse加载态
loadChildrenVaroRegionLoaderundefined异步加载根节点或当前节点 children
errorTextstring'地区加载失败'加载错误文案
retryTextstring'重试'重试按钮文案
allowIntermediatebooleanfalse是否允许确认非叶子节点
confirmOnLeafbooleanfalse选择叶子节点后立即确认

Events

EventPayload说明
update:modelValueRegionValue[]更新路径
update:visibleboolean更新显示状态
changeVaroRegionSelection草稿路径变化
confirmVaroRegionSelection确认选择,包含标签和可选坐标
closevoid关闭
loadStartVaroRegionLoadContext开始加载根节点或子节点
loadSuccessVaroRegionLoadSuccess加载成功,包含返回 options
loadErrorVaroRegionLoadFailure加载失败,包含原始 error