| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 | <template>	<view class="box">		<u-navbar :title="activityTitle" autoBack :placeholder="true" bgColor="#fee1b9"></u-navbar>				<view class="ban">			<view class="hdjs_box">				<view class="hdjs_tit">活动介绍</view>				<view class="hdjs_xq" style="overflow: scroll">{{activityDesc}}</view>			</view>						<!--  -->			<view class="ld">报名资料填写</view>			<view class="radio_box">				<u-radio-group				  v-model="activity_schedule_id"				  placement="column"				 				>				  <u-radio				    :customStyle="{marginBottom: '8px'}"				    v-for="(item, index) in scheduleList"				    :key="index"				    :label="item.desc"				    :name="item.id"				    @change="scheduleChange"				  >				  </u-radio>				</u-radio-group>			</view>			 			<!-- 动态表单 -->			<block  v-for="item in signupParams" :key="item.id">			   <!-- @click="getTitle(item)" -->				 <view  class="" style="margin-top: 30rpx;">			       <text >{{ item.title }}</text>			       <!-- <text v-if="item.tip" class="tip">{{ item.tip }}</text> -->			       <!-- 根据 type 属性决定渲染哪种类型的输入 -->			       <u--input v-if="item.type === 'string'"			               v-model="item.value"								 border="surround"			             @change="onInput(item)"			                :placeholder="item.tip" />							      <u-radio-group v-if="item.type === 'radio'" placement="column">			         <u-radio v-for="(fruitName, fruitId) in item.params" :key="fruitId"			                  :label="fruitName"			                :name="item.name + '-' + fruitName"							  @change="radioChange"							  :customStyle="{ marginBottom: '8px', height: '30px' }"							  >			           {{ fruitName }}			         </u-radio>			       </u-radio-group>							       <!-- 其他类型可以根据需要添加 -->			     </view>			   </block>			<view class="bm_btn" @click="tjcyBtn">添加成员</view>			<view class="cy_box" v-for="(item,index) in cyList" :key="index">				<view class=""  style="display: flex;">					<view class="icon_box">						<u-icon name="account" color="#000000" size="20"></u-icon>					</view>					<view style="margin-left: 20rpx">						<view class="cy_name">{{item.name}}</view>						<view class="cy_age">年龄:{{item.age}}</view>											</view>				</view>							<view @click="removeMembers(index)" style="width: 60rpx;height: 60rpx;">				<u-icon name="trash" color="#858789" size="20" ></u-icon>					</view>			</view>			<!--  -->				<view class="tjbm_btn" @click="submitActivitySignupInfo">提交报名</view>			<!-- 阅读协议 -->			<view class="ydxy">			 <u-checkbox-group @change="xyShow=!xyShow" >			 	<u-checkbox v-model="xyShow" shape="circle" ></u-checkbox>			 </u-checkbox-group>				<view class="" @click="volhow=true">					阅读并同意《隐私政策》和《用户协议》				</view>			</view>		</view>			<!-- 协议弹层 -->		<u-popup bgColor="#f2c8a2" :show="volhow"  mode="center" customStyle="width:600rpx;padding: 30rpx;" round="20rpx">			<view style="text-align: center; font-size: 30rpx">请阅读以下协议</view>			<view style="margin-top: 20rpx"></view>			<view class="bt_box">								<view class="bt2" @click="volhow=false">我已知悉</view>			</view>		</u-popup>		  </view>	</view></template><script>	let that;export default {	data() {		return {			radioName: '',			signupParams : [],			activityId: 1,			activityDesc: '',			activityTitle: '',			volhow:false,			xyShow:false,			// 家庭成员			cyList:[],			ydxyShow:false,			// 默认选中第一个			activity_schedule_id: 1,			scheduleList: [],			params:{				activity_schedule_id: 1,			}		};	},	onLoad(option) {		console.log(option);		that = this;		that.activityId = option.id;		that.activityDesc = option.desc;		that.activityTitle = option.title;		that.getActivityScheduleList(that.activityId);		that.getActivitySignupParams(that.activityId);		that.params.activity_id = option.id;	}, 	onShow() {		// console.log(uni.getStorageSync('selectedMembers'), 'selectedMembers');		that.loadMembers();	},	computed: {		// 筛选出 type 为 radio 的数据		radioItems() {		  return this.signupParams.filter((item) => item.type === "radio");		},	},	methods: {		//获取活动日程列表		getActivityScheduleList(id) {			this.$api.activityScheduleList(				{					activity_id: id				},				data => {					if (data.code == 0) {						that.$common.errorToShow(data.msg);						return;					} else {						that.scheduleList = data.data;						// console.log(that.scheduleList);					}				}			);		},		//获取活动报名参数		getActivitySignupParams(id) {			this.$api.activitySignupParams(				{					activity_id: id				},				data => {					if (data.code == 0) {						that.$common.errorToShow(data.msg);						return;					} else {						that.signupParams = data.data;						//这边需要把每个参都存到params里面						that.signupParams.forEach((item) => {							that.params[item.name] = '';						});						console.log(that.params,'sparams');						// console.log(that.signupParams,'that.signupParams')					}				}			);		},		submitActivitySignupInfo() {			console.log(that.xyShow);			if (that.xyShow === false) {				that.$common.errorToShow('请阅读并同意协议');				return;			}			let params = that.params;			if (that.cyList.length === 0) {				that.$common.errorToShow('请选择报名成员');				return;			}			params.identities = that.cyList.map(item => item.id).join(",");			console.log(params, 'params');			this.$api.submitActivitySignupInfo(params,				data => {					if (data.code == 0) {						that.$common.errorToShow(data.msg);						return;					} else {						that.$common.successToShow(data.msg);						if (data.code == 1) {							setTimeout(								function(){								  uni.navigateBack({									delta: 1								  });							}, 1500);						}					}				}			);		},		volhowChange(volhow){			that.volhow = !volhow;			console.log(that.volhow);		},		radioChange(n) {			const [field, value] = n.split("-");			let title = field;			that.params[title] = value;			// console.log(that.params,'that.params');		},		scheduleChange(n) {			that.activity_schedule_id = n;			that.params.activity_schedule_id = n;			// console.log(that.params);	        // console.log('scheduleChange',that.activity_schedule_id);	    },		onInput(item) {			that.$set(that.params, item.name, item.value); // 使用Vue的$set方法保证响应式			// console.log('this.params:', this.params);		},		tjcyBtn(){			uni.navigateTo({				url: '/index_fenbao/XuanJiangYuan/ck_page'			});		},		  // 从本地存储中获取乘客信息		loadMembers() {		    const storedSelectedMembers = uni.getStorageSync('selectedMembers');			// console.log(storedSelectedMembers, 'storedSelectedMembers')		    if (storedSelectedMembers) {				that.cyList = storedSelectedMembers;		    } else {		        that.cyList = [];		    }		},		removeMembers(index) {		   // 移除乘客并更新本地存储		   that.cyList.splice(index, 1);		   // 更新本地存储中的乘客信息		   uni.setStorageSync('selectedMembers', that.cyList);		   // 提示删除成功		   uni.showToast({			 title: '删除成功',			 icon: 'success'		   });		}   	}};</script><style>.box {	min-height: 100%;height: auto;	width: 100%;	padding-bottom: 50rpx;	background-image: url('https://huli-app.wenlvti.net/app_static/minnanhun/image/gj_bg.png');	background-repeat: repeat-y;	background-size: 100%;}.ban {	width: 92%;	margin: auto;}.top_tit {	width: 100%;	height: 60rpx;	color: black;	line-height: 60rpx;	text-align: center;	font-size: 30rpx;	background-color: #fee1b9;}.hdjs_box {	height: 200rpx;	color: black;	margin-top: 10rpx;	border-radius: 10rpx;	padding: 20rpx;	background-color: #fff0e3;}.hdjs_box2 {	color: black;	margin-top: 10rpx;	border-radius: 10rpx;	margin-bottom: 30rpx;	padding: 20rpx;	background-color: #fff0e3;}.hdjs_tit {	font-size: 30rpx;}.hdjs_xq {	margin-top: 10rpx;	font-size: 26rpx;}.ld {	font-size: 30rpx;	font-weight: 700;	margin-top: 20rpx;	margin-bottom: 20rpx;}.u-input.data-v-113bc24f {	background-color: #fee1b9 !important ;	margin-top: 20rpx;}.bm_btn {	width: 100%;	height: 80rpx;	font-size: 30rpx;	line-height: 80rpx;	text-align: center;	color: black;	border-radius: 10rpx;	background-color: #fee1b9;	margin-top: 20rpx;}.bt2 {	width: 244rpx;	height: 78rpx;	background: #ca5642;	border-radius: 39rpx;	text-align: center;	line-height: 78rpx;	color: #ffffff;}.cy_box {	display: flex;	margin-top: 20rpx;	justify-content: space-between;}.icon_box {	width: 90rpx;	height: 90rpx;	display: flex;	justify-content: center;	background-color: #fee1b9;	border-radius: 10rpx;}.cy_name {	color: black;	font-size: 28rpx;	line-height: 50rpx;}.cy_age {	font-size: 24rpx;	color: #858789;}.bt_box {	display: flex;	margin-top: 50rpx;	justify-content: space-around;}.tjbm_btn {	width: 100%;	height: 80rpx;	font-size: 30rpx;	line-height: 80rpx;	text-align: center;	color: #ffffff;	border-radius: 10rpx;	background-color: #fb5a02;	margin-top: 50rpx;}.ydxy{	display: flex;align-items: center;	margin-top: 20rpx;	height: 50rpx;	font-size: 24rpx;	color:#03A9F4;}.radio_box{	background-color: #fee1b9;	padding: 20rpx;	border-radius: 10rpx;}</style>
 |