167 lines
5.2 KiB
Vue
167 lines
5.2 KiB
Vue
<template>
|
|
<BasePage>
|
|
<!-- v-if="data.Icon" -->
|
|
<div class="ewm_bg" style="font-family: 'PingFang SC'">
|
|
<div class="d1">
|
|
<div class="w100">
|
|
<img id="invite_bg" :src="$file($datadic.getContent('code_yqmbj'))" crossorigin="anonymous" />
|
|
<!-- <img id="invite_bg" src="/img/invite_bg.jpg" crossorigin="anonymous"> -->
|
|
</div>
|
|
<img class="icon" :src="$file(data.Avatar) + '?t=1'" crossorigin="anonymous">
|
|
<div class="name">
|
|
<b>{{ $substring(data.NickName, 0, 8) }}</b>
|
|
<p>邀请你使用泰古润平台<br>
|
|
共赴葡园品鉴醇香</p>
|
|
</div>
|
|
<div class="ewm_test box box-tb box-align-center">
|
|
<vue-qr v-if="!loading" :text="link" backgroundColor="rgb(255,255,255)"
|
|
colorLight="rgb(255,255,255)"></vue-qr>
|
|
<!-- <span>扫码立即注册</span> -->
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div id="sc_ewm" class="b_l_w bx" style="font-family: 'PingFang SC'"></div>
|
|
|
|
</BasePage>
|
|
</template>
|
|
|
|
<script>
|
|
import { html2canvas, canvasToDataURL } from '@/utils/html2image';
|
|
import { useUserStore } from '@/stores/user';
|
|
|
|
export default {
|
|
name: 'Invite',
|
|
data() {
|
|
return {
|
|
loading: true,
|
|
data: {
|
|
Icon: '',
|
|
Avatar: '',
|
|
NickName: '',
|
|
},
|
|
link: '',
|
|
userStore: useUserStore(),
|
|
};
|
|
},
|
|
mounted() {
|
|
this.loading = false;
|
|
this.init().then(() => {
|
|
// 等数据和二维码都准备好后再生成海报
|
|
this.$nextTick(() => {
|
|
const img = document.getElementById("invite_bg");
|
|
if (img.complete) {
|
|
this.CreatePoster(".ewm_bg > div", "#sc_ewm");
|
|
} else {
|
|
img.onload = () => this.CreatePoster(".ewm_bg > div", "#sc_ewm");
|
|
}
|
|
});
|
|
});
|
|
},
|
|
methods: {
|
|
async init() {
|
|
try {
|
|
// 获取用户信息
|
|
const userInfo = await this.$get('/v1/client/DUsersClient');
|
|
if (userInfo?.data) {
|
|
this.data.Avatar = userInfo.data.userimg || '';
|
|
this.data.NickName = userInfo.data.nickname || '';
|
|
this.data.Icon = userInfo.data.Icon || '';
|
|
}
|
|
// 生成包含邀请码的链接
|
|
const inviteCode = userInfo?.data?.cellphone || '';
|
|
this.link = `${location.origin}${location.pathname}#/Login?invite=${inviteCode}`;
|
|
} catch (err) {
|
|
console.error('获取用户信息失败:', err);
|
|
}
|
|
},
|
|
async CreatePoster(divID, targetID) {
|
|
var shareContent = document.querySelector(divID);
|
|
var width = shareContent.offsetWidth;
|
|
var height = shareContent.offsetHeight;
|
|
|
|
try {
|
|
// 等待头像图片加载完成
|
|
const avatarImg = shareContent.querySelector('.icon');
|
|
if (avatarImg && !avatarImg.complete) {
|
|
await new Promise((resolve, reject) => {
|
|
avatarImg.onload = resolve;
|
|
avatarImg.onerror = resolve; // 加载失败也继续
|
|
setTimeout(resolve, 5000); // 超时也继续
|
|
});
|
|
}
|
|
|
|
var canvas = await html2canvas(shareContent, {
|
|
scale: 2,
|
|
width: width,
|
|
height: height,
|
|
useCORS: true,
|
|
allowTaint: false,
|
|
});
|
|
var dataUrl = canvasToDataURL(canvas, "image/png", 1.0);
|
|
var newImg = document.createElement("img");
|
|
newImg.src = dataUrl;
|
|
newImg.width = width;
|
|
newImg.height = height;
|
|
document.querySelector(targetID).appendChild(newImg);
|
|
} catch (err) {
|
|
console.error('生成海报失败', err);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less">
|
|
.ewm_bg {
|
|
opacity: 0;
|
|
position: fixed;
|
|
left: 0;
|
|
top: 12.267vw;
|
|
z-index: 0;
|
|
height: 0px;
|
|
overflow: hidden;
|
|
|
|
.d1 {
|
|
position: relative;
|
|
|
|
.name {
|
|
position: absolute;
|
|
left: 20.27vw;
|
|
bottom: 25.6vw;
|
|
line-height: 6vw;
|
|
width: 100%;
|
|
|
|
b {
|
|
font-size: 3.47vw;
|
|
color: #3a0a05;
|
|
}
|
|
|
|
p {
|
|
font-size: 3.2vw;
|
|
}
|
|
}
|
|
|
|
.icon {
|
|
position: absolute;
|
|
width: 10.67vw;
|
|
height: 10.67vw;
|
|
left: 20.27vw;
|
|
bottom: 42vw;
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.ewm_test {
|
|
position: absolute;
|
|
left: 23.73vw;
|
|
bottom: 57.47vw;
|
|
white-space: nowrap;
|
|
|
|
img {
|
|
width: 52.53vw;
|
|
height: 52.53vw;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style> |