From cf0d36bbe155ecdfd8bca429666405e830d0dc7a Mon Sep 17 00:00:00 2001
From: XIGUASSR <623844246@qq.com>
Date: Sat, 12 Nov 2022 04:22:49 +0800
Subject: [PATCH] 最新
---
src/page/trading/buy.vue | 566 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 529 insertions(+), 37 deletions(-)
diff --git a/src/page/trading/buy.vue b/src/page/trading/buy.vue
index 5c80beb..dd46dda 100644
--- a/src/page/trading/buy.vue
+++ b/src/page/trading/buy.vue
@@ -8,10 +8,10 @@
</div>
<div class="right_title">
<div class="t_t">
- <span>{{ '人民币' }}</span>
+ <span>{{ name }}</span>
</div>
<div class="b_t">
- <span>{{ 'CNY' }}</span>
+ <span>{{ code }}</span>
</div>
</div>
</div>
@@ -19,7 +19,7 @@
<div class="cot">
<div class="lefts">
<div class="top_new">
- <span>{{ '1.34609' }}</span>
+ <span>{{ nowPrice }}</span>
</div>
<div class="bottom_es">
<span>{{ '买入价' }}</span>
@@ -27,47 +27,82 @@
</div>
<div class="rights">
<div class="ese">
- <div class="mr"
- v-for="(item, index) in tradingArr"
- :key="index"
- @click="handleTradingClick(index)"
- :class="tabsCurrentIndex === index ? 'active' : ''"
+ <div class="mc"
+ @click="handleTradingClick(0)"
+ :class="tabsCurrentIndex === 0 ? 'actives' : ''"
>
- <span>{{ item }}</span>
+ <span>卖出</span>
+ </div>
+
+ <div class="mr"
+ @click="handleTradingClick(1)"
+ :class="tabsCurrentIndex === 1 ? 'active' : ''"
+ >
+ <span>买入</span>
</div>
</div>
</div>
</div>
</div>
- <div class="price_tabs">
+
+ </div>
+
+ <div class="price_tabs">
<div class="tabs">
<div class="tab_item"
v-for="(item, index) in priceTabs"
:key="index"
@click="handleTabsClick(item, index)"
:class="priceTabsCurrentIndex === index ? 'active' : ''"
+
>
<span>{{ item }}</span>
</div>
</div>
<div class="tabs_content">
+ <div class="num" v-show="priceTabsCurrentIndex==1">
+ <span>{{ '当价格满足条件时买入' }}</span>
+ </div>
+ <div class="tr_es flexJy" v-show="priceTabsCurrentIndex==1">
+ <div class="top_input">
+ <input type="text" v-model="nums" onkeyup="value=value.replace(/[^\d]/g,'')" >
+ </div>
+ <div class="right_sw flexJy" style="width:auto;">
+ <div class="addorj" @click="gdJian">
+ <img src="@/assets/img/ic_number_jian.png"/>
+ </div>
+ <div class="addorj" ></div>
+ <div class="addorj" @click="typeof nums =='string'?nums = Number((nums.match(/\d+/g))[0])+1:nums++">
+ <img src="@/assets/img/ic_number_add.png"/>
+ </div>
+ </div>
+ </div>
<div class="num">
<span>{{ '交易数量(手)' }}</span>
</div>
- <div class="tr_es">
+ <div class="tr_es flexJy">
<div class="top_input">
- <input type="text" v-model="num">
+ <input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" v-model="num">
+ </div>
+ <div class="right_sw flexJy" style="width:auto;">
+ <div class="addorj" @click="jyslJian">
+ <img src="@/assets/img/ic_number_jian.png"/>
+ </div>
+ <div class="addorj" ></div>
+ <div class="addorj" @click="typeof num =='string'?num = Number((num.match(/\d+/g))[0])+1:num++">
+ <img src="@/assets/img/ic_number_add.png"/>
</div>
</div>
- <div class="tr_rs gg">
+ </div>
+ <div class="tr_rs gg" @click="showGg=true">
<div class="top_bzz">
<span>{{ '杠杆' }}</span>
- <span>{{ '200X' }}</span>
+ <span>{{ selectCycle+'X' }}</span>
</div>
- <div class="bottom_bzz">
+ <!-- <div class="bottom_bzz">
<span>{{ }}</span>
<span>{{ }}</span>
- </div>
+ </div> -->
</div>
<div class="tr_rs">
<div class="top_bzz">
@@ -75,46 +110,153 @@
<span>{{ '可用余额(¥)' }}</span>
</div>
<div class="bottom_bzz">
- <span>{{ '5.00' }}</span>
- <span>{{ '49,698.61' }}</span>
+ <!-- <span>{{ (nowPrice/ selectCycle).toFixed(2) }}</span> -->
+ <span>{{ (nowPrice/ selectCycle).toFixed(2) }}</span>
+ <span v-if="$store.state.userInfo.userAmt==undefined">¥0.00</span>
+ <span
+ v-if="$store.state.userInfo&&type!='0'"
+ style="white-space: nowarp;"
+ >
+ {{ '¥' + $store.state.userInfo.userIndexAmt
+ }}
+ </span>
+ <span
+ v-if="$store.state.userInfo.userAmt!=undefined&&type=='0'"
+ style="white-space: nowarp;"
+ >
+ {{ '¥ ' + $store.state.userInfo.userAmt
+ }}
+ </span>
</div>
</div>
</div>
</div>
<div class="switchs">
- <div class="zy"
- v-for="(item, index) in profitArr"
- :key="index"
- >
+ <div class="zy">
<div class="left_zy">
- <span>{{ item.name }}</span>
+ <span>止盈</span>
</div>
<div class="right_sw">
- <van-switch v-model="item.checked" />
+ <van-switch v-model="checkedZy" />
</div>
</div>
+ <div class="zy" v-show="checkedZy">
+ <div class="left_zy">
+ <input v-model="profitTarget" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" @input="zyInt"/>
+ </div>
+ <div class="right_sw" style="width:auto;">
+ <div class="addorj" @click="zYjian">
+ <img src="@/assets/img/ic_number_jian.png"/>
+ </div>
+ <div class="addorj" ></div>
+ <div class="addorj" @click="profitTarget=(Number(profitTarget)+1).toFixed(2)">
+ <img src="@/assets/img/ic_number_add.png"/>
+ </div>
+ </div>
+ </div>
+ <div class="zy">
+ <div class="left_zy">
+ <span>止损</span>
+ </div>
+ <div class="right_sw">
+ <van-switch v-model="checkedZs" />
+ </div>
+ </div>
+ <div class="zy" v-show="checkedZs">
+ <div class="left_zy">
+ <input v-model="zhisun" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" @input="zsInt"/>
+ </div>
+ <div class="right_sw" style="width:auto;">
+ <div class="addorj" @click="zhisun--">
+ <img src="@/assets/img/ic_number_jian.png"/>
+ </div>
+ <div class="addorj" ></div>
+ <div class="addorj" @click="zSjia">
+ <img src="@/assets/img/ic_number_add.png"/>
+ </div>
+ </div>
+ </div>
+ <!-- <div class="zy">
+ <div class="left_zy">
+ <span>追踪止损</span>
+ </div>
+ <div class="right_sw">
+ <van-switch v-model="profitArr[2].checked" />
+ </div>
+ </div> -->
</div>
- <div class="btn_buy">
- <div>
- <span>{{ '买入' }}</span>
+ <div class="btn_buy" @click="gdOrSetBuy()" >
+ <div :class="tabsCurrentIndex == 0 ? 'maichu':''">
+ <span>{{ tabsCurrentIndex==0?'卖出':'买入' }}</span>
</div>
</div>
- </div>
</div>
+ <van-action-sheet
+ v-model="showGg"
+ :actions="siteLeverList"
+ cancel-text="取消"
+ description="选择杠杆"
+ close-on-click-action
+ @select="onSelect"
+/>
</div>
</template>
<script>
+import * as api from "@/axios/api";
+import {
+ Toast
+} from "mint-ui";
export default {
name: 'trBuy',
+ created() {
+ if(this.$route.query.t){
+ this.tabsCurrentIndex= Number(this.$route.query.t)
+ console.log(this.tabsCurrentIndex)
+ }
+ if(this.$route.query.m){
+ this.nowPrice= Number(this.$route.query.m)
+ this.profitTarget = Number(this.$route.query.m)
+ this.zhisun = Number(this.$route.query.m)
+ this.nums = Number(this.$route.query.m)
+ }
+ if(this.$route.query.code){
+ this.code= this.$route.query.code
+ }
+ if(this.$route.query.name){
+ this.name= this.$route.query.name
+ }
+ if(this.$route.query.type){
+ this.type= this.$route.query.type
+ }
+ },
data() {
return {
tradingArr: ['卖出', '买入'],
tabsCurrentIndex: 0,
priceTabs: ['市单价', '挂单'],
priceTabsCurrentIndex: 0,
- num: 0.01,
+ num: 1,
+ nums: 1,
profit: false,
+ nowPrice: 0,
+ type: 0,
+ code: '',
+ name: '',
+ settingInfo:[],
+ selectCycle: 20,
+ siteLeverList:[],
+ checkedZy:false,
+ checkedZs:false,
+ buying:false,
+ zhisun:0,
+ showGg: false,
+ profitTarget: 0,
+ actions: [
+ { name: '100X', subname: '需付保证金:' },
+ { name: '200X', subname: '需付保证金:'},
+ { name: '300X', subname: '需付保证金:' },
+ ],
profitArr: [
{
name: '止盈',
@@ -131,6 +273,11 @@
]
}
},
+ mounted() {
+ this.getUserInfo();
+ this.getSettingInfo();
+
+ },
methods: {
handleBack() {
this.$router.go(-1);
@@ -140,7 +287,250 @@
},
handleTabsClick(item, index) {
this.priceTabsCurrentIndex = index;
+ },
+ jyslJian(){
+ if(typeof this.num =='string'){
+ this.num = 1
+ }else{
+ if(this.num>1){
+ if(typeof this.num =='string'){
+ this.num = Number((this.num.match(/\d+/g))[0])-1
+ }else{
+ this.num--
+ }
+ }else{
+ this.num=1
+ }
}
+ },
+ gdJian(){
+ if(typeof this.nums =='string'){
+ this.nums = this.nowPrice
+ }else{
+ if(this.nums>1){
+ if(typeof this.nums =='string'){
+ this.nums = Number((this.nums.match(/\d+/g))[0])-1
+ }else{
+ this.nums--
+ }
+ }else{
+ this.nums=1
+ }
+ }
+ },
+ zYjian(){
+ if((Number(this.profitTarget)-1).toFixed(2)<this.nowPrice){
+ this.profitTarget = this.nowPrice
+ }else{
+ this.profitTarget=(Number(this.profitTarget)-1).toFixed(2)
+ }
+
+ },
+ zSjia(){
+ if((Number(this.zhisun)+1).toFixed(2)>this.nowPrice){
+ this.zhisun = this.nowPrice
+ }else{
+ this.zhisun++
+ }
+ },
+ zsInt(e){
+ if(typeof e.target.value =='string'){
+ this.zhisun = this.nowPrice
+ }else{
+ if(Number(e.target.value)>this.nowPrice){
+ this.zhisun = this.nowPrice
+ }
+ }
+
+ },
+ zyInt(e){
+ if(typeof e.target.value =='string'){
+ this.profitTarget = this.nowPrice
+ }else{
+ if(Number(e.target.value)<Number(this.nowPrice)){
+ this.profitTarget = Number(this.nowPrice)
+ }
+ }
+ },
+ onSelect(val){
+ this.selectCycle = val.gg
+
+ },
+ gdOrSetBuy(){
+ if(this.priceTabsCurrentIndex==0){
+ this.setBuy()
+ }else{
+ this.gdBuy()
+ }
+ },
+ //挂单
+ async gdBuy(){
+ if(this.buying){
+ return;
+ }
+ this.buying = true
+ let opts={
+ stockId:this.code,
+ buyNum:this.num * 100,
+ lever: this.selectCycle ? this.selectCycle : 0,
+ targetPrice:this.nums,
+ }
+ if(this.tabsCurrentIndex==0){
+ opts.buyType=1
+ }else{
+ opts.buyType=0
+ }
+ if(this.checkedZy){
+ //opts.profitTarget = this.profitTarget.substring(0,this.profitTarget.indexOf(".")+3)
+ opts.profitTarget = this.profitTarget
+ }
+ if(this.checkedZs){
+ opts.stopTarget = this.zhisun
+ }
+ let data = await api.guadan(opts)
+ this.buying = false
+ if (data.status === 0) {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg,'elAlertType':'success'});
+ this.getUserInfo()
+ this.$router.push('/warehouse?index=1')
+ } else {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg});
+ }
+ },
+ //买卖
+ setBuy(){
+ if (!this.$store.state.userInfo.idCard) {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': '您还未实名认证,请先实名认证了再下单'});
+ this.$router.push('/authentication')
+ return
+ }
+ // if (!this.agree) {
+ // Toast('需同意合作协议才能交易!')
+ // } else if (isNull(this.selectNumber) && isNull(this.autoNumber)) {
+ // Toast('请选择购买手数')
+ // } else if (isNull(this.selectType)) {
+ // Toast('请选择买卖方向')
+ // } else if(isNull(this.subaccountNumber)) {
+ // Toast('请选择子账户')
+ // } else {}
+ if(this.buying){
+ return;
+ }
+ this.buying = true
+ let opts={}
+ opts = {
+ // stockId: this.detail.id,
+ // buyNum: this.selectNumber ? this.selectNumber * 100 : 0, // 单位为手
+ // buyType: this.selectType,
+ // lever: this.selectCycle ? this.selectCycle : 0,
+ // subaccountNumber:this.subaccountNumber
+
+ //买入是买涨buyType:0, 卖出是买跌buyType:1,卖出的状态是0,买入的状态是1
+ buyNum: this.num * 100, // 单位为手
+ //buyNum: (this.num.match(/\d+/g))[0] * 100, // 单位为手
+ lever: this.selectCycle ? this.selectCycle : 0,
+ }
+ if(this.tabsCurrentIndex==0){
+ opts.buyType=1
+ }else{
+ opts.buyType=0
+ }
+ if(this.checkedZy){
+ //opts.profitTarget = this.profitTarget.substring(0,this.profitTarget.indexOf(".")+3)
+ opts.profitTarget = this.profitTarget
+ }
+ if(this.checkedZs){
+ opts.stopLoss = this.zhisun
+ }
+ if(this.type==0){
+ //股票
+ this.gpBuy(opts)
+ // opts.stockId= this.code,
+ // data = await api.buy(opts)
+ }else{
+ //指数
+ this.zsBuy(opts)
+ // opts.indexId= this.code,
+ // data = await api.indexBuy(opts)
+ }
+
+
+ },
+ //股票买入
+ async gpBuy(opts){
+ opts.stockId= this.code
+ let data = await api.buy(opts)
+ this.buying = false
+ if (data.status === 0) {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg,'elAlertType':'success'});
+ this.getUserInfo()
+ this.$router.push('/orderlist?index=2')
+ } else {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg});
+ }
+ },
+ //指数买入
+ async zsBuy(opts){
+ opts.indexId= this.type
+ let data = await api.indexBuy(opts)
+ this.buying = false
+ if (data.status === 0) {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg,'elAlertType':'success'});
+ this.getUserInfo()
+ this.$router.push('/orderlist?index=2')
+ } else {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg});
+ }
+ },
+ async getUserInfo() {
+ // 获取用户信息
+ // let showcookie = this.getCookie('USER_TOKEN');
+ let data = await api.getUserInfo();
+ if (data.status === 0) {
+ // this.getProductSetting()
+ this.$store.state.userInfo = data.data;
+ } else {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg});
+ }
+ this.$store.state.user = this.user;
+ },
+ async getSettingInfo () {
+ // 网站设置信息
+ let data = await api.getSetting()
+ if (data.status === 0) {
+ // 成功
+ this.settingInfo = data.data
+ // 杠杆倍数
+ //data.data.siteLever根据/分割成数组
+ //this.siteLeverList = data.data.siteLever.split('/')
+
+
+ this.selectCycle = data.data.siteLever
+ if(this.$store.state.userInfo !== undefined && this.$store.state.userInfo !== null && this.$store.state.userInfo.phone !== '' && this.$store.state.userInfo.siteLever != null){
+ this.selectCycle = this.$store.state.userInfo.siteLever.split('/')[0]
+ this.siteLeverList = []
+ for (let i = 0; i < this.$store.state.userInfo.siteLever.split('/').length; i++) {
+ let val = this.$store.state.userInfo.siteLever.split('/')[i]
+ let item = { label: val + '倍', value: val }
+ this.siteLeverList.push(item)
+ }
+ } else {
+ this.selectCycle = data.data.siteLever.split('/')[0]
+ this.siteLeverList = []
+ for (let i = 0; i < data.data.siteLever.split('/').length; i++) {
+
+ let val = data.data.siteLever.split('/')[i]
+ var ccet = (Number(this.nowPrice)/ Number(val)).toFixed(2)
+ //let item = { label: val + '倍', value: val ,bzj:ccet}
+ let item = { name: val + 'X', subname: '需付保证金:' + ccet,gg:val,bzj:ccet}
+ this.siteLeverList.push(item)
+ }
+ }
+
+ } else {
+ this.$store.commit('elAlertShow',{'elAlertShow':true,'elAlertText': data.msg});
+ }
+ },
}
};
</script>
@@ -148,11 +538,13 @@
<style scoped lang="less">
.buy_page {
width: 100%;
- height: calc(100% - 1.7rem);
+ min-height: 100vh;
+ background-color: #fff;
> .content {
width: 100%;
- height: 100%;
+ height: calc(100% - 1.6rem);
position: relative;
+ background-color: rgb(241,242,246);
}
}
.top_cny {
@@ -237,7 +629,7 @@
width: 65%;
height: 80%;
display: flex;
- justify-content: space-between;
+ justify-content: center;
> div {
width: 45%;
height: 70%;
@@ -255,6 +647,13 @@
font-weight: 600;
}
}
+ .actives{
+ background: #fff;
+ color: rgb(212,71,78);
+ span {
+ font-weight: 600;
+ }
+ }
}
}
}
@@ -262,10 +661,11 @@
}
.price_tabs {
width: 100%;
- height: 7rem;
+ height: auto;
padding: .2rem .8rem;
background: #fff;
margin-top: .1rem;
+ border-radius: 0.3rem;
.tabs {
width: 100%;
height: .8205rem;
@@ -295,14 +695,17 @@
.num {
width: 100%;
height: .5rem;
+ line-height: 0.5rem;
+ position: relative;
+ top: 0.2rem;
}
.tr_es {
width: 100%;
height: 1.3rem;
- margin-top: .3rem;
+ margin-top: .15rem;
border-bottom: 0.05rem solid rgb(236, 236, 236);
.top_input {
- width: 100%;
+ width: 70%;
height: 70%;
font-size: .6615rem;
input {
@@ -336,6 +739,10 @@
}
}
.gg {
+ margin-top: 0!important;
+ height: 1.8rem;
+ display: flex;
+ align-items: center;
font-size: .3803rem;
border-bottom: 0.05rem solid rgb(236, 236, 236);
> div {
@@ -346,11 +753,14 @@
}
.switchs{
width: 100%;
- height: 6rem;
+ height: auto;
padding: 0 .8rem;
background: #fff;
margin-top: .3rem;
+ border-radius: 0.3rem 0.3rem 0 0;
+ transition: all 0.5s;
.zy {
+ transition: all 0.5s;
width: 100%;
height: 1.8rem;
display: flex;
@@ -371,11 +781,12 @@
}
.btn_buy{
width: 100%;
- height: 4.8rem;
+ height: auto;
background: #fff;
padding: .2rem .8rem;
display: flex;
align-items: flex-end;
+ padding-top: 0.8rem;
> div {
width: 100%;
height: 1.2821rem;
@@ -388,4 +799,85 @@
border-radius: .15rem;
}
}
+/deep/.van-action-sheet__name{
+ font-size: .3846rem;
+ color: #000;
+}
+/deep/.van-action-sheet__gap{
+ height: 0.25rem;
+
+}
+/deep/.van-action-sheet__cancel{
+ font-size: .4246rem;
+ height: 1.3rem;
+ color: #000;
+}
+/deep/.van-action-sheet__description{
+ font-size: 0.3846rem;
+ height: 1.45rem;
+ line-height: 0.7rem;
+}
+.left_zy input{
+ font-size: 0.48rem;
+ font-weight: 500;
+}
+.addorj{
+ width:0.7rem;
+ height: 0.7rem;
+ color: #000;
+ font-weight: 500;
+}
+.addorj img{
+ width: 100%;
+ height: 100%;
+}
+.flexJy{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+.top_input input{
+ width: 100%;
+}
+.maichu{
+ background-color: rgb(225,59,69)!important;
+}
+.mr{
+ position: relative;
+ &::after {
+ content: " ";
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: -.1rem;
+ z-index: 10000;
+ background: rgba(255,255,255,0);
+ border-left: 0.12rem solid rgb(241,242,246);
+ transform-origin: bottom right;
+ -ms-transform: skew(-10deg, 0deg);
+ -webkit-transform: skew(-10deg, 0deg);
+ transform: skew(-10deg, 0deg);
+}
+}
+.mc{
+ position: relative;
+ &::after {
+ content: " ";
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ z-index: 10000;
+ background: rgba(255,255,255,0);
+ border-right: 0.1rem solid rgb(241,242,246);
+ transform-origin: bottom left;
+ -ms-transform: skew(-10deg, 0deg);
+ -webkit-transform: skew(-10deg, 0deg);
+ transform: skew(-10deg, 0deg);
+}
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.3