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