| 
						 | 
						- <template>
 - 	<view>
 -         <!-- 普通模式 -->
 -         <view v-if="!showModel" class="phone" v-show="phone" @click.stop="callPhone">
 -             <image src="/static/image/home/phone.png" mode="widthFix"></image>
 -             {{ title || '联系' + ta[sexName] }}
 -         </view>
 -         
 -         <!-- 悬浮窗模式 -->
 -         <view v-else v-show="phone" class="phone-modal" @click.stop="callPhone">
 -             <view class="phone-modal-content">
 -                 <image src="/static/image/home/phone.png" mode="widthFix"></image>
 -                 <text class="phone-modal-text">{{ title || '联系' + ta[sexName] }}</text>
 -             </view>
 -         </view>
 -     </view>
 - </template>
 - 
 - <script>
 - 	import mixinsSex from '@/mixins/sex.js'
 - 	import rewardedVideoAdMixin from '@/mixins/rewardedVideoAd.js'
 - 	import { mapState } from 'vuex'
 - 	export default {
 - 		mixins: [mixinsSex, rewardedVideoAdMixin],
 - 		props: {
 - 			phone: {
 - 				type: String,
 - 				default: ''
 - 			},
 - 			title: {
 - 				type: String,
 - 				default: ''
 - 			},
 - 			sexName: {
 - 				type: String,
 - 				default: ''
 - 			},
 - 			type: {
 - 				type: String,
 - 				default: ''
 - 			},
 - 			phoneTitle: {
 - 				type: String,
 - 				default: ''
 - 			},
 - 			pid: {
 - 				type: [String, Number],
 - 				default: ''
 - 			},
 - 			// 显示模式:false-普通模式,true-悬浮窗模式
 - 			showModel: {
 - 				type: Boolean,
 - 				default: false
 - 			}
 - 		},
 - 		data() {
 - 			return {
 - 				// 视频广告相关数据已移至混入中
 - 			}
 - 		},
 - 		computed : {
 - 			...mapState(['priceMap']),
 - 		},
 - 		// mounted钩子已在混入中处理
 - 		methods: {
 - 			// 广告观看完成回调
 - 			onAdWatchComplete() {
 - 				console.log('用户看完广告,开始拨打电话')
 - 				this.performCall()
 - 			},
 - 
 - 			// 广告观看取消回调
 - 			onAdWatchCancel() {
 - 				uni.showToast({
 - 					title: '请观看完整广告才能拨打电话',
 - 					icon: 'none'
 - 				})
 - 			},
 - 
 - 			callPhone(){
 - 				
 - 				let data = {
 - 					title : this.phoneTitle,
 - 					type : this.type,
 - 					id : this.pid
 - 				}
 - 
 -                 this.rewardedRecordConfig.type = this.type // 
 -                 this.rewardedRecordConfig.formId = this.pid // 
 - 				
 - 				console.log(data);
 - 				
 - 				if(!data.id || !data.title){
 - 					return uni.showToast({
 - 						title: '缺少参数',
 - 						icon: 'none'
 - 					})
 - 				}
 - 				
 - 				// 注释积分消耗逻辑,改为观看视频
 - 				// uni.showModal({
 - 				// 	title: `确定消耗${this.priceMap.phone}积分呼叫吗?`,
 - 				// 	success : (r) => {
 - 				// 		if(r.confirm){
 - 				// 			this.$api('checkGivePhone', data, res => {
 - 				// 				if(res.code == 200){
 - 				// 					uni.makePhoneCall({
 - 				// 						phoneNumber: this.phone
 - 				// 					})
 - 				// 				}
 - 				// 			})
 - 				// 		}
 - 				// 	}
 - 				// })
 - 				
 - 				// 改为观看视频后拨打电话
 - 				uni.showModal({
 - 					title: '观看广告后拨打电话',
 - 					content: '观看完整视频广告后即可免费拨打电话',
 - 					success : (r) => {
 - 						if(r.confirm){
 - 							// 使用混入的方法显示广告
 - 							this.showRewardedVideoAd({
 - 								onSuccess: this.onAdWatchComplete,
 - 								onCancel: this.onAdWatchCancel,
 - 								fallbackTitle: '广告加载失败',
 - 								fallbackContent: '无法加载广告,是否直接拨打电话?'
 - 							})
 - 						}
 - 					}
 - 				})
 - 			},
 - 
 - 			// 执行拨打电话(观看广告后调用)
 - 			performCall() {
 - 				let data = {
 - 					title : this.phoneTitle,
 - 					type : this.type,
 - 					id : this.pid
 - 				}
 - 
 - 				// 注释原有的积分检查接口调用
 - 				// this.$api('checkGivePhone', data, res => {
 - 				// 	if(res.code == 200){
 - 				// 		uni.makePhoneCall({
 - 				// 			phoneNumber: this.phone
 - 				// 		})
 - 				// 	}
 - 				// })
 - 
 - 				// 直接拨打电话,不再检查积分
 - 				uni.makePhoneCall({
 - 					phoneNumber: this.phone
 - 				})
 - 			}
 - 		}
 - 	}
 - </script>
 - 
 - <style scoped lang="scss">
 - 	// 普通模式样式
 - 	.phone {
 - 		background-color: rgba($uni-color, 0.2);
 - 		color: $uni-color;
 - 		padding: 8rpx 16rpx;
 - 		border-radius: 10rpx;
 - 		margin-left: auto;
 - 		font-size: 26rpx;
 - 
 - 		image {
 - 			width: 20rpx;
 - 			height: 20rpx;
 - 		}
 - 	}
 - 	
 - 	// 悬浮窗模式样式
 - 	.phone-modal {
 - 		position: fixed;
 - 		bottom: calc(140rpx + env(safe-area-inset-bottom));
 - 		right: 30rpx;
 - 		z-index: 999;
 - 		
 - 		.phone-modal-content {
 - 			background: linear-gradient(135deg, $uni-color 0%, rgba($uni-color, 0.8) 100%);
 - 			color: #ffffff;
 - 			padding: 20rpx 30rpx;
 - 			border-radius: 50rpx;
 - 			box-shadow: 0 8rpx 24rpx rgba($uni-color, 0.3);
 - 			display: flex;
 - 			align-items: center;
 - 			justify-content: center;
 - 			min-width: 160rpx;
 - 			transition: all 0.3s ease;
 - 			
 - 			&:active {
 - 				transform: scale(0.95);
 - 				box-shadow: 0 4rpx 12rpx rgba($uni-color, 0.4);
 - 			}
 - 			
 - 			image {
 - 				width: 28rpx;
 - 				height: 28rpx;
 - 				margin-right: 12rpx;
 - 				filter: brightness(0) invert(1); // 将图标变为白色
 - 			}
 - 			
 - 			.phone-modal-text {
 - 				font-size: 28rpx;
 - 				font-weight: 500;
 - 				white-space: nowrap;
 - 			}
 - 		}
 - 		
 - 		// 悬浮窗呼吸动画效果
 - 		&::before {
 - 			content: '';
 - 			position: absolute;
 - 			top: -10rpx;
 - 			left: -10rpx;
 - 			right: -10rpx;
 - 			bottom: -10rpx;
 - 			background: rgba($uni-color, 0.2);
 - 			border-radius: 60rpx;
 - 			animation: pulse 2s infinite;
 - 			z-index: -1;
 - 		}
 - 	}
 - 	
 - 	// 呼吸动画
 - 	@keyframes pulse {
 - 		0% {
 - 			transform: scale(1);
 - 			opacity: 0.7;
 - 		}
 - 		50% {
 - 			transform: scale(1.1);
 - 			opacity: 0.3;
 - 		}
 - 		100% {
 - 			transform: scale(1);
 - 			opacity: 0.7;
 - 		}
 - 	}
 - </style>
 
 
  |