1.0.2 • Published 2 years ago

element-mini-tree-transfer v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

插件说明

  • 该插件是在vue2和element环境下的简易树穿梭框组件
  • 安装:npm i element-mini-tree-transfer

  • 使用方法如下案例

<template>
    <tree-transfer
        ref="treeTransfer"
        :title="treeTitle"
        :from_data.sync="fromData"
        :right_data.sync="toData"
        :defaultProps="{ label: 'label' }"
        @add-btn="add"
        @remove-btn="remove"
        @left-check-change="handleLeftCheckChange"
        height="540px"
        filter
        openAll
        :defaultCheckedKeys="defaultValue"
        :rightOptions="rightOptions"
        :isRadio="isRadio"
    ></tree-transfer>
</template>

<script>
    import treeTransfer from 'element-mini-tree-transfer'
    export default {
        name: 'DemoTreeTransfer',
        components: {
            treeTransfer
        },
        props: {},
        data() {
            return {
                isRadio: false, //树穿梭框是否单选
                //树穿梭框的参数
                fromData: [
                    {
                        label: '数据中心',
                        deptCode: '200',
                        deptName: '数据中心',
                        id: '1',
                        children: [
                            {
                                label: '小红',
                                children: [],
                                id: '1-1',
                                nickName: '小红',
                                supCode: '200',
                                userId: '1-1',
                            },
                            {
                                label: '小明',
                                children: [],
                                id: '1-2',
                                nickName: '小明',
                                supCode: '200',
                                userId: '1-2',
                            },
                            {
                                label: '小王',
                                children: [],
                                id: '1-3',
                                nickName: '小王',
                                supCode: '200',
                                userId: '1-3',
                            },
                        ],
                    },
                    {
                        label: '开发中心',
                        deptCode: '201',
                        deptName: '开发中心',
                        id: '2',
                        children: [
                            {
                                label: '小绿',
                                children: [],
                                id: '2-1',
                                nickName: '小绿',
                                supCode: '201',
                                userId: '2-1',
                            },
                            {
                                label: '小黄',
                                children: [],
                                id: '2-2',
                                nickName: '小黄',
                                supCode: '201',
                                userId: '2-2',
                            },
                            {
                                label: '小蓝',
                                children: [],
                                id: '2-3',
                                nickName: '小蓝',
                                supCode: '201',
                                userId: '2-3',
                            },
                        ],
                    },
                ],
                toData: [],
                defaultValue: [],

                rightOptions: { suffix: '', connector: '' },
                treeTitle: ['人员选择', '已有人员'],
            }
        },
        computed: {},
        watch: {},
        created() {},
        mounted() {
            this.getChoosePeople()
        },
        methods: {
            //获取已选人
            getChoosePeople() {
                let list = JSON.parse(JSON.stringify(this.fromData))
                this.toData = [
                    {
                        deptCode: '200',
                        deptName: '数据中心',
                        phone: '18953249201',
                        userId: '1-2',
                        nickName: '小明',
                        label: '小明',
                        id: '1-2',
                    },
                ]
                this.defaultValue = this.toData.map(item => item.id)
                if (this.isRadio && this.toData.length > 0) {
                    //回显判断如果是单选,左侧树全部disable
                    this.$refs.treeTransfer.setDisable(list)
                    this.fromData = list
                } else if (!this.isRadio && this.toData.length > 0) {
                    //回显判断如果是多选,选择的disable
                    this.$refs.treeTransfer.chooseDisable(
                        this.defaultValue,
                        list,
                    )
                    this.fromData = list
                }
            },

            // 监听穿梭框组件添加
            add(fromData) {
                console.log('add:', fromData)
            },
            // 监听穿梭框组件移除
            remove(fromData) {
                console.log('remove:', fromData)
            },
              // 左侧树选项改变
            handleLeftCheckChange(fromData) {
                console.log('handleLeftCheckChange:', fromData)
            }
            
        },
    }
</script>

<style scoped></style>

:::

基础属性

参数说明类型默认值补充
width宽度String100%建议在外部盒子设定宽度和位置
height高度String320px-
title标题String"源列表", "目标列表"-
button_text按钮名字Array--
from_data源数据Array-数据格式同element-ui tree组件,但必须有id
right_data目标数据Array-数据格式同element-ui tree组件,但必须有id
rightOptions目标数据配置项Object{suffix: String, connector: String}suffix-> label后想要拼接的字段(如id,即取此条数据的id拼接在后方)默认suffix connector -> 连接符(字符串)默认-
defaultProps配置项-同el-tree中propsObject{ label: "label", children: "children", isLeaf: "leaf", disable: "disable" }用法和el-tree的props一样
node_key自定义node-key的值,默认为idStringid必须与treedata数据内的id参数名一致,必须唯一
filter是否开启筛选功能Booleanfalse根据defaultProps参数的label字段筛选
openAll是否默认展开全部Booleanfalse存在性能问题
defaultCheckedKeys默认选中节点Arrayfalse只匹配初始时默认节点,不会在你操作后动态改变默认节点
placeholder设置搜索框提示语String输入关键词进行筛选-
filterNode自定义搜索函数Function-不传则仍默认根据defaultProps参数的label字段筛选
defaultExpandedKeys默认展开节点Array-要展开的节点id数组,会自动去重生效在左右两侧
checkStrictly是否父子不关联Booleanfalse此模式不支持lazy,返回的fromData和toData是最新数据,obj里面的keys,nodes不完整。且对删空子节点后的父节点左右两边处理逻辑有差异:当授权时既然要在右边出现,必然需要左侧父节点,而删除授权时,移除子权限并不代表想移除父权限
renderAfterExpand是否在第一次展开某个树节点后才渲染其子节点Booleantrue-
expandOnClickNode是否在点击节点的时候展开或者收缩节点Booleantrue-
checkOnClickNode是否在点击节点的时候选中节点Booleanfalse-
icon-class自定义树节点的图标String--
isRadio左侧树是否为单选Booleanfalse-

事件

事件名称说明回调参数
add-btn点击添加按钮时触发的事件function(fromData) fromData 为添加的数据
remove-btn点击移除按钮时触发的事件function(fromData) fromData 为移除的数据
left-check-change左侧源数据勾选事件function(nodeObj, treeObj, checkAll)见el-tree组件check事件返回值, 新增checkAll参数表示是否全部选中

方法

方法名称说明
clearChecked清除选中节点
getChecked获取选中数据
setChecked设置选中数据 function(Keys = [])

如果觉得有帮到你,可以点一个 star🌟 支持一下~

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.9.0

2 years ago