1
PC-20250623MANY\Administrator
2025-08-07 6b019592ce032937fd6d3631a912fa8cd37e9fe4
1
22 files modified
2 files added
1448 ■■■■■ changed files
src/assets/img/logo.png patch | view | raw | blame | history
src/axios/api.js 2 ●●● patch | view | raw | blame | history
src/components/tabHead.vue 29 ●●●● patch | view | raw | blame | history
src/locales/en.json 31 ●●●● patch | view | raw | blame | history
src/locales/es.json 25 ●●●● patch | view | raw | blame | history
src/page/authentication/index-old.vue 433 ●●●●● patch | view | raw | blame | history
src/page/authentication/index.vue 693 ●●●●● patch | view | raw | blame | history
src/page/bankCard/banklist.vue 4 ●●● patch | view | raw | blame | history
src/page/home/homeIndex.vue 31 ●●●● patch | view | raw | blame | history
src/page/kline/components/kLine.vue 2 ●●● patch | view | raw | blame | history
src/page/kline/index.vue 3 ●●●● patch | view | raw | blame | history
src/page/login/login.vue 74 ●●●● patch | view | raw | blame | history
src/page/markets/aiTrading.vue 4 ●●●● patch | view | raw | blame | history
src/page/markets/blockTrading.vue 4 ●●●● patch | view | raw | blame | history
src/page/markets/blockTradingOrder.vue 13 ●●●●● patch | view | raw | blame | history
src/page/markets/ipo.vue 6 ●●●● patch | view | raw | blame | history
src/page/markets/ipoOrder.vue 7 ●●●● patch | view | raw | blame | history
src/page/newUser/setting.vue 33 ●●●●● patch | view | raw | blame | history
src/page/trading/stockRecord.vue 5 ●●●●● patch | view | raw | blame | history
src/page/user/Warehouse/Stockdetail.vue 15 ●●●●● patch | view | raw | blame | history
src/page/user/compontents/cash-list.vue 28 ●●●● patch | view | raw | blame | history
src/page/user/loanRecord.vue 2 ●●● patch | view | raw | blame | history
src/page/user/recharge-sure.vue 2 ●●● patch | view | raw | blame | history
src/router/index.js 2 ●●● patch | view | raw | blame | history
src/assets/img/logo.png
src/axios/api.js
@@ -335,7 +335,7 @@
export function getIndexOrderList(options) {
  return post("/user/index/position/list.do", options);
}
// 获取我的持仓单 - 指数
// 获取我的持仓单 - 股票
export function findByPostionSn(options) {
  return post("/user/position/findByPostionSn.do", options);
}
src/components/tabHead.vue
@@ -16,34 +16,19 @@
      <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">
