From 35ba5f69dc6f207e73c99af9c46e0820a7388852 Mon Sep 17 00:00:00 2001
From: PC-20250623MANY\Administrator <344137771@qq.com>
Date: Sat, 26 Jul 2025 17:49:17 +0800
Subject: [PATCH] 1

---
 src/locales/es.json                     |  655 ++++++++++++++++++++++++++++++++++++
 src/locales/en.json                     |    4 
 src/locales/index.js                    |    6 
 src/page/markets/markets.vue            |   22 
 src/page/list/tradingList/data.list.vue |    2 
 src/page/kline/index.vue                |  174 ++++-----
 src/axios/api.url.js                    |    3 
 src/page/home/homeIndex.vue             |   24 
 src/page/kline/components/kLine.vue     |   80 +---
 src/components/stock-list.vue           |   73 ++-
 src/page/kline/kIndex.vue               |    2 
 src/components/Language/index.vue       |   11 
 12 files changed, 835 insertions(+), 221 deletions(-)

diff --git a/src/axios/api.url.js b/src/axios/api.url.js
index 84f1a5b..b2f6fde 100644
--- a/src/axios/api.url.js
+++ b/src/axios/api.url.js
@@ -13,7 +13,8 @@
   // baseURL: "https://stockapi.yanshiz.com/",
   // 本地
   baseURL:
-    process.env.NODE_ENV == "development" ? "http://192.168.10.5:8091/" : "https://api.kuspitai.com/",
+    // process.env.NODE_ENV == "development" ? "http://192.168.10.5:8091/" : "https://api.kuspitai.com/",
+    process.env.NODE_ENV == "development" ? "https://api.kuspitai.com/" : "https://api.kuspitai.com/",
   util: {
     image: "/util/image.html" // 图片上传
   }
diff --git a/src/components/Language/index.vue b/src/components/Language/index.vue
index 304a3f1..340d1be 100644
--- a/src/components/Language/index.vue
+++ b/src/components/Language/index.vue
@@ -39,11 +39,12 @@
           text: "English",
           lang: "en",
         },
-        {
-          text: "简体中文",
-          lang: "zh-CN",
-        },
-        { text: "हिंदी", lang: "hi" },
+        // {
+        //   text: "简体中文",
+        //   lang: "zh-CN",
+        // },
+        // { text: "हिंदी", lang: "hi" },
+        { text: "español", lang: "es" },
         // {
         //   text: "Deutsch",
         //   lang: "de",
diff --git a/src/components/stock-list.vue b/src/components/stock-list.vue
index a2b8ad3..03e8878 100644
--- a/src/components/stock-list.vue
+++ b/src/components/stock-list.vue
@@ -6,12 +6,7 @@
       <van-col span="8" class="flex-end head_item">{{ $t("Change") }}</van-col>
     </van-row>
 
-    <van-row
-      class="markets_item"
-      v-for="item in stockList"
-      :key="item.id"
-      @click="toDetails(item)"
-    >
+    <van-row class="markets_item" v-for="item in stockList" :key="item.id" @click="toDetails(item)">
       <van-col span="12" class="item_n">
         <div class="flex-start">
           <span class="i_icon">{{ item.stock_type }}</span>
@@ -22,43 +17,25 @@
       <van-col span="4" class="flex-start item_n">{{ item.nowPrice }}</van-col>
 
       <van-col span="8" class="item_n">
-        <div
-          class="flex-end"
-          style="margin-bottom: .15em;"
-          :class="{ red: item.hcrate < 0, green: item.hcrate > 0 }"
-        >
+        <div class="flex-end" style="margin-bottom: .15em;" :class="{ red: item.hcrate < 0, green: item.hcrate > 0 }">
           {{ item.hcrate }}
         </div>
-        <div
-          class="flex-end"
-          :class="{ red: item.hcrate < 0, green: item.hcrate > 0 }"
-        >
+        <div class="flex-end" :class="{ red: item.hcrate < 0, green: item.hcrate > 0 }">
           {{ item.hcrateP }}
         </div>
       </van-col>
 
-      <div
-        class="edit flex-end"
-        v-show="editorShow"
-        @click.stop="deleteStock(item)"
-      >
+      <div class="edit flex-end" v-show="editorShow" @click.stop="deleteStock(item)">
         <span>{{ $t("移除") }}</span>
       </div>
     </van-row>
 
     <!-- 无数据时显示 -->
-    <div
-      class="no_data flex-center"
-      v-show="!stockList || stockList.length == 0"
-    >
+    <div class="no_data flex-center" v-show="!stockList || stockList.length == 0">
       <img src="@/assets/img/zhaobudao2.png" alt="" />
     </div>
 
-    <n-pagination
-      :pageNo.sync="pageNum"
-      :pageSize="pageSize"
-      :total="total"
-    ></n-pagination>
+    <n-pagination :pageNo.sync="pageNum" :pageSize="pageSize" :total="total"></n-pagination>
   </div>
 </template>
 
@@ -66,6 +43,7 @@
 import nPagination from "@/components/nPagination.vue";
 import * as api from "@/axios/api";
 import { Toast } from "vant";
+import { WhrWebSocket } from "@/utils/WhrWebSocket";
 export default {
   name: "stock_list",
   components: {
@@ -113,6 +91,7 @@
   },
   mounted() {
     this.getStockList();
+    this.initWebSocket();
   },
   methods: {
     // 获取数据
@@ -161,8 +140,34 @@
       } else {
         Toast.fail(data.msg);
       }
+    },
+    // 连接ws实时监控变动
+    initWebSocket() {
+      console.log("initWebSocket");
+      this.Trade = new WhrWebSocket({
+        path: `wss://ws.kuspitai.com/websocket-server `,
+        onmessage: this.getTradeMessage,
+      });
+
+      this.Trade.init();
+    },
+    getTradeMessage({ data }) {
+      let result = JSON.parse(data);
+      let pid = result.pid;
+      let userToUpdate = this.stockList.find((item) => item.code == pid);
+      if (userToUpdate) {
+        // 更新对象数据
+        userToUpdate.nowPrice = result.last;
+        userToUpdate.hcrateP = result.pcp;
+      }
+    },
+  },
+  beforeDestroy() {
+    if (this.Trade) {
+      this.Trade.close();
+      console.log('WebSocket disconnected');
     }
-  }
+  },
 };
 </script>
 
@@ -227,11 +232,9 @@
       position: absolute;
       top: 0;
       left: 0;
-      background: linear-gradient(
-        to right,
-        rgba(0, 0, 0, 0),
-        rgba(0, 0, 0, 0.8)
-      );
+      background: linear-gradient(to right,
+          rgba(0, 0, 0, 0),
+          rgba(0, 0, 0, 0.8));
       text-align: end;
       color: @red;
       padding-right: 0.25em;
diff --git a/src/locales/en.json b/src/locales/en.json
index 2eab1cd..decf00c 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -213,8 +213,8 @@
   "hj81": "Price",
   "hj82": "Trading volume",
   "hj83": "Introduction",
-  "hj84": "Buy short",
-  "hj85": "Buy long",
+  "hj84": "Sell",
+  "hj85": "Buy",
   "hj86": "Time sharing",
   "hj87": "Day",
   "hj88": "Week",
