feat: 前端全量更新 - 含所有本次需求

- 移除秒合约页面及UI
- 合约页Tab改为Position Held/Transaction Record
- 存款/提款/转账页增加BTC/ETH
- 资产页重构(用户信息+盈亏+多语言)
- 注册页改版(匹配新设计稿)
- 日文全面翻译+首页菜单多语言
- 代理专属注册链接支持(?code=)
- 10个locale文件同步更新
This commit is contained in:
li
2026-03-30 20:14:20 +08:00
commit 5f40e4e1b5
605 changed files with 154871 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
<template>
<view class="">
<myNav :title="i18n.Investors.investTitle"></myNav>
<view class="padding-30" v-html="content">
</view>
</view>
</template>
<script>
export default {
data() {
return {
content:'',
}
},
computed: {
i18n() {
return this.$t('message');
},
},
onLoad(e) {
this.content = e.text
},
methods: {
}
}
</script>
<style lang="scss">
page{
background-color: #FFFFFF
}
</style>
+159
View File
@@ -0,0 +1,159 @@
<template>
<view class="">
<myNav title="" background="rgba(255,255,255,0)" blackColor="#fff" :isRight="true" righturl="/static/imgs/index/touziRIght@2x.png" @Jump="router.push('/pages/index/investor/record')"></myNav>
<image style="position: fixed;top: 0rpx;height: calc(100vh);z-index: 0;" class="width-100b" src="/static/imgs/index/touyziBG@2x.png" mode=""></image>
<view class="padding-w-30 relative">
<p class="font-42 color-white nummedium-font">{{i18n.Investors.title}}</p>
<view class="font-28 color-white margin-c-28 line-height-48">
{{data.content_txt}}......<text @click="router.push('/pages/index/investor/details?text='+data.content)" class="">{{i18n.Investors.more}}<i class="cuIcon-right"></i></text>
</view>
<view class="padding-w-20 padding-c-10 bj-white radiu-4 margin-c-28" style="box-shadow: 0px 3px 6px rgba(232, 232, 232, 0.16);">
<view class="height-60 flex align-center justify-between">
<text class="font-26 nummedium-font color-333333">{{i18n.Investors.totalSales}}</text>
<text class="font-32 numbold-font color-333333">{{data.all_num}} {{data.curr_name}}</text>
</view>
<view class="height-60 flex align-center justify-between">
<text class="font-26 nummedium-font color-333333">{{data.jieduan}}</text>
<text class="font-32 numbold-font color-333333">{{data.count_num}} {{data.curr_name}}</text>
</view>
<view class="height-60 flex align-center justify-between">
<text class="font-26 nummedium-font color-333333">{{i18n.Investors.lave}}</text>
<text class="font-32 numbold-font color-333333">{{data.real_num}} {{data.curr_name}}</text>
</view>
<view class="height-60 flex align-center justify-between">
<text class="font-26 nummedium-font color-333333">{{i18n.Investors.price}}</text>
<text class="font-32 numbold-font color-333333">1 APT = {{data.price}} USDT</text>
</view>
</view>
<view class="padding-w-20 padding-c-10 bj-white radiu-4 margin-c-28" style="box-shadow: 0px 3px 6px rgba(232, 232, 232, 0.16);">
<view class="height-60 flex align-center">
<text class="font-26 weight-bold numbold-font color-333333">{{i18n.Investors.num}}</text>
</view>
<view class="height-96 flex align-center justify-between font-30">
<input class="color-333333 nummedium-font" type="number" v-model="touziNum" :placeholder="i18n.Investors.inputNum" placeholder-style="color:#8B99A2;"/>
<text class="color-333333 nummedium-font">USDT</text>
</view>
<view class="height-60 flex align-center nummedium-font font-24">
<text class="color-333333">
{{i18n.Investors.zehe}}
</text>
<text class="color-0165EE">
{{allNum}} APT
</text>
</view>
<view class="height-60 flex align-center">
<text class="font-26 weight-bold numbold-font color-333333">{{i18n.Investors.pay_pwd}}</text>
</view>
<view class="height-96 flex align-center justify-between font-30">
<input class="color-333333 nummedium-font flex-1" type="text" password v-model="pay_pwd" :placeholder="i18n.Investors.inputPwd" placeholder-style="color:#8B99A2;"/>
</view>
</view>
<view @click="touzi" v-if="data.status==1" class="canyuBtn nummedium-font">{{i18n.Investors.canyu}}</view>
<view v-else class="canyuBtn_hui nummedium-font">{{i18n.Investors.canyu}}</view>
</view>
<view class="height-40"></view>
</view>
</template>
<script>
export default {
data() {
return {
data:'',
touziNum:'',
pay_pwd:'',
flag:true
}
},
computed: {
i18n() {
return this.$t('message');
},
allNum(){
let temp = 0
temp = this.touziNum / this.data.price
return temp.toFixed(4)
}
},
onShow() {
this.getInfo()
},
methods: {
getInfo(){
this.post('/angel/angel_content').then(res => {
console.log('天使投资返回',res)
if(res.code == 1){
this.data = res.data
}
})
},
touzi(){
if(!this.flag) return
if(this.touziNum == ''){
this.tos(this.i18n.Investors.inputNum)
return
}
if(this.pay_pwd == ''){
this.tos(this.i18n.Investors.inputPwd)
return
}
uni.showLoading({
mask:true
})
this.flag = false
this.post('/angel/angel_sub',{
id:this.data.id,
num:this.touziNum,
pay_pwd:this.pay_pwd
}).then(res => {
console.log('天使投资参与',res)
uni.hideLoading()
this.flag = true
if(res.code == 1){
this.tos(res.msg)
this.touziNum = ''
this.pay_pwd = ''
setTimeout(()=>{
uni.navigateTo({
url:'/pages/index/investor/record'
})
},500)
}
})
}
}
}
</script>
<style lang="scss">
page{
background-color: #398CFF;
}
.canyuBtn{
width: 600rpx;
height: 86rpx;
margin: 30rpx auto;
background: #FFFFFF;
color: #0165EE;
text-align: center;
line-height: 86rpx;
font-size: 32rpx;
border-radius: 20rpx;
}
.canyuBtn_hui{
width: 600rpx;
height: 86rpx;
margin: 30rpx auto;
background: #999;
color: #ddd;
text-align: center;
line-height: 86rpx;
font-size: 32rpx;
border-radius: 20rpx;
}
</style>
+116
View File
@@ -0,0 +1,116 @@
<template>
<view class="">
<z-paging :language="$i18n.locale" ref="paging" v-model="list" @query="queryList" :pageSize="20">
<!-- 下拉刷新 -->
<custom-refresher slot="refresher" slot-scope="{refresherStatus}" :status="refresherStatus">
</custom-refresher>
<!-- 头部 -->
<myNav slot="top" :title="i18n.Investors.recordTitle"></myNav>
<!-- 身体 -->
<view>
<view class="height-140 bj-white flex align-center justify-between">
<view class="flex-1 height-90 flex direction-column align-center justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.total_investment}} APT</text>
<text class="font-36 numbold-font color-333333">{{count_num}}</text>
</view>
<view class="geduan"></view>
<view class="flex-1 height-90 flex direction-column align-center justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.total_revenue}}</text>
<text class="font-36 numbold-font color-333333">{{count_sy}}</text>
</view>
</view>
<view @click="goDetails(item.id)" class="listBox" v-for="(item,index) in list" :key="index">
<view class="flex-1 height-100b flex direction-column align-start justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.invest_num}}</text>
<text class="font-26 numbold-font color-333333">{{item.num}} APT</text>
</view>
<view class="flex-1 height-100b flex direction-column align-center justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.invest_price}}</text>
<text class="font-26 numbold-font color-333333">{{item.price}} USDT</text>
</view>
<view class="flex-1 height-100b flex direction-column align-end justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.invest_time}}</text>
<text class="font-26 numbold-font color-C3C3C3">{{item.addtime}}</text>
</view>
</view>
</view>
</z-paging>
</view>
</template>
<script>
export default {
data() {
return {
count_num: 0,
count_sy: 0,
list: [],
}
},
computed: {
i18n() {
return this.$t('message');
},
},
// onPullDownRefresh() {
// console.log('refresh');
// this.list = []
// this.count_num = 0
// this.count_sy = 0
// this.getList()
// setTimeout(function() {
// uni.stopPullDownRefresh();
// }, 1000);
// },
onShow() {
},
methods: {
queryList(pageNo, pageSize) {
setTimeout(() => {
this.post('/angel/angel_user', {
page: pageNo,
page_num: pageSize
}).then(res => {
if (res.code == 1) {
console.log(res)
this.count_num = res.data.count_num
this.count_sy = res.data.count_sy
this.$refs.paging.complete(res.data.list);
}
})
}, 500)
},
goDetails(id) {
uni.navigateTo({
url: '/pages/index/investor/record_details?id=' + id
})
},
}
}
</script>
<style lang="scss">
.geduan {
width: 2rpx;
height: 61rpx;
background-color: #707070;
opacity: 0.17;
}
.listBox {
width: 690rpx;
height: 117rpx;
margin: 30rpx auto;
padding: 18rpx 22rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 10rpx rgba(205, 206, 219, 0.3);
border-radius: 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>
+143
View File
@@ -0,0 +1,143 @@
<template>
<view class="">
<z-paging :language="$i18n.locale" ref="paging" v-model="list" @query="queryList" :pageSize="20">
<!-- 下拉刷新 -->
<custom-refresher slot="refresher" slot-scope="{refresherStatus}" :status="refresherStatus">
</custom-refresher>
<!-- 头部 -->
<myNav slot="top" :title="i18n.Investors.invest_title"></myNav>
<!-- 身体 -->
<view>
<view class="topBox">
<view class="height-142 flex align-center justify-between">
<view class="flex-1 height-90 flex direction-column align-center justify-between">
<text class="font-24 color-F6F8FB nummedium-font" style="opacity: 0.8;">{{i18n.Investors.leiji_all}}</text>
<text class="font-36 numbold-font color-white">{{count_all}}</text>
</view>
<view class="flex-1 height-90 flex direction-column align-center justify-between">
<text class="font-24 color-F6F8FB nummedium-font" style="opacity: 0.8;">{{i18n.Investors.leiji_day}}</text>
<text class="font-36 numbold-font color-white">{{day}}</text>
</view>
</view>
<view class="geduan"></view>
<view class="height-164 flex align-center justify-between">
<view class="flex-1 height-100 flex direction-column align-center justify-between">
<text class="font-24 color-F6F8FB nummedium-font" style="opacity: 0.8;">{{i18n.Investors.leiji_lixi}}</text>
<text class="font-36 numbold-font color-white">{{count_lixi}}</text>
</view>
<view class="flex-1 height-100 flex direction-column align-center justify-between">
<text class="font-24 color-F6F8FB nummedium-font" style="opacity: 0.8;">{{i18n.Investors.leiji_bj}}</text>
<text class="font-36 numbold-font color-white">{{count_bj}}</text>
</view>
</view>
</view>
<view class="listBox" v-for="(item,index) in list" :key="index">
<view class="height-117 padding-w-10 flex align-center justify-between">
<view class="flex-1 height-80 flex direction-column align-start justify-between">
<text class="font-24 color-C3C3C3 nummedium-font">{{i18n.Investors.leiji_time}}</text>
<text class="font-28 nummedium-font color-C3C3C3">{{item.addtime}}</text>
</view>
<view class="flex-1 height-80 flex direction-column align-end justify-between">
<text class="font-24 color-C3C3C3 nummedium-font" style="opacity: 0.8;">{{item.type==1?i18n.Investors.freed_lixi:i18n.Investors.freed_bj}}</text>
<text class="font-34 numbold-font color-333333">+{{item.num}}</text>
</view>
</view>
</view>
</view>
</z-paging>
</view>
</template>
<script>
export default {
data() {
return {
count_lixi:0,
count_all:0,
count_bj:0,
day:0,
list:[],
}
},
computed: {
i18n() {
return this.$t('message');
},
},
// onPullDownRefresh() {
// console.log('refresh');
// this.list = []
// this.page = 1
// this.state = 'more'
// this.getInfo()
// this.getList()
// setTimeout(function () {
// uni.stopPullDownRefresh();
// }, 1000);
// },
// onReachBottom:function(){
// this.page++
// this.getList()
// },
onLoad(e) {
this.id = e.id
this.getInfo()
},
methods: {
getInfo(){
this.post('/angel/angel_detail_head',{
id:this.id
}).then(res => {
console.log('释放记录头部',res)
if(res.code == 1){
this.count_lixi = res.data.count_lixi
this.count_all = res.data.count_all
this.count_bj = res.data.count_bj
this.day = res.data.day
}
})
},
queryList(pageNo, pageSize) {
setTimeout(()=>{
this.post('/angel/angel_detail_log', {
page: pageNo,
page_num: pageSize,
id:this.id
}).then(res => {
if (res.code == 1) {
console.log(res)
this.$refs.paging.complete(res.data.data);
}
})
},500)
},
}
}
</script>
<style lang="scss">
.topBox{
width: 690rpx;
// height: 306rpx;
margin: 20rpx auto;
border-radius: 8rpx;
background: linear-gradient(117deg, #066FFF 0%, #72AEFF 100%);
}
.geduan{
width: 100%;
height: 1px;
background-color: #FFFFFF;
opacity: 0.42;
}
.listBox{
width: 100%;
padding: 0 30rpx;
// height: 234rpx;
background: #FFFFFF;
margin: 16rpx auto;
}
</style>