Files
li 5f40e4e1b5 feat: 前端全量更新 - 含所有本次需求
- 移除秒合约页面及UI
- 合约页Tab改为Position Held/Transaction Record
- 存款/提款/转账页增加BTC/ETH
- 资产页重构(用户信息+盈亏+多语言)
- 注册页改版(匹配新设计稿)
- 日文全面翻译+首页菜单多语言
- 代理专属注册链接支持(?code=)
- 10个locale文件同步更新
2026-03-30 20:14:20 +08:00

444 lines
14 KiB
Vue

<template>
<view>
<z-paging ref="paging" refresher-only @onRefresh="onRefresh"
:style="'background-color: '+theme.bg+';color: '+theme.text">
<custom-refresher slot="refresher" slot-scope="{refresherStatus}" :status="refresherStatus">
</custom-refresher>
<!-- 头部 -->
<view slot="top" class="width-750 relative flex align-center justify-center bj-92D4FF-16A2FF"
:style="{height: `calc(${statusBar}px + 408rpx)`}">
<view class="width-750 fixed1 bj-92D4FF-16A2FF"
:style="{paddingTop: statusBar + 'px', height: `calc(${statusBar}px + 408rpx)`}">
<view class="width-750 height-110 padding-w-30 flex align-center justify-center">
<view @click="_goback" class="cuIcon-back font-40 color-white"
style="position: absolute;left: 30rpx;"></view>
</view>
<view
class="height-268 padding-c-40 flex direction-column justify-between width-100b padding-w-30 relative">
<image style="right: 0;top: 0;z-index: 1;" class="width-294 height-294 absolute"
src="/static/imgs/more/shape1@2x.png" mode=""></image>
<text class="font-24 color-F6F8FB medium-font">{{i18n.task.text1}}</text>
<text class="color-white font-42 numbold-font">{{my_num}} AP</text>
<view class="flex align-center">
<view @click="show2=true" class="flex align-center">
<image class="width-38 height-31" src="/static/imgs/more/manghe@2x.png"></image>
<text class="font-24 color-F6F8FB margin-l-10">{{i18n.task.text2}}</text>
<u-icon name="arrow-right" color="#FFF" size="20"></u-icon>
</view>
<u-icon @click="show1=true" class="margin-l-20" name="question-circle" color="#FFF"
size="32"></u-icon>
</view>
</view>
<view class="height-32 relative" :style="'background-color: '+theme.bg"
style="border-radius: 20rpx 20rpx 0 0;z-index: 100;">
</view>
</view>
</view>
<!-- 身体 -->
<view class="width-750 padding-w-30 padding-b-40">
<view class="height-80 margin-b-30 padding-c-10 flex align-center font-32 bold-font">
<view @click="type=1" class="height-60 flex direction-column align-center">
<view class="height-50 line-height-50">
<text :class="type==1?'':'color-C3C3C3'">{{i18n.task.text3}}</text>
</view>
<view class="height-10 flex align-center">
<view v-if="type==1" class="width-90 height-4 radiu-2 bj-0061E8"></view>
</view>
</view>
<view @click="type=2" class="height-60 flex direction-column align-center margin-l-68">
<view class="height-50 line-height-50">
<text :class="type==2?'':'color-C3C3C3'">{{i18n.task.text4}}</text>
</view>
<view class="height-10 flex align-center">
<view v-if="type==2" class="width-90 height-4 radiu-2 bj-0061E8"></view>
</view>
</view>
</view>
<!-- 成长任务 -->
<view v-if="type==1">
<!-- 单一列表 -->
<view v-for="(item,index) in list" :key="index" class="listbox" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="height-100b flex direction-column justify-between">
<text class="font-28 medium-font">{{item.name}}</text>
<view class="flex align-center">
<image class="width-33 height-31 margin-r-10" src="/static/imgs/more/zu3891@2x.png"
mode="">
</image>
<text class="font-28 color-FBA700 nummedium-font">+{{item.price}}
{{item.curr_name}}</text>
</view>
</view>
<view v-if="item.status==0" @click="router.push(item.url)" class="btnbox1">{{i18n.task.text5}}
</view>
<view v-if="item.status==1" @click="getlinqu(item.id)" class="btnbox2">{{i18n.task.text6}}
</view>
<view v-if="item.status==2" class="btnbox3">{{i18n.task.text7}}</view>
</view>
</view>
<!-- 每日签到 -->
<view v-if="type==2" class="qiandaobox" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<text class="font-28 medium-font">{{i18n.task.text8}}</text>
<view class="height-100b padding-t-22 padding-b-32">
<view class="flex justify-between margin-b-16">
<view @click="getQiandao(item.status)" v-for="(item,index) in four" :key="index"
:class="item.status==1?'bj-589FFF-1477FF':'bj-241'" class="daybox">
<text :class="item.status==1?'color-white':'color-333333'" class="medium-font">
{{item.status==0?day[index]:item.status==1?i18n.task.text9:item.status==2?i18n.task.text10:item.status==3?day[index]:''}}
</text>
<image class="width-38 height-35" src="/static/imgs/more/jinbi@2x.png"></image>
<text :class="item.status==1?'color-white':'color-C3C3C3'"
class="nummedium-font">{{item.score}} AP</text>
</view>
</view>
<view class="flex justify-between">
<view :class="five.status==1?'bj-589FFF-1477FF':'bj-241'" class="daybox">
<text :class="five.status==1?'color-white':'color-333333'" class="medium-font">
{{five.status==0?day[4]:five.status==1?i18n.task.text9:five.status==2?i18n.task.text10:five.status==3?day[4]:''}}
</text>
<image class="width-38 height-35" src="/static/imgs/more/jinbi@2x.png"></image>
<text :class="five.status==1?'color-white':'color-C3C3C3'"
class="nummedium-font">{{five.score}} AP</text>
</view>
<view :class="six.status==1?'bj-589FFF-1477FF':'bj-241'" class="daybox">
<text :class="six.status==1?'color-white':'color-333333'" class="medium-font">
{{six.status==0?day[5]:six.status==1?i18n.task.text9:six.status==2?i18n.task.text10:six.status==3?day[5]:''}}
</text>
<image class="width-38 height-35" src="/static/imgs/more/jinbi@2x.png"></image>
<text :class="six.status==1?'color-white':'color-C3C3C3'"
class="nummedium-font">{{six.score}} AP</text>
</view>
<view :class="seven.status==1?'bj-589FFF-1477FF':'bj-241'" class="qibox">
<view class="height-130 flex direction-column font-26 color-333333">
<text class="medium-font">
{{seven.status==0?day[6]:seven.status==1?i18n.task.text9:seven.status==2?i18n.task.text10:seven.status==3?day[6]:''}}
</text>
<text class="bold-font margin-t-20">{{i18n.task.text11}}</text>
</view>
<image class="width-93 height-84" src="/static/imgs/more/jinbi4@2x.png"></image>
</view>
</view>
</view>
</view>
</view>
<!-- 签到成功 -->
<u-popup v-model="show" mode="center" border-radius="20">
<view class="width-500" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="height-120 flex align-center justify-center">
<image class="width-80 height-80" src="/static/imgs/index/tibiok.png" mode=""></image>
</view>
<view class="padding-w-30 text-center">
<text class="font-28">{{i18n.task.text12}}{{score}} AP</text>
</view>
<view class="height-100 line-height-100 text-center">
<text @click="show=false" class="font-30 color-0165EE medium-font">{{i18n.task.text13}}</text>
</view>
</view>
</u-popup>
<!-- 盲盒说明 -->
<u-popup v-model="show1" mode="center" border-radius="20">
<view class="width-600" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="height-100 line-height-100 text-center">
<text class="font-30 medium-font">{{i18n.task.text14}}</text>
</view>
<view class="padding-w-30">
<text v-html="manghetxt" class="font-28"></text>
</view>
<view class="height-100 line-height-100 text-center">
<text @click="show1=false" class="font-30 color-0165EE medium-font">{{i18n.task.text13}}</text>
</view>
</view>
</u-popup>
<!-- 开盲盒 -->
<u-popup v-model="show2" mode="bottom" border-radius="20">
<view class="width-750 padding-b-100" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="height-100 flex align-center justify-end padding-w-46">
<u-icon @click="show2=false" name="close" :color="theme.text" size="30"></u-icon>
</view>
<view class="padding-w-75 flex direction-column align-center">
<image class="width-467 height-475" src="/static/imgs/more/damanghe@2x.png"></image>
<text class="font-26 medium-font">{{i18n.task.text15}}</text>
<view class="width-600 margin-0-auto margin-t-60">
<u-button @click="getchou" class="custom-style" type="primary">{{i18n.task.text16}}</u-button>
</view>
<view class="margin-t-22 flex align-center justify-center">
<text @click="show2=false,router.push('/pages/more/blindbox')"
class="font-32 color-0165EE medium-font">{{i18n.task.text17}}</text>
<u-icon name="arrow-right" color="#0165EE" size="30"></u-icon>
</view>
</view>
</view>
</u-popup>
<!-- 盲盒结果 -->
<u-popup v-model="show3" mode="center" border-radius="20">
<view class="width-600" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="height-100 flex align-center justify-center">
<image class="width-76 height-71" src="/static/imgs/more/manghe@2x.png"></image>
</view>
<view class="padding-w-30 text-center">
<text class="font-28">{{resmsg}}</text>
</view>
<view class="height-100 line-height-100 text-center">
<text @click="show3=false" class="font-30 color-0165EE medium-font">{{i18n.task.text13}}</text>
</view>
</view>
</u-popup>
</z-paging>
</view>
</template>
<script>
export default {
data() {
return {
statusBar: uni.getSystemInfoSync().statusBarHeight,
list: [],
my_num: 0,
flag: true,
type: 1,
show: false,
show1: false,
show2: false,
show3: false,
four: [],
five: {},
six: {},
seven: {},
resmsg: '',
score: '',
manghetxt: '',
day: ['第1天', '第2天', '第3天', '第4天', '第五天', '第六天', '连签7天'],
theme: '',
}
},
computed: {
i18n() {
return this.$t('message');
}
},
onShow() {
if (uni.getStorageSync("theme") == "dark") {
this.theme = this.$store.state.darkTheme
} else {
this.theme = this.$store.state.lightTheme
}
this.getTask()
this.getSign()
this.getText()
this.day = this.i18n.task.day
},
methods: {
onRefresh() {
this.list = []
this.getTask()
// 以告知z-paging下拉刷新结束,这样才可以开始下一次的下拉刷新
setTimeout(() => {
//1.5秒之后停止刷新动画
this.$refs.paging.complete();
}, 1000)
},
getlinqu(id) {
if (!this.flag) return
uni.showLoading({
mask: true
})
this.flag = false
this.post('/index/task_linqu', {
id: id
}).then(res => {
this.flag = true
uni.hideLoading()
if (res.code == 1) {
this.tos(res.msg)
this.getTask()
}
})
},
// 开盲盒
getchou() {
if (!this.flag) return
this.flag = false
uni.showLoading({
mask: true
})
this.post('/index/chou_box').then(res => {
this.flag = true
if (res.code == 1) {
uni.hideLoading()
this.resmsg = res.data.name
this.show2 = false
this.show3 = true
this.getTask()
this.getSign()
} else {
uni.hideLoading()
}
})
},
// 盲盒说明
getText() {
this.post('/index/box_text').then(res => {
if (res.code == 1) {
this.manghetxt = res.data.box_text
}
})
},
// 签到
getQiandao(item) {
if (!this.flag) return
if (item != 2) return
this.flag = false
uni.showLoading({
mask: true
})
this.post('/index/sign').then(res => {
this.flag = true
if (res.code == 1) {
uni.hideLoading()
this.getTask()
this.getSign()
this.score = res.data.score
this.show = true
} else {
uni.hideLoading()
}
})
},
// 每日签到列表
getSign() {
this.post('/index/sign_con').then(res => {
if (res.code == 1) {
this.four = res.data.slice(0, 4)
this.five = res.data[4]
this.six = res.data[5]
this.seven = res.data[6]
// console.log(this.four, this.five, this.six, this.seven);
}
})
},
// 成长任务列表
getTask() {
this.post('/index/task_center').then(res => {
if (res.code == 1) {
this.list = res.data.list
this.my_num = res.data.my_num
}
})
}
}
}
</script>
<style>
.fixed1 {
position: fixed;
top: 0;
z-index: 10;
}
.topbox {
width: 750rpx;
height: 315rpx;
background: linear-gradient(135deg, #92D4FF 0%, #16A2FF 100%);
}
.bj-92D4FF-16A2FF {
background: linear-gradient(135deg, #92D4FF 0%, #16A2FF 100%);
}
.listbox {
width: 690rpx;
height: 120rpx;
/* background: #FFF; */
border-radius: 8rpx;
padding: 16rpx 18rpx;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 22rpx;
}
.btnbox1 {
width: 130rpx;
height: 52rpx;
background: rgba(1, 101, 238, 0.2);
border-radius: 4rpx;
font-size: 26rpx;
color: #0165EE;
line-height: 52rpx;
text-align: center;
}
.btnbox2 {
width: 130rpx;
height: 52rpx;
background: #0165EE;
border-radius: 4rpx;
font-size: 26rpx;
color: #FFF;
line-height: 52rpx;
text-align: center;
}
.btnbox3 {
width: 130rpx;
height: 52rpx;
background: #eee;
border-radius: 4rpx;
font-size: 26rpx;
color: #999;
line-height: 52rpx;
text-align: center;
}
.qiandaobox {
width: 690rpx;
height: 482rpx;
/* background: #FFF; */
border-radius: 8rpx;
padding: 32rpx 16rpx;
}
.daybox {
width: 133rpx;
height: 170rpx;
border-radius: 4rpx;
padding: 20rpx 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
.bj-589FFF-1477FF {
background: linear-gradient(180deg, #589FFF 0%, #1477FF 100%);
}
.bj-241 {
background: rgba(241, 241, 241, 0.7);
}
.qibox {
width: 308rpx;
height: 170rpx;
border-radius: 4rpx;
padding: 20rpx 34rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.custom-style {
width: 600rpx;
height: 86rpx;
background: #0165EE;
border-radius: 20rpx;
font-size: 32rpx;
color: #FFFFFF;
}
</style>