美文网首页
element-ui树形控件(tree)将父级半选状态id和选中

element-ui树形控件(tree)将父级半选状态id和选中

作者: 程序员小杰 | 来源:发表于2020-03-08 14:01 被阅读0次

    一、视图代码

     <el-collapse v-model="activeName"
                             v-loading="loading"
                             element-loading-text="正在加载..."
                             element-loading-spinner="el-icon-loading"
                             element-loading-background="rgba(0, 0, 0, 0.8)"
                             accordion
                             @change="change">
                    <el-collapse-item :title="r.nameZh" :name="r.id" v-for="(r,index) in roles" :key="index">
                        <el-card class="box-card">
                            <div slot="header" class="clearfix">
                                <span>可访问的资源</span>
                                <el-button style="float: right; padding: 3px 0;color: #ff0000;" icon="el-icon-delete"
                                           type="text" @click="deleteRole(r)"></el-button>
                            </div>
                            <div>
                                <el-tree
                                        show-checkbox
                                        node-key="id"
                                        ref="tree"
                                        :key="index"
                                        :default-checked-keys="checkedKeys"
                                        :data="allmenus"
                                        :props="defaultProps"></el-tree>
                                <div style="display: flex;justify-content: flex-end">
                                    <el-button @click="cancelUpdate">取消修改</el-button>
                                    <el-button type="primary" @click="doUpdate(r.id,index)">确认修改</el-button>
                                </div>
                            </div>
                        </el-card>
                    </el-collapse-item>
                </el-collapse>
    

    样式图:


    image.png

    我这里使用了几个element的组件,Collapse 折叠面板、Card 卡片、Tree 树形控件。

    虽然代码贴了这么多,但是只需要注意几个地方。


    image.png

    Collapse 折叠面板的chang事件

     change(rid) {
        //rid是当前角色id
                    if (rid) {
                        this.initAllMenus(rid);
                    }
                },
      initAllMenus(rid) {
                    this.getRequest("/api/system/basic/permiss/getAllMenu").then(resp => {
                        if (resp) {
                            //allmenus  所有的菜单
                            this.allmenus = resp;
                            console.log(this.allmenus)
                            //选中的菜单数据  防止有缓存先清空在赋值
                            this.checkedKeys = [];
                            //获得当前角色拥有的菜单
                            this.initSelectedMenus(rid);
                        }
                    })
                },
    
    //根据角色id 查询所拥有的菜单
                initSelectedMenus(rid) {
                    this.getRequest("/api/system/basic/permiss/mid/" + rid).then(resp => {
                        if (resp) {
                            var arr = resp;//后台返回的id组成的数组
                            console.log("后台返回的id组成的数组")
                            console.log(arr)
                            var newArr = [];
                            var item = '';
                            arr.forEach(item=>{
                               this.checked(item,this.allmenus,newArr)
                           })
                            this.checkedKeys = newArr;
                            console.log("进行处理选择的菜单")
                            console.log(this.checkedKeys)
                        }
                    })
                },
    //回显处理
    checked(id,data,newArr){
                    data.forEach(item => {
                    if(item.id == id){
                        if( item.children.length == 0 ){
                            newArr.push(item.id)
                        }
                    }else{
                        if( item.children.length !=0 ){
                            this.checked(id,item.children,newArr)
                        }
                    }
            });
        },
    
    //修改
     doUpdate(rid, index) {
                    let tree = this.$refs.tree[index];
                    let getHalfCheckedKeys =  tree.getHalfCheckedKeys();  //父级id
                    let selectedKeys = tree.getCheckedKeys(false);  //全选中时会将父级id传入
                    let allKey = getHalfCheckedKeys.concat(selectedKeys);
                    console.log("将父级id和子级id传入")
                   console.log(allKey)
                    let url = '/api/system/basic/permiss/?rid=' + rid;
                    allKey.forEach(key => {
                        url += '&menuIds=' + key;
                    })
                    this.putRequest(url).then(resp => {
                        if (resp) {
                            this.activeName = -1;
                        }
                    })
                },
    

    二、复制

    上面贴了这么多,我是想让你们看的比较清楚。

      let getHalfCheckedKeys =  tree.getHalfCheckedKeys();  //父级id
      let selectedKeys = tree.getCheckedKeys(false);  //全选中时会将父级id传入
      let allKey = getHalfCheckedKeys.concat(selectedKeys);
    
    
    var arr = resp;//后台返回的id组成的数组
    console.log("后台返回的id组成的数组")
    console.log(arr)
    var newArr = [];
    var item = '';
    arr.forEach(item=>{
        this.checked(item,this.allmenus,newArr)
        })
    this.checkedKeys = newArr;
    console.log("进行处理选择的菜单")
    console.log(this.checkedKeys)      
              
    
    
    
    //回显处理
    checked(id,data,newArr){
                    data.forEach(item => {
                    if(item.id == id){
                        if( item.children.length == 0 ){
                            newArr.push(item.id)
                        }
                    }else{
                        if( item.children.length !=0 ){
                            this.checked(id,item.children,newArr)
                        }
                    }
            });
        },
    

    注意:保证this.allmenus必须有值。你们需要将this.allmenus改成你们自己变量。

    image.png image.png

    1、2、3分别是所有、员工资料、人事管理的id。
    7、9分别是基本资料、员工资料的id。


    image.png

    相关文章

      网友评论

          本文标题:element-ui树形控件(tree)将父级半选状态id和选中

          本文链接:https://www.haomeiwen.com/subject/dayddhtx.html