@@ -108,12 +93,12 @@
    this.getInfoSite();
  },
  methods: {
    // 跳转客服页面
    aRouter1() {
      // 跳转客服页面
      window.open(this.onlineService);
    },
    // 获取客服地址
    async getInfoSite() {
      // 获取客服地址
      let data = await api.getInfoSite();
      if (data.status === 0) {
        this.onlineService = data.data.onlineService;
@@ -129,7 +114,7 @@
      // 跳转设置页面
      this.$router.push("/setting");
    },
    onLoad: handleDt.throttle(async function(a, b) {
    onLoad: handleDt.throttle(async function (a, b) {
      // 搜索列表加载
      this.finished = false;
      let opt = {
src/locales/en.json
@@ -18,7 +18,7 @@
  "yszc": "Privacy Policy",
  "zgzs": "Qualification certificate",
  "ysmrz": "Real-name authenticated",
  "dlan": "Log in",
  "dlan": "Login",
  "dltips": "After logging in, you can start real/simulated trading.",
  "usertop": "Total account assets (USD)",
  "pcje": "Closing amount",
@@ -39,7 +39,7 @@
  "aym": "Accumulated P/L(INR)",
  "disana": "Frozen assets (INR)",
  "disan": "Available Assets (INR)",
  "setting": "Set up",
  "setting": "Setting",
  "caidan": "Qualification",
  "bz": "Help",
  "kf": "Customer Service",
@@ -109,8 +109,9 @@
  "wjs": "Unsettlement",
  "wei": "Not yet",
  "yi": "Already",
  "sqz": "Applying",
  "sqz": "Pending Approval",
  "sptg": "Approved",
  "sqsb": "Approval Failed",
  "shjj": "Review rejected",
  "dkffcg": "The loan was issued successfully",
  "dkjg": "Lending institution",
@@ -191,7 +192,7 @@
  "hj61": "Optional",
  "hj62": "Market",
  "hj620": "Limit Down",
  "hj621": "Cap discount stock",
  "hj621": "Block Trading",
  "hj63": "Shanghai, Shenzhen and Beijing",
  "hj64": "Science and technology innovation",
  "hj65": "US stocks",
@@ -268,11 +269,11 @@
  "hj140": "Failed to close position, not within trading hours",
  "hj142": "Switch index account",
  "hj143": "Switch between Shanghai and Shenzhen accounts",
  "hj144": "Change Password",
  "hj144": "Login password",
  "hj145": "Funds transfer",
  "hj146": "Verify",
  "hj1461": "Download App",
  "hj147": "Bind Bank Card",
  "hj147": "Bank Cards",
  "hj148": "Sign out",
  "hj149": "Are you sure you want to log out?",
  "hj150": "Old Password",
@@ -594,8 +595,8 @@
  "当前充值渠道已关闭请选择在线客服进行充值。": "The current recharge channel has been closed Please choose online customer service to recharge.",
  "删除": "Delete",
  "快捷方式": "Quick Access",
  "量化交易": "Quantitative trading",
  "理财基金": "Wealth management fund",
  "量化交易": "AI Quantitative trading",
  "理财基金": "Fund Investment",
  "美股指数": "Us stock index",
  "墨西哥指数": "Mexican Index",
  "更多新闻": "More news",
@@ -667,5 +668,17 @@
  "日内":"In the meantime",
  "建仓成本":"Position-building cost",
  "已申购":"Already purchased",
  "hj316": "Please enter bank cardholder name"
  "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"
}
src/locales/es.json
@@ -111,8 +111,9 @@
  "yjs": "Liquidado",
  "wei": "No",
  "yi": "Sí",
  "sqz": "En Solicitud",
  "sqz": "Pendiente de aprobación",
  "sptg": "Aprobado",
  "sqsb": "Aprobación fallida",
  "shjj": "Rechazado",
  "dkffcg": "Desembolso de Préstamo Exitoso",
  "dkjg": "Institución Crediticia",
@@ -279,11 +280,11 @@
  "hj141": "Tasa de Ganancia/Pérdida",
  "hj142": "Cambiar a Cuenta de Índices",
  "hj143": "Cambiar a Cuenta SH/SZ/BJ",
  "hj144": "Cambiar Contraseña",
  "hj144": "Cambiar contraseña de acceso",
  "hj145": "Transferencia de Fondos",
  "hj146": "Verificar",
  "hj1461": "Descargar App",
  "hj147": "Vincular Tarjeta Bancaria",
  "hj147": "Agregar cuenta bancaria",
  "hj148": "Cerrar Sesión",
  "hj149": "¿Confirmar cierre de sesión?",
  "hj150": "Contraseña Anterior",
@@ -334,7 +335,7 @@
  "hj192": "Ingrese el monto a transferir",
  "hj193": "Confirmar transferencia a cuenta de índices",
  "hj194": "Confirmar transferencia a cuenta de financiamiento",
  "hj195": "Nombre Real",
  "hj195": "Nombre real",
  "hj196": "Número de Identificación",
  "hj197": "Frente de Identificación",
  "hj198": "Subiendo...",
@@ -579,7 +580,7 @@
  "当前充值渠道已关闭请选择在线客服进行充值。": "Canal de recarga cerrado, contacte servicio al cliente.",
  "删除": "Eliminar",
  "快捷方式": "Accesos Rápidos",
  "量化交易": "Trading Cuantitativo",
  "量化交易": "Negociación cuantitativa de IA",
  "理财基金": "Fondos de Inversión",
  "美股指数": "Índices EE.UU.",
  "墨西哥指数": "Índices México",
@@ -652,5 +653,17 @@
  "日内": "Intradía",
  "建仓成本": "Costo de Apertura",
  "已申购": "Suscrito",
  "hj316": "Introduzca el nombre del titular de la tarjeta bancaria"
  "hj316": "Introduzca el nombre del titular de la tarjeta bancaria",
  "Password": "contraseña",
  "rnv":"Verificación de identidad",
  "it1":"Tipo de identificación",
  "dl1":"Licencia de conducir",
  "pa1":"Pasaporte",
  "ot1":"Otro",
  "in1":"Número de identificación",
  "fsi1":"Foto frontal del ID",
  "bsi1":"Foto trasera del ID",
  "uv1":"En verificación",
  "sc":"Código de existencias",
  "abc":"Añadir tarjeta bancaria"
}
src/page/authentication/index-old.vue
New file
@@ -0,0 +1,433 @@
<template>
  <div class="bank_card_page">
    <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('rnv')" left-arrow
      @click-left="$router.go(-1)">
    </van-nav-bar>
    <div class="content">
      <!--      <div class="top_back">
        <div class="left_back_icon" @click="$router.go(-1)">
          <img src="../../assets/img/zuojiantou.png" alt />
        </div>
      </div> -->
      <!-- <div class="titles">
        <span>{{ $t("hj146") }}</span>
      </div> -->
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("hj195") + ":" }}</span>
        </div>
        <div class="rights">
          <input v-if="showBtn" type="text" placeholder="Please enter your Name" v-model="form.name" />
          <input v-if="!showBtn" type="text" v-model="form.name" readonly />
        </div>
      </div>
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("hj196") + ":" }}</span>
        </div>
        <div class="rights">
          <input v-if="showBtn" type="text" placeholder="Please enter your Aadhaar card" v-model="form.idCard" />
          <input v-if="!showBtn" type="text" v-model="form.idCard" readonly />
        </div>
      </div>
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("电话号码") + ":" }}</span>
        </div>
        <div class="rights">
          <input v-if="showBtn" type="text" placeholder="Please enter your telephone number"
            v-model="form.vaildNumber" />
          <input v-if="!showBtn" type="text" v-model="form.vaildNumber" readonly />
        </div>
      </div>
      <div class="uploads">
        <div class="lefts">
          <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
            list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess"
            :on-error="handleError" :before-upload="beforeAvatarUpload" :disabled="!showBtn">
            <img v-if="form.img1key" :src="form.img1key" class="id-img avatar" style="width: 100%; height: 100%" />
            <i v-else class="iconfont icon-zhaopian"></i>
            <span v-if="!form.img1key && !imgStatus" class="btn-title">{{
              $t("hj197")
            }}</span>
            <span v-if="imgStatus" class="btn-title">{{ $t("hj198") }}</span>
          </el-upload>
        </div>
        <div class="rights">
          <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
            list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess2"
            :on-error="handleError2" :before-upload="beforeAvatarUpload2" :disabled="!showBtn">
            <img v-if="form.img2key" :src="form.img2key" class="id-img avatar" style="width: 100%; height: 100%" />
            <i v-else class="iconfont icon-zhaopian"></i>
            <span v-if="!form.img2key && !imgStatus2" class="btn-title">{{
              $t("hj199")
            }}</span>
            <span v-if="imgStatus2" class="btn-title">{{ $t("hj198") }}</span>
          </el-upload>
        </div>
      </div>
      <div class="bank_name bind" @click="toSure" v-if="showBtn">
        <span>{{ $t("hj161") }}</span>
      </div>
      <van-notify v-model="messFlag" type="primary">
        <div>
          <div class="eft">
            <span>{{ $t("hj200") }}</span>
          </div>
          <div class="bft">
            <span>{{ $t("hj201") }}:{{ this.$store.state.userInfo.authMsg }}</span>
          </div>
        </div>
      </van-notify>
      <div class="pass">
        <div class="top_t">
          <img v-if="this.$store.state.userInfo.isActive == 1" src="../../../static/img/bd_shz.png" />
          <span v-if="this.$store.state.userInfo.isActive == 1" class="ise_pass">{{ $t("hj202") }}</span>
          <img v-if="!showBtn && this.$store.state.userInfo.isActive != 1" src="../../../static/img/bd_suessce.png" />
          <span v-if="!showBtn && this.$store.state.userInfo.isActive != 1">{{
            $t("hj203")
          }}</span>
          <img v-if="showBtn" src="../../../static/img/bd_fail.png" />
          <span v-if="showBtn" class="ise_pass">{{ $t("hj204") }}</span>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import * as api from "@/axios/api";
