From d36e6b733fbc7f1b4a7fd942740b5e14b74e7147 Mon Sep 17 00:00:00 2001
From: 李 <344137771@qq.com>
Date: Wed, 29 Apr 2026 14:28:56 +0800
Subject: [PATCH] 1

---
 src/i18n/Deutsch.js                                |    2 
 src/i18n/Portuguese.js                             |    2 
 src/i18n/korean.js                                 |    2 
 src/i18n/th.js                                     |    2 
 src/i18n/fa.js                                     |    2 
 src/i18n/Italy.js                                  |    2 
 src/i18n/Japanese.js                               |    2 
 src/i18n/vi.js                                     |    2 
 src/views/homePage/index.vue                       |   13 +
 src/i18n/cn.js                                     |    2 
 src/assets/imgs/new/kyc-reward.png                 |    0 
 src/i18n/en.js                                     |    2 
 src/i18n/zhcn.js                                   |    2 
 src/views/quotes/List.vue                          |    4 
 src/components/Transform/list-quotation/index.vue  |   18 ++
 src/assets/css/variable.scss                       |    2 
 src/views/cryptos/Recharge/rechargeList.vue        |  181 +++++++++++++++++++++++++
 src/config/index.js                                |    6 
 src/views/customerService/index.vue                |    9 
 src/components/Transform/contract-header/index.vue |   10 
 src/components/Transform/perpetual-open/index.vue  |  110 ++++++++++++---
 src/i18n/Spanish.js                                |    2 
 22 files changed, 326 insertions(+), 51 deletions(-)

diff --git a/src/assets/css/variable.scss b/src/assets/css/variable.scss
index 2664637..7707555 100644
--- a/src/assets/css/variable.scss
+++ b/src/assets/css/variable.scss
@@ -44,7 +44,7 @@
 $delivery_tab_background: #f6f5fa;
 $search_background: #f6f5fa;
 $pledgeLoan_background: #1a1a1a;
-$bg_yellow: #f6f5fa;
+$bg_yellow: #FFB900;
 $log-c: #1a1a1a;
 $icon-bg: #e8e8e8;
 $inp-b: #f6f5fa;
diff --git a/src/assets/imgs/new/kyc-reward.png b/src/assets/imgs/new/kyc-reward.png
index c24deaf..223a89d 100644
--- a/src/assets/imgs/new/kyc-reward.png
+++ b/src/assets/imgs/new/kyc-reward.png
Binary files differ
diff --git a/src/components/Transform/contract-header/index.vue b/src/components/Transform/contract-header/index.vue
index 11236b6..597effc 100644
--- a/src/components/Transform/contract-header/index.vue
+++ b/src/components/Transform/contract-header/index.vue
@@ -22,14 +22,14 @@
                             @click="jump" />
                     </div> -->
         </div>
-        <!-- <div class="flex justify-between  pt-34">
+        <div class="flex justify-between  pt-34">
           <button class="tabBtn w-368 h-74 lh-74 border-none  rounded"
             :class="selectIndex == 1 ? 'select-active' : 'no-select'" @click="changeTab(1)">
-            {{ $t('永续合约') }}</button>
+            {{ $t('永续') }}</button>
           <button class="tabBtn w-368 h-74 lh-74 border-none  rounded"
             :class="selectIndex == 2 ? 'select-one-active' : 'no-select'" @click="changeTab(2)">
-            {{ queryType == 'cryptos' ? $t('交割合约') : $t('期货交易') }}</button>
-        </div> -->
+            {{ queryType == 'cryptos' ? $t('期权') : $t('期货交易') }}</button>
+        </div>
       </div>
     </div>
     <!-- 左侧边弹出菜单 -->
