cl-checkbox-group.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <view class="cl-checkbox-group">
  3. <slot></slot>
  4. </view>
  5. </template>
  6. <script>
  7. import Emitter from "../../mixins/emitter";
  8. import { cloneDeep } from "../../utils";
  9. /**
  10. * checkbox-group 多选框组
  11. * @description 多选框组
  12. * @tutorial https://docs.cool-js.com/uni/components/form/checkbox.html
  13. * @property {String, Number} value 绑定值
  14. * @property {Boolean} disabled 是否禁用
  15. * @property {Boolean} border 是否边框样式
  16. * @property {Boolean} round 是否圆角
  17. * @event {Function} change 绑定值改变时触发
  18. * @example <cl-checkbox-group v-model="arr"><cl-checkbox label="1" /><cl-checkbox label="2" /></cl-checkbox-group>
  19. */
  20. export default {
  21. name: "cl-checkbox-group",
  22. componentName: "ClCheckboxGroup",
  23. props: {
  24. // 绑定值
  25. value: {
  26. type: Array,
  27. default: () => [],
  28. },
  29. // 是否边框样式
  30. border: Boolean,
  31. // 是否禁用
  32. disabled: Boolean,
  33. // 是否圆角
  34. round: Boolean,
  35. },
  36. mixins: [Emitter],
  37. created() {
  38. // 监听多选框的变化
  39. this.$on("checkbox.change", (label) => {
  40. let index = this.value.findIndex((e) => e == label);
  41. let list = cloneDeep(this.value);
  42. if (index >= 0) {
  43. list.splice(index, 1);
  44. } else {
  45. list.push(label);
  46. }
  47. this.$emit("input", list);
  48. this.$emit("change", list);
  49. });
  50. },
  51. };
  52. </script>