<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>
|