Skip to content

Checkbox 复选按钮

介绍

多选按钮用于选择。

基础用法

html
<template>
  <mot-checkbox v-model="checkbox1" label="复选框">复选框</mot-checkbox>
  <mot-checkbox v-model="checkbox2" text-position="left">复选框</mot-checkbox>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkbox1: false,
        checkbox2: false
      });
      return { ...toRefs(state) };
    }
  };
</script>
<style lang="scss">
  .mot-checkbox {
    display: flex;
    margin-right: 20px;
    .mot-checkbox__label {
      margin-left: 10px;
    }
  }
</style>

半选状态

html
<template>
  <mot-cell>
    <mot-checkbox v-model="checkbox9" :indeterminate="true" label="复选框">复选框</mot-checkbox>
  </mot-cell>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkbox9: true
      });
      return { ...toRefs(state) };
    }
  };
</script>

禁用状态

html
<template>
  <mot-checkbox v-model="checkbox3" disabled>未选时禁用状态</mot-checkbox>
  <mot-checkbox v-model="checkbox4" disabled>选中时禁用状态</mot-checkbox>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkbox3: false,
        checkbox4: true,
      });
      return { ...toRefs(state) };
    }
  };
</script>

自定义尺寸

html
<template>
  <mot-checkbox v-model="checkbox5" icon-size="25">自定义尺寸25</mot-checkbox>
  <mot-checkbox v-model="checkbox6" icon-size="10">自定义尺寸10</mot-checkbox>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkbox5: true,
        checkbox6: true,
      });
      return { ...toRefs(state) };
    }
  };
</script>

自定义图标

通过slot自定义图标,建议同时设置iconcheckedIcon两个插槽

html
<template>
  <mot-checkbox v-model="checkbox7" >
    自定义图标
    <template #icon> <mot-icon  name="check-list" /> </template>
    <template #checkedIcon> <mot-icon  name="check-list" color="red" /> </template>
  </mot-checkbox>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    setup() {
      const state = reactive({
        checkbox7: true,
      });
      return { ...toRefs(state) };
    }
  };
</script>

change事件

值发生变化时,将触发 change 事件

html
<template>
  <mot-checkbox v-model="checkbox" @change="changeBox3">change复选框</mot-checkbox>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkbox: false,
      });
      const changeBox3= (checked: boolean, label: string) => {
        console.log('change事件触发' + checked, label);
      } 
      return { ...toRefs(state), changeBox3 };
    }
  };
</script>

checkboxGroup使用

html
<template>
  <mot-checkbox-group v-model="checkboxgroup1">
    <mot-checkbox label="1">组合复选框</mot-checkbox>
    <mot-checkbox label="2">组合复选框</mot-checkbox>
    <mot-checkbox label="3">组合复选框</mot-checkbox>
    <mot-checkbox label="4">组合复选框</mot-checkbox>
  </mot-checkbox-group>
  <mot-cell>
    <div class="demo-check">当前选中值</div>
    <div>{{ checkboxgroup1 }}</div>
  </mot-cell>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkboxgroup1: ['2', '3'],
      });

      return { ...toRefs(state) };
    }
  };
</script>

checkboxGroup 全选/取消

html
<template>
  <mot-checkbox-group v-model="checkboxgroup3" ref="group" @change="changeBox4">
    <mot-checkbox v-for="item in checkboxsource" :key="item.label" :label="item.label">{{item.value}}</mot-checkbox>
  </mot-checkbox-group>
  <span class="btn">
    <mot-button type="primary" @click="toggleAll(true)" style="margin: 0 20px 0 0">全选</mot-button>
    <mot-button type="primary" @click="toggleAll(false)" style="margin: 0 20px 0 0">取消</mot-button>
    <mot-button type="warning" @click="toggleReverse()">反选</mot-button>
  </span>
</template>
<script lang="ts">
  import { reactive, toRefs, ref } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkboxgroup3: ['2'],
        checkboxsource: [
          {label: '1', value: '组合复选框'},
          {label: '2', value: '组合复选框'},
          {label: '3', value: '组合复选框'},
          {label: '4', value: '组合复选框'},
          {label: '5', value: '组合复选框'},
          {label: '6', value: '组合复选框'}
        ]
      });

      const group = ref(null);
      const changeBox4 = (label: any[]) => {
        console.log(`${label.length === state.checkboxsource.length ? '全选' : '取消全选'}`);
      };

      const toggleAll = (f: boolean) => {
        (group.value as any).toggleAll(f);
      };

      const toggleReverse = () => {
        console.log(`反选`);
        group.value.toggleReverse();
      };

      return { ...toRefs(state), group, changeBox4, toggleAll };
    }
  };
</script>

checkboxGroup使用,限制最大可选数(2个)