diff --git a/src/locales/es.json b/src/locales/es.json
new file mode 100644
index 0000000..defe275
--- /dev/null
+++ b/src/locales/es.json
@@ -0,0 +1,655 @@
+{
+  "已上市": "Listada",
+  "秘钥": "Clave",
+  "描述": "Descripción",
+  "操作时间": "Hora de Operación",
+  "请输入电子邮箱": "Ingrese su correo electrónico",
+  "银行卡户主名称": "Nombre del Titular de la Tarjeta",
+  "请输入银行卡户主名称": "Ingrese el nombre del titular de la tarjeta",
+  "tips_sb": "Si tiene problemas, contáctenos por Telegram",
+  "top_s": "Si tiene alguna pregunta, contáctenos por correo electrónico",
+  "zc": "Soporte",
+  "wmdfw": "Nuestros Servicios",
+  "fxkz": "Control de Riesgos",
+  "yszc": "Política de Privacidad",
+  "zgzs": "Certificados",
+  "ysmrz": "Verificación de Identidad Completada",
+  "订单号": "Número de Orden",
+  "时间": "Hora",
+  "dlan": "Iniciar Sesión",
+  "申请杠杠成功,请联系客服!": "¡Solicitud de apalancamiento exitosa! Por favor, contacte al servicio al cliente.",
+  "dltips": "Inicie sesión para operar en modo real/simulado",
+  "usertop": "Activos Totales de la Cuenta (USD)",
+  "pcje": "Monto de Liquidación",
+  "gbsj": "Hora de Cierre",
+  "kpsj": "Hora de Apertura",
+  "gmsj": "Tiempo de Mantenimiento de la Posición",
+  "shou": "Posición (Acciones)",
+  "whpb": "Monto de la Orden (INR)",
+  "ldgl": "Precio de Toma de Ganancias/Stop Loss (INR)",
+  "ssdd": "Precio de Posición/Precio Actual (INR)",
+  "yy": "Idioma",
+  "tolaszasdf": "Comisión Total (USD)",
+  "accumbn": "Ganancias/Pérdidas Acumuladas (USD)",
+  "djzjmg": "Activos Congelados (USD)",
+  "uszzcaa": "Activos Totales en Acciones de EE.UU. (USD)",
+  "uszzc": "Activos Disponibles (USD)",
+  "ysa": "Comisión Total (INR)",
+  "aym": "Ganancias/Pérdidas Acumuladas (INR)",
+  "disana": "Activos Congelados (INR)",
+  "disan": "Activos Disponibles (INR)",
+  "setting": "Configuración",
+  "caidan": "Calificaciones",
+  "bz": "Ayuda",
+  "kf": "Servicio al Cliente",
+  "hometips": "Activos Totales",
+  "uszh2": "Acciones de EE.UU. Congeladas (USD)",
+  "uszh1": "Acciones de EE.UU. Disponibles (USD)",
+  "uszh": "Cuenta de Acciones de EE.UU.",
+  "kygp": "Acciones Indias Disponibles (INR)",
+  "djgp": "Acciones Indias Congeladas (INR)",
+  "hhaa": "Cuenta de Acciones de EE.UU.",
+  "hhhh": "Cuenta de Acciones de India",
+  "btn3": "Transferir",
+  "btn2": "Retirar",
+  "btn1": "Recargar",
+  "titxt": "Activos Totales en Acciones de EE.UU. (USD)",
+  "titxta": "Activos Totales en Acciones de India (INR)",
+  "gball": "Cerrar Todas las Posiciones",
+  "nwetitle": "Operar",
+  "nwetitlea": "Historial",
+  "ihj49": "Activos Totales India",
+  "uhj49": "Activos Totales EE.UU.",
+  "mggs": "Mercado de EE.UU.",
+  "ydgs": "Mercado de India",
+  "TOPA": "Ganadores",
+  "TOPB": "Perdedores",
+  "TOPC": "Volumen",
+  "qrzr": "Confirmar transferencia a cuenta USD",
+  "qrzra": "Confirmar transferencia a cuenta INR",
+  "zjhza": "USD a INR",
+  "zjhz": "INR a USD",
+  "qhmg": "Cambiar a cuenta EE.UU.",
+  "qhlb": "Cambiar a cuenta INR",
+  "yg": "Acciones Indias",
+  "hjtxcg": "Retiro Exitoso",
+  "hjtxsb": "Retiro Fallido",
+  "hjddqx": "Orden Cancelada",
+  "hjshz": "En Revisión",
+  "hjtxyhk": "Retirar a Tarjeta Bancaria",
+  "hjqxyy": "Razón de Cancelación",
+  "hjkh": "Número de Tarjeta",
+  "hjqxtx": "Cancelar Retiro",
+  "regJg": "Seleccione una institución primero",
+  "regPhone": "Ingrese un número de teléfono válido",
+  "regPhone2": "Ingrese su número de teléfono",
+  "regpInt": "Ingrese un número entero",
+  "MingCheng": "Nombre",
+  "hj1": "Mercado",
+  "yeb": "Fondos",
+  "yebjl": "Historial de Fondos",
+  "subdk": "Solicitar Préstamo",
+  "subdka": "Retirar",
+  "dkjl": "Historial de Préstamos",
+  "gm": "Comprar",
+  "jl": "Historial",
+  "ky": "Disponible",
+  "ye": "Saldo",
+  "sl": "Cantidad",
+  "qx": "Cancelar",
+  "qr": "Confirmar",
+  "ll": "Tasa de Interés",
+  "sxcg": "Actualización Exitosa",
+  "zwsj": "Sin datos por ahora",
+  "syl": "Tasa de Rendimiento",
+  "yuan": "Yuan",
+  "je": "Monto",
+  "sj": "Hora",
+  "js": "Liquidar",
+  "jssj": "Hora de Liquidación",
+  "wjs": "No Liquidado",
+  "yjs": "Liquidado",
+  "wei": "No",
+  "yi": "Sí",
+  "sqz": "En Solicitud",
+  "sptg": "Aprobado",
+  "shjj": "Rechazado",
+  "dkffcg": "Desembolso de Préstamo Exitoso",
+  "dkjg": "Institución Crediticia",
+  "dkje": "Monto del Préstamo",
+  "dkrdh": "Teléfono del Prestatario",
+  "shje": "Monto Revisado",
+  "dksj": "Hora del Préstamo",
+  "yj": "Comentario",
+  "xzjg": "Seleccionar Institución",
+  "sqje": "Monto Solicitado",
+  "lxhm": "Número de Contacto",
+  "sq": "Solicitar",
+  "yhdk": "Préstamo Bancario",
+  "xykdk": "Financiamiento con Tarjeta de Crédito",
+  "zqfx": "Emisión de Bonos",
+  "gdmz": "Financiamiento de Accionistas",
+  "jgxz": "Selección de Institución",
+  "hj2": "Posiciones",
+  "hj3": "Nuevas Emisiones",
+  "hj4": "Mío",
+  "hj5": "Más Seguidos",
+  "hj6": "Noticias",
+  "hj7": "Economía",
+  "hj8": "Iniciar Sesión con Teléfono",
+  "hj9": "Ingrese su número de teléfono",
+  "hj10": "Contraseña de Inicio de Sesión",
+  "hj11": "Inicio de Sesión Seguro",
+  "hj12": "¿Olvidó su contraseña?",
+  "hj13": "Otras formas de inicio de sesión",
+  "hj14": "¿No tiene cuenta?",
+  "hj15": "Registrarse",
+  "hj16": "Correo Electrónico",
+  "hj17": "Este servicio no está disponible en su región",
+  "hj18": "Registro con Teléfono",
+  "hj19": "Contraseña de 6-12 dígitos, letras o símbolos",
+  "hj20": "Confirme la contraseña",
+  "hj21": "Código de Invitación",
+  "hj22": "Registro Seguro",
+  "hj23": "¿Ya tiene cuenta?",
+  "hj24": "Iniciar Sesión",
+  "hj25": "Código de Verificación",
+  "hj26": "Registro con Número de Teléfono",
+  "hj27": "Número de Teléfono",
+  "hj28": "Ingrese un número de teléfono válido",
+  "hj29": "El número de teléfono no puede estar vacío",
+  "hj30": "Ingrese la contraseña",
+  "hj31": "Confirme la contraseña",
+  "hj32": "Las contraseñas no coinciden",
+  "hj33": "Ingrese el código de invitación",
+  "hj34": "Registro exitoso, inicie sesión",
+  "hj35": "Usuario ya registrado, inicie sesión",
+  "hj36": "Inicio de sesión exitoso",
+  "hj37": "Buscar por nombre/código de acción",
+  "hj38": "Abra una cuenta para depositar y operar",
+  "hj39": "Nombre",
+  "hj40": "Último Precio",
+  "hj41": "Cambio %",
+  "hj42": "Tipo de Suscripción",
+  "hj43": "No hay más datos",
+  "hj430": "Cargando...",
+  "hj44": "Comisión",
+  "hj45": "Suscripción a Nuevas Emisiones",
+  "新股配售": "Colocación de Nuevas Emisiones",
+  "hj46": "Colocación Privada",
+  "hj47": "Saldo",
+  "hj48": "Saldo Disponible",
+  "hj49": "Activos Totales",
+  "hj50": "Línea de Liquidación Forzosa",
+  "hj51": "Índices",
+  "hj52": "Acciones",
+  "hj53": "Activos",
+  "hj54": "Fondos Disponibles",
+  "hj55": "Margen Congelado",
+  "hj56": "Ganancias/Pérdidas Totales en Posiciones",
+  "hj57": "Cantidad Suscrita",
+  "hj58": "Suscribir Ahora",
+  "hj59": "Hora de Suscripción",
+  "hj70": "Suscripción Exitosa",
+  "配售数量": "Cantidad de Colocación",
+  "立即配售": "Colocar Ahora",
+  "配售时间": "Hora de Colocación",
+  "配售成功": "Colocación Exitosa",
+  "hj60": "Hora de Pago",
+  "hj61": "Favoritos",
+  "hj62": "Mercado",
+  "hj63": "SH/SZ/BJ",
+  "hj64": "STAR",
+  "hj65": "EE.UU.",
+  "hj66": "HK",
+  "hj67": "La cantidad no puede estar vacía",
+  "hj68": "La cantidad no puede ser menor a 1",
+  "hj69": "La cantidad no puede exceder",
+  "hj71": "¡Los índices no pueden agregarse a favoritos!",
+  "hj72": "Apertura",
+  "hj73": "Máximo",
+  "hj74": "Cierre Anterior",
+  "hj75": "Mínimo",
+  "hj76": "5 Niveles",
+  "hj77": "Compra",
+  "hj78": "Venta",
+  "hj79": "Transacciones en Tiempo Real",
+  "hj80": "Hora",
+  "hj81": "Precio",
+  "hj82": "Volumen",
+  "hj83": "Resumen",
+  "hj84": "Vender",
+  "hj85": "Comprar",
+  "hj86": "Tiempo Real",
+  "hj87": "Día",
+  "天": "Día",
+  "hj88": "Semana",
+  "hj89": "Mes",
+  "hj90": "1 Min",
+  "hj91": "5 Min",
+  "hj92": "30 Min",
+  "hj93": "Sin Ajustar",
+  "hj94": "Ajustado (Antes)",
+  "hj95": "Ajustado (Después)",
+  "hj96": "Agregado a Favoritos",
+  "hj97": "Eliminado de Favoritos",
+  "hj98": "Precio de Compra",
+  "hj99": "Comprar cuando se cumpla el precio",
+  "hj100": "Cantidad (Acciones)",
+  "hj101": "Apalancamiento",
+  "hj102": "Margen por Lote",
+  "hj103": "Saldo Disponible",
+  "hj104": "Toma de Ganancias",
+  "hj105": "Stop Loss",
+  "hj106": "Cancelar",
+  "hj107": "Seleccionar Apalancamiento",
+  "hj108": "Precio de Mercado",
+  "hj109": "Orden Pendiente",
+  "hj110": "Stop Loss Trailing",
+  "hj111": "Verifique su identidad antes de operar",
+  "hj112": "x",
+  "hj113": "Error: Fuera del horario de operación",
+  "hj114": "Cuenta SH/SZ/BJ",
+  "hj115": "Cuenta de Índices",
+  "hj116": "Cuenta de Nuevas Emisiones",
+  "hj117": "Lote",
+  "hj118": "Ganancias/Pérdidas Flotantes Netas",
+  "hj119": "Precio de Apertura",
+  "hj120": "Precio Actual",
+  "hj121": "Cerrar Posición",
+  "hj122": "Sin posiciones actualmente",
+  "hj123": "Comenzar a Operar",
+  "hj124": "Sin órdenes pendientes actualmente",
+  "hj125": "Precio de Orden Pendiente",
+  "hj126": "Cancelar",
+  "hj127": "Sin historial de cierres",
+  "hj128": "Hora de Cierre",
+  "hj129": "Sin suscripciones actuales",
+  "hj130": "Precio de Suscripción",
+  "hj131": "Suscrito",
+  "hj132": "No Asignado",
+  "hj133": "Asignado",
+  "hj134": "Pagado",
+  "hj135": "Transferido a Posición",
+  "hj136": "Posición Cerrada",
+  "hj137": "Orden cancelada exitosamente",
+  "hj138": "Verifique su identidad antes de operar",
+  "hj139": "¿Confirmar cierre de posición?",
+  "hj140": "Error: Fuera del horario de operación",
+  "hj141": "Tasa de Ganancia/Pérdida",
+  "hj142": "Cambiar a Cuenta de Índices",
+  "hj143": "Cambiar a Cuenta SH/SZ/BJ",
+  "hj144": "Cambiar Contraseña",
+  "hj145": "Transferencia de Fondos",
+  "hj146": "Verificar",
+  "hj1461": "Descargar App",
+  "hj147": "Vincular Tarjeta Bancaria",
+  "hj148": "Cerrar Sesión",
+  "hj149": "¿Confirmar cierre de sesión?",
+  "hj150": "Contraseña Anterior",
+  "hj151": "Nueva Contraseña",
+  "hj152": "Confirmar Nueva Contraseña",
+  "hj153": "Confirmar Cambio",
+  "hj154": "Ingrese las contraseñas antigua y nueva",
+  "hj155": "Las nuevas contraseñas no coinciden",
+  "hj156": "Cuenta SH/SZ/BJ",
+  "hj157": "Transferencia entre Cuentas",
+  "hj158": "Monto Retirable",
+  "hj159": "Monto a Retirar",
+  "hj160": "Todo",
+  "hj161": "Confirmar",
+  "hj162": "Historial de Retiros",
+  "hj162e": "Sin información de retiros",
+  "hj163": "Nombre del Beneficiario",
+  "hj164": "Copiar",
+  "hj165": "Nota",
+  "hj166": "Banco del Beneficiario",
+  "hj167": "Cuenta del Beneficiario",
+  "hj168": "Historial de Recargas",
+  "hj169": "Ver",
+  "hj170": "Monto de Recarga",
+  "hj170a": "Método de Recarga",
+  "hj171a": "Seleccione método de recarga",
+  "hj171": "Ingrese el monto de recarga",
+  "hj172": "Recargar",
+  "hj173": "Proceso de Operación",
+  "hj174": "Haga clic en 'Copiar' para copiar la información",
+  "hj175": "Copiado. Abra su banca móvil para transferir",
+  "hj176": "Para asegurar la acreditación, verifique que el monto transferido coincida con el solicitado",
+  "hj177": "Retirar",
+  "hj178": "Complete la verificación de identidad primero",
+  "hj179": "Vincule una tarjeta bancaria primero",
+  "hj180": "Ingrese un monto de retiro válido",
+  "hj181": "El monto de retiro no puede ser menor a",
+  "hj182": "Solicitud exitosa, en revisión",
+  "hj183": "Error en retiro, reintente o contacte al administrador",
+  "hj184": "Menor que el mínimo de recarga",
+  "hj185": "Copiado",
+  "hj186": "Error al copiar, reintente",
+  "hj187": "Transferencia de Fondos",
+  "hj188": "Financiamiento a Índices",
+  "hj189": "Índices a Financiamiento",
+  "hj190": "Monto Transferible",
+  "hj191": "Monto a Transferir",
+  "hj192": "Ingrese el monto a transferir",
+  "hj193": "Confirmar transferencia a cuenta de índices",
+  "hj194": "Confirmar transferencia a cuenta de financiamiento",
+  "hj195": "Nombre Real",
+  "hj196": "Número de Identificación",
+  "hj197": "Frente de Identificación",
+  "hj198": "Subiendo...",
+  "hj199": "Reverso de Identificación",
+  "hj200": "Verificación fallida, reintente",
+  "hj201": "Razón del Fallo",
+  "hj202": "En Revisión",
+  "hj203": "Verificar",
+  "hj204": "No Verificado",
+  "hj205": "¡La imagen no puede exceder 10MB!",
+  "hj206": "Imagen demasiado grande, seleccione una menor a 20MB",
+  "hj207": "Ingrese su nombre real",
+  "hj208": "Ingrese un número de identificación válido",
+  "hj209": "Suba las fotos de su identificación",
+  "hj210": "¡Enviado exitosamente!",
+  "hj211": "Vincular Tarjeta Bancaria",
+  "hj212": "Información de la Tarjeta",
+  "hj213": "Nombre del Banco",
+  "hj214": "Sucursal",
+  "hj215": "Número de Tarjeta",
+  "hj216": "Confirmar Vinculación",
+  "hj217": "Ingrese el número de tarjeta",
+  "hj218": "Ingrese el nombre del banco",
+  "hj219": "Ingrese la sucursal",
+  "hj220": "¡Agregado exitosamente!",
+  "hj221": "Bienvenido de vuelta",
+  "hj222": "Iniciar Sesión con Teléfono",
+  "hj223": "¿No tiene cuenta? ¡Regístrese!",
+  "hj224": "Inicio",
+  "hj225": "Operar",
+  "hj226": "Posiciones",
+  "hj227": "Perfil",
+  "hj228": "Sin información de recargas",
+  "hj229": "Alipay",
+  "hj230": "Transferencia Corporativa",
+  "hj231": "Recarga Exitosa",
+  "hj232": "Recarga Fallida",
+  "审核中": "Cancelar Recarga",
+  "hj234": "Número de Orden",
+  "hj235": "Cargando...",
+  "hj236": "Todos los datos cargados",
+  "hj237": "Comprar",
+  "hj238": "Detalles",
+  "hj239": "Detalles del Anuncio",
+  "hj240": "Olvidé mi Contraseña",
+  "hj241": "Abrir Cuenta",
+  "hj242": "Mercado",
+  "hj243": "Centro Personal",
+  "hj244": "Monedero",
+  "hj245": "Transferir",
+  "hj246": "Verificación",
+  "hj247": "Tarjeta Bancaria",
+  "hj248": "Inicio de Sesión",
+  "hj249": "Registro",
+  "hj250": "Pagar",
+  "hj251": "¿Confirmar pago?",
+  "hj252": "Este sitio es de prueba técnica, no ofrece servicios reales",
+  "hj253": "Cantidad Asignada",
+  "hj254": "Ejecutado",
+  "hj255": "No Ejecutado",
+  "hj256": "Recargar",
+  "hj257": "Historial de Operaciones",
+  "hj258": "SZ",
+  "hj259": "SH",
+  "hj260": "BJ",
+  "hj261": "Información Privilegiada",
+  "hj300": "Información Privilegiada",
+  "hj262": "Ingrese la cantidad",
+  "hj263": "Monto de Compra",
+  "hj264": "Ingrese la clave",
+  "hj265": "Compra Exitosa",
+  "hj266": "Clave VIP para Ofertas",
+  "hj267": "Confirmar",
+  "hj268": "Historial de Información Privilegiada",
+  "hj269": "Precio de Compra",
+  "hj270": "Cantidad Comprada",
+  "hj271": "Precio Unitario de Compra",
+  "hj272": "Orden de Compra",
+  "hj273": "Hora de Compra",
+  "hj274": "Acción",
+  "hj275": "Seleccione el apalancamiento",
+  "hj276": "Orden colocada exitosamente",
+  "hj277": "La cantidad no puede ser menor a",
+  "hj278": "La cantidad no puede exceder",
+  "hj279": "Ofertas VIP",
+  "hj280": "Límite Disponible",
+  "hj281": "Seleccionar Multiplicador de Apalancamiento",
+  "hj303": "IFSC",
+  "hj304": "UPI",
+  "hj305": "Ingrese monto a retirar",
+  "hj306": "Ingrese nombre del banco",
+  "hj307": "Ingrese número de tarjeta",
+  "hj308": "Ingrese IFSC del banco",
+  "hj309": "Ingrese UPI del banco",
+  "hj313": "Acción",
+  "hj314": "Último Precio",
+  "hj315": "% Cambio",
+  "US": "Cuenta EE.UU.",
+  "IN": "Cuenta India",
+  "MAS": "Cuenta Malasia",
+  "提款": "Retirar",
+  "安全": "Seguridad",
+  "用戶手冊": "Manual del Usuario",
+  "平臺": "Plataforma",
+  "申購記錄": "Historial de Suscripciones",
+  "資訊": "Información",
+  "数字货币": "Moneda Digital",
+  "马股": "Malasia",
+  "美股": "EE.UU.",
+  "名稱": "Nombre",
+  "最大購買": "Compra Máxima",
+  "單筆價格": "Precio Unitario",
+  "马来西亚": "Malasia",
+  "全部平仓": "Cerrar Todas las Posiciones",
+  "浮動盈虧": "Ganancias/Pérdidas Flotantes",
+  "可用資產": "Activos Disponibles",
+  "累計盈虧": "Ganancias/Pérdidas Acumuladas",
+  "凍結資產": "Activos Congelados",
+  "總手續費": "Comisiones Totales",
+  "盈虧": "Ganancias/Pérdidas",
+  "持倉價": "Precio de Posición",
+  "訂單金額": "Monto de la Orden",
+  "開倉手續費": "Comisión de Apertura",
+  "止損價": "Precio de Stop Loss",
+  "止盈價": "Precio de Toma de Ganancias",
+  "持倉時間": "Tiempo de Posición",
+  "訂單編號": "Número de Orden",
+  "美股總資產": "Activos Totales EE.UU.",
+  "印股總資產": "Activos Totales India",
+  "馬股總資產": "Activos Totales Malasia",
+  "平仓": "Cerrar Posición",
+  "确认平仓": "Confirmar Cierre de Posición",
+  "市價": "Precio de Mercado",
+  "賬戶總資產": "Activos Totales de la Cuenta",
+  "類型": "Tipo",
+  "總浮動盈虧": "Ganancias/Pérdidas Flotantes Totales",
+  "美股資產": "Activos EE.UU.",
+  "美股总资产": "Activos Totales EE.UU.",
+  "印股总资产": "Activos Totales India",
+  "馬股总资产": "Activos Totales Malasia",
+  "美股可用": "Disponible EE.UU.",
+  "美股冻结": "Congelado EE.UU.",
+  "印股資產": "Activos India",
+  "印股可用": "Disponible India",
+  "馬股資產": "Activos Malasia",
+  "馬股可用": "Disponible Malasia",
+  "馬股冻结": "Congelado Malasia",
+  "請選擇": "Seleccione",
+  "轉換得到金額": "Monto Recibido",
+  "輸入金額": "Ingrese Monto",
+  "劃轉": "Transferir",
+  "平倉": "Cerrar Posición",
+  "持倉": "Posiciones",
+  "最大": "Máximo",
+  "可用餘額": "Saldo Disponible",
+  "確認劃轉": "Confirmar Transferencia",
+  "划转成功": "Transferencia Exitosa",
+  "提款成功,等待审核": "Retiro exitoso, en revisión",
+  "不能选择一样的": "No se puede seleccionar lo mismo",
+  "總資產": "Activos Totales",
+  "請選擇提款账户": "Seleccione cuenta de retiro",
+  "請選擇銀行卡": "Seleccione tarjeta bancaria",
+  "請選擇充值金額": "Seleccione monto de recarga",
+  "買漲/買跌": "Comprar Alcista/Bajista",
+  "倉位(股)": "Posición (Acciones)",
+  "您確定一鍵平倉所有訂單嗎?": "¿Confirmar cerrar todas las órdenes?",
+  "打新日曆": "Calendario de OPVs",
+  "立即登录": "Iniciar Sesión Ahora",
+  "記住帳戶密碼": "Recordar usuario y contraseña",
+  "還沒賬號?": "¿No tiene cuenta?",
+  "已有賬號?": "¿Ya tiene cuenta?",
+  "免費註冊": "Registro Gratuito",
+  "馬上登錄": "Iniciar Sesión Ahora",
+  "我已閱讀並同意": "He leído y acepto",
+  "《用戶服務協議》": "Acuerdo de Servicio",
+  "立即注册": "Registrarse Ahora",
+  "新股记录": "Historial de Nuevas Emisiones",
+  "登錄賬號": "Iniciar Sesión",
+  "买跌": "Comprar Bajista (Vender)",
+  "买涨": "Comprar Alcista (Comprar)",
+  "韩国股市": "Corea",
+  "韩股总资产": "Activos Totales Corea",
+  "韩股資產": "Activos Corea",
+  "韩股可用": "Disponible Corea",
+  "韩股冻结": "Congelado Corea",
+  "支持得支付渠道": "Canales de Pago Soportados",
+  "充值中心": "Centro de Recargas",
+  "最小充值金額": "Mínimo de Recarga",
+  "收款卡號": "Número de Cuenta Destino",
+  "收款銀行": "Banco Destino",
+  "收款人名字": "Nombre del Beneficiario",
+  "請選擇充值賬戶": "Seleccione cuenta de recarga",
+  "上傳憑證": "Subir Comprobante",
+  "HG": "Cuenta Corea",
+  "支持得提款渠道": "Canales de Retiro Soportados",
+  "銀行卡充值": "Recarga con Tarjeta",
+  "韩股總資產": "Activos Totales Corea",
+  "上傳憑證:": "Subir Comprobante:",
+  "从": "De",
+  "到": "A",
+  "密码修改成功": "Contraseña cambiada exitosamente",
+  "劃轉记录": "Historial de Transferencias",
+  "馬股账户": "Cuenta Malasia",
+  "美股账户": "Cuenta EE.UU.",
+  "美国新闻": "Noticias EE.UU.",
+  "马来西亚新闻": "Noticias Malasia",
+  "Search": "Buscar",
+  "港股": "Hong Kong",
+  "港股总资产": "Activos Totales HK",
+  "HK": "Cuenta HK",
+  "港股资产": "Activos HK",
+  "港股可用": "Disponible HK",
+  "港股冻结": "Congelado HK",
+  "订单详情": "Detalles de la Orden",
+  "港股總資產": "Activos Totales HK",
+  "一鍵平倉": "Cerrar Todas",
+  "印股": "India",
+  "印股冻结": "Congelado India",
+  "印度新闻": "Noticias India",
+  "上市时间": "Fecha de Listado",
+  "提示": "Nota",
+  "是否认缴": "¿Pagar?",
+  "确定": "Aceptar",
+  "取消": "Cancelar",
+  "确认": "Confirmar",
+  "申请杠杠": "Solicitar Apalancamiento",
+  "认购成功": "Suscripción Exitosa",
+  "待补金额": "Monto Pendiente",
+  "待上市": "Próximo a Listar",
+  "交易总额": "Volumen Total de Operaciones",
+  "申购开启时间": "Hora de Apertura de Suscripción",
+  "配售开启时间": "Hora de Apertura de Colocación",
+  "申购结束时间": "Hora de Cierre de Suscripción",
+  "周期": "Período",
+  "市场": "Mercado",
+  "配售结束时间": "Hora de Cierre de Colocación",
+  "请选择提现金额": "Seleccione monto de retiro",
+  "关于我们": "Sobre Nosotros",
+  "贷款": "Préstamo",
+  "hj621": "Operaciones por Bloque",
+  "电话号码": "Número de Teléfono",
+  "当前充值渠道已关闭请选择在线客服进行充值。": "Canal de recarga cerrado, contacte servicio al cliente.",
+  "删除": "Eliminar",
+  "快捷方式": "Accesos Rápidos",
+  "量化交易": "Trading Cuantitativo",
+  "理财基金": "Fondos de Inversión",
+  "美股指数": "Índices EE.UU.",
+  "墨西哥指数": "Índices México",
+  "更多新闻": "Más Noticias",
+  "美国": "EE.UU.",
+  "墨西哥": "México",
+  "Name": "Nombre",
+  "Price": "Precio",
+  "Change": "Cambio",
+  "Previous": "Anterior",
+  "Next": "Siguiente",
+  "移除": "Quitar",
+  "编辑": "Editar",
+  "完成": "Listo",
+  "Worth": "Valor",
+  "Profit": "Ganancia",
+  "Cost": "Costo",
+  "Current": "Actual",
+  "Account": "Cuenta",
+  "账户变动记录": "Historial de Movimientos",
+  "持仓收益": "Rendimiento de Posición",
+  "订单": "Orden",
+  "最低认购金额": "Mínimo de Suscripción",
+  "交易成功率": "Tasa de Éxito",
+  "预期收益": "Rendimiento Esperado",
+  "交易周期": "Ciclo de Operación",
+  "AI交易订单": "Órdenes de Trading AI",
+  "申购金额": "Monto Suscrito",
+  "实际收益": "Rendimiento Real",
+  "状态": "Estado",
+  "提交时间": "Hora de Envío",
+  "申购中": "Suscribiendo",
+  "交易中": "Operando",
+  "成功": "Exitoso",
+  "失败": "Fallido",
+  "输入编码搜索": "Buscar por código",
+  "大宗交易订单": "Órdenes por Bloque",
+  "待成交": "Pendiente de Ejecución",
+  "已取消": "Cancelada",
+  "总金额": "Monto Total",
+  "待认缴": "Pendiente de Pago",
+  "待转股": "Pendiente de Conversión",
+  "已转股": "Convertido",
+  "未中标": "No Adjudicado",
+  "发行时间": "Fecha de Emisión",
+  "可申购数量": "Cantidad Suscribible",
+  "申购": "Suscripción",
+  "市场价": "Precio de Mercado",
+  "最小购买数量": "Cantidad Mínima de Compra",
+  "请输入": "Ingrese",
+  "低于最小申购金额": "Por debajo del mínimo de suscripción",
+  "投资周期": "Período de Inversión",
+  "投资金额": "Monto de Inversión",
+  "基金订单": "Órdenes de Fondos",
+  "进行中": "En Proceso",
+  "已赎回": "Rescatado",
+  "赎回时间": "Hora de Rescate",
+  "总赎回金额": "Monto Total de Rescate",
+  "购买密码": "Clave de Compra",
+  "最小购买": "Compra Mínima",
+  "操作确认": "Confirmación de Operación",
+  "相关股票": "Acciones Relacionadas",
+  "我的贷款": "Mis Préstamos",
+  "待还款金额": "Monto Pendiente",
+  "信用分": "Puntuación de Crédito",
+  "剩余贷款额度": "Límite de Préstamo Restante",
+  "贷款申请": "Solicitud de Préstamo",
+  "还款": "Pagar",
+  "确认还款吗": "¿Confirmar pago?",
+  "日内": "Intradía",
+  "建仓成本": "Costo de Apertura",
+  "已申购": "Suscrito"
+}
\ No newline at end of file
diff --git a/src/locales/index.js b/src/locales/index.js
index d7a2169..b2f776b 100644
--- a/src/locales/index.js
+++ b/src/locales/index.js
@@ -8,6 +8,7 @@
 import hy from "@/locales/kor.json";
 import de from "@/locales/de.json";
 import fra from "@/locales/fra.json";
