最近vue-treeselect使用的比较多,分享一波
可以用在表单里,也可以用在可编辑的表格内
这里以表单里的举例,
在main.js中引入
import ElTreeSelect from ‘el-tree-select’
import Treeselect from ‘@riophae/vue-treeselect’
import ‘@riophae/vue-treeselect/dist/vue-treeselect.css’
Vue.use(ElTreeSelect)
Vue.component(‘TreeSelect’, Treeselect)

最主要的几点就是:
1、绑值, :value=“form.astdeptId”,主要绑的就是id或者code,通过id或code找到对应的label回显
2、options是数据源,正常调接口获取就行了
3、append-to-body="true"这个最好加上,可能会遇到下拉的弹窗打不开或者只有一点点高的情况
4、normalizer就是把我们自己的后端返的数据格式按树插件需要的格式转换
5、select点击事件里赋值
6、插槽slot=“option-label” 是下拉框的值
7、插槽slot=“value-label” 是输入框回显的值

<el-form-item label="上级部门:">
              <TreeSelect
                :value="form.astdeptId"
                :options="zoneCodeOptions"
                clearable            
                no-options-text="暂无可用选项"
                :append-to-body="true"
                :normalizer="tenantIdnormalizer"
                open-direction="bottom"
                placeholder="请选择父级节点"
                @select="node => tenantIdHandleSelect(node)"
              >
                <div slot="option-label" slot-scope="{ node }" style="white-space: nowrap; font-size: 14px">
                  {{ node.raw.name ? node.raw.name : '' }}
                </div>
                <div slot="value-label" slot-scope="{ node }">{{ node.raw.name ? node.raw.name : '' }}</div>
              </TreeSelect>
            </el-form-item>

打印node,拿对应的id,label和children

 tenantIdnormalizer(node) {
  
      if (node.children && !node.children.length) {
        delete node.children
      }
      return {
        id: node.astdeptId,
        label: node.name,
        children: node.children,
      }
    },

赋值给 this.form.astdeptId

    tenantIdHandleSelect(node) {
      this.form.astdeptId = node.astdeptId
      this.form.name = node.name
    },
Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