| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- <template>
- <view>
- <view class='poster-poster'>
- <view class='tip'><text class='iconfont icon-shuoming'></text>提示:点击图片即可保存至手机相册 </view>
- <view class='pictrue' v-if="canvasStatus">
- <image :src='imagePath'></image>
- </view>
- <view class="canvas">
- <canvas style="width:750px;height:1130px;" canvas-id="firstCanvas" id="firstCanvas"></canvas>
- <canvas canvas-id="qrcode" :style="{width: `${qrcodeSize}px`, height: `${qrcodeSize}px`}" style="opacity: 0;"/>
- </view>
- </view>
- </view>
- </template>
- <script>
- import { getCombinationPink, getCombinationPoster } from '../../../api/activity.js';
- import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js';
- import { imageBase64 } from "@/api/public";
- export default {
- data() {
- return {
- parameter: {
- 'navbar': '1',
- 'return': '1',
- 'title': '拼团海报',
- 'color': true,
- 'class': '0'
- },
- type: 0,
- id: 0,
- image: '',
- from:'',
- storeCombination: {},
- qrcodeSize: 600,
- posterbackgd: '/static/images/canbj.png',
- PromotionCode: '',//二维码
- canvasStatus: false,
- imgTop: '' //商品图base64位
- }
- },
- onLoad(options) {
- // #ifdef MP
- this.from = 'routine'
- // #endif
- // #ifdef H5
- this.from = 'wechat'
- // #endif
- var that = this;
- if (options.hasOwnProperty('type') && options.hasOwnProperty('id')) {
- this.type = options.type
- this.id = options.id
- if (options.type == 1) {
- uni.setNavigationBarTitle({
- title: '砍价海报'
- })
- } else {
- uni.setNavigationBarTitle({
- title: '拼团海报'
- })
- }
- } else {
- return app.Tips({
- title: '参数错误',
- icon: 'none'
- }, {
- tab: 3,
- url: 1
- });
- }
- },
- onShow() {
- this.getPosterInfo();
- },
- methods: {
- getPosterInfo: function() {
- var that = this,url = '';
- let data = {
- pinkId: parseFloat(that.id),
- from: that.from
- };
- if (that.type == 1) {
-
- } else {
- this.getCombinationPink();
- }
- },
- //拼团信息
- getCombinationPink: function() {
- var that = this;
- getCombinationPink(this.id)
- .then(res => {
- this.storeCombination = res.data;
- this.getImageBase64(res.data.storeCombination.image);
- // #ifdef H5
- that.make(res.data.userInfo.uid);
- // #endif
- })
- .catch(err => {
- this.$util.Tips({
- title: err
- });
- uni.redirectTo({
- success(){},
- fail() {
- uni.navigateTo({
- url: '/pages/index/index',
- })
- }
- })
- });
- },
- getImageBase64:function(images){
- let that = this;
- imageBase64({url:images}).then(res=>{
- that.imgTop = res.data.code
- })
- },
- // 生成二维码;
- make(uid) {
- let href = location.protocol + '//' + window.location.host + '/pages/activity/goods_combination_status/index?id=' + this.id + "&spread=" + uid;
- uQRCode.make({
- canvasId: 'qrcode',
- text: href,
- size: this.qrcodeSize,
- margin: 10,
- success: res => {
- this.PromotionCode = res;
- let arrImages = [this.posterbackgd, this.imgTop, this.PromotionCode];
- let storeName = this.storeCombination.storeCombination.title;
- let price = this.storeCombination.storeCombination.price;
- let people = this.storeCombination.storeCombination.people;
- let otPrice = this.storeCombination.storeCombination.otPrice;
- let count = this.storeCombination.count;
- setTimeout(() => {
- this.PosterCanvas(arrImages, storeName, price, people,otPrice,count);
- }, 300);
- },
- complete: () => {
- },
- fail:res=>{
- this.$util.Tips({
- title: '海报二维码生成失败!'
- });
- }
- })
- },
- // 生成海报
- PosterCanvas:function(arrImages, storeName, price, people,otPrice,count){
- uni.showLoading({
- title: '海报生成中',
- mask: true
- });
- let context = uni.createCanvasContext('firstCanvas')
- context.clearRect(0, 0, 0, 0);
- let that = this;
- uni.getImageInfo({
- src: arrImages[0],
- success: function (image) {
- context.drawImage(arrImages[0], 0, 0, 750, 1190);
- context.setFontSize(36);
- context.setTextAlign('center');
- context.setFillStyle('#282828');
- let maxText = 20;
- let text = storeName;
- let topText = '';
- let bottomText = '';
- let len = text.length;
- if(len>maxText*2){
- text = text.slice(0,maxText*2-4)+'......';
- topText = text.slice(0,maxText-1);
- bottomText = text.slice(maxText-1,len);
- }else{
- if(len>maxText){
- topText = text.slice(0,maxText-1);
- bottomText = text.slice(maxText-1,len);
- }else{
- topText = text;
- bottomText = '';
- }
- }
- context.fillText(topText, 750/2, 60);
- context.fillText(bottomText, 750/2, 100);
-
- context.drawImage(arrImages[1], 150, 350, 450, 450);
- context.save();
- context.drawImage(arrImages[2], 300, 950, 140, 140);
- context.restore();
-
- context.setFontSize(72);
- context.setFillStyle('#fc4141');
- context.fillText(price, 250, 210);
-
- context.setFontSize(32);
- context.setFillStyle('#FFFFFF');
- context.fillText( people+'人团', 538, 198);
-
-
- context.setFontSize(26);
- context.setFillStyle('#3F3F3F');
- context.setTextAlign('center');
- context.fillText( '原价:¥'+otPrice +' 还差 ' + count + '人 拼团成功', 750 / 2, 275);
-
- context.draw(true,function(){
- uni.canvasToTempFilePath({
- destWidth: 750,
- destHeight: 1190,
- canvasId: 'firstCanvas',
- fileType: 'jpg',
- success: function(res) {
- // 在H5平台下,tempFilePath 为 base64
- uni.hideLoading();
- that.imagePath = res.tempFilePath;
- that.canvasStatus = true;
- }
- })
- })
- },
- fail: function(err) {
- uni.hideLoading();
- that.$util.Tips({
- title: '无法获取图片信息'
- });
- }
- })
- },
- showImage: function() {
- var that = this;
- let imgArr = this.image.split(',')
- uni.previewImage({
- urls: imgArr,
- longPressActions: {
- itemList: ['发送给朋友', '保存图片', '收藏'],
- success: function(data) {
- console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
- },
- fail: function(err) {
- console.log(err.errMsg);
- }
- }
- });
- },
- }
- }
- </script>
- <style>
- page {
- background-color: #d22516 !important;
- }
- .canvas {
- position:fixed;
- z-index: -5;
- opacity: 0;
- }
- .poster-poster .tip {
- height: 80rpx;
- font-size: 26rpx;
- color: #e8c787;
- text-align: center;
- line-height: 80rpx;
- }
- .poster-poster .tip .iconfont {
- font-size: 36rpx;
- vertical-align: -4rpx;
- margin-right: 18rpx;
- }
- .poster-poster .pictrue {
- width: 690rpx;
- height: 1130rpx;
- margin: 0 auto 50rpx auto;
- }
- .poster-poster .pictrue image {
- width: 100%;
- height: 100%;
- }
- </style>
|