+import es from "@/locales/es.json";
 
 Vue.use(VueI18n);
 
@@ -38,7 +39,10 @@
   },
   ko: {
     ...hy
-  }
+  },
+  es: {
+    ...es
+  },
 };
 // en-us  zh-cn
 // let langLocale = getCookie(LOCALE_KEY) || 'en';
diff --git a/src/page/home/homeIndex.vue b/src/page/home/homeIndex.vue
index 5d82c36..b793a2f 100644
--- a/src/page/home/homeIndex.vue
+++ b/src/page/home/homeIndex.vue
@@ -24,25 +24,25 @@
       <div class="swiper">
         <div class="swiper-wrapper flex-between">
           <div class="swiper-slide">
-            <div class="nav_item flex-center" @click="toPage('/aiTrading')">
+            <div class="nav_item flex-start" @click="toPage('/aiTrading')">
               <img src="../../assets/img/home_1.png" alt="" />
               <span>AI {{ $t("量化交易") }}</span>
             </div>
           </div>
           <div class="swiper-slide">
-            <div class="nav_item flex-center" @click="toPage('/blockTrading')">
+            <div class="nav_item flex-start" @click="toPage('/blockTrading')">
               <img src="../../assets/img/home_2.png" alt="" />
               <span>{{ $t("hj621") }}</span>
             </div>
           </div>
           <div class="swiper-slide">