import { Toast } from "mint-ui";
import { isNull, idCardReg, isName } from "@/utils/utils";
import { compress } from "@/utils/imgupload";
import apiUrl from "@/axios/api.url.js";
export default {
  name: "bankCard",
  data() {
    return {
      form: {
        phone: "",
        name: "",
        idCard: "",
        vaildNumber: "",
        img1key: "",
        img2key: "",
        img3key: "",
      },
      img1Key: "",
      img2Key: "",
      img3Key: "",
      showBtn: true,
      admin: apiUrl.baseURL,
      imgStatus: false,
      imgStatus2: false,
      messFlag: this.$store.state.userInfo.isActive == 3 ? true : false,
    };
  },
  created() {
    this.getUserInfo();
  },
  beforeDestroy() {
    if (this.$state.theme == "red") {
      document.body.classList.remove("red-bg");
      document.body.classList.add("black-bg");
    }
  },
  mounted() {
    if (this.$state.theme == "red") {
      document.body.classList.remove("black-bg");
      document.body.classList.add("red-bg");
    }
  },
  methods: {
    handleAvatarSuccess(res, file) {
      this.imgStatus = false;
      this.form.img1key = res.data.url;
    },
    beforeAvatarUpload(file) {
      this.imgStatus = true;
    },
    handleError() {
      this.imgStatus = false;
    },
    handleAvatarSuccess2(res, file) {
      this.imgStatus2 = false;
      this.form.img2key = res.data.url; // URL.createObjectURL(file.raw);
    },
    beforeAvatarUpload2(file) {
      this.imgStatus2 = true;
      const isLt10M = file.size / 1024 / 1024 < 10;
      if (!isLt10M) {
        this.$message.error(this.$t("hj205"));
        return false;
      } else {
        this.form.img2key = URL.createObjectURL(file);
        compress(file, function (val) { });
      }
    },
    handleError2() {
      this.imgStatus2 = false;
    },
    handleAvatarSuccess3(res, file) {
      this.form.img3key = res.data.url; // URL.createObjectURL(file.raw);
    },
    async getUserInfo() {
      // 获取用户信息
      let data = await api.getUserInfodata();
      if (data.status === 0) {
        // 判断是否登录
        this.$store.commit("dialogVisible", false);
        this.$store.state.userInfo = data.data;
        this.userInfo = data.data;
        if (
          this.$store.state.userInfo.isActive === 1 ||
          this.$store.state.userInfo.isActive === 2
        ) {
          this.form.idCard = this.$store.state.userInfo.idCard;
          this.form.vaildNumber = this.$store.state.userInfo.vaildNumber;
          this.form.name = this.$store.state.userInfo.realName;
          this.form.img1key = this.$store.state.userInfo.img1Key;
          this.form.img2key = this.$store.state.userInfo.img2Key;
          this.showBtn = false;
        }
      } else {
        //this.$store.commit('dialogVisible',true);
        //跳转到login
        this.$router.push({ path: "/login" });
      }
    },
    beforeAvatarUpload3(file) { },
    // 上传
    handleFile: function (e) {
      // var that = this
      let $target = e.target || e.srcElement;
      let file = $target.files[0];
      // if(file.size > 1024 * 1024 *20){
      console.log(file, "file");
      let i = false;
      if (i) {
        Toast(this.$t("hj206"));
      } else {
        this.img1Key = file;
        var reader = new FileReader();
        reader.onload = (data) => {
          let res = data.target || data.srcElement;
          this.form.img1Key = res.result;
          // Indicator.close()
        };
        reader.readAsDataURL(file);
      }
    },
    toSure() {
      // 实名认证弹框
      if (isNull(this.form.name)) {
        Toast(this.$t("hj207"));
      } else if (isNull(this.form.idCard)) {
        Toast(this.$t("hj208"));
      } else if (!this.form.img1key) {
        Toast(this.$t("hj209"));
      } else if (!this.form.img2key) {
        Toast(this.$t("hj209"));
      } else {
        // 显示确认弹窗
        this.toAuthentication();
      }
    },
    async toAuthentication() {
      let opts = {
        realName: this.form.name,
        idCard: this.form.idCard,
        vaildNumber: this.form.vaildNumber,
        img1key: this.form.img1key,
        img2key: this.form.img2key,
        img3key: this.form.img3key,
      };
      let data = await api.userAuth(opts);
      if (data.status === 0) {
        Toast(this.$t("hj210"));
        this.goBack();
      } else {
        Toast(data.msg);
      }
    },
    goBack() {
      this.$router.back(-1);
    },
  },
};
</script>
<style scoped lang="less">
@green: #c4d600;
/deep/ .van-nav-bar__content {
  height: 65px;
}
/deep/ .van-nav-bar__title {
  font-family: "DINPro";
  width: 100%;
  height: 1.17333rem;
  display: flex;
  justify-content: center;
  align-items: center;
  font-style: normal;
  font-weight: 500;
  font-size: 0.48rem;
  color: #14181f;
}
.bank_card_page {
  width: 100%;
  height: 100%;
  background: #fff;
  position: relative;
  .content {
    width: 100%;
    height: 100vh;
    padding: 0 0.6rem;
    .top_back {
      width: 100%;
      height: 2rem;
      >div {
        width: 10%;
        height: 100%;
        display: flex;
        align-items: center;
      }
      img {
        width: 0.6rem;
        height: 0.6rem;
      }
    }
    .titles {
      width: 100%;
      height: 1.5rem;
      font-size: 0.641rem;
      margin-top: 1rem;
      span {
        font-weight: 600;
      }
    }
  }
  .bank_name {
    width: 100%;
    height: 1.5rem;
    display: flex;
    padding: 0 0.2rem;
    background: rgb(247, 247, 247);
    border-radius: 0.2rem;
    margin-top: 0.3rem;
    .lefts {
      width: 36%;
      height: 100%;
      display: flex;
      align-items: center;
      font-size: 0.3846rem;
      span {
        font-weight: 600;
      }
    }
    .rights {
      width: 75%;
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      input {
        width: 100%;
        height: 100%;
      }
    }
  }
}
.bank_name.bind {
  display: flex;
  align-items: center;
  justify-content: center;
  background: @green;
  font-size: 0.4103rem;
  color: #fff;
  span {
    font-weight: 600;
  }
}
.uploads {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 0.3rem;
  >div {
    width: 48%;
    background: rgb(247, 247, 247);
  }
}
/deep/ .el-upload--picture-card {
  background: none;
  width: 100%;
  height: 100PX;
  line-height: 1.6rem;
}
/deep/ .el-upload__input {
  display: none;
}
.pass {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  height: auto;
  // position: absolute;
  // top: 1.72rem;
  // right: .2rem;
  // opacity: 0.2;
  .top_t {
    width: 100%;
    height: auto;
    display: flex;
    flex-direction: column;
    justify-content: center;
    font-size: 80px;
    color: #3ac23e;
    align-items: center;
    img {
      width: 64px;
      height: 64px;
      margin-top: 200px;
      margin-bottom: 20px;
    }
    span {
      font-size: 30px;
    }
  }
  .ise_pass {
    font-size: 80px;
  }
}
</style>
src/page/authentication/index.vue
@@ -1,175 +1,81 @@
<template>
  <div class="bank_card_page">
    <van-nav-bar
      :placeholder="true"
      :safe-area-inset-top="true"
      title="KYC"
      left-arrow
      @click-left="$router.go(-1)"
    >
  <div class="authentication-container">
    <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('rnv')" left-arrow
      @click-left="$router.go(-1)">
    </van-nav-bar>
    <div class="content">