@@ -125,7 +125,7 @@
   computed: {
     ...mapGetters({ coinList: 'home/coinList' }),
     title() {
-      return [this.$t('永续'), this.$t('交割')][this.selectIndex - 1]
+      return [this.$t('永续'), this.$t('期权')][this.selectIndex - 1]
     }
   },
   data() {
diff --git a/src/components/Transform/list-quotation/index.vue b/src/components/Transform/list-quotation/index.vue
index fd62d42..fb2f09f 100644
--- a/src/components/Transform/list-quotation/index.vue
+++ b/src/components/Transform/list-quotation/index.vue
@@ -163,14 +163,24 @@
   methods: {
     ...mapActions('home', [SET_CURRENCY]),
     onItemClick(item) {
-      if (this.tabActive == 2) { //现货
+      const tab = this.tabActive !== undefined && this.tabActive !== null ? Number(this.tabActive) : 2;
+      if (tab === 1) {
+        // 现货
         this.$router.push({
           path: `/cryptos/trade/${item.symbol}`
         });
-      } else {
-        setStorage('symbol', item.symbol)
+      } else if (tab === 3) {
+        // 期权:交割合约,跳转交易页并带 selectIndex=2
+        setStorage('symbol', item.symbol);
         this.$router.push({
-          path: `/cryptos/perpetualContract/${item.symbol}`,
+          path: '/trade/index',
+          query: { selectIndex: 2 }
+        });
+      } else {
+        // 全部(0) 或 永续(2)
+        setStorage('symbol', item.symbol);
+        this.$router.push({
+          path: `/trade/index`,
           query: { type: 'cryptos' }
         });
       }
diff --git a/src/components/Transform/perpetual-open/index.vue b/src/components/Transform/perpetual-open/index.vue
index e1c869a..93f2a4a 100644
--- a/src/components/Transform/perpetual-open/index.vue
+++ b/src/components/Transform/perpetual-open/index.vue
@@ -53,7 +53,7 @@
                     '%,rgba(246,70,93,.1) 100%)'
                 }">
                 <div class="text-red">{{ item.price }}</div>
-                <div class="text-right textColor"  v-if="symbol == 'shib'">
+                <div class="text-right textColor" v-if="symbol == 'shib'">
                   {{ fixDate(item.amount, $i18n) || "--" }}
                 </div>
                 <div class="text-right textColor" style="padding-right: 5px;" v-else>
@@ -102,7 +102,7 @@
                 <div class="text-right textColor" v-if="symbol_data == 'shib'">
                   {{ fixDate(item.amount, $i18n) || "--" }}
                 </div>
-                <div class="text-right textColor"  v-else style="padding-right: 5px;">
+                <div class="text-right textColor" v-else style="padding-right: 5px;">
                   {{ item.amount || "--" }}
                 </div>
 
@@ -151,10 +151,11 @@
                     <van-icon name="success" color="#5e2bc8" size="18" class="mr-10" />
                     {{ $t('永续') }}: {{ (initFutrue.amount || 0) }} USDT
                   </div>
-                  <img src="@/assets/image/asset-function3.png" alt="" class="trade-futures-transfer-icon w-60 h-60" @click="$router.push('/my/transfer')" />
+                  <img src="@/assets/image/asset-function3.png" alt="" class="trade-futures-transfer-icon w-60 h-60"
+                    @click="$router.push('/my/transfer')" />
                 </div>
                 <div class="flex items-center font-26 text-grey mt-12 pl-50">
-                  {{ $t('Bonus') }}: {{initFutrue.capitaltAmount || 0}} USDT
+                  {{ $t('Bonus') }}: {{ initFutrue.capitaltAmount || 0 }} USDT
                 </div>
               </div>
               <div class="mt-22 mb-30" style="position:relative;">
@@ -260,10 +261,10 @@
               </div> -->
             </template>
 
-            <!-- <div class="flex font-24 text-grey justify-between mt-32">
+            <div class="flex font-24 text-grey justify-between mt-32">
               <div>{{ $t("可用USDT") }}</div>
               <div class="textColor">{{ initFutrue.amount }} USDT</div>
-            </div> -->
+            </div>
             <div class="flex font-24 text-grey justify-between mt-20"
               v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
               <div>{{ $t("手续费") }}</div>
@@ -339,7 +340,7 @@
                 {{ $t('logIn') }}</div>
             </div>
           </div>
-          
+
         </div>
       </div>
       <van-popup v-model:show="show" class="rounded-2xl">
@@ -359,16 +360,18 @@
             <span class="lever-popup-close" @click="showLeverPopup = false">×</span>
           </div>
           <div class="lever-popup-segment">
-            <div class="lever-popup-seg-item lever-popup-seg-left" :class="{ 'lever-popup-seg-active': leverPopupMargin === 1 }"
-              @click="leverPopupMargin = 1">Cross</div>
-            <div class="lever-popup-seg-item lever-popup-seg-right" :class="{ 'lever-popup-seg-active': leverPopupMargin === 0 }"
-              @click="leverPopupMargin = 0">Part</div>
+            <div class="lever-popup-seg-item lever-popup-seg-left"
+              :class="{ 'lever-popup-seg-active': leverPopupMargin === 1 }" @click="leverPopupMargin = 1">Cross</div>
+            <div class="lever-popup-seg-item lever-popup-seg-right"
+              :class="{ 'lever-popup-seg-active': leverPopupMargin === 0 }" @click="leverPopupMargin = 0">Part</div>
           </div>
           <div class="lever-popup-row">
-            <div class="lever-popup-btn lever-popup-btn-minus" @click="leverPopupValue = Math.max(1, (leverPopupValue || 1) - 1)">−</div>
+            <div class="lever-popup-btn lever-popup-btn-minus"
+              @click="leverPopupValue = Math.max(1, (leverPopupValue || 1) - 1)">−</div>
             <input v-model.number="leverPopupValue" type="number" class="lever-popup-input" min="1" :max="maxLever"
               @input="onLeverInput" />
-            <div class="lever-popup-btn lever-popup-btn-plus" @click="leverPopupValue = Math.min(maxLever, (leverPopupValue || 1) + 1)">+</div>
+            <div class="lever-popup-btn lever-popup-btn-plus"
+              @click="leverPopupValue = Math.min(maxLever, (leverPopupValue || 1) + 1)">+</div>
           </div>
           <div class="lever-popup-slider-wrap">
             <span class="lever-popup-slider-label">1X</span>
@@ -1042,6 +1045,8 @@
 }
 
 #cryptos {
+  background-color: #fff !important;
+
   .perpetual-open {
     font-size: 26px;
   }
@@ -1261,6 +1266,7 @@
   padding: 14px 18px;
   border-radius: 12px;
 }
+
 .trade-top-selectors .trade-selector {
   flex: 1;
   display: flex;
@@ -1271,6 +1277,7 @@
   cursor: pointer;
   min-height: 72px;
 }
+
 .trade-top-selectors .trade-selector-tag {
   padding: 8px 20px;
   border-radius: 6px;
@@ -1280,12 +1287,15 @@
   margin-right: 16px;
   flex-shrink: 0;
 }
+
 .trade-top-selectors .trade-selector-tag--green {
   background: #0ecb81;
 }
+
 .trade-top-selectors .trade-selector-tag--red {
   background: #f6465d;
 }
+
 .trade-top-selectors .trade-selector-text {
   flex: 1;
   font-size: 28px;
@@ -1293,6 +1303,7 @@
   color: #1e1e1e;
   min-width: 0;
 }
+
 .trade-top-selectors .trade-selector-arrow {
   font-size: 28px;
   color: #999;
@@ -1300,12 +1311,13 @@
   margin-left: 8px;
 }
 
-.perpetual-open-form > div,
-.perpetual-open-form > .order-area_tabs,
-.perpetual-open-form > .trade-futures-bonus,
+.perpetual-open-form>div,
+.perpetual-open-form>.order-area_tabs,
+.perpetual-open-form>.trade-futures-bonus,
 .perpetual-open-form .trade-long-margin {
   margin-bottom: 10px !important;
 }
+
 .perpetual-open-form .mt-20,
 .perpetual-open-form .mb-20,
 .perpetual-open-form .mb-30,
@@ -1314,18 +1326,22 @@
   margin-top: 0 !important;
   margin-bottom: 10px !important;
 }
