Browse Source

修改

master
liaoxinyu 2 years ago
parent
commit
a12298f0cd
  1. 1
      src/assets/img/home/arrow_down.svg
  2. 542
      src/views/contract/exchange-store.vue
  3. 195
      src/views/contract/handicap.vue
  4. 892
      src/views/contract/index.vue

1
src/assets/img/home/arrow_down.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1716533016195" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12819" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M904.32 453.952c-12.736-12.736-33.408-12.736-46.144 0L512 800.128 165.824 453.952c-12.736-12.736-33.408-12.736-46.144 0l-46.144 46.144c-12.736 12.736-12.736 33.408 0 46.144l415.36 415.36c12.736 12.736 33.408 12.736 46.144 0L950.4 546.24c12.736-12.736 12.736-33.408 0-46.144l-46.08-46.144zM488.896 570.048c12.736 12.736 33.408 12.736 46.144 0l415.36-415.36c12.736-12.736 12.736-33.408 0-46.144l-46.08-46.208c-12.736-12.736-33.408-12.736-46.144 0L512 408.512 165.824 62.336c-12.736-12.736-33.408-12.736-46.144 0L73.536 108.48c-12.736 12.736-12.736 33.408 0 46.144l415.36 415.424z" p-id="12820"></path></svg>

After

Width:  |  Height:  |  Size: 939 B

542
src/views/contract/exchange-store.vue

