<template> <view v-if="posterImageStatus" class="poster-first"> <div class="posterCanvasWarp"> <canvas class="posterCanvas" canvas-id="myCanvas"></canvas> </div> <!-- <view class="poster-pop" v-show="!canvasStatus"> <image src="@/static/images/poster-close.png" class="close" @click="posterImageClose" /> <view class="canvas" ref="poster"> <image class="image" :src="posterData.image" alt="商品图片" /> <view class="text black"> <text v-text="posterData.title"></text> </view> <view class="text rad"> <text v-text="'¥' + posterData.price"></text> </view> <view class="code"> <view class="code-img"> <image :src="posterData.code" show-menu-by-longpress mode="widthFix" alt="二维码" /> </view> <view class="code-text"> <text>长按识别二维码 立即购买</text> </view> </view> </view> <view class="save-poster" @click="savePosterPath">生成图片</view> </view>--> <view class="poster-pop" v-show="canvasStatus"> <img src="@/static/images/poster-close.png" class="close" @click="posterImageClose" mode="widthFix" /> <image :src="posterImage" alt="tp" class="poster-image" show-menu-by-longpress mode="widthFix" /> <view class="keep">长按图片可以保存到手机</view> </view> <view class="mask"></view> </view> </template> <script> // import html2canvas from "html2canvas"; import { PosterCanvas } from "@/utils"; import { getProductPoster } from "@/api/store"; export default { name: "StorePoster", props: { posterImageStatus: Boolean, posterData: Object, goodId: String }, data: function () { return { canvasStatus: false, posterImage: "" }; }, watch: { posterImageStatus: function () { var that = this; if (that.posterImageStatus === true) { that.$nextTick(function () { that.savePosterPath(); }); } } }, mounted: function () {}, methods: { posterImageClose: function () { this.posterImageStatus = false; this.canvasStatus = false; this.$emit("setPosterImageStatus"); }, savePosterPath: function () { const that = this; uni.showLoading({ title: "海报生成中", mask: true }); getProductPoster(this.goodId, { from: this.$deviceType == 'weixin' || this.$deviceType == 'weixinh5' ? 'uniappH5' : this.$deviceType }) .then(res => { this.canvasStatus = true; this.posterImage = res.data; }) .finally(() => { uni.hideLoading(); }); // return; // //清空图片重新生成 // that.posterImage = ""; // uni.showLoading({ title: "海报生成中", mask: true }); // console.log(this); // var prodId = that.$yrouter.currentRoute.query.id; // uni.downloadFile({ // url: // this.$VUE_APP_API_URL + // "/shareImg/" + // prodId + // "?shareImgName=" + // this.posterData.code, // fail: function(res) {}, // success: function(res) { // that.canvasStatus = true; // that.posterImage = res.tempFilePath; // uni.hideLoading(); // } // }); } } }; </script> <style scoped lang="less" lang="less"> .poster-first { overscroll-behavior: contain; } .poster-pop { width: 4.5 * 100rpx; height: 8 * 100rpx; position: fixed; left: 50%; transform: translateX(-50%); z-index: 99; top: 50%; margin-top: -4.6 * 100rpx; } .poster-pop .canvas { background-color: #ffffff; height: 8 * 100rpx; } .poster-pop .poster-image { width: 100%; height: auto; } .poster-pop .canvas .image { width: 4.5 * 100rpx; height: 4.5 * 100rpx; display: block; } .poster-pop .canvas .text { text-align: center; color: #000000; margin-top: 0.32 * 100rpx; } .poster-pop .canvas .text.black { height: 0.68 * 100rpx; } .poster-pop .canvas .text.rad { color: #ff0000; } .poster-pop .canvas .code { height: 1.4 * 100rpx; display: flex; } .poster-pop .canvas .code .code-img { width: 33%; padding: 0.06 * 100rpx; } .poster-pop .canvas .code .code-img image { width: 100%; } .poster-pop .canvas .code .code-text { width: 60%; font-size: 0.12 * 100rpx; line-height: 1.64 * 100rpx; } .poster-pop .close { width: 0.46 * 100rpx; height: 0.75 * 100rpx; position: fixed; right: 0; top: -0.73 * 100rpx; display: block; } .poster-pop .save-poster { background-color: #df2d0a; font-size: 0.22 * 100rpx; color: #fff; text-align: center; height: 0.76 * 100rpx; line-height: 0.76 * 100rpx; width: 100%; margin-top: -0.04 * 100rpx; } .poster-pop .keep { color: #fff; text-align: center; font-size: 0.25 * 100rpx; margin-top: 0.1 * 100rpx; } .mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.6); z-index: 9; } </style>