mirror of
https://github.com/ialley-workshop-open/uni-halo.git
synced 2026-06-12 13:19:31 +08:00
v1.0.0-beta 源码正式开源
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user