<!--      <div class="top_back">
        <div class="left_back_icon" @click="$router.go(-1)">
          <img src="../../assets/img/zuojiantou.png" alt />
        </div>
      </div> -->
     <!-- <div class="titles">
        <span>{{ $t("hj146") }}</span>
      </div> -->
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("hj195") + ":" }}</span>
        </div>
        <div class="rights">
          <input
            v-if="showBtn"
            type="text"
            placeholder="Please enter your Name"
            v-model="form.name"
          />
          <input v-if="!showBtn" type="text" v-model="form.name" readonly />
        </div>
      </div>
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("hj196") + ":" }}</span>
        </div>
        <div class="rights">
          <input
            v-if="showBtn"
            type="text"
            placeholder="Please enter your Aadhaar card"
            v-model="form.idCard"
          />
          <input v-if="!showBtn" type="text" v-model="form.idCard" readonly />
        </div>
      </div>
      <div class="bank_name">
        <div class="lefts">
          <span>{{ $t("电话号码") + ":" }}</span>
        </div>
        <div class="rights">
          <input
            v-if="showBtn"
            type="text"
            placeholder="Please enter your telephone number"
            v-model="form.vaildNumber"
          />
          <input
            v-if="!showBtn"
            type="text"
            v-model="form.vaildNumber"
            readonly
          />
        </div>
      </div>
      <div class="uploads">
        <div class="lefts">
          <el-upload
            :with-credentials="true"
            class="avatar-uploader"
            :action="admin + 'user/upload.do'"
            list-type="picture-card"
            name="upload_file"
            :show-file-list="false"
            :on-success="handleAvatarSuccess"
            :on-error="handleError"
            :before-upload="beforeAvatarUpload"
            :disabled="!showBtn"
          >
            <img
              v-if="form.img1key"
              :src="form.img1key"
              class="id-img avatar"
              style="width: 100%; height: 100%"
            />
            <i v-else class="iconfont icon-zhaopian"></i>
            <span v-if="!form.img1key && !imgStatus" class="btn-title">{{
              $t("hj197")
            }}</span>
            <span v-if="imgStatus" class="btn-title">{{ $t("hj198") }}</span>
          </el-upload>
        </div>
        <div class="rights">
          <el-upload
            :with-credentials="true"
            class="avatar-uploader"
            :action="admin + 'user/upload.do'"
            list-type="picture-card"
            name="upload_file"
            :show-file-list="false"
            :on-success="handleAvatarSuccess2"
            :on-error="handleError2"
            :before-upload="beforeAvatarUpload2"
            :disabled="!showBtn"
          >
            <img
              v-if="form.img2key"
              :src="form.img2key"
              class="id-img avatar"
              style="width: 100%; height: 100%"
            />
            <i v-else class="iconfont icon-zhaopian"></i>
            <span v-if="!form.img2key && !imgStatus2" class="btn-title">{{
              $t("hj199")
            }}</span>
            <span v-if="imgStatus2" class="btn-title">{{ $t("hj198") }}</span>
          </el-upload>
        </div>
      </div>
      <div class="bank_name bind" @click="toSure" v-if="showBtn">
        <span>{{ $t("hj161") }}</span>
      </div>
      <van-notify v-model="messFlag" type="primary">
        <div>
          <div class="eft">
            <span>{{ $t("hj200") }}</span>
          </div>
          <div class="bft">
            <span
              >{{ $t("hj201") }}:{{ this.$store.state.userInfo.authMsg }}</span
            >
          </div>
        </div>
      </van-notify>
      <div class="pass">
        <div class="top_t">
          <img
            v-if="this.$store.state.userInfo.isActive == 1"
            src="../../../static/img/bd_shz.png"
          />
          <span
            v-if="this.$store.state.userInfo.isActive == 1"
            class="ise_pass"
            >{{ $t("hj202") }}</span
          >
          <img
            v-if="!showBtn && this.$store.state.userInfo.isActive != 1"
            src="../../../static/img/bd_suessce.png"
          />
          <span v-if="!showBtn && this.$store.state.userInfo.isActive != 1">{{
            $t("hj203")
          }}</span>
          <img v-if="showBtn" src="../../../static/img/bd_fail.png" />
          <span v-if="showBtn" class="ise_pass">{{ $t("hj204") }}</span>
        </div>
      </div>
    <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
    <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t('hj195') }}</label>
      <input type="text" v-model="form.name" class="form-input" :disabled="isActive" />
    </div>
    <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t('it1') }}</label>
      <van-radio-group v-model="auRadio" direction="horizontal" disabled style="font-size: 3.5vw;margin-top: 1em;">
        <van-radio name="1">{{ $t('dl1') }}</van-radio>
        <van-radio name="2">{{ $t('pa1') }}</van-radio>
        <van-radio name="3">{{ $t('ot1') }}</van-radio>
      </van-radio-group>
    </div>
    <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t('in1') }}</label>
      <input type="text" v-model="form.idCard" class="form-input" :disabled="isActive" />
    </div>
    <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t("电话号码") }}</label>
      <input type="text" v-model="form.vaildNumber" class="form-input" :disabled="isActive" />
    </div>
    <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
    <div class="form-group flex-between" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t('fsi1') }}</label>
      <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
        list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess"
        :on-error="handleError" :before-upload="beforeAvatarUpload" :disabled="isActive">
        <img v-if="form.img1key" :src="form.img1key" class="id-img avatar" style="width: 100%; height: 100%" />
        <i v-else class="iconfont icon-zhaopian"></i>
      </el-upload>
    </div>
    <div class="form-group flex-between" :class="{ 'disabled': isSubmitting || isActive }">
      <label class="required-label">{{ $t('bsi1') }}</label>
      <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
        list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess2"
        :on-error="handleError2" :before-upload="beforeAvatarUpload2" :disabled="isActive">
        <img v-if="form.img2key" :src="form.img2key" class="id-img avatar" style="width: 100%; height: 100%" />
        <i v-else class="iconfont icon-zhaopian"></i>
      </el-upload>
    </div>
    <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
    <div class="submit-button" :class="{ 'disabled': isSubmitting || isActive }" @click="toSure">
      <span>{{ $t("uv1") }}</span>
    </div>
  </div>
