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.
239 lines
8.7 KiB
239 lines
8.7 KiB
<template>
|
|
<view class="layout-page" :style="themeStyle">
|
|
<v-header :title="$t('currency.a0')">
|
|
<!-- <template #right>
|
|
<v-link to="/pages/currency/list" class="d-flex align-center">
|
|
<van-icon class="fn-20 m-t-xs" name="todo-list-o" />
|
|
</v-link>
|
|
</template> -->
|
|
</v-header>
|
|
<view class="main">
|
|
<view class="head fn-16">
|
|
<text @click="active=1;money=''" class="m-x-md" :class="active==1?'bor-b fn-bold':''">{{$t("currency.a1")}}</text>
|
|
<text @click="active=2;money=''" class="m-x-md" :class="active==2?'bor-b fn-bold':''">{{$t("currency.a2")}}</text>
|
|
</view>
|
|
<view class="content p-y-lg">
|
|
<text class="color-theme-1 shadow-panel-nei-5 bg-panel-3 rounded p-x-xl p-y-xs">USDT</text>
|
|
<view class="d-flex justify-between align-center">
|
|
<text v-if="active==1" class="d-block m-t-lg fn-bold color-light fn-16 p-y-md">{{$t("currency.a3")}}</text>
|
|
<text v-if="active==2" class="d-block m-t-lg fn-bold color-light fn-16 p-y-md">{{$t("currency.a4")}}</text>
|
|
<text class="m-t-lg color-theme-1 fn-12">
|
|
<img src="static/img/fill4.png" alt="" class="h-12" />
|
|
<span class="m-l-xs" v-if="!showPrice&&active==1" @click="showPrice=true">{{$t("currency.a5")}}</span>
|
|
<span class="m-l-xs" v-if="showPrice&&active==1" @click="showPrice=false">{{$t("currency.a6")}}</span>
|
|
<span class="m-l-xs" v-if="!showPrice&&active==2" @click="showPrice=true">{{$t("currency.a55")}}</span>
|
|
<span class="m-l-xs" v-if="showPrice&&active==2" @click="showPrice=false">{{$t("currency.a66")}}</span>
|
|
</text>
|
|
</view>
|
|
<view v-if="active==1">
|
|
<v-input
|
|
:placeholder="showPrice?$t('currency.a7'):$t('currency.a8')"
|
|
v-model="money"
|
|
type="number"
|
|
class="h-30 m-t-lg rounded-xs border-b p-b-ms"
|
|
>
|
|
<template #right v-if="showPrice">
|
|
<span class="fn-bold color-theme-1 fn-16"> USDT </span>
|
|
</template>
|
|
<template #left v-if="!showPrice">
|
|
<span class="fn-bold color-theme-1 fn-16"> ¥ </span>
|
|
</template>
|
|
</v-input>
|
|
</view>
|
|
<view v-else>
|
|
<v-input
|
|
:placeholder="showPrice?$t('currency.a9'):$t('currency.b0')"
|
|
v-model="money"
|
|
type="number"
|
|
class="h-30 m-t-lg rounded-xs border-b p-b-ms"
|
|
>
|
|
<template #right v-if="showPrice">
|
|
<span class="fn-bold color-theme-1 fn-16"> USDT </span>
|
|
</template>
|
|
<template #left v-if="!showPrice">
|
|
<span class="fn-bold color-theme-1 fn-16"> ¥ </span>
|
|
</template>
|
|
</v-input>
|
|
</view>
|
|
<view class="d-flex justify-between m-t-lg fn-12 align-center">
|
|
<text class="w-100">{{$t("currency.b1")}} ≈¥{{price_cny}}</text>
|
|
</view>
|
|
</view>
|
|
<button tag="button" v-if="active==1" @click="buy" class="rounded-xs m-x-lg color-white bg-theme-1">{{$t("currency.b2")}}</button>
|
|
<button v-else @click="sell" class="rounded-xs m-x-lg color-white bg-theme-1">{{$t("currency.b3")}}</button>
|
|
</view>
|
|
<van-dialog id="van-dialog" />
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import Otc from "@/api/otc";
|
|
import Exchange from "@/api/exchange";
|
|
import Wallet from "@/api/wallet";
|
|
import Profile from "@/api/profile";
|
|
import { mapGetters } from "vuex";
|
|
export default{
|
|
data(){
|
|
return{
|
|
active:1,
|
|
money:"",
|
|
showPrice:false,
|
|
price_cny:'',
|
|
usdt_balance:'',
|
|
detail:{}
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['themeStyle']),
|
|
isLogin() {
|
|
return Boolean(uni.getStorageSync("token"));
|
|
},
|
|
},
|
|
watch:{
|
|
active(){
|
|
this.getCurrencyExCny()
|
|
}
|
|
},
|
|
methods:{
|
|
getAuthInfo(){
|
|
Profile.getAuthInfo().then(res=>{
|
|
this.detail = res.data
|
|
})
|
|
},
|
|
// 获取汇率
|
|
getCurrencyExCny() {
|
|
Otc.legalPrice({
|
|
coin_name: 'USDT',
|
|
type:this.active==1?'buy':'sell'
|
|
}).then((res) => {
|
|
this.price_cny = res.data.price;
|
|
}).catch((err)=>{
|
|
setTimeout(()=>{
|
|
this._router.push('/pages/auth/index')
|
|
},2000)
|
|
})
|
|
},
|
|
//获取u余额
|
|
fundAccount() {
|
|
Wallet.fundAccount().then((res) => {
|
|
this.usdt_balance = res.data.otc_account_usd;
|
|
});
|
|
},
|
|
buy(){
|
|
if(this.showPrice&&this.money==''){
|
|
this.$toast(this.$t("currency.a7"))
|
|
return
|
|
}
|
|
if(!this.showPrice&&this.money==''){
|
|
this.$toast(this.$t("currency.a8"))
|
|
return
|
|
}
|
|
this.submit()
|
|
},
|
|
sell(){
|
|
if(this.showPrice&&this.money==''){
|
|
this.$toast(this.$t("currency.a9"))
|
|
return
|
|
}
|
|
if(!this.showPrice&&this.money==''){
|
|
this.$toast(this.$t("currency.b0"))
|
|
return
|
|
}
|
|
let money=!this.showPrice?this.money/this.price_cny:this.money
|
|
if(money>this.usdt_balance){
|
|
this.$toast(this.$t("currency.b4"))
|
|
return
|
|
}
|
|
this.submit()
|
|
},
|
|
submit(){
|
|
let that=this
|
|
if(that.detail.status!=2){
|
|
that.$dialog
|
|
.confirm({
|
|
message:that.$t("currency.b5"),
|
|
confirmButtonText: that.$t("currency.b6"),
|
|
cancelButtonText: that.$t("common.cancel")
|
|
})
|
|
.then(() => {
|
|
that._router.push('/pages/auth/index')
|
|
});
|
|
return
|
|
}
|
|
let data={
|
|
currency:'USDT',
|
|
type:this.active==1?'buy':'sell',
|
|
amount:this.money,
|
|
number:this.money,
|
|
unitPrice:this.price_cny,
|
|
pay_type:this.showPrice?0:1
|
|
}
|
|
that.$dialog
|
|
.confirm({
|
|
message: that.active==1?that.$t("currency.b7")+'?':that.$t("currency.b8")+'?',
|
|
confirmButtonText: that.$t("common.confirm"),
|
|
cancelButtonText: that.$t("common.cancel")
|
|
})
|
|
.then(() => {
|
|
Otc.legalBuy(data).then((res) => {
|
|
uni.setStorageSync('otc',res.data)
|
|
that._router.push('/pages/service/otc')
|
|
});
|
|
});
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getCurrencyExCny()
|
|
this.fundAccount()
|
|
this.getAuthInfo()
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.main{
|
|
position: relative;
|
|
.head{
|
|
padding:20px 0 80px 0;
|
|
}
|
|
.content{
|
|
position: relative;
|
|
width: 92%;
|
|
left: 4%;
|
|
top: -50px;
|
|
box-sizing: border-box;
|
|
.border-b1{
|
|
border-bottom:2px solid #ff9a22;
|
|
}
|
|
}
|
|
}
|
|
.w-100{
|
|
width: 100%;
|
|
}
|
|
.bg-lin{
|
|
background: linear-gradient(to right,#f6c769,#f3b644);
|
|
}
|
|
/deep/ uni-button:after{
|
|
border: 0;
|
|
}
|
|
/deep/ uni-button{
|
|
font-size: 16px;
|
|
}
|
|
.bor-b{
|
|
position: relative;
|
|
font-size: 18px;
|
|
color: $light;
|
|
}
|
|
.bor-b:after{
|
|
content: "";
|
|
position: absolute;
|
|
left: 30%;
|
|
bottom: -5px;
|
|
width: 40%;
|
|
height: 2px;
|
|
background-color: $theme-1;
|
|
border-radius: 5px;
|
|
}
|
|
.p-x-xl{
|
|
padding: 8px 40px!important;
|
|
}
|
|
</style>
|
|
|