AIoT前端公共UI

CheckGroupSlot.vue 1.5KB

    <!-- eslint-disable vue/no-mutating-props --> <template> <el-checkbox v-if="isCheckAll" v-model="checkAll" :indeterminate="isIndeterminate" @change="handleCheckAllChange" > {{ checkAllLabel }} </el-checkbox> <el-checkbox-group v-model="checkeds"> <el-checkbox v-for="(option, index) in options" :key="index" :label="option?.['value']" > {{ option?.['label'] }} </el-checkbox> </el-checkbox-group> </template> <script setup lang="ts"> import { ref, watch } from 'vue'; const emits = defineEmits(['changeValues']); // const checked = ref<any>([]); const props = defineProps({ options: { type: Array<any>, default: () => [] }, checkAllLabel: { type: String, default: () => '全选' }, // 是否有全选反选选项 isCheckAll: { type: Boolean, default: () => false }, checked: { type: Array<any>, default: () => [] } }); const checkeds = ref<any>(props.checked); const isIndeterminate = ref(false); const checkAll = ref<any>(false); function getAllValue() { const all = <any>[]; props.options.forEach((item: any) => all.push(item.value)); return all; } // 全选/全不选 function handleCheckAllChange(bol: any): void { checkeds.value = bol ? getAllValue() : []; isIndeterminate.value = false; } watch( checkeds.value, () => { emits('changeValues', checkeds.value); }, { deep: true } ); </script> <script lang="ts"> export default { name: 'CommonCheckGroup' }; </script> <style scoped lang="scss"></style>