From 04102f7237efefa744090ed7c25f7b5d0807b679 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Thu, 05 Feb 2026 18:11:57 +0800
Subject: [PATCH] 完成运营中心提现和运营中心权限管理

---
 mobile/pages/branch/activity/detail/detail.vue |  665 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 560 insertions(+), 105 deletions(-)

diff --git a/mobile/pages/branch/activity/detail/detail.vue b/mobile/pages/branch/activity/detail/detail.vue
index e97f3dc..65af4e1 100644
--- a/mobile/pages/branch/activity/detail/detail.vue
+++ b/mobile/pages/branch/activity/detail/detail.vue
@@ -33,9 +33,28 @@
 							</view>
 
 							<view class="flex-1">
-								<view class="activity-item" v-if="activityData.fee > 0">
+								<view class="activity-item">
 									<view class="gray6 f24">活动费用</view>
-									<view class="info">¥{{activityData.fee}}/人</view>
+									<view class="info" v-if="activityData.fee > 0">¥{{activityData.fee}}/人</view>
+									<view class="info" v-else>免费</view>
+								</view>
+							</view>
+						</view>
+						<view class="activity-item d-b-c" v-if="activityData.address">
+							<view class="flex-1">
+								<view class="gray6 f24">活动地点</view>
+								<view class="info">{{activityData.address}}</view>
+							</view>
+							<view>
+								<view class="d-s-c contact ml20">
+									<view class="d-c-c d-c" @click="openLocation()">
+										<text class="iconfont icon-dizhi"></text>
+										<text class="text">导航</text>
+									</view>
+									<view class="d-c-c d-c ml20" @click="callPhone()">
+										<text class="iconfont icon-002dianhua"></text>
+										<text class="text">电话</text>
+									</view>
 								</view>
 							</view>
 						</view>
@@ -52,19 +71,27 @@
 							<view class="gray6 f24">活动发起分会</view>
 							<view class="info">{{activityData.branch.name}}</view>
 						</view>
-						<view class="activity-item d-b-c" v-if="activityData.fee > 0">
+						<view class="activity-item">
 							<view>
-								<view class="gray6 f24">已报名人数</view>
-								<view class="info">{{activityData.total}}</view>
+								<view class="gray6 f24">已报名人员({{activityData.total}}人)</view>
+								<view class="info"></view>
 							</view>
-							<view class="avatar-list d-s-c">
-								<image :src="item.avatarUrl" mode="aspectFill" v-for="(item, index) in userList"
-									:key="index"></image>
-								<view class="more" v-if="activityData.total > 8"></view>
+							<view class="avatar-list d-s-c pt10">
+								<view class="d-c-c d-c avatar-item" v-for="(item, index) in userList" :key="index">
+									<image :src="item.avatarUrl" mode="aspectFill"></image>
+									<text class="text-ellipsis">{{item.real_name}}</text>
+								</view>
+								<view class="more d-c-c d-c" v-if="activityData.total > 5" @click="openUser">
+									<view class="d-c-c more-icon">
+										<text class="iconfont icon-gengduo"></text>
+									</view>
+									<text>更多</text>
+								</view>
 							</view>
 						</view>
+						
 						<!-- 活动结束图标 -->
-						<view class="status-image" v-if="activityData.is_finish">
+						<view class="status-image" v-if="activityData.status_text.status==2">
 							<image :src="remoteImg('finish')"></image>
 						</view>
 						<!-- 活动进行中图标 -->
@@ -78,40 +105,57 @@
 					</view>
 				</view>
 				<!-- 活动介绍 -->
-				<view class="wrapper bg-white radius24" v-if="activityData.content">
+				<view class="wrapper bg-white radius24" v-if="activityData.content || activityData.describe">
 					<view class="info-title-box tc pt30 fb f30">
 						<view class="info-title">活动介绍</view>
 					</view>
-					<view class="activity-desc p30" v-html="activityData.content"></view>
+					<view class="activity-desc p30" v-html="activityData.content||activityData.describe"></view>
+					<!-- <view class="activity-desc p30" v-else>{{ activityData.describe }}</view> -->
 				</view>
 			</view>
 			<view class="detail-footer">
