From 16cfa24c67682909a1e810e206ee8a6655e859ed Mon Sep 17 00:00:00 2001
From: PC-20250623MANY\Administrator <344137771@qq.com>
Date: Mon, 11 Aug 2025 18:08:14 +0800
Subject: [PATCH] 1

---
 src/assets/img/transfer.png   |    0 
 src/axios/api.js              |    3 
 src/page/trading/buy.vue      |   32 ---
 src/page/home/homeIndex.vue   |   27 ++
 src/router/index.js           |   10 +
 src/locales/cht.json          |    5 
 src/components/tabHead.vue    |   31 ++
 src/locales/en.json           |   49 ++--
 src/page/user/transferNew.vue |  297 +++++++++++++++++++++++++++++++++
 src/assets/img/充值缴费.png       |    0 
 src/page/trading/TradeNew.vue |   10 
 src/locales/hi.json           |    5 
 src/page/user/account.vue     |   14 +
 13 files changed, 406 insertions(+), 77 deletions(-)

diff --git a/src/assets/img/transfer.png b/src/assets/img/transfer.png
new file mode 100644
index 0000000..8ce30fb
--- /dev/null
+++ b/src/assets/img/transfer.png
Binary files differ
diff --git "a/src/assets/img/\345\205\205\345\200\274\347\274\264\350\264\271.png" "b/src/assets/img/\345\205\205\345\200\274\347\274\264\350\264\271.png"
new file mode 100644
index 0000000..9a7b6d5
--- /dev/null
+++ "b/src/assets/img/\345\205\205\345\200\274\347\274\264\350\264\271.png"
Binary files differ
diff --git a/src/axios/api.js b/src/axios/api.js
index 6661e1a..a12d8cf 100644
--- a/src/axios/api.js
+++ b/src/axios/api.js
@@ -11,6 +11,9 @@
 export function queryStockConfig(options) {
   return post("/api/user/queryStockConfig.do", options);
 }
+export function queryStockConfigTwo(options) {
+  return post("/api/user/queryStockConfigTwo.do", options);
+}
 export function getchicang(options) {
   return post("user/position/list.do", options);
 }
diff --git a/src/components/tabHead.vue b/src/components/tabHead.vue
index 58b3022..599932b 100644
--- a/src/components/tabHead.vue
+++ b/src/components/tabHead.vue
@@ -16,19 +16,34 @@
       <slot></slot>
     </div>
     <!-- 搜索弹窗 -->
-    <van-popup v-model="searchShow" round position="bottom" :style="{ height: '80%' }">
+    <van-popup
+      v-model="searchShow"
+      round
+      position="bottom"
+      :style="{ height: '80%' }"
+    >
       <div class="popup_head">
         <van-icon name="arrow-left" size=".5em" @click="searchShow = false" />
         <div class="popup_input">
-          <van-field v-model="searchValue" :placeholder="$t('hj37')" left-icon="search" clearable />
+          <van-field
+            v-model="searchValue"
+            :placeholder="$t('hj37')"
+            left-icon="search"
+            clearable
+          />
         </div>
         <van-button type="primary" round @click="submit">{{
           $t("Search")
         }}</van-button>
       </div>
 
-      <van-list v-model="loading" :finished="finished" :finished-text="$t('hj43')" @load="onLoad"
-        v-if="(lists && lists.length > 0) || !finished">
+      <van-list
+        v-model="loading"
+        :finished="finished"
+        :finished-text="$t('hj43')"
+        @load="onLoad"
+        v-if="(lists && lists.length > 0) || !finished"
+      >
         <van-cell v-for="item in lists" :key="item.id" @click="toDetails(item)">
           <div class="search_item">
             <div class="search_item_left">
@@ -57,6 +72,7 @@
 <script>
 import * as api from "@/axios/api";
 import handleDt from "@/utils/deTh";