html
<template>
  <mot-cell-group title="checkboxGroup使用,限制最大可选数(2个)">
    <mot-cell>
      <mot-checkbox-group v-model="checkboxgroup4" :max="2">
        <mot-checkbox label="1" style="margin: 2px 20px 0 0">组合复选框</mot-checkbox>
        <mot-checkbox label="2">组合复选框</mot-checkbox>
        <mot-checkbox label="3" style="margin: 2px 20px 0 0">组合复选框</mot-checkbox>
        <mot-checkbox label="4">组合复选框</mot-checkbox>
      </mot-checkbox-group>
    </mot-cell>
    <mot-cell>
      <div class="demo-check">选中</div>
      <div>{{ checkboxgroup4 }}</div>
    </mot-cell>
  </mot-cell-group>
</template>
<script lang="ts">
  import { reactive, toRefs } from 'vue';
  export default {
    props: {},
    setup() {
      const state = reactive({
        checkboxgroup4: ['2']
      });

      return { ...toRefs(state) };
    }
  };
</script>

全选/半选/取消

html
<template>
  <mot-cell-group title="全选/半选/取消">
    <mot-cell>
      <mot-checkbox :indeterminate="indeterminate" v-model="checkbox10" @change="changeBox5">全选</mot-checkbox>
    </mot-cell>
    <mot-checkbox-group v-model="checkboxgroup5" ref="group2" @change="changeBox6">
      <mot-cell><mot-checkbox label="1" style="margin: 2px 20px 0 0">组合复选框</mot-checkbox></mot-cell>
      <mot-cell><mot-checkbox label="2">组合复选框</mot-checkbox></mot-cell>
      <mot-cell><mot-checkbox label="3">组合复选框</mot-checkbox></mot-cell>
      <mot-cell><mot-checkbox label="4">组合复选框</mot-checkbox></mot-cell>
    </mot-checkbox-group>
  </mot-cell-group>
</template>
<script lang="ts">
  import { reactive, toRefs,ref, Ref } from 'vue';
  export default {
    props: {},
    setup() {
      const group2 = ref(null) as Ref;
      const state = reactive({
        indeterminate: false,
        checkbox10: false,
        checkboxgroup5: [],
      });

      const changeBox5 = (value: boolean) => {
        group2.value.toggleAll(value);
      };

      const changeBox6 = (label: string[]) => {
        if(label.length === 4) {
          state.indeterminate = false;
          state.checkbox10 = true;
        } else if(label.length && label.length < 4){
          state.indeterminate = true;
        } else {
          data.indeterminate = false;
          state.checkbox10 = false;
        }
      };

      return { ...toRefs(state), group2, changeBox5, changeBox6 };
    }
  };
</script>

API

Checkbox Props

参数说明类型默认值
v-model是否处于选中状态booleanfalse
disabled是否禁用选择booleanfalse
text-position文本所在的位置,可选值:left,rightstringright
icon-size图标尺寸string | number18
label复选框的文本内容string-
indeterminate当前是否支持半选状态,一般用在全选操作中booleanfalse
shape形状,可选值:buttonroundStringround

Checkbox Slots

名称说明
icon未选中时的图标
checkedIcon选中时的图标
indeterminate半选时的图标

CheckboxGroup Props

参数说明类型默认值
v-model当前选中项的标识符,和 label 相对应Array-
disabled是否禁用选择,将用于其下的全部复选框booleanfalse
max限制选择的数量,不能和全选/取消/反选一起使用, 0表示没有限制number0

Checkbox Events

事件名说明回调参数
change值变化时触发(state, label), state 代表当前状态,label 表示当前选中的值

CheckboxGroup Events

事件名说明回调参数
change值变化时触发label,label 返回一个数组,表示当前选中项的集合

CheckboxGroup Methods

方法名说明参数
toggleAll全选/取消true,表示全选,传 false,表示取消全选
toggleReverse反选-

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
--mot-checkbox-label-color#1d1e1e-
--mot-checkbox-label-disable-color#999-
--mot-checkbox-icon-disable-color#d6d6d6-
--mot-checkbox-label-margin-left15px-
--mot-checkbox-label-font-size14px-
--mot-checkbox-icon-font-size18px-
--mot-checkbox-icon-disable-color2var(--mot-help-color)_-
--mot-checkbox-button-padding5px 18px-
--mot-checkbox-button-font-size12px-
--mot-checkbox-button-border-radius15px-
--mot-checkbox-button-border-color#f6f7f9-
--mot-checkbox-button-background#f6f7f9-
--mot-checkbox-button-font-color-activevar(--mot-primary-color)-
--mot-checkbox-button-border-color-activevar(--mot-primary-color)-
--mot-checkbox-button-background-activevar(--mot-primary-color)-
--mot-checkbox-displayinline-flex-
--mot-checkbox-margin-right20px-

MIT Licensed