1
李凌
2025-09-18 7a4e91cad492b5f2411ae3ec074dae533d0ec335
1
31 files modified
7 files added
429 ■■■■ changed files
.env 2 ●●● patch | view | raw | blame | history
index.html 2 ●●● patch | view | raw | blame | history
relicon.png patch | view | raw | blame | history
src/assets/image/assets-center/aqzc.png patch | view | raw | blame | history
src/assets/image/assets-center/yhxy.png patch | view | raw | blame | history
src/assets/image/assets-center/yszc.png patch | view | raw | blame | history
src/assets/imgs/assets/sd.png patch | view | raw | blame | history
src/assets/imgs/footer/sto-active.png patch | view | raw | blame | history
src/assets/imgs/footer/sto.png patch | view | raw | blame | history
src/assets/imgs/home/home_10.png patch | view | raw | blame | history
src/assets/imgs/logo.png patch | view | raw | blame | history
src/components/fx-footer/index.vue 34 ●●●●● patch | view | raw | blame | history
src/config/index.js 7 ●●●●● patch | view | raw | blame | history
src/i18n/Deutsch.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/Italy.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/Japanese.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/Portuguese.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/Spanish.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/cn.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/en.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/fa.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/korean.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/th.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/vi.js 6 ●●●●● patch | view | raw | blame | history
src/i18n/zhcn.js 6 ●●●●● patch | view | raw | blame | history
src/router/index.js 2 ●●● patch | view | raw | blame | history
src/utils/index.js 5 ●●●●● patch | view | raw | blame | history
src/views/ICO/ico.vue 4 ●●●● patch | view | raw | blame | history
src/views/authentication/index.vue 18 ●●●● patch | view | raw | blame | history
src/views/certificationCenter/index.vue 8 ●●●● patch | view | raw | blame | history
src/views/cryptos/AboutUs/index.vue 29 ●●●● patch | view | raw | blame | history
src/views/homePage/index.vue 43 ●●●●● patch | view | raw | blame | history
src/views/language/index.vue 8 ●●●● patch | view | raw | blame | history
src/views/login/index.vue 17 ●●●● patch | view | raw | blame | history
src/views/my/assets.vue 23 ●●●●● patch | view | raw | blame | history
src/views/my/index.vue 89 ●●●●● patch | view | raw | blame | history
src/views/quotes/List.vue 2 ●●● patch | view | raw | blame | history
src/views/register/index.vue 64 ●●●●● patch | view | raw | blame | history
.env
@@ -1,2 +1,2 @@
VITE_APP__TITLE = "CME"
VITE_APP__TITLE = "StakeCubePro"
VUE_APP_THEME = "dark"
index.html
@@ -11,7 +11,7 @@
  <meta name="theme-color" content="#131a2e">
  <meta name="apple-mobile-web-app-status-bar-style" content="#131a2e" />
  <link rel="apple-touch-icon" href="./public/img/App.png">
  <title>CME</title>
  <title>StakeCubePro</title>
</head>
<body>
relicon.png

src/assets/image/assets-center/aqzc.png
src/assets/image/assets-center/yhxy.png
src/assets/image/assets-center/yszc.png
src/assets/imgs/assets/sd.png
src/assets/imgs/footer/sto-active.png
src/assets/imgs/footer/sto.png
src/assets/imgs/home/home_10.png
src/assets/imgs/logo.png

src/components/fx-footer/index.vue
@@ -20,12 +20,28 @@
          <img :src="props.active ? icon.quotes.active : icon.quotes.inactive" />
        </template>
      </van-tabbar-item>
      <van-tabbar-item name="trade" to="/trade">
      <van-tabbar-item name="STO" to="/ICO/ico">
        <span :class="[active === 'STO' ? 'active' : '']">STO</span>
        <template #icon="props">
          <img :src="props.active ? icon.sto.active : icon.sto.inactive" />
        </template>
      </van-tabbar-item>
      <van-tabbar-item name="btcusdt" to="/cryptos/trade/btcusdt">
        <span :class="[active === 'btcusdt' ? 'active' : '']">{{ $t('现货') }}</span>
        <template #icon="props">
          <img :src="props.active ? icon.btcusdt.active : icon.btcusdt.inactive" />
        </template>
      </van-tabbar-item>
      <!-- <van-tabbar-item name="trade" to="/trade">
        <span :class="[active === 'trade' ? 'active' : '']">{{ $t('trade') }}</span>
        <template #icon="props">
          <img :src="props.active ? icon.trade.active : icon.trade.inactive" />
        </template>
      </van-tabbar-item>
      </van-tabbar-item> -->
      <!-- <van-tabbar-item name="funds" to="/cryptos/funds">
        <span>{{ $t('资金') }}</span>
        <template #icon="props">
@@ -39,7 +55,7 @@
          <img :src="props.active ? icon.news.active : icon.news.inactive" />
        </template>
      </van-tabbar-item> -->
      <!-- <van-tabbar-item name="documentation" to="/documentation">
        <span :class="[active === 'documentation' ? 'active' : '']">{{ $t('跟单') }}</span>
        <template #icon="props">
