| <template> | |
|   <view class="share-page"> | |
|     <!-- <uv-status-bar></uv-status-bar> --> | |
|      | |
|     <!-- 主要内容区域 --> | |
|     <view class="content"> | |
|       <uv-loading-icon text="生成中,请耐心等待" textSize="40rpx" size="60rpx" v-if="isLoading"></uv-loading-icon> | |
|       <!-- 中间图片 --> | |
|       <view class="image-container" v-else> | |
|         <image  | |
|           class="share-image"  | |
|           :src="Qrcode"  | |
|           mode="aspectFit" | |
|         ></image> | |
|       </view> | |
|     </view> | |
|      | |
|     <!-- 底部固定按钮 --> | |
|     <view class="bottom-button-container"> | |
|       <uv-button :custom-style="{ | |
|         height: '82rpx', | |
|         borderRadius: '198rpx', | |
|         background: '#06DADC', | |
|         border: '2rpx solid #06DADC', | |
|         lineHeight: '82rpx', | |
|         fontSize: '36rpx' | |
|         }" type="primary" @click="save">保存到相册</uv-button> | |
|       <uv-safe-bottom></uv-safe-bottom> | |
|     </view> | |
|   </view> | |
| </template> | |
| 
 | |
| <script> | |
| export default { | |
|   data() { | |
|     return { | |
|       Qrcode: '', | |
|       isLoading: false, | |
|     } | |
|   }, | |
|   methods: { | |
|     handleShare() { | |
|       // 分享逻辑 | |
|       uni.showToast({ | |
|         title: '分享功能', | |
|         icon: 'none' | |
|       }) | |
|     }, | |
|     async save() { | |
|       try { | |
|         // 检查相册权限 | |
|         const authResult = await this.checkPhotoAlbumAuth(); | |
|          | |
|         if (authResult.authSetting['scope.writePhotosAlbum'] === true) { | |
|           // 已有权限,直接保存 | |
|           this.saveToAlbum(); | |
|         } else if (authResult.authSetting['scope.writePhotosAlbum'] === false) { | |
|           // 权限被拒绝,引导用户到设置页面 | |
|           this.showAuthGuide(); | |
|         } else { | |
|           // 未授权,请求权限 | |
|           this.requestPhotoAlbumAuth(); | |
|         } | |
|       } catch (error) { | |
|         console.error('权限检查失败:', error); | |
|         // 如果权限检查失败,直接尝试保存(兼容处理) | |
|         this.saveToAlbum(); | |
|       } | |
|     }, | |
|      | |
|     // 检查相册权限 | |
|     checkPhotoAlbumAuth() { | |
|       return new Promise((resolve, reject) => { | |
|         uni.getSetting({ | |
|           success: (res) => { | |
|             resolve(res); | |
|           }, | |
|           fail: (err) => { | |
|             reject(err); | |
|           } | |
|         }); | |
|       }); | |
|     }, | |
|      | |
|     // 请求相册权限 | |
|     requestPhotoAlbumAuth() { | |
|       uni.authorize({ | |
|         scope: 'scope.writePhotosAlbum', | |
|         success: () => { | |
|           // 权限请求成功,保存图片 | |
|           this.saveToAlbum(); | |
|         }, | |
|         fail: () => { | |
|           // 权限请求被拒绝,引导用户到设置页面 | |
|           this.showAuthGuide(); | |
|         } | |
|       }); | |
|     }, | |
|      | |
|     // 显示权限引导 | |
|     showAuthGuide() { | |
|       uni.showModal({ | |
|         title: '需要相册权限', | |
|         content: '保存图片需要访问您的相册权限,请在设置中开启相册权限后重试', | |
|         confirmText: '去设置', | |
|         cancelText: '取消', | |
|         success: (res) => { | |
|           if (res.confirm) { | |
|             // 打开设置页面 | |
|             uni.openSetting({ | |
|               success: (settingRes) => { | |
|                 if (settingRes.authSetting['scope.writePhotosAlbum']) { | |
|                   // 用户在设置页面开启了权限,再次调用保存 | |
|                   this.saveToAlbum(); | |
|                 } else { | |
|                   uni.showToast({ | |
|                     title: '未开启相册权限', | |
|                     icon: 'none' | |
|                   }); | |
|                 } | |
|               } | |
|             }); | |
|           } | |
|         } | |
|       }); | |
|     }, | |
|      | |
|     // 保存图片到相册 | |
|     saveToAlbum() { | |
|       if (!this.Qrcode) { | |
|         uni.showToast({ | |
|           title: '图片还未加载完成', | |
|           icon: 'none' | |
|         }); | |
|         return; | |
|       } | |
|        | |
|       uni.saveImageToPhotosAlbum({ | |
|         filePath: this.Qrcode, | |
|         success: (res) => { | |
|           uni.showToast({ | |
|             title: '保存成功', | |
|             icon: 'success' | |
|           }); | |
|         }, | |
|         fail: (err) => { | |
|           console.error('保存失败:', err); | |
|           if (err.errMsg.includes('auth')) { | |
|             // 如果是权限问题,再次引导用户 | |
|             this.showAuthGuide(); | |
|           } else { | |
|             uni.showToast({ | |
|               title: '保存失败,请重试', | |
|               icon: 'none' | |
|             }); | |
|           } | |
|         } | |
|       }); | |
|     }, | |
| 
 | |
|     // 获取二维码 | |
|     async getQrcode() { | |
|       this.isLoading = true | |
|       uni.getImageInfo({ | |
|         src: `${this.$config.baseURL}/promotion/qrCode?token=${uni.getStorageSync('token')}` | |
| 		// #ifdef H5 | |
| 		+ '&type=official' | |
| 		// #endif | |
|         , | |
|         success: (image) => { | |
|            | |
|           this.Qrcode = image.path; | |
|           this.$store.commit('setQrcode', this.Qrcode) | |
|           this.isLoading = false | |
|         }, | |
|         fail: (err) => { | |
|           console.error('获取二维码失败:', err); | |
|           this.isLoading = false | |
|         } | |
|       }); | |
|     } | |
|   }, | |
|   onLoad() { | |
|     if (this.$store.state.Qrcode){ | |
|       this.Qrcode = this.$store.state.Qrcode | |
|     }else { | |
|       this.getQrcode() | |
| 
 | |
|     } | |
|   } | |
|    | |
| } | |
| </script> | |
| 
 | |
| <style lang="scss" scoped> | |
| .share-page { | |
|   min-height: 100vh; | |
|   background-color: #f5f5f5; | |
|   display: flex; | |
|   flex-direction: column; | |
| } | |
| 
 | |
| .content { | |
|   height: 100vh; | |
|   flex: 1; | |
|   padding-bottom: 200rpx; | |
|   display: flex; | |
|   align-items: center; | |
|   justify-content: center; | |
|    | |
|   .image-container { | |
|     // background: red; | |
|     display: flex; | |
|     // height: 100%; | |
|     justify-content: center; | |
|     align-items: center; | |
|      | |
|     .share-image { | |
|       height: 90vh; | |
|       width: 670rpx; | |
|       border-radius: 16rpx; | |
|     } | |
|   } | |
| } | |
| 
 | |
| // 底部固定按钮 | |
| .bottom-button-container { | |
|   position: fixed; | |
|   bottom: 0; | |
|   left: 0; | |
|   right: 0; | |
|   padding: 30rpx 40rpx; | |
|   background: rgba(255, 255, 255, 0.95); | |
|   border-top: 1px solid #F1F1F1; | |
| } | |
| </style> |