Browse Source

修改提币页面

master
liaoxinyu 8 months ago
parent
commit
03a57d8010
  1. BIN
      assets/img/tishi.png
  2. BIN
      assets/img/zhuanzan.png
  3. 8
      element/index.js
  4. 17
      i18n/lang/en.json
  5. 17
      i18n/lang/zh-TW.json
  6. 3
      pages.json
  7. 441
      pages/assets/draw1.vue
  8. 117
      pages/assets/records.vue
  9. 6
      pages/base/mine.vue

BIN
assets/img/tishi.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
assets/img/zhuanzan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

8
element/index.js

@ -1,8 +1,12 @@
// 导入自己需要的组件
import { Slider } from 'element-ui'
import { Slider,Steps,Step,Select,Option } from 'element-ui'
const components = [Slider,Steps,Step,Select,Option]
const element = {
install: function (Vue) {
Vue.use(Slider)
// Vue.use(Slider)
components.forEach(component => {
Vue.use(component)
})
}
}
export default element

17
i18n/lang/en.json

@ -119,7 +119,22 @@
"c12": "Rejection Information",
"c13": "Withdrawal password",
"c14": "Please fill in the withdrawal password",
"c15": "Reset withdrawal password"
"c15": "Reset withdrawal password",
"rejection":"Reason for rejection",
"c16": "Send",
"c17": "Transfer Address",
"c18": "Transfer Amount",
"c19": "Recharge/Transfer",
"c20": "Contact customer service",
"c21": "Select Currency",
"c22": "Password and Email Verification Code",
"c23": "Estimated arrival time",
"c24": "Received quantity",
"c25": "Withdrawal",
"c26": "The transfer quantity cannot be greater than {name}",
"c27": "Transfer Records",
"c28": "confirm",
"c29": "Please check your withdrawal address carefully and make sure it is filled in correctly. If you miss or fill in the wrong information, you may lose your assets."
},
"base": {
"a0": "Title",

17
i18n/lang/zh-TW.json

@ -119,7 +119,22 @@
"c12": "駁回信息",
"c13": "提款密碼",
"c14": "請填写提款密碼",
"c15": "重置提款密碼"
"c15": "重置提款密碼",
"rejection":"拒絕理由",
"c16": "轉移",
"c17": "轉移地址",
"c18": "轉移金額",
"c19": "充值/轉移",
"c20": "聯絡客服",
"c21": "選擇幣種",
"c22": "密碼及邮箱驗證碼",
"c23": "預計到帳時間",
"c24": "到帳數量",
"c25": "提現",
"c26": "轉移數量不能大於{name}",
"c27": "轉移記錄",
"c28": "確認",
"c29": "請認真核對您的提幣地址,務必檢查是否正確填寫。如果您漏添或填錯,將有可能對您的資產造成損失"
},
"base": {
"a0": "標題",

3
pages.json

@ -179,6 +179,9 @@
{
"path" : "pages/auth/certification"
},
{
"path" : "pages/assets/draw1"
},
{
"path": "pages/service/index",
"style": {

441
pages/assets/draw1.vue

@ -0,0 +1,441 @@
<template>
<v-page>
<v-header>
<template #title>
<view>
{{ $t("common.c16") }}
<!-- <span class="color-theme-1">{{ coin }}</span> -->
</view>
</template>
<template #right>
<v-link :to="'/pages/assets/records?type='+type">
<van-icon class="fn-20 m-t-xs" name="todo-list-o" />
</v-link>
</template>
</v-header>
<view class="layout-main" style="background-color: #121212;padding: 20px;">
<el-steps direction="vertical" :active="active" style="min-height: 260px !important;width: 100%;box-sizing: border-box;">
<el-step :title="$t('common.c21')" style="flex-basis: 110px;">
<template slot="description">
<view class="d-flex justify-between m-t-md" @click="coinListShow=true" style="border: 1px solid #4e4e5d;padding: 10px;">
<view class="fn-20 color-light">{{ coin }}</view>
<view class="d-flex align-center">
{{ $t('recharge.a0') }}
<van-icon name="arrow"/>
</view>
</view>
</template>
</el-step>
<el-step :title="$t('common.c17')">
<template slot="description">
<view style="margin: 10px 0px;width: 540rpx;">
<v-input @input="addressnum" v-model="form.address" class="bg-form-panel-3 color-light w-max fn-13 rounded-xs" :placeholder="$t('assets.b9')"></v-input>
<el-select v-model="form.addressType" @change="enteraddressType" style="margin-top: 10px;width: 100%;" class="addressType" v-if="coin=='USDT'">
<el-option v-for="(item, index) in network" :key="index" :label="item.name" :value="item.id">
<span>{{ item.name }}</span>
</el-option>
</el-select>
</view>
</template>
</el-step>
<el-step :title="$t('common.c18')" v-if="form.address">
<template slot="description">
<view style="margin: 10px 0px;color: #fff;width: 540rpx;">
<v-input type="number" @input="amountnum" v-model="form.amount" :min="withdrawFee.withdrawal_min" :max="withdrawFee.withdrawal_max" class="color-light fn-13" :placeholder="$t('assets.c2')"></v-input>
<view class="d-flex justify-between align-end" style="margin: 10px 0px;">
<view style="width: 100%;">{{ $t("assets.c1") }}{{ withdrawFee.usable_balance }}{{ coin }}</view>
<view style="width: 100%;text-align: right;">{{$t('common.c23')}}{{timeFormat}}</view>
</view>
</view>
</template>
</el-step>
<el-step :title="$t('common.c13')" v-if="form.amount">
<template slot="description">
<view style="margin: 10px 0px;color: #fff;width: 540rpx;">
<v-input type="password" @input="withdrawalnum" v-model="form.withdrawal_psw" class="color-light w-max fn-13 rounded-xs" :placeholder="$t('common.c14')"></v-input>
</view>
</template>
</el-step>
<el-step :title="$t('safe.a5')" v-if="form.withdrawal_psw">
<template slot="description">
<view style="margin: 10px 0px;color: #fff;width: 540rpx;display: flex;">
<v-input type="text" v-model="form.emailcode" class="w-max color-light fn-13" :placeholder="$t('safe.a6')"></v-input>
<view class="d-flex" style="justify-content: space-between;align-items: center;">
<view style="width: 180rpx;text-align: center;" class="all color-light m-l-md flex-shrink fn-12 getCode" @click="getEmailCode">
<text v-if="!getEmailCodeLock">{{ $t("common.getCode") }}</text>
<text v-else>{{ daojishi }}</text>
</view>
</view>
</view>
</template>
</el-step>
</el-steps>
<view style="margin: 20px 32px;border-top: 2px solid #444;">
<view style="display: flex;align-items: center;padding-top: 10px;">{{$t('common.c24')}}<img src="@/assets/img/zhuanzan.png" alt width="20" style="margin-left: 5px;"/></view>
<view style="display: flex;justify-content: space-between;align-items: center;">
<view>
<view style="font-size: 30px;font-weight: bold;max-width: 540rpx;">
<span style="overflow-wrap: anywhere;">{{price1(quantity)}}</span>
</view>
<view>{{$t('assets.c4')}}: {{coin=='USDT'&&form.addressType==3?withdrawFee.trc20:withdrawFee.withdrawal_fee }} {{coin}}</view>
</view>
<view></view>
</view>
<view style="display: flex;margin-top: 10px;">
<view :class="!form.emailcode?'fontWithdrawal':'fontWithdrawal1'" @click="toDraw">
{{$t('common.c25')}}
</view>
</view>
</view>
<view class="form bg-panel-3 p-x-lg p-y-md" style="background-color: #121212;">
<ul class="fn-md rounded-md m-y-xs line-height-2">
<li>·{{ $t("assets.c5") }}{{lang=='zh-TW'||lang=='jp'?'。':'.'}}</li>
<li>·{{ $t("assets.c6") }}{{lang=='zh-TW'||lang=='jp'?'。':'.'}}</li>
<li>·{{ $t("assets.c7") }}{{lang=='zh-TW'||lang=='jp'?'。':'.'}}</li>
</ul>
</view>
</view>
<coin-list ref="coinList" v-model="coin" @close="coinListShow = false" v-show="coinListShow"/>
<view v-show="promptaddress" class="modal-overlay">
<view class="modal-content">
<view style="margin-top: 25px;padding: 0px 10px;">
<img src="@/assets/img/tishi.png" alt="" width="60" />
<view style="margin: 20px 0px;">{{$t('common.c29')}}</view>
<view class="losure" @click="closeModal">{{$t('common.c28')}}</view>
</view>
</view>
</view>
</v-page>
</template>
<script>
import coinList from "./coin-list";
import Wallet from "@/api/wallet";
import Member from "@/api/member";
import formData from "@/utils/class/date";
import Profile from "@/api/profile";
export default {
components: {
coinList,
},
data() {
return {
type: 'draw',
coin: "",
lang:"",
active:1,
JStime: 0,
tiemr: null,
indexshow:0,
quantity:"0.00",
timeFormat:"",
rechargeType: 2,
withdrawFee: {},
coinListShow: false,
promptaddress:false,
getEmailCodeLock: false,
lang: uni.getStorageSync('language'),
network:[{id:2,name:"ERC20"},{id:3,name:"TRC20"}],
form: {
coin_id: "",
amount: "",
withdrawal_psw:"",
address: "",
addressType: "",
code_type: 1,
code: '',
emailcode: '',
gr_code: '',//Graphic verification code
},
}
},
created() {
this.lang = localStorage.getItem('lang')
this.updateTimeFormat()
this.timeUpdateInterval = setInterval(this.updateTimeFormat, 36000);
},
computed: {
activeCoin() {
if (!this.coin) return {};
return this.$refs.coinList.coinList.find(
(item) => item.coin_name == this.coin
);
},
daojishi(){
return '('+this.JStime + 's' + ')';
}
},
watch: {
coin(n) {
if (n) {
this.active = 2
this.form.address = "";
if (this.coin != "USDT") {
this.form.addressType = 1;
} else {
this.rechargeType = 2;
}
this.withdrawalBalance();
}
},
},
methods: {
price1(item){
if (item) {
let price = item.toString();
let parts = price.split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}
},
addressnum(e){
if(e&&this.indexshow!==1){
this.indexshow++;
this.promptaddress = true;
this.active = 3
}
// console.log(e);
},
closeModal(){
this.promptaddress = false;
},
//
withdrawalBalance() {
let address_type = 1
let data = {
coin_name: this.coin,
address_type: this.rechargeType
};
Wallet.withdrawalBalance(data).then((res) => {
// console.info(res)
this.withdrawFee = res.data;
});
},
enteraddressType(e){
if(e&&this.form.amount){
const num = this.coin=='USDT'&&this.form.addressType==3?this.withdrawFee.trc20:this.withdrawFee.withdrawal_fee
this.quantity = this.form.amount - num
}
},
//
getEmailCode(){
if (!this.form.address) {
this.$toast(this.$t('assets.b9'))
return
}
if (!this.form.amount) {
this.$toast(this.$t('assets.c2'))
return
}
if (!this.form.withdrawal_psw) {
this.$toast(this.$t('common.c14'))
return
}
// if (!this.form.gr_code) {
// this.$toast(this.$t('common.GraphicValidation'))
// return
// }
if(this.getEmailCodeLock){return};
this.JStime = 300;
this.tiemr = setInterval(()=>{
if(this.JStime===0){
this.getEmailCodeLock = false;
clearInterval(this.tiemr);
return;
}
this.JStime--;
}, 1000)
this.getEmailCodeLock = true;
Member.getWdcode({bt:this.coin,baddr:this.form.address,bnum:this.form.amount}).then(res=>{
// console.log(res);
if(res.code=='4001'){
this.$toast(res.message);
}else{
this.$toast(this.$t('common.sendSuccess'));
}
})
},
//
toDraw() {
if (!this.form.address) {
this.$toast(this.$t('assets.b9'))
return
}
if (!this.form.amount) {
this.$toast(this.$t('assets.c2'))
return
}
if(!this.form.withdrawal_psw){
this.$toast(this.$t('common.c14'))
return
}
if (!this.form.emailcode) {
this.$toast(this.$t('safe.a6'))
return
}
let data = this.withdrawFee
if (data.withdraw_switch == 1) {
this.secondaryShow = true
if (data.google_status == 1) {
this.form.code_type = 3;
} else if (data.phone_status == 1) {
this.form.code_type = 1;
this.$nextTick(() => {
this.$refs.mobileCode.send();
});
} else if (data.email_status == 1) {
this.form.code_type = 2;
this.$nextTick(() => {
this.$refs.emailCode.send();
});
}
} else {
this.draw()
}
},
draw() {
// if(this.status!=2){
// this.$toast(this.$t('common.withdrawal2'));
// }
// this.form.addressType = this.rechargeType;
this.form.coin_id = this.activeCoin.coin_id;
Wallet.withdraw(this.form, {btn: this.$refs.btn})
.then((res) => {
this.secondaryShow = false
this.form.code = ''
if (res.code == 4001) {
this.$toast(res.message);
// this.reGetGraphChe();//
} else {
this.$toast.success(this.$t("assets.d5") + "!");
this.form.amount = ''
setTimeout(()=>{
uni.navigateTo({
url:'/pages/assets/records?type='+this.type
})
}, 1500)
// setTimeout(()=>{
// this.getWithdrawRecords();
// }, 2000)
// setTimeout(()=>{
// this.getWithdrawRecords();
// }, 3000)
}
})
.catch(() => {
});
},
amountnum(){
if(this.form.amount){
this.active = 4
const num = this.coin=='USDT'&&this.form.addressType==3?this.withdrawFee.trc20:this.withdrawFee.withdrawal_fee
this.quantity = this.form.amount - num
if(this.quantity < 0){
this.quantity = "0.00"
}
}else{
this.quantity = "0.00"
}
},
withdrawalnum(){
this.active = 5
},
updateTimeFormat() {
// datatimeFormat
this.timeFormat = this.getTimeFormat();
},
getCurrentUSTime() {
const now = new Date();
const offset = -4 * 60; // UTC-4
// getTimezoneOffset() UTC
const usTime = new Date(now.getTime() + (now.getTimezoneOffset() * 60000) + (offset * 60000));
return usTime;
},
// 01...6
getDayOfWeek(date) {
return date.getDay();
},
// 12H24H
getTimeFormat() {
const usTime = this.getCurrentUSTime();
const dayOfWeek = this.getDayOfWeek(usTime);
return dayOfWeek >= 1 && dayOfWeek <= 5 ? '12H' : '24H';
},
}
}
</script>
<style lang="scss">
</style>
<style scoped lang="scss">
.el-steps--vertical{
height: auto;
}
::v-deep .el-step__title.is-wait {
color: #303133 !important;
}
::v-deep .el-input__inner{
background-color: #242424;
}
::v-deep .is-process .el-step__icon.is-text{
border-color: #C0C4CC;
}
.modal-overlay {
z-index: 999999999999;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
background-color: #1f1f1f;
padding: 20px;
border-radius: 5px;
width: 550rpx;
text-align: center;
position: relative;
}
.losure{
color: #fff;
width: 100%;
height: 40px;
font-size: 16px;
line-height: 40px;
cursor: pointer;
border-radius: 5px;
background-color: #77abff;
}
.getCode{
color: #fff;
margin: 10px 0px;
padding: 5px 10px;
border-radius: 5px;
align-items: center;
border: 1px solid #4e4e5d;
}
.fontWithdrawal{
color: #737475;
cursor: pointer;
padding: 10px 40px;
border-radius: 5px;
background-color: #3f4651;
}
.fontWithdrawal1{
color: #fff;
cursor: pointer;
padding: 10px 40px;
border-radius: 5px;
background-color: #1c52bc;
}
</style>

117
pages/assets/records.vue

@ -3,7 +3,7 @@
<v-header>
<template #title>
<view v-if="type=='draw'">
{{ $t("assets.c8") }}
{{ $t("common.c27") }}
</view>
<view v-if="type=='recharge'">
{{ $t('assets.f4') }}
@ -16,29 +16,41 @@
<view class="">
<table class="w-max">
<thead class="p-x-md">
<tr class="fn-sm p-x-md">
<th class="p-b-md fn-left p-l-md">{{ $t("assets.c9") }}</th>
<th class="p-b-md fn-left">{{ $t("assets.d0") }}</th>
<th class="p-b-md fn-right p-r-md">{{ $t("assets.c0") }}</th>
<tr class="fn-sm p-x-md" style="display: flex;align-items: center;">
<view class="p-b-md fn-left p-l-md" style="width: 30%;">{{ $t("assets.c9") }}</view>
<view class="p-b-md fn-left" style="width: 20%;">{{ $t("assets.d0") }}</view>
<view class="p-b-md fn-right p-r-md" style="width: 30%;">{{ $t("assets.c0") }}</view>
<view class="p-b-md fn-right p-r-md" style="width: 10%;">{{ $t("exchange.g3") }}</view>
</tr>
</thead>
<tbody>
<tr class="color-light trChange p-x-md rounded-md" v-for="item in list" :key="item.id">
<td class="p-y-xs p-l-md rounded-tl-sm rounded-bl-sm fn-sm">
{{ item.datetime | parseTime }}
</td>
<td v-if="type=='draw'">
<view>{{ item.status_text }}</view>
</td>
<td v-if="type=='recharge'">
<view v-if="item.status==0">{{$t('assets.d1')}}</view>
<view v-if="item.status==1" class="color-buy">{{$t('assets.d2')}}</view>
<view v-if="item.status==2" class="color-sell">{{$t('assets.d3')}}</view>
</td>
<td class="fn-right p-r-md rounded-tr-sm rounded-br-sm">
{{ item.amount }}
<span class="color-default">({{ item.coin_name }})</span>
</td>
<view style="display: flex;align-items: center;">
<view class="p-y-xs p-l-md rounded-tl-sm rounded-bl-sm fn-sm" style="width: 30%;">
{{ item.datetime | parseTime }}
</view>
<view v-if="type=='draw'" style="width: 20%;">
<view :class="item.status==0?'status_text':item.status==2?'status_text1':''">{{ item.status_text }}</view>
<view v-if="item.status==0">{{updateTimer(item.datetime)}}</view>
</view>
<view v-if="type=='recharge'">
<view v-if="item.status==0">{{$t('assets.d1')}}</view>
<view v-if="item.status==1" class="color-buy">{{$t('assets.d2')}}</view>
<view v-if="item.status==2" class="color-sell">{{$t('assets.d3')}}</view>
</view>
<view class="fn-right p-r-md rounded-tr-sm rounded-br-sm" style="width: 30%;">
{{ item.amount }}
<span class="color-default">({{ item.coin_name }})</span>
</view>
<view class="" v-if="item.status==0" style="width: 10%;">
<span style="color: #4381F6;width: 60px;height: 30px;font-size: 12px;"
@click="cancelWithdraw(item)">{{$t('exchange.g4')}}</span>
</view>
</view>
<view class="p-l-md" v-if="item.remark" style="color:red;word-wrap: break-word;width:680rpx;">
<view>{{$t('common.rejection')}}{{item.remark}}</view>
<view style="color: #4381F6;" v-if="!remarktext(item.updated_at)">{{$t('common.c20')}}</view>
</view>
</tr>
<!-- <tr v-if="loadMore">
<td colspan="3" class="fn-center p-xs link-active" @click="more">
@ -63,7 +75,8 @@ import formData from "@/utils/class/date";
type: '',
list: [],
page: 1,
loadMore: true
loadMore: true,
timer: null,
}
},
filters: {
@ -105,6 +118,47 @@ import formData from "@/utils/class/date";
this.depositHistory();
}
},
//
isWeekend(date) {
const day = date.getDay(); // 0 6
return day === 0 || day === 6;
},
//
getTargetTime(datetime) {
const now = new Date();
const target = new Date( Date.parseTime(datetime) );
const isWeekend = this.isWeekend(target);
// 24
if (isWeekend) {
target.setHours(target.getHours() + 24);
} else {
// 12
target.setHours(target.getHours() + 12);
}
const countdownMilliseconds = isWeekend ? 24 * 60 * 60 * 1000 : 12 * 60 * 60 * 1000;
return target.getTime() + countdownMilliseconds;
},
updateTimer(val){
const now = Date.now();
const timer = this.getTargetTime(val)
const diff = timer - now;
if (diff <= 0) {
return '00:00:00';
}
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
return `${hours < 10 ? '0'+hours: hours}:${minutes < 10 ? '0'+minutes: minutes}:${seconds < 10 ? '0'+seconds: seconds}`;
},
remarktext(val){
const now = new Date()
const target = new Date(Date.parseTime(Date.parse(val)))
const diff = now.getTime() - target.getTime()
return diff > 12 * 60 * 60 * 1000
}
},
onLoad(e) {
// console.log('---------',e);
@ -114,10 +168,27 @@ import formData from "@/utils/class/date";
}else if(e.type=='recharge'){
this.depositHistory();
}
this.timer = setInterval(() => {
this.list.forEach((item) => {
if (item.status === 0) {
// Vue
this.$forceUpdate();
}
});
}, 1000);
}
}
</script>
<style>
<style scoped lang="scss">
.status_text{
font-size: 14px;
color: #53b987;
text-shadow: 1px 1px rgba(83, 185, 135, 0.8);
}
.status_text1{
font-size: 14px;
color: #D31027;
}
</style>

6
pages/base/mine.vue

@ -59,9 +59,13 @@
<img src="@/assets/img/home/Make.png" alt="" class="h-25"/>
<view class="color-light fn-middle fn-ms">{{$t("base.b5")}}</view>
</v-link>
<v-link tag="view" to="/pages/assets/draw" class="manage_text">
<!-- <v-link tag="view" to="/pages/assets/draw" class="manage_text">
<img src="@/assets/img/home/currency.png" alt="" class="h-25"/>
<view class="color-light fn-ms">{{$t("base.b6")}}</view>
</v-link> -->
<v-link tag="view" to="/pages/assets/draw1" class="manage_text">
<img src="@/assets/img/home/currency.png" alt="" class="h-25"/>
<view class="color-light fn-ms">{{$t("common.c16")}}</view>
</v-link>
<v-link tag="view" to="/pages/transfer/index" class="manage_text">
<img src="@/assets/img/home/transfer.png" alt="" class="h-25"/>

Loading…
Cancel
Save