shop_app/pages/vip/share/index.vue

305 lines
6.5 KiB
Vue
Raw Normal View History

2025-05-08 09:16:37 +08:00
<template>
<view class="share" v-if="loading">
<view class="box">
<view class="share-rule">
<view class="share-rule-title">
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2023/08/26/tuFGYtfZXm7M6AhnUR57qAogLf1hojNRXuGJHJaM.png" mode="heightFix"></image>
<text>分享福利</text>
</view>
<view class="title">分享美好赢会员</view>
<view class="user">
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2022/07/01/kSrILtkzL6SPyVE0v9zKslwqRAFsTEVIoXAHnfc7.png" mode="widthFix"></image>
<text>邀请任意用户下单</text>
</view>
<view class="text">
分享有福利啦 <br />宝子们速来集合 把我们店铺分享给你的好友下单成功后双方都可以获得我们的会员卡一张,拥有会员卡下单更优惠哦
</view>
<view class="table">
<view class="item item1">邀请者福利</view>
<view class="item">新用户福利</view>
<view class="item"><text class="day">{{share_inviter_days}}</text>天会员</view>
<view class="item item4"><text class="day">{{share_invitee_days}}</text>天会员</view>
</view>
<view class="btn"><button class="button" @click="handleShare()">立即分享</button></view>
</view>
</view>
<view class="box share-user">
<view class="share-rule-title">
<image src="https://ct-upimg.yx090.com/ju8hn6/shop/image/2023/08/26/rGrArcmIQbEc9wZe9cE9ZoVZxj8FVOk9nfm2Vw6n.png" mode="heightFix"></image>
<text>邀请记录</text>
</view>
<view class="list" v-if="inviterList.length > 0">
<view class="item" v-for="(item, index) in inviterList">
<text class="index">{{index + 1}}</text>
<view class="user">
<image :src="item.invitee.avatar"></image>
<view class="right">
<text class="name">{{item.invitee.nickname}}</text>
<view class="text">
<text class="time">{{item.created_at}}</text>
<text>邀请成功</text>
</view>
</view>
</view>
</view>
</view>
<view class="none" v-if="inviterList.length === 0 && loading">暂无邀请记录</view>
</view>
</view>
</template>
<script>
import { ref, reactive, toRefs } from 'vue'
import { getShopInfo, uniShare } from '@/components/common.js'
import { get } from '@/api/request.js'
export default {
setup() {
const data = reactive({
share_inviter_days: 0,
share_invitee_days: 0,
inviterList: [],
page: 1,
lastPage: 0,
loading: false,
share: {}
})
const getVipInfo = async () => {
let res = await getShopInfo()
data.share_inviter_days = res.share_inviter_days
data.share_invitee_days = res.share_invitee_days
getVipShare()
}
const getVipShare = () => {
get('/api/v1/user/vip/share').then((res) => {
data.share = res.data
})
}
const getInviterList = () => {
get('/api/v1/user/vip/invitee', {
page: data.page
}).then((res) => {
data.inviterList = data.inviterList.concat(res.data)
data.lastPage = res.meta.last_page
})
}
function handleShare() {
let title = data.share.title
let imageUrl = data.share.image
let path = data.share.path
uniShare(title, imageUrl, path)
}
return {
uniShare,
...toRefs(data),
getVipInfo,
getInviterList,
handleShare
}
},
async onLoad() {
await this.getVipInfo()
await this.getInviterList()
this.loading = true
},
onShareAppMessage(options) {
if (options.from == 'button') {
return {
title: this.share.title,
imageUrl: this.share.image,
path: this.share.path
}
}
},
onReachBottom() {
if (this.page < this.lastPage) {
this.page++
this.getInviterList()
}
}
}
</script>
<style lang="scss" scoped>
.share {
background: url('https://ct-upimg.yx090.com/ju8hn6/shop/image/2022/02/12/na4SZdAbc2cpIfHS7sixEB9cEKWlT2Md6PCRIb0b.jpg') no-repeat;
background-size: 100%;
width: 100%;
min-height: 100%;
background-color: #323540;
padding: 30rpx;
box-sizing: border-box;
.box {
background-color: #fff;
border-radius: 10rpx;
padding: 20rpx;
}
&-rule {
border: 2rpx solid #ffa768;
border-radius: 10rpx;
padding: 50rpx;
&-title {
text-align: center;
position: relative;
image {
position: absolute;
top: 0;
transform: translate(-50%, -50%);
height: 20rpx;
width: 335rpx;
}
text {
position: absolute;
top: 0;
transform: translate(-50%, -50%);
font-size: 36rpx;
font-weight: bold;
}
}
.title {
font-size: 30rpx;
color: #6c5f4f;
margin: 50rpx 0 40rpx;
font-weight: bold;
}
.user {
display: flex;
align-items: center;
font-size: 28rpx;
color: #555555;
image {
width: 100rpx;
margin-right: 20rpx;
}
}
.text {
font-size: 26rpx;
color: #98989f;
margin: 30rpx 0;
line-height: 45rpx;
}
.table {
display: grid;
grid-template-columns: 50% 50%;
grid-template-rows: 80rpx 80rpx;
.item {
border: 1rpx solid #dedede;
align-items: center;
text-align: center;
line-height: 80rpx;
font-size: 26rpx;
color: #cfcfcf;
.day {
color: #ffa768;
}
}
.item1 {
border-bottom: none;
border-right: none;
}
.item4 {
border-top: none;
border-left: none;
}
}
.btn {
display: flex;
justify-content: flex-end;
.button {
color: #fbe6c3;
background-color: #353648;
border-radius: 28rpx;
margin-top: 40rpx;
width: 160rpx;
text-align: center;
height: 48rpx;
line-height: 48rpx;
font-size: 30rpx;
}
}
}
.share-user {
margin-top: 25rpx;
.share-rule-title {
margin-top: 70rpx;
text {
font-size: 30rpx;
color: #ffa768;
}
}
.list {
.item {
display: flex;
height: 150rpx;
align-items: center;
padding: 0 30rpx;
border-bottom: 1rpx solid #e5e5e5;
.index {
margin-right: 40rpx;
font-size: 30rpx;
}
.user {
display: flex;
image {
width: 70rpx;
height: 70rpx;
background: #98989f;
border-radius: 35rpx;
margin-right: 15rpx;
}
.right {
.name {
font-size: 26rpx;
}
.text {
font-size: 24rpx;
color: #b7b7b7;
.time {
margin-right: 15rpx;
}
}
}
}
}
}
.none {
text-align: center;
color: #b7b7b7;
font-size: 24rpx;
margin-top: 100rpx;
height: 350rpx;
}
}
}
</style>