Преглед изворни кода

Merge remote-tracking branch 'origin/admin_dev' into admin_dev

# Conflicts:
#	locale/ar.json
#	locale/de.json
#	locale/en.json
#	locale/es.json
#	locale/fa.json
#	locale/id.json
#	locale/ko.json
#	locale/ms.json
#	locale/pt.json
#	locale/th.json
#	locale/tr.json
#	locale/ug.json
#	locale/vn.json
#	locale/zhHant.json
#	pages/customer/components/AccountCard.vue
ljc пре 1 недеља
родитељ
комит
39a3354902

+ 1 - 1
components/cwg-combox.vue

@@ -12,7 +12,7 @@
 
             <!-- 普通下拉模式 -->
             <uni-data-select v-else v-model="innerValue" :localdata="options" :clear="clearable"
-                :placeholder="placeholder" :multiple="multiple" :disabled="disabled" @change="handleSelectChange" :needSpace="needSpace">
+                :placeholder="placeholder" :multiple="multiple" :disabled="disabled" @change="handleSelectChange" :needSpace="needSpace" :emptyTips="t('Documentary.tradingCenter.item143')">
                 <template #selected v-if="$slots.selected">
                     <slot name="selected"></slot>
                 </template>

+ 37 - 5
components/cwg-complex-search.vue

@@ -117,6 +117,7 @@
 <script setup>
 import { ref, computed, watch, onMounted, nextTick, onUnmounted } from 'vue'
 import { useI18n } from 'vue-i18n'
+import { isRouteOnTop } from '@/utils/pageActive'
 
 const { t } = useI18n()
 
