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

255 lines
7.2 KiB
Vue

<template>
<view :style="'background-color: '+theme.bg+';color: '+theme.text" style="height: 100vh;">
<!-- 头部 -->
<view class="width-750 relative flex align-center justify-center"
:style="{height: `calc(${statusBar}px + 110rpx)`}">
<view class="width-750 fixed1" :style="{paddingTop: statusBar + 'px', height: `calc(${statusBar}px + 110rpx)`}">
<view class="width-750 height-110 padding-w-30 flex align-center justify-center">
<view @click="_goback" class="cuIcon-back font-40 "
style="position: absolute;left: 30rpx;"></view>
<text class="font-36 weight-bold">{{data.name}}</text>
<view @click="router.push('/pages/index/white_paper?ico='+ico)" class="font-30 absolute" style="right: 30rpx;">{{i18n.ico.three6}}</view>
</view>
</view>
</view>
<!-- 身体 -->
<view class="width-750">
<view class="padding-w-30 padding-t-45 ">
<view class="padding-b-200">
<view class="flex align-center justify-between">
<text class="font-36 numbold-font">{{i18n.ico.title}}</text>
<view @click="router.push('/pages/index/icoDetails?ico=' + ico)" class="morebtn">{{i18n.ico.text3}}</view>
</view>
<view class="margin-t-20 width-100b hidden-nowrap-ellipsis-3 font-26">
{{data.content_txt}}
</view>
<view class="inputbox padding-t-24 padding-w-16" :style="'background-color: '+theme.fu_bg">
<text class="font-30 weight-bold">{{i18n.ico.title}}{{i18n.ico.text4}}</text>
<u-line-progress class="margin-t-23" :striped="true" :striped-active="true"
:percent="percentage" height="24" active-color="#3ECEB2">
</u-line-progress>
<view class="flex align-center justify-between margin-t-18">
<text class="font-26 color-0165EE numbold-font">{{data.count_num}} {{data.curr_name}}</text>
<text class="font-26 numbold-font">{{data.real_num}} {{data.curr_name}}</text>
</view>
<!-- 数量 -->
<view class="width-100b height-192 padding-c-27 flex direction-column justify-between margin-t-24">
<view class="font-28 weight-bold">{{i18n.ico.text5}}</view>
<view class="flex align-center justify-between">
<input class="font-28" :placeholder="i18n.ico.tos1" placeholder-class="color-C3C3C3"
type="digit" v-model="number" />
<text class="font-28 weight-bold">{{data.curr_name}}</text>
</view>
</view>
<view class="flex align-center font-26 weight-bold">
<text>{{i18n.ico.text6}}</text>
<text class="color-0165EE numbold-font margin-w-5">{{(number*data.price).toFixed(4)}}</text>
<text class="numbold-font">USDT</text>
</view>
<!-- 密码 -->
<view class="width-100b height-192 padding-c-27 flex direction-column justify-between margin-t-77">
<view class="font-28 weight-bold">{{i18n.ico.text7}}</view>
<input class="font-28" :placeholder="i18n.ico.tos2" placeholder-class="color-C3C3C3"
type="text" v-model="paypwd" password/>
</view>
</view>
</view>
<!-- 预约按钮 -->
<view class="yuyuebtn">
<u-button v-if="data.status==3" @click="openPopup" class="custom-style" type="primary">{{i18n.ico.text8}}</u-button>
<u-button v-if="data.status==2&&(!data.is_yuyue)" @click="getYuyue" class="custom-style" type="primary">{{i18n.ico.text1}}</u-button>
<view v-if="data.status==2&&data.is_yuyue" class="btn2">{{i18n.ico.text2}}</view>
</view>
</view>
</view>
<!-- 确认弹窗 -->
<u-popup v-model="show" mode="center" border-radius="20">
<view class="width-600 height-298 bj-white" style="overflow: hidden;">
<view class="height-203 padding-t-93 padding-b-65 text-center">
<text class="font-30 color-333333 weight-bold">{{i18n.ico.text9}}</text>
</view>
<view class="height-96 flex">
<view @click="show=false" class="flex-1 line-height-96 text-center bj-c3c3c3-02">
<text class="font-28 color-C3C3C3 weight-bold">{{i18n.ico.text10}}</text>
</view>
<view @click="getBuy()" class="flex-1 line-height-96 text-center bj-0165EE">
<text class="font-28 color-white weight-bold">{{i18n.ico.text11}}</text>
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
statusBar: uni.getSystemInfoSync().statusBarHeight,
data: '',
number: '',
paypwd: '',
percentage: 0,
show: false,
flag: true,
theme: '',
ico:""
}
},
computed: {
i18n() {
return this.$t('message');
}
},
onLoad:function(e){
this.ico = e.ico
},
onShow() {
if (uni.getStorageSync("theme") == "dark") {
this.theme = this.$store.state.darkTheme
} else {
this.theme = this.$store.state.lightTheme
}
this.getDetails()
},
methods: {
// 购买私募
getBuy() {
if (!this.flag) {
return
} else {
uni.showLoading({
title: '',
mask: true
});
this.flag = false
let obj = {
id: this.data.id,
num: this.number,
pay_pwd: this.paypwd
}
this.post('/index/ico_sub', obj).then(res => {
console.log('购买私募返回', res)
this.flag = true
if (res.code == 1) {
this.tos(res.msg)
uni.hideLoading()
setTimeout(() => {
uni.navigateBack()
}, 500)
}
})
}
},
// 预约私募
getYuyue() {
if (!this.flag) {
return
} else {
this.flag = false
uni.showLoading({
title: '',
mask: true
});
this.post('/index/ico_yuyue', {
id: this.data.id
}).then(res => {
console.log('预约返回', res)
this.flag = true
if (res.code == 1) {
this.tos(res.msg)
this.getDetails()
}
})
}
},
// 打开确认弹窗
openPopup() {
if (this.number == '') return this.tos(this.i18n.ico.tos1)
if (this.paypwd == '') return this.tos(this.i18n.ico.tos2)
this.show = true
},
// 获取私募内容
getDetails() {
this.post('/index/ico_content',{
id: this.ico
}).then(res => {
console.log('私募内容', res)
if (res.code == 1) {
this.data = res.data
this.percentage = Math.floor((res.data.count_num - res.data.real_num) / res.data.count_num * 100)
}
})
},
}
}
</script>
<style lang="scss">
.fixed1 {
position: fixed;
top: 0;
z-index: 1000;
}
.bj-589CF8 {
background: linear-gradient(to bottom, #52F3C9 0%, #3ECEB2 100%);
border-radius: 0rpx 0rpx 120rpx 120rpx;
}
.yuyuebtn {
margin-top: 50rpx;
}
.custom-style {
width: 600rpx;
height: 86rpx;
background: #3ECEB2;
border-radius: 20rpx;
font-size: 32rpx;
color: #FFFFFF;
}
.morebtn {
width: 180rpx;
height: 66rpx;
background: #3ECEB2;
border: 1rpx solid #C9E0FF;
opacity: 1;
border-radius: 33rpx;
font-size: 32rpx;
color: #FFFFFF;
line-height: 66rpx;
text-align: center;
}
.inputbox {
width: 690rpx;
height: 682rpx;
// background: #FFFFFF;
box-shadow: 0rpx 3rpx 6rpx rgba(220, 220, 220, 0.16);
opacity: 1;
border-radius: 20rpx;
margin-top: 42rpx;
}
.bj-c3c3c3-02 {
background: rgba(195, 195, 195, 0.2);
}
.btn2 {
width: 690rpx;
height: 86rpx;
background: rgb(210, 210, 210);
border-radius: 20rpx;
font-size: 30rpx;
color: #8B8F95;
line-height: 86rpx;
text-align: center;
}
</style>