四零语境前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

221 lines
5.3 KiB

<template>
<view class="share-page">
<!-- <uv-status-bar></uv-status-bar> -->
<!-- 主要内容区域 -->
<view class="content">
<!-- 中间图片 -->
<view class="image-container">
<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: '',
}
},
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() {
// const res = await this.$api.promotion.qrCode()
// if (res.code === 200) {
uni.getImageInfo({
src: `${this.$config.baseURL}/promotion/qrCode?token=${uni.getStorageSync('token')}`,
success: (image) => {
console.log(image.width);
console.log(image.path);
this.Qrcode = image.path;
console.log(image.height);
}
});
// }
}
},
onShow() {
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>