From 0dbc7465447164fef24327b5d494870832d798dd Mon Sep 17 00:00:00 2001
From: 李 <344137771@qq.com>
Date: Tue, 26 May 2026 11:15:18 +0800
Subject: [PATCH] 1
---
src/components/Transform/perpetual-open/index.vue | 131 ++++++++++++++++++++++++-------------------
1 files changed, 74 insertions(+), 57 deletions(-)
diff --git a/src/components/Transform/perpetual-open/index.vue b/src/components/Transform/perpetual-open/index.vue
index 71b14da..677c61f 100644
--- a/src/components/Transform/perpetual-open/index.vue
+++ b/src/components/Transform/perpetual-open/index.vue
@@ -3,7 +3,7 @@
<div id="cryptos">
<div class="perpetual-open">
<div class="flex pt-8">
- <div class="w-40 h-16 text-center rounded tabBackground textColor">{{ $t('全仓') }}</div>
+ <div class="w-40 h-16 flex items-center justify-center rounded tabBackground textColor">{{ $t('全仓') }}</div>
<div class="w-36 h-16 ml-8 rounded tabBackground textColor" v-if="selectIndex / 1 === 1">
<div @click="showOptions = !showOptions" style="height:100%; box-sizing: border-box"
class="relative word-30 pl-7 pr-2 w-36 h-16 tabBackground select-wrap flex justify-between items-center">
@@ -48,7 +48,7 @@
</div>
</div>
</template>
- <contract-futrue v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'" class="mb-5"
+ <contract-futrue v-if="selectIndex == 2 && Array.isArray(initFutrue.para) && initFutrue.para.length" class="mb-5"
:initFutrue="initFutrue" @paraId="onParaId" />
<div class="h-18 greyBg mb-8 flex pr-5 justify-center rounded-lg textColor items-center"
v-if="selectIndex == 1">
@@ -66,8 +66,8 @@
<input v-if="selectIndex == 1" :placeholder="$t('张数')" class="border-none greyBg text-center textColor"
:class="['HK-stocks', 'JP-stocks','UK-stocks','DE-stocks','BZ-stocks'].includes(queryType) ? 'full-input' : 'half-input'"
v-model="form.amount" type="number" @input="onInput" />
- <input v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'"
- :placeholder="($t('最少') + initFutrue && initFutrue.para ? $t('最小金额') + initFutrue.para[paraIndex].buy_min : '')"
+ <input v-if="selectIndex == 2 && Array.isArray(initFutrue.para) && initFutrue.para.length"
+ :placeholder="($t('最少') + (initFutrue && Array.isArray(initFutrue.para) && initFutrue.para[paraIndex] ? $t('最小金额') + initFutrue.para[paraIndex].buy_min : ''))"
class="border-none greyBg text-center textColor"
:class="['HK-stocks', 'JP-stocks','UK-stocks','DE-stocks','BZ-stocks'].includes(queryType) ? 'full-input' : 'half-input'"
v-model="form.amount" type="number" @input="onInput" />
@@ -106,7 +106,7 @@
<!-- 张数输入 -->
<amount-slider ref="sliderRef" :maxAmount="getVolumnByLever()" @getAmount="getAmount"></amount-slider>
</template>
- <template v-if="selectIndex == 1 && userInfo.token">
+ <template v-if="selectIndex == 1 && userInfo && userInfo.token">
<div class="flex justify-between mt-8">
<div class="text-grey">{{ $t('合约金额') }}</div>
<div class="textColor">{{ initData.amount * (form.amount / 1) * form.lever_rate }}
@@ -129,13 +129,12 @@
</div>
</template>
- <!-- <div class="flex text-24 text-grey justify-between mt-8" v-if="selectIndex == 2"> -->
- <div class="flex text-24 text-grey justify-between mt-8">
+ <div class="flex text-24 text-grey justify-between mt-8" v-if="selectIndex == 2">
<div>{{ $t("可用") }}</div>
<div class="textColor">{{ initFutrue.amount }} {{ getCurrentUnit() }}</div>
</div>
- <div class="flex text-24 text-grey justify-between mt-5"
- v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
+ <div class="flex text-24 text-grey justify-between mt-5"
+ v-if="selectIndex == 2 && Array.isArray(initFutrue.para) && initFutrue.para.length">
<div>{{ $t("手续费") }}</div>
<div class="textColor">
{{
@@ -150,7 +149,7 @@
</div>
</div>
- <template v-if="userInfo.token">
+ <template v-if="userInfo && userInfo.token">
<template v-if="selectIndex == 1">
<div class="w-full h-20 bg-green flex text-white rounded-md mt-16 justify-center items-center"
v-if="currentType == 'long'" @click="throttleFn('long')">
@@ -179,7 +178,7 @@
</template>
<template v-if="selectIndex == 2">
<div class="w-full h-20 bg-green flex text-white rounded-md mt-2 justify-center items-center"
- @click="throttleFn('open')" v-if="userInfo.token">
+ @click="throttleFn('open')" v-if="userInfo && userInfo.token">
<div class="text-34 relative text-center" style="flex-grow: 1">
{{ $t("开多") }}
<span class="right-word text-22 text-center">{{
@@ -189,7 +188,7 @@
</div>
<div class="w-full h-20 bg-red flex text-white rounded-md mt-5 mb-2 justify-center items-center"
style="position: relative;" :class="{ 'mt-22': selectIndex == 2 }" @click="throttleFn('close')"
- v-if="userInfo.token">
+ v-if="userInfo && userInfo.token">
<div class="relative text-34 text-center" style="flex-grow: 1">
{{ $t("开空") }}
<span class="right-word text-22 text-center">{{
@@ -225,26 +224,28 @@
</div>
</div>
<div class="deep-div">
- <div v-if="showType == 0 || showType == 2" class="w-72 flex justify-between pt-1 text-26"
- v-for="(item, index) in redData" :key="item + index" @click="onQuickPrice(item.price)" :style="{
- background:
- `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
- } 0%` +
- (1 - item.amount / greenData[greenData.length - 1].amount) *
- 100 +
- '%,rgba(246,70,93,.1) ' +
- (1 - item.amount / greenData[greenData.length - 1].amount) *
- 100 +
- '%,rgba(246,70,93,.1) 100%)',
- }">
- <div class="text-red">{{ item.price }}</div>
- <div class="text-right textColor" v-if="symbol == 'shib'">
- {{ fixDate(item.amount, $i18n) || "--" }}
+ <template v-if="showType == 0 || showType == 2">
+ <div class="w-72 flex justify-between pt-1 text-26" v-for="(item, index) in redData"
+ :key="item + index" @click="onQuickPrice(item.price)" :style="{
+ background:
+ `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
+ } 0%` +
+ (1 - item.amount / greenData[greenData.length - 1].amount) *
+ 100 +
+ '%,rgba(246,70,93,.1) ' +
+ (1 - item.amount / greenData[greenData.length - 1].amount) *
+ 100 +
+ '%,rgba(246,70,93,.1) 100%)',
+ }">
+ <div class="text-red">{{ item.price }}</div>
+ <div class="text-right textColor" v-if="symbol == 'shib'">
+ {{ fixDate(item.amount, $i18n) || "--" }}
+ </div>
+ <div class="text-right textColor" v-else>
+ {{ item.amount || "--" }}
+ </div>
</div>
- <div class="text-right textColor" v-else>
- {{ item.amount || "--" }}
- </div>
- </div>
+ </template>
</div>
<div class="w-72 text-red pt-1 text-34 font-bold text-center">
{{ price || '--' }}
@@ -257,27 +258,28 @@
}}
</div>
<div class="deep-div">
-
- <div v-if="showType == 0 || showType == 1" class="w-72 flex justify-between pt-1 text-26"
- v-for="(item, index) in greenData" :key="index" @click="onQuickPrice(item.price)" :style="{
- background:
- `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
- } 0%` +
- (1 - item.amount / greenData[greenData.length - 1].amount) *
- 100 +
- '%,rgba(94,186,137,.1) ' +
- (1 - item.amount / greenData[greenData.length - 1].amount) *
- 100 +
- '%,rgba(94,186,137,.1) 100%)',
- }">
- <div class="text-green">{{ item.price }}</div>
- <div class="text-right textColor" v-if="symbol == 'shib'">
- {{ fixDate(item.amount, $i18n) || "--" }}
+ <template v-if="showType == 0 || showType == 1">
+ <div class="w-72 flex justify-between pt-1 text-26" v-for="(item, index) in greenData" :key="index"
+ @click="onQuickPrice(item.price)" :style="{
+ background:
+ `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
+ } 0%` +
+ (1 - item.amount / greenData[greenData.length - 1].amount) *
+ 100 +
+ '%,rgba(94,186,137,.1) ' +
+ (1 - item.amount / greenData[greenData.length - 1].amount) *
+ 100 +
+ '%,rgba(94,186,137,.1) 100%)',
+ }">
+ <div class="text-green">{{ item.price }}</div>
+ <div class="text-right textColor" v-if="symbol == 'shib'">
+ {{ fixDate(item.amount, $i18n) || "--" }}
+ </div>
+ <div class="text-right textColor" v-else>
+ {{ item.amount || "--" }}
+ </div>
</div>
- <div class="text-right textColor" v-else>
- {{ item.amount || "--" }}
- </div>
- </div>
+ </template>
</div>
<div class="flex k-select-box">
<div class="mt-2 mb-2 select-box" style="position: relative">
@@ -341,6 +343,11 @@
[Popup.name]: Popup,
},
props: {
+ // 非路由场景(例如嵌入到其它页面)用于指定品种类型
+ queryTypeProp: {
+ type: String,
+ default: ''
+ },
greenData: { // 买单
type: Array,
default() {
@@ -452,10 +459,14 @@
}
},
symbol(val) {
- // this.getHomeList(val);
+ if (val) {
+ this.getHomeList(val);
+ }
},
'$route'(val) {
- this.getHomeList(val.params.symbol);
+ if (val && val.params && val.params.symbol) {
+ this.getHomeList(val.params.symbol);
+ }
},
initData(val) {
if (this.selectIndex / 1 === 1) {
@@ -538,7 +549,10 @@
}
},
created() {
- if (this.$route.query.type) {
+ // 优先使用外部传入的 type,其次才从路由读取
+ if (this.queryTypeProp) {
+ this.queryType = this.queryTypeProp
+ } else if (this.$route && this.$route.query && this.$route.query.type) {
this.queryType = this.$route.query.type
}
},
@@ -550,7 +564,8 @@
this.title = this.$t('市价');
},
mounted() {
- this.getHomeList(this.$route.params.symbol);
+ // trade/options 等页面没有 params.symbol,优先使用 props.symbol
+ this.getHomeList(this.symbol || (this.$route && this.$route.params && this.$route.params.symbol));
this.form.price = this.price
},
beforeUnmount() {
@@ -597,7 +612,9 @@
this.arryIsShow = !this.arryIsShow;
},
getHomeList(symbol) {
+ if (!symbol) return
_getHomeList(symbol).then((res) => {
+ if (!res || !res[0] || res[0].close == null) return
let numberText = res[0].close.toString();
let numberLength = numberText.substring(numberText.indexOf(".") + 1, numberText.length).length;
let arry = [];
@@ -780,7 +797,7 @@
this.order(type)
}, 500),
order(type) {
- if (!this.userInfo.token) {
+ if (!this.userInfo || !this.userInfo.token) {
this.$router.push('/login')
return false;
}
@@ -801,7 +818,7 @@
// this.form.direction = type
- this.form.symbol = this.$route.params.symbol
+ this.form.symbol = this.symbol || (this.$route && this.$route.params && this.$route.params.symbol) || ''
// this.form.direction = type === 'open' ? 'buy' : 'sell'
if (type == 'long' || type == 'open') {
this.form.direction = 'buy'
--
Gitblit v1.9.3