You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

459 lines
9.2 KiB

<!-- 首页 -->
<template>
<view class="home bx">
<!-- 首页顶部 -->
<view class="home-top content">
<view class="menu-icon">
<!-- <image src="@/static/home/menu.png" mode="aspectFit"></image> -->
</view>
<view class="logo">
Tiktok
</view>
<view class="sign">
<image @click="toSignin" src="../../static/home/sign.png" mode="widthFix"></image>
</view>
</view>
<!-- 通知 -->
<view class="notification">
<u-notice-bar :text="notification[notificationType[$i18n.locale]] || ''" bgColor="#000"
color="white"></u-notice-bar>
</view>
<!-- 用户信息 -->
<view class="user-info content">
<view class="user-name">{{ userInfo.account }}</view>
<view class="member-image">
<image :src="vipInfo.icon" mode="aspectFit"></image>
</view>
</view>
<!-- 菜单列表 -->
<view class="menu-list content">
<view v-for="(item,index) in onList" :key="index" @click="clickMenu(index)" class="menu-item">
<image :src="item.icon" mode="aspectFit"></image>
<view class="menu-descript">{{ $t(`page.home.${menuTitles[index]}`) }}</view>
</view>
</view>
<!-- 虚拟滚动 -->
<virtualScroll></virtualScroll>
<virtualScroll1></virtualScroll1>
<!-- 会员等级信息 -->
<view class="member-list content">
<view class="member-item" v-for="(item, index) in vipList" :key="index">
<view class="status-icon">
<view v-if="item.current" class="current">current</view>
<uni-icons v-else type="locked" size="20" color="#000"></uni-icons>
</view>
<view class="img-box">
<image :src="item.icon" mode="aspectFit"></image>
</view>
<view class="menber-descript">{{ item.title }}</view>
<!-- 权益列表 -->
<view class="equity-list">
<view class="equity-item">
<!-- Receive a set of 40 apps data tasks -->
{{ $t('page.home.equity_item_1', [item.num]) }}
</view>
<view class="equity-item">
{{ $t('page.home.equity_item_2', [item.percentage]) }}
</view>
<view class="equity-item">
{{ $t('page.home.equity_item_3', [item.price]) }}
</view>
</view>
</view>
</view>
<!-- 协议列表 -->
<view class="agreement-list">
<view v-for="(item,index) in outList" :key="index" @click="toinstructions(index)" class="agreement-item">
<image :src="item.icon" mode="aspectFit"></image>
<view class="agreement-descript">{{ $t(`page.home.${agreementTitles[index]}`) }}</view>
</view>
</view>
<sTabbar select="0" />
<!-- 客服列表 -->
<serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList>
<!-- 弹窗 -->
<popUpWindow :show="showPopUp" @close="closePopUp"></popUpWindow>
</view>
</template>
<script>
import sTabbar from '@/components/base/tabBar.vue'
import serviceList from '@/components/serviceList/serviceList.vue'
import popUpWindow from '../../components/popUpWindow/popUpWindow.vue'
import virtualScroll from '../../components/virtualScroll/virtualScroll.vue'
import virtualScroll1 from '../../components/virtualScroll1/virtualScroll1.vue'
export default {
components: {
sTabbar,
serviceList,
popUpWindow,
virtualScroll,
virtualScroll1
},
data() {
return {
notification: {},
showService: false,
menuTitles: ['CustomerService', 'Certifcate', 'Deposit', 'Withdraw'],
agreementTitles: ['agreement_item_1', 'agreement_item_2', 'agreement_item_3', 'agreement_item_4'],
serverList: [],
onList: [],
outList: [],
vipList: [],
userInfo: {},
vipInfo: {},
notificationType: {
en: 'keyEnglish',
es: "keySpanish",
zh: "keyChinese",
ar : "keyA",
fr : "keyF",
ru : "keyE"
},
showPopUp : uni.getStorageSync('clickPopUp') ? false : true
}
},
onShow() {
this.getIndexIcon()
this.getNotice()
this.getUserInfo()
this.forgetPass()
},
methods: {
//跳转证书页面
toCertificate() {
uni.navigateTo({
url: `/pages/instructions/instructions?index=1&type=onList`
})
},
//跳转充值页面
toPurse() {
uni.navigateTo({
url: '/pages/purse/purse?type=1'
})
},
//跳转提现页面
toWithdraw() {
uni.navigateTo({
url: '/pages/withdraw/withdraw?type=1'
})
},
//显示客服列表
revealServiceList() {
this.showService = true;
},
//关闭客服列表
closeServiceList() {
this.showService = false;
},
//跳转说明页面(六合一)
toinstructions(index) {
this.$play()
uni.navigateTo({
url: `/pages/instructions/instructions?index=${index}`
})
},
//获取首页图标
getIndexIcon() {
this.request('indexIcon').then(res => {
if (res.code == 200) {
this.onList = res.result.onList;
this.outList = res.result.outList;
}
})
},
//获取vip套餐
getVipShop() {
this.request('vipShop').then(res => {
if (res.code == 200) {
res.result.forEach(item => {
if (this.vipInfo && item.id == this.vipInfo.id) {
item.current = true
}
})
this.vipList = res.result
}
})
},
//获取通知
getNotice() {
this.request('indexNotice').then(res => {
if (res.code == 200) {
this.notification = res.result
}
})
},
//用户点击菜单
clickMenu(index) {
this.$play()
if (index == 0) {
this.revealServiceList()
}
if (index == 1) {
this.toCertificate()
}
if (index == 2) {
this.toPurse()
}
if (index == 3) {
this.toWithdraw()
}
},
//获取用户信息
getUserInfo() {
this.request('userInfo').then(res => {
if (res.code == 200) {
this.userInfo = res.result.userInfo
this.vipInfo = res.result.vip
this.getVipShop()
}
})
},
//忘记密码(获取客服列表)
forgetPass() {
this.request('forgetPass').then(res => {
if (res.code == 200) {
this.serverList = res.result
}
})
},
//跳转签到页面
toSignin() {
this.$play()
uni.navigateTo({
url: '/pages/signIn/signIn'
})
},
//关闭弹框
closePopUp(){
this.showPopUp = false
}
}
}
</script>
<style lang="scss" scoped>
.home {
width: 750rpx;
min-height: 100vh;
margin: 0 auto;
background-size: 100%;
background-repeat: no-repeat;
padding-bottom: 200rpx;
.content {
width: 96%;
margin: 0 auto;
}
.home-top {
display: flex;
justify-content: space-between;
align-items: center;
height: 60rpx;
padding: 20rpx 0rpx;
.menu-icon {
image {
width: 50rpx;
height: 50rpx;
}
}
.logo {
color: uni-bg-color-app;
font-weight: bold;
font-size: 32rpx;
}
.sign {
image {
width: 60rpx;
}
}
}
.user-info {
display: flex;
flex-direction: column;
align-items: center;
margin: 20rpx 0rpx;
.user-name {
font-size: 34rpx;
}
.member-image {
image {
width: 150rpx;
height: 110rpx;
}
}
}
.menu-list,
.agreement-list {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
text-align: center;
.menu-item,
.agreement-item {
display: flex;
flex-direction: column;
align-items: center;
width: calc(25% - 20px);
flex-shrink: 0;
image {
width: 110rpx;
height: 110rpx;
}
.menu-descript {
box-sizing: border-box;
width: 100%;
text-align: center;
word-break: break-all;
font-size: 24rpx;
margin: 10rpx 0rpx;
padding: 0rpx 12rpx;
}
}
.agreement-item {
font-size: 19rpx;
image {
width: 90rpx;
height: 90rpx;
}
}
}
.agreement-list {
padding-bottom: 40rpx;
}
.member-list {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin: 20rpx auto;
.member-item {
position: relative;
box-sizing: border-box;
padding: 15rpx;
width: calc(50% - 10rpx);
border-radius: 10rpx;
border: 1px solid #00000080;
margin-bottom: 25rpx;
.status-icon {
box-sizing: border-box;
position: absolute;
width: 100%;
display: flex;
justify-content: flex-end;
padding: 0rpx 20rpx;
.current {
display: flex;
align-items: center;
justify-content: center;
width: 120rpx;
background-image: url('@/static/home/current.png');
background-size: 100%;
background-repeat: no-repeat;
color: black;
font-size: 25rpx;
}
}
.img-box {
display: flex;
justify-content: center;
width: 150rpx;
height: 110rpx;
overflow: hidden;
margin: 20rpx auto;
image {
width: 150rpx;
height: 110rpx;
}
}
.menber-descript {
text-align: center;
color: $uni-bg-color-app;
font-size: 28rpx;
margin-bottom: 10rpx;
}
.equity-list {
// color: white;
font-size: 20rpx;
padding-bottom: 40rpx;
.equity-item {
padding-left: 15rpx;
position: relative;
word-break: break-all;
&::before {
position: absolute;
left: 0;
top: 10rpx;
content: '';
width: 5rpx;
height: 5rpx;
background: white;
border-radius: 50%;
}
}
}
}
}
}
</style>