</template>
<script>
import * as api from "@/axios/api";
import { Toast } from "mint-ui";
import { isNull, idCardReg, isName } from "@/utils/utils";
import { compress } from "@/utils/imgupload";
import apiUrl from "@/axios/api.url.js";
import { compress } from "@/utils/imgupload";
import { isNull } from "@/utils/utils";
import { Toast } from "vant";
export default {
  name: "bankCard",
  name: 'Authentication',
  data() {
    return {
      frontImage: '',
      backImage: '',
      isSubmitting: false,
      auRadio: '1',
      form: {
        phone: "",
        name: "",
@@ -177,65 +83,62 @@
        vaildNumber: "",
        img1key: "",
        img2key: "",
        img3key: "",
      },
      img1Key: "",
      img2Key: "",
      img3Key: "",
      showBtn: true,
      admin: apiUrl.baseURL,
      imgStatus: false,
      imgStatus2: false,
      messFlag: this.$store.state.userInfo.isActive == 3 ? true : false,
    };
      admin: apiUrl.baseURL,
    }
  },
  computed: {
    //注册默认0  1.提交未实名 2.已实名 3.驳回, 状态1||2的时候屏蔽所有的输入
    isActive() {
      return this.$store.state.userInfo.isActive == 1 || this.$store.state.userInfo.isActive == 2;
      // return false;
    }
  },
  created() {
    this.getUserInfo();
  },
  beforeDestroy() {
    if (this.$state.theme == "red") {
      document.body.classList.remove("red-bg");
      document.body.classList.add("black-bg");
    }
  },
  mounted() {
    if (this.$state.theme == "red") {
      document.body.classList.remove("black-bg");
      document.body.classList.add("red-bg");
    }
    // 可以在这里加载用户已有的认证信息
    // 如果用户已经提交过认证信息,可以显示认证状态
  },
  methods: {
    handleAvatarSuccess(res, file) {
      this.imgStatus = false;
      this.form.img1key = res.data.url;
    },
    beforeAvatarUpload(file) {
      this.imgStatus = true;
    },
    handleError() {
      this.imgStatus = false;
    },
    handleAvatarSuccess2(res, file) {
      this.imgStatus2 = false;
      this.form.img2key = res.data.url; // URL.createObjectURL(file.raw);
    },
    beforeAvatarUpload2(file) {
      this.imgStatus2 = true;
      const isLt10M = file.size / 1024 / 1024 < 10;
      if (!isLt10M) {
        this.$message.error(this.$t("hj205"));
        return false;
    toSure() {
      if (this.isSubmitting || this.isActive) return // 防止重复提交
      // 实名认证弹框
      if (isNull(this.form.name)) {
        Toast(this.$t("hj207"));
      } else if (isNull(this.form.idCard)) {
        Toast(this.$t("hj208"));
      } else if (!this.form.img1key) {
        Toast(this.$t("hj209"));
      } else if (!this.form.img2key) {
        Toast(this.$t("hj209"));
      } else {
        this.form.img2key = URL.createObjectURL(file);
        compress(file, function (val) {});
        // 显示确认弹窗
        this.toAuthentication();
      }
    },
    handleError2() {
      this.imgStatus2 = false;
    },
    handleAvatarSuccess3(res, file) {
      this.form.img3key = res.data.url; // URL.createObjectURL(file.raw);
    async toAuthentication() {
      this.isSubmitting = true
      let opts = {
        realName: this.form.name,
        idCard: this.form.idCard,
        vaildNumber: this.form.vaildNumber,
        img1key: this.form.img1key,
        img2key: this.form.img2key,
        img3key: this.form.img3key,
      };
      let data = await api.userAuth(opts);
      if (data.status === 0) {
        Toast(this.$t("hj210"));
        this.goBack();
      } else {
        Toast(data.msg);
      }
      this.isSubmitting = false
    },
    async getUserInfo() {
      // 获取用户信息
@@ -262,231 +165,205 @@
        this.$router.push({ path: "/login" });
      }
    },
    beforeAvatarUpload3(file) {},
    // 上传
    handleFile: function (e) {
      // var that = this
      let $target = e.target || e.srcElement;
      let file = $target.files[0];
      // if(file.size > 1024 * 1024 *20){
      console.log(file, "file");
      let i = false;
      if (i) {
        Toast(this.$t("hj206"));
    handleAvatarSuccess(res, file) {
      this.imgStatus = false;
      this.form.img1key = res.data.url;
    },
    beforeAvatarUpload(file) {
      this.imgStatus = true;
    },
    handleError() {
      this.imgStatus = false;
    },
    handleAvatarSuccess2(res, file) {
      this.imgStatus2 = false;
      this.form.img2key = res.data.url; // URL.createObjectURL(file.raw);
    },
    beforeAvatarUpload2(file) {
      this.imgStatus2 = true;
      const isLt10M = file.size / 1024 / 1024 < 10;
      if (!isLt10M) {
        this.$message.error(this.$t("hj205"));
        return false;
      } else {
        this.img1Key = file;
        var reader = new FileReader();
        reader.onload = (data) => {
          let res = data.target || data.srcElement;
          this.form.img1Key = res.result;
          // Indicator.close()
        };
        reader.readAsDataURL(file);
        this.form.img2key = URL.createObjectURL(file);
        compress(file, function (val) { });
      }
    },
    toSure() {
      // 实名认证弹框
      if (isNull(this.form.name)) {
        Toast(this.$t("hj207"));
      } else if (isNull(this.form.idCard)) {
        Toast(this.$t("hj208"));
      } else if (!this.form.img1key) {
        Toast(this.$t("hj209"));
      } else if (!this.form.img2key) {
        Toast(this.$t("hj209"));
      } else {
        // 显示确认弹窗
        this.toAuthentication();
      }
    handleError2() {
      this.imgStatus2 = false;
    },
    async toAuthentication() {
      let opts = {
        realName: this.form.name,
        idCard: this.form.idCard,
        vaildNumber: this.form.vaildNumber,
        img1key: this.form.img1key,
        img2key: this.form.img2key,
        img3key: this.form.img3key,
      };
      let data = await api.userAuth(opts);
      if (data.status === 0) {
        Toast(this.$t("hj210"));
        this.goBack();
      } else {
        Toast(data.msg);
      }
    },
    goBack() {
      this.$router.back(-1);
    },
  },
};
  }
}
</script>
<style scoped lang="less">
<style lang="less" scoped>
@green: #c4d600;
  /deep/ .van-nav-bar__content {
    height: 65px;
  }
  /deep/ .van-nav-bar__title {
    font-family: "DINPro";
    width: 100%;
    height: 1.17333rem;
    display: flex;
    justify-content: center;
    align-items: center;
    font-style: normal;
    font-weight: 500;
    font-size: 0.48rem;
    color: #14181f;
  }
.bank_card_page {
  width: 100%;
  height: 100%;
  background: #fff;
  position: relative;
  .content {
    width: 100%;
    height: 100vh;
    padding: 0 0.6rem;
    .top_back {
      width: 100%;
      height: 2rem;
      > div {
        width: 10%;
        height: 100%;
        display: flex;
        align-items: center;
      }
      img {
        width: 0.6rem;
        height: 0.6rem;
      }
    }
    .titles {
      width: 100%;
      height: 1.5rem;
      font-size: 0.641rem;
      margin-top: 1rem;
      span {
        font-weight: 600;
      }
    }
  }
  .bank_name {
    width: 100%;
    height: 1.5rem;
    display: flex;
    padding: 0 0.2rem;
    background: rgb(247, 247, 247);
    border-radius: 0.2rem;
    margin-top: 0.3rem;
    .lefts {
      width: 36%;
      height: 100%;
      display: flex;
      align-items: center;
      font-size: 0.3846rem;
      span {
        font-weight: 600;
      }
    }
    .rights {
      width: 75%;
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      input {
        width: 100%;
        height: 100%;
      }
    }
  }
/deep/ .van-nav-bar__content {
  height: 65px;
}
.bank_name.bind {
/deep/ .van-nav-bar__title {
  font-family: "DINPro";
  width: 100%;
  height: 1.17333rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: @green;
  font-size: 0.4103rem;
  color: #fff;
  span {
    font-weight: 600;
  }
}
.uploads {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 0.3rem;
  > div {
    width: 48%;
    background: rgb(247, 247, 247);
  }
}
/deep/ .el-upload--picture-card {
  background: none;
  width: 100%;
  height: 100PX;
  line-height: 1.6rem;
  font-style: normal;
  font-weight: 700;
  font-size: 0.48rem;
  color: #14181f;
}
/deep/ .el-upload__input {
  display: none;
}
.pass {
.authentication-container {
  /* padding: 20px; */
  background-color: #ffffff;
  min-height: 100vh;
  font-size: 10vw;
}
.form-group {
  margin-bottom: .25em;
  padding: .25em .25em 0;
}
label {
  display: block;
  margin-bottom: 8px;
  color: #999;
  font-size: 16px;
  font-weight: normal;
}
.required-label {
  color: #333;
  font-weight: bold;
  font-size: .4em;
}
.required-label::before {
  content: '*';
  color: #ff4d4f;
  margin-right: 4px;
}
.form-input {
  width: 100%;
  height: 3em;
  border: 1px solid #e8e8e8;
  border-radius: 4px;
  padding: 0 15px;
  font-size: .4em;
  box-sizing: border-box;
  color: #333;
}
.id-type-options {
  display: flex;
  justify-content: center;
  justify-content: space-between;
}
.option {
  display: flex;
  align-items: center;
  height: auto;
  // position: absolute;
  // top: 1.72rem;
  // right: .2rem;
  // opacity: 0.2;
  padding: 10px 15px;
  border: 1px solid #e8e8e8;
  border-radius: 4px;
  background-color: #fff;
  flex: 1;
  margin-right: 10px;
}
  .top_t {
    width: 100%;
    height: auto;
    display: flex;
    flex-direction: column;
    justify-content: center;
    font-size: 80px;
    color: #3ac23e;
    align-items: center;
    img {
      width: 64px;
      height: 64px;
      margin-top: 200px;
      margin-bottom: 20px;
    }
    span {
      font-size: 30px;
    }
  }
.option:last-child {
  margin-right: 0;
}
  .ise_pass {
    font-size: 80px;
.option.selected {
  border-color: #4a90e2;
}
.radio-circle {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 1px solid #ccc;
  margin-right: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #f5f5f5;
}
.option.selected .radio-circle {
  border-color: #4a90e2;
  background-color: #fff;
}
.radio-inner {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background-color: #4a90e2;
}
.upload-box {
  width: 100%;
  height: 120px;
  border: 1px solid #e8e8e8;
  border-radius: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #fafafa;
  cursor: pointer;
  overflow: hidden;
}
.upload-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.upload-icon {
  width: 40px;
  height: 40px;
  margin-bottom: 8px;
  opacity: 0.5;
}
.preview-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.submit-button {
  width: 9.5em;
  margin: .4em auto 0;
  height: 1.2em;
  background-color: #e6e254;
  color: #fff;
  border-radius: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-weight: normal;
  span {
    font-size: .4em;
  }
}
</style>
.disabled {
  opacity: .5;
}
</style>
src/page/bankCard/banklist.vue
@@ -22,7 +22,7 @@
      <div class="bank_name">
        <!-- <div class="bank_box" @click="$router.push('/bankcard')"> -->
        <div class="bank_box" @click="openEditDialog()">
          {{ $t("hj220").substring(0, 2) }}{{ $t("hj247") }}
          {{ $t("abc") }}
        </div>
      </div>
    </div>
@@ -32,6 +32,7 @@
      <div class="edit-popup">
        <div class="edit-title">{{ !this.editForm.id ? $t('hj211') : $t('hj212') }}</div>
        <div class="division"></div>
        <div class="edit-form">
          <div class="form-item">
            <div class="form-label"><span class="required">*</span>{{ $t('hj213') }}</div>
@@ -46,6 +47,7 @@
            <input type="text" v-model="editForm.bankCardholderName" :placeholder="$t('银行卡户主名称')" class="form-input" />
          </div>
        </div>
        <div class="division"></div>
        <div class="edit-buttons">
          <div class="cancel-btn" @click="showEditDialog = false">{{ $t('qx') }}</div>
src/page/home/homeIndex.vue
@@ -1,13 +1,7 @@
<template>
  <div class="home_index">
    <tab-head>
      <van-popover
        v-model="languageShow"
        trigger="click"
        :actions="actions"
        @select="onSelect"
        placement="bottom-end"
      >
      <van-popover v-model="languageShow" trigger="click" :actions="actions" @select="onSelect" placement="bottom-end">
        <template #reference>
          <div class="multilingual">
            <img src="../../assets/img/language.svg" alt="" />
@@ -26,7 +20,7 @@
          <div class="swiper-slide">
            <div class="nav_item flex-start" @click="toPage('/aiTrading')">
              <img src="../../assets/img/home_1.png" alt="" />
              <span>AI {{ $t("量化交易") }}</span>
              <span>{{ $t("量化交易") }}</span>
            </div>
          </div>
          <div class="swiper-slide">
@@ -58,10 +52,7 @@
      </div>
      <div class="flex-between navs">
        <div class="nav_item" v-for="item in usDataStockBeans" :key="item.id">
          <index-component
            :ids="'a' + item.id"
            :dataObj="item"
          ></index-component>
          <index-component :ids="'a' + item.id" :dataObj="item"></index-component>
          <!-- <van-skeleton title :row="3" /> -->
        </div>
      </div>
@@ -75,10 +66,7 @@
      <div class="flex-between navs">
        <div class="nav_item" v-for="item in mxDataStockBeans" :key="item.id">
          <!-- <van-skeleton title :row="3" /> -->
          <index-component
            :ids="'b' + item.id"
            :dataObj="item"
          ></index-component>
          <index-component :ids="'b' + item.id" :dataObj="item"></index-component>
        </div>
      </div>
    </div>
@@ -89,11 +77,7 @@
        <span>{{ $t("hj6") }}</span>
      </div>
      <news-item
        :item="item"
        v-for="item in newsList"
        :key="item.id"
      ></news-item>
      <news-item :item="item" v-for="item in newsList" :key="item.id"></news-item>
      <div class="more flex-center" @click="$router.push('/new-list')">
        <span>{{ $t("更多新闻") }}</span>
@@ -274,6 +258,7 @@
            height: 100%;
            flex-direction: column;
            padding-top: .25em;
            padding: .25em .15em 0;
            img {
              width: 0.75em;
@@ -281,8 +266,8 @@
            }
            span {
              font-size: 0.25em;
              font-weight: 500;
              font-size: 0.28em;
              font-weight: 700;
              text-align: center;
            }
          }
src/page/kline/components/kLine.vue
@@ -1358,7 +1358,7 @@
            EastMoney.HQData.NetworkFilter(data, callback);
            break;
        }
      }, 2000);
      }, 5000);
    },
    handleSelect(key, keyPath) {
src/page/kline/index.vue
@@ -450,10 +450,9 @@
    } else {
      this.timer = setInterval(() => {
        this.getSingDetails();
      }, 2000);
      }, 5000);
    }
    this.getOpation();
    // this.$Lazyload();
    this.getUserInfo();
    this.getNohknews();
  },
