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

559 lines
19 KiB

<template>
<div class="global-width">
<div class="container">
<!--当前位置-->
<div class="hc-breadcrumb">
<router-link to="/currency/trade" class="otc-index-btn">{{$t('交易大厅')}}</router-link>
<router-link to="/currency/release" class="otc-index-btn hc-btn-active">{{$t('发布广告')}}</router-link>
<router-link to="/order/currency" class="otc-index-btn">{{$t('订单管理')}}</router-link>
</div>
<div class="hc-breadcrumb trade-center-top">
<span>{{$t('发布广告详情')}}</span>
<div class="order-top-div2 margin-t0">
<span class="hc-color4" @click="$router.push('/currency/ads')">{{$t('我的广告')}}</span>
</div>
</div>
<div class="trade-detail-warp release-box">
<!--左边-->
<div class="trade-detail-left">
<router-link to="/" class="trade-detail-left-div1">
<div class="trade-detail-left-top">
<img class="trade-detail-left-headimg" :src="dealerInfo.avatar" v-if="dealerInfo.avatar">
<img class="trade-detail-left-headimg" src="../../assets/images/user-head-img.png" v-else>
</div>
<div class="trade-detail-left-top">
<div class="trade-detail-left-nickname">{{dealerInfo.username || $t('暂无昵称')}}</div>
<div class="merchants-tag">
<img src="../../assets/images/trade/icon-authentication.png">
<span class="hc-color">{{$t('认证商家')}}</span>
</div>
</div>
</router-link>
<div class="trade-detail-left-div2">
<div class="trade-detail-left-div3">
<div class="hc-color">{{$t('总成单')}}</div>
<div class="div2-d1">{{dealerInfo.sumOfFinishedFlow || 0}}</div>
</div>
<div class="trade-detail-left-div4">
<div class="hc-color">{{$t('完成率')}}</div>
<div class="div2-d1">{{dealerInfo.finishedRate || 0}}%</div>
</div>
<!-- <div class="trade-detail-left-div5">
<div class="hc-color">{{$t('30日成单')}}</div>
<div class="div2-d1">{{dealerInfo.numberOf30DayFinishedFlow || 0}}</div>
</div> -->
<div class="trade-detail-left-div5">
<div class="hc-color">{{$t('平均放行')}}</div>
<div class="div2-d1">{{dealerInfo.avgReleaseMinus || 0}} {{$t('分钟')}}</div>
</div>
</div>
<div class="trade-detail-explain">
<h3>{{$t('广告说明')}}:</h3>
<p class="hc-color">{{$t('1.订单有效期为15分钟,请您及时在有效期内付款并点击「标记付款已完成」按钮,我才可以释放数字币给您。')}}</p>
<p class="hc-color">{{$t('2.开始交易后数字币由系统锁定托管,请安心下单。')}}</p>
</div>
</div>
<!-- 右边 -->
<div class="trade-detail-right">
<div class="tab-title">
<ul>
<li :class="{'active': dealType}" @click="dealType = 1">
<span>{{$t('我要买')}}</span>
</li>
<li :class="{'active': !dealType}" @click="dealType = 0">
<span>{{$t('我要卖')}}</span>
</li>
</ul>
</div>
<div class="tab-container">
<div class="choose-currency">
<ul>
<li class="active">
<!-- <span :class="[{'buy-currency': dealType}, {'sell-currency': !dealType}]">{{currentCoin}}</span> -->
<el-cascader v-model="currentCoin" :options="options" @change="handleChange"></el-cascader>
</li>
<li class="limit">{{$t('限额')}} ¥{{limitMin}}~¥{{limitMax}}</li>
</ul>
</div>
<div class="top-price">
<span>
{{$t('当前单价')}}(CNY): {{price}}
<div class="question-box">
<img class="fa-question" src="../../assets/images/icon-question.png">
<div class="free-explanation free-explanation2">
<p>{{$t('当前单价会因市场波动而改变,实际单价请以下单后的锁定单价为准')}}</p>
</div>
</div>
</span>
<div class="top-price-r hc-color1" v-if="dealType">{{$t('您需要支付手续费,交易手续费按')}}{{buyFee}}%{{$t('收取!')}}</div>
<div class="top-price-r hc-color1" v-else>{{$t('您需要支付手续费,交易手续费按')}}{{sellFee}}%{{$t('收取!')}}</div>
</div>
<div class="form-box">
<div class="form-group">
<div class="address-form-div2">
<label class="form-label">{{dealTypeText}}{{$t('金额')}}</label>
<div class="form-control release-form">
<el-input class="text-input" :placeholder="$t('请输入金额')" v-model="totalPrice" type="text" clearable autocomplete="off" @input="setPrice" @keyup.enter.native="openPassword">
</el-input>
<div class="form-control-company">CNY</div>
</div>
</div>
<div class="address-form-div3">
<img src="../../assets/images/trade/icon-equal.png">
</div>
<div class="address-form-div2">
<label class="form-label">{{dealTypeText}}{{$t('数量')}}</label>
<div class="form-control release-form">
<el-input class="text-input" :placeholder="$t('请输入数量')" v-model="quantity" type="text" clearable autocomplete="off" @input="setQuantity" @keyup.enter.native="openPassword">
</el-input>
<div class="form-control-company">{{currentCoin}}</div>
</div>
</div>
</div>
<div class="form-group">
<div class="address-form-div2">
<label class="form-label">{{$t('最小限额')}}</label>
<div class="form-control release-form">
<el-input class="text-input" :placeholder="$t('请输入最小限额')" v-model="minPrice" type="text" clearable autocomplete="off" @keyup.enter.native="openPassword">
</el-input>
<div class="form-control-company">CNY</div>
</div>
</div>
<div class="address-form-div2" style="float: right;">
<label class="form-label">{{$t('设置单价')}}</label>
<div class="form-control release-form">
<el-input class="text-input" :placeholder="$t('请输入单价')" v-model="price" type="text" clearable autocomplete="off" @keyup.enter.native="openPassword">
</el-input>
<div class="form-control-company">CNY</div>
</div>
</div>
</div>
<div class="form-group">
<div class="address-form-div2">
<label class="form-label">{{$t('付款方式')}}</label>
<div class="form-control">
<div class="buy-payment">
<div class="buy-payment-choose" :class="{'active': alipay}" v-if="hasAlipay">
<span @click="alipay = !alipay">{{$t('支付宝')}}</span>
</div>
<div class="buy-payment-choose" :class="{'active': weixinpay}" v-if="hasWeixin">
<span @click="weixinpay = !weixinpay">{{$t('微信')}}</span>
</div>
<div class="buy-payment-choose" :class="{'active': unionpay}" v-if="hasUnionpay">
<span @click="unionpay = !unionpay">{{$t('银行卡')}}</span>
</div>
<span class="buy-payment-tips" v-if="hasPayment">
{{$t('您还未添加收款方式')}}
<router-link to="/user/setting">{{$t('去设置')}}</router-link>
</span>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="address-form-div2" @click="openPassword">
<el-button type="primary" :loading="true" v-if="loading">{{$t('提交中...')}}</el-button>
<el-button type="primary" v-else>{{$t('立即发布')}}</el-button>
</div>
</div>
</div>
</div>
<div class="trade-detail-right-tips">
<h3>{{$t('当前数字货币价格为系统自动计算,实际交易价格以发起交易时的价格为准,请点击查看关于')}} <span>{{$t('浮动价格的说明')}}</span>。</h3>
<p>1. {{$t('交易发起前,请您确认已阅读并同意卖家提出的条款,并再次确认交易内容无误后,再点击购买按钮。')}}</p>
<p>2. {{$t('交易发起后,请您于付款期限截止前转帐至指定账户,并标记已付款完毕,逾期系统将自动取消交易。')}}</p>
<p>3. {{$t('交易发起后,系统会自动将卖家的数字货币锁定,待卖家确认收到您的转帐后,将会释放数字货币至您的账户中。')}}</p>
<p>4. {{$t('建议您在交易前先查看卖家信息,检视相关交易记录及评价,以减少交易纠纷。')}}</p>
<p>5. {{$t('交易过程请使用平台的聊天系统进行沟通,平台外的对话记录将无法作为交易纠纷的依据。')}}</p>
<p>6. {{$t('温馨提示:超过三笔取消订单,将被冻结当天下单权限。')}}</p>
<p>7. {{$t('下单后请履行契约精神,恶意抬价或者是反悔,被投诉将冻结账户 3-14 天不等。')}}</p>
</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="payPwd" type="password" clearable autocomplete="off" @keyup.enter.native="releaseAds">
</el-input>
</div>
<div class="title-tips">{{$t('图形验证码')}}</div>
<div class="address-form-input" style="display: flex;justify-content: space-between;">
<el-input :placeholder="$t('请输入图形验证码')" v-model="imgVerifyCode" type="text" clearable autocomplete="off" @keyup.enter.native="submit">
</el-input>
<img class="val" :src="imagesUrl" @click="getImageCode">
</div>
<div class="title-tips">{{$t('短信验证码')}}</div>
<div class="address-form-input">
<el-input class="verify-input" :placeholder="$t('请输入短信验证码')" v-model="noteVerifyCode" type="text" clearable autocomplete="off" @keyup.enter.native="releaseAds">
</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="loading2">{{$t('提交中...')}}</el-button>
<el-button type="primary" @click="releaseAds" v-else>{{$t('确定')}}</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mapState } from 'vuex'
let Countdown;
export default {
name: 'currencyRelease',
data() {
return {
dealerId: '',
dealerInfo: {}, //商家信息
dealType: 1, //1买 0卖
coinList: [], //所有币种列表
currentCoin: '', //当前币种
currentCoinID: '', //当前币种ID
price: 0, //币种参考单价
limitMin: 0, //最小限额
limitMax: 0, //最大限额
buyRange: 0, //买入价格限制
sellRange: 0, //卖出价格限制
buyFee: 0, //买入手续费
sellFee: 0, //卖出手续费
options: [],
totalPrice: '', //金额
quantity: '', //数量
minPrice: '', //最小限额
alipay: false,
weixinpay: false,
unionpay: false,
payPwd: '', //支付密码
noteVerifyCode: '', //短信验证码
hasAlipay: false,
hasWeixin: false,
hasUnionpay: false,
showPassword: false,
iTime: 60, //验证码倒计时
isCodeSend: false,
loading: false,
loading2: false,
randomString: '', //图片验证码随机数
imgVerifyCode: '', //图片验证码
imagesUrl: '', //验证码图片地址
}
},
computed: {
...mapState('user', ['userInfoData' ,'merchantStatus']),
dealTypeText() {
let text = this.dealType ? this.$t('购买') : this.$t('出售');
return text;
},
hasPayment() { //是否有添加支付方式
let val = false;
if(!this.hasAlipay && !this.hasWeixin && !this.hasUnionpay) {
val = true;
}
return val;
}
},
watch: {
price(newVal) { //监听单价
if (newVal != '' && this.totalPrice > 0) {
this.quantity = this.common.accDiv(this.totalPrice, newVal); //数量=金额÷单价
}
},
},
methods: {
getImageCode() { //获取图片验证码
this.randomString = Math.floor(Math.random() * 4000 + 1000) + new Date().getTime();
this.imagesUrl = this.common.baseURL + '/user/api/user/image/' + this.randomString;
},
getUserInfoData() {
this.getAxios('/user/api/user/info')
.then(data => {
this.dealerId = data.data.id;
setTimeout(() => {
this.getDealerInfo();
}, 300);
})
},
getDealerInfo() { //商家信息
this.postAxios('/api/market/order/business/info/' + this.dealerId)
.then(data => {
this.dealerInfo = data.data;
})
},
getCoinList() { //获取币种列表
this.getAxios('/api/market/fcoin/list')
.then(data => {
this.coinList = data.data;
this.currentCoin = this.coinList[0].coinId;
this.currentCoinID = this.coinList[0].coinId;
this.price = this.coinList[0].price; //单价
this.buyRange = this.coinList[0].buyRange; //买入单价范围
this.sellRange = this.coinList[0].sellRange; //卖出单价范围
this.buyFee = this.coinList[0].buyServiceChargeRate; //买入手续费
this.sellFee = this.coinList[0].sellServiceChargeRate; //卖出手续费
this.limitMin = this.coinList[0].minLimit; //总金额最低
this.limitMax = this.coinList[0].maxLimit; //总金额最高
this.coinList.forEach(item => {
this.options.push({
value: item.coinId,
label: item.coinId
})
})
})
},
getPayment() { //获取支付方式
this.getAxios('/api/user/payment/list')
.then(data => {
let list = data.data;
list.forEach(item => {
if(item.status == 'U_P_S_NORMAL') {
if(item.paymentType == 1) {
this.hasWeixin = true;
}
if(item.paymentType == 2) {
this.hasAlipay = true;
}
if(item.paymentType == 3) {
this.hasUnionpay = true;
}
}
})
})
},
handleChange(value) { //切换币种
console.log(JSON.stringify(value));
this.coinList.forEach(item => {
if(item.coinId == value[0]) {
this.currentCoin = item.coinId;
this.currentCoinID = item.coinId;
this.price = item.price; //单价
this.buyRange = item.buyRange; //买入单价范围
this.sellRange = item.sellRange; //卖出单价范围
this.buyFee = item.buyServiceChargeRate; //买入手续费
this.sellFee = item.sellServiceChargeRate; //卖出手续费
this.limitMin = item.minLimit; //总金额最低
this.limitMax = item.maxLimit; //总金额最高
}
})
},
setPrice() { //数量=金额÷单价
if(this.totalPrice != '' && this.totalPrice != 0 && this.price > 0) {
this.quantity = this.common.accDiv(this.totalPrice, this.price);
} else if(this.totalPrice == '') {
this.quantity = '';
}
},
setQuantity() { //金额=数量×单价
if (this.quantity != '' && this.quantity != 0 && this.price > 0) {
this.totalPrice = this.common.accMul(this.quantity, this.price);
} else if(this.quantity == '') {
this.totalPrice = '';
}
},
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.verifyTypeText + 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;
}
},
openPassword() { //打开密码弹框
if(this.loading) {
return;
}
if(this.merchantStatus != 'M_E_S_PASS') {
this.$message.error(this.$t('您还不是承兑商,不能发布广告!'));
return;
}
if(!this.userInfoData.initPayPwd) {
this.$message.error(this.$t('您还未设置支付密码!'));
return;
}
if(!this.price) {
this.$message.error(this.$t('请输入单价!'));
return;
}
if(!this.totalPrice) {
this.$message.error(this.$t('请输入金额!'));
return;
}
if(!this.quantity) {
this.$message.error(this.$t('请输入数量!'));
return;
}
if(!this.minPrice) {
this.$message.error(this.$t('请输入最小限额!'));
return;
}
if(this.minPrice < this.limitMin) {
this.$message.error(this.$t('最小限额不能小于') + this.limitMin);
return;
}
if (!this.alipay && !this.weixinpay && !this.unionpay) {
this.$message.error(this.$t('请选择支付方式!'));
return;
}
this.loading = true;
this.showPassword = true;
},
closePassword() {
this.showPassword = false;
//清除数据
this.payPwd = '';
this.noteVerifyCode = '';
this.loading = false;
this.loading2 = false;
},
releaseAds() { //发布广告
if(this.loading2) {
return;
}
if(!this.payPwd) {
this.$message.error('请输入支付密码!');
return;
}
if (!this.imgVerifyCode) {
this.$message.error(this.$t('请输入图片验证码!'));
return;
}
if(!this.noteVerifyCode) {
this.$message.error('请输入短信验证码!');
return;
}
this.loading2 = true;
let params = {
buy: this.dealType ? true : false, //买or卖
amount: this.price, //单价
intAmount: this.dealType ? this.quantity : this.totalPrice, //买数量 卖金额
intCoinId: this.dealType ? this.currentCoinID : 'CNY',
outAmount: this.dealType ? this.totalPrice : this.quantity, //买金额 卖数量
outCoinId: this.dealType ? 'CNY' : this.currentCoinID,
minAmount: this.minPrice, //最小限额
alipay: this.alipay,
weixinpay: this.weixinpay,
unionpay: this.unionpay,
payPwd: this.payPwd,
noteVerifyCode: this.noteVerifyCode,
randomString: this.randomString,
imgVerifyCode: this.imgVerifyCode,
}
this.postAxios('/api/market/order/publish', params)
.then(() => {
this.loading = false;
this.loading2 = false;
this.$message.success('广告发布成功!');
setTimeout(() => {
this.$router.push('/currency/ads');
}, 800)
})
.catch(() => {
this.loading = false;
this.loading2 = false;
})
}
},
created() {
this.getCoinList();
this.getUserInfoData();
this.getPayment();
this.getImageCode();
}
}
</script>
<style scoped>
.order-top-div2 {
position: absolute;
right: 0;
top: 0;
}
.top-price {
margin-bottom: 30px;
}
.release-form {
background: #f6f6f6;
display: flex;
align-items: center;
padding: 0 10px;
}
.release-form .text-input {
width: auto;
flex: 1 1 auto;
padding: 0;
}
</style>