+import { Toast } from "vant";
 export default {
   name: "tabHead",
   data() {
@@ -95,7 +111,8 @@
   methods: {
     // 跳转客服页面
     aRouter1() {
-      window.open(this.onlineService);
+      // window.open(this.onlineService);
+      Toast(this.$t("kf1"));
     },
     // 获取客服地址
     async getInfoSite() {
@@ -114,7 +131,7 @@
       // 跳转设置页面
       this.$router.push("/setting");
     },
-    onLoad: handleDt.throttle(async function (a, b) {
+    onLoad: handleDt.throttle(async function(a, b) {
       // 搜索列表加载
       this.finished = false;
       let opt = {
@@ -168,7 +185,7 @@
           type: item.stock_type
         }
       });
-    },
+    }
   }
 };
 </script>
diff --git a/src/locales/cht.json b/src/locales/cht.json
index a30f2e7..4c2589c 100644
--- a/src/locales/cht.json
+++ b/src/locales/cht.json
@@ -686,5 +686,8 @@
   "ni":"印度股票指數",
   "hk1":"香港",
   "tw":"臺灣",
-  "id1":"印度"
+  "id1":"印度",
+  "kf1": "需要任何幫助請聯繫您的專屬交易助理或開戶專員",
+  "划转": "劃轉",
+  "汇率": "匯率"
 }
diff --git a/src/locales/en.json b/src/locales/en.json
index 6b0de82..612800e 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -663,28 +663,31 @@
   "信用分": "Credit Score",
   "剩余贷款额度": "Remaining Loan Amount",
   "贷款申请": "Loan Application",
-  "还款":"Repayment",
-  "确认还款吗":"Confirm repayment",
-  "日内":"In the meantime",
-  "建仓成本":"Position-building cost",
-  "已申购":"Already purchased",
+  "还款": "Repayment",
+  "确认还款吗": "Confirm repayment",
+  "日内": "In the meantime",
+  "建仓成本": "Position-building cost",
+  "已申购": "Already purchased",
   "hj316": "Please enter bank cardholder name",
   "Password": "Password",
-  "rnv":"Real Name Verification",
-  "it1":"ID Type",
-  "dl1":"Driver License",
-  "pa1":"Passport",
-  "ot1":"Other",
-  "in1":"Identification Number",
-  "fsi1":"Front Side of ID Photo",
-  "bsi1":"Back Side of ID Photo",
-  "uv1":"Under Verification",
-  "sc":"Stock Code",
-  "abc":"Add bank card",
-  "hksi":"Hong Kong Stock Index",
-  "tsi":"Taiwan Stock Index",
-  "ni":"Indian stock index",
-  "hk1":"Hong Kong",
-  "tw":"Taiwan",
-  "id1":"India"
-}
\ No newline at end of file
+  "rnv": "Real Name Verification",
+  "it1": "ID Type",
+  "dl1": "Driver License",
+  "pa1": "Passport",
+  "ot1": "Other",
+  "in1": "Identification Number",
+  "fsi1": "Front Side of ID Photo",
+  "bsi1": "Back Side of ID Photo",
+  "uv1": "Under Verification",
+  "sc": "Stock Code",
+  "abc": "Add bank card",
+  "hksi": "Hong Kong Stock Index",
+  "tsi": "Taiwan Stock Index",
+  "ni": "Indian stock index",
+  "hk1": "Hong Kong",
+  "tw": "Taiwan",
+  "id1": "India",
+  "kf1": "If you need any assistance, please contact your dedicated trading assistant or account opening specialist.",
+  "划转": "Transfer",
+  "汇率": "Exchange rate"
+}
diff --git a/src/locales/hi.json b/src/locales/hi.json
index 0d7a7fd..0419249 100644
--- a/src/locales/hi.json
+++ b/src/locales/hi.json
@@ -686,5 +686,8 @@
   "ni": "भारतीय स्टॉक इंडेक्स",
   "hk1": "हांगकांग",
   "tw": "ताइवान",
-  "id1": "भारत"
+  "id1": "भारत",
+  "kf1": "यदि आपको कोई सहायता चाहिए, तो कृपया अपने समर्पित व्यापार सहायक या खाता खोलने विशेषज्ञ से संपर्क करें।",
+  "划转": "स्थानांतरण",
+  "汇率": "विनिमय दर"
 }
