mirror of
https://github.com/youzan/vant.git
synced 2025-10-16 16:04:04 +00:00
53 lines
1.1 KiB
JavaScript
53 lines
1.1 KiB
JavaScript
import { createNamespace } from '../utils';
|
|
import { FieldMixin } from '../mixins/field';
|
|
import { ParentMixin } from '../mixins/relation';
|
|
|
|
const [createComponent, bem] = createNamespace('checkbox-group');
|
|
|
|
export default createComponent({
|
|
mixins: [ParentMixin('vanCheckbox'), FieldMixin],
|
|
|
|
props: {
|
|
max: [Number, String],
|
|
disabled: Boolean,
|
|
direction: String,
|
|
iconSize: [Number, String],
|
|
checkedColor: String,
|
|
value: {
|
|
type: Array,
|
|
default: () => [],
|
|
},
|
|
},
|
|
|
|
watch: {
|
|
value(val) {
|
|
this.$emit('change', val);
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
// @exposed-api
|
|
toggleAll(options = {}) {
|
|
if (typeof options === 'boolean') {
|
|
options = { checked: options };
|
|
}
|
|
|
|
const { checked, skipDisabled } = options;
|
|
|
|
const children = this.children.filter((item) => {
|
|
if (item.disabled && skipDisabled) {
|
|
return item.checked;
|
|
}
|
|
return checked ?? !item.checked;
|
|
});
|
|
|
|
const names = children.map((item) => item.name);
|
|
this.$emit('input', names);
|
|
},
|
|
},
|
|
|
|
render() {
|
|
return <div class={bem([this.direction])}>{this.slots()}</div>;
|
|
},
|
|
});
|