62 lines
1.0 KiB
Vue
62 lines
1.0 KiB
Vue
<template>
|
|
<view
|
|
class="cl-checkbox-group"
|
|
:class="{
|
|
'is-fill': fill,
|
|
}"
|
|
>
|
|
<slot></slot>
|
|
</view>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent } from "vue";
|
|
import { cloneDeep } from "lodash-es";
|
|
|
|
export default defineComponent({
|
|
name: "cl-checkbox-group",
|
|
|
|
props: {
|
|
// 绑定值
|
|
modelValue: {
|
|
type: Array,
|
|
default: () => [],
|
|
},
|
|
// 是否边框样式
|
|
border: Boolean,
|
|
// 是否禁用
|
|
disabled: Boolean,
|
|
// 是否圆角
|
|
round: Boolean,
|
|
// 是否宽度填充
|
|
fill: Boolean,
|
|
// 是否只显示文字
|
|
text: Boolean,
|
|
// 图标大小
|
|
size: [String, Number],
|
|
},
|
|
|
|
emits: ["update:modelValue", "change"],
|
|
|
|
setup(props, { emit }) {
|
|
function onChange(label: string) {
|
|
const index = props.modelValue.findIndex((e) => e == label);
|
|
let list = cloneDeep(props.modelValue);
|
|
|
|
if (index >= 0) {
|
|
list.splice(index, 1);
|
|
} else {
|
|
list.push(label);
|
|
}
|
|
|
|
emit("update:modelValue", list);
|
|
emit("change", list);
|
|
}
|
|
|
|
return {
|
|
onChange,
|
|
};
|
|
},
|
|
});
|
|
</script>
|