\ No newline at end of file
diff --git a/src/page/home/homeIndex.vue b/src/page/home/homeIndex.vue
index b52422d..dc5f27d 100644
--- a/src/page/home/homeIndex.vue
+++ b/src/page/home/homeIndex.vue
@@ -23,7 +23,7 @@
       </div>
       <div class="swiper">
         <div class="swiper-wrapper flex-between">
-          <div class="swiper-slide">
+          <!-- <div class="swiper-slide">
             <div class="nav_item flex-start" @click="toPage('/aiTrading')">
               <img src="../../assets/img/home_1.png" alt="" />
               <span>{{ $t("量化交易") }}</span>
@@ -34,17 +34,29 @@
               <img src="../../assets/img/home_2.png" alt="" />
               <span>{{ $t("hj621") }}</span>
             </div>
-          </div>
+          </div> -->
           <div class="swiper-slide">
             <div class="nav_item flex-start" @click="toPage('/ipo')">
               <img src="../../assets/img/home_3.png" alt="" />
               <span>IPO</span>
             </div>
           </div>
-          <div class="swiper-slide">
+          <!-- <div class="swiper-slide">
             <div class="nav_item flex-start" @click="toPage('/fund')">
               <img src="../../assets/img/home_4.png" alt="" />
               <span>{{ $t("理财基金") }}</span>
+            </div>
+          </div> -->
+          <div class="swiper-slide">
+            <div class="nav_item flex-start" @click="toPage('/recharge')">
+              <img src="@/assets/img/充值缴费.png" alt="" />
+              <span>{{ $t("hj172") }}</span>
+            </div>
+          </div>
+          <div class="swiper-slide">
+            <div class="nav_item flex-start" @click="toPage('/banklist')">
+              <img src="@/assets/img/充值缴费.png" alt="" />
+              <span>{{ $t("hj147") }}</span>
             </div>
           </div>
         </div>
@@ -290,8 +302,8 @@
         padding: 0 0.25em 0 0.25em;
 
         .swiper-slide {
-          width: 2.1875em;
-          height: 2.5em;
+          width: 3em;
+          height: 2.8em;
 
           .nav_item {
             background-color: #fff;
@@ -299,11 +311,10 @@
             width: 100%;
             height: 100%;
             flex-direction: column;
-            padding-top: 0.25em;
-            padding: 0.25em 0.15em 0;
+            padding: 0.45em 0.15em 0;
 
             img {
-              width: 0.75em;
+              width: 0.95em;
               margin-bottom: 0.25em;
             }
 
diff --git a/src/page/trading/TradeNew.vue b/src/page/trading/TradeNew.vue
index e1d7724..ee05303 100644
--- a/src/page/trading/TradeNew.vue
+++ b/src/page/trading/TradeNew.vue
@@ -5,10 +5,10 @@
     <div class="order_tabs">
       <van-tabs v-model="active" swipe-threshold="1">
         <van-tab :title="$t('hj160')" name=""></van-tab>
-        <van-tab title="AI" name="4"></van-tab>
-        <van-tab :title="$t('hj621')" name="3"></van-tab>
-        <van-tab title="IPO" name="2"></van-tab>
-        <van-tab :title="$t('日内')" name="0"></van-tab>
+        <van-tab :title="$t('美股指数')" name="US"></van-tab>
+        <van-tab :title="$t('hksi')" name="HK"></van-tab>
+        <van-tab :title="$t('tsi')" name="TW"></van-tab>
+        <van-tab :title="$t('ni')" name="IN"></van-tab>
       </van-tabs>
     </div>
 
@@ -131,7 +131,7 @@
     async getList() {
       let data = await api.getchicang({
         state: 0,
-        positionType: this.active,
+        stockType: this.active,
         pageNum: this.pageNum,
         pageSize: this.pageSize
       });
diff --git a/src/page/trading/buy.vue b/src/page/trading/buy.vue
index ad08455..3440e2b 100644
--- a/src/page/trading/buy.vue
+++ b/src/page/trading/buy.vue
@@ -129,16 +129,10 @@
                   (nowPrice * selectCycle.replace("X", "") * num)
                     | _toLocaleString
                 }}
-                <span v-if="bayType != 'US'">
-                  ≈ $
-                  {{
-                    (nowPrice * selectCycle.replace("X", "") * num * rate)
-                      | _toLocaleString
-                  }}
-                </span>
               </span>
               <span style="white-space: nowarp">
-                $ {{ moneyData.availableBalance | _toLocaleString }}
+                {{ bayType | currencySymbol }}
+                {{ moneyData.availableBalance | _toLocaleString }}
               </span>
             </div>
           </div>
@@ -155,17 +149,6 @@
                     2
                   )
                 }}
