uniapp复选框 实现排他选项

发布时间:2024年01月24日

选择了排他选项之后 复选框其他选项不可以选择
在这里插入图片描述






<view class="reportData" v-for="(val, index) in obj" :key="index">
<view v-if="val.type ==3" >
	<u-checkbox-group v-model="optionValue" placement="column"
		@change="(e) =>checkboxChange(e, val)">
						<view v-for="(item, i) in val.optionInfoList" :key="i">
							<u-checkbox :customStyle="{marginBottom: '20rpx'}" :label="item.optionName"
								:name="item.optionName">
							</u-checkbox>
						</view>
					
					</u-checkbox-group>
				</view>
</view>
<script>
	export default {
	data(){
		return {
		obj:"",
		optionValue:''
		}
	},
	onLoad(){
		this.init()
	},
	methods:{
		init(){
		//假设后台返回的数据格式
			res={
			    "code":0,
			    "msg":null,
			    "data":{
			        "name":"排他选择的问卷调查",
			        "questionInfoList":[
			            {
			                "id":"17",
			                "questionContent":"排他选项的题目?",
			                "type":"3",//3表示复选框
			                "optionInfoList":[ //选项
			                    {
			                        "id":"1",
			                        "optionName":"不包含选项",
			                        "optionType":"1"
			                    },
			                    {
			                        "id":"2",
			                        "optionName":"选项1",
			                        "optionType":"1"
			                    },
			                    {
			                        "id":"3",
			                        "optionName":"选项2",
			                        "optionType":"1"
			                    },
			                    {
			                        "id":"4",
			                        "optionName":"选项3",
			                        "optionType":"1"
			                    },
			                    {
			                        "id":"5",
			                        "optionName":"其他",
			                        "optionType":"1"
			                    }
			                ]
			            }
			        ]
			    }
			}}
			//对数据进行处理
			let data=res.data.questionInfoList
			this.obj=data.optionInfoList.map(item=>{
				if(item.type==3){
					item.optionInfoList.map(sub=>{
					  sub.checked=false;
					  return sub
					})
				}
				return item
			})
		},
		checkboxFn(e, item, index,i){
				//跟新obj中的checked状态值
				this.$set(this.obj[index].optionInfoList[i],'checked',e)
				//如果选中 并且为排他选项
				if(item.optionType==1 && item.checked) {
					//对整个数据进行遍历
					let optionInfoList=this.obj[index].optionInfoList.map((rr,k)=>{
						//让排他项目选中 其他为false
						if(rr.optionType==1){
							rr.checked=true
						}else {
							rr.checked=false
						}
						return rr
					})
					//更新obj数据
					this.$set(this.obj[index],'optionInfoList',optionInfoList)
				}else {
					//如果选中 并且部位排他项 则 排他项为false 其他根据选择的情况而定
					let optionInfoList=this.obj[index].optionInfoList.map((rr,k)=>{
						if(rr.optionType==1){
							console.log(11)
							rr.checked=false
							
						}
						return rr
					})
					this.$set(this.obj[index],'optionInfoList',optionInfoList)
				}
			},
			//
			checkboxChange(e, val, index) {
				
			}
	}

</script>
文章来源:https://blog.csdn.net/weixin_45041493/article/details/135822775
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。