瀏覽代碼

Merge branch 'develop' of http://git.wdklian.com/allen/ncs_ui into develop

* 'develop' of http://git.wdklian.com/allen/ncs_ui:
  增加西班牙语
  增加
  完成上传表格的功能
  修改报错
  开发上传excel表的功能
  增加西班牙语
wuyunfeng 2 年之前
父節點
當前提交
a7dfb7b274

+ 6 - 3
languages/en.js

@@ -55,7 +55,9 @@ module.exports = {
     notDevelopedYet: 'Not yet developed',
     search: 'Enter search',
     keywords: 'Please enter a search keyword',
+    FontSize: 'Font size',
     chooseLang: 'Choose language',
+    SynchronizeHISInformation: 'Synchronize HIS information',
     perpetualLicence: 'Perpetual License',
     licenseValidity: 'The license is valid until: ',
     licenseRemainsValid: 'The remaining validity period of the license:',
@@ -117,17 +119,17 @@ module.exports = {
     uploaderImgMsg2: 'Please upload an image with an aspect ratio of 1:1',
     uploaderImgMsg3: 'The height of the image must be between 100 and 500! ',
     uploadFile: 'Upload file',
-    uploadAPK: 'APK file upload',
+    uploadAPK: 'APK/IMG file upload',
     uploadFileMsg: 'Drag file here, or',
     uploadFileMsg2: 'Click to upload',
     uploadFileMsg3: 'Only mp3 or flac files can be uploaded',
     uploadFileMsg4: 'The upload attachment size cannot exceed 50MB!',
-    uploadFileMsg5: 'Only upload APK files',
+    uploadFileMsg5: 'Only upload APK/IMG files',
     uploadFileName: 'File name',
     uploadFileNameMsg: 'The file name cannot be empty',
     uploadFileUrl: 'File path',
     uploadFileUrlMsg: 'The file path cannot be empty, please upload the file',
-    uploadFileUrlMsg2: 'Please upload the APK file',
+    uploadFileUrlMsg2: 'Please upload the APK/IMG file',
     uploadFileAuthor: 'Uploaded by',
     uploadFileDate: 'Upload Date',
     uploadVersionNo: 'Version number',
@@ -813,6 +815,7 @@ module.exports = {
     sickbed: '5-inch bed extension APP',
     sevensickbed: '7 inch bed extension APP',
     vsickbed: ' Visual version of Bed extension',
+    linuxsickbed: 'Linux bed extension IMG',
     mobiledevice: 'Mobile device',
     visitation: 'Visitor',
     transferDevice: 'Transfer box',

+ 967 - 0
languages/es.js

@@ -0,0 +1,967 @@
+module.exports = {
+  action: {
+    wdklCallingSystem: 'Sistema de llamadas Wreadycare',
+    home: 'Hogar',
+    add: 'Agregar',
+    edit: 'Editar',
+    more: 'mas',
+    delete: 'Eliminar',
+    login: 'Iniciar sesión',
+    loginError: 'Su estado de inicio de sesión ha caducado, ¡inicie sesión de nuevo!',
+    permissionError: 'Error de permiso',
+    logout: 'Cerrar sesión',
+    waring: 'Advertencia',
+    systemPrompt: 'Indicador del sistema',
+    prompt: 'Aviso',
+    yes: 'OK',
+    cancel: 'Cancelar',
+    back: 'Volver',
+    handle: 'Operación',
+    details: 'Detalles',
+    sort: 'Ordenar',
+    submit: 'enviar',
+    settings: 'Configuración',
+    setUp: 'Establecer',
+    systemCreate: 'Crear sistema',
+    cancelHandle: '¡Cancelar la operación! ',
+    handleSuccess: 'La operación tuvo éxito',
+    saveEdit: 'Guardar cambios',
+    saveSettings: 'Guardar configuración',
+    deleteSettings: 'Eliminar configuración',
+    deleted: '¡Ya se eliminó! ',
+    deleteList: 'Eliminar lote',
+    sureDelete: 'Los datos no se pueden recuperar después de la operación de eliminación, ¿está seguro de que desea eliminarlos?',
+    allDelete: '¿Está seguro de que desea eliminar?',
+    allDeleteSuccess: '¡Borrado exitoso! ',
+    cancelDelete: 'Se ha cancelado la eliminación',
+    pleaseChoiceDelete: 'Seleccione los datos que desea eliminar',
+    noChoice: '¡No se seleccionaron registros!',
+    fromError: 'El formulario se completó incorrectamente, ¡compruébelo! ',
+    notSpace: ', no puede comenzar con un espacio',
+    editSuccess: '¡La edición fue exitosa! ',
+    addSuccess: '¡Agregue éxito! ',
+    addSuccess2: '¡Agregue éxito! ',
+    createSuccess: '¡Creado con éxito! ',
+    settingsSuccess: '¡La configuración fue exitosa! ',
+    setUpSuccess: '¡La configuración fue exitosa! ',
+    createTime: 'Crear hora',
+    updateTime: 'Hora de actualización',
+    save: 'Guardar',
+    saveSuccess: '¡Guardar con éxito! ',
+    saveFailed: '¡Error al guardar! ',
+    saveAgain: 'Vuelva a conectarse, haga clic en Guardar de nuevo. ',
+    systemNoReturnMessage: '¡El sistema no tiene mensaje de respuesta!',
+    failGetReturnMessage: '¡Error al recibir el mensaje de respuesta!',
+    notDevelopedYet: 'Aún no desarrollado',
+    search: 'Introducir búsqueda',
+    keywords: 'Por favor ingrese una palabra clave de búsqueda',
+    FontSize: 'Tamaño de fuente',
+    chooseLang: 'Elegir idioma',
+    SynchronizeHISInformation: 'Sincronizar la información de HIS',
+    perpetualLicence: 'Licencia perpetua',
+    licenseValidity: 'La licencia es válida hasta: ',
+    licenseRemainsValid: 'El período de validez restante de la licencia:',
+    getLicense: 'días, comuníquese con posventa para obtener autorización',
+    name: 'nombre',
+    fullName: 'Nombre completo',
+    type: 'Tipo',
+    alias: 'Alias',
+    tips: 'Consejos',
+    time: 'Hora',
+    time2: 'Tiempo',
+    miunte: 'Minuto',
+    minute2: 'Minuto',
+    second: 'Segundo',
+    milisegundo: 'Milisegundos',
+    oneSecond: 'Dentro de 1 segundo',
+    Monday: 'lunes',
+    Tuesday: 'martes',
+    Wednesday: 'miércoles',
+    Thursday: 'jueves',
+    Friday: 'viernes',
+    Saturday: 'Sábado',
+    Sunday: 'Domingo',
+    every: 'Cada',
+    times: 'Tiempos',
+    choice: 'Por favor elija',
+    choiceAll: 'Seleccionar todo',
+    colour: 'Color',
+    searchDateRange: 'Período de tiempo de búsqueda',
+    to: 'Para',
+    index: 'Número de serie',
+    null: 'Ninguno',
+    all: 'todo',
+    choiceData: 'Elegir fecha y hora',
+    startDate: 'Fecha de inicio',
+    endDate: 'Fecha de finalización',
+    startTime: 'Hora de inicio',
+    endTime: 'Hora de finalización',
+    daily: 'de día',
+    monthly: 'por mes',
+    yearly: 'por año',
+    choiceMonth: 'Elegir mes',
+    choiceHYear: 'Elegir año',
+    lastWeek: 'La semana pasada',
+    lastMonth: 'Último mes',
+    lastThreeMonths: 'Últimos tres meses',
+    getMsg: 'Mensaje recibido:',
+    sureInitialize: '¿Está seguro de que desea inicializar?',
+    dateNull: 'Sin datos',
+    content: 'Contenido',
+    inputContent: 'Ingrese contenido de texto, longitud 300',
+    uploader: 'Adjunto',
+    uploaderDownload: 'Descargar archivo adjunto',
+    uploaderImg: '¡Subir archivos adjuntos solo puede estar en formato txt,doc,docx,xls,xlsx,jpg,png,jpeg!',
+    uploaderImg2: '¡Subir imágenes de avatar solo puede estar en formato JPG, PNG, GIF!',
+    uploaderSize: '¡El tamaño del archivo adjunto cargado no puede exceder los 5 MB!',
+    uploaderSize2: '¡El tamaño de la imagen de avatar cargada no puede exceder los 2 MB!',
+    uploaderImgMsg: '¡El ancho de la imagen debe estar entre 100 y 500, y la relación de aspecto es 1:1! ',
+    uploaderImgMsg2: 'Sube una imagen con una relación de aspecto de 1:1',
+    uploaderImgMsg3: '¡La altura de la imagen debe estar entre 100 y 500! ',
+    uploadFile: 'Subir archivo',
+    uploadAPK: 'Subir archivo APK/IMG',
+    uploadFileMsg: 'Arrastra el archivo aquí, o',
+    uploadFileMsg2: 'Haga clic para cargar',
+    uploadFileMsg3: 'Solo se pueden cargar archivos mp3 o flac',
+    uploadFileMsg4: '¡El tamaño del archivo adjunto cargado no puede exceder los 50 MB!',
+    uploadFileMsg5: 'Solo cargar archivos APK/IMG',
+    uploadFileName: 'Nombre del archivo',
+    uploadFileNameMsg: 'El nombre del archivo no puede estar vacío',
+    uploadFileUrl: 'Ruta del archivo',
+    uploadFileUrlMsg: 'La ruta del archivo no puede estar vacía, cargue el archivo',
+    uploadFileUrlMsg2: 'Cargue el archivo APK/IMG',
+    uploadFileAuthor: 'Subido por',
+    uploadFileDate: 'Fecha de carga',
+    uploadVersionNo: 'Número de versión',
+    inputUploadVersionNo: 'Ingrese el número de versión',
+    uploadVersionNoMsg: 'El número de versión no puede estar vacío',
+    uploadVersionCode: 'Información de la versión',
+    inputUploadVersionCode: 'Ingrese la información de la versión',
+    uploadVersionCodeMsg: 'La información de la versión no puede estar vacía',
+    initialing: 'Inicializando, por favor espere...',
+    deviceFrame: 'Espacio del dispositivo',
+    synchroDevice: 'Dispositivo sincronizado',
+    excelFile: 'Se exportará el archivo de Excel. ¿Continuar?',
+    statisticsSubTable: 'subtabla estadística',
+    byPerson: 'Por Persona',
+    byEvent: 'Por Evento',
+    export: 'Exportar',
+    icon: 'Icono',
+    play: 'Jugar',
+    pause: 'Pausa',
+    noFile: 'El archivo no existe, no se puede reproducir'
+  },
+  member: {
+    face: 'Avatar',
+    faceImg: '¡Subir imágenes de avatar solo puede estar en formato JPG, PNG, GIF!',
+    faceSize: '¡El tamaño de la imagen de avatar cargada no puede exceder los 2 MB!',
+    faceError1: '¡El ancho de la imagen debe estar entre 100 y 500, y la relación de aspecto es 1:1! ',
+    faceError2: 'Sube una imagen con una relación de aspecto de 1:1',
+    faceError3: '¡La altura de la imagen debe estar entre 100 y 500! ',
+    uname: 'Nombre de inicio de sesión',
+    inputUname: 'Por favor ingrese el nombre de usuario',
+    unameInputMsg: 'Longitud entre 2 y 20 caracteres',
+    unameError: 'Se debe completar el nombre de usuario',
+    password: 'Contraseña',
+    inputPassword: '¡Por favor ingrese su contraseña! ',
+    passwordInputMsg: 'El formato de la contraseña es incorrecto, la contraseña solo puede contener caracteres alfanuméricos y !#$%^&*.~, la longitud es de 6 a 20 dígitos',
+    passwordError: 'Se debe completar la contraseña',
+    name: 'nombre',
+    nickname: 'Nombre real',
+    inputNickname: 'Por favor ingrese su nombre real',
+    nicknameInputMsg: 'Longitud entre 2 y 20 caracteres',
+    mobile: 'Número de móvil',
+    inputMobile: '¡Por favor ingrese un número de teléfono móvil! ',
+    mobileInputMsg: 'El formato del teléfono móvil es incorrecto',
+    sex: 'Sexo',
+    man: 'Masculino',
+    woman: 'mujer',
+    unknown: 'Desconocido',
+    IDCard: 'Número de identificación',
+    birthday: 'Cumpleaños',
+    choicebirthday: 'Elige una fecha',
+    birthday2: 'Fecha de nacimiento',
+    choicebirthday2: 'Elige la fecha de nacimiento',
+    address: 'Dirección detallada',
+    addressInputMsg: 'Máximo 50 caracteres',
+    homeAddress: 'Dirección de casa',
+    inputHomeAddress: 'Ingrese la dirección de su casa',
+    disabledClerk: '¿Está seguro de que desea deshabilitar a este usuario?',
+    disabled: '¡Deshabilitado!',
+    disablecancel: 'Deshabilitado',
+    deleteMember: '¿Está seguro de que desea eliminar esta información de usuario?',
+    cantDeleteAdmin: 'No se puede eliminar al responsable de la organización'
+  },
+  home: {
+    todayTask: 'Tarea de hoy',
+    recentNote: 'Notas recientes',
+    recentInteract: 'Interacción reciente',
+    RecentRemarks: 'Notas de usuarios recientes'
+  },
+  frameManage: {
+    frameManage: 'Posición espacial',
+    numberOfRooms: 'Número de habitaciones',
+    numberOfBeds: 'Número de camas',
+    occupiedBeds: 'Número de camas ocupadas',
+    emptyBeds: 'Número de camas vacías',
+    keywordsFilter: 'Ingrese palabras clave para filtrar',
+    memberList: 'Lista de usuarios',
+    deviceList: 'Lista de dispositivos',
+    clerkList: 'Miembro de la organización',
+    quickCreate: 'Creación rápida',
+    quickCreateFrame: 'Marco de construcción rápida',
+    startRoom: 'Número de habitación de inicio',
+    endRoom: 'Número de habitación final',
+    bedQuantity: 'Número de camas por habitación',
+    showRoomDigit: 'Dígitos de visualización del número de habitación',
+    showBedDigit: 'Dígitos de visualización del número de cama',
+    example: 'Ejemplo',
+    inputFrameName: '¡Por favor ingrese el nombre del marco! ',
+    inputFrameFullName: '¡Por favor ingrese el nombre completo!',
+    inputLong: 'Longitud entre 2 y 20 caracteres',
+    addBed: 'Añadir una cama',
+    addRoom: 'Añadir habitación',
+    editFrame: 'Editar marco',
+    sureDelete: 'Seguro de eliminar',
+    allBad: '¿Y todas las camas en él?',
+    sureDeleteBed: 'Asegúrese de eliminar la cama',
+    part: 'Departamento',
+    room: 'Habitación',
+    room2: 'Habitación',
+    bed: 'Cama',
+    bed2: 'Cama',
+    newOrganization: 'Nueva Organización',
+    partName: 'Nombre del departamento',
+    inputPartName: 'Ingrese el nombre del departamento',
+    adminMember: 'Cuenta de administrador',
+    inputAdminMember: 'Ingrese la cuenta de administrador',
+    adminPassword: 'Contraseña de administrador',
+    inputAdminPassword: 'Ingrese la contraseña de administrador',
+    prefix: 'prefijo',
+    prefixExample: 'Un edificio, una unidad',
+    skipRoomNo: 'Número de habitación sin colas',
+    skipBedNo: 'Número de cama sin colas',
+    skipMsg1: 'Ingrese los números, separados por punto y coma',
+    skipMsg2: '1,2,3'
+  },
+  deviceManage: {
+    deviceManage: 'Administración de dispositivos',
+    deviceKeywords: 'Ingrese el alias del dispositivo o el código de identificación del dispositivo',
+    deviceAdd: 'Añadir dispositivo',
+    deviceEdit: 'Modificar dispositivo',
+    deviceServerChange: 'Modificar dirección del servidor',
+    serverIp: 'Dirección del servidor',
+    inputServerIp: 'Ingrese la dirección del servidor',
+    serverPort: 'Puerto del servidor',
+    inputServerPort: 'Ingrese el puerto del servidor',
+    deviceID: 'Identificación del dispositivo',
+    deviceType: 'Tipo de dispositivo',
+    choiceDeviceType: 'Seleccione el tipo de dispositivo',
+    deviceTypeMsg: 'Se debe seleccionar el tipo de dispositivo',
+    signType: 'Tipo de dispositivo de firma',
+    choiceSignType: 'Seleccione el tipo de dispositivo de señal',
+    deviceName: 'Alias de dispositivo',
+    inputDeviceName: 'Ingrese el alias del dispositivo',
+    status: 'Estado del dispositivo',
+    deviceStatus: 'Habilitado o no',
+    choiceDeviceStatus: 'Habilitar dispositivo',
+    statusTure: 'Habilitar',
+    statusFalse: 'No habilitado',
+    connect: 'Estado de la conexión',
+    connectTrue: 'En línea',
+    connectFalse: 'Fuera de línea',
+    frameFullName: 'Ubicación de implementación',
+    frameName: 'Ubicación del dispositivo',
+    choiceFrameName: 'Seleccione la ubicación de instalación',
+    ethMac: 'Dirección MAC cableada',
+    inputEthMac: 'Ingrese la dirección MAC cableada',
+    inputTrueEthMac: 'Ingrese la dirección MAC correcta',
+    ethIp: 'Dirección IP cableada',
+    inputEthIp: 'Ingrese la dirección IP',
+    ethIpPort: 'puerto de comunicación',
+    model: 'Modelo de dispositivo',
+    inputModel: 'Ingrese el modelo del dispositivo',
+    code: 'Número de fábrica',
+    inputCode: 'Ingrese el código de fábrica',
+    softVer: 'Versión del software',
+    inputSoftVer: 'Ingrese el número de versión del software',
+    hardVer: 'Versión de hardware',
+    inputHardVer: 'Ingrese el número de versión del hardware',
+    wifiMac: 'Dirección MAC inalámbrica',
+    inputWifiMac: 'Ingrese la dirección MAC inalámbrica',
+    wifiIp: 'Dirección IP inalámbrica',
+    inputWifiIp: 'Ingrese la dirección IP inalámbrica',
+    wifiHostname: 'punto de acceso WIFI',
+    inputWifiHostname: 'Ingrese el nombre del punto de acceso WIFI',
+    wifiPassword: 'contraseña WIFI',
+    inputPassword: 'Ingrese la contraseña del punto de acceso WIFI',
+    sipId: 'cuenta SIP',
+    updateTime: 'Hora de actualización',
+    phoneNumber: 'Número de teléfono del dispositivo',
+    inputPhoneNumber: 'Ingrese el número de teléfono del dispositivo',
+    priority: 'Prioridad del dispositivo',
+    backupId: 'ID del dispositivo de copia de seguridad',
+    roleName: 'Rol aplicable',
+    choiceRoleName: 'Por favor seleccione la persona correspondiente',
+    transAudio: 'El cuadro de conversión de bus superior',
+    choiceTransAudio: 'Seleccione la casilla de conversión de bus',
+    transRs485: 'Cuadro de conversión 485 superior',
+    re485SipId: '485 dirección',
+    inputRe485SipId: 'Ingrese la dirección 485',
+    sosDeviceSettingType: 'Modo de alarma',
+    sosDeviceSettingStatusFalse: 'No habilitado',
+    sosDeviceSettingControlModel: 'Modo de control y prevención de epidemias',
+    sosDeviceSettingElderlyModel: 'Modo de cuidado de personas mayores',
+    sosDeviceSettingTime: 'Hora de alarma',
+    sosDeviceSettingUnit: 'Unidad de tiempo de alarma',
+    sosDeviceSettingEdit: 'Modificar alarma del dispositivo',
+    ledResolutionRatio: 'Especificación de pantalla de corredor',
+    ledVoice: 'Reproducción de voz',
+    ledVoiceStatus: 'Habilitar voz',
+    ledFontSize: 'Tamaño de fuente',
+    ledTiming: 'Tiempo de pantalla de matriz de puntos',
+    ledPowerOn: 'En pantalla de matriz de puntos',
+    ledPowerOff: 'Pantalla de matriz de puntos apagada',
+    ledRestart: 'Reiniciar pantalla de matriz de puntos',
+    ledRemoveAllProgram: 'Borrar todos los programas',
+    ledUpdateDefaultProgram: 'Enviar programa predeterminado',
+    ledOnlyTime: 'Solo hora y fecha',
+    ledAddCustom: 'Agregar personalizado',
+    hostDeviceList: 'Lista de anfitriones de enfermeras',
+    webSocketSuccess: 'La conexión WebSocket es exitosa',
+    webSocketError: 'Ocurrió un error en la conexión WebSocket',
+    deviceLocationLevel: 'Seleccione el nivel de ubicación del dispositivo',
+    assignment: 'Asignación de un clic',
+    assignmentMsg: '¡No hay dispositivos asignados de repuesto!',
+    assignmentMsg2: 'Las habitaciones y las camas tienen dispositivos, ¡y solo se pueden asignar automáticamente dispositivos a nivel de departamento!',
+    assignmentMsg3: '¡Iniciar asignación automática!',
+    assignmentMsg4: 'La asignación automática está completa, el nivel completo del dispositivo debe asignarse manualmente, una vez completada la asignación, ¡haga clic en [Guardar]!',
+    reset: 'Restablecer con un clic',
+    resetMsg: '¿Está seguro de que desea restablecer todos sus dispositivos?',
+    resetMsg2: '¡Restablecimiento exitoso!',
+    collapse: 'Colapsar pantalla',
+    card: 'Visualización de tarjeta',
+    devices: 'dispositivos',
+    roomNoDevice: 'La habitación no estaba equipada',
+    bedNoDevice: 'La cama no estaba equipada'
+  },
+  clerkManage: {
+    clerkEdit: 'Editar información del miembro',
+    role: 'Rol',
+    choiceRole: 'Por favor elige un rol',
+    clerkList: 'Miembros del equipo',
+    admin: 'Administrador de la organización',
+    shop: 'Organizador responsable',
+    choiceShop: 'Elegir organizador',
+    shopMsg: 'Seleccione un organizador'
+  },
+  customerManage: {
+    customerAdd: 'Registrarse',
+    customerAdd2: 'Registro',
+    customerQrCode: 'código QR',
+    customerInfo: 'Información de usuario',
+    baseInfo: 'Información básica',
+    named: 'Nombre de usuario',
+    inputNamed: 'Por favor ingrese un nombre',
+    cardNo: 'Número de facturación',
+    cardNo2: 'Número de registro',
+    inputCardNo: 'Ingrese el número de paciente',
+    inputCardNo2: 'Por favor ingrese el número de registro',
+    age: 'Edad',
+    inputAge: 'Por favor ingrese la edad',
+    ageUnit: 'Unidad de edad',
+    choiceAgeUnit: 'Por favor elija una unidad de edad',
+    year: 'Año',
+    month: 'Mes',
+    day: 'día',
+    inDate: 'Fecha de entrada',
+    outDate: 'Tiempo de espera',
+    outDate2: 'Hora de salida',
+    choiceDate: 'Elegir fecha',
+    to: 'a',
+    today: 'hasta la fecha',
+    idType: 'Tipo de documento',
+    id: 'Documento',
+    idCard: 'ID',
+    noIdCard: 'Sin tarjeta de identificación',
+    null: 'Actualmente no disponible',
+    pasaporte: 'Pasaporte',
+    servicemanCard: 'Tarjeta militar',
+    idNo: 'Número de identificación',
+    inputIdNo: 'Ingrese el número de identificación',
+    nickname: 'Apodo',
+    inputNickname: 'Ingrese otro nombre para el usuario',
+    frame: 'Check in bed',
+    frame2: 'Ubicación de registro',
+    choiceFrame: 'Por favor elige una cama',
+    illnessDesc: 'Breve descripción de la situación del usuario',
+    illnessDesc2: 'Perfil de usuario',
+    illnessDesc3: 'Modo de parto',
+    patientIllnessDesc: 'Descripción de la enfermedad',
+    inputIllnessDesc: 'Ingrese el contenido del texto, longitud 2~50',
+    choiceIllnessDesc: 'Por favor elija el método de entrega',
+    advice: 'Consejo del médico',
+    inputAdvice: 'Ingrese contenido de texto, longitud 2~50',
+    doctor: 'médico responsable',
+    doctor2: 'Guardián',
+    choiceDoctor: 'Por favor elija un médico',
+    choiceDoctor2: 'Por favor elija un tutor',
+    nurse: 'enfermera responsable',
+    choiceNurse: 'Por favor elija una enfermera',
+    worker: 'trabajador responsable del cuidado',
+    choiceWorker: 'Por favor elija una enfermera',
+    choiceUser: 'Seleccione un usuario',
+    CustomerRelative: 'Usuario Relativo',
+    sureDeleteRelative: '¿Está seguro de que desea eliminar la información relativa a este paciente?',
+    customerRelativeTrueName: 'Nombre relativo',
+    inputCustomerRelativeTrueName: 'Por favor ingrese el nombre del familiar',
+    relativeName: 'Relación',
+    inputRelativeName: 'Ingrese una relación relativa como: amigo',
+    choiceRelativeName: 'Por favor elige una relación',
+    vital: 'vitales',
+    remark: 'Observación',
+    remarks: 'Observaciones:',
+    inputRemarks: 'Por favor ingrese los comentarios',
+    remarkTime: 'Tiempo:',
+    remarkName: 'Observar persona:',
+    addRemark: 'Agregar comentario',
+    outBed: 'Salir de la cama',
+    outBed2: 'Anular registro',
+    outBed3: 'Anular registro',
+    sureOutBed: '¿Estás seguro de salir de la cama? ',
+    outBedSuccess: '¡Salir de la cama con éxito! ',
+    changeBed: 'Cambiar cama',
+    changeBed2: 'Cambiar ubicación',
+    changeBed3: 'cambiar',
+    ChangeBedSuccess: '',
+    oldBed: 'Cama actual',
+    newBed: 'Cambiar a la cama',
+    choiceNewBed: 'Por favor elige una cama',
+    getEmptyBed: 'Obtener una cama vacía:',
+    message: 'mensaje',
+    customerStatus: 'Estado actual',
+    customerStatusTrue: 'Registrándose',
+    customerStatusFalse: 'Izquierda',
+    footprint: 'Huella'
+  },
+  vital: {
+    customerVital: 'Registro de usuario',
+    paramName: 'Parámetros físicos',
+    value: 'Valor físico',
+    logTime: 'Tiempo de medición',
+    company: 'Unidad'
+  },
+  watch: {
+    deviceKeywords: 'Ingrese el alias del dispositivo o el código de identificación del dispositivo',
+    dateKeywords: 'Seleccione una fecha para buscar',
+    huanBan: 'Cambio de turno',
+    binding: 'Encuadernación',
+    noBinding: 'No encuadernado',
+    ethMac: 'ID del dispositivo',
+    initializeDevice: 'Inicializar el dispositivo',
+    watchFrame: 'Administrar espacio',
+    watchDeviceFrame: 'Administrar espacio para dispositivo móvil',
+    place: 'Ubicación',
+    placeInfo: 'Información de ubicación',
+    getNewPlace: 'Obtener la última ubicación',
+    inputName: 'Por favor ingrese un nombre',
+    deviceMember: 'Persona vinculante',
+    choiceNurse: 'Por favor elija una enfermera',
+    doNothing: 'No se han realizado cambios',
+    nurseManageFrame: 'Marco de gestión de enfermería',
+    choiceFrame: '¡Por favor elige una cama! ',
+    you: 'tú eres',
+    in: 'en',
+    nearby: 'cerca',
+    notCovered: 'Actualmente no está dentro del alcance de la baliza'
+  },
+  channel: {
+    channelAdd: 'Agregar canal',
+    channelName: 'Nombre del canal',
+    inputChannelName: 'Ingrese el nombre del canal',
+    subscribeManage: 'Administración',
+    channelImHistory: 'Historia',
+    senderMemberName: 'Nombre del remitente',
+    senderTime: 'Hora de envío',
+    audioPath: 'Dirección de archivo',
+    play: 'Reproducir el mensaje'
+  },
+  remark: {
+    remarkAdd: 'Nueva nota',
+    remarkContent: 'Contenido de la nota:',
+    remarkCreateTime: 'Crear tiempo:',
+    remarkCreateName: 'Creado por:'
+  },
+  task: {
+    all: 'todo',
+    taskType: 'Estado de la tarea',
+    notOperated: 'No Operado',
+    taskFail: 'Tarea fallida',
+    taskSuccess: 'Tarea exitosa',
+    isTaskSuccess: '¿Tarea completada?',
+    success: 'Éxito',
+    failed: 'Error',
+    NoticeAndTask: 'Aviso/Tarea',
+    taskPlanTime: 'Tiempo de ejecución de la tarea programada',
+    taskPlanTime2: 'Tiempo de ejecución del plan:',
+    taskToTime: 'Tiempo real de ejecución de la tarea',
+    taskToName: 'Operador de tareas',
+    doTask: 'Tarea de operación',
+    creatName: 'Creador',
+    choiceTaskPlanTime: 'Seleccione el tiempo de ejecución de la tarea programada',
+    inputTaskContent: 'Ingrese el contenido de la tarea',
+    choiceTaskToTime: 'Por favor, elija el tiempo real de la tarea'
+  },
+  interaction: {
+    interactionKeywords: 'Ingrese el iniciador o el receptor',
+    fromMemberName: 'Original',
+    toMemberName: 'Receptor',
+    actionType: 'Tipo de interacción',
+    actionEnd: 'Resultado de la interacción',
+    actionTime: 'Número de interacciones',
+    actionTime2: 'Número de llamadas',
+    success: 'Éxito',
+    SuccessInteraction: 'Respuesta a la interacción',
+    SuccessInteraction2: 'La llamada ha sido conectada',
+    unSuccessInteraction: 'Interacción sin terminar',
+    unSuccessInteraction2: 'Llamada no conectada',
+    unSuccessTime: 'Tiempos incompletos',
+    unSuccessTime2: 'Tiempos no conectados',
+    failInteraction: 'No se pudo colgar la interacción normalmente',
+    failInteraction2: 'La llamada no se colgó normalmente',
+    notOperated: 'No responde',
+    data: 'Datos de interacción',
+    createDate: 'Tiempo de interacción',
+    fromDevice: 'Dispositivo de inicio',
+    toDevice: 'Dispositivo de recepción',
+    interactRecord: 'Registro de interacción',
+    interactionRecord2: 'Registro de llamadas',
+    all: 'todo',
+    customerAndClerk: 'Cliente y empleado',
+    clerkAndClerk: 'Colega y Colega',
+    selectData: 'Comprobar período:',
+    customerCensus: 'Estadísticas de interacción del usuario',
+    clerkCensus: 'Estadísticas de interacción de empleados',
+    dataCensus: 'Estadísticas de interacción del período de tiempo',
+    unSuccessCensus: 'Estadísticas de interacción incompletas',
+    interactionCensus: 'Estadísticas de registros de interacción',
+    quantityCensus: 'estadísticas de cantidad',
+    avgResponseNum: 'Tiempo de respuesta promedio',
+    avgResponseNum2: 'Promedio de tiempo',
+    MinNum: 'Tiempo mínimo de respuesta',
+    MinNum2: 'Tiempo mínimo',
+    MaxNum: 'Tiempo máximo de respuesta',
+    MaxNum2: 'Tiempo máximo',
+    SumNum: 'Tiempo total de llamada',
+    total: 'Total',
+    recordPlay: 'Reproducir la grabación de audio'
+  },
+  frameGroup: {
+    frameGroupAdd: 'Nueva área',
+    frameGroupName: 'Nombre de la región',
+    inputFrameGroupName: 'Ingrese el nombre del área',
+    frameGroupNameMsg: 'El nombre del área no puede estar vacío',
+    frameGroupManage: 'Espacio de control regional'
+  },
+  broadcast: {
+    broadcastAdd: 'Nueva transmisión',
+    broadcastName: 'Nombre de la transmisión',
+    inputBroadcastName: 'Ingrese el nombre de la transmisión',
+    broadcastNameMsg: 'El nombre de la transmisión no puede estar vacío',
+    broadcastMode: 'Modo de transmisión',
+    broadcastModeMsg: 'Se debe seleccionar el modo de transmisión',
+    playMode: 'Modo de reproducción',
+    manualMode: 'Modo manual',
+    autoMode: 'Modo automático',
+    playModeMsg: 'Se debe seleccionar el modo de reproducción',
+    timePlay: 'Reproducción cronometrada',
+    ScheduledPlay: 'Reproducción programada',
+    playStart: 'Inicio de reproducción automática',
+    playStartMsg: 'Se debe seleccionar la hora de inicio del modo automático',
+    anyTime: 'Cualquier punto en el tiempo',
+    playEnd: 'Finaliza la reproducción programada',
+    playEndMsg: 'Se debe seleccionar la hora de finalización de la reproducción programada',
+    repeatTimes: 'Tiempos de reproducción fijos',
+    repeatTimesMsg: 'Se deben completar los tiempos de juego',
+    repeatTime: 'Tiempos de reproducción',
+    broadcastStatus: ' Enabled or not',
+    broadcastStart: 'Start this broadcast',
+    status: 'Start status',
+    statusTrue: 'Enabled',
+    statusFalse: 'Closed',
+    repeatDay: 'Día de inicio',
+    play: 'el juego',
+    stop: 'para',
+    playManually: 'Reproducir manualmente',
+    audition: 'Audición',
+    playbackSuccessful: 'Reproducción exitosa',
+    auditionEnd: 'Fin de la audición',
+    playOrder: 'Orden de reproducción',
+    playOrderMsg: 'Se requiere orden de reproducción',
+    broadcastFrameGroup: 'Área de transmisión',
+    otherBroadcastFrameGroup: 'Otras posiciones de transmisión',
+    broadcastInfo: 'Información de transmisión',
+    broadcastFile: 'Archivo de transmisión',
+    broadcastLoadFailed: '¡Error al cargar el complemento de transmisión! ',
+    broadPlugInError: 'Error de complemento de transmisión: '
+  },
+  event: {
+    eventEdit: 'Editar evento de botón',
+    name: 'nombre',
+    inputName: 'Por favor ingrese un nombre',
+    desc: 'Descripción',
+    inputDesc: 'Por favor ingrese una descripción',
+    keyCode: 'Código de identificación único',
+    inputKeyCode: 'Ingrese un código de identificación único',
+    coordenadasX: 'rango de coordenadas x',
+    minX: 'Eje x mínimo',
+    manX: 'Eje x máximo',
+    coordenadasY: 'rango de coordenadas y',
+    minY: 'Eje y mínimo',
+    manY: 'Eje y máximo',
+    deviceType: 'Tipo de dispositivo',
+    choiceDeviceType: 'Por favor elija un tipo',
+    remoteControl: 'Control remoto',
+    emergencyButton: 'botón de emergencia SOS',
+    roleName: 'Rol aplicable',
+    choiceRoleName: 'Por favor seleccione la persona correspondiente',
+    icon: 'Icono'
+  },
+  nurseConfig: {
+    configName: 'Nombre de enfermería',
+    inputConfigName: 'Ingrese el nombre de enfermería',
+    configAdd: 'Agregar parámetros de enfermería',
+    configEdit: 'Modificar artículo de enfermería',
+    optionAdd: 'Añadir artículo de enfermería',
+    optionName: 'Nombre del elemento de enfermería',
+    inputOptionName: 'Ingrese el nombre del artículo de enfermería',
+    optionColor: 'Color de la lámpara de cuidado',
+    colorRgb: 'Identificación de color',
+    basic: 'Información Básica de Enfermería'
+  },
+  board: {
+    boardSet: 'Establecer tablero de información',
+    statusTime: 'Tiempo de permanencia en pantalla',
+    statusTimeSet: 'Establecer la duración de la estancia',
+    statusTimeSetMsg: '¡La duración debe establecerse para cada elemento! ',
+    the: 'el primero',
+    screen: 'pantalla',
+    screenFirst: 'Primera pantalla',
+    screenFirstSet: 'La duración de la estancia en la primera pantalla',
+    screenSecond: 'La segunda pantalla',
+    screenSecondSet: 'La duración de la estancia en la segunda pantalla',
+    screenFixedSet: 'Establecer la visualización de pantalla fija',
+    noFixed: 'No arreglado',
+    name: 'Alias',
+    ethMac: 'dirección Mac',
+    partId: 'ID del departamento',
+    setUpThisPart: 'Establecer en sala de pregrado',
+    webSocketSuccess: 'El servicio es normal, se pueden descubrir automáticamente nuevos tableros de información'
+  },
+  guard: {
+    shotPicture: 'Tomar foto',
+    openDoor: 'desbloquear',
+    lockDoor: 'Cerrar la puerta',
+    addVisit: 'Emitir información básica del visitante',
+    addUser: 'Agregar personas'
+  },
+  error: {
+    errorClear: 'Borrar registro',
+    errorDetails: 'Detalles del error',
+    device: 'Dispositivo:',
+    ethMac: 'Código de identificación',
+    deviceFrame: 'Posición del dispositivo:',
+    deviceFrame2: 'Posición del dispositivo',
+    className: 'Nombre de clase:',
+    className2: 'nombre de la clase',
+    methodName: 'Nombre del método:',
+    methodName2: 'nombre del método',
+    exceptionName: 'Tipo de excepción:',
+    errorTime: 'Hora del error:',
+    errorTime2: 'Tiempo de error',
+    errorMsg: 'Mensaje de error:',
+    detailsError: 'Error detallado:'
+  },
+  systemConfig: {
+    add: 'Añadir configuración de parámetros',
+    groupName: 'Nombre del grupo',
+    inputGroupName: 'Ingrese el nombre del grupo',
+    keyCode: 'Código de referencia',
+    keyCodeMsg: 'El código de referencia no puede estar vacío',
+    inputKeyCode: 'Ingrese el código de referencia',
+    keyName: 'Nombre de la configuración',
+    inputKeyName: 'Ingrese el nombre de la configuración',
+    keyVal: 'Valor de configuración',
+    keyValMsg: 'El valor de configuración no puede estar vacío',
+    inputKeyVal: 'Ingrese el valor de configuración',
+    description: 'descripción del parámetro',
+    inputDescription: 'Ingrese una descripción del parámetro'
+  },
+  menu: {
+    add: 'Agregar',
+    addMsg: 'Se pueden agregar un máximo de tres niveles al menú',
+    addFirst: 'Agregar menú superior',
+    menuEdit: 'Editar menú',
+    menuAdd: 'Añadir menú',
+    title: 'Título del menú',
+    inputTitle: '¡Por favor ingrese el título del menú! ',
+    titleMsg: 'Longitud entre 2 y 6 caracteres',
+    identifier: 'ID de menú',
+    inputIdentifier: '¡Por favor ingrese el ID del menú! ',
+    identifierMsg: 'Longitud entre 1 y 50 caracteres',
+    authRegular: 'Permisos de menú',
+    inputAuthRegular: '¡Ingrese la autoridad del menú! ',
+    authRegularMsg: 'Longitud entre 1 y 50 caracteres',
+    MenuDeleteMsg: '¿Está seguro de que desea eliminar este menú? Si hay submenús, ¡los submenús también se eliminarán! '
+  },
+  partInfo: {
+    partInfo: 'Configuración del sistema',
+    baseInfo: 'Información básica',
+    shopName: 'Abreviatura de la organización',
+    shopNameMsg: 'Se debe completar la abreviatura de la organización',
+    inputShopName: 'Ingresar abreviatura de la organización',
+    shopFullName: 'Nombre completo de la organización',
+    shopFullNameMsg: 'Se debe completar el nombre completo de la organización',
+    inputShopFullName: 'Ingrese el nombre completo de la organización',
+    hisCode: 'ID del sistema HIS',
+    inputHisCode: 'Ingrese el ID del sistema HIS',
+    shopType: 'Tipo de organización',
+    shopTypeMsg: 'Se debe seleccionar el tipo de organización',
+    choiceShopType: 'Por favor seleccione el tipo de organización',
+    hospital: 'hospital',
+    part: 'Departamento',
+    shop: 'Institución',
+    organization: 'Organización',
+    shopMemberName: 'Cuenta de administrador',
+    shopMemberNameMsg: 'Se debe completar la cuenta de administrador',
+    inputShopMemberName: 'Ingrese la cuenta de administrador',
+    shopMemberPassword: 'Contraseña de administrador',
+    shopMemberPasswordMsg: 'Se debe completar la contraseña de administrador',
+    inputShopMemberPassword: 'Ingrese la contraseña de administrador',
+    shopParentName: 'Abreviatura de la organización matriz',
+    shopParentFullName: 'El nombre completo de la organización matriz',
+    shopParentId: 'Organización',
+    choiceShopParentId: 'Por favor elija una organización matriz',
+    dayInfo: 'Configuración de parámetros diurnos',
+    dayStart: 'Hora de inicio del día',
+    nightInfo: 'Configuración de parámetros nocturnos',
+    nightStart: 'Hora de inicio de la noche',
+    dayOrNightVol: 'Volumen de llamadas del anfitrión',
+    dayOrNightDoorVol: 'Volumen de llamada de máquina exterior',
+    dayOrNightTransferBoxVol: 'Volumen de llamadas de la caja de transferencia',
+    dayOrNightLight: 'Extensión del brillo de la pantalla LCD',
+    dayOrNightRingTimes: 'Número de veces que suena la llamada',
+    dayOrNightBedVol: 'Volumen de llamada de extensión',
+    dayOrNightRingVol: 'Volumen del sistema host',
+    dayOrNightNurseLed: 'Brillo de la luz de enfermería de extensión',
+    dayOrNightTransferBoxSystemVol: 'Volumen del sistema de caja de transferencia',
+    otherInfo: 'Otros parámetros',
+    sleepSecondsBed: 'Tiempo de pantalla de extensión apagado',
+    sleepSecondsDoor: 'Tiempo de pantalla al aire libre apagado',
+    sleepSecondsNurse: 'Tiempo de descanso del anfitrión de la enfermera',
+    sipOvertime: 'Tiempo de espera de llamada de voz',
+    transferDuration: 'Duración de transferencia de enfermera',
+    transferDurationLeader: 'La duración de la transferencia del líder del equipo de enfermería',
+    nurseKeyVal: 'Tiempo de transferencia del anfitrión de la enfermera',
+    autoAccept: 'Extensión de respuesta automática',
+    openAutoAccept: 'Habilitar respuesta automática',
+    eventForward: 'Función de reenvío de eventos',
+    openEventForward: 'Reenvío de evento abierto',
+    communicationModeBed: 'Modo de comunicación de extensión',
+    communicacionModeNurse: 'Modo de comunicacion host enfermera',
+    communicationModeMobile: 'Modo de comunicación del dispositivo móvil',
+    networkCall: 'Llamada por Internet',
+    mobileCall: 'Llamada móvil',
+    fixedCall: 'Llamada fija',
+    customizeRoleCallFirst: 'Personalizar rol de llamada 1',
+    customizeRoleCallSecond: 'Personalizar rol de llamada 2',
+    customizeRoleCallThird: 'Personalizar rol de llamada 3',
+    customizeRoleCallFourth: 'Personalizar rol de llamada 4',
+    customizeRoleCalllFifth: 'Personalizar rol de llamada 5',
+    customizeHospitalCallFirst: 'Personalizar dispositivo de llamada 1',
+    customizeHospitalCallFirstName: 'Personalizar el nombre del dispositivo de llamada 1',
+    inputCustomizeHospitalCallFirstName: 'Nombre del dispositivo de entrada 1',
+    customizeHospitalCallSecond: 'Personalizar dispositivo de llamada 2',
+    customizeHospitalCallSecondName: 'Personalizar el nombre del dispositivo de llamada 2',
+    inputCustomizeHospitalCallSecondName: 'Nombre del dispositivo de entrada 2',
+    customizeHospitalCallThird: 'Personalizar dispositivo de llamada 3',
+    customizeHospitalCallThirdName: 'Personalizar el nombre del dispositivo de llamada 3',
+    inputCustomizeHospitalCallThirdName: 'Nombre del dispositivo de entrada 3',
+    inputName: 'Por favor ingrese un nombre',
+    doctorTitle: 'Título médico de extensión analógica',
+    nurseTitle: 'Título de enfermera de extensión analógica',
+    doorNurseTitle: 'Título de la llamada de la máquina de la puerta a la enfermera',
+    doorNursingTitle: 'Título de la máquina de puerta en enfermería',
+    display: 'Pantalla',
+    onDisplay: 'No mostrar',
+    upSeconds: 'intervalo de posicionamiento de carga del reloj',
+    saveSettings: 'Guardar configuración',
+    initializeSystem: 'Inicializar el sistema',
+    initialize485Device: 'Inicializar dispositivo 485',
+    addTestMemberList: 'Agregar usuarios de prueba en lotes',
+    devicesRef: 'Actualización por lotes de dispositivos',
+    bindDevice: 'Enlazar el cuadro de conversión de voz',
+    sureBindDevice: '¿Está seguro de que necesita vincular el cuadro de conversión de voz?',
+    sureAddTestMemberList: '¿Está seguro de que necesita agregar usuarios de prueba en lotes?',
+    startAdd: 'Empezar a crear',
+    sureDevicesRef: '¿Está seguro de que necesita actualizar los dispositivos por lotes?',
+    partInfoSetting: 'Configuración de la información del departamento',
+    nurse: 'Actualización de la aplicación de host de enfermera',
+    vnurse: 'Versión visual del anfitrión de la enfermera',
+    znurse: 'Se actualizó la aplicación host de enfermera de control principal',
+    doctor: 'Doctor anfitrión',
+    door: 'Actualización de la aplicación del teléfono de la puerta',
+    vdoor: 'Versión visual de la máquina de puertas',
+    sickbed: 'APLICACIÓN de extensión de cama de 5 pulgadas',
+    sevensickbed: 'Aplicación de extensión de cama de 7 pulgadas',
+    vsickbed: 'Versión visual de la extensión de la cama',
+    linuxsickbed: 'Extensión de cama de Linux IMG',
+    mobiledevice: 'Dispositivo móvil',
+    visitation: 'Visitante',
+    transferDevice: 'Caja de transferencia',
+    IcdDevice: 'Pantalla de pasillo LCD',
+    organizationAdd: 'Nueva Organización',
+    boardShowEmptyBed: 'El tablero muestra camas vacías',
+    nursingColorRgb: 'Color de la luz de la puerta de enfermería',
+    twoColorDoorLightValid: 'Las luces de puerta de dos colores son compatibles o no',
+    support: 'Admite luces de puerta de dos colores',
+    customerNameHidden: 'Habilitar la ocultación del nombre de usuario',
+    hidden: 'Activar ocultar nombre de usuario',
+    channelImHistoryStoreDays: 'El número de días que se retienen los mensajes del canal',
+    recordEnabled: 'Active la función de grabación de audio y video',
+    recordAble: 'Active la función de grabación de audio y video'
+  },
+  role: {
+    roleName: 'Nombre de la función',
+    roleNameMsg: 'Longitud entre 1 y 10 caracteres',
+    inputRoleName: '¡Por favor ingrese el nombre del rol! ',
+    roleDescribe: 'descripción del rol',
+    roleDescribeMsg: 'Máximo 200 palabras',
+    permission: 'Permiso de función',
+    roleAdd: 'Nuevo rol',
+    roleEvent: 'Evento de rol',
+    roleDelete: 'Borrar rol',
+    roleEdit: 'Editar evento de rol',
+    onChoiceRole: '¡No se ha seleccionado ningún rol!'
+  },
+  tab: {
+    home: 'Hogar',
+    frameManage: 'Posición espacial',
+    deviceManage: 'Todos los dispositivos',
+    clerkManage: 'Gestión de empleados',
+    patientManage: 'Gestión de pacientes',
+    customerManage: 'Administración de usuarios',
+    customerQrCode: 'Código QR de usuario',
+    mobileDeviceManage: 'Dispositivo móvil',
+    userLocationManage: 'Ubicación del usuario',
+    sosDeviceSettingManage: 'Dispositivo de alarma',
+    channelManage: 'Canal de intercomunicación',
+    channelImHistory: 'Historial de mensajes del canal',
+    remarkManage: 'Administración de notas',
+    taskManage: 'Gestión de tareas',
+    interactionHistory: 'Historial de interacción',
+    frameGroupManage: 'Administración de regiones',
+    frameGroupEdit: 'Editar información del área',
+    watchFrameManage: 'Espacio del dispositivo móvil',
+    broadcastManage: 'Configuración de transmisión',
+    broadcastEdit: 'Editar información de transmisión',
+    nurseConfig: 'Parámetros de enfermería',
+    boardManage: 'Configuración del tablero de información',
+    eventManage: 'Botón de gestión de eventos',
+    interactionChars: 'Estadísticas de interacción',
+    partSetting: 'Configuración de la organización',
+    allClerk: 'Todos los empleados',
+    allCustomer: 'Todos los usuarios',
+    allDevice: 'Todos los dispositivos',
+    errorLog: 'Registro de errores',
+    systemConfig: 'Parámetros del sistema',
+    shopSetting: 'Configuración del sistema',
+    menuManage: 'Gestión de menús',
+    organization: 'Organización',
+    roleManage: 'Administración de roles',
+    debugging485: '485 depurando',
+    deviceFrame: 'Espacio del dispositivo',
+    ledDevice: 'Dispositivos LED'
+  },
+  deviceType: {
+    NURSE_HOST: 'Enfermera anfitriona',
+    DOCTOR_HOST: 'Host médico',
+    DOOR_DEVICE: 'Estación de puerta',
+    DIGIT_BED_DEVICE: 'Extensión de cama',
+    LCD_SCREEN: 'Pantalla de pasillo LCD',
+    LED_SCREEN: 'Pantalla de corredor de puntos LED',
+    NURSE_WATCH: 'Movimientos de enfermera',
+    WORKER_WATCH: 'El cuidador se mueve',
+    USER_WATCH: 'Movimiento de usuario',
+    CELL_PHONE: 'Aplicación móvil',
+    TRANSFER_DEVICE: 'Caja de conversión de autobús',
+    SIMULATE_BED_DEVICE: 'Extensión analógica',
+    SIMULATE_EMERGENCY_BUTTON: 'Botón de emergencia analógico',
+    SIMULATE_DOOR_LIGHT: 'Luz de puerta analógica',
+    REMOTE_CONTROL: 'Control Remoto',
+    BEACON: 'Balizas',
+    INFORMATION_BOARD: 'Tablero de información',
+    ENTRANCE_GUARD: 'Dispositivo de control de acceso',
+    VISITATION: 'Máquina Visitante',
+    RS485_TRANSFER: 'Cuadro de conversión 485',
+    EMERGENCY_BUTTON: 'Botón de emergencia',
+    RS485_DOOR: 'Extensión de puerta 485',
+    ALARM_BODY_INDUCTIVE: 'Alarma infrarroja',
+    ALARM_WATER_OVERFLOW: 'Monitor de agua',
+    ALARM_HOUSEHOLD_GAS: 'Alarma de incendio doméstica',
+    ALARM_HOUSEHOLD_SMOKE: 'Alarma de humo doméstica',
+    ALARM_BUTTON_SOS: 'Alarma de un botón',
+    VITAL_SIGNS_DEVICE: 'Dispositivos de firma',
+    ALARM_RESTRAINT_BAND: 'Alarma de banda de restricción',
+    DOOR_LOCK: 'Sensor magnético de puerta',
+    EMERGENCY_GATEWAY: 'Puerta de enlace de alarma',
+    ALARM_433BUTTON: 'Alarma 433',
+    OTHER_HOST: 'Otro anfitrión'
+  },
+  vitalSignsDeviceType: {
+    BLOOD_SUGAR: 'Medidor de presión arterial',
+    BLOOD_OXYGEN: 'Oxímetro',
+    BLOOD_PRESSURE: 'Monitor de presión arterial',
+    TEMPERATURA: 'Pistola de temperatura',
+    SHADOW_OF_GUARDIAN: 'Sombra guardiana'
+  },
+  sosDeviceSettingType: {
+    NOT_START: 'No iniciar',
+    EPIDEMIC_PATTERN: 'Modo de prevención de epidemias',
+    CARING_PATTERN: 'Modo de cuidado de ancianos'
+  },
+  TcpType: {
+    CALLCACK: 'Comentarios de TCP',
+    VOICE: 'Voz',
+    VIDEO: 'Vídeo',
+    SOS: 'Llamada de emergencia',
+    REINFORCE: 'Refuerzos',
+    IM: 'Mensaje',
+    DEVICE: 'Dispositivo',
+    DATA: 'Datos',
+    EVENT: 'Evento',
+    SIDE: 'Información Externa',
+    BROADCAST: 'Transmisión',
+    TIME: 'tiempo',
+    ENTRACEGUARD: 'Control de Acceso',
+    CHANNELIM: 'Mensaje del canal',
+    LOCATION: 'Ubicación',
+    PHONE: 'Teléfono',
+    UNKNOWN: 'Desconocido'
+  },
+  relativeNameType: {
+    CHILDREN: 'niño',
+    BOY: 'Muchacho',
+    GIRL: 'MUCHACHA',
+    HUSBAND: 'Esposo',
+    WIFE: 'Esposa',
+    FATHER: 'padre',
+    MOTHER: 'madre',
+    RELATIVE: 'Relativo',
+    FRIEND: 'amigo'
+  },
+  childbirthType: {
+    SPONTANEOUS_LABOR: 'Nacimiento Natural',
+    CAESAREAN_BIRTH: 'Nacimiento por cesárea'
+  }
+}

+ 7 - 3
languages/zh-CN.js

@@ -56,7 +56,9 @@ module.exports = {
     notDevelopedYet: '暂未开发',
     search: '输入搜索',
     keywords: '请输入搜索关键字',
+    FontSize: '字体大小',
     chooseLang: '选择语言',
+    SynchronizeHISInformation: '同步HIS信息',
     perpetualLicence: '永久授权',
     licenseValidity: '授权有效期至: ',
     licenseRemainsValid: '授权剩余有效期:',
@@ -118,17 +120,17 @@ module.exports = {
     uploaderImgMsg2: '请上传宽高比为1:1的图片',
     uploaderImgMsg3: '图片高度必须在100~500之间!',
     uploadFile: '上传文件',
-    uploadAPK: 'APK文件上传',
+    uploadAPK: 'APK/IMG文件上传',
     uploadFileMsg: '将文件拖到此处,或',
     uploadFileMsg2: '点击上传',
     uploadFileMsg3: '只能上传mp3或flac文件',
     uploadFileMsg4: '上传附件大小不能超过 50MB!',
-    uploadFileMsg5: '只能上传APK文件',
+    uploadFileMsg5: '只能上传APK/IMG文件',
     uploadFileName: '文件名称',
     uploadFileNameMsg: '文件名称不能为空',
     uploadFileUrl: '文件路径',
     uploadFileUrlMsg: '文件路径不能为空,请上传文件',
-    uploadFileUrlMsg2: '请上传APK文件',
+    uploadFileUrlMsg2: '请上传APK/IMG文件',
     uploadFileAuthor: '上传者',
     uploadFileDate: '上传日期',
     uploadVersionNo: '版本数字',
@@ -146,6 +148,7 @@ module.exports = {
     byEvent: '按事件',
     export: '导出',
     icon: '图标',
+    excelUpload: '上传excel表',
     play: '播放',
     pause: '暂停',
     noFile: '文件不存在,无法播放'
@@ -813,6 +816,7 @@ module.exports = {
     vdoor: '门口机可视版',
     sickbed: '5寸床位分机APP',
     sevensickbed: '7寸床位分机APP',
+    linuxsickbed: 'Linux床位分机IMG',
     vsickbed: '床位分机可视版',
     mobiledevice: '移动设备',
     vistitation: '探视机',

+ 15 - 15
package-lock.json

@@ -7253,10 +7253,6 @@
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
       "dev": true
     },
-    "eve": {
-      "version": "git://github.com/adobe-webplatform/eve.git#eef80ed8d188423c2272746fb8ae5cc8dad84cb1",
-      "from": "git://github.com/adobe-webplatform/eve.git#eef80ed"
-    },
     "event-pubsub": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz",
@@ -8174,7 +8170,8 @@
         "ansi-regex": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "optional": true
         },
         "is-fullwidth-code-point": {
           "version": "1.0.0",
@@ -8200,6 +8197,7 @@
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -12495,7 +12493,8 @@
     "npm-normalize-package-bin": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
-      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
+      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
+      "optional": true
     },
     "npm-packlist": {
       "version": "1.4.8",
@@ -13255,7 +13254,8 @@
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
       "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "pify": {
       "version": "4.0.1",
@@ -14391,13 +14391,6 @@
       "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
       "dev": true
     },
-    "raphael": {
-      "version": "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0",
-      "from": "git+https://github.com/nhn/raphael.git#2.2.0-c",
-      "requires": {
-        "eve": "git://github.com/adobe-webplatform/eve.git#eef80ed8d188423c2272746fb8ae5cc8dad84cb1"
-      }
-    },
     "raw-body": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
@@ -16637,6 +16630,7 @@
           "version": "2.9.0",
           "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
           "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -17015,10 +17009,16 @@
       "integrity": "sha512-DUJIutBG/tOdvJnGCo1PcBhFyGBWsY8VIMdXe3WRtGXynMwOcC5cojYpULf3qFJ4Jj1Riv3/kbF6Ygmi+BpjCw==",
       "requires": {
         "core-js": "^3.6.4",
-        "raphael": "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0",
         "tui-code-snippet": "^2.3.1"
       },
       "dependencies": {
+        "raphael": {
+          "version": "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0",
+          "from": "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0",
+          "requires": {
+            "eve": "git://github.com/adobe-webplatform/eve.git#eef80ed"
+          }
+        },
         "tui-code-snippet": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/tui-code-snippet/-/tui-code-snippet-2.3.2.tgz",

+ 11 - 0
src/api/ncs_excel.js

@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+/** 插入表格数据 **/
+export function getExcelFile(params) {
+  return request({
+    url: '/ncs/excel/excel_file',
+    method: 'post',
+    loading: false,
+    data: params
+  })
+}

+ 8 - 2
src/layout/components/Navbar.vue

@@ -13,7 +13,7 @@
 
         <screenfull id="screenfull" class="right-menu-item hover-effect" />
 
-        <el-tooltip content="字体大小" effect="dark" placement="bottom">
+        <el-tooltip :content="this.$t('action.FontSize')" effect="dark" placement="bottom">
           <size-select id="size-select" class="right-menu-item hover-effect" />
         </el-tooltip>
 
@@ -50,7 +50,7 @@
             </el-dropdown>
           </el-dropdown-item>
           <el-dropdown-item divided @click.native="syncHis">
-            <span style="display:block;">同步HIS信息</span>
+            <span style="display:block;">{{ this.$t("action.SynchronizeHISInformation") }}</span>
           </el-dropdown-item>
           <el-dropdown-item divided @click.native="logout">
             <span style="display:block;">{{ this.$t("action.logout") }}</span>
@@ -94,6 +94,10 @@ export default {
         {
           value: 'zh',
           label: '中文简体'
+        },
+        {
+          value: 'es',
+          label: 'Español'
         }
       ]
 
@@ -151,6 +155,8 @@ export default {
         this.$i18n.locale = 'zh'
       } else if (value === 'en') {
         this.$i18n.locale = 'en'
+      } else if (value === 'es') {
+        this.$i18n.locale = 'es'
       }
       // 在选择了显示的语言后,将配置保存到缓存里
       Storage.setItem('DefaultLanguage', value)

+ 3 - 1
src/utils/i18n.js

@@ -1,5 +1,6 @@
 import Vue from 'vue'
 import enLang from 'element-ui/lib/locale/lang/en'// 如果使用中文语言包请默认支持,无需额外引入,请删除该依赖
+import esLang from 'element-ui/lib/locale/lang/es'
 import zhLang from 'element-ui/lib/locale/lang/zh-CN'
 import VueI18n from 'vue-i18n'
 import locale from 'element-ui/lib/locale'
@@ -13,7 +14,8 @@ const i18n = new VueI18n({
   // 添加多语言(每一个语言标示对应一个语言文件)
   messages: {
     'zh': Object.assign(require('../../languages/zh-CN'), zhLang),
-    'en': Object.assign(require('../../languages/en'), enLang)
+    'en': Object.assign(require('../../languages/en'), enLang),
+    'es': Object.assign(require('../../languages/es'), esLang)
   }
 })
 locale.i18n((key, value) => i18n.t(key, value))

+ 13 - 5
src/views/ncs-orginazition/components/AppVersionManager.vue

@@ -85,12 +85,20 @@ export default {
     /** 文件上传之前的校验 */
     handleShopLogoBefore(file) {
       const isImg = file.type === 'application/vnd.android.package-archive'
-      const ext = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'apk'
-      const isapk = isImg || ext
-      if (!isapk) {
-        this.$message.error(this.$t('action.uploadFileMsg5'))
+      if (isImg) {
+        const ext = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'apk'
+        const isapk = isImg || ext
+        if (!isapk) {
+          this.$message.error(this.$t('action.uploadFileMsg5'))
+        }
+        return isapk
+      } else {
+        const ext = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'img'
+        if (!ext) {
+          this.$message.error(this.$t('action.uploadFileMsg5'))
+        }
+        return ext
       }
-      return isapk
     },
     getAppVersion() {
       const params = {

+ 65 - 17
src/views/ncs-orginazition/components/partInfoEdit.vue

@@ -511,19 +511,39 @@
               </el-form-item>
             </el-col>
           </el-row>
-          <el-form-item :label="this.$t('action.icon')">
-            <el-upload
-                class="avatar-uploader"
-                :action="`${uploadurl}?scene=avatar`"
-                :show-file-list="false"
-                :on-success="uploaded"
-                :before-upload="handleShopLogoBefore"
-            >
-              <img v-if="imageUrl" :src="imageUrl" class="avatar">
-              <i v-else class="el-icon-plus avatar-uploader-icon" />
-            </el-upload>
-          </el-form-item>
 
+          <el-row>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('action.icon')">
+                <el-upload
+                    class="avatar-uploader"
+                    :action="`${uploadurl}?scene=avatar`"
+                    :show-file-list="false"
+                    :on-success="uploaded"
+                    :before-upload="handleShopLogoBefore"
+                >
+                  <img v-if="imageUrl" :src="imageUrl" class="avatar">
+                  <i v-else class="el-icon-plus avatar-uploader-icon" />
+                </el-upload>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item :label="this.$t('action.excelUpload')">
+                <el-upload
+                    class="excel-uploader"
+                    :action="`${excelUploadUrl}`"
+                    :show-file-list="false"
+                    :on-success="excelUploaded"
+                    :before-upload="handleExcelBefore"
+                    :limit="1"
+                >
+                  <el-button size="small" type="primary">{{ this.$t('action.uploadFile') }}</el-button>
+                </el-upload>
+                <el-link :href="excelUploadDemo" type="primary" target="_blank" icon="el-icon-download" :underline="false">excel表格模板</el-link>
+              </el-form-item>
+            </el-col>
+          </el-row>
         </fieldset>
 
         <el-form-item align="center" class="margin-top-sm">
@@ -547,12 +567,14 @@ import {bindDeviceTransAudio, init485Device, initData, initDeviceList} from '@/a
 import * as API_Clerk from '@/api/ncs_clerk'
 import * as API_SystemConfig from '@/api/ncs_systemconfig'
 import * as API_Device from '@/api/ncs_device'
+import * as API_Excel from "@/api/ncs_excel";
 const serverUrl = domain.serverUrl
+const DeviceUrl = domain.DeviceUrl
 export default {
   name: 'PartInfoEdit',
   props: {
     partId: {
-      type: String,
+      type: Number,
       default: null
     }
   },
@@ -578,15 +600,18 @@ export default {
       otherHostDevice: [],
       uploadurl: serverUrl + '/ncs/upload/uploadFile',
       imageUrl: '',
+      excelUploadUrl: DeviceUrl + '/ncs/excel/upload/' + this.partId,
+      excelUploadDemo: serverUrl + '/upload/excel/demo/excel_demo.xlsx',
     }
   },
   async mounted() {
     this.isShow = JSON.parse(Storage.getItem('calling_user')).username === 'superadmin'
     // this.nurseLevel0Config = await API_Nurse.getNurseConfigs(this.partId, 0)
     this.getPartInfo()
-    this.getPartents()
+    this.getParents()
     this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1 and role_name<>"护士"', sort: ' role_id', dir: 'desc' })
-    this.getOtherHostDevice(this.$store.getters.partId)
+    this.getOtherHostDevice(this.partId)
+    console.log(this.excelUploadUrl)
   },
   methods: {
     getPartInfo() {
@@ -741,7 +766,7 @@ export default {
       })
     },
     /** 获取上级机构数组 特指医院 **/
-    getPartents() {
+    getParents() {
       API_Part.listByType(6).then(res => {
         this.parents = [...res]
       })
@@ -814,7 +839,6 @@ export default {
       }
     },
     getOtherHostDevice(part_id) {
-      console.log("111111111")
       const _this = this
       API_Device.getOtherHostDevice(part_id).then(r => {
         _this.otherHostDevice = r
@@ -870,6 +894,30 @@ export default {
         reader.readAsDataURL(file)
       })
     },
+    excelUploaded(res) {
+      console.log(res)
+      let param = {}
+      param.part_id = this.partId
+      param.filename = res
+      API_Excel.getExcelFile(param).then(r => {
+        console.log(r)
+      })
+    },
+    handleExcelBefore(file) {
+      console.log(file)
+      const extension = file.name.split('.')[1] === 'xls'
+      const extension2 = file.name.split('.')[1] === 'xlsx'
+      const isLt5M = file.size / 1024 / 1024 < 5
+      if (!extension && !extension2) {
+        this.$message.info("上传文件只能是xls、xlsx格式!")
+        return false
+      }
+      if (!isLt5M) {
+        this.$message.info("上传文件大小不能超过5M!")
+        return false
+      }
+      return true
+    }
   }
 }
 </script>

+ 5 - 0
src/views/ncs-orginazition/partInfoSetting.vue

@@ -59,6 +59,11 @@
           <app-version-manager :part-id="part_id" :device-type="104" />
         </keep-alive>
       </el-tab-pane>
+      <el-tab-pane :label="this.$t('partInfo.linuxsickbed')" name="linuxsickbed">
+        <keep-alive>
+          <app-version-manager :part-id="part_id" :device-type="304" />
+        </keep-alive>
+      </el-tab-pane>
       <el-tab-pane :label="this.$t('partInfo.mobiledevice')" name="mobiledevice">
         <keep-alive>
           <app-version-manager :part-id="part_id" :device-type="7" />