- <template>
 - 	<view class="page">
 - 		<navbar title="群组详情" bgColor="#5baaff" color="#fff" leftClick @leftClick="$utils.navigateBack" />
 - 		
 - 		<!-- 群组信息 -->
 - 		<view class="group-info">
 - 			<view class="group-header">
 - 				<image :src="groupInfo.image || '/static/image/logo.jpg'" class="group-avatar" mode="aspectFill"></image>
 - 				<view class="group-details">
 - 					<view class="group-name">{{ groupInfo.title || '群组名称' }}</view>
 - 					<view class="group-desc">{{ groupInfo.titleText || '群组描述' }}</view>
 - 					<view class="group-stats">
 - 						<text class="member-count">{{ groupInfo.num || 0 }}人</text>
 - 					</view>
 - 				</view>
 - 			</view>
 - 			
 - 			<view class="group-actions">
 - 				<view v-if="showQrCode" class="qr-code-section">
 - 					<view class="qr-code-title">扫码加入群聊</view>
 - 					<image 
 - 					:src="groupInfo.qrCode || '/static/image/qr/default.jpg'" 
 - 					show-menu-by-longpress
 - 					class="qr-code-image" mode="aspectFit"></image>
 - 					<view class="qr-code-tip">长按保存二维码,微信扫码加入</view>
 - 				</view>
 - 				<view v-else class="watch-ad-btn" @click="watchAd">
 - 					<uv-icon name="play-circle" size="30rpx" color="#fff"></uv-icon>
 - 					<text>观看广告获取二维码</text>
 - 				</view>
 - 				
 - 				<view v-if="userInfo.id == groupInfo.userId" class="admin-buttons">
 - 					<view class="manage-btn" @click="manageGroup">
 - 						<uv-icon name="setting" size="24rpx" color="#fff"></uv-icon>
 - 						<text>编辑</text>
 - 					</view>
 - 					
 - 					<view class="delete-btn" @click="deleteGroup">
 - 						<uv-icon name="trash" size="24rpx" color="#fff"></uv-icon>
 - 						<text>删除</text>
 - 					</view>
 - 				</view>
 - 			</view>
 - 		</view>
 - 		
 - 		<!-- 群组公告 -->
 - 		<view v-if="groupInfo.notice" class="announcement">
 - 			<view class="announcement-title">
 - 				<uv-icon name="volume" size="30rpx" color="#5baaff"></uv-icon>
 - 				<text>群组公告</text>
 - 			</view>
 - 			<view class="announcement-content">
 - 				<uv-parse :content="groupInfo.notice"></uv-parse>
 - 			</view>
 - 		</view>
 - 		
 - 		<!-- 成员列表 -->
 - 		<view class="member-section">
 - 			<view class="section-header">
 - 				<text class="section-title">群组成员</text>
 - 				<text class="member-count-text">({{ groupInfo.num || 0 }}人)</text>
 - 			</view>
 - 			
 - 			<view class="member-list" v-if="groupInfo.userList && groupInfo.userList.length > 0">
 - 				<view 
 - 					v-for="(member, index) in groupInfo.userList" 
 - 					:key="index"
 - 					class="member-item"
 - 					@click="viewMemberProfile(member)"
 - 				>
 - 					<image :src="member.image || '/static/image/logo.jpg'" class="member-avatar" mode="aspectFill"></image>
 - 					<view class="member-info">
 - 						<view class="member-name">{{ member.userName || '用户' }}</view>
 - 					</view>
 - 				</view>
 - 			</view>
 - 			
 - 			<view v-else class="empty-member">
 - 				<uv-empty mode="list" text="暂无成员信息"></uv-empty>
 - 			</view>
 - 		</view>
 - 	</view>
 - </template>
 - 
 - <script>
 - 	import rewardedVideoAdMixin from '@/mixins/rewardedVideoAd.js'
 - 	export default {
 - 		mixins: [rewardedVideoAdMixin],
 - 		data() {
 - 			return {
 - 				groupId: '',
 - 				showQrCode: false, // 是否显示二维码
 - 				groupInfo: {}
 - 				// 视频广告相关数据已移至混入中
 - 			}
 - 		},
 - 		onLoad(options) {
 - 			if (options.id) {
 - 				this.groupId = options.id
 - 				this.getGroupDetail()
 - 			}
 - 			// initRewardedVideoAd() 已在混入的mounted中处理
 - 			
 - 			// 设置分享路径
 - 			this.share.path = '/pages_order/group/groupDetail?id=' + options.id
 - 
 - 			this.rewardedRecordConfig.type = 9 // 9群聊
 - 			this.rewardedRecordConfig.formId = this.groupId // 目标对象ID
 - 		},
 - 		methods: {
 - 			// 广告观看完成回调
 - 			onAdWatchComplete() {
 - 				console.log('用户看完广告,显示群聊二维码')
 - 				this.showQrCodeAfterAd()
 - 			},
 - 
 - 			// 广告观看取消回调
 - 			onAdWatchCancel() {
 - 				uni.showToast({
 - 					title: '请观看完整广告才能获取二维码',
 - 					icon: 'none'
 - 				})
 - 			},
 - 
 - 			// 广告播放完成后显示二维码
 - 			showQrCodeAfterAd() {
 - 				this.showQrCode = true
 - 				this.$api('groupJoin', {id : this.groupId})
 - 				uni.showToast({
 - 					title: '恭喜获得群聊二维码!',
 - 					icon: 'success'
 - 				})
 - 			},
 - 
 - 			// 获取群组详情
 - 			getGroupDetail() {
 - 				this.$api('groupDetail', { id: this.groupId }, res => {
 - 					if (res.code === 200 && res.result) {
 - 						this.groupInfo = res.result
 - 						
 - 						// 设置分享信息
 - 						this.share.title = res.result.shareMsg || res.result.title || '群组详情'
 - 						this.share.imageUrl = this.$utils.getImageOne(res.result.image)
 - 					} else {
 - 						uni.showToast({
 - 							title: res.message || '获取群组详情失败',
 - 							icon: 'none'
 - 						})
 - 					}
 - 				})
 - 			},
 - 			
 - 			// 观看广告
 - 			watchAd() {
 - 				console.log('watchAd 方法被调用')
 - 				console.log('isWatchingAd:', this.isWatchingAd)
 - 				console.log('rewardedVideoAd:', this.rewardedVideoAd)
 - 				
 - 				if (this.isWatchingAd) {
 - 					console.log('正在观看广告,直接返回')
 - 					return
 - 				}
 - 				
 - 				console.log('开始显示激励视频广告')
 - 				// 显示激励视频广告
 - 				this.showRewardedVideoAd({
 - 					onSuccess: this.onAdWatchComplete,
 - 					onCancel: this.onAdWatchCancel,
 - 					fallbackTitle: '广告加载失败',
 - 					fallbackContent: '无法加载广告,是否直接显示二维码?'
 - 				})
 - 			},
 - 			
 - 			// 查看成员资料
 - 			viewMemberProfile(member) {
 - 				// this.$utils.navigateTo('/pages_order/profile/userProfile?id=' + member.id)
 - 			},
 - 			
 - 			// 管理群组
 - 			manageGroup() {
 - 				this.$utils.navigateTo('/pages_order/group/createGroup?id=' + this.groupId)
 - 			},
 - 			
 - 			// 删除群组
 - 			deleteGroup() {
 - 				uni.showModal({
 - 					title: '确认删除',
 - 					content: '确定要删除这个群组吗?删除后无法恢复!',
 - 					confirmText: '删除',
 - 					confirmColor: '#ff4757',
 - 					success: (res) => {
 - 						if (res.confirm) {
 - 							this.confirmDeleteGroup()
 - 						}
 - 					}
 - 				})
 - 			},
 - 			
 - 			// 确认删除群组
 - 			confirmDeleteGroup() {
 - 				uni.showLoading({
 - 					title: '删除中...'
 - 				})
 - 				
 - 				this.$api('deleteGroup', { id: this.groupId }, res => {
 - 					uni.hideLoading()
 - 					if (res.code === 200) {
 - 						uni.showToast({
 - 							title: '删除成功',
 - 							icon: 'success'
 - 						})
 - 						setTimeout(() => {
 - 							this.$utils.navigateBack()
 - 						}, 1500)
 - 					} else {
 - 						uni.showToast({
 - 							title: res.message || '删除失败',
 - 							icon: 'none'
 - 						})
 - 					}
 - 				})
 - 			}
 - 		}
 - 	}
 - </script>
 - 
 - <style scoped>
 - 	.page {
 - 		background-color: #f5f5f5;
 - 		min-height: 100vh;
 - 	}
 - 	
 - 	.group-info {
 - 		background: #fff;
 - 		margin: 20rpx;
 - 		border-radius: 20rpx;
 - 		padding: 30rpx;
 - 		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
 - 	}
 - 	
 - 	.group-header {
 - 		display: flex;
 - 		align-items: center;
 - 		margin-bottom: 30rpx;
 - 	}
 - 	
 - 	.group-avatar {
 - 		width: 120rpx;
 - 		height: 120rpx;
 - 		border-radius: 20rpx;
 - 		margin-right: 30rpx;
 - 	}
 - 	
 - 	.group-details {
 - 		flex: 1;
 - 	}
 - 	
 - 	.group-name {
 - 		font-size: 36rpx;
 - 		font-weight: bold;
 - 		color: #333;
 - 		margin-bottom: 10rpx;
 - 	}
 - 	
 - 	.group-desc {
 - 		font-size: 28rpx;
 - 		color: #666;
 - 		margin-bottom: 15rpx;
 - 	}
 - 	
 - 	.group-stats {
 - 		display: flex;
 - 		align-items: center;
 - 	}
 - 	
 - 	.member-count {
 - 		font-size: 24rpx;
 - 		color: #999;
 - 		background: #f0f0f0;
 - 		padding: 8rpx 16rpx;
 - 		border-radius: 20rpx;
 - 	}
 - 	
 - 	.group-actions {
 - 		display: flex;
 - 		flex-direction: column;
 - 		gap: 20rpx;
 - 	}
 - 	
 - 	.qr-code-section {
 - 		background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
 - 		border-radius: 20rpx;
 - 		padding: 40rpx;
 - 		text-align: center;
 - 		color: #fff;
 - 		animation: fadeIn 0.5s ease-in-out;
 - 	}
 - 	
 - 	.qr-code-title {
 - 		font-size: 32rpx;
 - 		font-weight: bold;
 - 		margin-bottom: 30rpx;
 - 	}
 - 	
 - 	.qr-code-image {
 - 		width: 300rpx;
 - 		height: 300rpx;
 - 		background: #fff;
 - 		border-radius: 20rpx;
 - 		margin: 0 auto 30rpx;
 - 		padding: 20rpx;
 - 		box-sizing: border-box;
 - 	}
 - 	
 - 	.qr-code-tip {
 - 		font-size: 24rpx;
 - 		opacity: 0.8;
 - 	}
 - 	
 - 	.watch-ad-btn {
 - 		background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);
 - 		border-radius: 20rpx;
 - 		padding: 30rpx;
 - 		display: flex;
 - 		align-items: center;
 - 		justify-content: center;
 - 		gap: 15rpx;
 - 		color: #fff;
 - 		font-size: 30rpx;
 - 		font-weight: bold;
 - 		box-shadow: 0 8rpx 25rpx rgba(255, 107, 107, 0.3);
 - 		transition: all 0.3s ease;
 - 	}
 - 	
 - 	.watch-ad-btn:active {
 - 		transform: translateY(2rpx);
 - 		box-shadow: 0 4rpx 15rpx rgba(255, 107, 107, 0.3);
 - 	}
 - 	
 - 	.admin-buttons {
 - 		display: flex;
 - 		gap: 20rpx;
 - 		margin-top: 20rpx;
 - 	}
 - 	
 - 	.manage-btn {
 - 		background: linear-gradient(135deg, #5baaff 0%, #4285f4 100%);
 - 		border-radius: 15rpx;
 - 		padding: 15rpx 20rpx;
 - 		display: flex;
 - 		align-items: center;
 - 		justify-content: center;
 - 		gap: 8rpx;
 - 		color: #fff;
 - 		font-size: 24rpx;
 - 		box-shadow: 0 4rpx 15rpx rgba(91, 170, 255, 0.3);
 - 		flex: 1;
 - 		transition: all 0.3s ease;
 - 	}
 - 	
 - 	.manage-btn:active {
 - 		transform: translateY(2rpx);
 - 		box-shadow: 0 2rpx 10rpx rgba(91, 170, 255, 0.3);
 - 	}
 - 	
 - 	.delete-btn {
 - 		background: linear-gradient(135deg, #ff4757 0%, #ff3742 100%);
 - 		border-radius: 15rpx;
 - 		padding: 15rpx 20rpx;
 - 		display: flex;
 - 		align-items: center;
 - 		justify-content: center;
 - 		gap: 8rpx;
 - 		color: #fff;
 - 		font-size: 24rpx;
 - 		box-shadow: 0 4rpx 15rpx rgba(255, 71, 87, 0.3);
 - 		flex: 1;
 - 		transition: all 0.3s ease;
 - 	}
 - 	
 - 	.delete-btn:active {
 - 		transform: translateY(2rpx);
 - 		box-shadow: 0 4rpx 15rpx rgba(255, 71, 87, 0.3);
 - 	}
 - 	
 - 	.announcement {
 - 		background: #fff;
 - 		margin: 20rpx;
 - 		border-radius: 20rpx;
 - 		padding: 30rpx;
 - 		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
 - 	}
 - 	
 - 	.announcement-title {
 - 		display: flex;
 - 		align-items: center;
 - 		gap: 15rpx;
 - 		font-size: 32rpx;
 - 		font-weight: bold;
 - 		color: #333;
 - 		margin-bottom: 20rpx;
 - 	}
 - 	
 - 	.announcement-content {
 - 		font-size: 28rpx;
 - 		line-height: 1.6;
 - 		color: #666;
 - 	}
 - 	
 - 	.member-section {
 - 		background: #fff;
 - 		margin: 20rpx;
 - 		border-radius: 20rpx;
 - 		padding: 30rpx;
 - 		box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
 - 	}
 - 	
 - 	.section-header {
 - 		display: flex;
 - 		align-items: center;
 - 		gap: 10rpx;
 - 		margin-bottom: 30rpx;
 - 	}
 - 	
 - 	.section-title {
 - 		font-size: 32rpx;
 - 		font-weight: bold;
 - 		color: #333;
 - 	}
 - 	
 - 	.member-count-text {
 - 		font-size: 24rpx;
 - 		color: #999;
 - 	}
 - 	
 - 	.member-list {
 - 		display: flex;
 - 		flex-direction: column;
 - 		gap: 20rpx;
 - 	}
 - 	
 - 	.member-item {
 - 		display: flex;
 - 		align-items: center;
 - 		padding: 20rpx;
 - 		border-radius: 15rpx;
 - 		background: #f8f9fa;
 - 		transition: all 0.3s ease;
 - 	}
 - 	
 - 	.member-item:active {
 - 		background: #e9ecef;
 - 		transform: scale(0.98);
 - 	}
 - 	
 - 	.member-avatar {
 - 		width: 80rpx;
 - 		height: 80rpx;
 - 		border-radius: 50%;
 - 		margin-right: 20rpx;
 - 	}
 - 	
 - 	.member-info {
 - 		flex: 1;
 - 	}
 - 	
 - 	.member-name {
 - 		font-size: 28rpx;
 - 		color: #333;
 - 	}
 - 	
 - 	.empty-member {
 - 		padding: 60rpx 0;
 - 		text-align: center;
 - 	}
 - 	
 - 	@keyframes fadeIn {
 - 		from {
 - 			opacity: 0;
 - 			transform: translateY(20rpx);
 - 		}
 - 		to {
 - 			opacity: 1;
 - 			transform: translateY(0);
 - 		}
 - 	}
 - </style>
 
 
  |