src/page/login/login.vue
@@ -1,16 +1,30 @@
<template>
  <div class="login_page">
    <headers />
    <!-- <headers /> -->
    <tab-head :leftShow="false" :rightShow="false">
      <van-popover v-model="languageShow" trigger="click" :actions="actions" @select="onSelect" placement="bottom-end">
        <template #reference>
          <div class="multilingual">
            <img src="../../assets/img/language.svg" alt="" />
          </div>
        </template>
      </van-popover>
    </tab-head>
    <img src="../../assets/img/logo.png" alt="" class="logo">
    <div class="login_title animated slideInDown">
      <span>{{ $t("登錄賬號") }}</span>
      <span>{{ $t("dlan") }}</span>
    </div>
    <div class="logins_content">
      <div class="login_forms">
        <div class="top_forms">
          <div class="forms_title">{{ $t('hj27') }}</div>
          <el-input :placeholder="$t('hj9')" :size="medium" v-model="userName" clearable>
          </el-input>
          <el-input style="margin-top: 0.46rem" show-password :placeholder="$t('hj10')" :size="medium"
            v-model="userPassword" @input="handleInput()">
          <div class="forms_title">{{ $t('Password') }}</div>
          <el-input show-password :placeholder="$t('hj10')" :size="medium" v-model="userPassword"
            @input="handleInput()">
          </el-input>
        </div>
        <div class="bottom_btns">