-				<!-- 如果已经报名 -->
-				<block v-if="activityData.is_reg">
-					<!-- 如果已经核销 -->
-					<view class="d-c-c finish-btn" v-if="activityData.is_verify">
-						<button class='modifyBnt' @click="onAlbum">活动相册</button>
-						<!-- 如果有走访企业,跳转企业店铺 -->
-						<button class='modifyBnt' @click="gotoSupplier" v-if="activityData.is_visit">超值购</button>
-						<button class='modifyBnt' @click="showShare" v-else>分享给好友</button>
-					</view>
-					<button v-else-if="activityData.status_text.status==1" class='modifyBnt'
-						@click="onVerify">马上签到</button>
-					<button v-else-if="activityData.status_text.status==2" class='modifyBnt disabled'>您缺席了这场活动</button>
-					<button v-else class='modifyBnt disabled'>活动未开始</button>
-				</block>
+				<!-- 如果是扫码进来的,都显示可以签到 -->
+				<view :class="{'d-c-c two-col-btn':canReg == 1}" v-if="user_verify">
+					<button class='modifyBnt disabled' v-if="activityData.is_verify">您已签到</button>
+					<button class='modifyBnt' @click="onVerify" v-else>马上签到</button>
+					<button class='modifyBnt' @click="onReg(true)" v-if="canReg==1">帮朋友报名</button>
+				</view>
+				<!-- 如果活动已结束 -->
+				<view class="d-c-c two-col-btn" v-else-if="activityData.status_text.status==2">
+					<button class='modifyBnt' @click="onAlbum">活动相册</button>
+					<!-- 如果有走访企业,跳转企业店铺 -->
+					<button class='modifyBnt' @click="gotoSupplier" v-if="activityData.is_visit">走访企业的店铺</button>
+					<button class='modifyBnt' @click="showShare" v-else>分享给好友</button>
+				</view>
 				<block v-else>
-					<button v-if="activityData.status_text.reg_status==0" class='modifyBnt disabled'>报名未开始</button>
-					<block v-else-if="activityData.status_text.reg_status==1">
-						<button v-if="activityData.limit_num==activityData.total && activityData.limit_num!=0"
-							class='modifyBnt disabled'>已报满</button>
-						<button v-else class='modifyBnt' @click="onReg">提交报名</button>
+					<!-- 如果已经报名 -->
+					<view class="d-c-c two-col-btn" v-if="activityData.is_reg">
+						<button class='modifyBnt disabled' v-if="activityData.is_verify">您已签到</button>
+						<button class='modifyBnt disabled' v-else @click="scanCode">您已报名</button>
+						<button class='modifyBnt' @click="onReg(true)" v-if="canReg==1">帮朋友报名</button>
+						<block v-else>
+							<button class='modifyBnt' @click="showShare" v-if="activityData.is_verify">分享给好友</button>
+							<button class='modifyBnt' @click="scanCode" v-else>扫码签到</button>
+						</block>
+					</view>
+					<!-- 如果还没有报名 -->
+					<block v-else>
+						<view class="d-c-c two-col-btn" v-if="canReg==1">
+							<button class='modifyBnt' @click="onReg(false)">我要报名</button>
+							<button class='modifyBnt' @click="onReg(true)">帮朋友报名</button>
+						</view>
+						<view class="d-c-c" v-else>
+							<button v-if="canReg==0" class='modifyBnt disabled'>报名未开始</button>
+							<button v-else-if="canReg==3" class='modifyBnt disabled'>已报满</button>
+							<button v-else class='modifyBnt disabled'>报名已结束</button>
+						</view>
 					</block>
-					<button v-else class='modifyBnt disabled'>报名已结束</button>
 				</block>
-
-
 			</view>
+		</view>
+		<!-- 活动购物图标(仅在活动进行时显示) -->
+		<view class="shopping-box" @click="gotoPage('pages/branch/activity/product/index?activity_id='+activity_id)" v-if="activityData.is_visit && activityData.status_text.status == 1 && activityData.is_verify">
+			<image :src="remoteImg('activity_shopping')"></image>
 		</view>
 		<!--报名成功弹窗-->
 		<view class="success-box" v-if="isShowbox">