+
 /* perpetual-open-form 下圆角统一 10px */
 .perpetual-open-form .rounded-lg,
 .perpetual-open-form .rounded-ban,
 .perpetual-open-form .option-box {
   border-radius: 10px !important;
 }
+
 .perpetual-open-form .order-area_tabs {
   border-radius: 10px 10px 0 0 !important;
 }
+
 .perpetual-open-form .order-area_tabs .order-tab--left {
   border-radius: 10px 0 0 0 !important;
 }
+
 .perpetual-open-form .order-area_tabs .order-tab--right {
   border-radius: 0 10px 0 0 !important;
 }
@@ -1353,6 +1369,7 @@
   border-radius: 8px 8px 0 0;
   overflow: hidden;
 }
+
 .order-area_tabs .order-tabs-buttons {
   display: flex;
   justify-content: space-between;
@@ -1362,6 +1379,7 @@
   position: relative;
   z-index: 0;
 }
+
 .order-area_tabs .order-tab {
   flex: 0 0 calc(50%);
   width: calc(50%);
@@ -1369,28 +1387,35 @@
   transition: background 0.2s, color 0.2s;
   cursor: pointer;
 }
+
 .order-area_tabs .order-tab--left {
   border-radius: 8px 0 0 0;
 }
+
 .order-area_tabs .order-tab--right {
   border-radius: 0 8px 0 0;
 }
+
 .order-area_tabs .order-tab--buy {
   background: #38c172;
   color: #fff;
 }
+
 .order-area_tabs .order-tab-buy {
   background: #e8e8e8;
   color: #000;
 }
+
 .order-area_tabs .order-tab--sell {
   background: #f4374b;
   color: #fff;
 }
+
 .order-area_tabs .order-tab-sell {
   background: #e8e8e8;
   color: #000;
 }
+
 .order-area_tabs .order-tabs-bg {
   position: absolute;
   left: 49.3%;
@@ -1404,6 +1429,7 @@
   align-items: center;
   justify-content: center;
 }
+
 .order-area_tabs .order-tabs-bg-img {
   width: 100%;
   height: 100%;
@@ -1414,23 +1440,27 @@
 .lever-popup-wrap.van-popup {
   background: transparent;
 }
+
 .lever-popup {
   background: #fff;
   border-radius: 24px 24px 0 0;
   padding: 30px 36px 12px;
-  box-shadow: 0 -2px 30px rgba(0,0,0,0.08);
+  box-shadow: 0 -2px 30px rgba(0, 0, 0, 0.08);
 }
+
 .lever-popup-header {
   display: flex;
   align-items: center;
   justify-content: space-between;
   margin-bottom: 30px;
 }
+
 .lever-popup-title {
   font-size: 34px;
   font-weight: 600;
   color: #1e1e1e;
 }
+
 .lever-popup-close {
   font-size: 47px;
   color: #666;
@@ -1438,6 +1468,7 @@
   cursor: pointer;
   padding: 6px;
 }
+
 .lever-popup-segment {
   display: flex;
   align-items: stretch;
@@ -1445,6 +1476,7 @@
   border-radius: 15px;
   overflow: hidden;
 }
+
 .lever-popup-seg-item {
   flex: 1;
   padding: 18px 24px;
@@ -1453,14 +1485,22 @@
   color: #868e9a;
   transition: background 0.2s, color 0.2s, font-weight 0.2s;
 }
-.lever-popup-seg-left { border-radius: 15px 0 0 15px; }
-.lever-popup-seg-right { border-radius: 0 15px 15px 0; }
+
+.lever-popup-seg-left {
+  border-radius: 15px 0 0 15px;
+}
+
+.lever-popup-seg-right {
+  border-radius: 0 15px 15px 0;
+}
+
 .lever-popup-seg-item.lever-popup-seg-active {
   background: #fff;
   color: #1e1e1e;
   font-weight: 600;
-  box-shadow: 0 1px 6px rgba(0,0,0,0.06);
+  box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06);
 }