@@ -98,6 +114,8 @@
  active.value = 'assets'
} else if (route.path == "/documentation/index") {
  active.value = 'documentation'
} else if (route.path == "/ICO/ico") {
  active.value = 'sto'
}
let quotesStore = useQuotesStore()
@@ -118,6 +136,8 @@
    active.value = 'assets'
  } else if (route.path == "/documentation/index") {
    active.value = 'documentation'
  } else if (route.path == "/ICO/ico") {
    active.value = 'sto'
  }
})
// 底部列表
@@ -138,10 +158,18 @@
  //   active: new URL('@/assets/imgs/footer/news-active.png', import.meta.url),
  //   inactive: new URL('@/assets/imgs/footer/news.png', import.meta.url),
  // },
  sto: {
    active: new URL('@/assets/imgs/footer/sto-active.png', import.meta.url),
    inactive: new URL('@/assets/imgs/footer/sto.png', import.meta.url),
  },
  documentation: {
    active: new URL('@/assets/imgs/footer/quotes-active.png', import.meta.url),
    inactive: new URL('@/assets/imgs/footer/quotes.png', import.meta.url),
  },
  btcusdt: {
    active: new URL('@/assets/imgs/footer/trade-active.png', import.meta.url),
    inactive: new URL('@/assets/imgs/footer/trade.png', import.meta.url),
  },
  trade: {
    active: new URL('@/assets/imgs/footer/trade-active.png', import.meta.url),
    inactive: new URL('@/assets/imgs/footer/trade.png', import.meta.url),
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 = 'syjysapi.yanshiz.com' // dev
const ENV_DEV = 'mdjysapi.yanshiz.com' // 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 = 'syjysapi.yanshiz.com' // 接口域名跟随 H5zhapi.coinbtcs.com
const ENV_PRO = 'mdjysapi.yanshiz.com' // 接口域名跟随 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://syimg.yanshiz.com' // 暂时的 单独的图片地址
let imgUrl = 'https://mdimg.yanshiz.com' // 暂时的 单独的图片地址
export const BASE_URL = base_url
export const WS_URL = ws_url
@@ -67,6 +67,7 @@
// 公司logo
export const LOGO = new URL('@/assets/imgs/logo.png', import.meta.url)
export const customerServiceUrl = 'https://chat.onlinesupport.help/chat_online/index?channelId=5c7314eab72c4a72b2dc9b63c4502e69' // 客服外链链接
export default {
    sliderOptions: {
src/i18n/Deutsch.js
@@ -2829,4 +2829,10 @@
    "已分发": "Verteilt",
    "中签数量": "Zuteilungsmenge",
    "停牌中,禁止交易": "Finger weg, ware aus",
    "金融机构代码": "Code der finanzinstitutionen",
    "用户协议": "Nutzungsvereinbarung",
    "隐私政策": "Datenschutzrichtlinie",
    "安全规定": "Sicherheitsbestimmungen",
    "反洗钱协议": "Anti-Geldwäsche-Vereinbarung",
    "法律声明": "Rechtlicher Hinweis",
}
src/i18n/Italy.js
@@ -2919,4 +2919,10 @@
    "已分发": "Distribuito",
    "中签数量": "Quantità di assegnazione",
    "停牌中,禁止交易": "In caso di sospensione, il commercio è vietato",
    "金融机构代码": "Codice delle istituzioni finanziarie",
    "用户协议": "Accordo utente",
    "隐私政策": "Informativa sulla privacy",
    "安全规定": "Norme di sicurezza",
    "反洗钱协议": "Accordo antiriciclaggio",
    "法律声明": "Dichiarazione legale",
}
src/i18n/Japanese.js
@@ -2687,4 +2687,10 @@
    "已分发": "配布済み",
    "中签数量": "当選数量",
    "停牌中,禁止交易": "取引停止中,取引禁止です",
    "金融机构代码": "金融機関コードです",
    "用户协议": "ユーザー契約",
    "隐私政策": "プライバシーポリシー",
    "安全规定": "安全規定",
    "反洗钱协议": "マネーロンダリング防止契約",
    "法律声明": "法的声明",
}
src/i18n/Portuguese.js
@@ -639,4 +639,10 @@
    "已分发": "Distribuído",
    "中签数量": "Quantidade de alocação",
    "停牌中,禁止交易": "Suspensão, proibição de negociação.",
    "金融机构代码": "Código da instituição financeira",
    "用户协议": "Acordo do usuário",
    "隐私政策": "Política de Privacidade",
    "安全规定": "Regulamento de Segurança",
    "反洗钱协议": "Acordo de Prevenção à Lavagem de Dinheiro",
    "法律声明": "Declaração Legal",
}
src/i18n/Spanish.js
@@ -2602,4 +2602,10 @@
    "已分发": "Distribuido",
    "中签数量": "Cantidad de asignación",
    "停牌中,禁止交易": "Suspendido, sin comercio",
    "金融机构代码": "Código de institución financiera",
    "用户协议": "Acuerdo de usuario",
    "隐私政策": "Política de privacidad",
    "安全规定": "Reglamento de seguridad",
    "反洗钱协议": "Acuerdo de prevención de lavado de dinero",
    "法律声明": "Declaración legal",
}
src/i18n/cn.js
@@ -2808,4 +2808,10 @@
    "已分发": "已分發",
    "中签数量": "中籤數量",
    "停牌中,禁止交易": "停牌中,禁止交易",
    "金融机构代码": "金融機構代碼",
    "用户协议": "使用者協議",
    "隐私政策": "隱私政策",
    "安全规定": "安全規定",
    "反洗钱协议": "反洗錢協議",
    "法律声明": "法律聲明",
}
src/i18n/en.js
@@ -2783,4 +2783,10 @@
    "已分发": "Distributed",
    "中签数量": "Allocation quantity",
    "停牌中,禁止交易": "Trading is suspended. Trading is prohibited.",
    "金融机构代码": "Financial institution code",
    "用户协议": "User Agreement",
    "隐私政策": "Privacy Policy",
    "安全规定": "Security Regulations",
    "反洗钱协议": "Anti-Money Laundering Agreement",
    "法律声明": "Legal Statement",
}
src/i18n/fa.js
@@ -2726,4 +2726,10 @@
    "已分发": "Distribué",
    "中签数量": "Quantité d'attribution",
    "停牌中,禁止交易": "Suspension en cours, commerce interdit",
    "金融机构代码": "Code de l’institution financière",
    "用户协议": "Accord d'utilisateur",
    "隐私政策": "Politique de confidentialité",
    "安全规定": "Règlement de sécurité",
    "反洗钱协议": "Accord de lutte contre le blanchiment d'argent",
    "法律声明": "Mention légale",
}
src/i18n/korean.js
@@ -2823,4 +2823,10 @@
    "已分发": "배분 완료",
    "中签数量": "당첨 수량",
    "停牌中,禁止交易": "주식 거래 정지 중 거래를 금지하다",
    "金融机构代码": "금융기관 코드",
    "用户协议": "사용자 계약",
    "隐私政策": "개인정보 보호정책",
    "安全规定": "안전 규정",
    "反洗钱协议": "자금세탁 방지 계약",
    "法律声明": "법적 선언",
}
src/i18n/th.js
@@ -2794,4 +2794,10 @@
    "已分发": "แจกจ่ายแล้ว",
    "中签数量": "จำนวนที่ได้รับจัดสรร",
    "停牌中,禁止交易": "ไม่มีการแลกเปลี่ยน",
    "金融机构代码": "รหัสสถาบันการเงิน",
    "用户协议": "ข้อตกลงผู้ใช้",
    "隐私政策": "นโยบายความเป็นส่วนตัว",
    "安全规定": "ข้อกำหนดด้านความปลอดภัย",
    "反洗钱协议": "ข้อตกลงการป้องกันการฟอกเงิน",
    "法律声明": "คำชี้แจงทางกฎหมาย",
}
src/i18n/vi.js
@@ -2773,4 +2773,10 @@
    "已分发": "Đã phân phối",
    "中签数量": "Số lượng được phân bổ",
    "停牌中,禁止交易": "Bị đình chỉ, không giao dịch",
    "金融机构代码": "Mã tổ chức tài chính",
    "用户协议": "Thỏa thuận người dùng",
    "隐私政策": "Chính sách bảo mật",
    "安全规定": "Quy định an toàn",
    "反洗钱协议": "Thỏa thuận chống rửa tiền",
    "法律声明": "Tuyên bố pháp lý",
}
src/i18n/zhcn.js
@@ -2788,4 +2788,10 @@
    "已分发": "已分发",
    "中签数量": "中签数量",
    "停牌中,禁止交易": "停牌中,禁止交易",
    "金融机构代码": "金融机构代码",
    "用户协议": "用户协议",
    "隐私政策": "隐私政策",
    "安全规定": "安全规定",
    "反洗钱协议": "反洗钱协议",
    "法律声明": "法律声明",
}
src/router/index.js
@@ -52,7 +52,7 @@
            children: [{
                    path: 'ico',
                    meta: {
                        tarbar: false,
                        tarbar: true,
                        keepAlive: true
                    },
                    component: () => import( /* webpackChunkName: "ico" */ /* webpackPrefetch: true */
src/utils/index.js
@@ -167,4 +167,9 @@
    return ''
  }
  return str.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/g, '').replace(/&nbsp;/ig, '')
}
export const formatWithCommas = (num) => {
  if (num === null || num === undefined || isNaN(num)) return '--';
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
src/views/ICO/ico.vue
@@ -1,8 +1,8 @@
<template>
    <div class="ico">
        <fx-header>
        <fx-header :showLeft="false">
            <template v-slot:title>
                <div>ICO</div>
                <div>STO</div>
            </template>
            <template v-slot:right>
                <van-icon name="todo-list-o" @click="$router.push('/ICO/icoRecord')" />
src/views/authentication/index.vue
@@ -3,7 +3,8 @@
  <div style="padding-bottom: 30px" class="font-26 authentication">
    <fx-header @back="loginOut">
      <template #title>
        {{ $t('primaryCertification') }}
        <!-- {{ $t('primaryCertification') }} -->
        {{ $t('realNameVertify') }}
      </template>
    </fx-header>
    <!-- <country-list /> -->
@@ -113,6 +114,7 @@
import countries from "./components/countryList";
import { getCurrentInstance } from 'vue';
import { useI18n } from "vue-i18n";
import { customerServiceUrl } from '@/config'
const { t } = useI18n()
const router = useRouter()
const countryName = ref(t('selectNation'))
@@ -133,6 +135,7 @@
const language = ref('en')
const controlChild = ref(null)
const { proxy } = getCurrentInstance();
const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链
onMounted(() => {
  fetchInfo();
@@ -206,7 +209,7 @@
    showToast(t('entryCredent'))
    return
  }
  if (frontFile.value.length == 0 || reverseFile.value.length == 0|| fileList.value.length == 0) {
  if (frontFile.value.length == 0 || reverseFile.value.length == 0 || fileList.value.length == 0) {
    showToast(t('uploadComplete'))
    return
  }
@@ -227,14 +230,19 @@
  })
}
const tokefu = () => {
  router.push('/customerService')
  if (customer_service_url.value) {
    window.location.href = customer_service_url.value;
  } else {
    router.push('/customerService')
  }
}
</script>
<style lang="scss" scoped>
@import '../../assets/css/copy.scss';
@import "@/views/authentication/components/intl.css";
.box{
.box {
  padding: 1.5rem !important;
}
@@ -256,7 +264,7 @@
}
input:disabled {
  background:  $mainbgWhiteColor;
  background: $mainbgWhiteColor;
}
.list-view {
src/views/certificationCenter/index.vue
@@ -18,7 +18,7 @@
      </div>
    </div>
    <div class="contentBox pt-5 tabBackground pb-5">
      <div class="btnBox2">
      <!-- <div class="btnBox2">
        <div class="textColor4 textColor5 flex" style="justify-content: center;align-items: center;"
          :class="{ 'activeStyle': active == 0 }" @click="changeTab(0)">
          <img v-if="identityverif" src="../../assets/image/idImg/finishIcon.png" alt="" class="w-10 h-10 mr-2" />
@@ -31,7 +31,7 @@
          <img v-else src="../../assets/image/idImg/finishIcon1.png" alt="" class="w-10 h-10 mr-2" />
          <span>{{ $t('advancedCertification') }}</span>
        </div>
      </div>
      </div> -->
      <div v-show="active == 0">
        <div class="justify-between23">
          <div class="textColor1">{{ $t('require') }}</div>
@@ -54,7 +54,7 @@
          </div>
        </div>
        <div class="px-32-1 px-32-2">
          <div class="font-36 textColor mt-82 span32">{{ $t('featuresAndLimitations') }}</div>
          <!-- <div class="font-36 textColor mt-82 span32">{{ $t('featuresAndLimitations') }}</div>
          <content-com class="mt-40" :contentObj="coinObj" :state="identityverif"></content-com>
          <content-com class="mt-40" :contentObj="c2cObj" :state="identityverif"></content-com>
          <content-com class="mt-40" :contentObj="currencyObj" :state="identityverif"></content-com>
@@ -64,7 +64,7 @@
          </div>
          <div class=" text-red font-20">
            <p v-show="(kyc_status == 3)">{{ $t('certificationRefusal') }}:{{ turnDownMsg }}</p>
          </div>
          </div> -->
          <div class="rounded-lg py-26 text-center btn"
            :class="kyc_status == 0 || kyc_status == 3 ? 'btnMain text-white' : 'bgDark text-grey'" @click="openUlr(1)">{{
              fixBtnState(kyc_status) }}</div>
src/views/cryptos/AboutUs/index.vue
@@ -1,7 +1,7 @@
<template>
  <div id="cryptos">
    <div class="CommonProblem">
      <assets-head :title="serviceTerm ? $t('服务条款') : $t('关于我们')" />
      <assets-head :title="pageTitle" />
      <div class="CommonProblem-padding">
        <p class="textColor" v-html="content"></p>
      </div>
@@ -26,6 +26,26 @@
  components: {
    assetsHead
  },
  computed: {
    pageTitle() {
      switch (this.serviceTerm) {
        case '26':
          return this.$t('关于我们')
        case '21':
          return this.$t('安全规定')
        case '22':
          return this.$t('法律声明')
        case '23':
          return this.$t('用户协议')
        case '24':
          return this.$t('隐私政策')
        case '25':
          return this.$t('反洗钱协议')
        default:
          return this.$t('关于我们')
      }
    }
  },
  mounted() {
    this.serviceTerm = this.$route.query.serviceTerm
    console.log(this.serviceTerm, 'this.serviceTerm')
@@ -43,8 +63,9 @@
        language = 'en'
      }
      _getAboutUs({
        content_code: this.serviceTerm ? '001' : '020',
        language: this.serviceTerm ? language : this.$i18n.locale,
        content_code: this.serviceTerm,
        // language: this.serviceTerm ? language : this.$i18n.locale,
        language: 'en', // 强制英文,后台暂时只设置了英文
      }).then((res) => {
        this.content = res.content
        this.title = res.title
@@ -58,7 +79,7 @@
  }
}
</script>
<style lang="scss" >
<style lang="scss">
@import "@/assets/init.scss";
#cryptos {
src/views/homePage/index.vue
@@ -67,7 +67,7 @@
</div> -->
        <div id="cryptos" class="pt-10">
            <list-quatation :listData="qList" :tabShow="false" />
            <list-quatation :listData="qList" :tabShow="false" :tabActive="2" />
        </div>
    </div>
</template>
@@ -81,33 +81,37 @@
import { _getHomeList } from '@/service/cryptos.api'
import { _getNewsList1, _getPopupNews } from '@/service/user.api'
import { useStore } from "vuex";
import { TIME_OUT } from "@/config";
import { TIME_OUT, customerServiceUrl } from "@/config";
import { useUserStore } from '@/store/user';
import { setStorage,getStorage } from '@/utils/index.js';
  let catchSymbol = getStorage('symbol')
  if(!catchSymbol){
      setStorage('symbol', 'btcusdt');
  }
import { setStorage, getStorage } from '@/utils/index.js';
let catchSymbol = getStorage('symbol')
if (!catchSymbol) {
    setStorage('symbol', 'btcusdt');
}
const userStore = useUserStore()
const { t } = useI18n()
const router = useRouter()
const store = useStore();
const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链
const tabbers = [
    // { key: 1, name: t('跟单'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url) },
    // { key: 3, name: `C2C ${t('交易')}`, icon: new URL('@/assets/imgs/home/home_3.png', import.meta.url) },
    // { key: 4, name: t('邀请好友'), icon: new URL('@/assets/imgs/home/home_4.png', import.meta.url) },
    { key: 5, name: t('合约'), icon: new URL('@/assets/imgs/home/home_5.png', import.meta.url), path: '/trade/index' },
    // { key: 5, name: t('合约'), icon: new URL('@/assets/imgs/home/home_5.png', import.meta.url), path: '/trade/index' },
    { key: 6, name: t('现货'), icon: new URL('@/assets/imgs/home/home_5.png', import.meta.url), path: '/cryptos/trade/btcusdt' },
    { key: 2, name: t('储值'), icon: new URL('@/assets/imgs/home/home_2.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
    // { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/exchange/withdraw-usdt' },/cryptos/Withdraw/withdrawPage
    { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
    { key: 2, name: t('储值'), icon: new URL('@/assets/imgs/home/home_2.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
    // { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/exchange/withdraw-usdt' }
    { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
    // { key: 8, name: t('卡券中心'), icon: new URL('@/assets/imgs/home/home_7.png', import.meta.url) },
    { key: 9, name: t('闪兑'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/cryptos/exchangePage' },
    // { key: 9, name: t('闪兑'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/cryptos/exchangePage' },
    { key: 9, name: t('划转'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/my/transfer' },
    // { key: 10, name: t('更多'), icon: new URL('@/assets/imgs/home/home_9.png', import.meta.url) },
    { key: 11, name: "ICO", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/ICO/ico' },
    { key: 12, name: "C2C", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/wantBuy' },
    { key: 11, name: "STO", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/ICO/ico' },
    // { key: 12, name: "C2C", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/wantBuy' },
    // { key: 13, name: t('质押'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '' },
    { key: 14, name: t('onLineService'), icon: new URL('@/assets/imgs/home/home_10.png', import.meta.url), path: '/customerService' },
]
// 获取公告数据
@@ -128,7 +132,16 @@
// 跳转页面
const toPage = (path) => {
    if (!path) return
    router.push(path)
    if (path == '/customerService') {
        if (customer_service_url.value) {
            window.location.href = customer_service_url.value;
        } else {
            router.push(path)
        }
    } else {
        router.push(path)
    }
}
// 轮播图数据
src/views/language/index.vue
@@ -25,16 +25,16 @@
const languageStore = useLanguageStore()
let lang = ref([
  { title: '繁体中文', key: 'CN', image: new URL('../../assets/image/lang/taiwan.png', import.meta.url) },
  { title: '简体中文', key: 'zh-CN', image: new URL('../../assets/image/lang/zh-CN.png', import.meta.url) },
  { title: '繁体中文', key: 'CN', image: new URL('../../assets/image/lang/hongkong.png', import.meta.url) },
  // { title: '简体中文', key: 'zh-CN', image: new URL('../../assets/image/lang/zh-CN.png', import.meta.url) },
  { title: 'English', key: 'en', image: new URL('../../assets/image/lang/en-US.png', import.meta.url) },
  { title: '한국인', key: 'Korean', image: new URL('../../assets/image/lang/Korean.png', import.meta.url) },
  { title: 'やまと', key: 'Japanese', image: new URL('../../assets/image/lang/Japanese.png', import.meta.url) },
  { title: 'Deutsch', key: 'de', image: new URL('../../assets/image/lang/de.png', import.meta.url) }, //德语
  { title: 'Français', key: 'fr', image: new URL('../../assets/image/lang/French.png', import.meta.url) }, //法语
  { title: 'Tiếng Việt', key: 'vi', image: new URL('../../assets/image/lang/vi.png', import.meta.url) },//越南语
  // { title: 'Tiếng Việt', key: 'vi', image: new URL('../../assets/image/lang/vi.png', import.meta.url) },//越南语
  { title: 'Italiano', key: 'Italy', image: new URL('../../assets/image/lang/Italy.png', import.meta.url) }, //意大利语
  { title: 'ไทย', key: 'th', image: new URL('../../assets/image/lang/Thai.png', import.meta.url) }, //泰语
  // { title: 'ไทย', key: 'th', image: new URL('../../assets/image/lang/Thai.png', import.meta.url) }, //泰语
])
src/views/login/index.vue
@@ -1,6 +1,8 @@
<template>
    <div class="login">
        <div class="top" @click="onRoute('/homePage/index')"><img src="../../assets/image/icon-close.png" alt="" />
        <div class="top flex justify-between items-center">
            <img src="../../assets/image/icon-close.png" alt="" @click="onRoute('/homePage/index')" />
            <div @click="onRoute('/customerService')">{{ $t('onLineService') }}</div>
        </div>
        <!-- <div class="divider mt-10"></div> -->
@@ -42,15 +44,24 @@
import { useRouter } from 'vue-router';
import { showToast } from "vant";
import store from '@/store/store'
import { LOGO } from "@/config";
import { LOGO, customerServiceUrl } from "@/config";
const { t } = useI18n()
const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链
const router = useRouter()
const onRoute = (path) => {
    if (path == 'back') {
        router.go(-1)
    } else {
        router.push(path)
        if (path == '/customerService') {
            if (customer_service_url.value) {
                window.location.href = customer_service_url.value;
            } else {
                router.push(path)
            }
        } else {
            router.push(path)
        }
    }
}
src/views/my/assets.vue
@@ -61,26 +61,15 @@
            :key="item.id">
            <img :src="`${HOST_URL}/symbol/${item.symbol_data}.png`" />
            <span class="ml-5 flex-1">{{ item.symbol_data.toUpperCase() }}/USDT</span>
            <span class="ml-5 flex-1">{{ item.symbol_data.toUpperCase() }}</span>
            <div class="mr-3">
                <!-- <div class="text-right">0</div>
                <div class="assets_item_light text-right">0.00</div> -->
                <div class="text-right" v-if="item.symbol == 'btc'">
                    {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
                </div>
                <div class="text-right" v-else-if="item.symbol == 'eth'">
                    {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
                </div>
                <div class="text-right" v-else-if="item.symbol == 'usdt'">
                    {{ item.volume ? Number(item.volume).toFixed(2) : '0.0' }}
                </div>
                <div class="text-right" v-else>
                    {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
                <div class="text-right">
                    {{ item.volume ? formatWithCommas(Number(item.volume).toFixed(2)) : '0.0' }}
                </div>
                <div class="assets_item_light text-right">
                    ≈{{ currency.currency_symbol }}
                    {{ item.usdt ? Number(item.usdt).toFixed(2) : '0.0' }}
                    {{ item.usdt ? formatWithCommas(Number(item.usdt).toFixed(2)) : '0.0' }}
                </div>
            </div>
        </div>
@@ -102,6 +91,7 @@
import { _getassets } from "@/service/user.api.js";
import { _getAllWallet } from '@/service/fund.api';
import { HOST_URL } from '@/config';
import { formatWithCommas } from '@/utils';
const router = useRouter()
const { t } = useI18n()
@@ -111,7 +101,8 @@
const tabList = [
    { key: 1, name: t('充值'), icon: new URL('@/assets/imgs/assets/chonbi.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
    { key: 2, name: t('提现'), icon: new URL('@/assets/imgs/assets/tibi.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
    { key: 3, name: t('划转'), icon: new URL('@/assets/imgs/assets/huazhuan.png', import.meta.url), path: '/my/transfer' },
    // { key: 3, name: t('划转'), icon: new URL('@/assets/imgs/assets/huazhuan.png', import.meta.url), path: '/my/transfer' },
    { key: 5, name: t('闪兑'), icon: new URL('@/assets/imgs/assets/sd.png', import.meta.url), path: '/cryptos/exchangePage' },
    { key: 4, name: t('账单'), icon: new URL('@/assets/imgs/assets/zd.png', import.meta.url), path: '/cryptos/accountChange' },
]
src/views/my/index.vue
@@ -1,33 +1,34 @@
<template>
  <section class="my-index" >
  <section class="my-index">
    <!-- <fx-header :back="false" :title="$t('my')">
      <template v-slot:right>
        <van-icon name="service-o" size="24" @click="$router.push('/customerService')"></van-icon>
      </template>
    </fx-header> -->
    <assets-head title="">
        <!-- <img src="../../../assets/image/assets-center/exchange.png" alt="exchange-img" class="w-44 h-38"
</fx-header> -->
    <assets-head title="">
      <!-- <img src="../../../assets/image/assets-center/exchange.png" alt="exchange-img" class="w-44 h-38"
            @click="goRouter('/customerService')" /> -->
            <template v-slot:right>
              <van-icon name="service-o" size="24" @click="$router.push('/customerService')"></van-icon>
            </template>
    </assets-head>
      <template v-slot:right>
        <van-icon name="service-o" size="24" @click="$router.push('/customerService')"></van-icon>
      </template>
    </assets-head>
    <div class="px-8 mt-4">
      <h1 class="text-2xl font-bold title" v-if="!(userStore.userInfo && userStore.userInfo.token)">{{
        $t('welcome')
        }}&nbsp;{{ $title }}!
      }}&nbsp;{{ $title }}!
      </h1>
      <p class="sub-text" v-if="!(userStore.userInfo && userStore.userInfo.token)">{{ $t('全球最大的区块链资产平台') }}</p>
      <p class="w-full flex mt-4 gap-x-4" v-if="!(userStore.userInfo && userStore.userInfo.token)">
        <van-button class="flex-1" round @click="onRoute('/register')">{{ $t('register') }}</van-button>
        <van-button class="flex-1" type="primary" round color="#f7b600" @click="onRoute('/login')">{{ $t('login')
          }}</van-button>
        }}</van-button>
      </p>
      <div class="mt-4 flex items-start" v-else>
        <img class="w-24 h-24" src="@/assets/image/avatar.png" alt="avatar" />
        <div class="ml-5 pt-1 flex flex-col justify-center">
          <div class="font-bold text-lg name" style="width: 200px;overflow-wrap: break-word;">{{ userStore.userInfo && userStore.userInfo.username }}</div>
          <div class="font-bold text-lg name" style="width: 200px;overflow-wrap: break-word;">{{ userStore.userInfo &&
            userStore.userInfo.username }}</div>
          <div class="text-sm text-gray-400 mt-5 flex items-center id-text">
            ID:{{ userStore.userInfo && userStore.userInfo.usercode }}<img class="w-8 h-8 ml-4"
              src="@/assets/image/idcopy.png" alt="id" @click="copy" /></div>
@@ -38,10 +39,10 @@
                status == 1 ? $t('reviewing') : status == 2 ? $t('verified') : status == 3 ?
                  $t('noPassView') : '' }}
            </div>
            <div class="label pl-2 pr-2 ml-3" :class="{ 'green': kycHighStatus == 2 }">
            <!-- <div class="label pl-2 pr-2 ml-3" :class="{ 'green': kycHighStatus == 2 }">
              {{ kycHighStatus == 2 ? $t('高级用户') : $t('普通用户') }}
            </div>
            <div class="pl-2 pr-2 ml-3" style="font-size: 12px;">{{$t('信用分')}} : {{userdata.creditScore}}</div>
            </div> -->
            <div class="pl-2 pr-2 ml-3" style="font-size: 12px;">{{ $t('信用分') }} : {{ userdata.creditScore }}</div>
          </div>
        </div>
      </div>
@@ -56,7 +57,7 @@
            <img src="@/assets/imgs/my/安全.png" alt="">
            <div>{{ t('安全') }}</div>
          </div>
<!--          <div class="label_item flex flex-col items-center justify-center mt-8" @click="onRoute('/changePassword')">
          <!--          <div class="label_item flex flex-col items-center justify-center mt-8" @click="onRoute('/changePassword')">
            <img src="@/assets/imgs/my/密码.png" alt="">
            <div>{{ t('修改密码') }}</div>
          </div> -->
@@ -91,9 +92,10 @@
    <template v-if="userStore.userInfo && userStore.userInfo.token">
      <van-divider :style="{ borderColor: '#ddd' }" hairline />
      <van-cell-group :border="false">
        <van-cell is-link="is-link" center="center" :title="t('关于我们')" @click="onRoute('/aboutUs')">
        <van-cell is-link="is-link" center="center" :title="item.title" @click="onRoute(item.path)"
          v-for="(item, index) in tyList" :key="index">
          <template #icon>
            <img class="cell-img" src="../../assets/image/assets-center/aboutUs.png" />
            <img class="cell-img" :src="item.icon" />
          </template>
        </van-cell>
      </van-cell-group>
@@ -104,7 +106,7 @@
      <div class="px-4 mt-4">
        <p class="w-full flex mt-4 gap-x-4">
          <van-button type="primary" class="flex-1" round color="#f7b600" @click="loginOut">{{ $t('loginOut')
            }}</van-button>
          }}</van-button>
        </p>
      </div>
    </template>
@@ -114,7 +116,7 @@
<script setup>
import { reactive, onMounted, ref, computed } from 'vue';
import { useRouter } from 'vue-router';
import { _getIdentify, _getKycHighLevel, _logOut,_info ,_customer } from "@/service/user.api.js";
import { _getIdentify, _getKycHighLevel, _logOut, _info, _customer } from "@/service/user.api.js";
import { useUserStore } from '@/store/user';
import { useI18n } from "vue-i18n";
import useClipboard from "vue-clipboard3";
@@ -122,15 +124,25 @@
import addBankIcon from '@/assets/image/userCenter/addBank.png'
import kycHighStatusIcon from '@/assets/image/userCenter/kycHighStatus.png'
import store from '@/store/store'
import { customerServiceUrl } from '@/config'
const { t } = useI18n()
const { toClipboard } = useClipboard();
const router = useRouter()
const userStore = useUserStore()
const customer_service_url = ref(null)
const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链
const status = ref(null)
const kycHighStatus = ref(null)
const userdata = ref({})
// 通用列表
const tyList = [
  { title: t('关于我们'), icon: new URL('@/assets/image/assets-center/aboutUs.png', import.meta.url), path: '/aboutUs?serviceTerm=26' },
  { title: t('用户协议'), icon: new URL('@/assets/image/assets-center/yhxy.png', import.meta.url), path: '/aboutUs?serviceTerm=23' },
  { title: t('隐私政策'), icon: new URL('@/assets/image/assets-center/yszc.png', import.meta.url), path: '/aboutUs?serviceTerm=24' },
  { title: t('安全规定'), icon: new URL('@/assets/image/assets-center/aqzc.png', import.meta.url), path: '/aboutUs?serviceTerm=21' },
  { title: t('反洗钱协议'), icon: new URL('@/assets/image/assets-center/yhxy.png', import.meta.url), path: '/aboutUs?serviceTerm=25' },
  { title: t('法律声明'), icon: new URL('@/assets/image/assets-center/aqzc.png', import.meta.url), path: '/aboutUs?serviceTerm=22' },
]
const state = reactive({
  cellList: [
    {
@@ -152,22 +164,22 @@
  ]
})
const onRoute = (path) => {
  if(path=='/customerService'){
      if(customer_service_url.value){
          window.location.href = customer_service_url.value;
      }else{
          router.push(path)
      }
  }else{
      router.push(path)
  if (path == '/customerService') {
    if (customer_service_url.value) {
      window.location.href = customer_service_url.value;
    } else {
      router.push(path)
    }
  } else {
    router.push(path)
  }
}
onMounted(() => {
  if (userStore.userInfo && userStore.userInfo.token) {
    getIdentify()
    getKycHighLevel()
    getinfo()
    getcustomer()
    getinfo()
    // getcustomer()
  }
})
const cellList = computed(() => {
@@ -185,10 +197,10 @@
          { icon: new URL('../../assets/image/assets-center/language.png', import.meta.url), title: t('language'), path: '/language' },
          { icon: new URL('../../assets/image/assets-center/onLineService.png', import.meta.url), title: t('onLineService'), path: '/customerService' },
          { icon: new URL('../../assets/image/assets-center/authVerify.png', import.meta.url), title: t('authVerify'), path: '/certificationCenter', show: true },
          { icon: new URL('../../assets/image/assets-center/AdvancedCertification.png', import.meta.url), title: t('高级认证'), path: '/advancedCtf', show: true },
          // { icon: new URL('../../assets/image/assets-center/AdvancedCertification.png', import.meta.url), title: t('高级认证'), path: '/advancedCtf', show: true },
          // { icon: 'todo-list-o', title: t('账变记录'), path: '/cryptos/accountChange' },
          { icon: new URL('../../assets/image/assets-center/valuation.png', import.meta.url), title: t('计价方式'), path: '/cryptos/exchangeRate' },
          { icon: new URL('../../assets/image/assets-center/AddPaymentMethod.png', import.meta.url), title: t('AddPaymentMethod'), path: '/payMentMethod/list' },
          // { icon: new URL('../../assets/image/assets-center/AddPaymentMethod.png', import.meta.url), title: t('AddPaymentMethod'), path: '/payMentMethod/list' },
          { icon: new URL('../../assets/image/assets-center/help.png', import.meta.url), title: t('帮助中心'), path: '/helpCenter' },
        ]
      }
@@ -221,10 +233,11 @@
    store.state.user.userInfo = {}
  })
}
// 获取客服信息
const getcustomer = () => {
  _customer().then((data) => {
    customer_service_url.value = data.customer_service_url
    console.log(customer_service_url);
    customer_service_url.value = data.customer_service_url
    console.log(customer_service_url);
  }).catch(error => {
    console.error('Error fetching data:', error);
  });
@@ -320,9 +333,11 @@
  .label_item {
    width: 33%;
    font-size: 12px;
    div{
        text-align: center;
    }
    div {
      text-align: center;
    }
    img {
      width: 32%;
      margin-bottom: 3px;
src/views/quotes/List.vue
@@ -2,7 +2,7 @@
  <div class="quotes-list pt-5 pb-60 pl-5 pr-5" id="cryptos">
    <Head></Head>
    <list-quatation :listData="qList" />
    <list-quatation :listData="qList" :tabActive="2" />
  </div>
</template>
src/views/register/index.vue
@@ -1,26 +1,31 @@
<template>
    <div class="register">
        <div class="top" @click="router.go(-1)"><img src="../../assets/image/icon-close.png" alt=""></div>
        <Step :step="1"></Step>
        <div class="top flex justify-between items-center">
            <img src="../../assets/image/icon-close.png" alt="" @click="router.go(-1)">
            <div @click="onRoute('/customerService')">{{ $t('onLineService') }}</div>
        </div>
        <!-- <Step :step="1"></Step> -->
        <div class="title textColor">{{ $t('register') }}</div>
        <div class="flex re-tab">
            <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{
            <!-- <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{
                $t('account')
            }}</div>
            <!-- <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)">{{ $t('email') }}
            }}</div> -->
            <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)">{{ $t('email') }}
            </div>
            <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)">{{
                $t('phoneNum')
            }}</div> -->
                }}</div>
        </div>
        <ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)" v-model="username"
            :area="isArea" :dialCode="dialCode" @selectArea="onSelectArea" :icon="icon" />
        <ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)"
            v-model="username" :area="isArea" :dialCode="dialCode" @selectArea="onSelectArea" :icon="icon" />
        <ExInput :label="$t('setPassword')" :placeholderText="$t('passwordTips')" v-model="password" typeText="password" />
        <ExInput :label="$t('repassword')" :placeholderText="$t('surePassword')" v-model="repassword" typeText="password" />
        <ExInput :label="$t('setPassword')" :placeholderText="$t('passwordTips')" v-model="password"
            typeText="password" />
        <ExInput :label="$t('repassword')" :placeholderText="$t('surePassword')" v-model="repassword"
            typeText="password" />
        <ExInput :label="$t('setSafeword')" :placeholderText="$t('safewordTips')" v-model="safeword" typeText="password"
            v-if="activeIndex === 1" />
        <div class="inputCom" v-if="activeIndex === 1">
            v-if="activeIndex === 1 || activeIndex === 2" />
        <div class="inputCom" v-if="activeIndex === 1 || activeIndex === 2">
            <p class="label  textColor">{{ $t('验证码') }}</p>
            <div class="iptbox inputBackground">
                <input class="inputBackground textColor" type="text" :placeholder="$t('entryVerifyCode')"
@@ -30,7 +35,7 @@
                </span>
            </div>
        </div>
        <ExInput :label="$t('invitCode')" :placeholderText="$t('entryInvitCode')" v-model="invitCode" :clearBtn="false" />
        <ExInput :label="$t('金融机构代码')" :placeholderText="$t('请输入')" v-model="invitCode" :clearBtn="false" />
        <div class="protocol textColor">
            <i @click="agreeProt">
                <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" />
@@ -38,7 +43,7 @@
            </i>
            {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/TermsOfService')">{{
                $t('serviceConf')
            }}</span>
                }}</span>
        </div>
        <van-button class="w-full" style="margin-top:10px;" type="primary" @click="register">{{ $t('register') }}
        </van-button>
@@ -67,14 +72,28 @@
import img2 from "../../assets/image/slider/2.png";
import { getStorage } from '@/utils/index'
import { useI18n } from 'vue-i18n'
import { customerServiceUrl } from "@/config";
import { useRouter } from 'vue-router';
import { ref, onMounted, reactive, onUnmounted } from 'vue';
import { showToast } from "vant";
import store from '@/store/store'
const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链
const { t } = useI18n()
const router = useRouter()
const onRoute = (path) => {
    router.push(path)
    if (path == 'back') {
        router.go(-1)
    } else {
        if (path == '/customerService') {
            if (customer_service_url.value) {
                window.location.href = customer_service_url.value;
            } else {
                router.push(path)
            }
        } else {
            router.push(path)
        }
    }
}
const userStore = useUserStore();
@@ -90,7 +109,7 @@
const safeword = ref('')
const fundPassword = ref('')
const refundPassword = ref('')
const activeIndex = ref(0)
const activeIndex = ref(1)
const typeText = ref('password')
let isArea = ref(false)
let dialCode = ref(0)
@@ -173,7 +192,7 @@
    agree.value = !agree.value
}
const register = () => {
    console.log(activeIndex.value,'activeIndex.value')
    console.log(activeIndex.value, 'activeIndex.value')
    if (activeIndex.value == 0) {
        if (username.value == '') {
            showToast(t('entryAccount'));
@@ -198,7 +217,7 @@
            return
        }
    } else if (activeIndex.value == 2) {
        if(!(/(^[1-9]\d*$)/.test(username.value))){
        if (!(/(^[1-9]\d*$)/.test(username.value))) {
            showToast(t('entryPhone'));
            return
        }
@@ -252,11 +271,11 @@
            }
    }
    if (activeIndex.value === 1) {
    if (activeIndex.value === 1 || activeIndex.value === 2) {
        _bindEmailRegister({
            username: username.value,
            password: password.value,
            type: '2',   // 2邮箱
            type: activeIndex.value === 1 ? '2' : '1',   // 2邮箱,1手机
            verifcode: verifyCode.value,
            usercode: invitCode.value,
            safeword: safeword.value
@@ -264,7 +283,8 @@
            userStore[GET_USERINFO](res)
            store.state.user.userInfo = res
            // 其他操作??
            router.push('/identity')
            // router.push('/identity')
            router.push('/login')
        })
    } else {
        _registerUser({
@@ -284,8 +304,6 @@
        });
    }
}
</script>
<style lang="scss" scoped>