@@ -150,14 +194,28 @@
 				<!-- #endif -->
 			</view>
 		</uniPopup>
+		<!--核销失败弹窗-->
+		<uniPopup :show="isShowVerify" type="middle" @hidePopup="popupVerifyFunc(null)">
+			<view class="d-c-c d-c verify-choose">
+				<view class="f30 fb">签到失败了,因为您还没报名</view>
+				<view class="p-20-0 f28 gray6">如果您朋友已经帮您报名了,请输入您的手机号重新签到:</view>
+				<input class="ww100 f30 fb tc verify-input" type="text" maxlength="30" placeholder="请输入手机号码" v-model="verify_mobile" placeholder-class="placeholder" />
+				<view class="foot">
+					<view class="btn" @click="popupVerifyFunc('reg')">现在报名</view>
+					<view class="btn" @click="popupVerifyFunc('retry')">重新签到</view>
+				</view>
+			</view>
+		</uniPopup>
 		<!-- 报名弹窗 -->
-		<RegForm ref="regForm" :isOpenReg="isOpenReg" :in_radius="in_radius" @close="closeRegFunc"></RegForm>
+		<RegForm ref="regForm" :isOpenReg="isOpenReg" :in_radius="in_radius" :is_friend="is_friend" @close="closeRegFunc"></RegForm>
 		<!--分享底部弹窗-->
 		<Share :isbottmpanel="isbottmpanel" :activity_id="activity_id" @close="closeBottmpanel"></Share>
 		<!--app分享-->
 		<AppShare :isAppShare="isAppShare" :appParams="appParams" @close="closeAppShare"></AppShare>
 		<!-- 打开活动相册 -->
 		<Album ref="album" :isOpenAlbum="isOpenAlbum" :activity_id="activity_id" @close="closeAlbumFunc"></Album>
+		<!-- 打开报名用户名单 -->
+		<User ref="user" :isOpenUser="isOpenUser" :activity_id="activity_id" @close="closeUserFunc"></User>
 	</view>
 </template>
 
@@ -170,13 +228,16 @@
 	import Share from './popup/share.vue';
 	import Album from './popup/album.vue'; // 相册
 	import uniPopup from '@/components/uni-popup.vue';