@ -1,291 +1,177 @@
<template>
<div class="markets-pair-list exchange-store bg-plain" style="margin-top: 8px;">
<div class="px-3 pri">
<div class="nav nav-pills" style="border-bottom: 1px solid #e0e3eb;">
<div class="nav-item">
<a class="nav-link" :class="{ active: form.type == 2 }" @click="form.type = 2">{{ $t("contract.d9") }}</a>
</div>
<div class="nav-item">
<a class="nav-link" :class="{ active: form.type == 1 }" @click="form.type = 1">{{ $t("contract.e0") }}</a>
</div>
<div class="markets-pair-list exchange-store bg-plain">
<div class="nav nav-pills">
<div class="nav-item">
<a class="nav-link" :class="{ active: tab == 1 }" @click="tab = 1">{{
$t("contract.d5")
}}</a>
</div>
</div>
<div class="nav nav-pills px-3 py-3">
<div class="nav-item" style="background-color: #F2F2F2;width:50%;text-align: center;">
<a class="nav-link" @click="tab = 1" style="color: #999999;">{{ $t("contract.d5") }}</a>
</div>
<div class="flex-fill px-3 justify-content-end d-flex align-items-center" style="background-color: #F2F2F2;width:50%;text-align: center;">
<el-popover style="display: block;width: 100%;" placement="bottom" width="100" v-model="visible" trigger="manual">
<div class="rounded p-1 bg-black pointer" slot="reference" @click="visible = !visible">
<!-- {{ $t("contract.b0") }} -->
<span class="fn-16" style="color: #999999;"> {{ form.lever_rate }}X </span>
<!-- <div class="nav-item">
<a class="nav-link" :class="{ active: tab == 2 }" @click="tab = 2">{{
$t("contract.d6")
}}</a>
</div> -->
<div class="flex-fill px-3 justify-content-end d-flex align-items-center">
<el-popover
placement="bottom"
width="100"
v-model="visible"
trigger="manual"
>
<div
class="rounded border p-1 bg-white pointer"
slot="reference"
@click="visible = !visible"
>
{{ $t("contract.b0") }}
<span class="fn-16"> {{ form.lever_rate }}X </span>
<i class="el-icon-edit text-primary"></i>
</div>
<div class="list">
<div class="el-select-dropdown__item" @click=" selectLever(item); visible = false;" v-for="item in lever_rage" :key="item">
<div
class="el-select-dropdown__item"
@click="
selectLever(item);
visible = false;
"
v-for="item in lever_rage"
:key="item"
>
{{ item }}X
</div>
</div>
</el-popover>
</div>
</div>
<div class="content-box d-flex" style="flex-wrap: wrap;justify-content: space-between;">
<!-- 买入表单 -->
<div style="width: 50%;" class="px-3">
<div class="d-flex my-4 align-items-center">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.d8") }}</span>
</div>
<template v-if="form.type == 1">
<input type="number" v-model="buyform.entrust_price" class="form-control" placeholder=""/>
<div class="input-group-append">
<span class="input-group-text">USDT</span>
</div>
</template>
<template v-if="form.type == 2">
<input type="text" disabled:value="$t('contract.d9')" class="form-control" :placeholder="$t('contract.d9')"/>
</template>
</div>
<div class="content-box px-3 ">
<div v-if="type == 2" class="input-group my-4 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.d7") }}</span>
</div>
<input type="number" class="form-control" placeholder="" />
<div class="input-group-append">
<span class="input-group-text">USDT</span>
</div>
<div class="input-group mb-4 input-group-sm">
</div>
<div class="d-flex my-4 align-items-center">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<!-- <span class="input-group-text">{{ $t("contract.e1") }}</span> -->
<span class="input-group-text">{{ $t("contract.l2") }}</span>
<span class="input-group-text">{{ $t("contract.d8") }}</span>
</div>
<input
<template v-if="form.type == 1">
<input
type="number"
v-model="form.entrust_price"
class="form-control"
v-model="marginBuy"
:placeholder="tips"
/>
<!-- <div class="input-group-append">
<span class="input-group-text">{{ $t("contract.e2") }}</span>
</div> -->
</div>
<div class="px-2" v-if="this.tab == 1">
<!-- :value="activeStepBuy"
@input="sliderChangeBuy" -->
<el-slider
:value="activeStepBuy"
@input="sliderChangeBuy"
:format-tooltip="tooltip"
:marks="marks"
></el-slider>
</div>
<div class="d-flex justify-content-between mb-3 color_7c fn-10">
<div>0</div>
<div style="margin-left: 35px;">25%</div>
<div style="margin-left: 15px;">50%</div>
<div style="margin-left: 20px;">75%</div>
<div>100%</div>
</div>
<!-- 开仓 -->
<div v-if="tab == 1" class="kaicang">
<div class="d-flex justify-content-between mb-3">
<div class="color_7c">{{ $t("contract.e7") }} </div>
<div>{{ maxNum }}</div>
</div>
<div class="d-flex justify-content-between mb-3">
<div class="color_7c">{{ $t("contract.e1") }}</div>
<div>{{ amountBuy }} </div>
</div>
<div class="d-flex justify-content-between mb-4">
<div class="color_7c">{{ $t("contract.a3") }}</div>
<div>
{{ accountInfo.usable_balance }} USDT
<i
class="el-icon-sort"
@click="$router.push('/wallet/assets/exchange')"
></i>
</div>
</div>
</div>
<!-- 平仓 -->
<div v-if="tab == 2">
<div class="d-flex justify-content-between">
<div>{{ $t("contract.e4") }}</div>
<div>{{ multiplePositions }} {{ $t("contract.e2") }}</div>
</div>
<div class="d-flex justify-content-between mb-4">
<div>{{ $t("contract.e5") }}:</div>
<div>{{ shortPosition }} {{ $t("contract.e2") }}</div>
</div>
</div>
<!-- 止盈止损 -->
<div class="d-flex mb-4 border-top py-2" v-if="0">
<input type="checkbox" name="" id="" v-model="checkboxBuy">
<div>{{ $t("contact.Profit&Loss") }}</div>
</div>
<template v-if="checkboxBuy">
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.j3") }}</span>
</div>
<input
type="number"
class="form-control"
v-model="buyform.pri1"
:placeholder="tips"
placeholder=""
/>
</div>
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.j4") }}</span>
<div class="input-group-append">
<span class="input-group-text">USDT</span>
</div>
</template>
<template v-if="form.type == 2">
<input
type="number"
class="form-control"
v-model="buyform.pri2"
:placeholder="tips"
/>
</div>
</template>
</div>
<!-- 卖出表单 -->
<div style="width: 50%;" class="px-3">
<div class="d-flex my-4 align-items-center">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.d8") }}</span>
</div>
<template v-if="form.type == 1">
<input
type="number"
v-model="sellform.entrust_price"
class="form-control"
placeholder=""
/>
<div class="input-group-append">
<span class="input-group-text">USDT</span>
</div>
</template>
<template v-if="form.type == 2">
<input
type="text"
disabled
:value="$t('contract.d9')"
class="form-control"
:placeholder="$t('contract.d9')"
/>
</template>
</div>
</div>
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<!-- <span class="input-group-text">{{ $t("contract.e1") }}</span> -->
<span class="input-group-text">{{ $t("contract.l2") }}</span>
</div>
<input
type="number"
type="text"
disabled
:value="$t('contract.d9')"
class="form-control"
v-model="marginSell"
:placeholder="tips"
/>
<!-- <div class="input-group-append">
<span class="input-group-text">{{ $t("contract.e2") }}</span>
</div> -->
:placeholder="$t('contract.d9')"
/>
</template>
</div>
<div class="px-2" v-if="this.tab == 1">
<!-- :value="activeStepSell"
@input="sliderChangeSell" -->
<el-slider
:value="activeStepSell"
@input="sliderChangeSell"
:format-tooltip="tooltip"
:marks="marks"
></el-slider>
<button
@click="form.type == 1 ? (form.type = 2) : (form.type = 1)"
class="btn btn-sm btn-outline-primary ml-2 text-nowrap"
>
{{ form.type == 1 ? $t("common.limit") : $t("common.market") }}
</button>
</div>
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<!-- <span class="input-group-text">{{ $t("contract.e1") }}</span> -->
<span class="input-group-text">{{ $t("contract.l2") }}</span>
</div>
<div class="d-flex justify-content-between mb-3 color_7c fn-10">
<div>0</div>
<div style="margin-left: 35px;">25%</div>
<div style="margin-left: 15px;">50%</div>
<div style="margin-left: 20px;">75%</div>
<div>100%</div>
<input
type="number"
class="form-control"
v-model="margin"
:placeholder="tips"
/>
<!-- <div class="input-group-append">
<span class="input-group-text">{{ $t("contract.e2") }}</span>
</div> -->
</div>
<div class="px-2 mb-4" v-if="this.tab == 1">
<el-slider
:value="activeStep"
@input="sliderChange"
:format-tooltip="tooltip"
:marks="marks"
></el-slider>
<!-- :step="25" -->
</div>
<!-- 开仓 -->
<div v-if="tab == 1" class="kaicang">
<div class="d-flex justify-content-between mb-3">
<div>{{ $t("contract.e1") }}</div>
<!-- {{$t("contract.e2")}} -->
<div>{{ amount }} </div>
</div>
<!-- 开仓 -->
<div v-if="tab == 1" class="kaicang">
<div class="d-flex justify-content-between mb-3">
<div class="color_7c">{{ $t("contract.e7") }} </div>
<div>{{ accountInfo.account_equity }}</div>
</div>
<div class="d-flex justify-content-between mb-3">
<div class="color_7c">{{ $t("contract.e1") }}</div>
<div>{{ amountSell }} </div>
</div>
<div class="d-flex justify-content-between mb-4">
<div class="color_7c">{{ $t("contract.a3") }}</div>
<div>
{{ accountInfo.usable_balance }} USDT
<i
class="el-icon-sort"
@click="$router.push('/wallet/assets/exchange')"
></i>
</div>
<div class="d-flex justify-content-between mb-4">
<div>{{ $t("contract.a3") }}:</div>
<div>
{{ accountInfo.usable_balance }} USDT
<i
class="el-icon-sort"
@click="$router.push('/wallet/assets/exchange')"
></i>
</div>
</div>
<!-- 止盈止损 -->
<div class="d-flex mb-4 border-top py-2" v-if="0">
<input type="checkbox" name="" id="" v-model="checkboxSell">
<div>{{ $t("contact.Profit&Loss") }}</div>
</div>
<!-- 平仓 -->
<div v-if="tab == 2">
<div class="d-flex justify-content-between">
<div>{{ $t("contract.e4") }}</div>
<div>{{ multiplePositions }} {{ $t("contract.e2") }}</div>
</div>
<div class="d-flex justify-content-between mb-4">
<div>{{ $t("contract.e5") }}:</div>
<div>{{ shortPosition }} {{ $t("contract.e2") }}</div>
</div>
<template v-if="checkboxSell">
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.j3") }}</span>
</div>
<input
type="number"
class="form-control"
v-model="sellform.pri1"
:placeholder="tips"
/>
</div>
<div class="input-group mb-4 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">{{ $t("contract.j4") }}</span>
</div>
<input
type="number"
class="form-control"
v-model="sellform.pri2"
:placeholder="tips"
/>
</div>
</template>
</div>
<div class="exchange_button" v-if="tab == 1" style="width: 100%;">
<div class="px-3 flex-fill mb-4">
<div class="exchange_button" v-if="tab == 1">
<div class="px-1 flex-fill mb-4">
<button
@click="ifOpenPosition(1)"
type="button"
class="sub w-24/24 btn-success btn btn-sm mb-3"
>
{{ $t("contract.d0") }}
<!-- {{ $t("contract.d0") }}{{ symbol }} -->
<!-- {{ $t("contract.d0") }} -->
<!-- <span class="fn-12"> {{ $t("contract.e6") }} </span> -->
</button>
<div class="text-left">
{{ $t("contract.e7") }} {{ maxNum }}
<!-- {{ $t("contract.e2") }} -->
</div>
</div>
<div class="px-3 flex-fill">
<div class="px-1 flex-fill">
<button
@click="ifOpenPosition(2)"
type="button"
class="sub w-24/24 btn-danger btn btn-sm mb-3"
>
{{ $t("contract.d2") }}
<!-- {{ $t("contract.d2") }}{{ symbol }} -->
<!-- {{ $t("contract.d2") }} -->
<!-- <span class="fn-12"> {{ $t("contract.e8") }} </span> -->
</button>
<!-- <div class="text-center"> -->
<div class="text-right">
{{ $t("contract.e7") }} {{ maxNum }}
<!-- {{ $t("contract.e2") }} -->
</div>
</div>
</div>
<div class="" v-if="tab == 2" style="width: 100%;">
<div class="" v-if="tab == 2">
<div class="px-2 flex-fill mb-4">
<button
@click="ifOpenPosition(1)"
@ -322,23 +208,14 @@ export default {
data() {
return {
tab: 1,
type: 1,
visible: false,
form: {
type: 2,//21
lever_rate: ""
},
buyform: {
entrust_price: undefined,
amount:"",
pri1: "",//
pri2: ""//
},
sellform: {
// 1: 2:
type: 2,
entrust_price: undefined,
amount:"",
pri1: "",//
pri2: ""//
lever_rate: ""
},
//
maxNum: 0,
@ -351,12 +228,7 @@ export default {
50:'',
75:''
},
marginBuy:0,
marginSell:0,
checkboxBuy: false,
checkboxSell: false,
// activeStepBuy:0,
// activeStepSell:0
margin:0,
};
},
props: {
@ -384,21 +256,16 @@ export default {
},
watch: {
symbol() {
this.buyform.entrust_price = undefined;
this.sellform.entrust_price = undefined;
this.form.entrust_price = undefined;
this.contractAccount();
this.getSymbolDetail();
},
defaultPrice(n) {
this.buyform.entrust_price = n;
this.sellform.entrust_price = n;
this.form.entrust_price = n;
},
newPriceObj(n) {
if (n && this.buyform.entrust_price === undefined) {
this.buyform.entrust_price = n.price;
}
if (n && this.sellform.entrust_price === undefined) {
this.sellform.entrust_price = n.price;
if (n && this.form.entrust_price === undefined) {
this.form.entrust_price = n.price;
}
},
contractOpen(n, o) {
@ -413,7 +280,6 @@ export default {
mounted() {
if (this.symbol) {
this.contractAccount();
this.getSymbolDetail();
}
this._time = setInterval(() => {
@ -456,45 +322,23 @@ export default {
if (!item) return 0;
return item.avail_position;
},
activeStepBuy() {
let num = 0
if (!this.buyform.amount || !this.maxNum){
num = (this.buyform.amount / this.maxNum) * 100;
}else{
num = (this.buyform.amount / this.maxNum) * 100;
}
return num;
},
activeStepSell() {
let num = 0
if (!this.sellform.amount || !this.maxNum){
num = (this.sellform.amount / this.maxNum) * 100;
}else{
num = (this.sellform.amount / this.maxNum) * 100;
}
return num;
activeStep() {
// if (!this.form.amount || !this.maxNum) return 0;
let num = (this.form.amount / this.maxNum) * 100;
return num;
},
//
// margin() {
// if (!this.form.lever_rate) return '';
// return math.omitTo(this.form.amount*this.unit_amount / this.form.lever_rate, 4);
// },
amountBuy(){
// console.info(this.form.lever_rate)
// console.info(this.margin)
if (!this.form.lever_rate || !this.marginBuy) return 0;
let p=this.marginBuy*this.form.lever_rate;
this.buyform.amount=p;
return p
},
amountSell(){
amount(){
// console.info(this.form.lever_rate)
// console.info(this.margin)
if (!this.form.lever_rate || !this.marginSell) return 0;
let p=this.marginSell*this.form.lever_rate;
this.sellform.amount=p;
if (!this.form.lever_rate || !this.margin) return 0;
let p=this.margin*this.form.lever_rate;
this.form.amount=p;
return p
}
},
@ -537,21 +381,16 @@ export default {
this.lever_rage = res.lever_rage;
this.unit_amount = res.unit_amount
this.$emit('getSymbolDetail',res)
if (!this.form.lever_rate) {
// if (!this.form.lever_rate) {
this.form.lever_rate = res.default_lever;
}
// }
});
},
//
sliderChangeBuy($ev) {
this.buyform.amount = Math.round((this.maxNum * $ev) / 100)||'';
// console.info(this.buyform)
this.marginBuy=this.buyform.amount/this.form.lever_rate || 0
},
sliderChangeSell($ev) {
this.sellform.amount = Math.round((this.maxNum * $ev) / 100)||'';
// console.info(this.sellform)
this.marginSell=this.sellform.amount/this.form.lever_rate || 0
sliderChange($ev) {
this.form.amount = Math.round((this.maxNum * $ev) / 100)||'';
// console.info(this.form)
this.margin=this.form.amount/this.form.lever_rate || 0
},
//
selectLever(idx) {
@ -568,7 +407,7 @@ export default {
} else {
this.closePosition(side);
}
// let typeStr =
// this.form.type == 1
// ? `${this.form.entrust_price}${this.$t("contract.f0")}`
@ -581,8 +420,7 @@ export default {
// : `${this.$t("contract.d6")}${this.form.amount}${this.$t(
// "contract.e2"
// )}`;
// `${this.$t("contract.f3")}${typeStr}${this.form.lever_rate}${this.$t(
// "contract.f4"
// )}${decStr}?`
@ -606,24 +444,14 @@ export default {
symbol: this.symbol,
...this.form
};
if(side==1){
data.entrust_price = this.buyform.entrust_price;
data.amount = this.buyform.amount;
data.checkbox = this.checkboxBuy;
}else{
data.entrust_price = this.sellform.entrust_price;
data.amount = this.sellform.amount;
data.checkbox = this.checkboxSell;
}
Contract.openPosition(data).then(() => {
this.contractAccount();
this.buyform.amount = 0;
this.sellform.amount = 0;
this.form.amount = 0;
this.$message.success(this.$t("contract.f5"));
this.$emit("position");
});
},
// -
//
closePosition(side) {
let data = {
side: side == 1 ? 2 : 1,
@ -642,7 +470,7 @@ export default {
}
};
</script>
<style scoped="scoped">
<style scoped="scoped" lang="scss">
.exchange_button{
display: flex;
font-size: 16px !important;
@ -650,58 +478,8 @@ export default {
.btn,.kaicang{
font-size: 0.9rem;
}
/* ::v-deep .el-slider__stop{
background-color: ;
} */
.exchange-store.markets-pair-list .pri .nav-link.active::after{
content: "";
display: block;
position: absolute;
bottom: 0px;
left: 50%;
width: 52px;
height: 4px;
background-color: #fff;
border-radius: 0px;
transform: translateX(-50%);
margin-left: 0px;
}
.exchange-store.markets-pair-list .nav{
padding: 7px 0px 0px;
font-size: 14px;
}
.exchange-store .btn-success,
.exchange-store .btn-success:hover{
background-color: #52A45A;
border-color: #52A45A;
border-radius: 100px;
color: #fff;
background-image: none;
height: 44px;
}
.exchange-store .btn-danger,
.exchange-store .btn-danger:hover{
background-color: #BB4965;
border-color: #BB4965;
border-radius: 100px;
color: #fff;
background-image: none;
height: 44px;
}
.color_7c{
color: #7c7c7c !important;
}
.exchange-store .input-group-text{
background-color: #F2F2F2;
color: #999999;
border-color: #D3D3D3 !important;
}
.exchange-store .form-control{
height: 44px !important;
border-color: #D3D3D3 !important;
}
.el-icon-sort:before{
color: #2C60DC;
::v-deep .el-slider__button-wrapper{
// background-color: ;
z-index: 999;
}
</style>
</style>

195
src/views/contract/handicap.vue

@ -1,17 +1,21 @@
<template>
<div class="markets-pair-list handicap bg-plain" style="width: 100%;">
<div class="nav nav-pills" style="border-bottom: 1px solid #e0e3eb;">
<div class="markets-pair-list handicap bg-plain">
<!-- <div class="nav nav-pills">
<div class="nav-item">
<a class="nav-link" :class="{ active: tab == 1 }" @click="tab = 1">{{ $t("contract.f7") }}</a>
<a class="nav-link" :class="{ active: tab == 1 }" @click="tab = 1">{{
$t("contract.f7")
}}</a>
</div>
<div class="nav-item">
<a class="nav-link" :class="{ active: tab == 2 }" @click="tab = 2">{{ $t("contract.f8") }}</a>
<a class="nav-link" :class="{ active: tab == 2 }" @click="tab = 2">{{
$t("contract.f8")
}}</a>
</div>
</div>
</div> -->
<div>
<!-- 盘口 -->
<div class="handicap-body" v-if="tab == 1">
<div class="d-flex justify-content-between py-2 px-3" v-if="false">
<div class="handicap-body px-3" v-if="tab == 1">
<div class="d-flex justify-content-between py-2" v-if="false">
<div class="d-flex">
<div class="border border-primary rounded px-1 mr-2">
{{ $t("contract.f9") }}
@ -28,33 +32,42 @@
<i class="el-icon-arrow-down"></i>
</div>
</div>
<div class="label-group d-flex text-secondary fn-14 py-2 px-3">
<div class="w-8/24">
<div class="label-group d-flex text-secondary fn-12 py-2">
<div class="w-7/24">
{{ $t("contract.d8") }}
</div>
<div class="w-5/24 text-right">
<div class="w-8/24">
{{ $t("contract.e1") }}
</div>
<div class="w-9/24 text-right">
<div class="w-7/24 text-right">
{{ $t("contract.g2") }}
<!-- ({{ $t("contract.e2") }}) -->
</div>
</div>
<div class="sell px-3">
<div class="sell fn-12">
<template v-for="(item, idx) in sellListShow">
<div class="item pointer" :key="idx" @click="$emit('selectprice', item.price)">
<div class="d-flex fn-14">
<div class="w-8/24 decreace">{{ item.price}}</div>
<div class="w-5/24 text-right">{{ omitTo(item.amount, 2) }}</div>
<div class="w-9/24 text-right">{{ item.total }}</div>
<div
class="item pointer"
:key="idx"
@click="$emit('selectprice', item.price)"
>
<div class="d-flex">
<div class="w-7/24 decreace">{{ item.price}}</div>
<div class="w-8/24">{{ omitTo(item.amount, 2) }}</div>
<div class="w-8/24 text-right">{{ item.total }}</div>
</div>
<div class="pgs" :style="{ width: getValue(item.amount) + '%' }"></div>
<div
class="pgs"
:style="{ width: getValue(item.amount) + '%' }"
></div>
</div>
</template>
</div>
<div class="current-nav d-flex align-items-center my-2 py-2" style="background-color: #fff;">
<div class="w-10/24 d-flex align-items-center">
<div class="name fn-12 px-3">{{ $t("contract.g3") }}</div>
<div
class="current-nav d-flex border-top border-bottom align-items-center"
>
<div class="w-10/24">
<div class="name text-secondary fn-12">{{ $t("contract.g3") }}</div>
<div class="num fn-20 increace">
{{ newPriceObj.price }}
</div>
@ -63,13 +76,17 @@
<!-- <button class="btn btn-sm btn-outline-primary fn-12">更多</button> -->
</div>
</div>
<div class="buy px-3">
<div class="buy fn-12">
<template v-for="(item, idx) in buyListShow">
<div class="item pointer" :key="idx" @click="$emit('selectprice', item.price)">
<div class="d-flex fn-14">
<div class="w-8/24 increace">{{ item.price }}</div>
<div class="w-5/24 text-right">{{ omitTo(item.amount, 2) }}</div>
<div class="w-9/24 text-right">{{ item.total }}</div>
<div
class="item pointer"
:key="idx"
@click="$emit('selectprice', item.price)"
>
<div class="d-flex">
<div class="w-7/24 increace">{{ item.price }}</div>
<div class="w-8/24">{{ omitTo(item.amount, 2) }}</div>
<div class="w-8/24 text-right">{{ item.total }}</div>
</div>
<div
class="pgs"
@ -78,30 +95,34 @@
</div>
</template>
</div>
</div>
<!-- 实时成交 -->
<div class="real-time p-3" v-if="tab == 2">
<div class="d-flex text-secondary fn-14">
<div class="w-10/24">
<!-- 实时成交 -->
<div class="d-flex text-secondary fn-12">
<div class="w-7/24">
{{ $t("contract.b1") }}
</div>
<div class="w-7/24">{{ $t("contract.d8") }}(USDT)</div>
<div class="w-7/24 text-right">
<div class="w-8/24">{{ $t("contract.d8") }}(USDT)</div>
<div class="w-8/24 text-right">
{{ $t("contract.e1") }}({{ $t("contract.e2") }})
</div>
</div>
<div class="d-flex fn-14" v-for="(item, idx) in tradeList" :key="idx">
<div class="w-10/24">
{{ parseTime(item.ts, false, "{h}:{i}:{s}") }}
</div>
<div class="w-7/24 increace">
{{ item.price }}
</div>
<div class="w-7/24 text-right">
{{ omitTo(item.amount, 2) }}
<div class="deal">
<div class="d-flex fn-12" v-for="(item, idx) in tradeList" :key="idx">
<div class="w-7/24">
{{ parseTime(item.ts, false, "{h}:{i}:{s}") }}
</div>
<div class="w-8/24 increace">
{{ item.price }}
</div>
<div class="w-8/24 text-right">
{{ omitTo(item.amount, 2) }}
</div>
</div>
</div>
</div>
<!-- -->
<div class="real-time p-3" v-if="tab == 2">
</div>
</div>
</div>
</template>
@ -152,21 +173,20 @@ export default {
};
},
sellListShow() {
let list = this.sellList.splice(0, 12);
let total = 0;
list.forEach(item => {
// total = total -0;
// console.log(Number(total));
item.total = total += Number(item.amount);
item.total = item.total.toFixed(3);
// item.total =item.total-0;
});
return list.reverse();
let list = this.sellList.splice(0, 12);
let total = 0;
list.forEach(item => {
// item.total = total += item.amount;
item.total = total += Number(item.amount);
item.total = item.total.toFixed(3)
});
return list.reverse();
},
buyListShow() {
let list = this.buyList.splice(0, 12);
let total = 0;
list.forEach(item => {
// item.total = total += item.amount;
item.total = total += Number(item.amount);
item.total = item.total.toFixed(3);
});
@ -180,7 +200,16 @@ export default {
}
bus.$on('collapse', msg => {
this.newPriceObj.price =this.symbol=='BTC'? (msg.close).toFixed(1):(msg.close).toFixed(3);
// if (msg.close.endsWith('.')) {
// // '0'
// msg.close += '0';
// }
this.newPriceObj.price = msg.close;
this.$emit("input", this.newPriceObj);
// console.log(this.newPriceObj.price, 'this.newPriceObj.price-----')
// const closeStr = msg.close.toString();
// this.newPriceObj.price = this.symbol === 'BTC' ? closeStr.slice(0, closeStr.indexOf('.') + 2) : closeStr.slice(0, closeStr.indexOf('.') + 4);
// this.$emit("input", this.newPriceObj);
});
},
//
@ -195,7 +224,9 @@ export default {
this.sellList = res.swapSellList;
this.buyList = res.swapBuyList;
this.tradeList = res.swapTradeList;
this.newPriceObj = this.tradeList[0];
// if(this.tradeList.length>0){
this.newPriceObj = this.tradeList[0];
// }
this.$emit("input", this.newPriceObj);
});
},
@ -241,18 +272,19 @@ export default {
this.ws.on("message", res => {
let { data, msg, code, sub, type, status, cmd } = res;
if (sub == this.msg.buy) {
this.buyList = data;
this.buyList = data;
} else if (sub == this.msg.sell) {
this.sellList = data;
this.sellList = data;
} else if (sub == this.msg.trade) {
this.tradeList.unshift(data);
this.tradeList.pop();
// this.newPriceObj = data;
// this.$emit("input", this.newPriceObj);
// console.log('if (sub == this.msg.trade)', this.msg.trade)
this.tradeList.unshift(data);
this.tradeList.pop();
// this.newPriceObj = data;
// this.$emit("input", this.newPriceObj);
} else if (type == "ping" ||cmd == "ping") {
this.ws.send({
cmd: "pong"
});
this.ws.send({
cmd: "pong"
});
}
});
@ -277,39 +309,4 @@ export default {
}
}
};
</script>
<style scoped>
.handicap .nav-link{
padding: 0.5rem 1.35rem !important;
color: #828282;
}
.handicap.markets-pair-list .nav{
padding: 7px 0px 0px;
font-size: 16px;
}
.handicap.markets-pair-list .nav-link.active{
color: #147797;
}
.handicap.markets-pair-list .nav-link.active::after{
content: "";
display: block;
position: absolute;
bottom: 0px;
left: 50%;
width: 52px;
height: 4px;
background-color: #fff;
border-radius: 0px;
transform: translateX(-50%);
margin-left: 0px;
}
.contract-page .page-top .handicap .handicap-body .sell,
.contract-page .page-top .handicap .handicap-body .buy{
height: 430px;
overflow: auto;
}
.contract-page .page-top .handicap .handicap-body .sell .item,
.contract-page .page-top .handicap .handicap-body .buy .item{
line-height: 40px;
}
</style>
</script>

892
src/views/contract/index.vue

@ -1,516 +1,396 @@
<template>
<div class="contract-page" style="background-color: #F8F8F8;">
<!-- <div class="banner-block col-xs-8">-->
<!-- <el-carousel :interval="6000" height="450px">-->
<!-- <el-carousel-item v-for="item in pcBannerList" :key="item.id">-->
<!-- <img :src="item.imgurl" width="100%" height="100%" />-->
<!-- </el-carousel-item>-->
<!-- </el-carousel>-->
<!-- </div>-->
<div class="d-flex align-items-center" style="background-color: #fff;">
<div class="price px-3">
<img :src="currentIcon" alt="" style="width: 26px;height: 26px;">
</div>
<div class="price">
<div class="item fn-16" style="font-weight: bold;">{{ activeContract.pair_name }}</div>
</div>
<div class="d-flex fn-14 px-4 p-l-A align-items-center py-2">
<div class="item px-2 min-width-A" style="font-weight: bold;">
<div class="title" :class="{ decreace2: activeContract.increase < 0, increase: activeContract.increase >= 0}" style="margin-bottom: 10px;">
{{ activeContract.price }}
</div>
<div :class="{ decreace2: activeContract.increase < 0, increase: activeContract.increase >= 0}">
{{ activeContract.increaseStr }}
</div>
</div>
</div>
<!-- 币种价值数据 -->
<div class="d-flex fn-14">
<div class="item px-2 min-width-B">
<div class="title text-secondary" style="margin-bottom: 10px;">
24h {{ $t("contract.h7") }}
</div>
<div class="fn-12" style="color: #a8263b;font-weight: bold;">
{{ activeContract.high }}
</div>
</div>
<div class="item px-2 min-width-B">
<div class="title text-secondary" style="margin-bottom: 10px;">
24h {{ $t("contract.h8") }}
</div>
<div class="fn-12" style="color: #a8263b;font-weight: bold;">
{{ activeContract.low }}
</div>
</div>
<div class="item px-2 min-width-B">
<div class="title text-secondary" style="margin-bottom: 10px;">
24h {{ $t("contract.h9") }}
(USDT)
</div>
<div class="fn-12" style="color: #a8263b;font-weight: bold;">
{{ activeContract.vol }}
</div>
</div>
</div>
</div>
<div class="page-top d-flex pt-2">
<!-- 交易对 -->
<div style="width: 23%;background-color: #fff;margin-right: 7px;">
<div class="d-flex search_box">
<i class="el-icon-search"></i>
<input type="text" :placeholder="$t('exchange.search')" v-model="filterCoin" style="color: black;">
</div>
<div class="bottom-box-left">
<template v-for="parent in contractListFilter">
<table class="table" :key="parent.coin_name + 1">
<thead>
<tr class="">
<th class="w-9/24">{{ $t("contract.h5") }}</th>
<th class="w-7/24 text-right">{{ $t("contract.g3") }}</th>
<th class="w-8/24 text-right">
{{ $t("contract.h6") }}
</th>
</tr>
</thead>
<tbody>
<tr v-for="item in Liste" :key="item.symbol"
:class="{ active: item.symbol == activeSymbol }" @click="ispopover1(item.symbol)">
<td class="w-9/24 tr-text" style="font-weight: bold;color: #000;padding: 15px 18px;">
<img :src="item.icon" width="20" height="20" />
{{ item.symbol }}/{{ parent.coin_name }}
</td>
<td class="w-7/24 text-right" :class="item.increase < 0 ? 'decreace' : 'increase'" style="font-weight: bold;padding: 15px 18px;">
{{ item.close }}
</td>
<td class="w-8/24 text-right" :class="item.increase < 0 ? 'decreace' : 'increase'" style="font-weight: bold;padding: 15px 18px;">
{{ item.increaseStr }}
</td>
</tr>
</tbody>
</table>
</template>
</div>
</div>
<div class="kline-box flex-fill mr-2">
<kline :activeCoin="{ pair_name: activeContract.pair_name }" v-if="activeContract.pair_name"
:contract="true" :wsUrl="wsUrl" />
<!-- 交易 -->
<exchange-store :holdPositionList="holdPositionList" :symbol="activeSymbol" :defaultPrice="defaultPrice"
:newPriceObj="newPriceObj" :contractOpen="contractOpen" @accountInfo="accountInfo = $event"
@position="getLastHoldPosition" @getSymbolDetail="symbolDetail=$event" />
</div>
<div style="width: 20%;">
<!-- 盘口 -->
<handicap @input="newPriceObj = $event" @selectprice="defaultPrice = $event" :symbol="activeSymbol"
:wsUrl="wsUrl" :ws="ws" class="" ref="handicap" />
<!-- 合约账户 -->
<div style="margin-top: 8px;">
<account class="bg-plain" :accountInfo="accountInfo" />
</div>
</div>
</div>
<page-bottom @position="getLastHoldPosition" @isall=" holdPositionAll = $event; holdPosition();"
@setactiveItem="setactiveItem" :accountInfo="accountInfo" :newPriceObj="newPriceObj"
:holdPositionList="holdPositionList" :holdPositionAll="holdPositionAll" :symbol="activeSymbol"
:symbolDetail="symbolDetail" />
<div class="modal fade" id="openContract" tabindex="-1" role="dialog" aria-labelledby="contractClose"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="contractClose">
{{ contractAgreement.title }}
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div v-html="contractAgreement.body"></div>
</div>
<div class="modal-footer d-flex justify-content-center">
<button type="button" class="btn btn-primary" @click="opening">
{{$t('contract.j8')}}
</button>
</div>
</div>
</div>
</div>
</div>
<div class="contract-page">
<!-- <div class="banner-block col-xs-8">-->
<!-- <el-carousel :interval="6000" height="450px">-->
<!-- <el-carousel-item v-for="item in pcBannerList" :key="item.id">-->
<!-- <img :src="item.imgurl" width="100%" height="100%" />-->
<!-- </el-carousel-item>-->
<!-- </el-carousel>-->
<!-- </div>-->
<div class="page-top d-flex pt-2">
<div class="kline-box flex-fill mr-2">
<div class="coin-change d-flex align-items-center py-2 pl-4 heading justify-content-between" style="height: 60px;">
<div class="d-flex align-items-center">
<div class="coin d-flex align-items-center">
<el-popover placement="bottom" ref="popover" width="400" trigger="click">
<div slot="reference" style="display: flex;align-items: center;">
<img :src="currentIcon" width="20" height="20" />
<div style="font-weight: 500;color: #000;margin: 0px 5px;">{{ activeContract.pair_name }}</div>
<el-button size="mini">
<img src="@/assets/img/home/arrow_down.svg" width="10" height="10" />
<!-- <i class="el-icon-arrow-down"></i> -->
</el-button>
</div>
<div class="markets-pair-list" style="max-height:300px;overflow:auto;">
<template v-for="parent in contractList">
<div class="px-3 text-primary" :key="parent.coin_name">
{{ parent.coin_name }}
</div>
<table class="table" :key="parent.coin_name + 1">
<thead>
<tr class="text-secondary">
<th class="w-10/24">{{ $t("contract.h5") }}</th>
<th class="w-7/24">{{ $t("contract.g3") }}</th>
<th class="w-7/24 text-right">
{{ $t("contract.h6") }}
</th>
</tr>
</thead>
<tbody>
<!-- @click="activeSymbol = item.symbol" -->
<tr v-for="item in parent.marketInfoList" :key="item.symbol"
:class="{ active: item.symbol == activeSymbol }" @click="ispopover1(item.symbol)">
<td class="" style="display: flex;">
<div v-for="items in Liste" :key="items.symbol">
<img :src="items.icon" width="20" height="20" v-if="items.symbol==item.symbol" />
</div>
<div style="font-weight: 500;color: #000;">{{ item.symbol }}/{{ parent.coin_name }}</div>
</td>
<td class="w-7/24 " :class="item.increase < 0 ? 'decreace' : 'increace'" style="font-weight: bold;">
{{ item.price }}
</td>
<td class="w-7/24" :class="item.increase < 0 ? 'decreace' : 'increace'" style="font-weight: bold;">
{{ item.increaseStr }}
</td>
</tr>
</tbody>
</table>
</template>
</div>
</el-popover>
</div>
<div class="price border-right" style="padding: 0px 30px;" :class="{ decreace: activeContract.increase < 0, increace: activeContract.increase >= 0 }">
<div class="current">{{ activeContract.price }}$</div>
<div class="zf">{{ activeContract.increaseStr }}</div>
</div>
<!-- 币种价值数据 -->
<div class="d-flex fn-12">
<div class="item" style="padding: 0px 20px;">
<div class="title" style="margin-bottom: 10px;color: #000;">
24h {{ $t("contract.h7") }}
</div>
<div style="color: rgb(168, 38, 59);font-weight: bold;">
{{ activeContract.high }}
</div>
</div>
<div class="item" style="padding: 0px 20px;">
<div class="title" style="margin-bottom: 10px;color: #000;">
24h {{ $t("contract.h8") }}
</div>
<div style="color: rgb(168, 38, 59);font-weight: bold;">
{{ activeContract.low }}
</div>
</div>
<div class="item" style="padding: 0px 20px;">
<div class="title" style="margin-bottom: 10px;color: #000;">
24h {{ $t("contract.h9") }}
<!-- {{ $t("contract.e2") }} -->
<!-- (USDT) -->
</div>
<div style="color: rgb(168, 38, 59);font-weight: bold;">
{{ activeContract.vol }}
</div>
</div>
</div>
</div>
<!-- <div><theme-change /></div> -->
</div>
<kline
:activeCoin="{ pair_name: activeContract.pair_name }"
v-if="activeContract.pair_name"
:contract="true"
:wsUrl="wsUrl"
/>
</div>
<!-- 盘口 -->
<handicap
@input="newPriceObj = $event"
@selectprice="defaultPrice = $event"
:symbol="activeSymbol"
:wsUrl="wsUrl"
:ws="ws"
class="mr-2"
ref="handicap"
/>
<!-- 交易 -->
<exchange-store
:holdPositionList="holdPositionList"
:symbol="activeSymbol"
:defaultPrice="defaultPrice"
:newPriceObj="newPriceObj"
:contractOpen="contractOpen"
@accountInfo="accountInfo = $event"
@position="getLastHoldPosition"
@getSymbolDetail="symbolDetail=$event"
/>
</div>
<page-bottom
@position="getLastHoldPosition"
@isall="
holdPositionAll = $event;
holdPosition();
"
@setactiveItem="setactiveItem"
:accountInfo="accountInfo"
:newPriceObj="newPriceObj"
:holdPositionList="holdPositionList"
:holdPositionAll="holdPositionAll"
:symbol="activeSymbol"
:symbolDetail="symbolDetail"
/>
<div class="modal fade" id="openContract" tabindex="-1" role="dialog" aria-labelledby="contractClose" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="contractClose">
{{ contractAgreement.title }}
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div v-html="contractAgreement.body"></div>
</div>
<div class="modal-footer d-flex justify-content-center">
<button type="button" class="btn btn-primary" @click="opening">
{{$t('contract.j8')}}
</button>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import kline from "../option/kline";
import handicap from "./handicap.vue";
import account from "./account.vue";
import exchangeStore from "./exchange-store.vue";
import pageBottom from "./page-bottom.vue";
import Contract from "../../api/contract";
import Socket from "@/api/server/Socket.js";
import Home from "@/api/home";
import bus from "@/components/bus.js";
export default {
components: {
kline,
handicap,
account,
exchangeStore,
pageBottom
},
data() {
return {
contractList: [],
activeSymbol: "",
holdPositionAll: false,
holdPositionList: [],
newPriceObj: {},
pcBannerList: [],
accountInfo: {},
defaultPrice: "",
wsUrl: this.Globals.Server.Path.WS1,
ws: new Socket(this.Globals.Server.Path.WS1),
_time: null,
contractOpen: false,
contractAgreement: {},
symbolDetail: {},
currentIcon: '',
filterCoin: "",
contractListFilter: [],
imgList:[],
imge:[],
Liste:[]
};
},
computed: {
activeContract(val) {
let contractList = this.contractList
.map(item => item.marketInfoList)
.flat()
.find(item => item.symbol == this.activeSymbol) || {}
if (val.price) {
delete contractList.price
import kline from "../option/kline";
import handicap from "./handicap.vue";
import account from "./account.vue";
import exchangeStore from "./exchange-store.vue";
import pageBottom from "./page-bottom.vue";
import Contract from "../../api/contract";
import Socket from "@/api/server/Socket.js";
import Home from "@/api/home";
import bus from "@/components/bus.js";
export default {
components: {
kline,
handicap,
account,
exchangeStore,
pageBottom
},
data() {
return {
contractList: [],
activeSymbol: "",
holdPositionAll: false,
holdPositionList: [],
newPriceObj: {},
pcBannerList:[],
accountInfo: {},
defaultPrice: "",
wsUrl: this.Globals.Server.Path.WS1,
ws: new Socket(this.Globals.Server.Path.WS1),
_time: null,
contractOpen: false,
contractAgreement: {},
symbolDetail:{},
currentIcon: '',
imge:[],
Liste:[]
};
},
computed: {
activeContract(val) {
let contractList=this.contractList
.map(item => item.marketInfoList)
.flat()
.find(item => item.symbol == this.activeSymbol) || {}
if(val.price){
delete contractList.price
}
return contractList;
},
isLogin() {
return Boolean(localStorage.token);
}
},
watch: {
activeSymbol() {
this.holdPosition();
},
},
destroyed() {
clearInterval(this._time);
},
created() {
// this.openStatus();
this.getMarketList();
this.holdPosition();
this.indexList();
this._time = setInterval(() => {
if (this.contractOpen) {
// mounted holdPosition
this.holdPosition();
}
}, 3000);
this.ws.on("open", () => {
this.swapMarketList();
});
// console.info(this.$refs)
bus.$on('collapse', msg => {
this.activeContract.price =this.activeContract.symbol=='BTC'? (msg.close).toFixed(1):(msg.close).toFixed(3);
this.holdPositionList.map(item=>{
if(item.symbol==this.activeContract.symbol) item.realtimePrice=this.activeContract.price
})
});
},
//
mounted: function () {
setInterval(() => {
this.holdPosition();
}, 2000)
},
methods: {
ispopover1(item){
this.activeSymbol=item;
this.getMarketList();
this.$refs.popover.showPopper = false;
},
swapMarketList() {
let msg = "swapMarketList";
this.ws.send({
cmd: "sub",
msg: msg
});
this.ws.on("message", res => {
let { data, sub,cmd } = res;
if (sub == msg) {
// console.log(data, '11--------------------')
if( data.symbol=='BTC' )(data.price).toFixed(1)
this.contractList = data;
this.Listes();
}else if (cmd == "ping") {
this.ws.send({
cmd: "pong"
});
}
});
this.ws.on('close',()=>{
this.ws= new Socket(this.Globals.Server.Path.WS1),
console.log('链接关闭');
this.wsOpen();
})
},
Listes(){
this.Liste = []
this.contractList[0].marketInfoList.map(item=>{
this.imge[0].marketInfoList.map(items=>{
if(item.symbol==items.symbol){
this.Liste.push({
pair_name: item.pair_name,
symbol: item.symbol,
icon:items.icon
})
}
return contractList;
},
isLogin() {
return Boolean(localStorage.token);
},
// contractListFilter(){
// return this.contractList.map((item1, index1)=>{
// item1.marketInfoList.filter(item2=>{
// return item2.symbol.indexOf(this.filterCoin)!=-1
// })
// return item1;
// })
// }
},
watch: {
activeSymbol() {
this.holdPosition();
},
filterCoin: {
handler(n, o) {
if (!n) {
this.contractListFilter = this.contractList;
} else {
this.Liste = this.Liste.filter(item2 => {
return item2.symbol.indexOf(n.toUpperCase()) != -1
})
}
// if (!n) {
// this.contractListFilter = this.contractList;
// } else {
// this.contractListFilter = this.contractList.map((item1, index1) => {
// let arr = item1;
// arr.marketInfoList = item1.marketInfoList.filter(item2 => {
// return item2.symbol.indexOf(n.toUpperCase()) != -1
// })
// console.log(arr,'111');
// return arr;
// })
// }
},
immediate: true
})
})
},
wsOpen(){
this.ws.on("open", () => {
this.swapMarketList();
this.$refs.handicap.linkSocket()
});
},
//
getMarketList() {
this.currentIcon = "";
Contract.getMarketList().then(res => {
if(this.activeSymbol==''){
this.contractList = res;
this.imge = res;
//
let firstParent = res[0];
if (firstParent) {
let first = firstParent.marketInfoList[0];
if (first) this.activeSymbol = first.symbol;
this.currentIcon = res[0].marketInfoList[0].icon;
}
},
destroyed() {
clearInterval(this._time);
},
created() {
// this.openStatus();
this.getMarketList();
this.holdPosition();
this.indexList();
this._time = setInterval(() => {
if (this.contractOpen) {
this.holdPosition();
}
}, 3000);
this.ws.on("open", () => {
this.swapMarketList();
});
// console.info(this.$refs)
bus.$on('collapse', msg => {
this.activeContract.price = this.activeContract.symbol == 'BTC' ? (msg.close).toFixed(1) : (msg
.close).toFixed(3);
this.holdPositionList.map(item => {
if (item.symbol == this.activeContract.symbol) item.realtimePrice = this.activeContract
.price
})
});
},
//
mounted: function() {
setInterval(() => {
this.holdPosition();
}, 2000)
},
methods: {
ispopover1(item) {
this.activeSymbol = item;
// this.$refs.popover.showPopper = false;
this.getMarketList();
},
swapMarketList() {
let msg = "swapMarketList";
this.ws.send({
cmd: "sub",
msg: msg
});
this.ws.on("message", res => {
let {
data,
sub,
cmd
} = res;
if (sub == msg) {
if (data.symbol == 'BTC')(data.price).toFixed(1)
this.contractList = data;
if (this.filterCoin == '') {
this.contractListFilter = data;
this.Listes();
// console.log(this.Liste,'2222');
}
} else if (cmd == "ping") {
this.ws.send({
cmd: "pong"
});
}
});
this.ws.on('close', () => {
this.ws = new Socket(this.Globals.Server.Path.WS1),
console.log('链接关闭');
this.wsOpen();
})
},
wsOpen() {
this.ws.on("open", () => {
this.swapMarketList();
this.$refs.handicap.linkSocket()
});
},
Listes(){
this.Liste = []
this.contractListFilter[0].marketInfoList.map(item=>{
this.imge[0].marketInfoList.map(items=>{
if(item.symbol==items.symbol){
this.Liste.push({
amount:item.amount,
close:item.close,
count: item.count,
high:item.high,
id: item.id,
increase: item.increase,
increaseStr: item.increaseStr,
low: item.low,
mrid: item.mrid,
open: item.open,
pair_name: item.pair_name,
price:item.price,
symbol: item.symbol,
trade_turnover: item.trade_turnover,
type: item.type,
vol: item.vol,
icon:items.icon
})
}
})
})
},
//
getMarketList() {
this.currentIcon = "";
Contract.getMarketList().then(res => {
if (this.activeSymbol == '') {
//
this.imge = res
this.contractList = res;
if (this.filterCoin == '') {
this.contractListFilter = res;
this.Listes();
}
//
let firstParent = res[0];
if (firstParent) {
let first = firstParent.marketInfoList[0];
if (first) this.activeSymbol = first.symbol;
this.currentIcon = res[0].marketInfoList[0].icon;
}
} else {
// icon
for (let item of res[0].marketInfoList) {
if (this.activeSymbol == item.symbol) {
this.currentIcon = item.icon;
}
}
}
});
},
//
holdPosition() {
if (!this.isLogin) return;
let data = {
symbol: (this.holdPositionAll && this.activeSymbol) || ""
};
Contract.holdPosition(data, {
loading: false
}).then(res => {
// console.info(res)
res.map(item => {
if (item.symbol == this.activeContract.symbol) item.realtimePrice = this
.activeContract.price
})
this.holdPositionList = res;
});
},
//
openStatus() {
if (!this.isLogin) return;
Contract.openStatus().then(res => {
this.contractOpen = res.open;
if (!this.contractOpen) {
this.contractAgreement = res.contractAgreement;
$("#openContract").modal("show");
}
});
},
//
opening() {
Contract.opening().then(res => {
$("#openContract").modal("hide");
this.contractOpen = true;
this.$message.success(this.$t('contract.j9'));
});
},
indexList() {
Home.indexList().then((res) => {
this.pcBannerList = res.pcBannerList
// setTimeout(() => {
// this.skroll();
// }, 100);
}).catch((res) => {});
},
//
setactiveItem(index = 0) {
this.accountInfo = this.holdPositionList[index]
},
// 线
getLastHoldPosition(){
let ti = 0,timer=null;
timer = setInterval(()=>{
this.holdPosition();
ti++;
if(ti==3){
clearInterval(timer);
}
}, 1000)
}else{
// icon
console.log('11111');
for(let item of res[0].marketInfoList){
if(this.activeSymbol==item.symbol){
this.currentIcon = item.icon;
}
}
}
};
});
},
//
holdPosition() {
if (!this.isLogin) return;
let data = {
symbol: (this.holdPositionAll && this.activeSymbol) || ""
};
Contract.holdPosition(data, { loading: false }).then(res => {
// console.info(res)
res.map(item=>{
if(item.symbol==this.activeContract.symbol) item.realtimePrice=this.activeContract.price
})
this.holdPositionList = res;
});
},
//
openStatus() {
if(!this.isLogin) return;
Contract.openStatus().then(res => {
this.contractOpen = res.open;
if (!this.contractOpen) {
this.contractAgreement = res.contractAgreement;
$("#openContract").modal("show");
}
});
},
//
opening() {
Contract.opening().then(res => {
$("#openContract").modal("hide");
this.contractOpen = true;
this.$message.success(this.$t('contract.j9'));
});
},
indexList() {
Home.indexList().then((res) => {
this.pcBannerList = res.pcBannerList
// setTimeout(() => {
// this.skroll();
// }, 100);
}).catch((res) => {});
},
//
setactiveItem(index=0){
this.accountInfo=this.holdPositionList[index]
},
// 线
getLastHoldPosition(){
let ti = 0,timer=null;
timer = setInterval(()=>{
this.holdPosition();
ti++;
if(ti==3){
clearInterval(timer);
}
}, 1000)
}
}
};
</script>
<style lang="scss" scoped>
.justify-content-between ::v-deep .dark-app .theme-switch .theme-switch-button .left,
.dark-app .theme-switch .theme-switch-button .right {
color: white !important
}
thead th,
table td {
font-size: 14px;
}
tbody tr {
cursor: pointer;
}
.page-top table tbody tr:hover {
background-color: #f8f8ff;
td:first-child {
color: #2C60DC;
}
}
.page-top table tbody tr.active {
background-color: #f8f8ff;
td:first-child {
color: #2C60DC;
}
}
.page-top table tbody td {
border: none;
}
.decreace {
color: #E33F31;
}
.increase {
color: #6EB189;
}
.decreace2 {
color: #BB4965;
}
.text-secondary {
color: #636363 !important;
}
.search_box {
width: 95%;
height: 40px;
margin: 10px auto;
border: 1px solid #D9D9D9;
border-radius: 5px;
color: #2e2e2e;
align-items: center;
i {
width: 40px;
text-align: center;
font-size: 16px;
}
input {
background-color: transparent;
border: none;
border-left: 1px solid #D9D9D9;
padding: 0px 10px;
height: 40px;
font-size: 16px;
color: #fff;
}
}
.min-width-B {
min-width: 130px;
}
.justify-content-between ::v-deep .dark-app .theme-switch .theme-switch-button .left, .dark-app .theme-switch .theme-switch-button .right{
color:white !important
}
</style>
Loading…
Cancel
Save