123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <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>
|