1. 为什么需要封装树形选择组件
在移动端企业级应用中,人员组织架构选择是个高频场景。传统的下拉选择器面对多层级的部门树时,用户体验往往很糟糕——要么需要反复点开多级菜单,要么无法快速定位目标节点。我在最近的一个HR系统项目中就遇到了这个问题:当用户需要选择跨部门的200多名员工时,原生选择器的操作效率低到令人崩溃。
Vant4作为移动端UI库,虽然提供了基础的Tree组件,但直接使用会存在几个痛点:首先,默认不支持关键词搜索,用户要在几百个节点中手动展开查找;其次,缺少业务状态筛选(如在职/离职);最重要的是没有父子节点联动勾选功能,批量选择整个部门时得一个个勾选。这些正是我们需要基于Vant4二次封装的原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础组件结构与数据准备
2.1 组件框架搭建
我们先搭建基础结构,使用Vue3的<script setup>语法:
javascript复制<template>
<van-field
v-model="selectedNames"
is-link readonly
@click="showTreePicker"
/>
<van-popup v-model:show="showPicker" position="bottom">
<!-- 搜索框和树形区域 -->
</van-popup>
</template>
<script setup>
import { ref, reactive } from 'vue'
const showPicker = ref(false)
const selectedNames = ref('')
const showTreePicker = () => {
showPicker.value = true
}
</script>
这里用VanField作为触发入口,点击后弹出带树形选择的Popup。这种交互模式符合移动端操作习惯,比PC端的直接展开更节省屏幕空间。
2.2 树形数据标准化处理
实际业务数据往往不是标准树形结构。我们需要将扁平数组转换为嵌套树,同时建立快速查询的映射表:
javascript复制const normalizeTree = (list) => {
const tre
