el-checkbox角色多选组件

el-checkbox角色多选组件

封装组件checkbox,默认显示16个折叠展开形式

<template>
    <div>
        <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" class="myRedCheckBox">全部</el-checkbox>
        <el-checkbox-group v-model="roleIds" fill="#916DFD" @change="handleCheckedCitiesChange">
            <el-checkbox class="el-checkbox-width myRedCheckBox" v-for="item in showRoleList" :label="item.companyRoleId" :key="item.companyRoleId">{{ item.roleName }}</el-checkbox>
        </el-checkbox-group>
        <el-button type="text" v-if="controlVisible" @click="controlUnfoldBtn">展开</el-button>
        <el-button type="text" v-else @click="controlFoldBtn">收起</el-button>
    </div>
</template>

子组件数据展示

export default {
    data() {
        return {
            isIndeterminate: true,
            checkAll: false,
            roleIds: [],
            roleList: [],
            showRoleList: [], //展示角色
            partRoleList: [], //展示16个角色
            controlVisible: true,
            selectIds: [],
        };
    },

    mounted() {
        this.getRoleIds();
        this.roleIds = this.userIds;
    },
    props: {
        userIds: {
            type: Array,
            default: [],
        },
        placeId: {
            type: Number,
            default: 0
        }
    },
    watch: {
        roleIds: function (newVal, oldVal) {
            this.$emit("sendRolesList", newVal);
        },
        userIds: function (newVal, oldVal) {
            this.roleIds = newVal;
            if (this.roleIds.length == 0 && this.roleList.length == 0 && this.roleIds.length === this.roleList.length) {
                this.checkAll = false;
                this.isIndeterminate = true;
            } else if (this.roleIds.length === this.roleList.length) {
                this.checkAll = true;
                this.isIndeterminate = false;
            } else {
                this.checkAll = false;
                this.isIndeterminate = true;
            }
        },
        placeId: function (newVal, oldVal) {
            this.getRoleIds();
        }
    },
    computed: { ...mapGetters(["companyId"]) },

    methods: {
        // 获取角色
        getRoleIds() {
            GetRoleList({ companyId: this.companyId ? this.companyId : this.placeId })
                .then((res) => {
                this.roleList = res;
                this.partRoleList = this.roleList.slice(0, 12);
                this.showRoleList = this.partRoleList;
                if (this.roleIds.length === this.roleList.length) {
                    this.checkAll = true;
                    this.isIndeterminate = false;
                } else {
                    this.checkAll = false;
                    this.isIndeterminate = true;
                }
            })
                .catch((e) => {
                this.$message({
                    type: "error",
                    message: e.msg || "角色获取失败",
                });
            });
        },
        handleCheckAllChange(val) {
            this.selectIds = [];
            this.roleList.forEach((item) => {
                this.selectIds.push(item.companyRoleId);
            });
            this.roleIds = val ? this.selectIds : [];
            this.isIndeterminate = false;
        },
        handleCheckedCitiesChange(value) {
            this.selectIds = [];
            this.roleList.forEach((item) => {
                this.selectIds.push(item.companyRoleId);
            });
            let checkedCount = value.length;
            this.checkAll = checkedCount === this.selectIds.length;
            this.isIndeterminate =
                checkedCount > 0 && checkedCount < this.selectIds.length;
        },
        // 展开
        controlUnfoldBtn() {
            this.controlVisible = false;
            this.showRoleList = this.roleList;
        },
        // 折叠
        controlFoldBtn() {
            this.controlVisible = true;
            this.showRoleList = this.partRoleList;
        },
    },
};

可根据自己需要修改样式

<style scoped lang='scss'>
.el-checkbox-width {
    width: 150px; 每行放几个宽度
}
/* 设置带边框的checkbox,选中后边框的颜色 */
::v-deep .myRedCheckBox.is-bordered.is-checked {
    border-color: #916dfd;
}

/* 设置选中后的文字颜色 */
::v-deep .myRedCheckBox .el-checkbox__input.is-checked + .el-checkbox__label {
    color: #916dfd;
}

/* 设置选中后对勾框的边框和背景颜色 */
::v-deep .myRedCheckBox .el-checkbox__input.is-checked .el-checkbox__inner {
    border-color: #916dfd;
    background-color: #916dfd;
}
::v-deep
.myRedCheckBox
.el-checkbox__input.is-indeterminate
.el-checkbox__inner {
    border-color: #916dfd;
    background-color: #916dfd;
}

/* 设置checkbox获得焦点后,对勾框的边框颜色 */
::v-deep .myRedCheckBox .el-checkbox__input.is-focus .el-checkbox__inner {
    border-color: #916dfd;
}

/* 设置鼠标经过对勾框,对勾框边框的颜色 */
::v-deep .myRedCheckBox .el-checkbox__inner:hover {
    border-color: #916dfd;
}
</style>