+	import utils from '@/common/utils.js';
+	import User from './popup/user.vue'; // 相册
 	export default {
 		components: {
 			RegForm,
 			AppShare,
 			Share,
 			Album,
-			uniPopup
+			uniPopup,
+			User,
 		},
 		data() {
 			return {
@@ -187,7 +248,11 @@
 				},
 				balance: 0,
 				activity_id: 0,
-				activityData: {},
+				activityData: {
+					status_text: {
+						reg_status: 0
+					}
+				},
 				userList: [],
 				/*是否显示支付宝支付,只有在h5,非微信内打开才显示*/
 				showAlipay: false,
@@ -213,49 +278,41 @@
 				longitude: 0,
 				isVerify: false, // 签到成功弹窗
 				in_radius: false, // 用户是否在活动地点限定范围内
+				user_verify: 0, // 核销标识,只有扫核销码进来值才是1
+				is_friend: false, // 是否是帮朋友报名
+				isShowVerify: false, // 核销选择框(针对核销时返回未报名的情况,选择是否有朋友帮报名)
+				verify_mobile: '', // 朋友帮报名填的手机号
+				isOpenUser: false, // 报名用户名单弹窗
 			}
 		},
 		onLoad(e) {
 			/*活动id*/
-			if (typeof e.activity_id != 'undefined') {
-				this.activity_id = e.activity_id;
-			} else {
-				let scene = utils.getSceneData(e);
+			let scene = utils.getSceneData(e);
+			if (scene && typeof scene === 'object' && Object.keys(scene).length > 0) {
 				this.activity_id = scene.activity_id;
+				this.user_verify = scene.user_verify;
+			} else {
+				this.activity_id = e.activity_id;
 			}
 		},
 		onShow() {
-			this.getUserLocation();
 			this.getData();
 		},
-		methods: {
-			// 获取用户坐标并判断在不在活动范围内
-			getUserLocation() {
-				let self = this;
-				uni.getLocation({
-					type: 'gcj02',
-					success: (res) => {
-						self.latitude = res.latitude;
-						self.longitude = res.longitude;
-						// 计算距离
-						const distance = this.calculateDistance(
-							res.latitude, res.longitude,
-							parseFloat(self.activityData.latitude), parseFloat(self.activityData.longitude)
-						);
-						if (distance <= self.activityData.radius) {
-							self.in_radius = true;
-						}
-					},
-					fail: (err) => {
-						console.error('获取位置失败:', err);
-						uni.showToast({
-							title:'获取位置失败' + err,
-							icon: 'none'
-						});
-					}
-				});
+		onUnload() {
+			this.stopWatchingLocation();
+		},
+		computed: {
+			canReg() {
+				let status = this.activityData.status_text.reg_status; // 0未开始 1可报 2报名已结束 3报满
+				if (this.activityData.status_text.reg_status == 1 && (this.activityData.limit_num > this.activityData.total || this.activityData.limit_num == 0)) {
+					status = 1;
+				} else if (this.activityData.limit_num == this.activityData.total && this.activityData.limit_num > 0) {
+					status = 3;
+				}
+				return status;
 			},
-			
+		},
+		methods: {
 			/*获取数据*/
 			getData() {
 				let self = this;
@@ -270,18 +327,223 @@
 					function(res) {
 						self.activityData = res.data.detail;
 						self.userList = res.data.userList;
-						if (self.activityData.radius > 0) {
-							self.getUserLocation();
+						// 当活动设置了签到范围并且是扫核销码进来的
+						if (self.activityData.radius > 0 && self.user_verify) {
+							self.initializeWithLocation();
 						}
 						self.loadding = false;
 						uni.hideLoading();
 					}
 				);
 			},
+			
+			// 初始化并等待位置信息
+			async initializeWithLocation() {
+				try {
 
-			onReg() {
-				this.isOpenReg = true;
+					// 等待获取第一个有效位置
+					const location = await this.startWatchingLocation();
+
+					console.log('获得初始位置:', location);
+
+					// 检查用户是否在活动范围
+					this.updateInRadius();
+
+				} catch (error) {
+					console.error('初始化失败:', error);
+					uni.showToast({
+						title: '位置获取失败,请重新扫码试试',
+						icon: 'none'
+					});
+				}
+			},
+
+			// 修改后的开始监听位置方法,返回 Promise
+			startWatchingLocation() {
+				return new Promise(async (resolve, reject) => {
+					try {
+						// 存储 resolve 和 reject 以便在位置回调中使用
+						this.locationResolve = resolve;
+						this.locationReject = reject;
+
+						// 申请定位权限
+						await this.authorizeLocation();
+
+						// 开始位置更新
+						await this.startLocationUpdate();
+
+						// 监听位置变化
+						this.watchLocationChange();
+
+						// 设置超时处理
+						setTimeout(() => {
+							if (this.locationReject) {
+								this.locationReject(new Error('位置获取超时'));
+								this.locationResolve = null;
+								this.locationReject = null;
+							}
+						}, 10000); // 10秒超时
+
+					} catch (error) {
+						reject(error);
+					}
+				});
+			},
+
+			// 授权定位
+			authorizeLocation() {
+				return new Promise((resolve, reject) => {
+					uni.authorize({
+						scope: 'scope.userLocation',
+						success: resolve,
+						fail: (err) => {
+							uni.showModal({
+								title: '提示',
+								content: '需要您授权位置信息,请前往设置页开启权限',
+								success: (modalRes) => {
+									if (modalRes.confirm) {
+										uni.openSetting({
+											success: (openRes) => {
+												if (openRes.authSetting[
+														'scope.userLocation'
+														]) {
+													resolve();
+												} else {
+													reject(new Error(
+														'用户未授权位置权限'));
+												}
+											}
+										});
+									} else {
+										reject(new Error('用户取消授权'));
+									}
+								}
+							});
+						}
+					});
+				});
+			},
+
+			// 开启位置更新
+			startLocationUpdate() {
+				return new Promise((resolve, reject) => {
+					uni.startLocationUpdate({
+						success: resolve,
+						fail: reject
+					});
+				});
+			},
+
+			// 监听位置变化
+			watchLocationChange() {
+				if (this._locationChangeCallback) {
+					uni.offLocationChange(this._locationChangeCallback);
+				}
+
+				this._locationChangeCallback = (res) => {
+					console.log('位置变化:', res);
+					this.latitude = res.latitude;
+					this.longitude = res.longitude;
+
+					// 如果是第一次获取位置,解析 Promise
+					if (this.locationResolve) {
+						this.locationResolve({
+							latitude: res.latitude,
+							longitude: res.longitude,
+							accuracy: res.accuracy
+						});
+						this.locationResolve = null;
+						this.locationReject = null;
+					}
+
+					// 位置更新后处理
+					this.updateInRadius();
+				};
+
+				uni.onLocationChange(this._locationChangeCallback);
+			},
+
+			// 检查是否在签到范围
+			updateInRadius() {
+				let self = this;
+				// 如果不是扫码进来的或者没有设置活动范围
+				if (!self.user_verify || !self.activityData.radius) {
+					return;
+				}
+				// 计算距离
+				const distance = this.calculateDistance(
+					parseFloat(self.latitude), 
+					parseFloat(self.longitude),
+					parseFloat(self.activityData.latitude), 
+					parseFloat(self.activityData.longitude)
+				);
+				if (distance <= self.activityData.radius) {
+					self.in_radius = true;
+				}
+			},
+
+			// 停止监听位置
+			stopWatchingLocation() {
+				if (this._locationChangeCallback) {
+					uni.offLocationChange(this._locationChangeCallback);
+					this._locationChangeCallback = null;
+				}
+
+				// 清理 Promise 相关状态
+				if (this.locationReject) {
+					this.locationReject(new Error('位置监听已停止'));
+					this.locationResolve = null;
+					this.locationReject = null;
+				}
+
+				uni.stopLocationUpdate();
+			},
+
+			// 获取用户坐标并判断在不在活动范围内(弃用)
+			// getUserLocation() {
+			// 	let self = this;
+			// 	uni.getLocation({
+			// 		type: 'gcj02',
+			// 		success: (res) => {
+			// 			self.latitude = res.latitude;
+			// 			self.longitude = res.longitude;
+			// 			// 计算距离
+			// 			const distance = this.calculateDistance(
+			// 				res.latitude, res.longitude,
+			// 				parseFloat(self.activityData.latitude), parseFloat(self.activityData.longitude)
+			// 			);
+			// 			if (distance <= self.activityData.radius) {
+			// 				self.in_radius = true;
+			// 			}
+			// 		},
+			// 		fail: (err) => {
+			// 			console.error('获取位置失败:', err);
+			// 			uni.showToast({
+			// 				title: '获取位置失败' + err,
+			// 				icon: 'none'
+			// 			});
+			// 		}
+			// 	});
+			// },
+
+			onReg(e) {
 				this.$refs.regForm.activityData = this.activityData;
+				/* this.$refs.regForm.branch_name = this.activityData.branch.name;
+				this.$refs.regForm.formData.branch_id = this.activityData.branch_id; */
+				this.is_friend = e;
+				//if (this.activityData.fee > 0 || e || !this.activityData.is_member) {
+					this.isOpenReg = true;
+				/* } else {
+					uni.showModal({
+						title: '提示',
+						content: '确定要报名吗?',
+						success: (modalRes) => {
+							if (modalRes.confirm) {
+								this.$refs.regForm.onSubmit();
+							}
+						}
+					});
+				} */
 			},
 
 			closeRegFunc(e) {
@@ -305,16 +567,16 @@
 				let self = this;
 				if (!self.in_radius && self.activityData.radius > 0) {
 					uni.showModal({
-					  title: '签到失败',
-					  content: `您距离活动地点太远,无法签到`,
-					  showCancel: false
+						title: '签到失败',
+						content: `您距离活动地点太远,无法签到`,
+						showCancel: false
 					});
 					return false;
 				} else {
 					self.doVierfy();
 				}
 			},
-			
+
 			// 执行签到
 			doVierfy() {
 				let self = this;
@@ -323,38 +585,70 @@
 				});
 				self._post(
 					'branch.activityUser/verify', {
-						activity_id: self.activity_id
+						activity_id: self.activity_id,
+						verify_mobile: self.verify_mobile
 					},
 					function(res) {
 						uni.hideLoading();
+						if (res.data.result =='not_reg') {
+							self.isShowVerify = true;
+							return;
+						}
 						self.isVerify = true;
 						self.getData();
 					}
 				);
 			},
 			
+			// 签到失败弹窗处理
+			popupVerifyFunc(e) {
+				if (e == 'reg') {
+					this.onReg(false);
+				} else if (e == 'retry') { // 朋友帮报名,输入手机号重新签到
+					if (this.verify_mobile == '') {
+						uni.showToast({
+							title: '请输入手机号',
+							icon: 'none'
+						});
+						return;
+					}
+					if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.verify_mobile)) {
+						uni.showToast({
+							title: '请输入正确的手机号',
+							icon: 'none'
+						});
+						return;
+					}
+					this.doVierfy();
+				}
+				this.verify_mobile = '';
+				this.isShowVerify = false;
+			},
+
 			// 计算坐标距离
 			calculateDistance(lat1, lng1, lat2, lng2) {
-			  const R = 6371000; // 地球半径(米)
-			  const toRadians = (degree) => degree * (Math.PI / 180);
-			  
-			  const φ1 = toRadians(lat1);
-			  const φ2 = toRadians(lat2);
-			  const Δφ = toRadians(lat2 - lat1);
-			  const Δλ = toRadians(lng2 - lng1);
-			  
-			  const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
-			            Math.cos(φ1) * Math.cos(φ2) *
-			            Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
-			  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-			  
-			  const distance = R * c;
-			  return Math.round(distance * 100) / 100; // 保留两位小数
+				const R = 6371000; // 地球半径(米)
+				const toRadians = (degree) => degree * (Math.PI / 180);
+
+				const φ1 = toRadians(lat1);
+				const φ2 = toRadians(lat2);
+				const Δφ = toRadians(lat2 - lat1);
+				const Δλ = toRadians(lng2 - lng1);
+
+				const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
+					Math.cos(φ1) * Math.cos(φ2) *
+					Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
+				const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+				const distance = R * c;
+				return Math.round(distance * 100) / 100; // 保留两位小数
 			},
 
 			// 打开相册
 			onAlbum() {
 				this.isOpenAlbum = true;
+				this.$refs.album.initData();
+				this.$refs.album.getData();
 			},
 
 			closeAlbumFunc(e) {
@@ -452,10 +746,81 @@
 					}
 				});
 			},
