<template> <view class="content"> <view class="flex til-list" v-if="status == ''"> <view class="" @click="navTo('/pages/applyHelp/index?id='+id)">基本信息</view> <view class="red">信息选择</view> <view class="" @click="navTo('/pages/applyHelp/third?id='+id)">家庭成员情况</view> <view class="" @click="navTo('/pages/applyHelp/fourth?id='+id)">详细情况</view> </view> <view class="flex til-list" v-if="status == 2"> <view class="" @click="navTo('/pages/applyHelp/index?id='+id+'&status=2')">基本信息</view> <view class="red">信息选择</view> <view class="" @click="navTo('/pages/applyHelp/third?id='+id+'&status=2')">家庭成员情况</view> <view class="" @click="navTo('/pages/applyHelp/fourth?id='+id+'&status=2')">详细情况</view> </view> <view class="content_box"> <view class="list-name">身份</view> <view class="uni-list"> <radio-group @change="radioChange1"> <view class="radio-list flex_item"> <label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in identity" :key="item.name"> <view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current1" /></view> <view>{{item.name}}</view> </label> </view> </radio-group> </view> </view> <view class="content_box"> <view class="list-name">婚姻状况</view> <view class="uni-list"> <radio-group @change="radioChange2"> <view class="radio-list flex_item"> <label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in marital" :key="item.name"> <view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current2" /></view> <view>{{item.name}}</view> </label> </view> </radio-group> </view> </view> <view class="content_box"> <view class="list-name">是否医保</view> <view class="uni-list"> <radio-group @change="radioChange3"> <view class="radio-list flex_item"> <label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in insurance" :key="item.name"> <view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current3" /></view> <view>{{item.name}}</view> </label> </view> </radio-group> </view> </view> <view class="content_box"> <view class="list-name">对象特征</view> <view class="uni-list"> <radio-group @change="radioChange4"> <view class="radio-list flex_item"> <label class="uni-list-cell uni-list-cell-pd flex_item" v-for="(item, index) in characteristics" :key="item.name"> <view><radio :disabled="disabled" style="transform:scale(0.7)" color='#FF727E' :value="item.name" :checked="index === current4" /></view> <view>{{item.name}}</view> </label> </view> </radio-group> </view> </view> <view class="content_box"> <view class="list-name">致困原因(最多选三项)</view> <view class="uni-list"> <checkbox-group @change="checkboxChange"> <view class="radio-list flex_item"> <label class="uni-list-cell uni-list-cell-pd flex_item" v-for="item in maleLike" :key="item.name"> <view> <checkbox :disabled="disabled" :value="item.name" style="transform:scale(0.7)" color='#FF727E' :checked="item.checked" /> </view> <view>{{item.name}}</view> </label> </view> </checkbox-group> </view> </view> <view class="add-btn" v-if="status == ''" @click="confirm">下一步</view> <view class="add-btn" v-if="status == 2" @click="Tosecond">下一步</view> </view> </template> <script> import uniList from '@/components/uni-list/uni-list.vue'; import uniListItem from '@/components/uni-list-item/uni-list-item.vue'; import LbPicker from '@/components/lb-picker/index.vue' import { upload,add_two_help } from '@/api/index.js'; import { getList,helpdetail } from '@/api/applyHelp.js'; export default { components: { uniList, uniListItem, LbPicker }, data() { return { identity:[{//身份 value: '1', name: '居民' },{ value: '2', name: '村民' },{ value: '3', name: '农民工' },{ value: '4', name: '在岗' },{ value: '5', name: '下岗' },{ value: '6', name: '离退休' },{ value: '7', name: '病退病休' }], current1: '', checked:'', marital:[{//婚姻状况 value: '1', name: '已婚' },{ value: '2', name: '未婚' },{ value: '3', name: '离异' },{ value: '4', name: '丧偶' }], current2: '', checked2:'', insurance:[{//医保 value: '1', name: '是' },{ value: '2', name: '否' }], current3: '', checked3:'', characteristics:[{//对象特征 value: '1', name: '低保对象' },{ value: '2', name: '重度残疾' },{ value: '3', name: '低保边缘对象' },{ value: '4', name: '孤儿、孤寡老人' },{ value: '5', name: '因灾、因病致穷家庭' },{ value: '6', name: '其它' }], current4:'', checked4:'', maleLike:[{//致困原因(最多选三项) value: '1', name: '意外灾害' },{ value: '2', name: '本人大病' },{ value: '3', name: '子女上学' },{ value: '4', name: '收入低无法维持基本生活' },{ value: '5', name: '残疾' },{ value: '6', name: '供养直系亲属大病' },{ value: '7', name: '下岗失业', },{ value: '8', name: '其它' }], currentArr: [], // 当前用户想要的选项,最大为5 hasPass: false, // 用户之前是否选择过,是为true oldArr: [], // 上一次的返回值 status:'',//审核通过 disabled:false, }; }, onLoad(option) { if(option.id){ this.id = option.id; this.helpDetail(); } if(option.status){ this.status = option.status; this.disabled = true; } }, onUnload() { uni.navigateTo({ url: '/pages/applyHelp/cation' }); }, methods: { //申请详情 helpDetail(){ let obj = this; helpdetail({ id:obj.id }).then(({ data }) => { obj.id = data.id; console.log(data) if(data.capacity){ obj.checked = data.capacity; obj.type = 2; if(obj.checked == '居民'){ obj.current1 = 0; } if(obj.checked == '村民'){ obj.current1 = 1; } if(obj.checked == '农民工'){ obj.current1 = 2; } if(obj.checked == '在岗'){ obj.current1 = 3; } if(obj.checked == '下岗'){ obj.current1 = 4; } if(obj.checked == '离退休'){ obj.current1 = 5; } if(obj.checked == '病退病休'){ obj.current1 = 6; } } if(data.matrimonial){ obj.checked2 = data.matrimonial; if(obj.checked2 == '已婚'){ obj.current2 = 0; } if(obj.checked2 == '未婚'){ obj.current2 = 1; } if(obj.checked2 == '离异'){ obj.current2 = 2; } if(obj.checked2 == '丧偶'){ obj.current2 = 3; } } if(data.medical){ obj.checked3 = data.medical; if(obj.checked3 == '是'){ obj.current3 = 0; } if(obj.checked3 == '否'){ obj.current3 = 1; } } if(data.aspect){ obj.checked4 = data.aspect; if(obj.checked4 == '低保对象'){ obj.current4 = 0; } if(obj.checked4 == '重度残疾'){ obj.current4 = 1; } if(obj.checked4 == '低保边缘对象'){ obj.current4 = 2; } if(obj.checked4 == '孤儿、孤寡老人'){ obj.current4 = 3; } if(obj.checked4 == '因灾、因病致穷家庭'){ obj.current4 = 4; } if(obj.checked4 == '其它'){ obj.current4 = 5; } if(obj.checked4 == '病退病休'){ obj.current4 = 6; } } if(data.poverty){ let poverty = data.poverty.split(","); let values = poverty; let items = obj.maleLike; for (let i = 0, lenI = items.length; i < lenI; ++i) { let item = items[i] if(values.includes(item.name)){ obj.$set(item,'checked',true) }else{ obj.$set(item,'checked',false) } } obj.oldArr = values; } }).catch(err => { console.log(err); }); }, //提交 confirm() { let obj = this; if(obj.oldArr == ''){ this.$api.msg('请选择致困原因!'); return; } if(obj.oldArr.length > 3){ this.$api.msg('致困原因最多选三项!'); return; } add_two_help({ id:obj.id, capacity:obj.checked, matrimonial:obj.checked2, medical:obj.checked3, aspect:obj.checked4, poverty:obj.oldArr.toString(), }).then(function(e) { obj.$api.msg(e.msg); setTimeout(function(){ uni.navigateTo({ url:'/pages/applyHelp/third?id='+obj.id }) }, 2000); }) .catch(e => { obj.$api.msg(e.message); }); }, Tosecond(){ uni.navigateTo({ url:'/pages/applyHelp/third?id='+this.id+'&status=2' }) }, radioChange1(evt){ this.checked = evt.detail.value; console.log(this.checked) }, radioChange2(evt){ this.checked2 = evt.detail.value; console.log(this.checked2) }, radioChange3(evt){ this.checked3 = evt.detail.value; console.log(this.checked3) }, radioChange4(evt){ this.checked4 = evt.detail.value; console.log(this.checked4) }, checkboxChange: function (e) { if (e.detail.value.length > 3) { // 如果选择的个数超过3个 if (!this.hasPass) { // 当用户选择数量是第一次超过3 this.hasPass = true if (e.detail.value.length > this.oldArr.length) { // 如果当前选择总数大于上一次选择总数(用户没有取消过选择) this.currentArr = e.detail.value.slice(0, 3) uni.showToast({ title: '最多3个', icon: 'none' }) } else { // 如果当前选择总数小于上一次选择总数(用户取消部分选择) let arr = [] for (var i = 0; i < this.currentArr.length; i++) { for (var j = 0; j < 3; j++) { if (this.currentArr[i] === e.detail.value[j]) { arr.push(this.currentArr[i]) } else { continue } } } this.currentArr = arr } } else { // 当用户选择数量不是第一次超过3(这时候change事件的返回值里有不一定是用户想要的值,所以需要做判断) if (e.detail.value.length > this.oldArr.length) { // 用户又增加了选项 let n = e.detail.value.length if (this.currentArr.length < 3) { this.currentArr.push(e.detail.value[n - 1]) } else { uni.showToast({ title: '最多3个', icon: 'none' }) } } else { // 用户取消了部分选项 let arr = [] for (var i = 0; i < this.currentArr.length; i++) { let n = e.detail.value.indexOf(this.currentArr[i]) if (n !== -1) { arr.push(this.currentArr[i]) } else { continue } } this.currentArr = arr } } } else { // 如果选择的个数小于等于3 if (this.hasPass) { // 不是第一次小于3,即之前多选过,后来又取消选择 if (e.detail.value.length < this.oldArr.length) { // 用户取消了部分选择 let arr = [] for (var i = 0; i < this.currentArr.length; i++) { let n = e.detail.value.indexOf(this.currentArr[i]) if (n !== -1) { arr.push(this.currentArr[i]) } else { continue } } this.currentArr = arr } else { // 用户增加选择,增加的新选项在数组最后 let n = e.detail.value.length this.currentArr.push(e.detail.value[n - 1]) } } else { // 是第一次小于3,这个最简单了,直接选了什么就给什么 this.currentArr = e.detail.value } if (e.detail.value.length === 0) { // 如果用户取消了全部选择,让hasPass为false,即下一次再选时就会判断为第一次选择 this.hasPass = false } } for (var i = 0, lenI = this.maleLike.length; i < lenI; ++i) { // 给用户的选项添加样式 this.maleLike[i].isChecked = false; for (var j = 0, lenJ = this.currentArr.length; j < lenJ; ++j) { if (String(this.maleLike[i].value) === String(this.currentArr[j])) { this.maleLike[i].isChecked = true break } } } this.oldArr = e.detail.value // 把当前返回值赋值给上一次的返回值 console.log(this.oldArr,88) }, navTo(url) { uni.navigateTo({ url }); } } }; </script> <style lang="scss"> page { background: $page-color-base; min-height: 100%; } .content{ padding-bottom: 100rpx; } .tip{ color: #DE2412; background-color: #FEE2E3; font-size: 24rpx; padding: 25rpx 35rpx; } .til-list{ padding: 35rpx 50rpx; font-size: 28rpx; color: #666666; .red{ color: #E62129 !important; } } .content_box { background-color: #ffffff; padding: 0rpx 25rpx; margin: 25rpx auto; .list-name{ padding-top: 25rpx; font-size: 35rpx; padding-left: 15rpx; padding-bottom: 10rpx; } } .row { display: flex; align-items: center; // position: relative; padding: 0 30rpx; height: 110rpx; background: #fff; border-bottom: 1rpx solid #f8f6f6; .tit { flex-shrink: 0; width: 180rpx; font-size: 30rpx; color: $font-color-dark; } .value{ width: 100%; text-align: right; } .input { flex: 1; font-size: 30rpx; color: $font-color-dark; text-align: right; } .iconlocation { font-size: 36rpx; color: $font-color-light; } } .radio-list{ display: flex; flex-wrap: wrap; font-size: 28rpx; padding-top: 30rpx; .uni-label-pointer{ padding-right: 25rpx; padding-bottom: 30rpx; } } .add-btn{ position: fixed; bottom: 0rpx; left: 0rpx; width: 100%; height: 100rpx; font-size: 28rpx; color: #FFFFFF; background-color: #FF727E; line-height: 100rpx; text-align: center; } </style>