@@ -313,6 +314,27 @@ const nonDateField = computed(() => {
 const clonePlain = (val) => JSON.parse(JSON.stringify(val ?? {}))
 const isEqual = (a, b) => JSON.stringify(a ?? {}) === JSON.stringify(b ?? {})
 
+/** 所属页面 route,离开栈顶后不再 emit search */
+const ownerPageRoute = ref('')
+
+/** 仅字段结构变化时重新初始化(语言切换改 label 不触发) */
+const getFieldsSignature = (fields) => {
+    if (!fields?.length) return ''
+    return JSON.stringify(
+        fields.filter(Boolean).map((field) => ({
+            key: field.key,
+            type: field.type,
+            defaultValue: field.defaultValue,
+            optionsLength: Array.isArray(field.options) ? field.options.length : 0,
+            optionValues: Array.isArray(field.options)
+                ? field.options.map((o) => o?.value ?? o?.text ?? o)
+                : undefined,
+        }))
+    )
+}
+
+let fieldsSignature = ''
+
 // 监听外部 modelValue 变化
 watch(() => props.modelValue, (newVal) => {
     if (!newVal) return
@@ -374,6 +396,7 @@ const resetForm = () => {
 }
 // 触发查询
 const handleSearch = () => {
+    if (!isRouteOnTop(ownerPageRoute.value)) return
     emit('search', { ...formData.value })
 }
 
@@ -430,13 +453,22 @@ const applyFilter = () => {
     handleSearch()
 }
 
-// 监听fields变化,重新初始化
-watch(() => props.fields, () => {
-    initFormData()
-}, { deep: true, immediate: false })
+// 仅 fields 结构变化时重新初始化
+watch(
+    () => props.fields,
+    (fields) => {
+        const nextSig = getFieldsSignature(fields)
+        if (nextSig === fieldsSignature) return
+        fieldsSignature = nextSig
+        initFormData()
+    },
+    { deep: false }
+)
 
 onMounted(() => {
-    // 初始化表单数据
+    const pages = getCurrentPages()
+    ownerPageRoute.value = pages[pages.length - 1]?.route || ''
+    fieldsSignature = getFieldsSignature(props.fields)
     initFormData()
 })
 

+ 1 - 0
components/cwg-footer-link.vue

@@ -56,6 +56,7 @@ const linkList = [
 
     .footer-links {
         display: flex;
+        flex-wrap: wrap;
         gap: px2rpx(12);
 
         .link-item {

+ 68 - 0
components/cwg-pay-webview-popup.vue

@@ -0,0 +1,68 @@
+<template>
+  <cwg-popup
+    :visible="visible"
+    :title="displayTitle"
+    width="min(920px, 94vw)"
+    :show-footers="false"
+    footer-type="none"
+    :mask-click="true"
+    @update:visible="onVisibleChange"
+    @close="handleClose"
+  >
+    <view class="pay-webview-body">
+      <!-- #ifdef H5 -->
+      <iframe v-if="payUrl" :src="payUrl" class="pay-webview-frame" frameborder="0" />
+      <!-- #endif -->
+    </view>
+  </cwg-popup>
+</template>
+
+<script setup>
+import { computed } from 'vue'
+import { useI18n } from 'vue-i18n'
+import { payWebviewState, closePayWebview } from '@/hooks/usePayWebview'
+
+const { t } = useI18n()
+
+const visible = computed({
+  get: () => payWebviewState.value.visible,
+  set: (val) => {
+    if (!val) closePayWebview()
+  },
+})
+
+const payUrl = computed(() => payWebviewState.value.url)
+
+const displayTitle = computed(() => {
+  return t('Shop.Order.OrderDetails')
+})
+
+function onVisibleChange(val) {
+  if (!val) closePayWebview()
+}
+
+function handleClose() {
+  closePayWebview()
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/uni.scss";
+
+.pay-webview-body {
+  width: 100%;
+  height: 70vh;
+  min-height: px2rpx(360);
+  max-height: 80vh;
+  overflow: hidden;
+  border-radius: px2rpx(8);
+  background: var(--bs-body-bg, #fff);
+}
+
+.pay-webview-frame {
+  width: 100%;
+  height: 100%;
+  border: none;
+  display: block;
+}
+</style>

+ 2 - 2
components/cwg-sidebar.vue

@@ -433,7 +433,7 @@ onUnmounted(() => {
 
   .menu-item {
     width: 100%;
-    height: px2rpx(40);
+    min-height: px2rpx(40);
     cursor: pointer;
     display: flex;
     align-items: center;
@@ -499,7 +499,7 @@ onUnmounted(() => {
     gap: px2rpx(8);
 
     .menu-label {
-      flex: none;
+      // flex: none;
     }
   }
 }

+ 9 - 0
components/cwg-tabel.vue

@@ -168,6 +168,7 @@ import { ref, computed, watch, onMounted, onUnmounted, nextTick } from 'vue'
 import { getNoteText } from '@/utils/noteHelper';
 import useUserStore from "@/stores/use-user-store";
 import { useI18n } from "vue-i18n";
+import { isRouteOnTop } from '@/utils/pageActive'
 const userStore = useUserStore();
 const { locale } = useI18n();
 const props = defineProps({
@@ -563,8 +564,12 @@ const setDetailVisible = (visible) => {
     detailVisible.value = visible
 }
 
+// 表格挂载时所属页面(uni-app 页面栈未销毁时,离开页面后不再请求)
+const ownerPageRoute = ref('')
+
 // ========== 数据加载 ==========
 const loadData = async () => {
+    if (!isRouteOnTop(ownerPageRoute.value)) return
     if (props.data) {
         tableData.value = props.data
         if (props.summaryData) {
@@ -660,10 +665,12 @@ const loadData = async () => {
 }
 // 刷新表格
 const refreshTable = () => {
+    if (!isRouteOnTop(ownerPageRoute.value)) return
     pagination.value.current = 1
     loadData()
 }
 const reload = () => {
+    if (!isRouteOnTop(ownerPageRoute.value)) return
     loadData()
 }
 const pageLoading = ref(false)
@@ -741,6 +748,8 @@ watch(() => props.api, () => {
 }, { deep: true })
 // ========== 生命周期 ==========
 onMounted(() => {
+    const pages = getCurrentPages()
+    ownerPageRoute.value = pages[pages.length - 1]?.route || ''
     checkIsMobile()
     // #ifdef H5
     window.addEventListener('resize', handleResize)

+ 21 - 0
hooks/usePayWebview.js

@@ -0,0 +1,21 @@
+import { ref } from 'vue'
+
+export const payWebviewState = ref({
+  visible: false,
+  url: '',
+  title: '',
+})
+
+export function openPayWebview(url, title = '') {
+  if (!url) return
+  payWebviewState.value = {
+    visible: true,
+    url,
+    title,
+  }
+}
+
+export function closePayWebview() {
+  payWebviewState.value.visible = false
+  payWebviewState.value.url = ''
+}

+ 23 - 19
locale/ar.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "حقيقي",
-    "item2": "محاكاة",
+    "item2": "عينة",
     "item3": "تغيير كلمة مرور التداول",
     "item4": "تغيير كلمة مرور المستثمر",
     "item5": "تحليل",
     "item6": "الدفع والمحفظة",
     "item7": "المزيد",
-    "item8": "الحدود",
-    "item9": "الحد الأدنى للإيداع",
-    "item10": "الحد الأدنى للعقد",
-    "item11": "الحد الأقصى للرافعة المالية",
-    "item12": "الحد الأدنى للفارق",
-    "item13": "طرق فتح إضافية",
-    "item14": "الحساب المحدد حاليًا هو (حساب السنت Cent)",
-    "item15": "وحدة الرصيد هي Cent (1 USD = 100 Cent).",
-    "item16": "يرجى التأكد من صحة وحدة مبلغ التحويل الذي أدخلته لتجنب فشل التحويل بسبب اختلاف الوحدات.",
+    "item8": "قيود",
+    "item9": "أدنى إيداع",
+    "item10": "أدنى حجم صفقة",
+    "item11": "أقصى نسبة رافعة",
+    "item12": "أدنى تباين",
+    "item13": "المزيد من طرق الفتح",
+    "item14": "الحساب المحدد حاليًا هو (حساب السنت).",
+    "item15": "وحدة الرصيد هي السنت (1 دولار أمريكي = 100 سنت).",
+    "item16": "يرجى التأكد من أن مبلغ التحويل الذي أدخلته بوحدة صحيحة لتجنب فشل التحويل بسبب اختلاف الوحدة.",
+    "item17": "ابدأ التداول",
+    "item18": "محذوف",
+    "LoginPwdOld1": "كلمة مرور التداول الرئيسية",
+    "InvestorNewPwd": "كلمة مرور المستثمر الجديدة",
     "follow": {
-      "enum1": "أسبوعياً",
+      "enum1": "أسبوعي",
       "enum2": "كل أسبوعين",
-      "enum3": "شهرياً",
-      "v1": "الرجاء إدخال رقم أكبر من 0"
+      "enum3": "شهري",
+      "v1": "يرجى إدخال رقم أكبر من 0."
     },
     "Downloadpage": {
       "item41": "تنزيل التطبيق",
       "item42": "تنزيل تطبيق CWG Center",
-      "item43": "تطبيق CWG Center، منصة تداول شاملة. امسح أو انقر للتنزيل، تحديث الأسعار فورياً، تداول بسيط وفعال، تشغيل سهل في أي وقت وفي أي مكان، لا تفوت أي فرصة استثمارية."
+      "item43": "CWG Center App، منصة تداول متكاملة. مسح رمز الاستجابة السريعة أو تنزيلها بنقرة واحدة، تحديثات السوق المباشرة، تداول بسيط وفعال، سهولة التشغيل في أي وقت ومن أي مكان، لا تفوت أي فرصة استثمارية."
     },
     "tradingCenter": {
-      "item71": "المعادن الثمينة",
+      "item71": "معادن ثمينة",
       "item72": "العملات الأجنبية",
       "item73": "الطاقة",
-      "item74": "عقود الفروقات",
+      "item74": "عقود الفروق",
       "item75": "المؤشرات",
       "item76": "العملات المشفرة"
     },
     "custom": {
-      "t1": "إجمالي الرصيد",
-      "t2": "صافي القيمة",
+      "t1": "الرصيد الكلي",
+      "t2": "القيمة العادلة",
       "t3": "إجمالي الإيداع",
       "t4": "إجمالي السحب"
     },
     "login": {
-      "agreemnet1": "بالنقر على 'تسجيل الدخول'، فإنك تؤكد أنك قرأت وفهمت ووافقت على جميع المعلومات الواردة هنا."
+      "agreemnet1": " اضغط \"تسجيل الدخول\" لضمان قراءتك وفهمك واتفاقك على جميع المعلومات الواردة في هذا المستند. "
     },
     "account": {
       "label1": "ابدأ التداول",

+ 4 - 0
locale/cn.json

@@ -16,6 +16,10 @@
     "item14": "当前选择账户为 ( 美分账户 Cent) ",
     "item15": "余额单位为 Cent(1 USD = 100 Cent)。",
     "item16": "请确认您输入的转账金额单位是否正确,以避免因单位差异导致转账失败。",
+    "item17": "开始交易",
+    "item18": "已删除",
+    "LoginPwdOld1": "主交易密码",
+    "InvestorNewPwd": "新投资者密码",
     "follow": {
       "enum1": "每周",
       "enum2": "每两周",

+ 27 - 23
locale/de.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "Echt",
-    "item2": "Simuliert",
-    "item3": "Trading-Passwort ändern",
-    "item4": "Investor-Passwort ändern",
+    "item2": "Demo",
+    "item3": "Handels Passwort ändern",
+    "item4": "Investor Passwort ändern",
     "item5": "Analyse",
     "item6": "Zahlung & Wallet",
     "item7": "Mehr",
-    "item8": "Beschränkungen",
+    "item8": "Begrenzungen",
     "item9": "Mindesteinlage",
-    "item10": "Minimale Losgröße",
-    "item11": "Maximaler Hebel",
-    "item12": "Minimaler Spread",
-    "item13": "Weitere Öffnungsmethoden",
-    "item14": "Aktuell ausgewähltes Konto: (Cent-Konto Cent)",
-    "item15": "Die Saldoeinheit ist Cent (1 USD = 100 Cent).",
-    "item16": "Bitte stellen Sie sicher, dass die eingegebene Überweisungssumme in der richtigen Einheit angegeben ist, um Fehler aufgrund von Einheitenunterschieden zu vermeiden.",
+    "item10": "Minimalvolumen",
+    "item11": "Maximalhebel",
+    "item12": "Minimalspread",
+    "item13": "Mehr Öffnungsweisen",
+    "item14": "Das aktuell ausgewählte Konto ist ein (Cent-Konto).",
+    "item15": "Die Kontoguthaben-Einheit ist Cent (1 USD = 100 Cent).",
+    "item16": "Bitte bestätigen Sie, dass der von Ihnen eingegebene Überweisungsbetrag in der richtigen Einheit vorliegt, um Überweisungsfehler aufgrund von Einheitenabweichungen zu vermeiden.",
+    "item17": "Handel starten",
+    "item18": "Gelöscht",
+    "LoginPwdOld1": "Haupt-Handelspasswort",
+    "InvestorNewPwd": "Neues Investor-Passwort",
     "follow": {
       "enum1": "Wöchentlich",
-      "enum2": "Zweiwöchentlich",
+      "enum2": "Zweimal pro Woche",
       "enum3": "Monatlich",
-      "v1": "Bitte geben Sie eine Zahl größer als 0 ein"
+      "v1": "Bitte geben Sie eine Zahl größer als 0 ein."
     },
     "Downloadpage": {
-      "item41": "App herunterladen",
-      "item42": "CWG Center App herunterladen",
-      "item43": "CWG Center App, eine All-in-One-Tradingplattform. Scannen oder klicken Sie zum Herunterladen, Echtzeitkurse, einfacher und effizienter Handel, bequeme Bedienung jederzeit und überall – verpassen Sie keine Investitionschance."
+      "item41": "App Download",
+      "item42": "CWG Center App Download",
+      "item43": "CWG Center App, eine All-in-One Handelsplattform. Scannen Sie den QR-Code oder laden Sie mit einem Klick herunter, Echtzeitmarktupdates, einfacher und effizienter Handel, einfach überall und jederzeit zu bedienen, verpassen Sie keine Investitionsmöglichkeit."
     },
     "tradingCenter": {
       "item71": "Edelmetalle",
       "item72": "Devisen",
       "item73": "Energie",
-      "item74": "CFDs",
+      "item74": "CFD",
       "item75": "Indizes",
-      "item76": "Kryptowährungen"
+      "item76": "Kryptowährung"
     },
     "custom": {
-      "t1": "Gesamtsaldo",
-      "t2": "Nettovermögen",
-      "t3": "Gesamteinzahlung",
-      "t4": "Gesamtabhebung"
+      "t1": "Gesamtguthaben",
+      "t2": "Equity",
+      "t3": "Gesamteinlage",
+      "t4": "Gesamtauszahlung"
     },
     "login": {
-      "agreemnet1": "Mit Klick auf 'Anmelden' bestätigen Sie, dass Sie alle hierin enthaltenen Informationen gelesen, verstanden und akzeptiert haben."
+      "agreemnet1": " Klicken Sie auf \"Anmelden\", um zu bestätigen, dass Sie alle Informationen in diesem Dokument gelesen, verstanden und zugestimmt haben. "
     },
     "account": {
       "label1": "Handel beginnen",

+ 17 - 12
locale/en.json

@@ -9,40 +9,45 @@
     "item7": "More",
     "item8": "Limits",
     "item9": "Minimum Deposit",
-    "item10": "Minimum Lot",
+    "item10": "Minimum Lot Size",
     "item11": "Maximum Leverage",
     "item12": "Minimum Spread",
-    "item13": "More Opening Methods",
-    "item14": "Currently selected account is (Cent Account Cent)",
-    "item15": "Balance unit is Cent (1 USD = 100 Cent).",
-    "item16": "Please confirm the unit of the transfer amount you entered is correct to avoid transfer failure due to unit mismatch.",
+    "item13": "More opening methods",
+    "item14": "The current selected account is a (Cent Account).",
+    "item15": "The balance unit is Cent (1 USD = 100 Cent).",
+    "item16": "Please confirm that the transfer amount you entered is in the correct unit to avoid transfer failures caused by unit discrepancies.",
+    "item17": "Start Trading",
+    "item18": "Deleted",
+    "LoginPwdOld1": "Master Trading Password",
+    "InvestorNewPwd": "New Investor Password",
     "follow": {
       "enum1": "Weekly",
-      "enum2": "Biweekly",
+      "enum2": "Every two weeks",
       "enum3": "Monthly",
-      "v1": "Please enter a number greater than 0"
+      "v1": "Please enter a number greater than 0."
     },
     "Downloadpage": {
       "item41": "App Download",
       "item42": "CWG Center App Download",
-      "item43": "CWG Center App, an all-in-one trading platform. Scan or click to download, real-time market updates, simple and efficient trading, easy operation anytime, anywhere – don't miss any investment opportunity."
+      "item43": "CWG Center App, one-stop trading platform. Scan the QR code or download with one click, real-time market updates, simple and efficient trading, easy to operate anytime, anywhere, never miss any investment opportunity."
     },
     "tradingCenter": {
       "item71": "Precious Metals",
       "item72": "Forex",
       "item73": "Energy",
-      "item74": "CFDs",
+      "item74": "CFD",
       "item75": "Indices",
-      "item76": "Cryptocurrencies"
+      "item76": "Cryptocurrency"
     },
     "custom": {
       "t1": "Total Balance",
       "t2": "Equity",
       "t3": "Total Deposit",
-      "t4": "Total Withdrawal"
+      "t4": "Total Withdrawal",
+      "t5": ""
     },
     "login": {
-      "agreemnet1": "By clicking 'Login' you confirm that you have read, understood and agree to all the information contained herein."
+      "agreemnet1": " Click “Log in” to confirm that you have read, understood, and agreed to all the information in this document. "
     },
     "account": {
       "label1": "Start Trading",

+ 29 - 25
locale/es.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "Real",
-    "item2": "Simulación",
-    "item3": "Cambiar contraseña de trading",
-    "item4": "Cambiar contraseña de inversor",
+    "item2": "Demo",
+    "item3": "Cambiar Contraseña de Trading",
+    "item4": "Cambiar Contraseña de Inversor",
     "item5": "Análisis",
-    "item6": "Pagos y monedero",
+    "item6": "Pago & Billetera",
     "item7": "Más",
     "item8": "Límites",
-    "item9": "Depósito mínimo",
-    "item10": "Lote mínimo",
-    "item11": "Apalancamiento máximo",
-    "item12": "Spread mínimo",
-    "item13": "Más formas de apertura",
-    "item14": "La cuenta seleccionada actualmente es (Cuenta Cent Cent)",
-    "item15": "La unidad de saldo es Cent (1 USD = 100 Cent).",
-    "item16": "Confirme que la unidad del monto de transferencia ingresada sea correcta para evitar fallos en la transferencia debido a diferencias de unidad.",
+    "item9": "Depósito Mínimo",
+    "item10": "Tamaño Mínimo de Lote",
+    "item11": "Leverage Máximo",
+    "item12": "Spread Mínimo",
+    "item13": "Más formas de abrir",
+    "item14": "La cuenta seleccionada actual es (Cuenta Cent).",
+    "item15": "La unidad del saldo es Cent (1 USD = 100 Cent).",
+    "item16": "Confirme que el monto de la transferencia ingresado esté en la unidad correcta para evitar fallos en la transferencia debido a diferencias de unidad.",
+    "item17": "Iniciar Trading",
+    "item18": "Eliminado",
+    "LoginPwdOld1": "Contraseña Principal de Trading",
+    "InvestorNewPwd": "Nueva Contraseña de Inversor",
     "follow": {
       "enum1": "Semanal",
-      "enum2": "Quincenal",
+      "enum2": "Cada dos semanas",
       "enum3": "Mensual",
-      "v1": "Ingrese un número mayor que 0"
+      "v1": "Por favor, ingrese un número mayor que 0."
     },
     "Downloadpage": {
-      "item41": "Descargar App",
-      "item42": "Descargar CWG Center App",
-      "item43": "CWG Center App, plataforma de trading todo en uno. Escanee o haga clic para descargar, actualizaciones de mercado en tiempo real, trading simple y eficiente, operación fácil en cualquier momento y lugar – no pierda ninguna oportunidad de inversión."
+      "item41": "Descarga de App",
+      "item42": "Descarga de CWG Center App",
+      "item43": "CWG Center App, plataforma de trading todo en uno. Escanee el código QR o descargue con un clic, actualizaciones de mercado en tiempo real, trading simple y eficiente, fácil de operar en cualquier momento y lugar, no pierda ninguna oportunidad de inversión."
     },
     "tradingCenter": {
-      "item71": "Metales preciosos",
+      "item71": "Metales Preciosos",
       "item72": "Forex",
       "item73": "Energía",
-      "item74": "CFDs",
+      "item74": "CFD",
       "item75": "Índices",
-      "item76": "Criptomonedas"
+      "item76": "Criptomoneda"
     },
     "custom": {
-      "t1": "Saldo total",
-      "t2": "Patrimonio neto",
-      "t3": "Depósito total",
-      "t4": "Retiro total"
+      "t1": "Saldo Total",
+      "t2": "Equity",
+      "t3": "Depósito Total",
+      "t4": "Retiro Total"
     },
     "login": {
-      "agreemnet1": "Al hacer clic en 'Iniciar sesión', confirma que ha leído, comprendido y aceptado toda la información contenida aquí."
+      "agreemnet1": " Haga clic en \"Iniciar sesión\" para confirmar que ha leído, entendido y aceptado toda la información de este documento. "
     },
     "account": {
       "label1": "Comenzar a operar",

+ 29 - 25
locale/fa.json

@@ -1,48 +1,52 @@
 {
   "vu": {
-    "item1": "واقعی",
-    "item2": "شبیه‌سازی",
-    "item3": "تغییر رمز معاملاتی",
-    "item4": "تغییر رمز سرمایه‌گذار",
+    "item1": "حقیقی",
+    "item2": "دمو",
+    "item3": "تغییر رمز عبور معاملاتی",
+    "item4": "تغییر رمز عبور инвестور",
     "item5": "تحلیل",
     "item6": "پرداخت و کیف پول",
     "item7": "بیشتر",
     "item8": "محدودیت‌ها",
-    "item9": "حداقل واریز",
-    "item10": "حداقل لات",
-    "item11": "حداکثر اهرم",
-    "item12": "حداقل اسپرد",
-    "item13": "روش‌های بیشتر برای باز کردن",
-    "item14": "حساب انتخاب‌شده در حال حاضر (حساب سنت Cent) است",
-    "item15": "واحد موجودی سنت است (1 USD = 100 Cent).",
-    "item16": "لطفاً صحیح بودن واحد مبلغ انتقالی واردشده را تأیید کنید تا از شکست انتقال به دلیل اختلاف واحد جلوگیری شود.",
+    "item9": "کمینه واریز",
+    "item10": "حجم کمترین لات",
+    "item11": "حداکثر لورج",
+    "item12": "کمینه اسپرد",
+    "item13": "راههای بازکردن بیشتر",
+    "item14": "حساب انتخاب شده فعلی (حساب سنت) است.",
+    "item15": "واحد موجودی سنت است (1 دلار آمریکا = 100 سنت).",
+    "item16": "لطفاً تأیید کنید که مبلغ انتقالی وارد شده با واحد صحیح باشد تا از خرابی انتقال به دلیل مغایرت واحد جلوگیری شود.",
+    "item17": "شروع معامله",
+    "item18": "حذف شده",
+    "LoginPwdOld1": "رمز عبور اصلی معاملاتی",
+    "InvestorNewPwd": "رمز عبور جدید инвестور",
     "follow": {
       "enum1": "هفتگی",
-      "enum2": "دو هفته یکبار",
+      "enum2": "هر دو هفته",
       "enum3": "ماهانه",
-      "v1": "لطفاً عددی بزرگتر از 0 وارد کنید"
+      "v1": "لطفاً یک عدد بزرگتر از 0 وارد کنید."
     },
     "Downloadpage": {
-      "item41": "دانلود اپلیکیشن",
-      "item42": "دانلود اپلیکیشن CWG Center",
-      "item43": "اپلیکیشن CWG Center، یک پلتفرم معاملاتی همه‌کاره. اسکن یا کلیک کنید تا دانلود کنید، به‌روزرسانی لحظه‌ای بازار، معاملات ساده و کارآمد، عملکرد آسان در هر زمان و هر مکان – هیچ فرصت سرمایه‌گذاری را از دست ندهید."
+      "item41": "دانلود اپ",
+      "item42": "دانلود CWG Center App",
+      "item43": "CWG Center App، پلتفرم معاملاتی一站式. اسکن کد QR یا دانلود با یک کلیک، به روزرسانی بازار به صورت لحظه‌ای، معامله ساده و کارآمد، آسان در هر زمان و مکان، از هیچ شانس سرمایه‌گذاری‌ای بی‌خبر نمانید."
     },
     "tradingCenter": {
       "item71": "فلزات گرانبها",
-      "item72": "فارکس",
+      "item72": "ارز",
       "item73": "انرژی",
-      "item74": "قراردادهای تفاوت",
+      "item74": "CFD",
       "item75": "شاخص‌ها",
-      "item76": "ارزهای دیجیتال"
+      "item76": "ریالیته دیجیتال"
     },
     "custom": {
-      "t1": "موجودی کل",
-      "t2": "خالص دارایی",
-      "t3": "کل واریز",
-      "t4": "کل برداشت"
+      "t1": "مجموع موجودی",
+      "t2": "ارزش صافی",
+      "t3": "مجموع واریز",
+      "t4": "مجموع برداشت"
     },
     "login": {
-      "agreemnet1": "با کلیک روی «ورود»، تأیید می‌کنید که تمام اطلاعات مندرج در اینجا را خوانده، درک کرده و با آنها موافقت کرده‌اید."
+      "agreemnet1": " با کلیک بر \"ورود\" تأیید می‌کنید که تمام اطلاعات این سند را خوانده، فهمیده و موافقت کرده‌اید. "
     },
     "account": {
       "label1": "شروع معاملات",

+ 26 - 22
locale/id.json

@@ -1,48 +1,52 @@
 {
   "vu": {
-    "item1": "Nyata",
-    "item2": "Simulasi",
+    "item1": "Real",
+    "item2": "Demo",
     "item3": "Ubah Kata Sandi Trading",
     "item4": "Ubah Kata Sandi Investor",
     "item5": "Analisis",
     "item6": "Pembayaran & Dompet",
-    "item7": "Lainnya",
-    "item8": "Batas",
-    "item9": "Deposit Minimum",
-    "item10": "Lot Minimum",
+    "item7": "Lebih Banyak",
+    "item8": "Batasan",
+    "item9": "Setoran Minimum",
+    "item10": "Ukuran Lot Minimum",
     "item11": "Leverage Maksimum",
     "item12": "Spread Minimum",
-    "item13": "Metode Pembukaan Lainnya",
-    "item14": "Akun yang saat ini dipilih adalah (Akun Cent Cent)",
-    "item15": "Unit saldo adalah Cent (1 USD = 100 Cent).",
-    "item16": "Harap pastikan unit jumlah transfer yang Anda masukkan sudah benar untuk menghindari kegagalan transfer karena perbedaan unit.",
+    "item13": "Lebih banyak metode pembukaan",
+    "item14": "Akun yang dipilih saat ini adalah (Akun Cent).",
+    "item15": "Satuan saldo adalah Cent (1 USD = 100 Cent).",
+    "item16": "Harap konfirmasikan bahwa jumlah transfer yang Anda masukkan dalam satuan yang benar untuk menghindari kegagalan transfer akibat perbedaan satuan.",
+    "item17": "Mulai Trading",
+    "item18": "Dihapus",
+    "LoginPwdOld1": "Kata Sandi Trading Utama",
+    "InvestorNewPwd": "Kata Sandi Investor Baru",
     "follow": {
       "enum1": "Mingguan",
-      "enum2": "Dua Mingguan",
+      "enum2": "Setiap dua minggu",
       "enum3": "Bulanan",
-      "v1": "Masukkan angka lebih besar dari 0"
+      "v1": "Silakan masukkan angka lebih dari 0."
     },
     "Downloadpage": {
-      "item41": "Unduh Aplikasi",
-      "item42": "Unduh Aplikasi CWG Center",
-      "item43": "Aplikasi CWG Center, platform trading serba bisa. Pindai atau klik untuk mengunduh, pembaruan pasar real-time, trading sederhana dan efisien, operasi mudah kapan saja dan di mana saja – jangan lewatkan peluang investasi apapun."
+      "item41": "Unduh App",
+      "item42": "Unduh CWG Center App",
+      "item43": "CWG Center App, platform trading一站式. Pindai kode QR atau unduh dengan satu klik, pembaruan pasar real-time, trading sederhana dan efisien, mudah dioperasikan kapan saja dan di mana saja, jangan lewatkan kesempatan investasi mana pun."
     },
     "tradingCenter": {
       "item71": "Logam Mulia",
-      "item72": "Valas",
+      "item72": "Forex",
       "item73": "Energi",
       "item74": "CFD",
       "item75": "Indeks",
-      "item76": "Kriptocurrency"
+      "item76": "Kripto"
     },
     "custom": {
-      "t1": "Total Saldo",
-      "t2": "Ekuitas",
-      "t3": "Total Deposit",
-      "t4": "Total Penarikan"
+      "t1": "Saldo Total",
+      "t2": "Equity",
+      "t3": "Setoran Total",
+      "t4": "Penarikan Total"
     },
     "login": {
-      "agreemnet1": "Dengan mengklik 'Masuk', Anda mengonfirmasi bahwa Anda telah membaca, memahami, dan menyetujui semua informasi yang terkandung di sini."
+      "agreemnet1": " Klik \"Masuk\" untuk mengonfirmasi bahwa Anda telah membaca, memahami, dan menyetujui semua informasi dalam dokumen ini. "
     },
     "account": {
       "label1": "Mulai Trading",

+ 17 - 13
locale/ko.json

@@ -1,31 +1,35 @@
 {
   "vu": {
     "item1": "실제",
-    "item2": "모",
+    "item2": "모",
     "item3": "거래 비밀번호 변경",
     "item4": "투자자 비밀번호 변경",
     "item5": "분석",
     "item6": "결제 및 지갑",
     "item7": "더 보기",
     "item8": "제한",
-    "item9": "최소 입금",
-    "item10": "최소 로트",
+    "item9": "최소 입금",
+    "item10": "최소 로트 크기",
     "item11": "최대 레버리지",
     "item12": "최소 스프레드",
-    "item13": "더 많은 개설 방법",
-    "item14": "현재 선택된 계정은 (센트 계정 Cent)입니다.",
-    "item15": "잔액 단위는 Cent입니다 (1 USD = 100 Cent).",
-    "item16": "입력한 이체 금액의 단위가 올바른지 확인하십시오. 단위 차이로 인한 이체 실패를 방지하기 위함입니다.",
+    "item13": "더 많은 열기 방법",
+    "item14": "현재 선택한 계좌는 (센트 계좌)입니다.",
+    "item15": "잔액 단위는 센트(1 USD = 100 Cent)입니다.",
+    "item16": "단위 차이로 인한 이체 실패를 방지하려면 입력하신 이체 금액의 단위가 올바른지 확인하시기 바랍니다.",
+    "item17": "거래 시작",
+    "item18": "삭제됨",
+    "LoginPwdOld1": "주 거래 비밀번호",
+    "InvestorNewPwd": "새 투자자 비밀번호",
     "follow": {
       "enum1": "매주",
-      "enum2": "격주",
+      "enum2": "두 주마다",
       "enum3": "매월",
-      "v1": "0보다 큰 숫자를 입력하세요"
+      "v1": "0보다 큰 숫자를 입력하세요."
     },
     "Downloadpage": {
       "item41": "앱 다운로드",
       "item42": "CWG Center 앱 다운로드",
-      "item43": "CWG Center 앱, 올인원 트레이딩 플랫폼입니다. 스캔 또는 클릭 한 번으로 다운로드, 실시간 시세 업데이트, 간단하고 효율적인 거래, 언제 어디서나 쉽게 조작 – 투자 기회를 놓치지 마세요."
+      "item43": "CWG Center App, 원스톱 거래 플랫폼. QR 코드를 스캔하거나 한 번 클릭하여 다운로드, 실시간 시장 업데이트, 간단하고 효율적인 거래, 언제 어디서나 쉽게 운영, 어떤 투자 기회도 놓치지 마세요."
     },
     "tradingCenter": {
       "item71": "귀금속",
@@ -37,12 +41,12 @@
     },
     "custom": {
       "t1": "총 잔액",
-      "t2": "자산",
-      "t3": "총 금",
+      "t2": "자산",
+      "t3": "총 금",
       "t4": "총 출금"
     },
     "login": {
-      "agreemnet1": "'로그인'을 클릭하면 여기에 포함된 모든 정보를 읽고 이해하고 동의함을 확인하는 것입니다."
+      "agreemnet1": " \"로그인\"을 클릭하여 본 문서의 모든 정보를 읽고 이해하고 동의했음을 확인합니다. "
     },
     "account": {
       "label1": "거래 시작",

+ 26 - 22
locale/ms.json

@@ -1,48 +1,52 @@
 {
   "vu": {
-    "item1": "Sebenar",
-    "item2": "Simulasi",
-    "item3": "Tukar Kata Laluan Dagangan",
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Tukar Kata Laluan Perdagangan",
     "item4": "Tukar Kata Laluan Pelabur",
     "item5": "Analisis",
     "item6": "Pembayaran & Dompet",
-    "item7": "Lain-lain",
+    "item7": "Lebih Banyak",
     "item8": "Had",
     "item9": "Deposit Minimum",
-    "item10": "Lot Minimum",
-    "item11": "Leveraj Maksimum",
+    "item10": "Saiz Lot Minimum",
+    "item11": "Leverage Maksimum",
     "item12": "Spread Minimum",
-    "item13": "Lebih Banyak Kaedah Pembukaan",
-    "item14": "Akaun yang dipilih sekarang ialah (Akaun Sen Cent)",
-    "item15": "Unit baki ialah Sen (1 USD = 100 Cent).",
-    "item16": "Sila pastikan unit jumlah pindahan yang anda masukkan adalah betul untuk mengelakkan kegagalan pindahan akibat perbezaan unit.",
+    "item13": "Lebih banyak cara pembukaan",
+    "item14": "Akaun yang dipilih semasa ialah (Akaun Cent).",
+    "item15": "Unit baki ialah Cent (1 USD = 100 Cent).",
+    "item16": "Sila sahkan bahawa amaun pindahan yang anda masukkan adalah dalam unit yang betul untuk mengelakkan kegagalan pindahan akibat perbezaan unit.",
+    "item17": "Mulakan Perdagangan",
+    "item18": "Dihapus",
+    "LoginPwdOld1": "Kata Laluan Perdagangan Utama",
+    "InvestorNewPwd": "Kata Laluan Pelabur Baharu",
     "follow": {
-      "enum1": "Setiap Minggu",
-      "enum2": "Setiap Dua Minggu",
-      "enum3": "Setiap Bulan",
-      "v1": "Sila masukkan nombor lebih besar daripada 0"
+      "enum1": "Mingguan",
+      "enum2": "Setiap dua minggu",
+      "enum3": "Bulanan",
+      "v1": "Sila masukkan nombor lebih besar dari 0."
     },
     "Downloadpage": {
-      "item41": "Muat Turun Apl",
-      "item42": "Muat Turun Apl CWG Center",
-      "item43": "Apl CWG Center, platform dagangan serba guna. Imbas atau klik untuk muat turun, kemas kini pasaran masa sebenar, dagangan mudah dan cekap, operasi mudah pada bila-bila masa dan di mana-mana – jangan lepaskan sebarang peluang pelaburan."
+      "item41": "Muat Turun App",
+      "item42": "Muat Turun CWG Center App",
+      "item43": "CWG Center App, platform perdagangan一站式. Imbas kod QR atau muat turun dengan satu klik, kemas kini pasaran masa nyata, perdagangan mudah dan cekap, mudah dikendalikan bila-bila masa dan di mana-mana, jangan lepaskan sebarang peluang pelaburan."
     },
     "tradingCenter": {
-      "item71": "Logam Berharga",
+      "item71": "Logam Mulia",
       "item72": "Forex",
       "item73": "Tenaga",
       "item74": "CFD",
       "item75": "Indeks",
-      "item76": "Kriptowang"
+      "item76": "Kripto"
     },
     "custom": {
       "t1": "Jumlah Baki",
-      "t2": "Ekuiti",
+      "t2": "Equity",
       "t3": "Jumlah Deposit",
-      "t4": "Jumlah Pengeluaran"
+      "t4": "Jumlah Penarikan"
     },
     "login": {
-      "agreemnet1": "Dengan mengklik 'Log Masuk', anda mengesahkan bahawa anda telah membaca, memahami dan bersetuju dengan semua maklumat yang terkandung di sini."
+      "agreemnet1": " Klik \"Log Masuk\" untuk mengesahkan bahawa anda telah membaca, memahami dan bersetuju dengan semua maklumat dalam dokumen ini. "
     },
     "account": {
       "label1": "Mulakan Dagangan",

+ 32 - 28
locale/pt.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "Real",
-    "item2": "Simulação",
-    "item3": "Alterar senha de negociação",
-    "item4": "Alterar senha do investidor",
+    "item2": "Demo",
+    "item3": "Alterar Senha de Trading",
+    "item4": "Alterar Senha do Investidor",
     "item5": "Análise",
-    "item6": "Pagamento e carteira",
+    "item6": "Pagamento & Carteira",
     "item7": "Mais",
     "item8": "Limites",
-    "item9": "Depósito mínimo",
-    "item10": "Lote mínimo",
-    "item11": "Alavancagem máxima",
-    "item12": "Spread mínimo",
-    "item13": "Mais formas de abertura",
-    "item14": "A conta selecionada atualmente é (Conta Cent Cent)",
-    "item15": "A unidade de saldo é Cent (1 USD = 100 Cent).",
-    "item16": "Por favor, confirme se a unidade do valor de transferência inserido está correta para evitar falhas na transferência devido a diferenças de unidade.",
+    "item9": "Depósito Mínimo",
+    "item10": "Tamanho Mínimo de Lote",
+    "item11": "Leverage Máximo",
+    "item12": "Spread Mínimo",
+    "item13": "Mais formas de abrir",
+    "item14": "A conta selecionada atual é (Conta Cent).",
+    "item15": "A unidade do saldo é Cent (1 USD = 100 Cent).",
+    "item16": "Confirme se o valor da transferência inserido está na unidade correta para evitar falhas na transferência devido a discrepâncias de unidade.",
+    "item17": "Iniciar Trading",
+    "item18": "Excluído",
+    "LoginPwdOld1": "Senha Principal de Trading",
+    "InvestorNewPwd": "Nova Senha do Investidor",
     "follow": {
-      "enum1": "Semanalmente",
-      "enum2": "Quinzenalmente",
-      "enum3": "Mensalmente",
-      "v1": "Por favor, insira um número maior que 0"
+      "enum1": "Semanal",
+      "enum2": "A cada duas semanas",
+      "enum3": "Mensal",
+      "v1": "Por favor, insira um número maior que 0."
     },
     "Downloadpage": {
-      "item41": "Descarregar App",
-      "item42": "Descarregar CWG Center App",
-      "item43": "CWG Center App, uma plataforma de negociação completa. Digitalize ou clique para descarregar, atualizações de mercado em tempo real, negociação simples e eficiente, operação fácil a qualquer hora e em qualquer lugar – não perca nenhuma oportunidade de investimento."
+      "item41": "Download do App",
+      "item42": "Download do CWG Center App",
+      "item43": "CWG Center App, plataforma de trading completa. Escaneie o código QR ou baixe com um clique, atualizações de mercado em tempo real, trading simples e eficiente, fácil de operar a qualquer momento e em qualquer lugar, não perca nenhuma oportunidade de investimento."
     },
     "tradingCenter": {
-      "item71": "Metais preciosos",
-      "item72": "Câmbio",
+      "item71": "Metais Preciosos",
+      "item72": "Forex",
       "item73": "Energia",
-      "item74": "CFDs",
+      "item74": "CFD",
       "item75": "Índices",
-      "item76": "Criptomoedas"
+      "item76": "Criptomoeda"
     },
     "custom": {
-      "t1": "Saldo total",
-      "t2": "Patrimônio líquido",
-      "t3": "Depósito total",
-      "t4": "Retirada total"
+      "t1": "Saldo Total",
+      "t2": "Equity",
+      "t3": "Depósito Total",
+      "t4": "Retiro Total"
     },
     "login": {
-      "agreemnet1": "Ao clicar em 'Entrar', você confirma que leu, entendeu e concorda com todas as informações aqui contidas."
+      "agreemnet1": " Clique em \"Entrar\" para confirmar que você leu, entendeu e concordou com todas as informações neste documento. "
     },
     "account": {
       "label1": "Começar a negociar",

+ 23 - 19
locale/th.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "จริง",
-    "item2": "จำลอง",
-    "item3": "เปลี่ยนรหัสผ่านเทรด",
+    "item2": "แบบจำลอง",
+    "item3": "เปลี่ยนรหัสผ่านการเทรด",
     "item4": "เปลี่ยนรหัสผ่านนักลงทุน",
     "item5": "วิเคราะห์",
     "item6": "การชำระเงินและกระเป๋าเงิน",
-    "item7": "เพิ่มเติม",
-    "item8": "ข้อจำกัด",
-    "item9": "เงินฝากขั้นต่ำ",
-    "item10": "ล็อตขั้นต่ำ",
-    "item11": "เลเวอเรจสูงสุด",
+    "item7": "อื่น ๆ",
+    "item8": "ขีดจำกัด",
+    "item9": "ฝากขั้นต่ำ",
+    "item10": "ขนาดล็อตขั้นต่ำ",
+    "item11": "การใช้งานเลเวอร์ชั้นสูงสุด",
     "item12": "สเปรดขั้นต่ำ",
     "item13": "วิธีการเปิดเพิ่มเติม",
-    "item14": "บัญชีที่เลือกในขณะนี้คือ (บัญชีเซ็นต์ Cent)",
+    "item14": "บัญชีที่เลือกปัจจุบันคือ (บัญชี Cent)",
     "item15": "หน่วยของยอดคงเหลือคือ Cent (1 USD = 100 Cent)",
-    "item16": "โปรดตรวจสอบหน่วยของจำนวนเงินโอนที่คุณป้อนว่าถูกต้อง เพื่อหลีกเลี่ยงการโอนล้มเหลวเนื่องจากหน่วยไม่ตรงกัน",
+    "item16": "กรุณายืนยันว่าจำนวนเงินที่คุณป้อนสำหรับการโอนนั้นถูกต้องตามหน่วย เพื่อหลีกเลี่ยงความล้มเหลวในการโอนอันเนื่องมาจากความไม่ถูกต้องของหน่วย",
+    "item17": "เริ่มเทรด",
+    "item18": "ลบแล้ว",
+    "LoginPwdOld1": "รหัสผ่านการเทรดหลัก",
+    "InvestorNewPwd": "รหัสผ่านนักลงทุนใหม่",
     "follow": {
       "enum1": "รายสัปดาห์",
       "enum2": "ทุกสองสัปดาห์",
       "enum3": "รายเดือน",
-      "v1": "กรุณาป้อนตัวเลขที่มากกว่า 0"
+      "v1": "กรุณาใส่เลขที่มากกว่า 0."
     },
     "Downloadpage": {
       "item41": "ดาวน์โหลดแอป",
-      "item42": "ดาวน์โหลดแอป CWG Center",
-      "item43": "แอป CWG Center แพลตฟอร์มเทรดแบบครบวงจร สแกนหรือคลิกเพื่อดาวน์โหลด อัปเดตราคาตลาดแบบเรียลไทม์ เทรดง่ายมีประสิทธิภาพ ใช้งานสะดวกทุกที่ทุกเวลา – ไม่พลาดทุกโอกาสในการลงทุน"
+      "item42": "ดาวน์โหลด CWG Center App",
+      "item43": "CWG Center App, แพลตฟอร์มเทรด一站式. สแกน QR Code หรือดาวน์โหลดด้วยคลิกเดียว, อัพเดทตลาดเรียลไทม์, เทรดง่ายและมีประสิทธิภาพ, ใช้งานง่ายทุกเวลาทุกที่, ไม่พลาดโอกาสลงทุนใดๆ."
     },
     "tradingCenter": {
       "item71": "โลหะมีค่า",
       "item72": "ฟอเร็กซ์",
       "item73": "พลังงาน",
-      "item74": "สัญญาส่วนต่าง",
+      "item74": "CFD",
       "item75": "ดัชนี",
-      "item76": "สกุลเงินดิจิทัล"
+      "item76": "คริปโตเคอเรนซี"
     },
     "custom": {
-      "t1": "ยอดคงเหลือรวม",
-      "t2": "มูลค่าสุทธิ",
-      "t3": "เงินฝากรวม",
-      "t4": "การถอนรวม"
+      "t1": "ยอดคงเหลวทั้งห",
+      "t2": "ความมั่งคั่ง",
+      "t3": "ฝากทั้งหมด",
+      "t4": "ถอนทั้งหมด"
     },
     "login": {
-      "agreemnet1": "การคลิก 'เข้าสู่ระบบ' ถือว่าคุณยืนยันว่าคุณได้อ่าน ทำความเข้าใจ และยอมรับข้อมูลทั้งหมดที่มีอยู่ในที่นี่"
+      "agreemnet1": " คลิก \"เข้าสู่ระบบ\" เพื่อยืนยันว่าคุณได้อ่าน, เข้าใจ, และยอมรับทุกข้อมูลในเอกสารนี้. "
     },
     "account": {
       "label1": "เริ่มเทรด",

+ 25 - 21
locale/tr.json

@@ -1,48 +1,52 @@
 {
   "vu": {
     "item1": "Gerçek",
-    "item2": "Simülasyon",
-    "item3": "İşlem Şifresini Değiştir",
+    "item2": "Demo",
+    "item3": "Ticaret Şifresini Değiştir",
     "item4": "Yatırımcı Şifresini Değiştir",
     "item5": "Analiz",
     "item6": "Ödeme ve Cüzdan",
     "item7": "Daha Fazla",
-    "item8": "Sınırlamalar",
-    "item9": "Minimum Yatırma",
-    "item10": "Minimum Lot",
+    "item8": "Limitler",
+    "item9": "Minimum Miktar",
+    "item10": "Minimum Lot Boyutu",
     "item11": "Maksimum Kaldıraç",
     "item12": "Minimum Spread",
-    "item13": "Daha Fazla Açılış Yöntemi",
-    "item14": "Şu anda seçilen hesap (Cent Hesabı Cent)",
+    "item13": "Daha fazla açma yöntemi",
+    "item14": "Şu anda seçili olan hesap (Cent Hesabı)'dır.",
     "item15": "Bakiye birimi Cent'tir (1 USD = 100 Cent).",
-    "item16": "Lütfen girdiğiniz transfer tutarının biriminin doğru olduğundan emin olun, birim farklılıkları nedeniyle transfer başarısızlığını önlemek için.",
+    "item16": "Lütfen girdiğiniz transfer tutarının doğru birimde olduğunu onaylayın, böylece birim farklılıklarından kaynaklanan transfer hatalarını önleyebilirsiniz.",
+    "item17": "Ticareti Başlat",
+    "item18": "Silindi",
+    "LoginPwdOld1": "Ana Ticaret Şifresi",
+    "InvestorNewPwd": "Yeni Yatırımcı Şifresi",
     "follow": {
       "enum1": "Haftalık",
-      "enum2": "İki Haftada Bir",
+      "enum2": "Her iki haftada bir",
       "enum3": "Aylık",
-      "v1": "Lütfen 0'dan büyük bir sayı girin"
+      "v1": "Lütfen 0'dan büyük bir sayı girin."
     },
     "Downloadpage": {
-      "item41": "Uygulama İndir",
-      "item42": "CWG Center Uygulamasını İndir",
-      "item43": "CWG Center Uygulaması, hepsi bir arada bir işlem platformu. Tarayın veya tıklayarak indirin, gerçek zamanlı piyasa güncellemeleri, basit ve verimli işlem, her zaman ve her yerde kolay kullanım – hiçbir yatırım fırsatını kaçırmayın."
+      "item41": "Uygulama İndirme",
+      "item42": "CWG Center App İndirme",
+      "item43": "CWG Center App, tek dükkanlı ticaret platformu. QR kodunu tarayın veya tek tıklamayla indirin, gerçek zamanlı piyasa güncellemeleri, basit ve verimli ticaret, her zaman ve her yerde kolayca çalıştırın, hiçbir yatırım fırsatını kaçırmayın."
     },
     "tradingCenter": {
-      "item71": "Kıymetli Metaller",
-      "item72": "Forex",
+      "item71": "Değerli Metaller",
+      "item72": "Döviz",
       "item73": "Enerji",
-      "item74": "CFD'ler",
+      "item74": "CFD",
       "item75": "Endeksler",
-      "item76": "Kripto Paralar"
+      "item76": "Kripto Para"
     },
     "custom": {
       "t1": "Toplam Bakiye",
-      "t2": "Net Değer",
-      "t3": "Toplam Yatırma",
-      "t4": "Toplam Çekme"
+      "t2": "Equity",
+      "t3": "Toplam Yatırım",
+      "t4": "Toplam Çekim"
     },
     "login": {
-      "agreemnet1": "'Giriş Yap' butonuna tıklayarak, burada yer alan tüm bilgileri okuduğunuzu, anladığınızı ve kabul ettiğinizi onaylarsınız."
+      "agreemnet1": " \"Giriş\"e tıklayarak bu belgedeki tüm bilgileri okuduğunuzu, anladığınızı ve kabul ettiğinizi onaylayın. "
     },
     "account": {
       "label1": "İşleme Başla",

+ 53 - 49
locale/ug.json

@@ -1,54 +1,58 @@
 {
-  "vu": {
-    "item1": "ھەقىقىي",
-    "item2": "سىمۇلياتسىيە",
-    "item3": "سودا پارولىنى ئۆزگەرت",
-    "item4": "ئىنۋېستور پارولىنى ئۆزگەرت",
-    "item5": "تەھلىل",
-    "item6": "تۆلەم ۋە ھەميان",
-    "item7": "تېخىمۇ كۆپ",
-    "item8": "چەكلىمىلەر",
-    "item9": "ئەڭ تۆۋەن ئامانەت",
-    "item10": "ئەڭ تۆۋەن لوت",
-    "item11": "ئەڭ يۇقىرى لېۋېرىژ",
-    "item12": "ئەڭ تۆۋەن سپرېد",
-    "item13": "تېخىمۇ كۆپ ئېچىش ئۇسۇللىرى",
-    "item14": "نۆۋەتتە تاللانغان ھېسابات (سېنت ھېساباتى Cent)",
-    "item15": "قالدۇق بىرلىكى Cent (1 USD = 100 Cent).",
-    "item16": "يەتكۈزۈش مەغلۇبىيىتىنىڭ بىرلىك پەرقى سەۋەبىدىن ئەمەلگە ئاشماستىن ساقلىنىش ئۈچۈن، كىرگۈزگەن يۆتكەش سوممىسىنىڭ بىرلىكىنىڭ توغرا ئىكەنلىكىنى جەزملەڭ.",
-    "follow": {
-      "enum1": "ھەپتىلىك",
-      "enum2": "ئىككى ھەپتىلىك",
-      "enum3": "ئايلىق",
-      "v1": "0 دىن چوڭ سان كىرگۈزۈڭ"
-    },
-    "Downloadpage": {
-      "item41": "ئەپنى چۈشۈرۈش",
-      "item42": "CWG Center ئەپنى چۈشۈرۈش",
-      "item43": "CWG Center ئەپ، ھەممىبىر سودا سۇپىسى. سىكانىرلاڭ ياكى بىر بېسىش بىلەن چۈشۈرۈڭ، رېئال ۋاقىت بازار يېڭىلانمىلىرى، ئاددىي ۋە ئۈنۈملۈك سودا، ھەر ۋاقىت ۋە ھەر يەردە ئاسان مەشغۇلات قىلىش – ھېچقانداق ئىنۋېستىسىيە پۇرسىتىنى قولدىن بەرمەڭ."
-    },
-    "tradingCenter": {
-      "item71": "قىممەتلىك مېتاللار",
-      "item72": "فورېكس",
-      "item73": "ئېنېرگىيە",
-      "item74": "CFD لار",
-      "item75": "ئىندېكسىلار",
-      "item76": "كىرىپتو پۇللار"
-    },
-    "custom": {
-      "t1": "ئومۇمىي قالدۇق",
-      "t2": "ساپ قىممەت",
-      "t3": "ئومۇمىي ئامانەت",
-      "t4": "ئومۇمىي چېكىلىش"
-    },
-    "login": {
-      "agreemnet1": "«كىرىش»نى بېسىش ئارقىلىق، بۇ يەردىكى بارلىق ئۇچۇرلارنى ئوقۇغانلىقىڭىزنى، چۈشەنگەنلىكىڭىزنى ۋە قوبۇل قىلغانلىقىڭىزنى جەزملەيسىز."
+    "vu": {
+        "item1": "ھەقىقى",
+        "item2": "مودېل",
+        "item3": "سېتىش پارولىنى ئۆزگەرتىش",
+        "item4": "مۇلازىمىتى پارولىنى ئۆزگەرتىش",
+        "item5": "تاللانما",
+        "item6": "تۆلەش ۋە سومكا",
+        "item7": "تېخىمۇ كۆپ",
+        "item8": "چەك",
+        "item9": "ئەڭ تۆۋەن مەبلەغ",
+        "item10": "ئەڭ كىچىك قول",
+        "item11": "ئەڭ چوڭ قېتىملىق نىسبەت",
+        "item12": "ئەڭ كىچىك پىكسېل ئارىلىقى",
+        "item13": "تېخىمۇ كۆپ ئېچىلىش ئۇسۇلى",
+        "item14": "ھازىرقى تاللانغان ھېسابات (Cent ئەھۋال)",
+        "item15": "ئىشىپ قالغان پۇل بىرلىكى Cent (1 USD = 100 Cent).",
+        "item16": "پۇل ئايلاندۇرۇش مەبلەغىڭىزنىڭ بىرلىكى توغرى كىرگۈزۈلگەنلىكىنى دەلىللەڭ، بىرلىك پەرقى تۈپەيلىدىن ئايلاندۇرۇش مەغلۇبىيىتىدىن ساقلىنىڭ.",
+        "item17": "سودا باشلا",
+        "item18": "ئۆچۈرۈلدى",
+        "LoginPwdOld1": "ئاساسىي سودا پارولى",
+        "InvestorNewPwd": "يېڭى مۇلازىمىتى پارولى",
+        "follow": {
+            "enum1": "ھەپتىدە بىر قېتىم",
+            "enum2": "ئىككى ھەپتە بىر قېتىم",
+            "enum3": "ئايدا بىر قېتىم",
+            "v1": "0 دىن چوڭ بولغان ساننى كىرگۈزۈڭ"
+        },
+        "Downloadpage": {
+            "item41": "App يۈكلەش",
+            "item42": "CWG Center App يۈكلەش",
+            "item43": "CWG Center App، ھەممە ئىشلەتنى بىر جەرياندەك پلاتفورما. كودى سانلىق ياكى بىر باسما بىلەن تېز يۈكلىگىلى بولىدۇ، پەرقىدەك ۋاقىتتە ئەھۋاللار يېڭىلانىدۇ، سودى تېز ۋە ئاسان، ھەر ۋاقىت ھەر جايدە ئاسانلا ئىشلەتسىڭىز بولىدۇ، سودا ئۈلۈشىدىن خالىغانچە مەغلۇب بولماڭ."
+        },
+        "tradingCenter": {
+            "item71": "ئالىم-ئۈزۈم ماددا",
+            "item72": "سىرتقى پۇل",
+            "item73": "ئېنېرگىيە",
+            "item74": "تۆۋەنلىك-يۇقىرىلىق كېلىشىمى",
+            "item75": "ئىندېكس",
+            "item76": "شىفىرلىق پۇل"
+        },
+        "custom": {
+            "t1": "جەمئىي سومما",
+            "t2": "تەڭشەنگەن قىممەت",
+            "t3": "جەمئىي قوشۇمچە",
+            "t4": "جەمئىي چىقىرىش"
+        },
+        "login": {
+            "agreemnet1": "«كىرگۈزۈش» نى باسىش سىز بۇ يازمادىكى ھەممە ئۇچۇرلارنى ئوقۇپ، چۈشەنۈپ، رازى بولغانلىقىڭىزنى جەزىملەيدۇ"
+        },
+      "account": {
+        "label1": "سودانى باشلاش",
+        "item1": "ھېساباتنى ئارخىپلاش"
+      }
     },
-    "account": {
-      "label1": "سودانى باشلاش",
-      "item1": "ھېساباتنى ئارخىپلاش"
-    }
-  },
     "common": {
         "confirm": "جەزملەش",
         "cancel": "ئۈچۈرۈش",

+ 24 - 20
locale/vn.json

@@ -1,48 +1,52 @@
 {
   "vu": {
-    "item1": "Thực",
-    "item2": "Mô phỏng",
+    "item1": "Thực tế",
+    "item2": "Demo",
     "item3": "Đổi mật khẩu giao dịch",
     "item4": "Đổi mật khẩu nhà đầu tư",
     "item5": "Phân tích",
-    "item6": "Thanh toán & Ví",
+    "item6": "Thanh toán  Ví",
     "item7": "Thêm",
     "item8": "Giới hạn",
-    "item9": "Tiền gửi tối thiểu",
-    "item10": "Lô tối thiểu",
-    "item11": "Đòn bẩy tối đa",
-    "item12": "Chênh lệch tối thiểu",
-    "item13": "Thêm cách mở",
-    "item14": "Tài khoản hiện được chọn là (Tài khoản Cent Cent)",
+    "item9": "Tối thiểu nạp tiền",
+    "item10": "Kích thước lô tối thiểu",
+    "item11": "Leverage tối đa",
+    "item12": "Spread tối thiểu",
+    "item13": "Nhiều cách mở hơn",
+    "item14": "Tài khoản được chọn hiện tại là (Tài khoản Cent).",
     "item15": "Đơn vị số dư là Cent (1 USD = 100 Cent).",
-    "item16": "Vui lòng xác nhận đơn vị của số tiền chuyển bạn nhập là chính xác để tránh chuyển khoản thất bại do sai đơn vị.",
+    "item16": "Vui lòng xác nhận rằng số tiền chuyển bạn nhập đã đúng đơn vị để tránh lỗi giao dịch do sai đơn vị.",
+    "item17": "Bắt đầu giao dịch",
+    "item18": "Đã xóa",
+    "LoginPwdOld1": "Mật khẩu giao dịch chính",
+    "InvestorNewPwd": "Mật khẩu nhà đầu tư mới",
     "follow": {
       "enum1": "Hàng tuần",
-      "enum2": "Hai tuần một lần",
+      "enum2": "Mỗi hai tuần",
       "enum3": "Hàng tháng",
-      "v1": "Vui lòng nhập số lớn hơn 0"
+      "v1": "Vui lòng nhập số lớn hơn 0."
     },
     "Downloadpage": {
-      "item41": "Tải ứng dụng",
-      "item42": "Tải ứng dụng CWG Center",
-      "item43": "Ứng dụng CWG Center, nền tảng giao dịch tất cả trong một. Quét hoặc nhấp để tải xuống, cập nhật thị trường theo thời gian thực, giao dịch đơn giản và hiệu quả, thao tác dễ dàng mọi lúc mọi nơi – không bỏ lỡ bất kỳ cơ hội đầu tư nào."
+      "item41": "Tải App",
+      "item42": "Tải CWG Center App",
+      "item43": "CWG Center App, nền tảng giao dịch一站式. Quét mã QR hoặc tải về bằng một cú nhấp, cập nhật thị trường thời gian thực, giao dịch đơn giản và hiệu quả, dễ dàng vận hành bất kỳ lúc nào, bất kỳ đâu, không bỏ lỡ cơ hội đầu tư nào."
     },
     "tradingCenter": {
       "item71": "Kim loại quý",
       "item72": "Ngoại hối",
       "item73": "Năng lượng",
-      "item74": "Hợp đồng chênh lệch",
+      "item74": "CFD",
       "item75": "Chỉ số",
-      "item76": "Tiền mã hóa"
+      "item76": "Tiền điện tử"
     },
     "custom": {
       "t1": "Tổng số dư",
-      "t2": "Giá trị tài sản ròng",
+      "t2": "Equity",
       "t3": "Tổng tiền gửi",
-      "t4": "Tổng rút tiền"
+      "t4": "Tổng tiền rút"
     },
     "login": {
-      "agreemnet1": "Nhấp vào 'Đăng nhập' xác nhận rằng bạn đã đọc, hiểu và đồng ý với tất cả thông tin được nêu tại đây."
+      "agreemnet1": " Nhấp \"Đăng nhập\" để xác nhận bạn đã đọc, hiểu và đồng ý với tất cả thông tin trong tài liệu này. "
     },
     "account": {
       "label1": "Bắt đầu giao dịch",

+ 7 - 3
locale/zhHant.json

@@ -12,10 +12,14 @@
     "item10": "最小手數",
     "item11": "最大槓桿",
     "item12": "最小點差",
-    "item13": "更多開方式",
+    "item13": "更多開方式",
     "item14": "當前選擇帳戶為 (美分帳戶 Cent)",
     "item15": "餘額單位為 Cent(1 USD = 100 Cent)。",
     "item16": "請確認您輸入的轉帳金額單位是否正確,以避免因單位差異導致轉帳失敗。",
+    "item17": "開始交易",
+    "item18": "已刪除",
+    "LoginPwdOld1": "主交易密碼",
+    "InvestorNewPwd": "新投資者密碼",
     "follow": {
       "enum1": "每週",
       "enum2": "每兩週",
@@ -25,7 +29,7 @@
     "Downloadpage": {
       "item41": "App 下載",
       "item42": "CWG Center App 下載",
-      "item43": "CWG Center App,一站式交易平台。掃碼或一鍵即可下載,行情時更新,交易簡單高效,隨時隨地輕鬆操作,不錯過每一個投資良機。"
+      "item43": "CWG Center App,一站式交易平台。掃碼或一鍵即可下載,行情時更新,交易簡單高效,隨時隨地輕鬆操作,不錯過每一個投資良機。"
     },
     "tradingCenter": {
       "item71": "貴金屬",
@@ -42,7 +46,7 @@
       "t4": "總取款"
     },
     "login": {
-      "agreemnet1": "單擊「登錄」確認您已閱讀、理解並同意本文中的所有信息"
+      "agreemnet1": " 單擊「登錄」確認您已閱讀、理解並同意本文中的所有信息 "
     },
     "account": {
       "label1": "開始交易",

+ 3 - 3
manifest.json

@@ -104,9 +104,9 @@
             "splashscreen" : {
                 "androidStyle" : "default",
                 "android" : {
-                    "hdpi" : "static/res 4/drawable-hdpi/splash.9.png",
-                    "xxhdpi" : "static/res 4/drawable-xxhdpi/splash.9.png",
-                    "xhdpi" : "static/res 4/drawable-xhdpi/splash.9.png"
+                    "hdpi" : "static/res 4/480x762.png",
+                    "xxhdpi" : "static/res 4/1080x1882.png",
+                    "xhdpi" : "static/res 4/720x1242.png"
                 },
                 "iosStyle" : "storyboard",
                 "ios" : {

Разлика између датотеке није приказан због своје велике величине
+ 422 - 419
pages/common/download.vue


+ 3 - 3
pages/customer/components/AccountCard.vue

@@ -16,7 +16,7 @@
                         <!-- <cwg-icon name="crm-check" :size="13" :color="'#22B07E'" /> -->
                         <text v-t="'Blockchain.enabled'" />
                     </view>
-                    <text v-if="isDel" class="badge bg-danger-subtle text-danger">已删除</text>
+                    <text v-if="isDel" class="badge bg-danger-subtle text-danger" v-t="'vu.item18'"></text>
                 </template>
 
 
@@ -245,7 +245,7 @@ const customMenuList = computed(() => {
     switch (accountInfo.value.listType) {
         case 'real':
             return [
-                { label: t('vu.account.label1'), type: 'trade' },
+                { label: t('vu.item17'), type: 'trade' },
                 { label: t('Ib.Report.Tit1'), type: 'history' },
                 { label: t('Ib.Report.Tit4'), type: 'position' },
                 { label: t('Home.page_customer.item4'), type: 'payment-history' },
@@ -256,7 +256,7 @@ const customMenuList = computed(() => {
             ]
         case 'demo':
             return [
-                { label: t('vu.account.label1'), type: 'trade' },
+                { label: t('vu.item17'), type: 'trade' },
                 { label: t('Documentary.TundManagement.item29'), type: 'info' }
             ]
 

+ 5 - 1
pages/customer/components/CheckPopup.vue

@@ -60,7 +60,11 @@ const toHistory = () => {
 }
 // 去支付
 const GoPayBtn = () => {
-  openExternalUrl(props.goPayLink)
+  if (props.goPayLink?.includes('onchainpay.html')) {
+    openExternalUrl(props.goPayLink, 'pay')
+  } else {
+    openExternalUrl(props.goPayLink)
+  }
 }
 // 复制分享链接
 const CopyShareLink = (link) => {

+ 4 - 4
pages/customer/components/TerminalChangePasswordDialog.vue

@@ -7,13 +7,13 @@
             <template v-if="props.pwdType != 3">
                 <uni-forms :model="passwordInfo" labelWidth="200" label-position="top" class="crm-form">
                     <uni-forms-item
-                        :label="props.pwdType == 1 ? t('Custom.Settings.LoginPwdOld') : t('Custom.Settings.LoginPwdOld1')">
+                        :label="props.pwdType == 1 ? t('Custom.Settings.LoginPwdOld') : t('vu.LoginPwdOld1')">
                         <uni-easyinput type="password" :clearable="false" v-model="passwordInfo.oldPassword"
-                            :placeholder="props.pwdType == 1 ? t('Custom.Settings.LoginPwdOld') : t('Custom.Settings.LoginPwdOld1')" />
+                            :placeholder="props.pwdType == 1 ? t('Custom.Settings.LoginPwdOld') : t('vu.LoginPwdOld1')" />
                     </uni-forms-item>
-                    <uni-forms-item :label="props.pwdType == 1 ? t('Custom.Settings.NewPwd') : t('Custom.Settings.InvestorNewPwd')">
+                    <uni-forms-item :label="props.pwdType == 1 ? t('Custom.Settings.NewPwd') : t('vu.InvestorNewPwd')">
                         <uni-easyinput type="password" :clearable="false" v-model="passwordInfo.newPassword"
-                            :placeholder="props.pwdType == 1 ? t('Custom.Settings.NewPwd') : t('Custom.Settings.InvestorNewPwd')" />
+                            :placeholder="props.pwdType == 1 ? t('Custom.Settings.NewPwd') : t('vu.InvestorNewPwd')" />
                     </uni-forms-item>
                 </uni-forms>
 

+ 13 - 9
pages/customer/components/TerminalInfoDialog.vue

@@ -1,10 +1,10 @@
 <template>
-    <cwg-popup :title="title" v-model:visible="props.visible" :showFooters="false"
+    <cwg-popup :title="displayTitle" v-model:visible="props.visible" :showFooters="false"
         @update:visible="$emit('update:visible', $event)">
         <view class="account-detail-content">
             <!-- 账户编号独立显示(如果需要,也可以作为 fieldList 中的一项) -->
             <view v-if="accountNumber" class="account-number-row">
-                <text class="label">{{ accountLabel }}</text>
+                <text class="label">{{ displayAccountLabel }}</text>
                 <text class="value">{{ accountNumber }}</text>
                 <text class="value">{{ form.fwq }}</text>
             </view>
@@ -25,27 +25,28 @@
 
 <script setup>
 import { computed } from 'vue'
-
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
 const props = defineProps({
     // 是否显示弹窗
     visible: {
         type: Boolean,
         default: false
     },
-    // 弹窗标题
+    // 弹窗标题(空则使用 i18n 默认文案)
     title: {
         type: String,
-        default: '账户详情'
+        default: ''
     },
     // 账户编号(若单独展示)
     accountNumber: {
         type: String,
         default: ''
     },
-    // 账户编号标签
+    // 账户编号标签(空则使用 i18n 默认文案)
     accountLabel: {
         type: String,
-        default: '账户:'
+        default: ''
     },
     // 表单数据对象
     form: {
@@ -64,6 +65,9 @@ const props = defineProps({
 
 const emit = defineEmits(['update:visible'])
 
+const displayTitle = computed(() => props.title || t('Documentary.tradingCenter.item80'))
+const displayAccountLabel = computed(() => props.accountLabel || `${t('Documentary.tradingCenter.item29')}:`)
+
 // 获取字段值
 const getFieldValue = (key) => {
     return props.form?.[key] ?? ''
@@ -78,10 +82,10 @@ const copyValue = (text) => {
     uni.setClipboardData({
         data: String(text),
         success: () => {
-            uni.showToast({ title: '复制成功', icon: 'none' })
+            uni.showToast({ title: t('card.Msg.m8'), icon: 'none' })
         },
         fail: () => {
-            uni.showToast({ title: '复制失败', icon: 'none' })
+            uni.showToast({ title: t('card.Msg.m9'), icon: 'none' })
         }
     })
 }

+ 1 - 2
pages/customer/deposit-select.vue

@@ -1697,7 +1697,7 @@ const showTable = () => {
 }
 const loginComboxOptions = computed(() => {
     return loginOptions.value.map((item) => ({
-        text: item.label,
+        text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
         value: item.login,
       disable: item.disable,
     }))
@@ -1724,7 +1724,6 @@ const getDateList = async () => {
     if (res.code == Code.StatusOK) {
         loginOptions.value = res.data.map(item => ({
             ...item,
-            label: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
           disable: item.closeFunctions.includes('1')
         }))
         const pages = getCurrentPages()

+ 11 - 4
pages/customer/deposit.vue

@@ -378,6 +378,7 @@
         <!-- 数字支付确认弹窗 -->
         <DigitalPayConfirmPopup v-model:visible="dialogDigitalPayConfirm" :WireTransferAccount="WireTransferAccount"
             @close="closeDigitalPayConfirm" @confirm="confirmDigitalPayModal" />
+        <cwg-pay-webview-popup />
     </cwg-page-wrapper>
 </template>
 
@@ -1349,8 +1350,8 @@ const submit = async () => {
                         goPayLink.value = setCardUrl(res.data.result)
                         openExternalUrl(goPayLink.value)
                     } else if (res.data.type == 10) {
-                        goPayLink.value = Host80 + '/pay/onchainpay.html?params=' + res.data.result
-                        openExternalUrl(goPayLink.value)
+                        goPayLink.value = Host80 + '/pay/onchainpay.html?params=' + res.data.result + '&language=' + locale.value
+                        openExternalUrl(goPayLink.value, 'pay')
                     }
                     if (res.data.type != 5) {
                         dialogCheck.value = true
@@ -1624,7 +1625,7 @@ const showTable = (type) => {
 }
 const loginComboxOptions = computed(() => {
     return loginOptions.value.map((item) => ({
-        text: item.label,
+        text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
         value: item.login
     }))
 })
@@ -1649,7 +1650,6 @@ const getDateList = async () => {
     if (res.code == Code.StatusOK) {
         loginOptions.value = res.data.map(item => ({
             ...item,
-            label: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
             disable: item.closeFunctions.includes('1')
         }))
         const pages = getCurrentPages()
@@ -1925,6 +1925,12 @@ watch(channelId, async (newVal) => {
         setTipsAmount()
     }
 });
+
+watch(locale, async (newVal) => {
+    if (newVal) {
+        setTipsAmount()
+    }
+});
 watch(isStep3, async (newVal) => {
     if (newVal) {
         await nextTick();
@@ -1934,6 +1940,7 @@ watch(isStep3, async (newVal) => {
         formRef.value?.clearValidate();
     }
 });
+
 // Watch
 watch(loginValue, (login) => {
     if (login) {

+ 1 - 2
pages/customer/withdrawal-select.vue

@@ -802,7 +802,7 @@ const dialogSuccess = computed(() => dialogCheck.value && dialogVisible.value)
 const dialogError = computed(() => dialogCheck.value && !dialogVisible.value)
 const loginComboxOptions = computed(() => {
   return loginOptions.value.map((item, index) => ({
-    text: item.label,
+    text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
     value: item.login,
     disable: item.disable,
   }))
@@ -1589,7 +1589,6 @@ async function getDateList() {
   if (res.code == Code.StatusOK) {
     loginOptions.value = res.data.map(item => ({
       ...item,
-      label: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
       // 关闭的功能
       disable: item.closeFunctions.includes('2')
     }))

+ 1 - 2
pages/customer/withdrawal.vue

@@ -1059,7 +1059,7 @@ const dialogSuccess = computed(() => dialogCheck.value && dialogVisible.value)
 const dialogError = computed(() => dialogCheck.value && !dialogVisible.value)
 const loginComboxOptions = computed(() => {
   return loginOptions.value.map((item, index) => ({
-    text: item.label,
+    text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
     value: item.login
   }))
 })
@@ -1837,7 +1837,6 @@ async function getDateList() {
   if (res.code == Code.StatusOK) {
     loginOptions.value = res.data.map(item => ({
       ...item,
-      label: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
       disable: item.closeFunctions.includes('2')
     }))
     const route = getCurrentPages().pop().$page.options

+ 1 - 1
pages/ib/withdraw-select.vue

@@ -858,7 +858,7 @@ const validateAmount = () => {
 // ---------- 计算属性 ----------
 const loginComboxOptions = computed(() => {
     return loginOptions.value.map((item, index) => ({
-        text: item.label,
+        text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
         value: item.login
     }))
 })

+ 1 - 1
pages/ib/withdraw.vue

@@ -1172,7 +1172,7 @@ const validateAmount = () => {
 // ---------- 计算属性 ----------
 const loginComboxOptions = computed(() => {
     return loginOptions.value.map((item, index) => ({
-        text: item.label,
+        text: `${item.login} - ${groupTypeName(item.type)} - ${t('Custom.Deposit.AvailableBalance')}${groupCurrency(item.currency)}${item.balance}`,
         value: item.login
     }))
 })

+ 5 - 0
static/appUrl/url.json

@@ -0,0 +1,5 @@
+{
+    "app1": "https://secure.44a5c8109e4.com/wgt/__UNI__EFA7490.wgt",
+    "app2": "https://secure.44a5c8109e4.com/wgt/__UNI__EFA7490.wgt",
+    "app3": "https://testflight.apple.com/join/qVWT1jVU"
+}

+ 32 - 8
utils/openExternalUrl.js

@@ -1,13 +1,37 @@
-export function openExternalUrl(url) {
+import { openPayWebview } from '@/hooks/usePayWebview'
+
+/**
+ * 打开外部链接
+ * @param {string} url
+ * @param {string} [type] 'pay' 支付页:App 内 webview 页,H5 弹窗 iframe
+ * @param {{ title?: string }} [options]
+ */
+export function openExternalUrl(url, type, options = {}) {
+  if (!url) return
+
+  const title = options.title || 'Shop.Order.OrderDetails'
+
+  if (type === 'pay') {
     // #ifdef APP-PLUS
-    plus.runtime.openURL(url, (error) => {
-        if (error) {
-            uni.showToast({ title: '打开失败', icon: 'none' });
-        }
-    });
+    const webviewUrl = `/pages/common/webview?url=${encodeURIComponent(url)}&title=${encodeURIComponent(title)}`
+    uni.navigateTo({ url: webviewUrl })
     // #endif
 
     // #ifdef H5
-    window.open(url, '_blank');
+    openPayWebview(url, title)
     // #endif
-}
+    return
+  }
+
+  // #ifdef APP-PLUS
+  plus.runtime.openURL(url, (error) => {
+    if (error) {
+      uni.showToast({ title: '打开失败', icon: 'none' })
+    }
+  })
+  // #endif
+
+  // #ifdef H5
+  window.open(url, '_blank')
+  // #endif
+}

+ 11 - 0
utils/pageActive.js

@@ -0,0 +1,11 @@
+/** 当前栈顶页面 route,如 pages/customer/trade-history */
+export function getTopPageRoute() {
+  const pages = getCurrentPages()
+  return pages[pages.length - 1]?.route || ''
+}
+
+/** 指定 route 是否为栈顶(页面离开栈顶后应停止请求) */
+export function isRouteOnTop(route) {
+  if (!route) return true
+  return getTopPageRoute() === route
+}

Неке датотеке нису приказане због велике количине промена