-			
+
 			gotoSupplier() {
 				this.gotoPage('pages/shop/shop?shop_supplier_id=' + this.activityData.visit_supplier_id);
 			},
+			
+			scanCode() {
+				let self = this;
+				//#ifndef H5
+				// 只允许通过相机扫码
+				uni.scanCode({
+					onlyFromCamera: true,
+					success: function(res) {
+						if (res.errMsg == 'scanCode:ok') {
+							if (res.path != 'undefined') {
+								self.gotoPage(res.path);
+							}
+						} else {
+							uni.showToast({
+								title: '扫码失败,请重试'
+							})
+						}
+					}
+				});
+				//#endif
+			},
+			
+			callPhone(){
+				uni.makePhoneCall({
+					phoneNumber: this.activityData.phone + ''
+				});
+			},
+			
+			/*导航*/
+			openLocation() {
+				let self = this;
+				uni.openLocation({
+					latitude: Number(this.activityData.latitude),
+					longitude: Number(this.activityData.longitude),
+					address: this.activityData.address
+				});
+			},
+			
+			// 打开报名名单
+			openUser() {
+				this.isOpenUser = true;
+			},
+			
+			closeUserFunc(e) {
+				this.isOpenUser = false;
+			},
+
+		},
+		onShareAppMessage() {
+			if (this.activityData) {
+				return {
+					title: `${this.activityData.name}`,
+					path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+				};
+			}
+			return {
+				title: '活动详情',
+				path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+			};
+		},
+		onShareTimeline() {
+			if (this.activityData) {
+				return {
+					title: `${this.activityData.name}`,
+					path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+				};
+			}
+			return {
+				title: '活动详情',
+				path: `/pages/plus/business/detail?activity_id=${this.activity_id}`
+			};
 		}
 	}
 </script>
