Skip to content

useLevel - 层级处理

useLevel 是一个层级处理 Hook,用于多级联动选择器的数据管理,支持异步数据加载和级联选择。

特性

  • 多级联动: 支持多层级的数据联动
  • 异步加载: 支持异步数据获取
  • 数据缓存: 内置数据缓存机制
  • 选择验证: 支持选择项验证
  • 自定义渲染: 支持自定义选择器渲染

基础用法

导入

typescript
import { useLevel } from '@duxweb/dvha-pro'

基本使用

typescript
const level = useLevel({
  path: 'area',
  value: ['110000', '110100', '110101'],
  maxLevel: 4,
  nameField: 'name',
  labelField: 'name',
  valueField: 'id'
})

// 获取当前选择的值和选项
const { value, options, loading } = level

// 设置选择值
level.setValue(['110000', '110100', '110101'])

// 重置选择
level.reset()

API 参考

UseLevelProps

属性类型默认值说明
valueMaybeRef<string[]>[]当前选择的值数组
pathMaybeRef<string>'area'数据接口路径
maxLevelMaybeRef<number>4最大层级数,0表示无限级
nameFieldstring'name'父级查询字段名
labelFieldstring'name'显示标签字段名
valueFieldstring'id'值字段名

UseLevelResult

字段类型说明
valuesRef<any[]>选择的值
optionsRef<any[][]>选项数据
loadingRef<boolean>加载状态
setValueFunction设置选择值
resetFunction重置选择

使用示例

vue
<script setup>
import { useLevel } from '@duxweb/dvha-pro'
import { NSelect } from 'naive-ui'

const level = useLevel({
  api: '/api/regions',
  levels: ['province', 'city', 'district']
})

const { values, options, loading } = level
</script>

<template>
  <div class="flex gap-4">
    <NSelect
      v-model:value="values[0]"
      :options="options[0]"
      :loading="loading"
      placeholder="请选择省份"
    />
    <NSelect
      v-model:value="values[1]"
      :options="options[1]"
      :loading="loading"
      placeholder="请选择城市"
    />
    <NSelect
      v-model:value="values[2]"
      :options="options[2]"
      :loading="loading"
      placeholder="请选择区县"
    />
  </div>
</template>