Răsfoiți Sursa

合约菜单添加筛选

liqingshan 1 lună în urmă
părinte
comite
1e3ce6e754

+ 32 - 12
code/src/components/layout/TheHeader.vue

@@ -79,11 +79,18 @@ const navItems = computed<NavItem[]>(() => {
     { key: 'nav.idoPresale', to: '/finance/ido', icon: 'ido' },
     { key: 'nav.claimAirdrop', to: '/finance/airdrop', icon: 'gift' },
   ]
+  const futuresChildren: NavChild[] = [
+    { key: 'futuresPage.pairSearchTag.oneType', to: '/futures/BTC-USDT?filter=1' },
+    { key: 'futuresPage.pairSearchTag.twoType', to: '/futures/BTC-USDT?filter=2' },
+    { key: 'futuresPage.pairSearchTag.threeType', to: '/futures/BTC-USDT?filter=3' },
+    { key: 'futuresPage.pairSearchTag.fourType', to: '/futures/BTC-USDT?filter=4' },
+  ]
   return [
     { key: 'nav.home', to: '/' },
     { key: 'nav.market', to: '/market' },
     { key: 'nav.spot', to: '/spot/BTC-USDT' },
-    { key: 'nav.futures', to: '/futures/BTC-USDT' },
+    { key: 'nav.futures', to: '/futures/BTC-USDT', children: futuresChildren },
+    { key: 'nav.rwa', to: '/rwa' },
     { key: 'nav.copyTrade', to: '/copy-trade' },
     { key: 'nav.finance', children: financeChildren },
     { key: 'nav.announcements', to: '/announcements' },
@@ -155,18 +162,9 @@ async function handleLogout() {
           class="nav-item-wrap"
           :class="{ 'has-dropdown': item.children }"
         >
-          <!-- 无子菜单 -->
-          <RouterLink
-            v-if="item.to"
-            :to="item.to"
-            class="nav-item"
-            :class="{ 'is-active': isActive(item) }"
-          >
-            {{ t(item.key) }}
-          </RouterLink>
-          <!-- 有子菜单 -->
+          <!-- 只有子菜单,没有to -->
           <span
-            v-else
+            v-if="item.children && !item.to"
             class="nav-item nav-item--dropdown"
             :class="{ 'is-active': isActive(item) }"
           >
@@ -175,6 +173,28 @@ async function handleLogout() {
               <path d="M0 0l5 6 5-6z"/>
             </svg>
           </span>
+          <!-- 只有to,没有子菜单 -->
+          <RouterLink
+            v-else-if="item.to && !item.children"
+            :to="item.to"
+            class="nav-item"
+            :class="{ 'is-active': isActive(item) }"
+          >
+            {{ t(item.key) }}
+          </RouterLink>
+          <!-- 既有to又有子菜单(合约) -->
+          <div v-else class="nav-item-wrap--both">
+            <RouterLink
+              :to="item.to!"
+              class="nav-item nav-item--dropdown"
+              :class="{ 'is-active': isActive(item) }"
+            >
+              {{ t(item.key) }}
+              <svg class="dropdown-arrow" width="10" height="10" viewBox="0 0 10 6" fill="currentColor">
+                <path d="M0 0l5 6 5-6z"/>
+              </svg>
+            </RouterLink>
+          </div>
           <!-- 下拉面板 -->
           <div v-if="item.children" class="dropdown-panel">
             <template v-for="(child, idx) in item.children" :key="child.to + (child.key ?? child.label ?? '')">

+ 4 - 0
code/src/locales/de.ts

@@ -7,6 +7,7 @@ export default {
 		market: 'Markt',
 		spot: 'Spot',
 		futures: 'Futures',
+		rwa: 'RWA',
 		copyTrade: 'Copy Trading',
 		finance: 'Finanzprodukte',
 		idoPresale: 'IDO-Vorverkauf',
@@ -119,6 +120,9 @@ export default {
 		heroImageAlt: 'iBit Handelsplattform',
 		aboutImageAlt: 'Unternehmensvorstellung',
 	},
+	rwa: {
+		comingSoon: 'In Entwicklung',
+	},
 	market: {
 		title: 'Echtzeitmarkt',
 		desc: 'Aktuelle Preise, Volumina und Kursschwankungen zur Marktverfolgung.',

+ 4 - 0
code/src/locales/en.ts

@@ -7,6 +7,7 @@ export default {
 		market: 'Market',
 		spot: 'Spot',
 		futures: 'Futures',
+		rwa: 'RWA',
 		copyTrade: 'Copy',
 		finance: 'Earn',
 		idoPresale: 'IDO Presale',
@@ -119,6 +120,9 @@ export default {
 		heroImageAlt: 'iBit Trading Platform',
 		aboutImageAlt: 'About Us',
 	},
+	rwa: {
+		comingSoon: 'Coming soon',
+	},
 	market: {
 		title: 'Live Market',
 		desc: 'Real-time prices, volumes, and 24h changes for major digital assets to help users stay on top of market trends.',

+ 4 - 0
code/src/locales/es.ts

@@ -7,6 +7,7 @@ export default {
     market: "Mercado",
     spot: "Spot",
     futures: "Futuros",
+    rwa: "RWA",
     copyTrade: "Copy Trading",
     finance: "Inversiones",
     idoPresale: "Preventa IDO",
@@ -129,6 +130,9 @@ export default {
     heroImageAlt: "Plataforma de trading iBit",
     aboutImageAlt: "Sobre Nosotros",
   },
+  rwa: {
+    comingSoon: 'En desarrollo',
+  },
   market: {
     title: "Mercado en Vivo",
     desc: "Precios en tiempo real, volúmenes y variaciones para monitorear la evolución del mercado.",

+ 4 - 0
code/src/locales/fr.ts

@@ -7,6 +7,7 @@ export default {
     market: 'Marché',
     spot: 'Spot',
     futures: 'Futures',
+    rwa: 'RWA',
     copyTrade: 'Copy Trading',
     finance: 'Finance',
     idoPresale: 'Pré-vente IDO',
@@ -119,6 +120,9 @@ export default {
     heroImageAlt: 'Plateforme iBit',
     aboutImageAlt: 'À propos de nous',
   },
+  rwa: {
+    comingSoon: 'En développement',
+  },
   market: {
     title: 'Marché en temps réel',
     desc: 'Prix, volumes et variations en temps réel.',

+ 4 - 0
code/src/locales/hi.ts

@@ -7,6 +7,7 @@ export default {
 		market: 'बाज़ार',
 		spot: 'स्पॉट',
 		futures: 'फ्यूचर्स',
+		rwa: 'RWA',
 		copyTrade: 'कॉपी ट्रेड',
 		finance: 'वित्त',
 		idoPresale: 'IDO प्रीसेल',
@@ -119,6 +120,9 @@ export default {
 		heroImageAlt: 'iBit ट्रेडिंग प्लेटफॉर्म',
 		aboutImageAlt: 'हमारे बारे में',
 	},
+	rwa: {
+		comingSoon: 'विकास के दौरान',
+	},
 	market: {
 		title: 'लाइव बाज़ार',
 		desc: 'प्रमुख डिजिटल संपत्तियों के रियल-टाइम मूल्य, वॉल्यूम और 24 घंटे के बदलाव उपयोगकर्ताओं को बाज़ार की प्रवृत्तियों पर नज़र रखने में मदद करते हैं।',

+ 4 - 0
code/src/locales/id.ts

@@ -7,6 +7,7 @@ export default {
     market: 'Pasar',
     spot: 'Spot',
     futures: 'Futures',
+    rwa: 'RWA',
     copyTrade: 'Copy Trade',
     finance: 'Keuangan',
     idoPresale: 'IDO Presale',
@@ -119,6 +120,9 @@ export default {
     heroImageAlt: 'Platform Trading iBit',
     aboutImageAlt: 'Tentang Kami',
   },
+  rwa: {
+    comingSoon: 'Sedang dikembangkan',
+  },
   market: {
     title: 'Pasar Langsung',
     desc: 'Harga real-time, volume, dan perubahan 24 jam untuk aset digital utama membantu pengguna mengikuti tren pasar.',

+ 4 - 0
code/src/locales/ja.ts

@@ -7,6 +7,7 @@ export default {
     market: '相場',
     spot: '現物',
     futures: '先物',
+    rwa: 'RWA',
     copyTrade: 'コピー取引',
     finance: '資産運用',
     idoPresale: 'IDOプレセール',
@@ -119,6 +120,9 @@ export default {
     heroImageAlt: 'iBit 取引プラットフォーム',
     aboutImageAlt: '会社概要',
   },
+  rwa: {
+    comingSoon: '開発中です',
+  },
   market: {
     title: 'リアルタイム相場',
     desc: '主要デジタル資産のリアルタイム価格・出来高・24時間変動率データを提供し、ユーザーが市場動向を素早く把握できます。',

+ 4 - 0
code/src/locales/ko.ts

@@ -7,6 +7,7 @@ export default {
     market: '시세',
     spot: '현물',
     futures: '선물',
+    rwa: 'RWA',
     copyTrade: '복사거래',
     finance: '재테크',
     idoPresale: 'IDO 프리세일',
@@ -119,6 +120,9 @@ export default {
     heroImageAlt: 'iBit 거래 플랫폼',
     aboutImageAlt: '회사 소개',
   },
+  rwa: {
+    comingSoon: '개발 중입니다',
+  },
   market: {
     title: '실시간 시세',
     desc: '주요 디지털 자산의 실시간 가격, 거래량, 24시간 등락폭 데이터를 제공하여 사용자가 시장 동향을 빠르게 파악할 수 있도록 합니다.',

+ 4 - 0
code/src/locales/pt.ts

@@ -8,6 +8,7 @@ export default {
 		market: 'Mercado',
 		spot: 'Spot',
 		futures: 'Futuros',
+		rwa: 'RWA',
 		copyTrade: 'Copy Trading',
 		finance: 'Investimentos',
 		idoPresale: 'Pré-venda IDO',
@@ -120,6 +121,9 @@ export default {
 		heroImageAlt: 'Plataforma de negociação iBit',
 		aboutImageAlt: 'Sobre a empresa',
 	},
+	rwa: {
+		comingSoon: 'Em desenvolvimento',
+	},
 	market: {
 		title: 'Mercado em Tempo Real',
 		desc: 'Preços atualizados, volumes e variações para acompanhar o mercado.',

+ 4 - 0
code/src/locales/ru.ts

@@ -7,6 +7,7 @@ export default {
 		market: 'Рынок',
 		spot: 'Спот',
 		futures: 'Фьючерсы',
+		rwa: 'RWA',
 		copyTrade: 'Копи-трейдинг',
 		finance: 'Инвестиции',
 		idoPresale: 'Предпродажа IDO',
@@ -119,6 +120,9 @@ export default {
 		heroImageAlt: 'Торговая платформа iBit',
 		aboutImageAlt: 'О компании',
 	},
+	rwa: {
+		comingSoon: 'В разработке',
+	},
 	market: {
 		title: 'Живой рынок',
 		desc: 'Актуальные цены, объёмы и изменения для отслеживания рыночной ситуации.',

+ 4 - 0
code/src/locales/tr.ts

@@ -7,6 +7,7 @@ export default {
     market: 'Piyasa',
     spot: 'Spot',
     futures: 'Futures',
+    rwa: 'RWA',
     copyTrade: 'Kopya İşlem',
     finance: 'Finans',
     idoPresale: 'IDO Ön Satış',
@@ -119,6 +120,9 @@ export default {
     heroImageAlt: 'iBit Platformu',
     aboutImageAlt: 'Hakkımızda',
   },
+  rwa: {
+    comingSoon: 'Geliştiriliyor',
+  },
   market: {
     title: 'Anlık Piyasa',
     desc: 'Fiyatlar, hacimler ve değişimler anlık',

+ 4 - 0
code/src/locales/vi.ts

@@ -7,6 +7,7 @@ export default {
 		market: 'Thị trường',
 		spot: 'Giao ngay',
 		futures: 'Hợp đồng tương lai',
+		rwa: 'RWA',
 		copyTrade: 'Sao chép giao dịch',
 		finance: 'Kiếm lãi',
 		idoPresale: 'Đặt trước IDO',
@@ -119,6 +120,9 @@ export default {
 		heroImageAlt: 'Nền tảng giao dịch iBit đa thiết bị',
 		aboutImageAlt: 'Thông tin về iBit',
 	},
+	rwa: {
+		comingSoon: 'Đang phát triển',
+	},
 	market: {
 		title: 'Thị trường thời gian thực',
 		desc: 'Cập nhật giá, khối lượng và biến động 24h các coin lớn, nắm bắt nhanh xu hướng thị trường.',

+ 14 - 10
code/src/locales/zh-CN.ts

@@ -7,6 +7,7 @@ export default {
     market: '行情',
     spot: '现货',
     futures: '合约',
+    rwa: 'RWA',
     copyTrade: '跟单',
     finance: '理财',
     idoPresale: 'IDO预售',
@@ -26,13 +27,13 @@ export default {
     ja: '日本語',
     hi: 'हिन्दी',
     id: 'Bahasa Indonesia',
-	es: 'Español',		   // 西班牙语
-	ru: 'Русский',         // 俄语
-	pt: 'Português',       // 葡萄牙语
-	de: 'Deutsch',         // 德语
-	fr: 'Français',        // 法语
-	tr: 'Türkçe',          // 土耳其语
-	vi: 'Tiếng Việt'       // 越南语
+    es: 'Español',		   // 西班牙语
+    ru: 'Русский',         // 俄语
+    pt: 'Português',       // 葡萄牙语
+    de: 'Deutsch',         // 德语
+    fr: 'Français',        // 法语
+    tr: 'Türkçe',          // 土耳其语
+    vi: 'Tiếng Việt'       // 越南语
   },
   header: {
     login: '登录',
@@ -122,6 +123,9 @@ export default {
     heroImageAlt: 'iBit 交易平台多端展示',
     aboutImageAlt: '关于我们',
   },
+  rwa: {
+    comingSoon: '功能开发中,敬请期待',
+  },
   market: {
     title: '实时行情',
     desc: '提供主流数字资产的实时价格、成交量与涨跌幅数据,帮助用户快速掌握市场动态。',
@@ -1187,9 +1191,9 @@ export default {
       h1: '1小时',
       h4: '4小时',
       d1: '1日',
-	  w1: "1周",
-	  mo1: "1月",
-	  mo3: "3月"
+      w1: "1周",
+      mo1: "1月",
+      mo3: "3月"
     },
     ohlcv: {
       spotLabel: '现货',

+ 4 - 0
code/src/locales/zh-TW.ts

@@ -7,6 +7,7 @@ export default {
     market: '行情',
     spot: '現貨',
     futures: '合約',
+    rwa: 'RWA',
     copyTrade: '跟單',
     finance: '理財',
     idoPresale: 'IDO預售',
@@ -112,6 +113,9 @@ export default {
     heroImageAlt: 'iBit 交易平台多端展示',
     aboutImageAlt: '關於我們',
   },
+  rwa: {
+    comingSoon: '功能開發中,敬請期待',
+  },
   market: {
     title: '即時行情',
     desc: '提供主流數位資產的即時價格、成交量與漲跌幅資料,幫助用戶快速掌握市場動態。',

+ 6 - 0
code/src/router/index.ts

@@ -43,6 +43,12 @@ const router = createRouter({
       component: () => import('@/views/FuturesView.vue'),
       meta: { title: 'U本位合约' },
     },
+    {
+      path: '/rwa',
+      name: 'rwa',
+      component: () => import('@/views/RwaView.vue'),
+      meta: { title: 'RWA' },
+    },
     {
       path: '/copy-trade',
       name: 'copy-trade',

+ 23 - 0
code/src/views/FuturesView.vue

@@ -2050,8 +2050,31 @@ onMounted(async () => {
   ws.connect(sym, klineResolution.value);
   countdownTimer = setInterval(updateCountdown, 1000);
   window.addEventListener("resize", onWindowResize);
+  
+  // 从 URL 参数获取筛选类型并自动打开搜索框
+  const filter = route.query.filter as string;
+  if (filter) {
+    const filterNum = parseInt(filter);
+    if (!isNaN(filterNum) && filterNum >= 1 && filterNum <= 4) {
+      currentSearchTag.value = filterNum;
+      showPairSelector.value = true;
+    }
+  }
 });
 
+watch(
+  () => route.query.filter,
+  (newFilter) => {
+    if (newFilter) {
+      const filterNum = parseInt(newFilter as string);
+      if (!isNaN(filterNum) && filterNum >= 1 && filterNum <= 4) {
+        currentSearchTag.value = filterNum;
+        showPairSelector.value = true;
+      }
+    }
+  }
+);
+
 watch(
   () => route.params.symbol,
   async (sym) => {

+ 47 - 0
code/src/views/RwaView.vue

@@ -0,0 +1,47 @@
+<script setup lang="ts">
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
+</script>
+
+<template>
+  <div class="rwa-view page-container">
+    <div class="rwa-content">
+      <div class="rwa-icon">🔄</div>
+      <h1 class="rwa-title">{{ t('nav.rwa') }}</h1>
+      <p class="rwa-desc">{{ t('rwa.comingSoon') }}</p>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.rwa-view {
+  min-height: calc(100vh - var(--header-height));
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: var(--space-8) 0;
+}
+
+.rwa-content {
+  text-align: center;
+  padding: var(--space-8);
+}
+
+.rwa-icon {
+  font-size: 64px;
+  margin-bottom: var(--space-4);
+}
+
+.rwa-title {
+  font-size: var(--text-h1);
+  font-weight: var(--fw-bold);
+  color: var(--color-text-primary);
+  margin-bottom: var(--space-3);
+}
+
+.rwa-desc {
+  font-size: var(--text-body);
+  color: var(--color-text-secondary);
+}
+</style>