@@ -529,26 +894,45 @@
 		}
 
 		.iconfont {
-			margin-right: 17rpx;
+			// margin-right: 17rpx;
 			font-size: 34rpx;
 		}
 
 		.activity-item {
 			.avatar-list {
+				.avatar-item {
+					width: 90rpx;
+					padding-right: 10rpx;
+				}
 				image {
 					width: 70rpx;
 					height: 70rpx;
 					border-radius: 70rpx;
-					border: 2rpx solid #ffffff;
-					margin-left: -20rpx;
 				}
 
 				.more {
-					position: relative;
-					width: 140rpx;
-					height: 70rpx;
-					margin-left: -140rpx;
-					background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, .9));
+					padding-left: 10rpx;
+					
+					.more-icon {
+						width: 70rpx;
+						height: 70rpx;
+						border-radius: 70rpx;
+						background: #f1f1f1;
+					}
+				}
+			}
+			
+			.contact {
+				.iconfont {
+					font-size: 30rpx;
+					// font-weight: bold;
+					color: #333333;
+					margin-right: 0;
+				}
+				
+				.text {
+					font-size: 24rpx;
+					color: #333333;
 				}
 			}
 		}
@@ -563,7 +947,7 @@
 				height: 120rpx;
 			}
 		}
-		
+
 		.status-verify {
 			position: absolute;
 			bottom: 200rpx;
@@ -572,7 +956,7 @@
 			border-radius: 60rpx 0 0 60rpx;
 			font-size: 28rpx;
 			padding: 6rpx 20rpx;
-			
+
 			.iconfont {
 				margin-right: 10rpx;
 			}
@@ -708,7 +1092,7 @@
 		}
 	}
 
