Files
2025-04-30 14:04:34 +08:00

439 lines
13 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container-wrap">
<view class="flex justify-start align-center text-333" style="width: 100%;"
:style="[{ height: CustomBar + 'px', paddingTop: StatusBar + 'px' }]">
<view class="header-title">
<view class="cuIcon-back header-left" @click="handleJump" data-type="BACK"></view>
<view class="header-center text-333">海报</view>
</view>
</view>
<image class="canvas-img" :src="canvasImg" mode="widthFix"></image>
<!-- <view class="content-wrap flex flex-direction align-center justify-center">
<image class="logo" src="/static/logo.png" mode="widthFix"></image>
<image class="avatar" :src="userInfo.head_img" mode="widthFix"></image>
<view class="name text-lg text-333 margin-top-sm">{{userInfo.user_nickname}}</view>
<view class="code text-df text-333 margin-top-sm">{{ i18n['邀请码'] }}{{userInfo.invite_code}}</view>
<image class="code-img" :src="userInfo.qrcode" mode="widthFix"></image>
<view class="desc text-df text-333 margin-top-sm">{{ i18n['扫码下载,即享新世界'] }}</view>
<view class="app-name text-sm text-999 margin-top-sm">{{ i18n['来啰外卖'] }}</view>
</view> -->
<view class="share-wrap flex align-center justify-center">
<!-- #ifndef MP-WEIXIN -->
<!-- <view @click="share(1)" class="item flex-sub flex flex-direction justify-center align-center ">
<image src="../static/1.png" mode="widthFix"></image>
<text class="text-sm text-333">{{ i18n['微信'] }}</text>
</view>
<view @click="share(2)" class="item flex-sub flex flex-direction justify-center align-center">
<image src="../static/2.png" mode="widthFix"></image>
<text class="text-sm text-333">{{ i18n['朋友圈'] }}</text>
</view> -->
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<!-- <button open-type="share" class="item flex-sub flex flex-direction justify-center align-center ">
<image src="../static/1.png" mode="widthFix"></image>
<text class="text-sm text-333">{{ i18n['微信'] }}</text>
</button> -->
<!-- #endif -->
<view @click="savaImg" class="item flex-sub flex flex-direction justify-center align-center">
<image src="../static/3.png" mode="widthFix"></image>
<text class="text-sm text-333">保存图片</text>
</view>
</view>
<canvas
style="width: 504px; height: 700px; background-color: #fff; position: fixed; top: -10000px; left: -10000px;"
canvas-id="canvas" id="canvas"></canvas>
</view>
</template>
<script>
export default {
data() {
return {
userInfo: null,
canvasImg: null
};
},
/**
* @param {Object} options 入参
*/
onLoad(options) {
this.getMyInviteData();
},
methods: {
async getPictureInformation(url) {
// let downLoadImgInfo = await uni.downloadFile({
// url: url
// });
// console.log(downLoadImgInfo[1].tempFilePath);
let imgInfo = await uni.getImageInfo({
src: url
})
console.log(imgInfo[1]);
return imgInfo[1]
},
async createPoster1() {
const that = this;
let logo = '/static/logo.png'
var context = uni.createCanvasContext('canvas', this)
context.setFillStyle('white')
context.fillRect(0, 0, 504, 818)
// 绘制圆角矩形
context.save();
context.beginPath();
context.arc(66, 66, 34, 0, 2 * Math.PI); // 圆心坐标(100, 100)半径为100
context.closePath();
context.clip();
// 绘制图片
context.drawImage(logo, 32, 32, 68, 68);
context.restore(); // 恢复之前保存的绘图上下文状态
// 绘制圆角矩形
context.save();
context.beginPath();
context.arc(252, 130, 48, 0, 2 * Math.PI); // 圆心坐标(100, 100)半径为100
//      context.setStrokeStyle('#333333')
//      context.stroke()
context.closePath();
context.clip();
console.log(369);
let imageResult = await this.getPictureInformation(this.userInfo.avatar)
console.log(369);
// uni.getImageInfo({
// src: this.storeLogo,
// success: function (image) {
// console.log(image);
// }
// });
console.log(imageResult.path);
context.drawImage(imageResult.path, 204, 82, 96, 96); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
console.log(368);
// context.drawImage(this.userInfo.head_img, 204, 82, 96, 96); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
context.restore(); // 恢复之前保存的绘图上下文状态
context.setFillStyle('#333') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 32px 微软雅黑'; // 字体样式
context.fillText(this.userInfo.nickname, 252, 225)
context.setFillStyle('#333') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 28px 微软雅黑'; // 字体样式
context.fillText('邀请码' + ':' + this.userInfo.invite_code, 252, 286)
console.log(369);
let imageResult1 = await this.getPictureInformation(this.userInfo.invite_url)
console.log(123);
// uni.getImageInfo({
// src: this.storeLogo,
// success: function (image) {
// console.log(image);
// }
// });
context.drawImage(imageResult1.path, 92, 330, 320,
320); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// #ifndef MP-WEIXIN
// context.drawImage(this.userInfo.invite_url, 92, 330, 320, 320); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// #endif
context.setFillStyle('#333') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 28px 微软雅黑'; // 字体样式
context.fillText('扫码下载,即享新世界', 252, 703)
context.setFillStyle('#999') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 24px 微软雅黑'; // 字体样式
context.fillText('萬家商超', 252, 760)
context.draw()
setTimeout(() => {
uni.canvasToTempFilePath({
canvasId: 'canvas',
success: res => {
console.log(res.tempFilePath);
that.canvasImg = res.tempFilePath
},
fail: err => {
console.log(err);
}
});
}, 300);
},
async createPoster() {
const that = this;
let logo = '/static/logo.png'
var context = uni.createCanvasContext('canvas', this)
let imageResult11 = await this.getPictureInformation(
'https://lvtai-files.oss-cn-beijing.aliyuncs.com/mini/invite_bg.png')
context.drawImage(imageResult11.path, 0, 0, 504, 700); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
let imageResult111 = await this.getPictureInformation(
'https://lvtai-files.oss-cn-beijing.aliyuncs.com/mini/153.png')
context.drawImage(imageResult111.path, 32, 32, 440,
500); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// 绘制圆角矩形
// context.save();
// context.beginPath();
// context.arc(252, 90, 48, 0, 2 * Math.PI); // 圆心坐标(100, 100)半径为100
// context.closePath();
// context.clip();
// let imageResult = await this.getPictureInformation(this.userInfo.avatar)
// console.log(imageResult.path);
// context.drawImage(imageResult.path, 204, 42, 96, 96); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// context.restore(); // 恢复之前保存的绘图上下文状态
context.setFillStyle('#fff') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 28px 微软雅黑'; // 字体样式
// context.fillText('邀请人' + ':' + this.userInfo.nickname, 252, 405)
context.fillText(this.userInfo.nickname, 252, 445)
context.setFillStyle('#333') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 28px 微软雅黑'; // 字体样式
context.fillText('邀请码' + ':' + this.userInfo.invite_code, 252, 344)
let imageResult1 = await this.getPictureInformation(this.userInfo.invite_url)
context.drawImage(imageResult1.path, 132, 64, 240,
240); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// #ifndef MP-WEIXIN
// context.drawImage(this.userInfo.invite_url, 92, 330, 320, 320); // 图片路径为/static/image.jpg绘制在(0, 0)位置尺寸为200x200
// #endif
context.setFillStyle('#fff') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 28px 微软雅黑'; // 字体样式
context.fillText('扫码下载,即享新世界', 252, 583)
context.setFillStyle('#fff') //文字颜色:默认黑色
context.textAlign = 'center'
context.textBaseline = "middle";
context.font = 'normal 24px 微软雅黑'; // 字体样式
context.fillText('萬家商超', 252, 640)
context.draw()
setTimeout(() => {
uni.canvasToTempFilePath({
canvasId: 'canvas',
success: res => {
console.log(res.tempFilePath);
that.canvasImg = res.tempFilePath
},
fail: err => {
console.log(err);
}
});
}, 300);
},
getMyInviteData() {
console.log(123)
this.$api.post(global.apiUrls.post5c78c4772da97).then(res => {
console.log(123)
console.log('res=', res.data.data)
if (res.data.code == 1) {
this.userInfo = res.data.data
this.createPoster()
}
})
},
savaImg() {
let that = this;
let url = this.userInfo.invite_url;
console.log('长按了', url);
uni.saveImageToPhotosAlbum({
filePath: this.canvasImg,
success: res => {
console.log(res);
this.$message.info('已保存到相册')
},
fail: err => {
console.log(err);
}
});
// uni.getImageInfo({
// src: url,
// success: function(image) {
// console.log('图片信息:', JSON.stringify(image));
// uni.saveImageToPhotosAlbum({
// filePath: image.path,
// success: function() {
// console.log('save success');
// that.$message.info(that.i18n['已保存到相册'])
// }
// });
// }
// });
},
share(type) {
if (type == 1) {
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 2,
imageUrl: this.canvasImg,
success: function(res) {
console.log("success:" + JSON.stringify(res));
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
} else {
uni.share({
provider: "weixin",
scene: "WXSceneTimeline",
type: 2,
imageUrl: this.canvasImg,
success: function(res) {
console.log("success:" + JSON.stringify(res));
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
}
},
}
};
</script>
<style lang="scss">
.container-wrap {
width: 100%;
min-height: 100vh;
background-image: url(https://lvtai-files.oss-cn-beijing.aliyuncs.com/mini/code_bg.png);
// background-color: #fff;
background-size: 100% 100%;
overflow: hidden;
}
.content-wrap {
margin: 40rpx auto;
width: 504rpx;
height: 818rpx;
background-color: #fff;
border-radius: 24rpx;
position: relative;
.logo {
position: absolute;
left: 32rpx;
top: 32rpx;
border-radius: 16rpx;
width: 68rpx;
height: 68rpx;
z-index: 100;
}
.avatar {
margin-top: 76rpx;
width: 96rpx;
height: 96rpx;
border-radius: 48rpx;
}
.code-img {
margin-top: 24rpx;
width: 300rpx;
height: 300rpx;
}
}
//头部 start
.header-title {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 32rpx;
.header-left {
font-size: 42rpx;
}
.header-center {
text-align: center;
font-size: 36rpx;
font-family: 'msgothic' !important;
font-weight: 500;
letter-spacing: 1rpx;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
// view {
// width: 33.3%;
// }
}
.header-right {
font-size: 28rpx;
font-family: 'msgothic' !important;
color: #ffffff;
letter-spacing: 1rpx;
text-align: right;
&.mp-wx {
position: absolute;
right: 32rpx;
top: 10rpx;
}
}
// .canvas-img {
// margin: 120rpx auto;
// display: block;
// width: 580rpx;
// height: 920rpx;
// }
.share-wrap {
position: fixed;
bottom: 0;
// margin-bottom: 60rpx;
height: 260rpx;
width: 100%;
background-color: #fff;
border-radius: 24rpx 24rpx 0 0;
}
.share-wrap image {
margin-bottom: 16rpx;
width: 80rpx;
height: 80rpx;
}
.canvas-img {
margin: 100rpx auto;
display: block;
width: 504rpx;
height: 818rpx;
}
button::after {
border: none;
}
button {
background-color: #fff;
}
button:hover {
background-color: #fff;
}
</style>