+
 .lever-popup-row {
   display: flex;
   align-items: stretch;
@@ -1469,6 +1509,7 @@
   overflow: hidden;
   border: 1px solid #eee;
 }
+
 .lever-popup-btn {
   width: 78px;
   min-width: 78px;
@@ -1481,8 +1522,15 @@
   cursor: pointer;
   font-weight: 400;
 }
-.lever-popup-btn-minus { border-radius: 15px 0 0 15px; }
-.lever-popup-btn-plus { border-radius: 0 15px 15px 0; }
+
+.lever-popup-btn-minus {
+  border-radius: 15px 0 0 15px;
+}
+
+.lever-popup-btn-plus {
+  border-radius: 0 15px 15px 0;
+}
+
 .lever-popup-input {
   flex: 1;
   min-width: 0;
@@ -1494,34 +1542,43 @@
   background: #fff;
   padding: 21px 12px;
 }
-.lever-popup-input:focus { outline: none; }
+
+.lever-popup-input:focus {
+  outline: none;
+}
+
 .lever-popup-slider-wrap {
   margin-top: 36px;
   display: flex;
   align-items: center;
   gap: 18px;
 }
+
 .lever-popup-slider-label {
   font-size: 23px;
   color: #868e9a;
   flex-shrink: 0;
 }
+
 .lever-popup-slider-inner {
   flex: 1;
   min-width: 0;
 }
