From fcb00a66b4053550b473a29d7299c7a4737eea75 Mon Sep 17 00:00:00 2001
From: lxf <1371462558@qq.com>
Date: Wed, 16 Jul 2025 14:41:04 +0800
Subject: [PATCH] 翻译
---
src/page/TtrendDetails/index.vue | 322 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 320 insertions(+), 2 deletions(-)
diff --git a/src/page/TtrendDetails/index.vue b/src/page/TtrendDetails/index.vue
index e66e703..e48182a 100644
--- a/src/page/TtrendDetails/index.vue
+++ b/src/page/TtrendDetails/index.vue
@@ -28,13 +28,13 @@
:tabIndex="tab"
/>
<div class="flex justify-between px-32 pt-40" v-if="!kineType">
- <div
+ <!-- <div
class="w-368 h-80 mr-32 flex justify-center items-center rounded box-border tabBtn"
:class="tab === '1' ? 'activeBtn' : ''"
@click="onTab('1')"
>
{{ $t("永续合约") }}
- </div>
+ </div> -->
<!-- <div
class="w-368 h-80 flex justify-center items-center rounded box-border tabBtn"
:class="tab === '2' ? 'activeBtn' : ''"
@@ -111,6 +111,78 @@
/>
</div>
<div class="w-full h-20 greyBg"></div>
+ <!-- 买入 卖出 -->
+ <div class="operateBtnGroup">
+ <div class="buy btn" @click="openTradePopup('open')">
+ {{ $t("买入") }}
+ </div>
+ <div class="sell btn" @click="openTradePopup('sell')">
+ {{ $t("卖出") }}
+ </div>
+ </div>
+ <van-popup v-model="showTradePopup" position="bottom" class="trade-popup">
+ <div class="popup-header">
+ {{ $t("订单确认") }}
+ </div>
+ <div class="popup-content">
+ <!-- 市价选择框 -->
+ <div class="form-item form-item_wrp">
+ {{ $t("市价") }}
+ </div>
+ <div class="form-item form-item_wrp">
+ {{ $t("已当前最优价格交易") }}
+ </div>
+ <!-- 交易金额输入框 -->
+ <div class="form-item">
+ <van-field
+ v-model="tradeAmount"
+ :placeholder="$t('交易金额')"
+ type="number"
+ />
+ </div>
+ <div class="balance" v-if="tradeDirection === 'open'">
+ <div class="text">{{ $t("可用") }}</div>
+ <div class="value">{{ initOpen.volume }} USDT</div>
+ <div
+ class="exchangeicon"
+ @click="$router.push('/exchange/exchangePage')"
+ >
+ <van-icon name="sort" />
+ </div>
+ </div>
+ <div class="balance" v-else>
+ <div class="text">{{ $t("可卖") }}</div>
+ <div class="value">{{ initClose.volume }} {{ symbolname }}</div>
+ <div
+ class="exchangeicon"
+ @click="$router.push('/exchange/exchangePage')"
+ >
+ <van-icon name="sort" />
+ </div>
+ </div>
+ <!-- 百分比按钮 -->
+ <div class="percentage-buttons">
+ <button
+ v-for="percent in [20, 50, 75, 100]"
+ :key="percent"
+ @click="setPercentage(percent)"
+ >
+ {{ percent }}%
+ </button>
+ </div>
+ </div>
+ <!-- 底部按钮 -->
+ <div class="popup-footer">
+ <button
+ class="confirm-btn"
+ :class="tradeDirection === 'open' ? 'buy' : 'sell'"
+ @click="confirmTrade"
+ >
+ {{ tradeDirection === "open" ? $t("买入") : $t("卖出") }}
+ </button>
+ </div>
+ </van-popup>
+
<!-- tab 区域-->
<div class="pb-180 tabContent">
<van-tabs v-model="active">
@@ -368,6 +440,9 @@
import { getStorage } from "@/utils/utis";
import PopupDelivery from "@/components/popup-delivery";
import PopupConfirmOrder from "@/components/popup-confirm-order";
+import TradeApi from "@/API/trading.js";
+// import Axios from "@/API/trading";
+
export default {
name: "TrendDetails",
components: {
@@ -391,6 +466,22 @@
});
}
return {
+ // 买入卖出
+ showTradePopup: false, // 控制弹窗显示
+ tradeDirection: "open", // 当前交易方向,"open" 或 "sell"
+ tradeAmount: "", // 交易金额
+ balance: 1000, // 用户余额(假设为 1000)
+ initOpen: {},
+ initClose: {},
+ form: {
+ volume: "",
+ session_token: "",
+ symbol: "", // 币种
+ price: "",
+ total: "",
+ order_price_type: "opponent", // 市价or限价
+ },
+
show: false,
direction: "buy",
initFutrue: {},
@@ -442,6 +533,11 @@
this.symbolname = getStorage("symbolname");
},
created() {},
+ filters: {
+ nan(val) {
+ return isNaN(val) ? "--" : val;
+ },
+ },
watch: {
active(val) {
// tab切换
@@ -463,6 +559,109 @@
},
},
methods: {
+ // 买入卖出
+ // 打开弹窗
+ openTradePopup(direction) {
+ this.tradeDirection = direction;
+ this.showTradePopup = true;
+ this.initParam(this.symbol, direction);
+ },
+ initParam(symbol, type) {
+ // 初始化参数
+ if (type === "open" || !type) {
+ //console.log('开仓数据')
+ TradeApi.tradeBuyToken({}).then((res) => {
+ this.initOpen = res.data;
+ console.log(this.initOpen.volume, res.data.volume, type);
+ });
+ }
+ if (type === "sell" || !type) {
+ TradeApi.tradeSellToken({
+ symbol,
+ }).then((res) => {
+ this.initClose = res.data;
+ });
+ }
+ // this.getWallet();
+ // if (this.userInfo.token) {
+ // this.getOrderList();
+ // }
+ },
+ // 设置百分比
+ setPercentage(percent) {
+ if (this.tradeDirection === "open") {
+ this.tradeAmount = ((this.initOpen.volume * percent) / 100).toFixed(2);
+ } else {
+ this.tradeAmount = ((this.initClose.volume * percent) / 100).toFixed(2);
+ }
+ },
+ // 确认交易
+ confirmTrade() {
+ if (!this.userInfo.token) {
+ this.$router.push("/login");
+ return;
+ }
+ // let volume = "";
+ // if (this.isTotal) {
+ if (!this.tradeAmount) {
+ this.$toast.fail(this.$t("请输入总额"));
+ return;
+ }
+ // if (this.currentType === "buy") {
+ // this.form.volume = parseFloat(this.form.total).toFixed(5);
+ // } else {
+ // this.form.volume =
+ // parseFloat(this.form.total) / parseFloat(this.form.price);
+ // this.form.volume = this.form.volume.toFixed(5);
+ // }
+ // volume = this.form.volume;
+ // } else {
+ // if (!this.form.volume) {
+ // this.$toast.fail(this.$t("请输入数量"));
+ // return;
+ // }
+ // if (this.currentType === "buy") {
+ // volume = parseFloat(this.form.volume) * parseFloat(this.form.price);
+ // } else {
+ // volume = this.form.volume;
+ // }
+ // }
+ this.form.symbol = this.$route.params.symbol;
+ let _order = null; // api
+ // let emitFunc = null; // 触发函数
+
+ if (this.tradeDirection === "open") {
+ this.form.session_token = this.initOpen.session_token;
+ } else {
+ this.form.session_token = this.initClose.session_token;
+ }
+ _order =
+ this.tradeDirection === "open" ? TradeApi.tradeBuy : TradeApi.tradeSell;
+ // emitFunc = this.tradeDirection;
+ _order({
+ volume: this.tradeAmount,
+ session_token: this.form.session_token,
+ symbol: this.form.symbol, // 币种
+ price: this.form.price,
+ // total: this.form.total,
+ order_price_type: "opponent", // 市价or限价
+ })
+ .then((res) => {
+ this.$toast(this.$t("操作成功"));
+ this.tradeAmount = "";
+ // this.form.total = "";
+ // _getBalance().then((data) => {
+ // 刷新余额
+ // this.$store.commit("user/SET_USERINFO", { balance: data.money });
+ // });
+ // this.$emit("ordered", emitFunc);
+ })
+ .catch(() => {
+ // 也需要重新初始化
+ // this.$emit("ordered", emitFunc);
+ });
+ this.showTradePopup = false;
+ },
onChangeLine() {
this.isChangeLine = true;
},
@@ -1003,4 +1202,123 @@
height: 100% !important;
}
}
+
+.operateBtnGroup {
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ padding: 2.4rem 0;
+ color: #fff;
+ .btn {
+ width: 18rem;
+ height: 5rem;
+ text-align: center;
+ line-height: 5rem;
+ border-radius: 1rem;
+ font-size: 1.8rem;
+ }
+ .buy {
+ background-color: #13c366;
+ }
+ .sell {
+ background-color: #f6003c;
+ }
+}
+
+.trade-popup {
+ box-sizing: border-box;
+ padding: 2rem 2rem 15rem 2rem;
+ background-color: #1e1e1e; // 黑夜模式背景色
+ border-radius: 1rem 1rem 0 0;
+
+ .popup-header {
+ text-align: center;
+ font-size: 1.8rem;
+ font-weight: bold;
+ color: #ffffff; // 白色字体
+ margin-bottom: 2rem;
+ }
+
+ .popup-content {
+ .form-item {
+ margin-bottom: 2rem;
+
+ label {
+ display: block;
+ font-size: 1.4rem;
+ color: #cccccc; // 灰色字体
+ margin-bottom: 0.8rem;
+ }
+ }
+
+ .percentage-buttons {
+ display: flex;
+ justify-content: space-between;
+
+ button {
+ flex: 1;
+ margin: 0 0.5rem;
+ padding: 1rem 0;
+ background-color: #333333; // 深灰色按钮背景
+ border: none;
+ border-radius: 0.5rem;
+ font-size: 1.4rem;
+ color: #ffffff; // 白色字体
+
+ &:hover {
+ background-color: #444444; // 按钮悬停效果
+ }
+ }
+ }
+ }
+
+ .popup-footer {
+ margin-top: 2rem;
+
+ .confirm-btn {
+ width: 100%;
+ padding: 1rem 0;
+ font-size: 1.6rem;
+ font-weight: bold;
+ border: none;
+ border-radius: 0.5rem;
+
+ &.buy {
+ background-color: #13c366; // 买入绿色
+ color: #ffffff;
+ }
+
+ &.sell {
+ background-color: #f6003c; // 卖出红色
+ color: #ffffff;
+ }
+ }
+ }
+}
+
+.balance {
+ display: flex;
+ justify-content: space-between;
+ color: #fff;
+ font-size: 1.6rem;
+ align-items: center;
+ .exchangeicon {
+ transform: rotate(90deg);
+ height: 3.5rem;
+ width: 3.5rem;
+ }
+}
+.popup-content {
+ :deep(.van-field__body) {
+ height: 5rem;
+ padding-left: 1.3rem;
+ }
+}
+.form-item_wrp {
+ height: 5rem;
+ padding-left: 1.3rem;
+ background-color: #fff;
+ display: flex;
+ align-items: center;
+}
</style>
--
Gitblit v1.9.3