Files
aishangjia-uniapp/sub_pages/user/poster/poster.vue

547 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

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">
<u-navbar autoBack leftIconColor="#FFFFFF" title="分享海报" bg-color="transparent" safeAreaInsetTop placeholder
:titleStyle="{color: '#FFFFFF'}" :fixed="true"></u-navbar>
<view class="bg-image"></view>
<view class="content">
<view style="display: flex;justify-content: center;position: relative;flex-direction: column;align-items: center;margin-top: 72rpx;height: 800rpx;" class="">
<image style="width: 640rpx;position: absolute; top: 0;" src="https://file-jimei.oss-cn-shenzhen.aliyuncs.com/static/yaoqinghaoyouzhuanjiangli.png" mode="widthFix"></image>
<image class="head-box" src="https://oss.jimeigroup.cn/static/poster-head21.png" mode="widthFix"></image>
<view class="poster-btn">
<view class="poster-wrapper">
<view class="poster-desc">
<view class="poster-desc-title">
邀请好友奖励如下
</view>
<view class="poster-list">
<view class="item">邀请<text class="b">注册用户</text>获得好友充值的奖励</view>
<view class="item">邀请<text class="b">普通会员</text>获得好友充值的奖励</view>
<view class="item">邀请<text class="b">尊享用户</text>获得好友充值的奖励</view>
</view>
</view>
<image @click="$push('sub_pages/user/poster/poster2')" class="btn-share" src="https://oss.jimeigroup.cn/static/haibaofenxiang.png" mode="widthFix"></image>
<!-- <u-button text="海报分享" color="#ffffff"
:customStyle="{color: '#000000',fontWeight: '600', marginBottom: '70rpx'}" :disabled="disabled"
shape="circle" @click="$push('sub_pages/user/poster/poster2')"></u-button> -->
</view>
</view>
</view>
<view class="">
<image class="rank-top" src="https://oss.jimeigroup.cn/static/yaoqinghaoyouzhuanjiangli2.png" mode="widthFix"></image>
<view class="ranking">
<!-- <view class="title"> 排行榜 </view> -->
<view class="list">
<u-list height="600rpx" @scrolltolower="scrolltolower">
<u-list-item v-for="(item, index) in ranking" :key="index">
<view style="display: flex;justify-content: space-between; margin-top: 10rpx; padding: 20rpx; height: 50rpx;align-items: center;" class="cell">
<view style="display: flex;align-items: center; line-height: 50rpx;" class="">
<view v-if="index >= 3" style="margin-right: 22rpx;width: 64rpx;display: flex;justify-content: center;" class="">{{index + 1}}</view>
<image v-if="index < 3" style="width: 64rpx; height: 64rpx;margin-right: 22rpx; padding-top: 20rpx;" :src="item.icon" mode="widthFix"></image>
<u-avatar shape="circle" size="30" :src="item.avatar"></u-avatar>
<view style="color: rgb(255, 235, 211);font-size: 28rpx; margin-left: 10rpx;" class="">{{item.nickname}}</view>
</view>
<view style="color: rgb(255, 235, 211);font-size: 28rpx;" class="">
共奖励<text style="color: rgb(242, 67, 116);">{{item.value}}</text>
</view>
</view>
</u-list-item>
</u-list>
</view>
</view>
</view>
</view>
<!-- <view class="form" @click="onShowQrcode">
<view class="btn">
</view>
</view> -->
<u-popup :show="showQrcode" mode="center" :round="10" @close="showQrcode = false">
<view class="qrcode-box">
<view class="poster">
<image :src="posterUrl" mode="widthFix">
</view>
<view class="gap">立即分享</view>
<view class="share">
<view class="btn">
<!-- <image src="../../../static/icon/share01.png" mode="widthFix"></image> -->
<u-button @click="onSahreQuan" text="朋友圈" icon="https://file.wsdns.cn/20230710/447306d3788a4fcdb6c5a9c7b8d9147d.png" :plain="true" size="normal" :customStyle="{border: 'none'}" :hairline="false" open-type="share"></u-button>
</view>
<view class="btn">
<u-button @click="onShareWeixin" text="微信好友" icon="https://file.wsdns.cn/20230710/ebb9586ef759415585db3bbc55574321.png" :plain="true" size="normal" :customStyle="{border: 'none'}" open-type="share"></u-button>
</view>
<view class="btn">
<u-button @click="onShareAlbum" text="保存相册" icon="https://file.wsdns.cn/20230710/da05c38686b349debde3063f4203e20a.png" :plain="true" size="normal" :customStyle="{border: 'none'}"></u-button>
</view>
</view>
</view>
</u-popup>
<!-- 海报绘制 -->
<l-painter custom-style="position: fixed; left: 200%" isCanvasToTempFilePath @success="drawSuccess" css="height: 732rpx; width: 580rpx;" file-type="png">
<template v-if="userInfo && QrcodeUrl" >
<l-painter-view
css="height: 732rpx; width: 580rpx;borderRadius: 20rpx; backgroundColor: #fff; position: relative;"
>
<!-- 小程序码 -->
<l-painter-image
src="https://oss.jimeigroup.cn/static/invite-head.png?x-oss-process=image/resize,w_1500/format,webp"
css="width: 580rpx; height: 632rpx; borderRadius: 20rpx 20rpx 0 0;"
/>
<l-painter-view
css=" position: absolute; bottom: 110rpx;left:20rpx;"
>
<l-painter-view>
<l-painter-image
:src="QrcodeUrl"
css="width: 140rpx; height: 140rpx;"
/>
</l-painter-view>
<l-painter-view
css="width: 280rpx; height: 80rpx; display: flex; align-items: center;"
>
<l-painter-image
:src="userInfo.avatar"
css="width: 40rpx; height: 40rpx; borderRadius:50%;margin-right: 20rpx;"
/>
<l-painter-view
css="font-size: 26rpx; display: flex; flex-direction: column;"
>
<l-painter-text :text="userInfo.nickname" css="textAlign: left; color: #FFFFFF;"/>
<!-- <l-painter-text :text="userInfo.mobile" css="textAlign: left; color: #999999;"/> -->
</l-painter-view>
</l-painter-view>
</l-painter-view>
<l-painter-view css="width: 100%;textAlign: center;height: 100rpx;line-height:100rpx;">
<l-painter-text
text="长按识别二维码"
css="textAlign: center; color: #000000;"
/>
</l-painter-view>
</l-painter-view>
</template>
</l-painter>
</view>
</template>
<script>
import * as WxLoginApi from '@/api/wx-login.js'
import store from '@/store/index.js'
import storage from '@/utils/storage'
const userId = uni.getStorageSync('userId')
const userInfo = uni.getStorageSync('userInfo')
export default {
data() {
return {
userId,
userInfo,
form: {},
showQrcode: false,
QrcodeUrl: '',
ranking: [{
icon: 'https://oss.jimeigroup.cn/static/1.png',
avatar: 'https://oss.jimeigroup.cn/20230724/204f1dd2920648b49703255daf51b494.jpeg?x-oss-process=image/resize,w_300/quality,Q_90',
nickname: '茶色',
value: '5142.00'
},{
icon: 'https://oss.jimeigroup.cn/static/2.png',
avatar: 'https://oss.jimeigroup.cn/20230724/4fd091aca58f4dcface4e906e0a2d50f.jpeg?x-oss-process=image/resize,w_300/quality,Q_90',
nickname: '李开心',
value: '3006.12'
},{
icon: 'https://oss.jimeigroup.cn/static/3.png',
avatar: 'https://oss.jimeigroup.cn/20230724/19898741661d443a9afb9fe83ab513cf.jpeg?x-oss-process=image/resize,w_300/quality,Q_90',
nickname: 'Kris',
value: '1982.06'
},{
avatar: 'https://oss.jimeigroup.cn/20230724/302bf7b247344c8dbac162eca421cf20.jpeg?x-oss-process=image/resize,w_300/quality,Q_90',
nickname: '薄荷',
value: '1306.60'
},{
avatar: 'https://oss.jimeigroup.cn/20230724/7fb23c8cabfc4588b91ecbf1087ffe0e.jpeg?x-oss-process=image/resize,w_300/quality,Q_90',
nickname: '米兰',
value: '1013.96'
}],
posterUrl: ''
}
},
onLoad() {
this.getQrCode()
},
onShareTimeline(res) {
if (res.from === 'button') { // 来自页面内分享按钮
console.log(res.target)
}
return {
title: '爱尚家找房',
path: 'pages/index/index?user_id=' + uni.getStorageSync('userId')
}
},
onShareAppMessage() {
return {
title: '爱尚家找房',
path: 'pages/index/index?user_id=' + uni.getStorageSync('userId'),
imageUrl: 'https://oss.jimeigroup.cn/static/mp-share.png'
}
},
methods: {
drawSuccess(e){
this.posterUrl = e
// uni.previewImage({
// urls: [e]
// })
},
onShowQrcode() {
this.showQrcode = true
this.getQrCode()
},
// 获取微信小程序码
getQrCode() {
const app = this
WxLoginApi.getWxQrCodeFile().then(res => {
app.QrcodeUrl = "https://file.jimeigroup.cn" + res.message
// app.showQrcode = true
storage.set('QrcodeUrl', res.message)
}).catch(err => {
app.$error(err.message)
})
},
onShareQuan(){
uni.share({
provider: "weixin",
scene: "WXSceneTimeline",
type: 2,
imageUrl: "https://file.wsdns.cn/qrcode/M4WhwQv2.png",
success: function (res) {
console.log("success:" + JSON.stringify(res));
},
fail: function (err) {
console.log("fail:" + JSON.stringify(err));
}
});
},
onShareWeixin(){
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 5,
imageUrl: "https://file.wsdns.cn/qrcode/M4WhwQv2.png",
title: '爱尚家',
miniProgram: {
id: 'gh_39f1f8019c3f',
path: 'pages/index/index',
type: 0,
webUrl: 'http://uniapp.dcloud.io'
},
success: function (res) {
console.log("success:" + JSON.stringify(res));
},
fail: function (err) {
console.log("fail:" + JSON.stringify(err));
}
});
},
onShareAlbum(){
// uni.saveImageToPhotosAlbum({
// filePath: res.tempFilePaths[0],
// success: function () {
// console.log('save success');
// }
// });
uni.getSetting({ //获取用户的当前设置
success: (res) => {
if (res.authSetting['scope.writePhotosAlbum']) { //验证用户是否授权可以访问相册
this.saveImageToPhotosAlbum();
} else {
uni.authorize({ //如果没有授权,向用户发起请求
scope: 'scope.writePhotosAlbum',
success: () => {
this.saveImageToPhotosAlbum();
},
fail: () => {
uni.showToast({
title: "请打开保存相册权限,再点击保存相册分享",
icon: "none",
duration: 3000
});
setTimeout(() => {
uni.openSetting({ //调起客户端小程序设置界面,让用户开启访问相册
success: (res2) => {
// console.log(res2.authSetting)
}
});
}, 3000);
}
})
}
}
})
},
saveImageToPhotosAlbum() {
let base64 = this.posterUrl.replace(/^data:image\/\w+;base64,/, ""); //去掉data:image/png;base64,
let filePath = wx.env.USER_DATA_PATH + '/ph_fit_qrcode.png';
uni.showLoading({
title: '加载中',
mask: true
})
uni.getFileSystemManager().writeFile({
filePath: filePath, //创建一个临时文件名
data: base64, //写入的文本或二进制数据
encoding: 'base64', //写入当前文件的字符编码
success: res => {
uni.saveImageToPhotosAlbum({
filePath: filePath,
success: function(res2) {
uni.hideLoading();
uni.showToast({
title: '保存成功,请从相册选择再分享',
icon: "none",
duration: 5000
})
},
fail: function(err) {
uni.hideLoading();
// console.log(err.errMsg);
}
})
},
fail: err => {
uni.hideLoading();
//console.log(err)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.bg-image{
position: fixed;
width: 750rpx;
height: 100vh;
background-image: url('https://oss.jimeigroup.cn/static/poster-bg21.jpg');
background-repeat: no-repeat;
background-size: 100%;
top: 0;
left: 0;
z-index: -1;
}
.content{
z-index: 90;
}
.head-box{
position: absolute;
left: 0;
right: 0;
margin: auto;
width: 750rpx;
top: -130rpx;
}
.rank-top{
width: 634rpx;
margin: 30rpx 58rpx;
}
.container {
.poster-title {
width: 750rpx;
padding: 60rpx 0;
text-align: center;
font-family: FZZongYi;
font-weight: 400;
font-size: 70rpx;
color: rgba(255, 255, 255, 1);
font-style: normal;
letter-spacing: 0px;
line-height: 70rpx;
text-decoration: none;
}
.poster-btn {
width: 600rpx;
margin: 20rpx auto;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
position: absolute;
top: 150rpx;
.poster-wrapper {
color: #333333;
width: 450rpx;
height: 520rpx;
display: flex;
flex-direction: column;
.poster-desc {
.poster-desc-title {
padding-top: 60rpx;
padding-bottom: 30rpx;
font-size: 44rpx;
text-align: center;
line-height: 40rpx;
font-weight: bold;
}
.poster-list {
text-align: center;
font-size: 28rpx;
line-height: 64rpx;
.b{
font-weight: bold;
}
}
}
}
.btn-share{
width: 200rpx;
margin: 95rpx auto 0;
}
// width: 600rpx;
// margin: auto;
// background: url('https://file.wsdns.cn/20230710/b68c9d11ad744dc880217ee82af24f07.png');
// background-repeat: no-repeat;
// background-size: 100%;
}
.ranking {
margin: 0 auto;
width: 634rpx;
height: 500rpx;
background: rgba(15, 0, 32, 0.5);
border: 1px solid rgb(151, 99, 157);
color: #ffffff;
border-radius: 20rpx;
.title {
text-align: center;
padding: 20rpx 0;
font-size: 34rpx;
text-align: center;
line-height: 40rpx;
}
}
.form {
background-color: #ffffff;
.btn {
position: absolute;
top: 350rpx;
width: 750rpx;
height: 500rpx;
}
}
}
.btn-wrapper {
background: none;
width: 360rpx;
margin: 50rpx auto;
// display: flex;
// align-items: center;
padding: 0 20rpx;
}
.qrcode-box {
border-radius: 20rpx;
position: relative;
display: flex;
flex-direction: column;
justify-content: space-between;
width: 660rpx;
height: 1000rpx;
.poster {
width: 580rpx;
height: 733rpx;
margin: 40rpx auto;
box-shadow: 0px 0px 10px #cccccc;
border-radius: 20rpx;
display: flex;
flex-direction: column;
image {
width: 580rpx;
border-radius: 20rpx 20rpx 0 0;
}
.user {
padding: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
.avatar {
display: flex;
align-items: center;
height: 200rpx;
.user-info {
display: flex;
flex-direction: column;
font-size: 26rpx;
.phone {
color: #999999;
}
}
}
.qrcode-img {
width: 140rpx;
}
}
.long-press {
color: #999999;
font-size: 26rpx;
text-align: center;
}
}
.gap {
font-size: 28rpx;
margin: auto;
color: #999999;
}
.share {
margin: auto;
display: flex;
justify-content: space-between;
font-size: 26rpx;
.btn {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 24rpx;
color: #666666;
image {
width: 50rpx;
height: 50rpx;
}
}
}
}
</style>