+
 .lever-popup-slider :deep(.van-slider__bar) {
   height: 6px;
   background: linear-gradient(90deg, #7c3aed 0%, #5b21b6 100%) !important;
   border-radius: 3px;
 }
+
 .lever-popup-slider :deep(.van-slider__button) {
   width: 30px;
   height: 30px;
   background: #666;
   border: none;
-  box-shadow: 0 1px 4px rgba(0,0,0,0.2);
+  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
 }
+
 .lever-popup-confirm {
   margin-top: 42px;
   width: 100%;
@@ -1536,7 +1593,10 @@
 }
 
 .trade-futures-bonus {
-  .mr-10 { margin-right: 10px; }
+  .mr-10 {
+    margin-right: 10px;
+  }
+
   .trade-futures-transfer-icon {
     flex-shrink: 0;
     padding: 8px;
diff --git a/src/config/index.js b/src/config/index.js
index b66edae..a9bfb09 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -35,12 +35,12 @@
 
 // const ENV_DEV = 'zhapi.coinbtcs.com' // dev
 // const ENV_DEV = 'openapi.yanshiz.com' // dev
-const ENV_DEV = 'blueapi.shenliankeji.top' // dev
+const ENV_DEV = 'api.bingx.cyou' // dev
 // const ENV_DEV = '192.168.10.6:8086' // dev
 
 // const ENV_PRO = 'qheufhj.site' //  app域名
 // const ENV_PRO = window.location.hostname // 接口域名跟随 H5zhapi.coinbtcs.com
-const ENV_PRO = 'blueapi.shenliankeji.top' // 接口域名跟随 H5zhapi.coinbtcs.com
+const ENV_PRO = 'api.bingx.cyou' // 接口域名跟随 H5zhapi.coinbtcs.com
 // const ENV_PRO = '192.168.10.6:8086' // 接口域名跟随 H5zhapi.coinbtcs.com
 
 let base_url = ''
@@ -56,7 +56,7 @@
     ws_url = 'wss://' + ENV_PRO + '/api/websocket'
 }
 
-let imgUrl = 'https://blueimg.shenliankeji.top' // 暂时的 单独的图片地址
+let imgUrl = 'https://img.bingx.cyou' // 暂时的 单独的图片地址
 
 export const BASE_URL = base_url
 export const WS_URL = ws_url
diff --git a/src/i18n/Deutsch.js b/src/i18n/Deutsch.js
index 9ebbddf..c982c4c 100644
--- a/src/i18n/Deutsch.js
+++ b/src/i18n/Deutsch.js
@@ -340,6 +340,8 @@
     enterRechargeAmount: "Bitte geben Sie die Lademenge ein",
     amountNumber: "Die Anzahl der aufgeladenen Münzen ist eine Zahl",
     uploadImgPay: "Please load payment voucher",
+    "提交凭证": "Beleg einreichen",
+    "提交失败": "Übermittlung fehlgeschlagen",
     saveQr: "QR-Code speichern",
     network: "Blockchain Network",
 
diff --git a/src/i18n/Italy.js b/src/i18n/Italy.js
index 1112027..0f8c0d3 100644
--- a/src/i18n/Italy.js
+++ b/src/i18n/Italy.js
@@ -342,6 +342,8 @@
     enterRechargeAmount: "Inserisci l'importo della ricarica",
     amountNumber: "L'importo del versamento è un numero",
     uploadImgPay: "Si prega di caricare il buono di pagamento",
+    "提交凭证": "Invia voucher",
+    "提交失败": "Invio fallito",
     saveQr: "Salva codice QR",
     network: "rete blockchain",
 
diff --git a/src/i18n/Japanese.js b/src/i18n/Japanese.js
index 4d7a12b..675bf94 100644
--- a/src/i18n/Japanese.js
+++ b/src/i18n/Japanese.js
@@ -329,6 +329,8 @@
     enterRechargeAmount: "チャージ数量を入力してください",
     amountNumber: "チャージ数は数字",
     uploadImgPay: "支払い証明書をアップロードしてください",
+    "提交凭证": "証明書を送信",
+    "提交失败": "送信に失敗しました",
     saveQR: "QRコードを保存",
     network: "ブロックチェーンネットワーク",
 
diff --git a/src/i18n/Portuguese.js b/src/i18n/Portuguese.js
index c13b33f..80170c0 100644
--- a/src/i18n/Portuguese.js
+++ b/src/i18n/Portuguese.js
@@ -326,6 +326,8 @@
     enterRechargeAmount: "請輸入充值數量",
     amountNumber: "充幣數量為數字",
     uploadImgPay: "請上傳付款憑證",
+    "提交凭证": "Enviar comprovante",
+    "提交失败": "Falha no envio",
     saveQr: "保存二維碼",
     network: "區塊鍊網絡",
 
diff --git a/src/i18n/Spanish.js b/src/i18n/Spanish.js
index 16af5fe..5f5a8a8 100644
--- a/src/i18n/Spanish.js
+++ b/src/i18n/Spanish.js
@@ -330,6 +330,8 @@
     enterRechargeAmount: "Por favor ingrese el monto de la recarga",
     amountNumber: "La cantidad del depósito es un número",
     uploadImgPay: "Por favor cargue el comprobante de pago",
+    "提交凭证": "Enviar comprobante",
+    "提交失败": "Error al enviar",
     saveQr: "Guardar código QR",
     network: "red de cadena de bloques",
     ForwardingAddress: "Dirección de reenvío",
diff --git a/src/i18n/cn.js b/src/i18n/cn.js
index 93dd725..e0690ea 100644
--- a/src/i18n/cn.js
+++ b/src/i18n/cn.js
@@ -325,6 +325,8 @@
     enterRechargeAmount: "請輸入充值數量",
     amountNumber: "充幣數量為數字",
     uploadImgPay: "請上傳付款憑證",
+    "提交凭证": "提交憑證",
+    "提交失败": "提交失敗",
     saveQr: "保存二維碼",
     network: "區塊鍊網絡",
 
diff --git a/src/i18n/en.js b/src/i18n/en.js
index 6f4b606..b71de41 100644
--- a/src/i18n/en.js
+++ b/src/i18n/en.js
@@ -333,6 +333,8 @@
     enterRechargeAmount: "Please enter the deposit amount",
     amountNumber: "The deposit amount is a number",
     uploadImgPay: "Please upload the payment voucher",
+    "提交凭证": "Submit voucher",
+    "提交失败": "Submission failed",
     saveQr: "Save QR code",
     network: "Blockchain network",
     desc1: "Please ask the online customer service staff about the official receiving bank account of this platform before depositing.",
diff --git a/src/i18n/fa.js b/src/i18n/fa.js
index 977401a..f6bbf1f 100644
--- a/src/i18n/fa.js
+++ b/src/i18n/fa.js
@@ -357,6 +357,8 @@
     enterRechargeAmount: "Veuillez entrer le montant de la recharge",
     amountNumber: "Le montant du dépôt est un nombre",
     uploadImgPay: "Veuillez télécharger le bon de paiement",
+    "提交凭证": "Soumettre le justificatif",
+    "提交失败": "Échec de la soumission",
     saveQr: "Enregistrer le code QR",
     network: "réseau blockchain",
 
diff --git a/src/i18n/korean.js b/src/i18n/korean.js
index 61222c7..7285ab1 100644
--- a/src/i18n/korean.js
+++ b/src/i18n/korean.js
@@ -363,6 +363,8 @@
     enterRechargeAmount: "충전 수량을 입력하십시오",
     amountNumber: "충전 수량은 숫자",
     uploadImgPay: "결제 자격 증명을 업로드하십시오",
+    "提交凭证": "증명서 제출",
+    "提交失败": "제출 실패",
     saveQr: "QR코드 저장",
     network: "블록체인 네트워크",
     ForwardingAddress: "주소 전송",
diff --git a/src/i18n/th.js b/src/i18n/th.js
index 855e876..25a59a8 100644
--- a/src/i18n/th.js
+++ b/src/i18n/th.js
@@ -352,6 +352,8 @@
     enterRechargeAmount: "โปรดใส่จำนวนการเติมเงิน",
     amountNumber: "จำนวนการชาร์จเป็นตัวเลข",
     uploadImgPay: "กรุณาอัพโหลดหลักฐานการชำระเงิน",
+    "提交凭证": "ส่งหลักฐาน",
+    "提交失败": "ส่งล้มเหลว",
     saveQr: "บันทึกรหัส QR",
     network: "เครือข่าย blockchain",
 
diff --git a/src/i18n/vi.js b/src/i18n/vi.js
index ebd3662..047430b 100644
--- a/src/i18n/vi.js
+++ b/src/i18n/vi.js
@@ -343,6 +343,8 @@
     enterRechargeAmount: "Vui lòng nhập số tiền nạp",
     mountNumber: "Số tiền gửi là một con số",
     uploadImgPay: "Vui lòng tải lên chứng từ thanh toán",
+    "提交凭证": "Gửi chứng từ",
+    "提交失败": "Gửi thất bại",
     saveQr: "Lưu mã QR",
     mạng: "mạng chuỗi khối",
 
diff --git a/src/i18n/zhcn.js b/src/i18n/zhcn.js
index 0f3d428..3b2e15a 100644
--- a/src/i18n/zhcn.js
+++ b/src/i18n/zhcn.js
@@ -336,6 +336,8 @@
     enterRechargeAmount: "请输入充值数量",
     amountNumber: "充币数量为数字",
     uploadImgPay: "请上传付款凭证",
+    "提交凭证": "提交凭证",
+    "提交失败": "提交失败",
     saveQr: "保存二维码",
     network: "区块链网络",
 
diff --git a/src/views/cryptos/Recharge/rechargeList.vue b/src/views/cryptos/Recharge/rechargeList.vue
index 3880072..92b1f61 100644
--- a/src/views/cryptos/Recharge/rechargeList.vue
+++ b/src/views/cryptos/Recharge/rechargeList.vue
@@ -68,6 +68,38 @@
             <span class="deposit-detail-address-text">{{ selectedChain.address }}</span>
             <img :src="copyImg" alt="copy" class="deposit-detail-copy-btn" @click="copyAddress" />
           </div>
+
+          <!-- 充值后提交截图凭证 -->
+          <div class="deposit-voucher">
+            <div class="deposit-voucher-title">{{ $t('付款凭证(上传支付详情截图)') }}</div>
+            <p class="deposit-voucher-desc">{{ $t('desc2') }}</p>
+            <div class="deposit-voucher-upload">
+              <van-uploader
+                v-model="fileList"
+                accept="image/*"
+                :max-count="1"
+                :before-read="beforeRead"
+                :after-read="afterRead"
+              />
+            </div>
+            <div class="deposit-voucher-amount">
+              <div class="deposit-voucher-label">{{ $t('充币数量') }}</div>
+              <input
+                v-model="rechargeAmount"
+                type="text"
+                class="deposit-voucher-input"
+                :placeholder="$t('请输入充币数量')"
+                inputmode="decimal"
+              />
+            </div>
+            <button
+              class="deposit-submit-btn"
+              :disabled="submitting"
+              @click="submitVoucher"
+            >
+              {{ submitting ? $t('uploading') : $t('提交凭证') }}
+            </button>
+          </div>
         </div>
       </div>
     </template>
@@ -104,13 +136,14 @@
 import assetsHead from '@/components/Transform/assets-head/index.vue';
 import { HOST_URL } from '@/config';
 import Axios from '@/service/recharge.js';
+import { _uploadImage } from '@/service/upload.api.js';
 import copyImg from '@/assets/imgs/new/copy.png';
 
 const COINS = [
   { symbol: 'usdt', name: 'USDT' },
-  { symbol: 'usdc', name: 'USDC' },
-  { symbol: 'btc', name: 'BTC' },
-  { symbol: 'eth', name: 'ETH' },
+  // { symbol: 'usdc', name: 'USDC' },
+  // { symbol: 'btc', name: 'BTC' },
+  // { symbol: 'eth', name: 'ETH' },
 ];
 
 export default {
@@ -127,6 +160,10 @@
       showNetworkSheet: false,
       isForeign: false,
       copyImg,
+      fileList: [],
+      rechargeAmount: '',
+      session_token: '',
+      submitting: false,
     };
   },
   computed: {
@@ -169,7 +206,79 @@
     onSelectChain(chain) {
       this.selectedChain = chain;
       this.showNetworkSheet = false;
+      this.fileList = [];
+      this.rechargeAmount = '';
       this.$nextTick(() => this.drawQR());
+      this.getRechargeToken();
+    },
+    getRechargeToken() {
+      Axios.getRechargeToken()
+        .then((res) => {
+          this.session_token = res?.session_token || '';
+        })
+        .catch(() => {});
+    },
+    beforeRead(file) {
+      const types = ['image/jpeg', 'image/jpg', 'image/gif', 'image/bmp', 'image/png'];
+      if (!types.includes(file.type)) {
+        showToast(this.$t('上传图片只能是JPG、JPEG、gif、bmp、PNG格式!'));
+        return false;
+      }
+      return true;
+    },
+    afterRead(file) {
+      file.status = 'uploading';
+      file.message = this.$t('uploading');
+      _uploadImage(file)
+        .then((data) => {
+          file.status = 'success';
+          file.message = this.$t('uploadSuccess');
+          file.resURL = data;
+          showToast(this.$t('uploadSuccess'));
+        })
+        .catch(() => {
+          file.status = 'failed';
+          file.message = this.$t('uploadFailed');
+          showToast(this.$t('uploadFailed'));
+        });
+    },
+    submitVoucher() {
+      if (!this.fileList.length || !this.fileList[0].resURL) {
+        showToast(this.$t('uploadImgPay'));
+        return;
+      }
+      const amount = (this.rechargeAmount || '').trim();
+      if (!amount) {
+        showToast(this.$t('请输入充币数量'));
+        return;
+      }
+      const numReg = /^[0-9]+([.]{1}[0-9]+){0,1}$/;
+      if (!numReg.test(amount)) {
+        showToast(this.$t('请输入数字'));
+        return;
+      }
+      this.submitting = true;
+      Axios.rechargeApply({
+        session_token: this.session_token,
+        amount,
+        from: this.selectedChain?.address || '',
+        blockchain_name: this.selectedChain?.blockchain_name || '',
+        coin: this.selectedSymbol,
+        channel_address: this.selectedChain?.address || '',
+        tx: '',
+        img: this.fileList[0].resURL,
+      })
+        .then(() => {
+          this.submitting = false;
+          showToast(this.$t('申请已提交'));
+          this.$router.push({ path: '/cryptos/recharge/rechargeSubmit', query: { title: this.$t('充值') } });
+        })
+        .catch((err) => {
+          this.submitting = false;
+          if (err?.code === 'ECONNABORTED') showToast(this.$t('网络超时!'));
+          else showToast(err?.msg || this.$t('提交失败'));
+          this.getRechargeToken();
+        });
     },
     drawQR() {
       if (!this.selectedChain || !this.selectedChain.address || !this.$refs.qrcodeCanvas) return;
@@ -463,4 +572,70 @@
   flex-shrink: 0;
   object-fit: contain;
 }
+
+/* 充值凭证上传 */
+.deposit-voucher {
+  margin-top: 1.5rem;
+  padding-top: 1.5rem;
+  border-top: 1px solid #f0f0f0;
+}
+.deposit-voucher-title {
+  font-size: 28px;
+  color: #333;
+  font-weight: 500;
+  margin-bottom: 0.5rem;
+}
+.deposit-voucher-desc {
+  font-size: 24px;
+  color: #9b9b9b;
+  line-height: 1.5;
+  margin-bottom: 1rem;
+}
+.deposit-voucher-upload {
+  margin-bottom: 1rem;
+}
+.deposit-voucher-upload :deep(.van-uploader__upload) {
+  background: #f5f5f5;
+  border: 1px dashed #ddd;
+  border-radius: 0.5rem;
+}
+.deposit-voucher-amount {
+  margin-bottom: 1rem;
+}
+.deposit-voucher-label {
+  font-size: 26px;
+  color: #9b9b9b;
+  margin-bottom: 0.5rem;
+}
+.deposit-voucher-input {
+  width: 100%;
+  height: 2.75rem;
+  padding: 0 1rem;
+  font-size: 28px;
+  color: #333;
+  background: #f5f5f5;
+  border: none;
+  border-radius: 0.5rem;
+  outline: none;
+  box-sizing: border-box;
+}
+.deposit-voucher-input::placeholder {
+  color: #9b9b9b;
+}
+.deposit-submit-btn {
+  width: 100%;
+  height: 3.25rem;
+  margin-top: 0.5rem;
+  border: none;
+  border-radius: 0.5rem;
+  background: linear-gradient(90deg, #a443cf, #5e2bc8);
+  color: #fff;
+  font-size: 28px;
+  font-weight: 600;
+  cursor: pointer;
+}
+.deposit-submit-btn:disabled {
+  opacity: 0.7;
+  cursor: not-allowed;
+}
 </style>
diff --git a/src/views/customerService/index.vue b/src/views/customerService/index.vue
index 60a2619..27a2ff0 100644
--- a/src/views/customerService/index.vue
+++ b/src/views/customerService/index.vue
@@ -22,7 +22,7 @@
           {{ $t('historyMessage') }}
         </div>
         <ul class="flex flex-col pt-3">
-          <li v-for="(item, index) in list" :key="item.id" class="flex flex-col my-3">
+          <li v-for="(item) in list" :key="item.id" class="flex flex-col my-3">
             <!-- <p class="font-13 text-center py-2 text-grey font-15" v-if="showTime(index)">{{
               item.createtime &&
               item.createtime.split(' ')[0]
@@ -33,7 +33,7 @@
             <div class="flex" :class="item.send_receive === 'send' ? 'justify-end' : ''">
               <template v-if="item.send_receive === 'receive'">
                 <img src="@/assets/image/service/responser.png" class="w-10 h-10 mr-5" />
-                <div class="responser px-18 py-8 font-15 left-chatBg">
+                <div class="responser px-18 py-8 rounded-ban font-15 left-chatBg">
                   <p class="break-word textColor  font-15" style="max-width: 200px;"
                     v-if="item.content_type === 'text' || item.type === 'text'">
                     {{ item.content }}</p>
@@ -43,7 +43,7 @@
               <div class="py-8 px-18 rounded-ban flex flex-col right-chatBg" v-else>
                 <img :src="`${item.content}`" class="w-200 h-200"
                   v-if="item.content_type === 'img' || item.type === 'img'" @click="onPreview(item.content)" />
-                <p class="break-word textColor  font-15" v-else style="max-width: 200px;">{{ item.content }}</p>
+                <p class="break-word textColor2 font-15" v-else style="max-width: 200px;">{{ item.content }}</p>
               </div>
             </div>
           </li>
@@ -330,7 +330,6 @@
 .right-chatBg {
   position: relative;
   background: $color_main;
-  color: $text_color;
 
   &::after {
     content: '';
@@ -346,6 +345,6 @@
 }
 
 .left-chatBg {
-  background: $input_background;
+  background: $bg_yellow;
 }
 </style>
diff --git a/src/views/homePage/index.vue b/src/views/homePage/index.vue
index db29886..0dffbbf 100644
--- a/src/views/homePage/index.vue
+++ b/src/views/homePage/index.vue
@@ -10,9 +10,9 @@
             <van-swipe-item><img src="@/assets/imgs/home/Slider-4.jpg" alt=""></van-swipe-item>
         </van-swipe> -->
         <div class="flex flex-col items-center justify-center home-kyc-block" @click="toPage('/certificationCenter')">
-            <img style="width: 65%;" src="@/assets/imgs/new/kyc-reward.png" alt="">
-            <div style="font-size: 25px;">{{ $t('kycLotteryBroadcast') }}</div>
-            <div style="font-size: 12px;">{{ $t('kycLotterySubtitle') }}</div>
+            <img style="width: 100%;border-radius: 10px;" src="@/assets/imgs/new/kyc-reward.png" alt="">
+            <!-- <div style="font-size: 25px;">{{ $t('kycLotteryBroadcast') }}</div>
+            <div style="font-size: 12px;">{{ $t('kycLotterySubtitle') }}</div> -->
         </div>
         <!-- <video autoplay loop muted playsinline class="home_logo"> -->
             <!-- <source src="@/assets/video/home_1.mp4" type="video/mp4"> -->
@@ -261,6 +261,13 @@
     { key: 14, name: t('客服'), icon: new URL('@/assets/imgs/new/index-function3.png', import.meta.url), path: '/customerService' },
 ]
 
+// 交易区列表:外汇、股票、ETF(均带图标)
+const tradingList = [
+    { name: t('外汇'), icon: new URL('@/assets/theme/dark/image/nav/trade.png', import.meta.url), path: '/foreign/coinChart?symbol=USDSGD' },
+    { name: t('股票'), icon: new URL('@/assets/theme/dark/image/nav/trade.png', import.meta.url), path: '/quotes/openTrade?tabActive=0&symbol=AAPL&type=US-stocks' },
+    { name: t('ETF'), icon: new URL('@/assets/theme/dark/image/nav/contract.png', import.meta.url), path: '/quotes/openTrade?tabActive=0&symbol=GlobalETF500&type=indices' },
+]
+
 // 轮播图:使用本地两张图片(swiper_1、swiper_2 放在 src/assets/imgs/new/ 下)
 const bannerImages = [
     { img: new URL('@/assets/imgs/new/swiper_1.png', import.meta.url).href, alt: 'Banner 1' },
diff --git a/src/views/quotes/List.vue b/src/views/quotes/List.vue
index 58d092a..d33c4cd 100644
--- a/src/views/quotes/List.vue
+++ b/src/views/quotes/List.vue
@@ -18,7 +18,7 @@
       </div>
     </div>
     <div class="quotes-list pb-60 pl-5 pr-5" id="cryptos">
-      <list-quatation :listData="qList" :tabActive="2" :tabShow="false" />
+      <list-quatation :listData="qList" :tabActive="headerActive" :tabShow="false" />
     </div>
   </div>
 </template>
@@ -37,7 +37,7 @@
 const store = useStore();
 
 const headerActive = ref(2);
-const headerTabs = computed(() => [t('全部'), t('现货'), t('永续')]);
+const headerTabs = computed(() => [t('全部'), t('现货'), t('永续'), t('期权')]);
 
 const onSearchClick = () => {
   router.push('/optional/search');

--
Gitblit v1.9.3