yfs/pages/user/tui-guang.vue
2025-06-08 20:23:01 +08:00

779 lines
16 KiB
Vue

<template>
<view class="page-wrap common_bg">
<uni-nav-bar left-icon="left" title="邀请好友" color="#000000" backgroundColor="transparent" :fixed="true"
:statusBar="true" :border="false" @clickLeft="$c.back"></uni-nav-bar>
<mescroll-body ref="mescrollRef" :down="downOption" @init="mescrollInit" @down="downCallback" @up="upCallback">
<view class="top-bg">
<text style="position: absolute; left: 34rpx; top: 36rpx; color: #333333; font-size: 40rpx;">邀请好友
领奖励</text>
<view @click="$refs.rulePop.getRule(11, '规则说明')" class="rule-btn">
<image class="" style="width: 24rpx; height: 24rpx; margin-right: 8rpx;"
:src="$img1('my/ic_prompt.png')"></image>
规则说明
</view>
</view>
<!-- <image class="card-yqhy" :src="$img1('my/yqhy.png')"></image> -->
<view class="card common_bg">
<view class="card-title">成功邀请好友获得佣金奖励</view>
<view class="people-money">
<view class="people relative">
<view>已邀请</view>
<view class="num">
{{ total }}
<text></text>
</view>
</view>
<view class="moneys">
<view class="content">
<view>奖励总额</view>
<view class="money">
{{ commission }}
<text></text>
</view>
</view>
<view class="icon">
<uni-icons type="right" color="#FFFFFF"></uni-icons>
</view>
</view>
</view>
</view>
<!-- 添加我的邀请码展示区域 -->
<view class="my-invite-code" v-if="userInfo.uid">
<view class="invite-code-title">我的邀请码</view>
<view class="invite-code-value" @click="copyMyInviteCode">{{ userInfo.uid }}</view>
</view>
<!-- //分享 -->
<view class="" style="flex-direction: row; display: flex; width: 686rpx; margin: 40rpx auto;">
<button v-if="!ish5" open-type="share" class="invite-btn">立即邀请</button>
<button v-if="ish5" class="invite-btn" @click="yaoaing()">立即邀请</button>
<button v-if="!isApp" class="invite-btn2" style="margin-left: 20rpx;"
@click="showPosterPopup">生成海报</button>
<button v-if="isApp && !hasBoundCode" class="invite-btn2" style="margin-left: 20rpx;"
@click="showBindCodePopup">绑定邀请码</button>
<button v-if="isApp && hasBoundCode" class="invite-btn2 " style="margin-left: 20rpx;">已绑定上级</button>
</view>
<view class="invite-log">
<view class="list-title align-center">
<text class="">邀请记录</text>
<!-- <text class="ml10" style="font-size: 28rpx;">(共{{ total }}人)</text> -->
</view>
<view style="height: 2rpx; background-color: #F3F3F3;">
</view>
<view class="list-wrap">
<view v-for="(item, i) of listdata" :key="i" class="list-wrap-item">
<view class="content">
<view class="avatar">
<image :src="item.headimg" mode="scaleToFill" />
</view>
<view class="info align-center justify-between">
<view class="info-hd column">
<text class="name hang1" style="color: #333333">{{ item.nickname }}</text>
<text class="title">{{ item.addtime }}</text>
</view>
<view class="info-bd column">
<text class="money">消费¥{{ item.commission_money }}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</mescroll-body>
<rule-pop ref="rulePop"></rule-pop>
<uni-popup ref="posterPopup" type="center">
<view style="width:650rpx;height:950rpx;">
<image :src="logo_image" style="width: 100%;"></image>
</view>
<view style="text-align: center; margin-top: 20rpx;">
<image show-menu-by-longpress style="width: 48px;height: 48px;" @click="saveImageToPhotosAlbum()"
:src="getXiaZai()"></image>
</view>
</uni-popup>
<uni-popup ref="bindCodePopup" type="center">
<view class="bind-code-popup">
<view class="bind-code-title">绑定邀请码</view>
<view class="bind-code-content">
<input type="text" v-model="inviteCode" placeholder="请输入邀请码" class="bind-code-input" />
<view class="bind-code-tips" v-if="hasBoundCode">您已绑定邀请码,不可更改</view>
</view>
<view class="bind-code-btns">
<button class="bind-code-cancel" @click="closeBindCodePopup">取消</button>
<button class="bind-code-confirm" :disabled="hasBoundCode" @click="bindInviteCode">确定</button>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import { getUserInfo } from '@/common/server/user';
export default {
data() {
var isH5 = false;
// #// #ifdef H5
isH5 = true;
// #endif
return {
downOption: {
use: false
},
listdata: [],
news: '',
total: 0,
ish5: isH5,
logo_image: '',
commission: 0,
isApp: false,
inviteCode: '',
hasBoundCode: false,
userInfo: {}
}
},
onShareAppMessage() {
let that = this;
console.log();
let imageUrl = this.$config.getShareImageUrl();
return {
imageUrl: imageUrl,
title: "友达上线,来就送!",
path: '/pages/shouye/index?pid=' + uni.getStorageSync('userinfo').ID
}
},
onLoad() {
console.log(uni.getStorageSync('userinfo').ID)
console.log(this.$platform.code);
if (this.$platform.code == 'WEB_APP' || this.$platform.code == 'APP_IOS' || this.$platform.code == 'APP_ANDROID') {
this.isApp = true;
this.ish5 = true;
}
if (this.$platform.code == 'WEB_H5') {
this.isApp = false;
this.ish5 = true;
}
var that = this;
getUserInfo().then(res => {
console.log(res);
that.userInfo = res;
if (res.pid != 0) {
that.hasBoundCode = true;
}
})
},
methods: {
yaoaing() {
uni.setClipboardData({
data: window.location.origin + '/pages/shouye/index?pid=' + uni.getStorageSync('userinfo').ID
});
this.$c.msg("链接已复制,快去分享吧~")
},
copyMyInviteCode() {
uni.setClipboardData({
data: this.userInfo.ID + ''
});
this.$c.msg("邀请码已复制")
},
saveImageToPhotosAlbum() {
const imageUrl = this.logo_image; // 替换为你的网络图片地址
this.$platform.downloadFile(imageUrl).then(res => {
console.log(res)
})
},
getHaiBao() {
return this.$baseUrl + '/api/generate_urllinks?userId=' + uni.getStorageSync('userinfo').ID;
},
getXiaZai() {
return this.$baseUrl + '/dow.png';
},
/*下拉刷新的回调 */
downCallback() {
this.mescroll.resetUpScroll()
// this.loadData(1)
},
/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
upCallback(page) {
//联网加载数据
this.loadData(page.num)
},
fenxiang() {
var image = this.$baseUrl + "/storage/topic/20240617/30a73c0d5061f700a66f653deeb60f6d.jpg";
var path = '/pages/shouye/index?pid=' + uni.getStorageSync('userinfo').ID;
this.$c.$fenxiang('友达赏,正版潮玩手办一番赏', '', path, image);
},
loadData(pageNo) {
// 模拟接口
let that = this
that.req({
url: 'invitation',
data: {
page: pageNo
},
success(res) {
that.total = res.data.count
that.commission = res.data.money
that.logo_image = res.data.share_image
that.mescroll.endByPage(res.data.data.length, res.data.last_page)
if (pageNo == 1) {
that.listdata = res.data.data
} else {
that.listdata = that.listdata.concat(res.data.data)
}
}
})
},
//海报弹窗
showPosterPopup() {
this.$refs.posterPopup.open();
},
showBindCodePopup() {
// 查询是否已绑定邀请码
console.log(this.userInfo);
if (this.userInfo.pid != 0) {
this.$c.msg("您已绑定邀请码,不可更改");
return;
}
this.$refs.bindCodePopup.open();
},
closeBindCodePopup() {
this.$refs.bindCodePopup.close();
},
bindInviteCode() {
if (!this.inviteCode) {
this.$c.msg("请输入邀请码");
return;
}
let that = this;
that.req({
url: 'bind_invite_code',
data: {
invite_code: that.inviteCode
},
success(res) {
if (res.status === 1) {
that.$c.msg("绑定成功");
that.hasBoundCode = true;
that.closeBindCodePopup();
} else {
that.$c.msg(res.msg || "绑定失败,请重试");
}
}
})
}
}
}
</script>
<style lang="scss">
button::after {
border: none;
}
button {
background-color: transparent;
padding-left: 0;
padding-right: 0;
line-height: inherit;
border-radius: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
image {
width: 100%;
height: 100%;
}
page {
background: linear-gradient(90deg,
#090916,
#0f0e1d,
#090915,
#0f0e1c,
#090a15);
}
.view_poster {
width: 650rpx;
height: 950rpx;
background: url($imgurl+'my/img_poster.jpg') no-repeat 0 0 / 100% 100%;
}
.page-wrap {
width: 100vw;
min-height: 100vh;
background-size: 100% auto;
box-sizing: border-box;
color: #fff;
background-color: #F7F7F7;
.head {
position: fixed;
top: 0;
z-index: 20;
.header_title {
height: 70rpx;
line-height: 70rpx;
width: 100%;
box-sizing: border-box;
font-weight: bold;
display: flex;
align-items: center;
padding-left: 30rpx;
box-sizing: border-box;
>view:nth-of-type(1) {
display: flex;
align-items: center;
}
>view:nth-of-type(2) {
width: 520rpx;
text-align: center;
/* margin: auto; */
}
image {
width: 48rpx;
height: 48rpx;
}
}
}
::v-deep.uni-navbar__content {
z-index: 998;
}
.top-bg {
width: 640rpx;
height: 220rpx;
margin: 60rpx auto 0;
border-radius: 16rpx 16rpx 0rpx 0rpx;
position: relative;
background: url($imgurl+'my/invite_bg.png') no-repeat 0 0 / 100% 100%;
}
.rule-btn {
position: absolute;
left: 34rpx;
bottom: 32rpx;
height: 50rpx;
display: flex;
justify-content: center;
align-items: center;
z-index: 10;
font-size: 20rpx;
font-weight: 400;
color: #333333;
}
.inviteText {
position: absolute;
top: 220rpx;
left: 50%;
transform: translateX(-50%);
width: 543rpx;
height: 489rpx;
z-index: 1;
}
.card-yqhy {
width: 724rpx;
height: 490rpx;
margin: 0 auto;
}
.card {
margin: 0rpx auto 0;
position: relative;
z-index: 1;
width: 690rpx;
height: 252rpx;
box-sizing: border-box;
padding: 0 60rpx 0;
background-color: #FFFFFF;
border-radius: 16rpx;
&-title {
font-weight: 400;
font-size: 28rpx;
color: #333333;
padding-top: 28rpx;
text-align: center;
}
.people-money {
display: flex;
align-items: center;
justify-content: space-between;
// margin-top: 60rpx;
border-radius: 10rpx;
border-radius: 30rpx;
color: #676767;
margin-top: 60rpx;
.people,
.moneys {
flex: 1;
font-size: 24rpx;
}
.people {
display: flex;
flex-flow: column nowrap;
align-items: center;
&::after {
content: '';
position: absolute;
top: 50%;
right: 0;
width: 1rpx;
height: 90rpx;
background: #999999;
transform: translateY(-50%);
}
.num {
margin-top: 30rpx;
font-size: 20rpx;
font-weight: 400;
color: #676767;
text {
margin-left: 6rpx;
}
}
}
// .line {
// height: 122rpx;
// width: 0;
// border-left: 1px solid rgba(255, 255, 255, 0.3);
// }
.moneys {
display: flex;
align-items: center;
flex-flow: column nowrap;
position: relative;
.content {
display: flex;
flex-flow: column nowrap;
align-items: center;
.money {
margin-top: 30rpx;
font-size: 20rpx;
color: #676767;
text {
margin-left: 6rpx;
}
}
}
.icon {
width: 40rpx;
height: 40rpx;
position: absolute;
right: 10rpx;
top: 50%;
transform: translateY(-50%);
}
}
}
.tips {
text-align: center;
font-size: 28rpx;
}
}
.invite-btn {
width: 304rpx;
height: 76rpx;
background-color: #D8FD24;
border-radius: 16rpx;
color: #333333;
font-size: 24rpx;
// background: url($imgurl+'my/yqbtn.png') no-repeat 0 0 / 100% 100%;
}
.invite-btn2 {
width: 304rpx;
height: 76rpx;
background-color: #333333;
border-radius: 16rpx;
color: #D8FD24;
font-size: 24rpx;
// background: url($imgurl+'my/promotion_poster.png') no-repeat 0 0 / 100% 100%;
&.disabled {
background-color: #666666;
color: #AAAAAA;
opacity: 0.8;
}
}
.invite-log {
width: 100%;
margin: 30rpx auto 0;
width: 650rpx;
box-sizing: border-box;
background-color: #FFFFFF;
padding: 32rpx 34rpx;
border-radius: 16rpx;
.list-title {
display: flex;
align-items: center;
padding: 30rpx 0;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.list-wrap {
width: 100%;
margin-top: 34rpx;
// height: auto;
// overflow: hidden;
&-item {
height: 120rpx;
display: flex;
flex-flow: column nowrap;
justify-content: space-evenly;
border-radius: 10rpx;
margin-bottom: 20rpx;
.content {
display: flex;
justify-content: space-between;
align-items: center;
.avatar {
width: 84rpx;
height: 84rpx;
border-radius: 50%;
overflow: hidden;
background: #eee;
}
.info {
width: calc(100% - 110rpx);
&-hd {
font-weight: 400;
font-size: 20rpx;
color: #333333;
.name {
max-width: 300rpx;
color: #333333;
}
.title {
margin-top: 12rpx;
font-weight: 400;
font-size: 16rpx;
color: #999999;
}
}
&-bd {
.money {
color: #333333;
font-size: 20rpx;
}
}
}
}
}
}
.show-more {
height: 70rpx;
display: flex;
justify-content: center;
align-items: center;
.btn {
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
font-weight: 400;
color: #999999;
.icon {
width: 24rpx;
height: 24rpx;
margin-left: 10rpx;
}
}
}
}
}
.gzbox {
text-align: right;
}
.gzbox>image {
width: 143rpx;
height: 48rpx;
}
.pop {
width: 607rpx;
// height: 904rpx;
padding-top: 70rpx;
box-sizing: border-box;
position: relative;
.pop_title {
font-size: 36rpx;
font-family: zihun152hao-jijiachaojihei;
font-weight: 400;
color: #ffffff;
text-align: center;
}
.pop_con {
padding: 30rpx 40rpx 50rpx;
box-sizing: border-box;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
line-height: 42rpx;
}
.close {
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 100%);
width: 50rpx;
height: 50rpx;
}
}
.bind-code-popup {
width: 600rpx;
background-color: #FFFFFF;
border-radius: 16rpx;
padding: 30rpx;
box-sizing: border-box;
.bind-code-title {
font-size: 32rpx;
color: #333333;
text-align: center;
font-weight: 500;
margin-bottom: 30rpx;
}
.bind-code-content {
margin-bottom: 40rpx;
.bind-code-input {
height: 80rpx;
background-color: #F5F5F5;
border-radius: 8rpx;
padding: 0 20rpx;
font-size: 28rpx;
color: #333333;
}
.bind-code-tips {
font-size: 24rpx;
color: #FF6B00;
margin-top: 16rpx;
}
}
.bind-code-btns {
display: flex;
justify-content: space-between;
button {
width: 240rpx;
height: 76rpx;
border-radius: 38rpx;
font-size: 28rpx;
}
.bind-code-cancel {
background-color: #F5F5F5;
color: #666666;
}
.bind-code-confirm {
background-color: #D8FD24;
color: #333333;
&:disabled {
opacity: 0.6;
}
}
}
}
.my-invite-code {
width: 686rpx;
margin: 20rpx auto 0;
background-color: #FFFFFF;
border-radius: 16rpx;
padding: 30rpx 0;
text-align: center;
.invite-code-title {
font-size: 28rpx;
color: #333333;
margin-bottom: 20rpx;
}
.invite-code-value {
font-size: 48rpx;
font-weight: bold;
color: #333333;
letter-spacing: 6rpx;
}
}
</style>