-                <span v-if="bayType != 'US'">
-                  ≈ $
-                  {{
-                    (nowPrice *
-                      selectCycle.replace("X", "") *
-                      num *
-                      sxf *
-                      rate)
-                      | _toLocaleString
-                  }}
-                </span>
               </span>
               <span style="white-space: nowarp"> </span>
             </div>
@@ -412,14 +395,9 @@
       let data = await api.getMoney();
       // let type = this.bayType === "SZHB" ? "US" : this.bayType;
       if (data.status === 0) {
-        // const newArr = data.data.filter(item => item.accectType === type);
-        // this.moneyData = newArr[0] || {};
-
-        this.moneyData = data.data[0];
-
-        // console.log(this.bayType, newArr);
-        // 判断是否登录
-        // this.moneyList = data.data;
+        data.data.forEach(i => {
+          if (i.accectType == this.bayType) this.moneyData = i;
+        });
       }
     },
     handleBack() {
diff --git a/src/page/user/account.vue b/src/page/user/account.vue
index 07c1fb0..cecfdc6 100644
--- a/src/page/user/account.vue
+++ b/src/page/user/account.vue
@@ -18,9 +18,9 @@
         <span>{{ $t("hj244") }}</span>
       </div>
 
-      <div class="wallet_price flex-between">
-        <span>{{ moneyData.symbol }} {{ moneyData.totalMoney }}</span>
-        <span>{{ moneyData.symbol }} {{ moneyData.availableBalance }}</span>
+      <div class="wallet_price flex-between" v-for="i in moneyData" :key="i.id">
+        <span>{{ i.symbol }} {{ i.totalMoney }}</span>
+        <span>{{ i.symbol }} {{ i.availableBalance }}</span>
       </div>
 
       <div class="wallet_price_name flex-between">
@@ -46,6 +46,10 @@
       <div class="tab flex-center" @click="toPage('/rechargelist')">
         <img src="@/assets/img/jl.png" alt="" />
         <span>{{ $t("jl") }}</span>
+      </div>
+      <div class="tab flex-center" @click="toPage('/transferNew')">
+        <img src="@/assets/img/jl.png" alt="" />
+        <span>{{ $t("划转") }}</span>
       </div>
     </div>
 
@@ -230,7 +234,7 @@
   data() {
     return {
       userInfo: {}, // 用户信息
-      moneyData: {}, // 账户金额
+      moneyData: [], // 账户金额, 包含可用余额数组
       positionData: {} // 账户持仓数据
     };
   },
@@ -239,7 +243,7 @@
     async getMoney() {
       let data = await api.getMoney();
       if (data.status === 0) {
-        this.moneyData = data.data[0];
+        this.moneyData = data.data;
       }
     },
     // 获取账户持仓数据
diff --git a/src/page/user/transferNew.vue b/src/page/user/transferNew.vue
new file mode 100644
index 0000000..76cb88b
--- /dev/null
+++ b/src/page/user/transferNew.vue
@@ -0,0 +1,297 @@
+<template>
+  <div class="transfer_new">
+    <van-nav-bar
+      :placeholder="true"
+      :safe-area-inset-top="true"
+      :title="$t('划转')"
+      left-arrow
+      @click-left="$router.go(-1)"
+    >
+    </van-nav-bar>
+
+    <div style="position: relative;">
+      <div class="card">
+        <div class="flex-center">
+          <span style="margin-right: 1em;">{{ $t("从") }}</span>
+          <van-field
+            v-model="moneyRevise"
+            type="number"
+            :placeholder="$t('请输入')"
+          >
+            <template #button>
+              <van-button
+                size="small"
+                class="butn2"
+                type="primary"
+                @click="onMax"
+              >
+                {{ $t("全部") }}
+              </van-button>
+            </template>
+          </van-field>
+          <span style="margin-left: 1em;">{{ cValue.currency }}</span>
+        </div>
+        <div class="mt-1">
+          <van-popover
+            v-model="showPopover"
+            trigger="click"
+            :actions="actions"
+            @select="onSelect"
+            placement="bottom-start"
+          >
+            <template #reference>
+              <div class="lv">{{ cValue.text }}</div>
+            </template>
+          </van-popover>
+        </div>
+      </div>
+
+      <div class="card mt-1">
+        <div class="flex-center">
+          <span style="margin-right: 1em;">{{ $t("到") }}</span>
+          <div style="flex:1">
+            ≈ {{ this.moneyReviseTo || 0 }} {{ dValue.currency }}
+          </div>
+        </div>
+        <div class="mt-1">
+          <van-popover
+            v-model="showPopover1"
+            trigger="click"
+            :actions="actions"
+            @select="onSelect1"
+            placement="bottom-start"
+          >
+            <template #reference>
+              <div class="lv">{{ dValue.text }}</div>
+            </template>
+          </van-popover>
+        </div>
+      </div>
+
+      <img src="@/assets/img/transfer.png" class="swap" @click="onSwap" />
+    </div>
+
+    <div class="flex-between transfer_a">
+      <span>{{ $t("汇率") }}</span>
+      <span>
+        1 {{ cValue.currency }} <van-icon name="exchange" /> {{ exRate }}
+        {{ dValue.currency }}</span
+      >
+    </div>
+
+    <div class="flex-between transfer_a">
+      <span>{{ $t("hj44") }}</span>
+      <span>
+        {{ Math.ceil(sxf * moneyRevise * 1000) / 1000 }} {{ cValue.currency }}
+      </span>
+    </div>
+
+    <van-button type="info" class="butn" @click="submit">
+      {{ $t("qr") }}
+    </van-button>
+  </div>
+</template>
+
+<script>
+import * as api from "@/axios/api";
+import { Toast } from "vant";
+export default {
+  data() {
+    return {
+      moneyRevise: 0, // 划转金额
+      showPopover: false,
+      showPopover1: false,
+      actions: [
+        { text: this.$t("美国"), value: "US", currency: "USD" },
+        { text: this.$t("hk1"), value: "HK", currency: "HKD" },
+        { text: this.$t("tw"), value: "TW", currency: "TWD" },
+        { text: this.$t("id1"), value: "IN", currency: "INR" }
+      ],
+      cValue: {},
+      dValue: {},
+      usM: {}, // 账户金额 us
+      twM: {}, // 账户金额 tw
+      inM: {}, // 账户金额 in
+      hkM: {}, // 账户金额 hk
+      arrRate: [], // 汇率
+      sxf: 0.01 // 手续费比例
+    };
+  },
+  computed: {
+    moneyReviseTo() {
+      return Math.floor(this.moneyRevise * this.exRate * 100) / 100;
+    },
+    exRate() {
+      let rate = 1;
+      this.arrRate.forEach(item => {
+        if (
+          item.currency == this.cValue.currency &&
+          item.conversionCurrency == this.dValue.currency
+        )
+          rate = item.rata;
+      });
+      return rate;
+    }
+  },
+  created() {
+    this.cValue = this.actions[0]; // 默认值
+    this.dValue = this.actions[1]; // 默认值
+    this.getMoney();
+    this.getExchangeRate();
+    this.queryStockConfig();
+  },
+  methods: {
+    // 获取汇率
+    async getExchangeRate() {
+      let data = await api.getRateInfo();
+      if (data.status === 0) {
+        this.arrRate = data.data;
+      }
+    },
+    onMax() {
+      switch (this.cValue.currency) {
+        case "USD":
+          this.moneyRevise = this.usM.availableBalance;
+          break;
+        case "HKD":
+          this.moneyRevise = this.hkM.availableBalance;
+          break;
+        case "TWD":
+          this.moneyRevise = this.twM.availableBalance;
+          break;
+        case "INR":
+          this.moneyRevise = this.inM.availableBalance;
+          break;
+        default:
+          break;
+      }
+    },
+    // 获取手续比例
+    async queryStockConfig() {
+      let data = await api.queryStockConfigTwo();
+      if (data.status === 0) {
+        this.sxf = data.data.cValue;
+      }
+    },
+    // 获取账户金额
+    async getMoney() {
+      let data = await api.getMoney();
+      if (data.status === 0) {
+        data.data.forEach(item => {
+          if (item.accectType == "US") this.usM = item;
+          else if (item.accectType == "TW") this.twM = item;
+          else if (item.accectType == "IN") this.inM = item;
+          else if (item.accectType == "HK") this.hkM = item;
+        });
+      }
+    },
+    // 划转上下调换
+    onSwap() {
+      let a = this.cValue,
+        b = this.dValue;
+      this.cValue = b;
+      this.dValue = a;
+    },
+    // 选择
+    onSelect(action) {
+      this.cValue = action;
+    },
+    // 选择
+    onSelect1(action) {
+      this.dValue = action;
+    },
+    async submit() {
+      let opt = {
+        fromType: this.cValue.value,
+        toType: this.dValue.value,
+        amt: this.moneyRevise
+      };
+      let data = await api.transfer(opt);
+      if (data.status === 0) {
+        Toast.success(this.$t(data.msg));
+        this.getMoney();
+      }
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .van-nav-bar__content {
+  height: 65px;
+}
+
+/deep/ .van-nav-bar__title {
+  font-family: "DINPro";
+  width: 100%;
+  height: 1.17333em;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-style: normal;
+  font-weight: 700;
+  font-size: 0.48em;
+  color: #14181f;
+}
+.transfer_new {
+  padding: 0rem 0.25em 0.5em 0.25em;
+  width: 100%;
+  min-height: 100vh;
+  background: #fff;
+  font-size: 10vw;
+  .transfer_a {
+    font-size: 0.4em;
+    padding-top: 1em;
+  }
+  .butn {
+    width: 100%;
+    margin-top: 40px;
+    height: 60px;
+    border-radius: 8px;
+    background: #c4d600;
+    border: none;
+  }
+  .butn2 {
+    border-radius: 8px;
+    background: #c4d600;
+    border: none;
+  }
+
+  .card {
+    background: #f7f7f7;
+    padding: 2em 1.2em;
+    border-radius: 0.5em;
+    font-size: 0.4em;
+    border: none;
+
+    .lv {
+      color: #c4d600;
+    }
+  }
+
+  .swap {
+    position: absolute;
+    top: 55%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    width: 1em;
+  }
+
+  .hint {
+    font-size: 0.35em;
+    margin-bottom: 150px;
+
+    span {
+      color: #333;
+    }
+  }
+
+  .label_but {
+    color: #333;
+  }
+
+  .transfer_label {
+    font-size: 0.4em;
+  }
+}
+</style>
diff --git a/src/router/index.js b/src/router/index.js
index f0d7569..d513cf1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -119,6 +119,16 @@
       },
       component: () => import("@/page/markets/markets.vue")
     },
+    {
+      path: "/transferNew",
+      name: "transferNew",
+      meta: {
+        title: i18n.t("划转"),
+        requireAuth: true,
+        index: 1
+      },
+      component: () => import("@/page/user/transferNew.vue")
+    },
     // AI量化交易
     {
       path: "/aiTrading",

--
Gitblit v1.9.3