@@ -41,7 +55,8 @@
  </div>
</template>
<script>
import headers from "./components/header.vue";
// import headers from "./components/header.vue";
import tabHead from "../../components/tabHead.vue";
import * as api from "@/axios/api";
import { Notify } from "vant";
import { mapActions, mapMutations } from "vuex";
@@ -57,11 +72,21 @@
      userPassword: "",
      userName: "",
      btnClass: false,
      medium: "medium"
      medium: "medium",
      languageShow: false, // 语言选择
      // 多语言配置
      actions: [
        {
          text: "English",
          lang: "en"
        },
        { text: "español", lang: "es" }
      ],
    };
  },
  components: {
    headers
    // headers,
    tabHead,
  },
  mounted() {
    const ret = window.localStorage.getItem("login_admin");
@@ -128,7 +153,12 @@
        // 支持
        navigator.vibrate([55]);
      }
    }
    },
    // 选择语言
    onSelect(e) {
      window.localStorage.setItem("language", e.lang);
      this.$i18n.locale = e.lang;
    },
  },
  beforeDestroy() { },
  created() { }
@@ -176,11 +206,11 @@
.login_title {
  font-family: "DINPro", serif;
  font-style: normal;
  font-weight: 500;
  font-size: 0.48rem;
  font-weight: 700;
  font-size: 0.7rem;
  line-height: 0.66667rem;
  color: #14181f;
  margin-left: 0.53333rem;
  text-align: center;
}
/deep/ .van-checkbox__label {
@@ -200,6 +230,22 @@
  display: flex;
  flex-direction: column;
  height: 100vh;
  .multilingual {
    width: .8em;
    height: .8em;
    margin-left: 0.25em;
    img {
      width: 100%;
      height: 100%;
    }
  }
}
.logo {
  width: 50vw;
  margin: 10vw auto 15vw;
}
.logins_content {
@@ -229,6 +275,12 @@
      align-items: center;
      flex-wrap: wrap;
      .forms_title {
        font-size: .4rem;
        margin-top: .5rem;
        margin-bottom: .2rem;
      }
      .user_name,
      .password {
        width: 100%;
src/page/markets/aiTrading.vue
@@ -1,6 +1,6 @@
<template>
  <div class="ai_trading">
    <page-head :title="`AI ${$t('量化交易')}`">
    <page-head :title="`${$t('量化交易')}`">
      <template slot="right">
        <div class="head_right" @click="$router.push('/aiTradingOrder')">
          {{ $t("订单") }}
@@ -55,7 +55,7 @@
    <van-popup v-model="buyShow" round>
      <van-form class="buy_popup" @submit="popupSubmit">
        <div class="popup_title flex-center">
          <span>{{ `AI ${$t("量化交易")}` }}</span>
          <span>{{ `${$t("量化交易")}` }}</span>
        </div>
        <div class="division"></div>
src/page/markets/blockTrading.vue
@@ -89,7 +89,7 @@
          </span>
        </div>
        <div class="popup_item flex-between-start">
        <!-- <div class="popup_item flex-between-start">
          <span style="color:red">*</span>
          <van-field
            v-model="popFrom.password"
@@ -97,7 +97,7 @@
            :placeholder="$t('请输入')"
            :rules="[{ required: true, message: $t('请输入') }]"
          />
        </div>
        </div> -->
        <div class="popup_item flex-between">
          <p class="flex-start">
src/page/markets/blockTradingOrder.vue
@@ -45,14 +45,16 @@
      <p class="card_label2 flex-between">
        <span>{{ $t("总金额") }}</span>
        <span class="zje"
          >{{ i.stockGid | currencySymbol }} {{ i.orderTotalPrice }}</span
        >
        <span class="zje">
          {{ i.stockGid | currencySymbol }} {{ i.orderTotalPrice }}
        </span>
      </p>
      <p class="card_label2 flex-between">
        <span>{{ $t("状态") }}</span>
        <span class="zt">{{ status[i.checkType] }}</span>
        <span :class="`${i.checkType == 2 ? 'zt2' : 'zt'}`">
          {{ status[i.checkType] }}
        </span>
      </p>
      <p class="card_label2 flex-between">
@@ -234,6 +236,9 @@
      span.zt {
        color: @green;
      }
      span.zt2 {
        color: @red;
      }
    }
    .card_label1 {
src/page/markets/ipo.vue
@@ -21,9 +21,9 @@
        </div>
        <div class="flex-end">
          <span class="label_status" v-if="i.listDate > Date.now()">{{
            $t("待上市")
          }}</span>
          <span class="label_status" v-if="i.listDate > Date.now()">
            {{ $t("待上市") }}
          </span>
          <span class="label_status1" v-else>{{ $t("已上市") }}</span>
        </div>
      </div>
src/page/markets/ipoOrder.vue
@@ -34,11 +34,16 @@
      </p>
      <p class="card_label2 flex-between">
        <span>{{ $t("sl") }}</span>
        <span>{{ $t("hj270") }}</span>
        <span>{{ i.applyNums }}</span>
      </p>
      <p class="card_label2 flex-between">
        <span>{{ $t("sl") }}</span>
        <span>{{ i.applyNumber || "-" }}</span>
      </p>
      <p class="card_label2 flex-between">
        <span>{{ $t("发行时间") }}</span>
        <span>{{ i.subscriptionTime | gettime }}</span>
      </p>
src/page/newUser/setting.vue
@@ -13,24 +13,25 @@
    </div> -->
    <div style="width: 100%; height: 10px; background-color: #f8f8f8"></div>
    <div class="jy" @click="handleGoToBankCard1()">
    <div class="jy" @click="handleGoToAuthentication()">
      <div class="left_gn">
        <div class="l_icon">
          <!-- <img src="../../assets/img/yeb.png" alt /> -->
          <van-icon name="friends" size=".8rem" />
          <van-icon name="manager" size=".8rem" />
        </div>
        <div class="r_title">
          <span>{{ $t("关于我们") }}</span>
          <span>{{ $t('rnv') }}</span>
        </div>
      </div>
      <div class="right_gos">
        <img src="../../assets/img/youjiantou.png" alt />
        <div class="right_gos_txt" v-if="userInfo.realName">
          {{ $t("ysmrz") }}
        </div>
        <img v-else src="../../assets/img/youjiantou.png" alt />
      </div>
    </div>
    <div class="jy" @click="handleGoToBankCard()">
      <div class="left_gn">
        <div class="l_icon">
          <!-- <img src="../../assets/img/yeb.png" alt /> -->
          <van-icon name="card" size=".8rem" />
        </div>
        <div class="r_title">
@@ -44,7 +45,6 @@
    <div class="jy" @click="goToSettings()">
      <div class="left_gn">
        <div class="l_icon">
          <!-- <img src="../../assets/img/yeb.png" alt /> -->
          <van-icon name="lock" size=".8rem" />
        </div>
        <div class="r_title">
@@ -55,26 +55,19 @@
        <img src="../../assets/img/youjiantou.png" alt />
      </div>
    </div>
    <div class="jy" @click="handleGoToAuthentication()">
    <!-- <div class="jy" @click="handleGoToBankCard1()">
      <div class="left_gn">
        <div class="l_icon">
          <!-- <img src="../../assets/img/yeb.png" alt /> -->
          <van-icon name="manager" size=".8rem" />
          <van-icon name="friends" size=".8rem" />
        </div>
        <div class="r_title">
          <span>KYC</span>
          <!-- <span>{{ $t("hj146") }}</span> -->
          <span>{{ $t("关于我们") }}</span>
        </div>
      </div>
      <div class="right_gos">
        <div class="right_gos_txt" v-if="userInfo.realName">
          {{ $t("ysmrz") }}
        </div>
        <img v-else src="../../assets/img/youjiantou.png" alt />
        <img src="../../assets/img/youjiantou.png" alt />
      </div>
    </div>
    </div> -->
    <div class="jy" @click="clicklang()">
      <div class="left_gn">
        <div class="l_icon">
@@ -374,7 +367,7 @@
  justify-content: center;
  align-items: center;
  font-style: normal;
  font-weight: 500;
  font-weight: 700;
  font-size: 0.48rem;
  color: #14181f;
}
src/page/trading/stockRecord.vue
@@ -4,6 +4,11 @@
    <div class="trading_card" v-for="i in list" :key="i.id">
      <p class="card_label2 flex-between">
        <span>{{ $t("sc") }}</span>
        <span> {{ i.stockCode }}</span>
      </p>
      <p class="card_label2 flex-between">
        <span>{{ $t("訂單編號") }}</span>
        <span> {{ i.buyOrderId }}</span>
      </p>
src/page/user/Warehouse/Stockdetail.vue
@@ -22,6 +22,20 @@
        </div>
      </div>
      <div class="pagebox">
        <div class="pagebox_left">
          {{ $t("sc") }}
        </div>
        <div class="pagebox_right">{{ pages.stockCode }}</div>
      </div>
      <div class="pagebox">
        <div class="pagebox_left">
          {{ $t("類型") }}
        </div>
        <div class="pagebox_right">
          {{ pages.orderDirection == "买涨" ? $t("gm") : $t("hj78") }}
        </div>
      </div>
      <div class="pagebox">
        <div class="pagebox_left">{{ $t("盈虧") }}</div>
        <div class="pagebox_right">
          {{ pages.stockGid | currencySymbol }}
@@ -226,6 +240,7 @@
  .buttonbox {
    padding-top: 1.2em;
    padding-bottom: 1.2em;
    /deep/ .van-button--primary {
      background-color: @green;
src/page/user/compontents/cash-list.vue
@@ -14,10 +14,10 @@
          <div class="order-info-box">
            <div class="order-title">
              <span class="main"> {{ $t("hjtxyhk") }} </span>
              <span class="payNumber"
                >{{ $USD }}{{ item.withAmt | _toLocaleString }}</span
              >
              <span v-if="item.withStatus!=1" class="red pull-right">
              <span class="payNumber">{{
                item.withAmt | _toLocaleString
              }}</span>
              <span v-if="item.withStatus != 1" class="red pull-right">
                {{
                  item.withStatus == 1
                    ? $t("hjtxcg")
@@ -44,7 +44,7 @@
                  class="iconfont icon-iconfontweitongguo animated bounceInDown"
                ></i>
              </span>
              <span v-if="item.withStatus==1" class="green pull-right" >
              <span v-if="item.withStatus == 1" class="green pull-right">
                {{
                  item.withStatus == 1
                    ? $t("hjtxcg")
@@ -78,7 +78,7 @@
                <span class="col-xs-6">
                  {{ $t("hj44") }}:
                  <b class="space">
                    {{ $USD }} {{ item.withFee | _toLocaleString }}
                    {{ item.withFee | _toLocaleString }}
                  </b>
                </span>
                <!-- <span class="col-xs-6">实际到账金额:<b class="space" style="font-size:0.26rem">{{item.withAmt - item.withFee}}</b>元</span>                         -->
@@ -112,7 +112,9 @@
              <p class="clearfix">
                <span class="secondary col-xs-6"
                  >{{ $t("sj") }}:
                  <b v-if="item.applyTime">{{ $moment(item.applyTime).format("DD-MM-YYYY hh:mm:ss A") }}</b>
                  <b v-if="item.applyTime">{{
                    $moment(item.applyTime).format("DD-MM-YYYY hh:mm:ss A")
                  }}</b>
                  <b v-else></b>
                </span>
              </p>
@@ -160,7 +162,7 @@
      loading: false,
      list: [],
      pageNum: 1,
      pageSize: 15,
      pageSize: 15
    };
  },
  watch: {},
@@ -174,11 +176,11 @@
      let opt = {
        withStatus: "", // 提现状态 0已提交,1转账成功,2转账失败
        pageNum: this.pageNum,
        pageSize: 15,
        pageSize: 15
      };
      let data = await api.withdrawList(opt);
      if (data.status === 0) {
        data.data.list.forEach((element) => {
        data.data.list.forEach(element => {
          this.list.push(element);
        });
      } else {
@@ -199,7 +201,7 @@
      // 取消提现
      // MessageBox.confirm('您确定要平仓吗?').then(async action => {
      let opt = {
        withId: val,
        withId: val
      };
      let data = await api.canceloutMoney(opt);
      if (data.status === 0) {
@@ -210,8 +212,8 @@
        Toast(data.msg);
      }
      // });
    },
  },
    }
  }
};
</script>
<style lang="less" scoped>
src/page/user/loanRecord.vue
@@ -6,7 +6,7 @@
        <van-tab :title="$t('hj160')" name=""></van-tab>
        <van-tab :title="$t('sqz')" name="0"></van-tab>
        <van-tab :title="$t('sptg')" name="1"></van-tab>
        <van-tab :title="$t('审核拒绝')" name="2"></van-tab>
        <van-tab :title="$t('sqsb')" name="2"></van-tab>
      </van-tabs>
    </div>
src/page/user/recharge-sure.vue
@@ -64,7 +64,7 @@
        <input type="number" :value="value" @input="inputValue" />
        <span
          class="myr"
          @click="value = Math.floor(availableBalanceUSD * 100) / 100"
          @click="value = Math.floor(availableBalance * 100) / 100"
          >{{ $t("最大") }}</span
        >
      </div>
src/router/index.js
@@ -124,7 +124,7 @@
      path: "/aiTrading",
      name: "aiTrading",
      meta: {
        title: "AI" + i18n.t("量化交易"),
        title: i18n.t("量化交易"),
        requireAuth: true,
        show: true,
        index: 1