Files
dtx_store/pages/user/index.vue
2022-06-11 11:28:48 +08:00

522 lines
12 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="content">
<!-- 用户信息 -->
<view class="info-box">
<image src="@/static/user/user_back.png" mode="aspectFill" />
<view class="user-flex">
<image class="cover" @click="onBtn('Setting', {})" :src="userInfo.avatar || require('@/static/user/cover.png')"
mode="aspectFill" />
<view class="user-content">
<view class="name">{{ userInfo.nickname }}</view>
<view class="tabs">
<view class="tabs-item">
<image :src="identity.cover_url" mode="heightFix" />{{identity.identity_text}}
</view>
</view>
<view class="chainAddress" v-if="userInfo.addr">
<text @click="copy(userInfo.addr)">区块地址:{{userInfo.addr.substring(0,5) + '****' + userInfo.addr.substring(userInfo.addr.length - 5)}}</text>
</view>
</view>
</view>
</view>
<!-- 会员卡 -->
<view class="vip-card">
<view class="title">
<image src="@/static/user/icon_06.png" mode="widthFix" />
共力会员
</view>
<view class="subtitle">
<u-notice-bar :text="cardText" icon="" bgColor="" duration="3000" color="#fcc692" direction="column">
</u-notice-bar>
</view>
<view class="btn" @click="onBtn('Vip', {})">{{userInfo.isOpenVip ? '开通': '续费'}}</view>
</view>
<!-- 健康数据 -->
<view class="health-flex">
<view class="health-flex-item" @click="onBtn('AccountIntegral', {})">
<view class="title">共力值</view>
<view class="num">{{account.glz}}</view>
</view>
<view class="health-flex-item" @click="onBtn('AccountDt', {})">
<view class="title">DT积分</view>
<view class="num">{{account.dt}}</view>
</view>
</view>
<!-- 订单 -->
<view class="order-box">
<view class="order-box-item" @click="onBtn('Order', { index: 0 })">
<image class="icon" src="@/static/user/order_icon_04.png" mode="widthFix" />
<view class="title">我的订单</view>
</view>
<view class="order-box-item" @click="onBtn('Order', { index: 1 })">
<image class="icon" src="@/static/user/order_icon_01.png" mode="widthFix" />
<view class="title">待付款</view>
</view>
<view class="order-box-item" @click="onBtn('Order', { index: 2 })">
<image class="icon" src="@/static/user/order_icon_02.png" mode="widthFix" />
<view class="title">待发货</view>
</view>
<view class="order-box-item" @click="onBtn('Order', { index: 3 })">
<image class="icon" src="@/static/user/order_icon_03.png" mode="widthFix" />
<view class="title">待收货</view>
</view>
<view class="order-box-item" @click="onBtn('OrderRefund')">
<image class="icon" src="@/static/user/order_icon_05.png" mode="widthFix" />
<view class="title">退换货</view>
</view>
</view>
<!-- 功能块 -->
<view class="btns-box">
<view class="btns-box-item" @click="onMnemonic">
<image class="icon" src="@/static/user/userIcon_02.png" mode="widthFix" />
导出助记词
<uni-icons class="forward" type="forward" color="#999" />
</view>
<view class="btns-box-item" @click="onBtn('Address', { type: 'edit' })">
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
地址管理
<uni-icons class="forward" type="forward" color="#999" />
</view>
<view class="btns-box-item" @click="onBtn('Invitation', {})">
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
分享邀请
<uni-icons class="forward" type="forward" color="#999" />
</view>
</view>
<view class="btns-box">
<view class="btns-box-item">
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
意见反馈
<uni-icons class="forward" type="forward" color="#999" />
</view>
<view class="btns-box-item">
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
版本更新
<uni-icons class="forward" type="forward" color="#999" />
</view>
<view class="btns-box-item" @click="logOut" v-if="$store.state.token != ''">
<image class="icon" src="@/static/user/userIcon_05.png" mode="widthFix" />
退出登录
<uni-icons class="forward" type="forward" color="#999" />
</view>
</view>
<view class="footer-text">
<view>共力生态</view>
<view>The total force ecological</view>
</view>
<!-- 助记词弹出框 -->
<u-modal :show="wordsShow" :zoom="false" confirmText="复制" @confirm="copyWord" confirmColor="#34CE98">
<slot default>
<view class="wordsCont">
<view class="wordsCont-title">导出助记词</view>
<view class="wordsCont-tips">请务必抄下助记词并存在安全的地方若助记词丢失重装或换设备登录时将无法查看历史消息若助记词被他人获取将可能获取你的信息</view>
<view class="wordsCont-text">{{mnemonic}}</view>
<image class="wordsCont-close" @click="wordsShow = false" src="@/static/icon/userCloes.png" mode="widthFix"></image>
</view>
</slot>
</u-modal>
</view>
</template>
<script>
import {
info,
chainSeed
} from '@/apis/interfaces/user';
export default {
data() {
return {
cardText: [],
userInfo: {
nickname : '',
addr : '',
avatar : '',
isOpenVip : '',
},
identity : {
button_cover_url: '',
cover_url : '',
identity_text : ''
},
account : {
glz : 0.00,
dt : 0.00
},
mnemonic : '',
wordsShow: false
};
},
onShow() {
this.getInfo();
},
methods: {
// 用户信息
getInfo() {
if (this.$store.state.token === '') return;
info().then(res => {
uni.setNavigationBarTitle({
title: res.nickname
});
this.cardText = res.identity_array
this.userInfo = {
nickname : res.nickname,
addr : res.addr,
avatar : res.avatar,
isOpenVip : res.is_open_vip,
}
this.identity = res.identity
this.account = res.account
})
.catch(err => {
uni.showToast({
title: err.message,
icon: 'none'
});
});
},
// 导出助记词
onMnemonic(){
chainSeed().then(res => {
this.mnemonic = res.seed
this.wordsShow = true
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 按钮导航
onBtn(name, params) {
this.$Router.push({
name,
params
});
},
// 退出登录
logOut() {
uni.removeStorage({
key: 'isnew',
success: () =>{
this.$store.commit('setToken', '');
this.$Router.replaceAll({name: 'Auth'})
}
})
},
// 复制
copy(data) {
uni.setClipboardData({
data: data,
success: function() {
uni.showToast({
title: '复制成功',
icon: 'none',
mask: true,
duration: 2000
})
}
});
},
// 复制助记词
copyWord() {
uni.setClipboardData({
data: this.mnemonic,
success: () => {
this.wordsShow = false
uni.showToast({
title: '助记词已复制',
icon: 'none',
mask: true
})
}
});
},
}
};
</script>
<style lang="scss" scoped>
.content {
background: $window-color;
min-height: 100vh;
}
// 版权信息
.footer-text {
text-align: center;
font-size: $title-size-sm;
padding: $padding $padding $padding * 2;
color: $text-gray-m;
}
// 用户信息
.info-box {
position: relative;
background: linear-gradient(to right, #34ce98, #22aa98);
color: white;
@extend .ios-top;
&>image {
position: absolute;
top: 0;
right: 0;
width: 100%;
height: 100%;
// z-index: 100;
}
.user-flex {
position: relative;
padding: $padding * 2 $padding ($padding * 2 + 60);
height: 128rpx;
.cover {
position: absolute;
width: 128rpx;
height: 128rpx;
border-radius: 50%;
border: solid 6rpx white;
box-sizing: border-box;
z-index: 100;
}
.user-content {
padding-left: 158rpx;
height: 140rpx;
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
.chainAddress {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: $title-size-m;
padding-top: 10rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
position: relative;
z-index: 200;
}
.name {
line-height: 40rpx;
font-weight: bold;
font-size: $title-size + 8;
@extend .nowrap;
}
.tabs {
padding-top: 10rpx;
&-item {
background: rgba($color: #000000, $alpha: 0.3);
font-size: $title-size-sm - 4;
display: inline-block;
line-height: 36rpx;
padding: 0 20rpx;
border-radius: 20rpx;
image {
width: 38rpx;
height: 38rpx;
vertical-align: middle;
margin-bottom: 2rpx;
margin-right: 8rpx;
}
}
}
}
}
}
// 会员卡
.vip-card {
position: relative;
margin: -60rpx $margin $margin;
background: linear-gradient(to right bottom, #3e5364, #31364a);
border-radius: $radius;
box-sizing: border-box;
color: #fcc692;
padding: $padding ($padding + 170) $padding $padding;
.title {
font-weight: bold;
font-size: $title-size-lg;
line-height: 40rpx;
image {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
vertical-align: middle;
margin-bottom: 4rpx;
}
}
.subtitle {
font-size: $title-size-sm;
margin-top: 10rpx;
.u-notice-bar {
padding: 0;
}
}
.btn {
position: absolute;
right: $margin;
margin-top: -30rpx;
top: 50%;
height: 60rpx;
line-height: 60rpx;
background: linear-gradient(to right, #fce3c5, #fcc590);
color: #31364a;
font-weight: bold;
width: 150rpx;
text-align: center;
font-size: $title-size-m;
border-radius: 30rpx;
}
}
// 订单信息
.order-box {
margin: $margin;
background: white;
border-radius: $radius;
display: flex;
justify-content: space-between;
&-item {
width: 25%;
padding: $padding $padding/2;
text-align: center;
.icon {
width: 48rpx;
height: 48rpx;
vertical-align: top;
}
.title {
font-size: $title-size-sm;
margin-top: $margin/3;
}
}
}
// 健康数据
.health-flex {
display: flex;
margin: $margin ($margin - 10);
&-item {
margin: 0 10rpx;
background: white;
width: calc(50% - 20rpx);
border-radius: $radius;
padding: $padding;
box-sizing: border-box;
.title {
font-size: $title-size-lg;
.icon {
width: 32rpx;
height: 32rpx;
vertical-align: middle;
margin-left: 10rpx;
margin-bottom: 2rpx;
}
}
.num {
font-weight: bold;
font-size: $title-size + 10;
padding: $padding/3 0 0;
text {
font-size: 70%;
padding-left: 10rpx;
}
}
}
}
// 模块
.btns-box {
background: white;
margin: $margin;
border-radius: $radius;
&-item {
position: relative;
line-height: 90rpx;
padding: $padding * 0.6 $padding;
font-size: $title-size-lg;
&::after {
position: absolute;
height: 1rpx;
content: ' ';
left: $margin;
right: $margin;
bottom: 0;
background-color: #f9f9f9;
}
&:last-child::after {
display: none;
}
.forward {
position: absolute;
right: $margin;
}
.icon {
width: 44rpx;
height: 44rpx;
vertical-align: middle;
margin-right: $margin/2;
margin-bottom: 8rpx;
}
}
}
/* 助记词弹框 */
.wordsCont {
width: 100%;
position: relative;
text-align: center;
}
.wordsCont-title {
width: 100%;
font-weight: 600;
font-size: 44rpx;
}
.wordsCont-tips {
padding: 30rpx 0;
box-sizing: border-box;
color: #de5660;
line-height: 48rpx;
font-size: 30rpx;
}
.wordsCont-text {
font-weight: 500;
margin-top: 10rpx;
}
.wordsCont-close {
position: absolute;
top: 0;
right: 0;
width: 44rpx;
height: 44rpx;
}
</style>