Onlife/pages/myuser/myuser.vue
2025-04-19 15:38:48 +08:00

338 lines
7.5 KiB
Vue
Raw Permalink 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">
<!-- <image class="gpu-image" src="/static/gpu.png" mode="aspectFit"></image> -->
<view class="info-container">
<view class="info-row">
<text class="info-label">我的地址</text>
<text class="info-value">{{ adressOptions(myAddress) }}</text>
<!-- <button class="copy-button" @tap="copyText(myAddress)">復製</button> -->
<image @click="copyText(myAddress)" src="/static/fuzhi.png"
style="width: 40rpx;height: 40rpx;margin-left: 10px;"></image>
</view>
<view class="info-row" v-if="userInfos.level > 0">
<text class="info-label">邀請鏈接</text>
<text class="info-value" style="line-height: 20rpx;height: 52rpx;">{{ inviteLink }}</text>
<button class="copy-button" @tap="copyText(inviteLink)">復製</button>
</view>
<view class="info-row" v-if="userInfos.level == 0">
<text class="info-label">邀請鏈接</text>
<text class="info-value">遊客不能推薦,請先升級為KOC及以上</text>
</view>
<view class="info-row">
<text class="info-label">邀請人</text>
<input :disabled="isDisabled" v-model="initAdress" style="color: #fff;flex: 1;" />
</view>
</view>
<!-- 邀請好友 -->
<button v-if="!isDisabled" @tap="confirmInviter" class="invite-button" style="background-color: #4F5AD7;">綁定好友</button>
</view>
</template>
<script>
import {
_userInfos,
_bindpid,
_myparent
} from "@/request/api.js"
export default {
data() {
return {
initAdress: "",
isDisabled: false,
parentUser: {},
myAddress: '',
inviteLink: '',
userInfos: {}
}
},
onShow() {
this.getUserInfos();
this.getMyparent();
},
methods: {
adressOptions(data) {
let start = data.substring(0, 12);
let end = data.substring(data.length - 4);
let middle = "…";
let finalString = start + middle + end;
return finalString
},
async getMyparent() {
let res = await _myparent();
if (res.code === 1) {
this.parentUser = res.data;
this.parentUser.wallet = JSON.parse(res.data.wallet.replace(/&quot;/g, "\""));
this.initAdress = this.parentUser.wallet.address;
if (this.parentUser.wallet) {
this.isDisabled = true;
}
}
},
async confirmInviter() {
if (this.initAdress == '') {
return uni.showToast({
title: '請輸入邀請人的錢包地址。',
icon: "none"
})
}
if (this.initAdress.length > 1 && this.initAdress.length < 20) {
return uni.showToast({
title: '請輸入大於20位的錢包地址',
icon: "none"
})
}
let account = {
pwallet: this.initAdress,
pcode: "",
}
let res = await _bindpid(account);
if (res.code === 1) {
uni.showToast({
title: "綁定成功!",
icon: "success",
duration: 1000
})
this.getUserInfos();
this.getMyparent();
} else {
uni.showToast({
title: res.msg,
icon: "none",
duration: 1000
})
}
},
async getUserInfos() {
let res = await _userInfos();
if (res.code === 1) {
this.userInfos = res.data.userinfo;
this.myAddress = res.data.userinfo.wallet.address;
this.inviteLink = `
https://onlif.klinygm.com/h5/#/pages/login/forget?pwallet=${this.myAddress}
`
}
},
inviteFriend() {
// 實現邀請好友的邏輯
console.log('邀請好友')
},
copyText(text) {
uni.setClipboardData({
data: text,
success: () => {
uni.showToast({
title: '複製成功',
icon: 'success'
})
}
})
}
}
}
</script>
<style>
.container {
min-height: 100vh;
padding: 20px;
box-sizing: border-box;
background: linear-gradient(to bottom, #000033, #51599b);
}
.gpu-image {
width: 200px;
height: 200px;
margin-bottom: 30px;
}
.invite-button,
.confirm-button {
width: 80%;
height: 50px;
border-radius: 25px;
background-color: grey;
color: #fff;
font-size: 18px;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20px;
position: fixed;
top: 80%;
left: 10%;
}
.info-container {
width: 100%;
margin-bottom: 20px;
}
.info-row {
display: flex;
align-items: center;
margin-bottom: 20px;
/* background-color: rgba(255, 255, 255, 0.1); */
background-color: #393C84;
border-radius: 10px;
padding: 10px;
height: 60rpx;
}
.info-label {
color: #e0e0e0;
margin-right: 10px;
}
.info-value {
color: white;
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.copy-button {
background-color: #4CAF50;
color: white;
padding: 5px 10px;
border-radius: 5px;
font-size: 14px;
}
.inviterbot {
margin-top: 120rpx;
display: flex;
.bindd {
width: 220rpx;
height: 100rpx;
background-color: #4F5AD7;
display: flex;
justify-content: center;
align-items: center;
border-radius: 30rpx;
color: #fff;
margin-left: 20rpx;
}
}
.inviter-info {
width: 100%;
/* background-color: rgba(255, 255, 255, 0.1); */
background-color: #393C84;
border-radius: 10px;
padding: 10px;
display: flex;
align-items: center;
height: 100rpx;
box-sizing: border-box;
}
.modal {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.6);
display: flex;
align-items: flex-end;
z-index: 999;
}
.modal-content {
background-color: #b6b5c8;
border-radius: 20px 20px 0 0;
padding: 20px;
width: 100%;
animation: slideUp 0.3s ease-out;
box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.1);
}
@keyframes slideUp {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.modal-title {
font-size: 20px;
font-weight: bold;
color: #333;
}
.modal-close {
font-size: 24px;
color: #999;
cursor: pointer;
}
.modal-body {
margin-bottom: 20px;
}
.modal-item {
display: flex;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #f0f0f0;
}
.modal-label {
color: #666;
font-size: 14px;
margin-right: 20rpx;
}
.modal-value {
font-weight: bold;
color: #333;
font-size: 14px;
word-break: break-all;
}
.modal-footer {
display: flex;
justify-content: space-between;
}
.modal-button {
width: 48%;
height: 44px;
border-radius: 22px;
font-size: 16px;
font-weight: bold;
border: none;
cursor: pointer;
transition: all 0.3s ease;
}
.modal-button.cancel {
background-color: #f0f0f0;
color: #333;
}
.modal-button.cancel:hover {
background-color: #e0e0e0;
}
.modal-button.confirm {
background-color: #4CAF50;
color: white;
}
.modal-button.confirm:hover {
background-color: #45a049;
}
</style>