投屏pc端
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.
 
 
 

409 lines
14 KiB

<template>
<div class="exchange-warp">
<div class="titlebox">
<div class="el-tabs-title">
<span :class="{'active': dealType == 'E_I_P_T_ASTRICT'}" @click="chooseDealType('E_I_P_T_ASTRICT')">{{$t('限价交易')}}</span>
<span :class="{'active': dealType == 'E_I_P_T_MARKET'}" @click="chooseDealType('E_I_P_T_MARKET')">{{$t('市价交易')}}</span>
<span :class="{'active': dealType == 'E_I_P_T_DYNAMIC'}" @click="chooseDealType('E_I_P_T_DYNAMIC')">{{$t('止盈止损')}}</span>
</div>
<router-link to="/" class="feilv-aa">{{$t('费率')}}</router-link>
</div>
<div class="el-tab-pane">
<div class="exchange-div1">
<div class="list1-div1">
<div class="available">{{$t('可用')}}: {{mainCoinBalance}} {{currentPair.convertType}}</div>
<div class="btn" @click="$router.push('/assets/charge/' + currentPair.convertType)">{{$t('充币')}}</div>
</div>
<!-- 买入表单 -->
<div class="exchange-box1 hc-bgColor2">
<div class="inputbox" style="margin-bottom: 10px" v-if="dealType == 'E_I_P_T_DYNAMIC'">
<span class="buy-span">{{$t('触发价')}}</span>
<el-input :placeholder="$t('请输入触发价')" v-model="buyTriggerPrice" type="text" clearable autocomplete="off" @keyup.enter.native="submitBuy"></el-input>
<span class="bz-span">{{currentPair.convertType}}</span>
</div>
<div class="inputbox">
<span class="buy-span">{{$t('买入价')}}</span>
<el-input :placeholder="$t('请输入买入价格')" v-model="buyPrice" type="text" clearable autocomplete="off" @input="enterBuyPrice" :disabled="dealType == 'E_I_P_T_MARKET'" @keyup.enter.native="submitBuy"></el-input>
<span class="bz-span">{{currentPair.convertType}}</span>
</div>
<div class="text-Price">
<span>≈ 65826.98 CNY</span>
</div>
<div class="inputbox">
<span class="buy-span">{{$t('买入量')}}</span>
<el-input :placeholder="$t('请输入买入数量')" v-model="buyVolumn" type="text" clearable autocomplete="off" @input="enterBuyVolumn" @keyup.enter.native="submitBuy"></el-input>
<span class="bz-span">{{currentPair.dealCoin}}</span>
</div>
<div class="sliderbox">
<el-slider v-model="buyPercent" :step="25" :marks="buyMarks" show-stops @change="buySlider"></el-slider>
</div>
<div class="textbox">
{{$t('交易额')}} <span>{{buySummary}} {{currentPair.convertType}}</span>
</div>
<div class="buy-btnbox" @click="submitBuy">
<el-button class="buy-btn" type="primary" :loading="true" v-if="loading1">{{$t('提交中...')}}</el-button>
<el-button class="buy-btn" type="primary" v-else>{{$t('买入')}} {{currentPair.dealCoin}}</el-button>
</div>
</div>
</div>
<!-- 卖出表单 -->
<div class="exchange-div1">
<div class="list1-div1">
<div class="available">{{$t('可用')}}: {{tradeCoinBalance}} {{currentPair.dealCoin}}</div>
<div class="btn" @click="$router.push('/assets/charge/' + currentPair.dealCoin)">{{$t('充币')}}</div>
</div>
<div class="exchange-box1 hc-bgColor2">
<div class="inputbox" style="margin-bottom: 10px" v-if="dealType == 'E_I_P_T_DYNAMIC'">
<span class="buy-span">{{$t('触发价')}}</span>
<el-input :placeholder="$t('请输入触发价')" v-model="sellTriggerPrice" type="text" clearable autocomplete="off" @keyup.enter.native="submitSell"></el-input>
<span class="bz-span">{{currentPair.convertType}}</span>
</div>
<div class="inputbox">
<span class="buy-span">{{$t('卖出价')}}</span>
<el-input :placeholder="$t('请输入卖出价格')" v-model="sellPrice" type="text" clearable autocomplete="off" :disabled="dealType == 'E_I_P_T_MARKET'" @keyup.enter.native="submitSell"></el-input>
<span class="bz-span">{{currentPair.convertType}}</span>
</div>
<div class="text-Price">
<span>≈ 8512.98 CNY</span>
</div>
<div class="inputbox">
<span class="buy-span">{{$t('卖出量')}}</span>
<el-input :placeholder="$t('请输入卖出数量')" v-model="sellVolumn" type="text" clearable autocomplete="off" @input="enterSellVolumn" @keyup.enter.native="submitSell"></el-input>
<span class="bz-span">{{currentPair.dealCoin}}</span>
</div>
<div class="sliderbox">
<el-slider v-model="sellPercent" :step="25" :marks="sellMarks" show-stops @change="sellSlider"></el-slider>
</div>
<div class="textbox">
{{$t('交易额')}} <span>{{sellSummary}} {{currentPair.convertType}}</span>
</div>
<div class="buy-btnbox" @click="submitSell">
<el-button class="sell-button" type="primary" :loading="true" v-if="loading2">{{$t('提交中...')}}</el-button>
<el-button class="sell-button" type="primary" v-else>{{$t('卖出')}} {{currentPair.dealCoin}}</el-button>
</div>
</div>
</div>
</div>
<!-- 验证支付密码的弹窗 -->
<el-dialog class="user-dialog" :title="$t('验证支付密码')" :visible.sync="showPassword" :before-close="closePassword">
<div class="title-tips">{{$t('支付密码')}}</div>
<div class="address-form-input">
<el-input :placeholder="$t('请输入支付密码')" v-model="payPassword" type="password" clearable autocomplete="off" @keyup.enter.native="submitTrade">
</el-input>
</div>
<div class="title-tips">{{$t('动态验证')}}</div>
<div class="address-form-input">
<el-input class="verify-input" :placeholder="$t('请输入验证码')" v-model="verifyCode" type="text" clearable autocomplete="off" @keyup.enter.native="submitTrade">
</el-input>
<span class="get-code" v-if="isCodeSend">{{iTime + $t('s后重新获取')}}</span>
<span class="get-code" @click="getCode" v-else>{{$t('获取验证码')}}</span>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" :loading="true" v-if="loading3">{{$t('提交中...')}}</el-button>
<el-button type="primary" @click="submitTrade" v-else>{{$t('确定')}}</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mapState } from 'vuex'
let Countdown; //定时器
export default {
name: 'tradeForm',
props: {
mainCoinBalance: String, //主币余额
tradeCoinBalance: String, //交易币余额
},
data() {
return {
dealType: 'E_I_P_T_ASTRICT', //交易类型
dealDirection: 'E_I_D_T_BUY', //交易方向 E_I_D_T_BUY, E_I_D_T_SELL
//买入
buyPrice: '', //价格
buyVolumn: '', //数量
buyTriggerPrice: '', //止盈止损
buyMarks: {0: '0%', 25: '25%', 50: '50%', 75: '75%', 100: '100%'},
buyPercent: 0,
//卖出
sellPrice: '', //价格
sellVolumn: '', //数量
sellTriggerPrice: '', //止盈止损
sellMarks: {0: '0%', 25: '25%', 50: '50%', 75: '75%', 100: '100%'},
sellPercent: 0,
loading1: false, //买入提交
loading2: false, //卖出提交
loading3: false, //支付密码提交
showPassword: false, //密码弹框
payPassword: '', //支付密码
iTime: 60, //验证码倒计时
isCodeSend: false,
verifyCode: '', //验证码
}
},
computed: {
...mapState('user', ['userInfoData']),
...mapState('trend', ['allPairList', 'allTrendList', 'myCollectList', 'currentPair']),
maxBuyVolumn() { //最大买入数量
let val = 0;
if (this.buyPrice > 0 && this.buyPrice != '') {
val = this.common.accDiv(this.mainCoinBalance, this.buyPrice); //最大买入量=主币余额÷单价
}
return val;
},
buySummary() { //买入交易额
let val = 0;
if (this.buyPrice && this.buyVolumn) {
val = this.common.accMul(this.buyPrice, this.buyVolumn); //交易额=单价×数量
}
return val;
},
maxSellVolumn() { //最大卖出数量
let val = 0;
if (this.tradeCoinBalance) {
val = this.tradeCoinBalance; //最大卖出量=交易币余额
}
return val;
},
sellSummary() { //卖出交易额
let val = 0;
if (this.sellPrice && this.sellVolumn) {
val = this.common.accMul(this.sellPrice, this.sellVolumn); //交易额=单价×数量
}
return val;
},
},
watch: {
currentPair(newVal) {
if (newVal) {
this.buyPrice = this.currentPair.price;
this.sellPrice = this.currentPair.price;
}
}
},
methods: {
chooseDealType(val) { //切换交易方式
this.dealType = val;
if(val == 'E_I_P_T_MARKET') {
this.buyPrice = this.currentPair.price;
this.sellPrice = this.currentPair.price;
}
this.clearData();
},
enterBuyPrice() { //监听输入买入价格
if (this.buyPrice && this.buyPercent) {
let percent = this.common.accDiv(this.buyPercent, 100);
this.buyVolumn = this.common.accMul(this.maxBuyVolumn, percent);
}
},
enterBuyVolumn() { //监听输入买入数量
if (!this.buyPrice) {
this.$message.warning(this.$t('请先输入价格!'));
this.buyVolumn = '';
this.buyPercent = 0;
return;
} else if (parseFloat(this.buyVolumn) > this.maxBuyVolumn) {
this.$message.warning(this.$t('数量不能超过最大可买入量') + this.maxBuyVolumn);
this.buyVolumn = this.maxBuyVolumn;
this.buyPercent = 100;
} else {
let buy = parseFloat(this.buyVolumn);
this.buyPercent = parseFloat(this.common.accDiv(buy, this.maxBuyVolumn) * 100);
}
},
buySlider(val) { //买入滑块
if (!this.buyPrice) {
this.$message.warning(this.$t('请先输入价格!'));
this.buyVolumn = '';
this.buyPercent = 0;
return;
}
let percent = this.common.accDiv(val, 100);
this.buyVolumn = this.common.accMul(this.maxBuyVolumn, percent);
},
enterSellVolumn() { //监听输入卖出数量
if (parseFloat(this.sellVolumn) > this.maxSellVolumn) {
this.$message.warning(this.$t('数量不能超过最大可卖出量') + this.maxSellVolumn);
this.sellVolumn = this.maxSellVolumn;
this.sellPercent = 100;
} else if(this.sellVolumn) {
let sell = parseFloat(this.sellVolumn);
this.sellPercent = parseFloat(this.common.accDiv(sell, this.maxSellVolumn) * 100);
}
},
sellSlider(val) { //卖出滑块
let percent = this.common.accDiv(val, 100);
this.sellVolumn = this.common.accMul(this.maxSellVolumn, percent);
},
submitBuy() { //买入提交
if (this.loading1) {
return;
}
if(!this.userInfoData.initPayPwd) {
this.$message.error(this.$t('您还未设置支付密码!'));
return;
}
if (!this.buyPrice) {
this.$message.error(this.$t('请输入买入价格!'));
return;
}
if (!this.buyVolumn) {
this.$message.error(this.$t('请输入买入数量!'));
return;
}
if(this.dealType == 'E_I_P_T_DYNAMIC' && !this.buyTriggerPrice) {
this.$message.error(this.$t('请输入触发价!'));
return;
}
this.loading1 = true;
this.dealDirection = 'E_I_D_T_BUY';
this.showPassword = true;
},
submitSell() { //卖出提交
if (this.loading2) {
return;
}
if(!this.userInfoData.initPayPwd) {
this.$message.error(this.$t('您还未设置支付密码!'));
return;
}
if (!this.sellPrice) {
this.$message.error(this.$t('请输入买入价格!'));
return;
}
if (!this.sellVolumn) {
this.$message.error(this.$t('请输入买入数量!'));
return;
}
if(this.dealType == 'E_I_P_T_DYNAMIC' && !this.sellTriggerPrice) {
this.$message.error(this.$t('请输入触发价!'));
return;
}
this.loading2 = true;
this.dealDirection = 'E_I_D_T_SELL';
this.showPassword = true;
},
submitTrade() { //提交挂单
if (this.loading3) {
return;
}
if (!this.payPassword) {
this.$message.error(this.$t('请输入支付密码!'));
return;
}
if (!this.payPassword) {
this.$message.error(this.$t('请输入验证码!'));
return;
}
this.loading3 = true;
let params = {
symbolId: this.currentPair.symbolId, //交易对
caseCode: this.currentPair.caseCode,
dealType: this.dealDirection, //交易方向 买 卖
priceType: this.dealType, //交易类型 限价 市价 止盈止损
price: this.dealDirection == 'E_I_D_T_BUY' ? this.buyPrice : this.sellPrice, //单价
amount: this.dealDirection == 'E_I_D_T_BUY' ? this.buyVolumn : this.sellVolumn, //数量
triggerPrice: this.dealDirection == 'E_I_D_T_BUY' ? this.buyTriggerPrice : this.sellTriggerPrice,
payPwd: this.payPassword,
noteVerifyCode: this.verifyCode,
}
console.log(JSON.stringify(params))
this.postAxios('/api/entrust/info/putup', params)
.then(() => {
this.$message.success('挂单成功!');
this.closePassword();
this.clearData();
this.$emit('updateOrder');
})
.catch(() => {
this.loading3 = false;
})
},
closePassword() { //关闭密码弹窗
this.showPassword = false;
//清除数据
this.payPassword = '';
this.verifyCode = '';
this.loading1 = false;
this.loading2 = false;
this.loading3 = false;
},
clearData() { //清除数据
this.buyVolumn = '';
this.buyPercent = 0;
this.sellVolumn = '';
this.sellPercent = 0;
},
getCode() { //获取验证码
if (this.isCodeSend) {
this.$message.error(this.$t('请勿频繁获取验证码!'))
return;
}
this.isCodeSend = true;
this.getAxios(`/user/api/user/verify/get?verifyType=0`)
.then(() => {
this.$message.success(this.$t('验证码发送成功!'));
this.countdownTimer();
})
.catch(() => {
this.isCodeSend = false;
});
},
countdownTimer() { //短信发送开始计时60s
if (this.iTime === 0) {
clearTimeout(Countdown);
this.isCodeSend = false;
this.iTime = 60;
} else {
Countdown = setTimeout(this.countdownTimer, 1000);
this.iTime = this.iTime - 1;
}
},
},
mounted() {
this.buyPrice = this.currentPair.price;
this.sellPrice = this.currentPair.price;
}
}
</script>
<style>
</style>