uni-item-manage/tm-vuetify/components/tm-groupcheckbox/tm-groupcheckbox.vue
2023-10-18 15:52:41 +08:00

125 lines
2.8 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="tm-groupcheckbox " :class="[customClass]">
<slot></slot>
</view>
</template>
<script>
/**
* 复选框组
* @description 此组件必须配合tm-checkbox组件使用不可单独使用。
* @property {Number} max = [999] 最大选择数量
* @property {String} name = [] 默认:'',提交表单时的的字段名称标识
* @property {String} customClass = [] 默认:''自定义class
* @property {Function} change 任何一个checkekBox改变将会触发此事件并携带选中的数组数据。
* @property {Function} error 如果超过最大选择数量将会触发此事件。
* @example <tm-groupcheckbox><tm-checkbox v-model="checked" label="苹果"></tm-checkbox></tm-groupcheckbox>
*
*/
export default {
name:'tm-groupcheckbox',
props:{
// 最大选择数量
max:{
type:Number,
default:9999
},
//提交表单时的的字段名称
name:{
type:String,
default:''
},
customClass:{
type:String,
default:''
}
},
data() {
return {
};
},
mounted() {
this.$nextTick(function(){
this.$emit('change',this.getVal())
})
},
methods: {
change(e) {
this.$emit('change',e)
},
// 获取选中的结果 。
getVal(){
let box = [];
function findchild(p,index){
let preat = p;
if(preat.$options?.name==='tm-checkbox'){
if(preat.changValue){
box.push({index:index,value:preat.name,checked:preat.changValue})
}
}else{
if(preat.$children.length>0){
preat.$children.forEach(item=>{
findchild(item,index++);
})
}
}
};
findchild(this,0);
return box;
},
// 反选。如果一个都没选择。反选就相当于全选。如果是全选,则结果是全部不选。
// 执行完毕后。不能立即使用getVal获取结果需要this.$nextTick
reverseVal(){
function findchild(p,index){
let preat = p;
if(preat.$options?.name==='tm-checkbox'){
preat.changValue = !preat.changValue;
}else{
if(preat.$children.length>0){
preat.$children.forEach(item=>{
findchild(item,index++);
})
}
}
};
findchild(this,0);
},
// 清除选中。
clear(){
function findchild(p,index){
let preat = p;
if(preat.$options?.name==='tm-checkbox'){
preat.changValue = false;
}else{
if(preat.$children.length>0){
preat.$children.forEach(item=>{
findchild(item,index++);
})
}
}
};
findchild(this,0);
},
// 只有当超过最选选项时才会发出错误。
error(){
uni.showToast({
title:"超过选择限制",icon:'none'
})
this.$emit('error',"超过选择限制")
}
},
}
</script>
<style lang="scss">
</style>