使用该组件

<ShowRoles :placeId="id" :userIds="roleIds" @sendRolesList="getRoleUserIds"></ShowRoles>
export default {
    data() {
        return {
            roleIds: [],
            id: ''
        };
    },
    methods: {
        getRoleUserIds(val) {
            this.roleIds = val;
        },
    },
};
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: el-checkbox-group 是饿了么前端团队开发的一个多选组件,用于实现多选功能。 使用 el-checkbox-group 组件,需要先引入 Element UI 库,并在页面中注册组件。然后,可以在模板中使用 el-checkbox-group 标签来渲染多选组件,通过设置 v-model 属性来绑定选中的值。 例如: ``` <template> <el-checkbox-group v-model="checkedCities"> <el-checkbox label="北京"></el-checkbox> <el-checkbox label="上海"></el-checkbox> <el-checkbox label="广州"></el-checkbox> <el-checkbox label="深圳"></el-checkbox> </el-checkbox-group> </template> <script> export default { data() { return { checkedCities: [] }; } }; </script> ``` 在上面的例子中,el-checkbox-group 绑定了一个名为 checkedCities 的数组,用于存储选中的城市。当用户在页面中选中或取消选中一个多选框时,该数组会自动更新。 注意,如果需要设置多个 el-checkbox 组件的默认选中状态,可以在 el-checkbox 标签上设置 checked 属性。例如: ``` <el-checkbox label="北京" checked></el-checkbox> ``` 以上就是使用 el-checkbox-group 实现多选的基本方法。需要注意的是,el-checkbox-group 还有很多其他属性和方法,具体可以参考 Element UI 官方文档。 ### 回答2: El-checkbox-group是一种vue组件,用于实现多选操作。该组件通常与结构相似的el-checkbox结合使用,并且可以自由添加或删除选项。下面将介绍如何使用el-checkbox-group来实现多选。 首先,我们需要在vue组件中引入el-checkbox-group组件。在使用该组件之前,需要确保已经安装了element-ui组件库。 import { ElCheckbox, ElCheckboxGroup } from 'element-ui' 在html代码中,我们可以使用el-checkbox-group和el-checkbox来创建多选框组。el-checkbox-group通常需要绑定一个v-model属性来控制选中的选项。同时,el-checkbox也需要绑定一个v-model属性来表示是否选中该项。 <el-checkbox-group v-model="selectedOptions"> <el-checkbox v-for="option in options" :label="option" :key="option" v-model="isChecked">{{ option }}</el-checkbox> </el-checkbox-group> 在js代码中,我们需要定义两个变量:options表示可选项,selectedOptions表示已选项。 data() { return { options: ['选项1', '选项2', '选项3', '选项4'], selectedOptions: [], isChecked: false, } } 那么当我们在多选框中选中某一项时,isChecked变量会被设置为true,并且该选项会被自动添加到selectedOptions数组中。当我们再次点击该多选框时,isChecked变量会被设置为false,并且该选项也会从selectedOptions数组中移除。 至此,我们就成功地实现了多选功能。借助el-checkbox-group组件,我们可以轻松地实现多选操作,并且可以自由地添加或删除选项。同时,该组件还支持自定义样式和事件处理。 ### 回答3: el-checkbox-group是Element UI框架中的一个组件,用于实现多选功能。该组件是一组checkbox的集合,可以实现多选的场景。 要使用el-checkbox-group组件,首先需要在项目中导入Element UI框架的相关库和组件。然后,在代码中使用el-checkbox-group标签来创建一个多选组件,并设置相应的属性和方法,如下所示: ``` <template> <div> <p>请选择您喜欢的水果:</p> <el-checkbox-group v-model="fruits"> <el-checkbox label="apple">苹果</el-checkbox> <el-checkbox label="banana">香蕉</el-checkbox> <el-checkbox label="orange">橙子</el-checkbox> <el-checkbox label="watermelon">西瓜</el-checkbox> </el-checkbox-group> </div> </template> <script> export default { data() { return { fruits: [] // 初始化多选框的选项 } }, methods: { handleFruitsChange(val) { //选项变化时触发的函数 console.log(val); } } } </script> ``` 上述代码中,el-checkbox-group的v-model绑定了组件的选项,即fruits。Vue框架会自动监听数据的变化,从而实现多选框的选中操作。同时,handleFruitsChange方法可以监听多选框选项的变化,并且在控制台输出选中的选项。 在实际开发中,可以根据需要自定义多选框的选项和样式,并且可以通过事件监听实现复杂业务需求,例如实现多级选择、动态加载等跨越多个组件的逻辑。 总的来说,el-checkbox-group是Element UI框架中实现多选的核心组件之一,可以用于开发各种多选功能,并且易于使用和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值