forked from angelo/web-retail-h5
245 lines
5.7 KiB
Vue
245 lines
5.7 KiB
Vue
<!--
|
|
* @Descripttion:
|
|
* @version:
|
|
* @Author: kBank
|
|
* @Date: 2022-12-13 15:02:12
|
|
-->
|
|
<template>
|
|
<view>
|
|
<!-- 海报 -->
|
|
<view class="popup"
|
|
v-show="popShow">
|
|
<view class="all"
|
|
id="qrCodeDiv"
|
|
ref="qrCodeDiv">
|
|
<canvas :style="{ width: canvasW + 'px', height: canvasH + 'px' }"
|
|
canvas-id="myCanvas"
|
|
id="myCanvas"></canvas>
|
|
</view>
|
|
<view class="btn"
|
|
@click="savePosterPath()">保存到手机</view>
|
|
|
|
</view>
|
|
<!-- 模态框 -->
|
|
<view class="mask"
|
|
v-show="popShow"
|
|
@tap="popShow = false"></view>
|
|
<!-- 底部弹框 -->
|
|
<u-action-sheet :actions="list"
|
|
:closeOnClickOverlay="true"
|
|
@close="closeIsShow"
|
|
@select="selectClick"
|
|
:show="isShow"></u-action-sheet>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { qrCode } from '@/config/goods.js'
|
|
export default {
|
|
data() {
|
|
return {
|
|
bgImg:
|
|
'https://sea-buck.oss-cn-beijing.aliyuncs.com/test/resources/share.jpg',
|
|
postImg: '',
|
|
goodImg: '',
|
|
canvasW: 320, // 画布宽
|
|
canvasH: 480, // 画布高
|
|
popShow: false,
|
|
isShow: false,
|
|
list: [
|
|
{
|
|
name: '生成海报',
|
|
},
|
|
],
|
|
}
|
|
},
|
|
methods: {
|
|
selectClick() {
|
|
this.popShow = true
|
|
this.isShow = false
|
|
},
|
|
closeIsShow() {
|
|
this.isShow = false
|
|
},
|
|
// 点击分享
|
|
openImg(item) {
|
|
this.isShow = true
|
|
this.toShare(item)
|
|
},
|
|
toShare(item) {
|
|
let pkId = item.pkId
|
|
this.goodImg = item.cover1
|
|
qrCode({
|
|
codeType: 1,
|
|
waresId: pkId,
|
|
}).then((res) => {
|
|
this.postImg = res.data
|
|
this.toCanvas()
|
|
// this.popShow = true
|
|
})
|
|
},
|
|
async toCanvas() {
|
|
// 背景图片
|
|
let imgBg = await this.storyImg(this.bgImg)
|
|
// 商品图片
|
|
let imggoodList = await this.storyImg(this.goodImg)
|
|
// 二维码
|
|
let imgPost = await this.storyImg(this.postImg)
|
|
setTimeout(() => {
|
|
var ctx = uni.createCanvasContext('myCanvas', this)
|
|
ctx.drawImage(imgBg, 0, 0, this.canvasW, this.canvasH) //插入图片
|
|
ctx.drawImage(imggoodList, 95, 175, 130, 130)
|
|
ctx.drawImage(imgPost, 239, 392, 65, 65)
|
|
ctx.draw(true, (ret) => {})
|
|
}, 100)
|
|
},
|
|
//获取图片缓存地址
|
|
storyImg(img) {
|
|
return new Promise((reslove, reject) => {
|
|
uni.getImageInfo({
|
|
src: img,
|
|
success: (res) => {
|
|
reslove(res.path)
|
|
},
|
|
})
|
|
})
|
|
},
|
|
// 保存相册
|
|
savePosterPath() {
|
|
let that = this
|
|
uni.getSetting({
|
|
success(res) {
|
|
console.log('res', res)
|
|
if (!res.authSetting['scope.writePhotosAlbum']) {
|
|
uni.authorize({
|
|
scope: 'scope.writePhotosAlbum',
|
|
success() {
|
|
// 同意授权
|
|
that.saveLocal()
|
|
},
|
|
fail() {
|
|
console.log('拒绝过授权')
|
|
uni.showModal({
|
|
title: '授权提示',
|
|
content: '是否允许获取保存相册权限',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
// 点击确定,则调用相册授权
|
|
uni.openSetting({
|
|
success(set) {
|
|
if (set.authSetting['scope.writePhotosAlbum']) {
|
|
uni.showToast({
|
|
title: '授权成功',
|
|
})
|
|
} else {
|
|
uni.showToast({
|
|
title: '请确定已打开保存权限',
|
|
icon: 'none',
|
|
})
|
|
}
|
|
},
|
|
})
|
|
}
|
|
},
|
|
})
|
|
},
|
|
})
|
|
} else {
|
|
// 受过全
|
|
that.saveLocal()
|
|
}
|
|
},
|
|
})
|
|
},
|
|
saveLocal() {
|
|
console.log('d')
|
|
// canvas转图片
|
|
uni.canvasToTempFilePath({
|
|
canvasId: 'myCanvas',
|
|
success: function (res) {
|
|
console.log('res', res)
|
|
// // 保存相册
|
|
uni.saveImageToPhotosAlbum({
|
|
filePath: res.tempFilePath,
|
|
success: function () {
|
|
console.log('save success')
|
|
uni.showToast({
|
|
title: '已保存在本地相册',
|
|
icon: 'none',
|
|
})
|
|
},
|
|
fail: function () {
|
|
uni.showToast({
|
|
title: '保存失败',
|
|
icon: 'none',
|
|
})
|
|
},
|
|
})
|
|
},
|
|
fail: function (err) {
|
|
console.log('err', err)
|
|
},
|
|
},this)
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.popup {
|
|
position: fixed;
|
|
z-index: 9999;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
.btn {
|
|
width: 320px;
|
|
padding: 20rpx 0;
|
|
text-align: center;
|
|
margin-top: 60rpx;
|
|
background: #fbb61e;
|
|
color: #fff;
|
|
}
|
|
.toSave {
|
|
color: #fff;
|
|
text-align: center;
|
|
font-size: 30rpx;
|
|
margin-top: 60rpx;
|
|
}
|
|
.all {
|
|
width: 320px;
|
|
height: 480px;
|
|
}
|
|
.bgImg {
|
|
position: relative;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
.goodsImg {
|
|
width: 260rpx;
|
|
height: 260rpx;
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
.qrImg {
|
|
width: 120rpx;
|
|
height: 120rpx;
|
|
position: absolute;
|
|
bottom: 96rpx;
|
|
right: 62rpx;
|
|
border-radius: 50%;
|
|
}
|
|
.mask {
|
|
width: 100%;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 999;
|
|
height: 100vh;
|
|
background: rgba(0, 0, 0, 80%);
|
|
overflow: hidden;
|
|
}
|
|
</style> |