-            <div class="nav_item flex-center" @click="toPage('/ipo')">
+            <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="nav_item flex-center" @click="toPage('/fund')">
+            <div class="nav_item flex-start" @click="toPage('/fund')">
               <img src="../../assets/img/home_4.png" alt="" />
               <span>{{ $t("理财基金") }}</span>
             </div>
@@ -120,11 +120,12 @@
           text: "English",
           lang: "en"
         },
-        {
-          text: "简体中文",
-          lang: "zh-CN"
-        },
-        { text: "हिंदी", lang: "hi" }
+        // {
+        //   text: "简体中文",
+        //   lang: "zh-CN"
+        // },
+        // { text: "हिंदी", lang: "hi" },
+        { text: "español", lang: "es" }
         // {
         //   text: "Deutsch",
         //   lang: "de",
@@ -264,8 +265,7 @@
 
         .swiper-slide {
           width: 2.1875em;
-          height: 2.1em;
-          // padding: 0 0.25em 0 0.25em;
+          height: 2.5em;
 
           .nav_item {
             background-color: #fff;
@@ -273,6 +273,7 @@
             width: 100%;
             height: 100%;
             flex-direction: column;
+            padding-top: .25em;
 
             img {
               width: 0.75em;
@@ -282,6 +283,7 @@
             span {
               font-size: 0.25em;
               font-weight: 500;
+              text-align: center;
             }
           }
         }
diff --git a/src/page/kline/components/kLine.vue b/src/page/kline/components/kLine.vue
index e2347d8..93b5b8b 100644
--- a/src/page/kline/components/kLine.vue
+++ b/src/page/kline/components/kLine.vue
@@ -6,60 +6,27 @@
           <div class="periodWrap kline_periodWrap" ref="kline_periodWrap">
             <!-- DWM 分 -->
             <div class="btnGroup" style="position: relative">
-              <div
-                class="btn2"
-                v-for="(item, index) in KLinePeriodMenu"
-                :class="{ active: KLinePeriodIndex == index }"
-                :key="item.ID"
-                @click="OnClickKLinePeriodMenu(index, item, 'kline')"
-              >
+              <div class="btn2" v-for="(item, index) in KLinePeriodMenu" :class="{ active: KLinePeriodIndex == index }"
+                :key="item.ID" @click="OnClickKLinePeriodMenu(index, item, 'kline')">
                 <span>{{ item.Name }}</span>
               </div>
 
-              <div
-                style="position: absolute; right: 0; top: 25px; z-index: 99"
-                v-if="isShow == true"
-              >
-                <div
-                  class="btnGroup"
-                  v-show="IsShowRightMenu"
-                  style="display: flex; flex-direction: column"
-                >
-                  <div
-                    class="btn"
-                    :class="{ active: KLineRightIndex == index }"
-                    v-for="(item, index) in KLineRightMenu"
-                    :key="item.ID"
-                    style="padding: 10px"
-                    @click="OnClickKLineRightMenu(index, item)"
-                  >
+              <div style="position: absolute; right: 0; top: 25px; z-index: 99" v-if="isShow == true">
+                <div class="btnGroup" v-show="IsShowRightMenu" style="display: flex; flex-direction: column">
+                  <div class="btn" :class="{ active: KLineRightIndex == index }" v-for="(item, index) in KLineRightMenu"
+                    :key="item.ID" style="padding: 10px" @click="OnClickKLineRightMenu(index, item)">
                     {{ item.Name }}
                   </div>
-                  <div
-                    class="btn"
-                    v-for="item in KLineIndexMenu"
-                    :key="item.ID"
-                    style="padding: 10px"
-                    @click="ChangeKLineIndex(item)"
-                  >
+                  <div class="btn" v-for="item in KLineIndexMenu" :key="item.ID" style="padding: 10px"
+                    @click="ChangeKLineIndex(item)">
                     {{ item.Name }}
                   </div>
                 </div>
               </div>
             </div>
           </div>
-          <div
-            class="hqchart"
-            id="hqchart_minute"
-            ref="kline"
-            v-show="chartType == 'minute'"
-          ></div>
-          <div
-            class="hqchart"
-            id="hqchart_kline"
-            ref="kline2"
-            v-show="chartType == 'kline'"
-          ></div>
+          <div class="hqchart" id="hqchart_minute" ref="kline" v-show="chartType == 'minute'"></div>
+          <div class="hqchart" id="hqchart_kline" ref="kline2" v-show="chartType == 'kline'"></div>
         </div>
       </div>
     </div>
@@ -76,12 +43,12 @@
 import EastMoney from "../../../eastmoney/HQData.js";
 import i18n from "@/locales/index.js";
 
-HQChart.Chart.MARKET_SUFFIX_NAME.GetMarketStatus = function(symbol) {
+HQChart.Chart.MARKET_SUFFIX_NAME.GetMarketStatus = function (symbol) {
   return 2;
 }; // 一直交易
-function DefaultData() {}
+function DefaultData() { }
 
-DefaultData.GetMinuteOption = function() {
+DefaultData.GetMinuteOption = function () {
   var option = {
     Type: "分钟走势图", // 创建图形类型
     // Type:'分钟走势图横屏',
@@ -91,7 +58,7 @@
       // { Index:"KDJ", Modify: false, Change: true, Close: true},
       // { Index: "KDJ", Modify: false, Change: false, Close: false }
     ],
-
+    SplashTitle: 'loading...',
     Symbol: "AAPL.usa",
     IsAutoUpdate: true, // 是自动更新数据
     AutoUpdateFrequency: 20000,
@@ -146,7 +113,7 @@
   return option;
 };
 
-DefaultData.GetMinuteIndexMenu = function() {
+DefaultData.GetMinuteIndexMenu = function () {
   var data = [
     {
       Name: "MACD",
@@ -173,7 +140,7 @@
   return data;
 };
 
-DefaultData.GetKLineIndexMenu = function() {
+DefaultData.GetKLineIndexMenu = function () {
   var data = [
     {
       Name: "MA",
@@ -210,7 +177,7 @@
   return data;
 };
 
-DefaultData.GetTestSymbolMenu = function() {
+DefaultData.GetTestSymbolMenu = function () {
   // 品种代码规则 ${东方财富品种代码}_${东方财富市场}.${HQChart内部市场后缀}
   var data = [
     {
@@ -931,7 +898,7 @@
 };
 
 // k形图
-DefaultData.GetKLineOption = function() {
+DefaultData.GetKLineOption = function () {
   var option = {
     Type: "历史K线图", // 创建图形类型
     Language: "EN", // 英文 'EN' 简体中文:'CN' 繁体中文:"TC"
@@ -952,6 +919,7 @@
       }
       // { Index: 'MACD', Modify: true, Change: true, Close: false }
     ],
+    SplashTitle: 'loading...',
     Symbol: "600015.sh",
     IsAutoUpdate: true, // 是自动更新数据
     AutoUpdateFrequency: 15000,
@@ -1027,7 +995,7 @@
   return option;
 };
 
-DefaultData.GetMinuteDayMenu = function() {
+DefaultData.GetMinuteDayMenu = function () {
   var data = [
     {
       Name: "1D",
@@ -1054,7 +1022,7 @@
   return data;
 };
 
-DefaultData.GetKLinePeriodMenu = function() {
+DefaultData.GetKLinePeriodMenu = function () {
   var data = [
     // { Name: i18n.t('hj86'), ID: 3 },分时额外处理
     // { Name: i18n.t("hj86"), ID: 4 },
@@ -1087,7 +1055,7 @@
   return data;
 };
 
-DefaultData.GetKLineRightMenu = function() {
+DefaultData.GetKLineRightMenu = function () {
   var data = [
     {
       Name: i18n.t("hj93"),
@@ -1208,7 +1176,7 @@
     var self = this;
     // 侦听元素的调整大小事件,并使用元素作为调整大小事件的参数来调用侦听器函数。传递给函数的选项将
     // 覆盖实例选项
-    erd.listenTo(this.$refs["rightContent"], function(element) {
+    erd.listenTo(this.$refs["rightContent"], function (element) {
       var width = element.offsetWidth;
       var height = element.offsetHeight;
       self.tableHeight = height - 10; // 将监听到的宽高进行赋值
@@ -1466,7 +1434,7 @@
       justify-content: center;
       // flex-direction: column;
 
-      > .btn {
+      >.btn {
         cursor: pointer;
         width: 100%;
         text-align: center;
diff --git a/src/page/kline/index.vue b/src/page/kline/index.vue
index 407ea4d..546c178 100644
--- a/src/page/kline/index.vue
+++ b/src/page/kline/index.vue
@@ -8,12 +8,15 @@
               <img src="../../assets/img/zuojiantou.png" alt />
             </div>
             <div class="right_title">
-              <div class="t_t" style="white-space: nowrap">
+              <div class="t_t line-one" style="white-space: nowrap">
+                <span>{{ singDetails.name }}</span>
+              </div>
+              <!-- <div class="t_t" style="white-space: nowrap">
                 <span>{{ singDetails.name }}({{ singDetails.gid }})</span>
               </div>
               <div class="b_t">
                 <span>{{ singDetails.spell }}</span>
-              </div>
+              </div> -->
             </div>
           </div>
           <!-- 隐藏右侧金额显示 -->
@@ -74,16 +77,18 @@
             </div>
           </div> -->
         </div>
+        <div class="flex-start" style="font-size: .4rem;">
+          <span class="i_icon">{{ bayType }}</span>
+          <span class="i_hint" style="color:#777">{{ singDetails.spell }}</span>
+        </div>
+        <div class="detail_title_a">{{ singDetails.name }}({{ singDetails.gid }})</div>
         <div class="real_time_detail">
           <div class="left_now_price">
             <div class="top_now">
               <!-- <span :class="singDetails.nowPrice - singDetails.preclose_px > 0 ? 'price green' : 'price red'">{{
                   singDetails.nowPrice
               }}</span> -->
-              <span
-                :class="singDetails.hcrate > 0 ? 'price green' : 'price red'"
-                >{{ singDetails.nowPrice }}</span
-              >
+              <span :class="singDetails.hcrate > 0 ? 'price green' : 'price red'">{{ singDetails.nowPrice }}</span>
             </div>
             <div class="bottom_now">
               <div>
@@ -94,19 +99,14 @@
                 <span v-else>
                   {{
                     (singDetails.nowPrice - singDetails.preclose_px).toFixed(2)
-                  }}</span
-                >
+                  }}</span>
               </div>
-              <div
-                class="tew"
-                :class="singDetails.hcrate > 0 ? 'number green' : 'number red'"
-              >
+              <div class="tew" :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">
                 <span v-if="singDetails.nowPrice === 0">-</span>
                 <!-- <span v-else>({{ singDetails.nowPrice - singDetails.preclose_px > 0 ? '+' : '' }}
                   {{ singDetails.hcrate ? singDetails.hcrate : '0' }}%)</span> -->
                 <span v-else>
-                  ({{ singDetails.hcrate ? singDetails.hcrate : "0" }}%)</span
-                >
+                  ({{ singDetails.hcrate ? singDetails.hcrate : "0" }}%)</span>
               </div>
             </div>
           </div>
@@ -117,24 +117,16 @@
                 <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                     singDetails.open_px
                 }}</span> -->
-                <span
-                  :class="
-                    singDetails.hcrate > 0 ? 'number green' : 'number red'
-                  "
-                  >{{ singDetails.open_px }}</span
-                >
+                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'
+                  ">{{ singDetails.open_px }}</span>
               </div>
               <div class="rights topes">
                 <span class="titles">{{ $t("hj73") }}</span>
                 <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                     singDetails.today_max
                 }}</span> -->
-                <span
-                  :class="
-                    singDetails.hcrate > 0 ? 'number green' : 'number red'
-                  "
-                  >{{ singDetails.today_max }}</span
-                >
+                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'
+                  ">{{ singDetails.today_max }}</span>
               </div>
             </div>
             <div class="bottoms">
@@ -143,24 +135,16 @@
                 <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                     singDetails.preclose_px
                 }}</span> -->
-                <span
-                  :class="
-                    singDetails.hcrate > 0 ? 'number green' : 'number red'
-                  "
-                  >{{ singDetails.preclose_px }}</span
-                >
+                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'
+                  ">{{ singDetails.preclose_px }}</span>
               </div>
               <div class="rights bots">
                 <span class="titles">{{ $t("hj75") }}</span>
                 <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                     singDetails.today_min
                 }}</span> -->
-                <span
-                  :class="
-                    singDetails.hcrate > 0 ? 'number green' : 'number red'
-                  "
-                  >{{ singDetails.today_min }}</span
-                >
+                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'
+                  ">{{ singDetails.today_min }}</span>
               </div>
             </div>
           </div>
@@ -169,16 +153,12 @@
       <div class="k_line_detail">
         <Kline :key="key" :type="singDetails.type" />
       </div>
-      <div
-        class="priect_top_bottom"
-        style="display: none"
-        v-if="
-          kLineDetails.if_us != 1 &&
-            kLineDetails.type != 'hk' &&
-            kLineDetails.type != 'hk' &&
-            kLineDetails.if_zhishu == 0
-        "
-      >
+      <div class="priect_top_bottom" style="display: none" v-if="
+        kLineDetails.if_us != 1 &&
+        kLineDetails.type != 'hk' &&
+        kLineDetails.type != 'hk' &&
+        kLineDetails.if_zhishu == 0
+      ">
         <div class="t_title">
           <span>{{ $t("hj76") }}</span>
         </div>
@@ -284,11 +264,7 @@
             <div class="t_ma">
               <span>{{ $t("hj80") }}</span>
             </div>
-            <div
-              class="ets"
-              v-for="(item, i) in timedata.data.details"
-              :key="i"
-            >
+            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
               <div class="left_sell1">
                 <span>{{ item.split(",")[0] }}</span>
               </div>
@@ -301,11 +277,7 @@
             <div class="t_ma">
               <span>{{ $t("hj81") }}</span>
             </div>
-            <div
-              class="ets"
-              v-for="(item, i) in timedata.data.details"
-              :key="i"
-            >
+            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
               <div class="left_sell1">
                 <span>{{ item.split(",")[1] }}</span>
               </div>
@@ -318,11 +290,7 @@
             <div class="t_ma">
               <span>{{ $t("hj82") }}</span>
             </div>
-            <div
-              class="ets"
-              v-for="(item, i) in timedata.data.details"
-              :key="i"
-            >
+            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
               <div class="left_sell1">
                 <span>{{ item.split(",")[2] }}</span>
               </div>
@@ -416,16 +384,12 @@
     <div class="btns">
       <div class="lefts">
         <div class="left_ca" @click="option()">
-          <img
-            src="../../assets/img/meishoucang.png"
-            alt
-            v-if="isOptionOpt === false"
-          />
+          <img src="../../assets/img/meishoucang.png" alt v-if="isOptionOpt === false" />
           <img src="../../assets/img/shoucangle.png" alt v-else />
         </div>
-        <div class="right_xx" @click="handleJj()">
+        <!-- <div class="right_xx" @click="handleJj()">
           <a href="#"><img src="../../assets/img/xiaoxi.png" alt/></a>
-        </div>
+        </div> -->
       </div>
       <div class="rights">
         <div class="buy_btn">
@@ -840,7 +804,7 @@
   height: calc(100% - 1.7rem);
   overflow: auto;
 
-  > .content {
+  >.content {
     width: 100%;
     height: 100%;
     position: relative;
@@ -861,8 +825,24 @@
   padding: 0 0.3rem;
   background: #fff;
 
+  .detail_title_a {
+    font-size: .45rem;
+    font-weight: 500;
+    margin-top: .2rem;
+    line-height: .45rem;
+  }
+
+  .i_icon {
+    border-radius: 0 26em 26em 0;
+    background: #07c160;
+    color: #fff;
+    padding: 0.1em 0.5em 0.1em 0.4em;
+    margin-right: 0.3em;
+    font-size: 0.8em;
+  }
+
   .top_back {
-    width: 50%;
+    width: 90%;
     height: 1.2rem;
     display: flex;
     align-items: center;
@@ -872,22 +852,26 @@
       height: 80%;
       display: flex;
       align-items: center;
+      margin-right: 10vw;
 
-      > img {
-        margin-top: 0.2rem;
+      >img {
+        // margin-top: 0.2rem;
         width: 0.6rem;
         height: 0.6rem;
       }
     }
 
     .right_title {
-      width: 3rem;
-      height: 80%;
+      width: 70%;
+      // height: 80%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
 
       .t_t {
         width: 100%;
-        height: 70%;
-        display: flex;
+        height: 100%;
+        line-height: 1.2rem;
         align-items: center;
         font-size: 0.4615rem;
 
@@ -910,7 +894,7 @@
 
 .k_line_detail {
   width: 100%;
-  height: calc(100vh - 300px);
+  height: 100vw;
   background: #fff;
   border-radius: 0 0 0.3rem 0.3rem;
 }
@@ -935,6 +919,7 @@
       display: flex;
       align-items: center;
       font-weight: bold;
+
       span {
         font-weight: 500;
       }
@@ -957,19 +942,20 @@
     max-width: 70%;
     height: 100%;
 
-    > div {
+    >div {
       width: 100%;
       padding: 0.15rem 0;
       display: flex;
       align-items: center;
 
-      > div {
+      >div {
         // width: 50%;
         height: 100%;
         display: flex;
         justify-content: space-between;
         align-items: center;
         padding: 0 0.1rem;
+
         .titles {
           padding-right: 0.1rem;
         }
@@ -1029,7 +1015,7 @@
     justify-content: space-between;
     margin-top: 0.6rem;
 
-    > div {
+    >div {
       width: 49%;
       height: 100%;
     }
@@ -1050,7 +1036,7 @@
   display: flex;
   margin-top: 0.08rem;
 
-  > div {
+  >div {
     width: 50%;
     height: 100%;
     display: flex;
@@ -1133,8 +1119,9 @@
     height: 70%;
     display: flex;
     align-items: center;
+    padding-left: .3rem;
 
-    > div {
+    >div {
       width: 50%;
       height: 100%;
       display: flex;
@@ -1149,21 +1136,23 @@
   }
 
   .rights {
-    width: 70%;
+    width: 80%;
     height: 70%;
     display: flex;
     align-items: center;
-    justify-content: space-around;
+    justify-content: center;
+    padding-right: .2rem;
 
-    > div {
+    >div {
       border-radius: 0.15rem;
     }
 
     .buy_btn {
-      width: 45%;
-      height: 100%;
+      width: 50%;
+      height: 80%;
       background: rgb(225, 59, 69);
       color: #fff;
+      border-radius: 3rem 0 0 3rem !important;
 
       .top_buy {
         width: 100%;
@@ -1186,10 +1175,11 @@
     }
 
     .sell_btn {
-      width: 45%;
-      height: 100%;
-      background: rgb(68, 155, 84);
+      width: 50%;
+      height: 80%;
+      background: #c4d600;
       color: #fff;
+      border-radius: 0 3rem 3rem 0 !important;
 
       .top_sell {
         width: 100%;
diff --git a/src/page/kline/kIndex.vue b/src/page/kline/kIndex.vue
index b71a4af..ff1c6cd 100644
--- a/src/page/kline/kIndex.vue
+++ b/src/page/kline/kIndex.vue
@@ -747,7 +747,7 @@
 
 .k_line_detail {
   width: 100%;
-  height: calc(100vh - 300px);
+  height: 100vw;
   background: #fff;
   border-radius: 0 0 0.3rem 0.3rem;
 }
diff --git a/src/page/list/tradingList/data.list.vue b/src/page/list/tradingList/data.list.vue
index 193caff..97b5b9f 100644
--- a/src/page/list/tradingList/data.list.vue
+++ b/src/page/list/tradingList/data.list.vue
@@ -334,7 +334,7 @@
     initWebSocket() {
       console.log("initWebSocket");
       this.Trade = new WhrWebSocket({
-        path: `wss://ws.durocaspitall.com/websocket-server `,
+        path: `wss://ws.kuspitai.com/websocket-server `,
         onmessage: this.getTradeMessage,
       });
 
diff --git a/src/page/markets/markets.vue b/src/page/markets/markets.vue
index 38ed571..f334895 100644
--- a/src/page/markets/markets.vue
+++ b/src/page/markets/markets.vue
@@ -1,13 +1,7 @@
 <template>
   <div class="markets">
     <tab-head :rightShow="false">
-      <van-popover
-        v-model="switchShow"
-        trigger="click"
-        :actions="actions"
-        @select="onSelect"
-        placement="bottom-end"
-      >
+      <van-popover v-model="switchShow" trigger="click" :actions="actions" @select="onSelect" placement="bottom-end">
         <template #reference>
           <div class="switch flex-center">
             <van-icon name="exchange" size=".45em" />
@@ -18,13 +12,8 @@
     </tab-head>
 
     <div class="tabs flex-between">
-      <div
-        class="tab_item flex-center"
-        :class="{ active: item.pid == tab }"
-        v-for="item in tabList"
-        :key="item.pid"
-        @click="tab = item.pid"
-      >
+      <div class="tab_item flex-center" :class="{ active: item.pid == tab }" v-for="item in tabList" :key="item.pid"
+        @click="tab = item.pid">
         <span>{{ item.abbreviation }}</span>
       </div>
     </div>
@@ -108,7 +97,8 @@
     await this.getTabData();
     this.tab = this.tabList[0].pid;
   },
-  mounted() {},
+  mounted() {
+  },
   methods: {
     // 选择
     async onSelect(e) {
@@ -146,7 +136,7 @@
     // tab切换
     tabChange() {
       this.getIndicesAndKData();
-    }
+    },
   }
 };
 </script>

--
Gitblit v1.9.3