/**
							 | 
						|
								 * 激励视频广告混入
							 | 
						|
								 * 提供激励视频广告的通用功能
							 | 
						|
								 */
							 | 
						|
								export default {
							 | 
						|
									data() {
							 | 
						|
										return {
							 | 
						|
								            rewardedRecordConfig: {
							 | 
						|
								                category: 3, // 分类 3激励视频
							 | 
						|
								                type: 0, // 类型 0帖子-1租房-2工作-3景点-4美食-5活动-6人找车-7车找人-8文章-9群聊-10抽奖
							 | 
						|
								                formId: '', // 目标对象ID
							 | 
						|
								            },
							 | 
						|
											// 视频广告相关
							 | 
						|
											rewardedVideoAd: null, // 激励视频广告实例
							 | 
						|
											isAdLoaded: false, // 广告是否已加载
							 | 
						|
											isWatchingAd: false, // 是否正在观看广告
							 | 
						|
											adUnitId: 'adunit-3b232fe9e10e8744' // 广告位ID,需要替换为实际的广告位ID
							 | 
						|
										}
							 | 
						|
									},
							 | 
						|
									
							 | 
						|
									mounted() {
							 | 
						|
										this.initRewardedVideoAd()
							 | 
						|
									},
							 | 
						|
									
							 | 
						|
									methods: {
							 | 
						|
										/**
							 | 
						|
										 * 初始化激励视频广告
							 | 
						|
										 */
							 | 
						|
										initRewardedVideoAd() {
							 | 
						|
											// #ifdef MP-WEIXIN
							 | 
						|
											if (wx.createRewardedVideoAd) {
							 | 
						|
												this.rewardedVideoAd = wx.createRewardedVideoAd({
							 | 
						|
													adUnitId: this.adUnitId
							 | 
						|
												})
							 | 
						|
												
							 | 
						|
												// 监听广告加载成功
							 | 
						|
												this.rewardedVideoAd.onLoad(() => {
							 | 
						|
													console.log('激励视频广告加载成功')
							 | 
						|
													this.isAdLoaded = true
							 | 
						|
													// 调用子组件的回调方法(如果存在)
							 | 
						|
													if (this.onAdLoaded && typeof this.onAdLoaded === 'function') {
							 | 
						|
														this.onAdLoaded()
							 | 
						|
													}
							 | 
						|
												})
							 | 
						|
												
							 | 
						|
												// 监听广告加载失败
							 | 
						|
												this.rewardedVideoAd.onError((err) => {
							 | 
						|
													console.log('激励视频广告加载失败', err)
							 | 
						|
													this.isAdLoaded = false
							 | 
						|
													// 调用子组件的回调方法(如果存在)
							 | 
						|
													if (this.onAdError && typeof this.onAdError === 'function') {
							 | 
						|
														this.onAdError(err)
							 | 
						|
													}
							 | 
						|
												})
							 | 
						|
												
							 | 
						|
												// 监听广告关闭
							 | 
						|
												this.rewardedVideoAd.onClose((res) => {
							 | 
						|
													this.isWatchingAd = false
							 | 
						|
													if (res && res.isEnded) {
							 | 
						|
														// 用户看完了广告
							 | 
						|
														console.log('用户看完广告')
							 | 
						|
														// 调用临时回调方法或组件中定义的方法
							 | 
						|
														if (this.tempOnAdWatchComplete && typeof this.tempOnAdWatchComplete === 'function') {
							 | 
						|
															this.tempOnAdWatchComplete()
							 | 
						|
														} else if (this.onAdWatchComplete && typeof this.onAdWatchComplete === 'function') {
							 | 
						|
															this.onAdWatchComplete()
							 | 
						|
														}
							 | 
						|
								
							 | 
						|
													} else {
							 | 
						|
														// 用户中途关闭了广告
							 | 
						|
														console.log('用户中途关闭广告')
							 | 
						|
														// 调用临时回调方法或组件中定义的方法
							 | 
						|
														if (this.tempOnAdWatchCancel && typeof this.tempOnAdWatchCancel === 'function') {
							 | 
						|
															this.tempOnAdWatchCancel()
							 | 
						|
														} else if (this.onAdWatchCancel && typeof this.onAdWatchCancel === 'function') {
							 | 
						|
															this.onAdWatchCancel()
							 | 
						|
														} else {
							 | 
						|
															// 默认提示
							 | 
						|
															uni.showToast({
							 | 
						|
																title: '请观看完整广告',
							 | 
						|
																icon: 'none'
							 | 
						|
															})
							 | 
						|
														}
							 | 
						|
													}
							 | 
						|
								
							 | 
						|
								                    this.$api('addBrowseRecord', {
							 | 
						|
								                        ...this.rewardedRecordConfig,
							 | 
						|
								                        complete: (res && res.isEnded) ? 'Y' : 'N'
							 | 
						|
								                    })
							 | 
						|
													
							 | 
						|
													// 清理临时回调方法
							 | 
						|
													this.tempOnAdWatchComplete = null
							 | 
						|
													this.tempOnAdWatchCancel = null
							 | 
						|
													this.tempOnAdError = null
							 | 
						|
												})
							 | 
						|
												
							 | 
						|
												// 预加载广告
							 | 
						|
												this.rewardedVideoAd.load()
							 | 
						|
											} else {
							 | 
						|
												console.log('当前环境不支持激励视频广告')
							 | 
						|
											}
							 | 
						|
											// #endif
							 | 
						|
										},
							 | 
						|
								
							 | 
						|
										/**
							 | 
						|
										 * 显示激励视频广告
							 | 
						|
										 * @param {Object} options 配置选项
							 | 
						|
										 * @param {Function} options.onSuccess 观看完成后的回调
							 | 
						|
										 * @param {Function} options.onCancel 取消观看的回调
							 | 
						|
										 * @param {Function} options.onError 广告加载失败的回调
							 | 
						|
										 * @param {String} options.fallbackTitle 广告加载失败时的弹窗标题
							 | 
						|
										 * @param {String} options.fallbackContent 广告加载失败时的弹窗内容
							 | 
						|
										 */
							 | 
						|
										showRewardedVideoAd(options = {}) {
							 | 
						|
											// 检查用户是否已登录
							 | 
						|
											if (!this.userInfo || !this.userInfo.id) {
							 | 
						|
												console.log('用户未登录,跳转到登录页面')
							 | 
						|
												// 使用utils中的toLogin方法跳转到登录页面
							 | 
						|
												this.$utils.toLogin()
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
											
							 | 
						|
											// 如果正在观看广告,直接返回
							 | 
						|
											if (this.isWatchingAd) {
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
											
							 | 
						|
											// 保存当前的回调方法,避免覆盖组件中已定义的方法
							 | 
						|
											const originalOnAdWatchComplete = this.onAdWatchComplete
							 | 
						|
											const originalOnAdWatchCancel = this.onAdWatchCancel
							 | 
						|
											const originalOnAdError = this.onAdError
							 | 
						|
											
							 | 
						|
											// 临时设置回调方法
							 | 
						|
											if (options.onSuccess) {
							 | 
						|
												this.tempOnAdWatchComplete = options.onSuccess
							 | 
						|
											}
							 | 
						|
											if (options.onCancel) {
							 | 
						|
												this.tempOnAdWatchCancel = options.onCancel
							 | 
						|
											}
							 | 
						|
											if (options.onError) {
							 | 
						|
												this.tempOnAdError = options.onError
							 | 
						|
											}
							 | 
						|
											
							 | 
						|
											// #ifdef MP-WEIXIN
							 | 
						|
											if (this.rewardedVideoAd) {
							 | 
						|
												this.isWatchingAd = true
							 | 
						|
												this.rewardedVideoAd.show().catch(() => {
							 | 
						|
													// 广告显示失败,重新加载
							 | 
						|
													this.rewardedVideoAd.load().then(() => {
							 | 
						|
														return this.rewardedVideoAd.show()
							 | 
						|
													}).catch((err) => {
							 | 
						|
														console.log('激励视频广告显示失败', err)
							 | 
						|
														this.isWatchingAd = false
							 | 
						|
														
							 | 
						|
														// 显示失败处理
							 | 
						|
														const title = options.fallbackTitle || '广告加载失败'
							 | 
						|
														const content = options.fallbackContent || '无法加载广告,是否继续操作?'
							 | 
						|
														
							 | 
						|
														uni.showModal({
							 | 
						|
															title: title,
							 | 
						|
															content: content,
							 | 
						|
															success: (res) => {
							 | 
						|
																if (res.confirm) {
							 | 
						|
																	// 用户确认继续,调用成功回调
							 | 
						|
																	if (this.tempOnAdWatchComplete && typeof this.tempOnAdWatchComplete === 'function') {
							 | 
						|
																		this.tempOnAdWatchComplete()
							 | 
						|
																	} else if (originalOnAdWatchComplete && typeof originalOnAdWatchComplete === 'function') {
							 | 
						|
																		originalOnAdWatchComplete.call(this)
							 | 
						|
																	}
							 | 
						|
																}
							 | 
						|
																// 恢复原始回调方法
							 | 
						|
																this.onAdWatchComplete = originalOnAdWatchComplete
							 | 
						|
																this.onAdWatchCancel = originalOnAdWatchCancel
							 | 
						|
																this.onAdError = originalOnAdError
							 | 
						|
															}
							 | 
						|
														})
							 | 
						|
													})
							 | 
						|
												})
							 | 
						|
											} else {
							 | 
						|
												// 没有广告实例,直接调用成功回调
							 | 
						|
												if (this.tempOnAdWatchComplete && typeof this.tempOnAdWatchComplete === 'function') {
							 | 
						|
													this.tempOnAdWatchComplete()
							 | 
						|
												} else if (originalOnAdWatchComplete && typeof originalOnAdWatchComplete === 'function') {
							 | 
						|
													originalOnAdWatchComplete.call(this)
							 | 
						|
												}
							 | 
						|
												// 恢复原始回调方法
							 | 
						|
												this.onAdWatchComplete = originalOnAdWatchComplete
							 | 
						|
												this.onAdWatchCancel = originalOnAdWatchCancel
							 | 
						|
												this.onAdError = originalOnAdError
							 | 
						|
											}
							 | 
						|
											// #endif
							 | 
						|
											
							 | 
						|
											// #ifndef MP-WEIXIN
							 | 
						|
											// 非微信小程序环境,直接调用成功回调
							 | 
						|
											if (this.tempOnAdWatchComplete && typeof this.tempOnAdWatchComplete === 'function') {
							 | 
						|
												this.tempOnAdWatchComplete()
							 | 
						|
											} else if (originalOnAdWatchComplete && typeof originalOnAdWatchComplete === 'function') {
							 | 
						|
												originalOnAdWatchComplete.call(this)
							 | 
						|
											}
							 | 
						|
											// 恢复原始回调方法
							 | 
						|
											this.onAdWatchComplete = originalOnAdWatchComplete
							 | 
						|
											this.onAdWatchCancel = originalOnAdWatchCancel
							 | 
						|
											this.onAdError = originalOnAdError
							 | 
						|
											// #endif
							 | 
						|
										},
							 | 
						|
								
							 | 
						|
										/**
							 | 
						|
										 * 重新加载广告
							 | 
						|
										 */
							 | 
						|
										reloadAd() {
							 | 
						|
											// #ifdef MP-WEIXIN
							 | 
						|
											if (this.rewardedVideoAd) {
							 | 
						|
												this.rewardedVideoAd.load()
							 | 
						|
											}
							 | 
						|
											// #endif
							 | 
						|
										},
							 | 
						|
								
							 | 
						|
										/**
							 | 
						|
										 * 销毁广告实例
							 | 
						|
										 */
							 | 
						|
										destroyAd() {
							 | 
						|
											// #ifdef MP-WEIXIN
							 | 
						|
											if (this.rewardedVideoAd) {
							 | 
						|
												this.rewardedVideoAd.destroy()
							 | 
						|
												this.rewardedVideoAd = null
							 | 
						|
											}
							 | 
						|
											// #endif
							 | 
						|
										}
							 | 
						|
									},
							 | 
						|
									
							 | 
						|
									// 组件销毁时清理广告实例
							 | 
						|
									beforeDestroy() {
							 | 
						|
										this.destroyAd()
							 | 
						|
									},
							 | 
						|
									
							 | 
						|
									// uni-app 生命周期
							 | 
						|
									onUnload() {
							 | 
						|
										this.destroyAd()
							 | 
						|
									}
							 | 
						|
								}
							 |