-	.personal-data .finish-btn .modifyBnt {
+	.personal-data .two-col-btn .modifyBnt {
 		width: 325rpx;
 		margin: 0 20rpx;
 	}
@@ -818,4 +1202,75 @@
 			box-shadow: 0 8rpx 16rpx 0 rgba(226, 35, 26, 0.6);
 		}
 	}
+	
+	.verify-choose {
+		padding-bottom: 78rpx;
+		
+		.verify-input {
+			border: 1rpx solid #ddd;
+			border-radius: 12rpx;
+			padding: 16rpx 0;
+		}
+		
+		.foot {
+			height: 78rpx;
+			border-top: 1px solid #EAEAEA;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+			position: absolute;
+			bottom: 0;
+			left: 0;
+		
+			.btn {
+				color: #999999;
+				font-size: 26rpx;
+				width: 50%;
+				text-align: center;
+				height: 78rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+		
+				+.btn {
+					color: #E93323;
+					position: relative;
+		
+					&::before {
+						content: "";
+						display: block;
+						width: 1px;
+						height: 78rpx;
+						background: #EAEAEA;
+						position: absolute;
+						left: 0;
+						top: 0;
+					}
+				}
+			}
+		}
+	}
+	@keyframes pulse {
+	  0% {
+	    transform: scale(1);
+	  }
+	  50% {
+	    transform: scale(1.2); /* 放大到1.2倍 */
+	  }
+	  100% {
+	    transform: scale(1);
+	  }
+	}
+	.shopping-box {
+		
+		image {
+			width: 180rpx;
+			height: 180rpx;
+			position: fixed;
+			bottom: 130rpx;
+			right: 20rpx;
+			animation: pulse 0.8s infinite; /* 动画名称,持续时间,无限循环 */
+		}
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.2