From 4f9044ae2a9f2db03bbb916bc5f6dfd12916361d Mon Sep 17 00:00:00 2001
From: 李 <344137771@qq.com>
Date: Wed, 03 Jun 2026 16:10:01 +0800
Subject: [PATCH] 1

---
 src/views/cryptos/PerpetualContract/orderDetail.vue |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/src/views/cryptos/PerpetualContract/orderDetail.vue b/src/views/cryptos/PerpetualContract/orderDetail.vue
index c0e9c3e..05c80e7 100644
--- a/src/views/cryptos/PerpetualContract/orderDetail.vue
+++ b/src/views/cryptos/PerpetualContract/orderDetail.vue
@@ -27,6 +27,16 @@
           <div class="text-grey">{{ $t('可平金额') }}</div>
           <div class="textColor">{{ detail.amount }}</div>
         </div>
+        <div class="flex justify-between cell-item cell-item--funding">
+          <div class="text-grey">
+            <div>{{ $t('资金费') }}</div>
+            <div class="text-22 mt-2 funding-countdown-hint">{{ $t('距下次结算') }}</div>
+          </div>
+          <div class="textColor text-right">
+            <div>{{ detail.funding_fee }}</div>
+            <div class="text-26 mt-2 funding-countdown">{{ fundingCountdownDisplay }}</div>
+          </div>
+        </div>
         <div class="flex justify-between cell-item">
           <div class="text-grey">{{ $t('保证金') }}</div>
           <div class="textColor">{{ detail.deposit }}</div>
@@ -77,7 +87,11 @@
       detail: {
 
       },
-      timer: null
+      timer: null,
+      /** 资金费周期倒计时刷新(与订单轮询分离) */
+      fundingCountdownTimer: null,
+      /** 到下一 4 小时整点(UTC 日内第 2–6 阶段起点)剩余时间 HH:mm:ss */
+      fundingCountdownDisplay: '04:00:00',
     }
   },
   components: {
@@ -89,9 +103,34 @@
     this.timer = setInterval(() => {
       this.fetchDetail(order_no);
     }, 1000);
+    this.tickFundingCountdown();
+    this.fundingCountdownTimer = setInterval(() => this.tickFundingCountdown(), 1000);
   },
 
   methods: {
+    /**
+     * 一天按 UTC 分为 6 个阶段(每阶段 4h),每到整点阶段边界倒计时重新从 4:00:00 计起。
+     */
+    tickFundingCountdown() {
+      const PHASE_MS = 4 * 60 * 60 * 1000;
+      const now = Date.now();
+      const d = new Date(now);
+      const utcMidnight = Date.UTC(
+        d.getUTCFullYear(),
+        d.getUTCMonth(),
+        d.getUTCDate(),
+        0, 0, 0, 0
+      );
+      const elapsed = now - utcMidnight;
+      const remainder = PHASE_MS - (elapsed % PHASE_MS);
+      const totalSec = Math.floor(remainder / 1000);
+      const h = Math.floor(totalSec / 3600);
+      const m = Math.floor((totalSec % 3600) / 60);
+      const s = totalSec % 60;
+      this.fundingCountdownDisplay = [h, m, s]
+        .map((n) => String(n).padStart(2, '0'))
+        .join(':');
+    },
     dayjs,
     handleText(state) {
       let str = '';
@@ -139,7 +178,11 @@
     },
   },
   beforeUnmount() {
-    this.clearTimer()
+    this.clearTimer();
+    if (this.fundingCountdownTimer) {
+      clearInterval(this.fundingCountdownTimer);
+      this.fundingCountdownTimer = null;
+    }
   }
 }
 </script>
@@ -160,6 +203,15 @@
     padding: 0 30px 30px 30px;
   }
 
+  .funding-countdown {
+    font-variant-numeric: tabular-nums;
+    letter-spacing: 0.02em;
+  }
+
+  .funding-countdown-hint {
+    opacity: 0.85;
+  }
+
   .mt-30 {
     margin-top: 30px;
   }

--
Gitblit v1.9.3