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.
246 lines
6.3 KiB
246 lines
6.3 KiB
<template>
|
|
<v-page>
|
|
<v-header :title="$t('first.a6')"></v-header>
|
|
<van-tabs
|
|
:ellipsis="false"
|
|
:border="false"
|
|
class="border-b backcor-black"
|
|
:active="tab"
|
|
@change="tab = $event.detail.name"
|
|
>
|
|
<!-- <van-tab :title="`${$t('contract.a0')}`" :name="0"></van-tab> -->
|
|
<!-- <van-tab
|
|
:title="`${$t('contract.a1')}(${symbolLeft})`"
|
|
:name="1"
|
|
></van-tab> -->
|
|
<!-- <van-tab :title="$t('contract.a2')" :name="0"></van-tab> -->
|
|
<van-tab :title="$t('contract.a3')" :name="1"></van-tab>
|
|
<!-- <van-tab
|
|
:title="`${$t('exchange.a2')}${$t('assets.a7')}(${symbolLeft})`"
|
|
:name="4"
|
|
></van-tab> -->
|
|
</van-tabs>
|
|
<!-- 开仓 -->
|
|
<!-- <view class="layout-main" v-if="tab == 0">
|
|
<open-position
|
|
:query="query"
|
|
:collect="collect"
|
|
@option="option"
|
|
:isShow="isShow"
|
|
ref="openposition"
|
|
:increase="increase"
|
|
@symbol="symbolListShow = !symbolListShow"
|
|
@getSymbolDetail="symbolDetail = $event"
|
|
/>
|
|
</view> -->
|
|
<!-- 持仓 -->
|
|
<!-- <main class="layout-main" v-if="tab == 1">
|
|
<position
|
|
:isShow="isShow"
|
|
:symbolDetail="symbolDetail"
|
|
:symbolLeft="symbolLeft"
|
|
/>
|
|
</main> -->
|
|
<!-- 委托 -->
|
|
<main class="layout-main" v-if="tab == 0">
|
|
<contract-entrustment style="min-height: 100%" />
|
|
</main>
|
|
<!-- 历史 -->
|
|
<main class="layout-main" v-if="tab == 1">
|
|
<contract-history :tabs='tab'/>
|
|
</main>
|
|
<!-- 流水 -->
|
|
<!-- <main class="layout-main" v-if="tab == 4">
|
|
<contract-bill :symbolLeft="symbolLeft" />
|
|
</main> -->
|
|
|
|
<van-popup
|
|
:show="symbolListShow"
|
|
@close="symbolListShow = false"
|
|
closeable
|
|
close-on-popstate
|
|
position="left"
|
|
custom-style="height:100%;width:70%"
|
|
>
|
|
<symbol-list
|
|
:collect="collect"
|
|
:title="$t('contract.a4')"
|
|
:marketList="marketList"
|
|
@check-symbol="checkSymbol"
|
|
/>
|
|
</van-popup>
|
|
<van-dialog
|
|
use-slot
|
|
:show="contractStatusShow"
|
|
:title="contractAgreement.title"
|
|
@confirm="openContract"
|
|
show-cancel-button
|
|
@cancel="contractStatusShow = false"
|
|
>
|
|
<view class="p-md overflow-scroll">
|
|
<rich-text class="p-md" :nodes="contractAgreement.body"></rich-text>
|
|
</view>
|
|
</van-dialog>
|
|
</v-page>
|
|
</template>
|
|
<script>
|
|
import openPosition from "@/pages/exchange/open-position";
|
|
import position from "@/pages/exchange/position";
|
|
import contractEntrustment from "@/pages/exchange/contract-entrustment";
|
|
import contractHistory from "@/pages/exchange/contract-history";
|
|
import symbolList from "@/pages/exchange/symbol-list";
|
|
import contractBill from "@/pages/exchange/contract-bill";
|
|
import Home from "@/api/home";
|
|
import Contract from "@/api/contract";
|
|
import { mapState } from "vuex";
|
|
export default {
|
|
name: "contract",
|
|
props: ['tabs'],
|
|
components: {
|
|
openPosition,
|
|
position,
|
|
contractEntrustment,
|
|
contractHistory,
|
|
symbolList,
|
|
contractBill,
|
|
},
|
|
data() {
|
|
return {
|
|
tab: 1,
|
|
collect: [],
|
|
marketList: [],
|
|
symbolListShow: false,
|
|
contractStatusShow: false,
|
|
contractAgreement: {},
|
|
symbolDetail: {},
|
|
query: {},
|
|
increase:{}
|
|
};
|
|
},
|
|
computed: {
|
|
symbolLeft() {
|
|
if (!this.query.symbol) return "";
|
|
return this.query.symbol.split("/")[0];
|
|
},
|
|
isLogin() {
|
|
return Boolean(uni.getStorageSync("token"));
|
|
},
|
|
...mapState({
|
|
ws: "ws1",
|
|
}),
|
|
},
|
|
watch:{
|
|
tab(n){
|
|
console.log(n)
|
|
}
|
|
},
|
|
methods: {
|
|
// 获取市场行情
|
|
getMarketList() {
|
|
Contract.getMarketList().then((res) => {
|
|
// 整理数据格式
|
|
this.marketList = res.data.map((item) => {
|
|
item.marketInfoList.forEach((el) => {
|
|
el.coin_name = el.symbol;
|
|
});
|
|
return item;
|
|
});
|
|
|
|
if (!this.query.symbol) {
|
|
let parentItem = this.marketList[0].marketInfoList[0];
|
|
this.checkSymbol(parentItem);
|
|
}
|
|
});
|
|
},
|
|
//
|
|
checkSymbol(obj) {
|
|
this.symbolListShow = false;
|
|
if (obj.pair_name != this.query.symbol)
|
|
this.query = { symbol: obj.pair_name };
|
|
},
|
|
// 获取自选列表
|
|
getCollect() {
|
|
if (!this.isLogin) return;
|
|
Home.getCollect()
|
|
.then((res) => {
|
|
this.collect = res.data || [];
|
|
})
|
|
.catch(() => {});
|
|
},
|
|
|
|
// 链接socket
|
|
linkSocket() {
|
|
let msg = "swapMarketList";
|
|
this.ws.send({
|
|
cmd: "sub",
|
|
msg: msg,
|
|
});
|
|
this.ws.on("message", (res) => {
|
|
if(!this.isShow) return;
|
|
let { data, sub } = res;
|
|
if (sub == msg) {
|
|
this.marketList = data.map((item) => {
|
|
item.marketInfoList.forEach((el) => {
|
|
el.coin_name = el.symbol;
|
|
});
|
|
return item;
|
|
});
|
|
var symbol=this.query.symbol.split('/')
|
|
// console.log(symbol)
|
|
var market=this.marketList.find((item) => item.coin_name == symbol[1])
|
|
this.increase=market.marketInfoList.find((item) => item.coin_name == symbol[0])||{}
|
|
}
|
|
});
|
|
},
|
|
// 添加自选
|
|
option() {
|
|
let data = {
|
|
pair_name: this.query.symbol,
|
|
};
|
|
Home.option(data)
|
|
.then((res) => {
|
|
this.getCollect();
|
|
if (res.data) {
|
|
this.$toast(this.$t("exchange.a6"));
|
|
} else {
|
|
this.$toast(this.$t("exchange.a7"));
|
|
}
|
|
})
|
|
.catch(() => {});
|
|
},
|
|
// 获取开通永续合约
|
|
openStatus() {
|
|
if (!this.isLogin) return;
|
|
Contract.openStatus({}).then((res) => {
|
|
if (!res.data.open) {
|
|
this.contractAgreement = res.data.contractAgreement;
|
|
this.contractStatusShow = true;
|
|
this.$refs.openposition.getSymbolDetail();
|
|
}
|
|
});
|
|
},
|
|
// 开通永续合约
|
|
openContract() {
|
|
Contract.opening().then(() => {
|
|
this.$toast(this.$t("contract.a5"));
|
|
this.contractStatusShow = false;
|
|
});
|
|
},
|
|
},
|
|
onLoad(query) {
|
|
this.query=query
|
|
},
|
|
created() {
|
|
this.getMarketList();
|
|
this.getCollect();
|
|
this.linkSocket();
|
|
// this.openStatus();
|
|
},
|
|
destroyed() {
|
|
this.ws.send({
|
|
cmd: "unsub",
|
|
msg: "swapMarketList",
|
|
});
|
|
},
|
|
};
|
|
</script>
|
|
|