فهرست منبع

Merge branch 'develop' into feature/1.5.3-update-20240603

# Conflicts:
#	languages/en.js
#	languages/es.js
#	languages/ru-RU.js
#	languages/zh-CN.js
#	src/utils/domain.js
vothin 1 سال پیش
والد
کامیت
a5d943127e

+ 42 - 19
languages/en.js

@@ -127,7 +127,7 @@ module.exports = {
     filters: 'filter',
     loadingOoo: 'Loading...',
     noRowsToShow: 'No data to show',
-    enabled: 'open',
+    // enabled: 'open',
     pinColumn: 'fixed column',
     pinLeft: 'Fixed to the left',
     pinRight: 'Fixed to the right',
@@ -1142,22 +1142,22 @@ module.exports = {
     convenientDataSync: 'Convenient Data Sync'
   },
   deviceType: {
-    NURSE_HOST: 'Nurse Host',
-    DOCTOR_HOST: 'Doctor Host',
-    DOOR_DEVICE: 'Door Station',
+    NURSE_HOST: 'Nurse Host Machine',
+    DOCTOR_HOST: 'Doctor Machine',
+    DOOR_DEVICE: 'Doorway Screen',
     DIGIT_BED_DEVICE: 'Bed Extension',
     LCD_SCREEN: 'LCD Corridor Screen',
     LED_SCREEN: 'LED Dot Corridor Screen',
-    NURSE_WATCH: 'Nurse Moves',
-    WORKER_WATCH: 'The Carer Moves',
-    USER_WATCH: 'User Move',
+    NURSE_WATCH: 'Nurse Phone',
+    WORKER_WATCH: 'worker Phone',
+    USER_WATCH: 'BT Bracelet',
     CELL_PHONE: 'Mobile App',
     TRANSFER_DEVICE: 'Bus Conversion Box',
-    SIMULATE_BED_DEVICE: 'Analog Extension',
+    SIMULATE_BED_DEVICE: 'Analog Bed Unit',
     SIMULATE_EMERGENCY_BUTTON: 'Analog Emergency Button',
-    SIMULATE_DOOR_LIGHT: 'Analog Door Light',
+    SIMULATE_DOOR_LIGHT: 'Analog Door Lamp',
     REMOTE_CONTROL: 'Remote Control',
-    BEACON: 'Beacons',
+    BEACON: 'BT NetGate',
     INFORMATION_BOARD: 'Information Board',
     ENTRANCE_GUARD: 'Access Control Device',
     VISITATION: 'Visiting Machine',
@@ -1166,29 +1166,31 @@ module.exports = {
     RS485_DOOR: '485 Door Extension',
     ALARM_BODY_INDUCTIVE: 'Infrared Alarm',
     ALARM_WATER_OVERFLOW: 'Water Monitor',
-    ALARM_HOUSEHOLD_GAS: 'Household Fire Alarm',
-    ALARM_HOUSEHOLD_SMOKE: 'Household Smoke Alarm',
+    ALARM_HOUSEHOLD_GAS: 'Fire Alarm',
+    ALARM_HOUSEHOLD_SMOKE: 'Smoke Alarm',
     ALARM_BUTTON_SOS: 'One Button Alarm',
-    VITAL_SIGNS_DEVICE: 'Signs Devices',
+    VITAL_SIGNS_DEVICE: 'Vital Signs Devices',
     ALARM_RESTRAINT_BAND: 'Restriction Band Alarm',
     DOOR_LOCK: 'Door Magnetic Sensor',
     EMERGENCY_GATEWAY: 'Alarm Gateway',
     ALARM_433BUTTON: '433 Alarm',
     OTHER_HOST: 'Other Host',
-    BREASTPLATE: 'Breast Plate',
+    BREASTPLATE: 'Badge/bracelet',
     OWON_X5_GATEWAY: 'X5 Gateway',
     FALL_DETECTION_RADAR: 'Fall Detection Radar',
     HUMAN_DETECTION_RADAR: 'Sleep Detection Radar',
     ALARM_INFUSION: 'Infusion alarm',
     ELECTRONIC_FENCE: 'Electronic fence',
-    S433_DOOR_LAMP: 'Wireless door lamp',
-    S433_TRANSFER_BOX: 'Wireless conversion box',
+    S433_DOOR_LAMP: '433 Door Lamp',
+    S433_TRANSFER_BOX: '433 Lora Converter',
     S433_RECEIVER: 'Signal receiver',
     SLEEPMATTRESS: 'sleep mattress',
     S4G_INTERCOM: '4G intercom',
     WATCH_IW: 'Smart Watch - IW',
-    MULTIFUNCTIONAL_BUTTON: 'Multi function button',
-    S433_BJMD: 'Alarm door light'
+    MULTIFUNCTIONAL_BUTTON: '433 Button',
+    S433_BJMD: '433 Lamp',
+    SOS_VOICE_BUTTON: 'Voice Button',
+    PTT: 'ptt'
   },
   vitalSignsDeviceType: {
     BLOOD_SUGAR: 'Blood Pressure Meter',
@@ -1635,7 +1637,7 @@ module.exports = {
     inputContainerName: 'Please enter a container name',
     inputFileAddress: 'Please enter a file storage address',
     inputMysqlAddress: 'Please enter the address of the MySQL server',
-    deleteSqlMsg: 'The data is not recoverable after the deletion operation, are you sure you want to delete this data?',
+    deleteSqlMsg: 'The data is not recoverable after the deletion operation, are you sure you want to delete this data?'
 
   },
   wu20240322: {
@@ -1648,5 +1650,26 @@ module.exports = {
     timeMsg: 'Please select a time',
     planTime: 'Planned execution time',
     doTime: 'Actual execution time'
+  },
+  wu20240530: {
+    nurseConfig: {
+      default_icon: 'Default Icon',
+      default_content_show: 'Default Content Display',
+      icon_text: 'Image + Text',
+      icon: 'Image Only',
+      text: 'Text Only'
+    },
+    nurseOption: {
+      icon_url: 'Icon',
+      content_show: 'Content Display Mode'
+    },
+    clear_icon: 'Clear Icon'
+  },
+  wnn20240322: {
+    SOS_VOICE_BUTTON: 'SOS voice button',
+    PTT: 'ptt'
+  },
+  zy20240611: {
+    boolTransfer: 'Enable managed interface'
   }
 }

+ 26 - 3
languages/es.js

@@ -127,7 +127,7 @@ module.exports = {
     filters: 'filtro',
     loadingOoo: 'Cargando...',
     noRowsToShow: 'No hay datos para mostrar',
-    enabled: 'abierto',
+    // enabled: 'abierto',
     pinColumn: 'columna fija',
     pinLeft: 'Fijo a la izquierda',
     pinRight: 'Fijo a la derecha',
@@ -1188,7 +1188,9 @@ module.exports = {
     S4G_INTERCOM: 'Walkie - talkie 4G',
     WATCH_IW: 'Reloj inteligente - IW',
     MULTIFUNCTIONAL_BUTTON: 'Botón multifuncional',
-    S433_BJMD: 'Luz de la puerta de alarma'
+    S433_BJMD: 'Luz de la puerta de alarma',
+    SOS_VOICE_BUTTON: 'Botón de voz sos',
+    PTT: 'ptt'
   },
   vitalSignsDeviceType: {
     BLOOD_SUGAR: 'Medidor de presión arterial',
@@ -1636,7 +1638,7 @@ module.exports = {
     inputContainerName: 'Introduzca un nombre de contenedor',
     inputFileAddress: 'Introduzca una dirección de almacenamiento de archivos',
     inputMysqlAddress: 'Introduzca la dirección del servidor MySQL',
-    deleteSqlMsg: 'Los datos no se pueden recuperar después de la operación de eliminación, ¿está seguro de que desea eliminar estos datos?',
+    deleteSqlMsg: 'Los datos no se pueden recuperar después de la operación de eliminación, ¿está seguro de que desea eliminar estos datos?'
   },
   wu20240322: {
     fileManager: 'Administrador de Archivos'
@@ -1648,5 +1650,26 @@ module.exports = {
     timeMsg: 'Por favor, elija la hora',
     planTime: 'Tiempo de ejecución previsto',
     doTime: 'Tiempo real de ejecución'
+  },
+  wu20240530: {
+    nurseConfig: {
+      default_icon: 'Icono Predeterminado',
+      default_content_show: 'Visualización de Contenido Predeterminada',
+      icon_text: 'Imagen + Texto',
+      icon: 'Solo Imagen',
+      text: 'Solo Texto'
+    },
+    nurseOption: {
+      icon_url: 'Icono',
+      content_show: 'Modo de Visualización del Contenido'
+    },
+    clear_icon: 'Limpiar Icono'
+  },
+  wnn20240322: {
+    SOS_VOICE_BUTTON: 'Botón de voz sos',
+    PTT: 'ptt'
+  },
+  zy20240611: {
+    boolTransfer: 'Habilitar interfaz gestionada'
   }
 }

+ 25 - 2
languages/ru-RU.js

@@ -127,7 +127,7 @@ module.exports = {
     filters: 'фильтр',
     loadingOoo: 'Идет загрузка...',
     noRowsToShow: 'Нет данных для отображения',
-    enabled: 'открыть',
+    // enabled: 'открыть',
     pinColumn: 'фиксированный столбец',
     pinLeft: 'Зафиксировано слева',
     pinRight: 'Закреплено справа',
@@ -1188,7 +1188,9 @@ module.exports = {
     S4G_INTERCOM: 'Диалог 4G',
     WATCH_IW: 'Умные часы - IW',
     MULTIFUNCTIONAL_BUTTON: 'Многофункциональная кнопка',
-    S433_BJMD: 'Сигнализация дверей'
+    S433_BJMD: 'Сигнализация дверей',
+    SOS_VOICE_BUTTON: 'Звуковая кнопка SOS',
+    PTT: 'ptt'
   },
   vitalSignsDeviceType: {
     BLOOD_SUGAR: 'Измеритель сахара в крови',
@@ -1647,5 +1649,26 @@ module.exports = {
     timeMsg: 'Выберите время',
     planTime: 'Запланированные сроки осуществления',
     doTime: 'Фактическое время осуществления'
+  },
+  wu20240530: {
+    nurseConfig: {
+      default_icon: 'Иконка по умолчанию',
+      default_content_show: 'Отображение контента по умолчанию',
+      icon_text: 'Изображение + Текст',
+      icon: 'Только изображение',
+      text: 'Только текст'
+    },
+    nurseOption: {
+      icon_url: 'Иконка',
+      content_show: 'Способ отображения контента'
+    },
+    clear_icon: 'Очистить иконку'
+  },
+  wnn20240322: {
+    SOS_VOICE_BUTTON: 'Звуковая кнопка SOS',
+    PTT: 'ptt'
+  },
+  zy20240611: {
+    boolTransfer: 'Включить управляемый интерфейс'
   }
 }

+ 30 - 4
languages/zh-CN.js

@@ -127,7 +127,7 @@ module.exports = {
     filters: '筛选器',
     loadingOoo: '加载中...',
     noRowsToShow: '无数据显示',
-    enabled: '开启',
+    // enabled: '开启',
     pinColumn: '固定列',
     pinLeft: '固定到左边',
     pinRight: '固定到右边',
@@ -1188,7 +1188,9 @@ module.exports = {
     S4G_INTERCOM: '4G对讲器',
     WATCH_IW: '智能手表-IW',
     MULTIFUNCTIONAL_BUTTON: '多功能按钮',
-    S433_BJMD: '报警门灯'
+    S433_BJMD: '报警门灯',
+    SOS_VOICE_BUTTON: 'SOS语音按钮',
+    PTT: '一键通'
   },
   vitalSignsDeviceType: {
     BLOOD_SUGAR: '血糖仪',
@@ -1635,8 +1637,7 @@ module.exports = {
     inputContainerName: '请输入容器名称',
     inputFileAddress: '请输入文件存储地址',
     inputMysqlAddress: '请输入mysql服务器地址',
-    deleteSqlMsg: '删除操作后数据不可复原,您确定要删除此数据?',
-
+    deleteSqlMsg: '删除操作后数据不可复原,您确定要删除此数据?'
   },
   wu20240322: {
     fileManager: '文件管理器'
@@ -1648,5 +1649,30 @@ module.exports = {
     timeMsg: '请选择时间',
     planTime: '计划执行时间',
     doTime: '实际执行时间'
+  },
+  wu20240530: {
+    nurseConfig: {
+      default_icon: '默认图标',
+      default_content_show: '默认内容显示',
+      icon_text: '图片+文字',
+      icon: '仅图片',
+      text: '仅文字'
+    },
+    nurseOption: {
+      icon_url: '图标',
+      content_show: '内容显示方式'
+    },
+    clear_icon: '清除图标'
+  },
+
+  wu20240604: {
+    textDisplayHospitalModuleTitle: '院级统计信息'
+  },
+  wnn20240322: {
+    SOS_VOICE_BUTTON: 'SOS语音按钮',
+    PTT: '一键通'
+  },
+  zy20240611: {
+    boolTransfer: '开启托管界面'
   }
 }

+ 10 - 2
src/api/ncs_board.js

@@ -15,7 +15,6 @@ export function getBoardTitles(partid) {
 }
 
 
-
 export function getBedInfo(partid) {
   return request({
     baseURL:domain.DeviceUrl,
@@ -25,7 +24,6 @@ export function getBedInfo(partid) {
   })
 }
 
-
 export function getPartStatisticSummary(partid) {
   return request({
     baseURL:domain.DeviceUrl,
@@ -34,3 +32,13 @@ export function getPartStatisticSummary(partid) {
     loading: false
   })
 }
+
+/** 获取医院级联科室统计信息 */
+export function getHospitalStatisticsCascader(partId) {
+  return request({
+    baseURL:domain.DeviceUrl,
+    url: `/boardinfo/get-hospital-statistics-cascader/${partId}`,
+    method: 'get',
+    loading: false
+  })
+}

+ 21 - 0
src/router/index.js

@@ -571,6 +571,27 @@ export const hospitalRoutes = [
         component: () => import('@/views/hospital/ledControl'),
         name: 'hospital-led-control',
         meta: { title: i18n.t('tab.ledDevice'), icon: 'el-icon-message-solid', noCache: true }
+      },
+      {
+        path: 'information_board',
+        component: () => import('@/views/calling-board/index'),
+        name: 'information-board',
+        meta: { title: i18n.t('tab.boardManage'), icon: 'infomation_board', noCache: true },
+        hidden: uiVersion === 2
+      },
+      {
+        path: 'custom_infoboard',
+        component: () => import('@/views/custom-infoboard/board-title'),
+        name: 'board-title',
+        meta: { title: i18n.t('tab.customBoardManage'), icon: 'designer', noCache: true },
+        hidden: uiVersion === 2
+      },
+      {
+        path: 'index/:id?',
+        component: () => import('@/views/custom-infoboard/infoboard-designer'), // 自定义看板 component: () => import('@/views/custom-infoboard/infoboard-designer'),资阳 component: () => import('@/views/custom-infoboard/screen-designer')
+        name: 'infoboard-designer-manager',
+        meta: { title: i18n.t('tab.customBoardDesigner'), icon: 'el-icon-data-board', noCache: true },
+        hidden: true
       }
     ]
   },

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 4 - 4
src/utils/domain.js


+ 4 - 2
src/utils/enum/DeviceTypeEnum.js

@@ -47,8 +47,10 @@ export const DEVICE_TYPE = createEnum(
     S433_RECEIVER: [42, i18n.t('deviceType.S433_RECEIVER')], // 433接收器
     SLEEPMATTRESS: [43, i18n.t('deviceType.SLEEPMATTRESS')], // 睡眠床垫
     S4GINTERCOM: [44, i18n.t('deviceType.S4G_INTERCOM')], // 4G对讲器
-    MULTIFUNCTIONAL_BUTTON: [45, i18n.t('多功能按钮')], // 多功能按钮
+    MULTIFUNCTIONAL_BUTTON: [45, i18n.t('deviceType.MULTIFUNCTIONAL_BUTTON')], // 多功能按钮
     WATCH_IW: [46, i18n.t('deviceType.WATCH_IW')], // 智能手表-埃微
-    S433_BJMD: [47, i18n.t('deviceType.S433_BJMD')] // 报警门灯
+    S433_BJMD: [47, i18n.t('deviceType.S433_BJMD')], // 报警门灯
+    SOS_VOICE_BUTTON: [48, i18n.t('deviceType.SOS_VOICE_BUTTON')], // SOS语音按钮
+    PTT: [49, i18n.t('deviceType.PTT')] // 一键通
   }
 )

+ 4 - 1
src/views/calling-board/index.vue

@@ -417,7 +417,8 @@ export default {
      * */
     getFrameTree() {
       return new Promise((resolve, reject) => {
-        API_Frame.getframestruct(this.$store.getters.partId, 3).then(res => {
+        console.log('getters',this.$store.getters.organization)
+        API_Frame.getframestruct(this.$store.getters.partId, this.$store.getters.organization.shop_type==='6'?1:3).then(res => {
           this.treeData = res.frameTree
           resolve()
         }).catch(err => {
@@ -469,7 +470,9 @@ export default {
      */
     handEdit(row) {
       row.part_id = this.$store.getters.partId
+      console.log('treeData',this.treeData)
       row.frame_id = this.treeData[0].id
+
       API_Device.update(row.id, row).then(res => {
         this.$message.success(this.$t('action.setUpSuccess'))
         this.gridApi.redrawRows()

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 730 - 705
src/views/custom-infoboard/infoboard-designer.vue


+ 198 - 197
src/views/custom-infoboard/mixinnew.js

@@ -1,212 +1,213 @@
 import dragtool from './templates/DragTool'
-import {unix2Date,unix2DateWithTimeZone} from '@/utils/Foundation'
+import { unix2Date, unix2DateWithTimeZone } from '@/utils/Foundation'
 export default {
-    props: {
-        /** 模块设计数据 */
-        data: {
-            type: Object,
-            default: () => ({})
-        },
-        /** 是否为编辑模式 */
-        isEdit: {
-            type: Boolean,
-            default: false
-        },
-        /** 模块绑定数据  **/
-        bindData:{
-            type:Object,
-            default:()=>({})
-        },
-        /** 床位数据数组索引 */
-        childDataIndex:{
-            type:Number,
-            default:0
-        },
-        /** 科室统计信息*/
-        statisticData:{
-            type:Object,
-            default:()=>({})
-        },
-        /** 自定义看板项目*/
-        boardCustomerItems:{
-            type:Array,
-            default:([])
-        },
-        /** 手动输入看板项项目数据
+  props: {
+    /** 模块设计数据 */
+    data: {
+      type: Object,
+      default: () => ({})
+    },
+    /** 是否为编辑模式 */
+    isEdit: {
+      type: Boolean,
+      default: false
+    },
+    /** 模块绑定数据  **/
+    bindData: {
+      type: Object,
+      default: () => ({})
+    },
+    /** 床位数据数组索引 */
+    childDataIndex: {
+      type: Number,
+      default: 0
+    },
+    /** 科室统计信息*/
+    statisticData: {
+      type: Object,
+      default: () => ({})
+    },
+    /** 自定义看板项目*/
+    boardCustomerItems: {
+      type: Array,
+      default: ([])
+    },
+    /** 手动输入看板项项目数据
          */
-        manualInputBoardItems:{
-            type:Array,
-            default:([])
-        },
-        /** 动画驱动**/
-        show:{
-            type:Boolean,
-            default:true
-        }
+    manualInputBoardItems: {
+      type: Array,
+      default: ([])
     },
-    components: {
-        dragtool
+    /** 医院级科室级联统计数据 */
+    hospitalStatisticsCascader: {
+      type: Array,
+      default: ([])
     },
-    computed:{
-        moduleComputedStyle(){
-            let backgroundColorNurse = ''
-            let borderColorNurse = ''
-            let boxShadow =''
-            if(this.data.moduleConfig.styleConfig.borderColorWithNurse&&this.data.moduleConfig.styleConfig.borderColorWithNurse!==''){
-
-                let nurseId = this.data.moduleConfig.styleConfig.borderColorWithNurse.replace('nurse_color_','')
-                let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p=>p.nurse_config===parseInt(nurseId))[0]
-                if(nurseOption){
-                    borderColorNurse='#'+nurseOption.nurse_color_rbg
-                }
-            }
-            if(this.data.moduleConfig.styleConfig.backgroundColorWithNurse&&this.data.moduleConfig.styleConfig.backgroundColorWithNurse!==''){
-
-                let nurseId = this.data.moduleConfig.styleConfig.backgroundColorWithNurse.replace('nurse_color_','')
-                let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p=>p.nurse_config===parseInt(nurseId))[0]
-                if(nurseOption){
-                    backgroundColorNurse='#'+nurseOption.nurse_color_rbg
-                }
-            }
-
-            if(this.data.moduleConfig.styleConfig.backgroundColorToday&&this.data.moduleConfig.styleConfig.backgroundColorToday!==''){ //设置日期等于当天的颜色
-                if(this.displayText===unix2DateWithTimeZone(new Date().getTime(),this.data.moduleConfig.dataConfig.textFormat)){
-                    backgroundColorNurse=this.data.moduleConfig.styleConfig.backgroundColorToday
-                }
-            }
-            if(this.data.moduleConfig.styleConfig.boxShadowShow){
-                boxShadow='1px 1px 3px 1px #eee'
-                if (this.data.moduleConfig.styleConfig.boxShadowColor&&this.data.moduleConfig.styleConfig.boxShadowColor!==''){
-                    boxShadow='1px 1px 3px 1px '+this.data.moduleConfig.styleConfig.boxShadowColor
-                }
-            }
-
-            return {...this.data.moduleConfig.moduleStyle,
-                borderColor:(borderColorNurse===''?this.data.moduleConfig.moduleStyle.borderColor:borderColorNurse),
-                backgroundColor:(backgroundColorNurse===''?this.data.moduleConfig.moduleStyle.backgroundColor:backgroundColorNurse),
-               boxShadow:boxShadow}
-        },
-        titleComputedStyle(){ //显示单元标题样式计算
-            let titleColor =''
-            if(this.data.moduleConfig.styleConfig.titleColorWithNurse&&this.data.moduleConfig.styleConfig.titleColorWithNurse!==''){
-                let nurseId = this.data.moduleConfig.styleConfig.titleColorWithNurse.replace('nurse_color_','')
-                let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p=>p.nurse_config===parseInt(nurseId))[0]
-                if(nurseOption){
-                    titleColor='#'+nurseOption.nurse_color_rbg
-                }
-            }
-
-            return {...this.data.moduleConfig.titleStyle,
-                color:(titleColor===''?this.data.moduleConfig.titleStyle.color:titleColor)}
-        },
-        textComputedStyle(){ //显示单元
-                let textcolor =''
-                if(this.data.moduleConfig.styleConfig.textColorWithNurse&&this.data.moduleConfig.styleConfig.textColorWithNurse!==''){
-                    let nurseId = this.data.moduleConfig.styleConfig.textColorWithNurse.replace('nurse_color_','')
-                    let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p=>p.nurse_config===parseInt(nurseId))[0]
-                    if(nurseOption){
-                        textcolor='#'+nurseOption.nurse_color_rbg
-                    }
-                }
-                if(this.data.moduleConfig.styleConfig.textColorToday&&this.data.moduleConfig.styleConfig.textColorToday!==''){ //设置日期等于当天的颜色
-                    if(this.displayText===unix2DateWithTimeZone(new Date().getTime(),this.data.moduleConfig.dataConfig.textFormat)){
-                        textcolor=this.data.moduleConfig.styleConfig.textColorToday
-                    }
-                }
-            console.log('moduleConfig',this.data)
-                return {
-                    ...this.data.moduleConfig.textStyle,
-                    color: (textcolor === '' ? this.data.moduleConfig.textStyle.color : textcolor)
-                }
-        },
-        containerComputedStyle(){
+    /** 动画驱动**/
+    show: {
+      type: Boolean,
+      default: true
+    }
+  },
+  components: {
+    dragtool
+  },
+  computed: {
+    moduleComputedStyle() {
+      let backgroundColorNurse = ''
+      let borderColorNurse = ''
+      let boxShadow = ''
+      if (this.data.moduleConfig.styleConfig.borderColorWithNurse && this.data.moduleConfig.styleConfig.borderColorWithNurse !== '') {
+        let nurseId = this.data.moduleConfig.styleConfig.borderColorWithNurse.replace('nurse_color_', '')
+        let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p => p.nurse_config === parseInt(nurseId))[0]
+        if (nurseOption) {
+          borderColorNurse = '#' + nurseOption.nurse_color_rbg
+        }
+      }
+      if (this.data.moduleConfig.styleConfig.backgroundColorWithNurse && this.data.moduleConfig.styleConfig.backgroundColorWithNurse !== '') {
+        let nurseId = this.data.moduleConfig.styleConfig.backgroundColorWithNurse.replace('nurse_color_', '')
+        let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p => p.nurse_config === parseInt(nurseId))[0]
+        if (nurseOption) {
+          backgroundColorNurse = '#' + nurseOption.nurse_color_rbg
+        }
+      }
 
-            if(this.data.moduleConfig.styleConfig.moduleFixed&&!this.isEdit){
-                return {
-                    position:'fixed',
-                    width:'100%',
-                    bottom:0,
-                    left:0
-                }
-            }
+      if (this.data.moduleConfig.styleConfig.backgroundColorToday && this.data.moduleConfig.styleConfig.backgroundColorToday !== '') { // 设置日期等于当天的颜色
+        if (this.displayText === unix2DateWithTimeZone(new Date().getTime(), this.data.moduleConfig.dataConfig.textFormat)) {
+          backgroundColorNurse = this.data.moduleConfig.styleConfig.backgroundColorToday
         }
+      }
+      if (this.data.moduleConfig.styleConfig.boxShadowShow) {
+        boxShadow = '1px 1px 3px 1px #eee'
+        if (this.data.moduleConfig.styleConfig.boxShadowColor && this.data.moduleConfig.styleConfig.boxShadowColor !== '') {
+          boxShadow = '1px 1px 3px 1px ' + this.data.moduleConfig.styleConfig.boxShadowColor
+        }
+      }
 
+      return { ...this.data.moduleConfig.moduleStyle,
+        borderColor: (borderColorNurse === '' ? this.data.moduleConfig.moduleStyle.borderColor : borderColorNurse),
+        backgroundColor: (backgroundColorNurse === '' ? this.data.moduleConfig.moduleStyle.backgroundColor : backgroundColorNurse),
+        boxShadow: boxShadow }
     },
+    titleComputedStyle() { // 显示单元标题样式计算
+      let titleColor = ''
+      if (this.data.moduleConfig.styleConfig.titleColorWithNurse && this.data.moduleConfig.styleConfig.titleColorWithNurse !== '') {
+        let nurseId = this.data.moduleConfig.styleConfig.titleColorWithNurse.replace('nurse_color_', '')
+        let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p => p.nurse_config === parseInt(nurseId))[0]
+        if (nurseOption) {
+          titleColor = '#' + nurseOption.nurse_color_rbg
+        }
+      }
 
-     data(){
-       return{
-           systemDate:new Date()
-       }
-     },
-    mounted(){
-        let _this=this
-      setInterval(function () {
-          _this.systemDate = new Date()
-      },1000)
-    },
-    methods: {
-        /** 获取颜色相关信息 */
-        colors(columnIndex = 0) {
-            const _colors = this.data.columnList[columnIndex].titleColors
-            return {
-                title: `background-color: ${_colors[0]}; background-image: linear-gradient(90deg, ${_colors.join(',')});`,
-                color: (colorIndex = 0) => `color: ${_colors[colorIndex]}`
-            }
-        },
-        // /** 获取区块链接 */
-        // blockHref(block) {
-        //     const { opt_type, opt_value } = block.block_opt
-        //     switch (opt_type) {
-        //         // 链接地址
-        //         case 'URL': return opt_value
-        //         // 商品
-        //         case 'GOODS': return `/goods/${opt_value}`
-        //         // 关键字
-        //         case 'KEYWORD': return `/goods?keyword=${encodeURIComponent(opt_value)}`
-        //         // 店铺
-        //         case 'SHOP': return `/shop/${opt_value}`
-        //         // 分类
-        //         case 'CATEGORY': return `/goods?category=${opt_value}`
-        //         default: return '/'
-        //     }
-        // },
-        /** 构建空的block */
-        emptyBlock(num = 3, type) {
-            return [...new Array(num)].map(() => ({
-                block_type: type,
-                block_value: '',
-                block_opt: {
-                    opt_type: 'NONE',
-                    opt_value: ''
-                }
-            }))
-        },
-        /** 编辑区块 */
-        handleEditBlock(columnIndex, blockIndex) {
-            console.log(JSON.stringify(this.data))
-            this.$emit('edit-block', JSON.parse(JSON.stringify(this.data)), columnIndex, blockIndex)
-        },
-        /** 编辑标题 */
-        handleEditTitle(columnIndex) {
-            this.$emit('edit-title', JSON.parse(JSON.stringify(this.data)), columnIndex)
-        },
-        /** 编辑标签 */
-        handleEditTags(columnIndex) {
-            this.$emit('edit-tags', JSON.parse(JSON.stringify(this.data)), columnIndex)
-        },
-
-        deleteModule(unique){
-            console.log('model delete',unique)
-            this.$emit('remove',unique)
-        },
-        copyModule(unique){
-            this.$emit('copy',unique)
-        },
-        activeModule(unique){
-            this.$emit('active',unique)
-        },
+      return { ...this.data.moduleConfig.titleStyle,
+        color: (titleColor === '' ? this.data.moduleConfig.titleStyle.color : titleColor) }
+    },
+    textComputedStyle() { // 显示单元
+      let textcolor = ''
+      if (this.data.moduleConfig.styleConfig.textColorWithNurse && this.data.moduleConfig.styleConfig.textColorWithNurse !== '') {
+        let nurseId = this.data.moduleConfig.styleConfig.textColorWithNurse.replace('nurse_color_', '')
+        let nurseOption = this.bindData.items[this.childDataIndex]['list'].filter(p => p.nurse_config === parseInt(nurseId))[0]
+        if (nurseOption) {
+          textcolor = '#' + nurseOption.nurse_color_rbg
+        }
+      }
+      if (this.data.moduleConfig.styleConfig.textColorToday && this.data.moduleConfig.styleConfig.textColorToday !== '') { // 设置日期等于当天的颜色
+        if (this.displayText === unix2DateWithTimeZone(new Date().getTime(), this.data.moduleConfig.dataConfig.textFormat)) {
+          textcolor = this.data.moduleConfig.styleConfig.textColorToday
+        }
+      }
+      console.log('moduleConfig', this.data)
+      return {
+        ...this.data.moduleConfig.textStyle,
+        color: (textcolor === '' ? this.data.moduleConfig.textStyle.color : textcolor)
+      }
+    },
+    containerComputedStyle() {
+      if (this.data.moduleConfig.styleConfig.moduleFixed && !this.isEdit) {
+        return {
+          position: 'fixed',
+          width: '100%',
+          bottom: 0,
+          left: 0
+        }
+      }
+    }
 
+  },
 
+  data() {
+    return {
+      systemDate: new Date()
+    }
+  },
+  mounted() {
+    let _this = this
+    setInterval(function() {
+      _this.systemDate = new Date()
+    }, 1000)
+    console.log('minxin',this.hospitalStatisticsCascader)
+  },
+  methods: {
+    /** 获取颜色相关信息 */
+    colors(columnIndex = 0) {
+      const _colors = this.data.columnList[columnIndex].titleColors
+      return {
+        title: `background-color: ${_colors[0]}; background-image: linear-gradient(90deg, ${_colors.join(',')});`,
+        color: (colorIndex = 0) => `color: ${_colors[colorIndex]}`
+      }
+    },
+    // /** 获取区块链接 */
+    // blockHref(block) {
+    //     const { opt_type, opt_value } = block.block_opt
+    //     switch (opt_type) {
+    //         // 链接地址
+    //         case 'URL': return opt_value
+    //         // 商品
+    //         case 'GOODS': return `/goods/${opt_value}`
+    //         // 关键字
+    //         case 'KEYWORD': return `/goods?keyword=${encodeURIComponent(opt_value)}`
+    //         // 店铺
+    //         case 'SHOP': return `/shop/${opt_value}`
+    //         // 分类
+    //         case 'CATEGORY': return `/goods?category=${opt_value}`
+    //         default: return '/'
+    //     }
+    // },
+    /** 构建空的block */
+    emptyBlock(num = 3, type) {
+      return [...new Array(num)].map(() => ({
+        block_type: type,
+        block_value: '',
+        block_opt: {
+          opt_type: 'NONE',
+          opt_value: ''
+        }
+      }))
+    },
+    /** 编辑区块 */
+    handleEditBlock(columnIndex, blockIndex) {
+      console.log(JSON.stringify(this.data))
+      this.$emit('edit-block', JSON.parse(JSON.stringify(this.data)), columnIndex, blockIndex)
+    },
+    /** 编辑标题 */
+    handleEditTitle(columnIndex) {
+      this.$emit('edit-title', JSON.parse(JSON.stringify(this.data)), columnIndex)
+    },
+    /** 编辑标签 */
+    handleEditTags(columnIndex) {
+      this.$emit('edit-tags', JSON.parse(JSON.stringify(this.data)), columnIndex)
+    },
 
+    deleteModule(unique) {
+      console.log('model delete', unique)
+      this.$emit('remove', unique)
+    },
+    copyModule(unique) {
+      this.$emit('copy', unique)
+    },
+    activeModule(unique) {
+      this.$emit('active', unique)
     }
+
+  }
 }

+ 11 - 6
src/views/custom-infoboard/nest-component.vue

@@ -2,20 +2,20 @@
     <div >
     <div v-for="(el,index) in tasks" :key="el.unique"><!--:key="el.unique"-->
         <template v-if="el.moduleConfig.isCircleChild">
-            <component   :is="templates[el.tpl_id]" :data="el" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :statistic-data="statisticData" :child-data-index="childDataIndex">
+            <component   :is="templates[el.tpl_id]" :data="el" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :statistic-data="statisticData" :child-data-index="childDataIndex">
 
                 <grid-item  v-for="i in ((el.moduleConfig.gridCloumns*el.moduleConfig.gridRows)>(bindData.items?bindData.items.length:0)?(bindData.items?bindData.items.length:0):(el.moduleConfig.gridCloumns*el.moduleConfig.gridRows))" style="padding: 5px;">
 
-                    <nest-component :tasks="el.children" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :statistic-data="statisticData" :child-data-index="i-1" />
+                    <nest-component :tasks="el.children" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :statistic-data="statisticData" :child-data-index="i-1" />
 
                 </grid-item>
 
             </component>
         </template>
         <template v-else>
-            <component   :is="templates[el.tpl_id]" :data="el" :bind-data="bindData"  :show="show" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :statistic-data="statisticData" :child-data-index="childDataIndex">
+            <component   :is="templates[el.tpl_id]" :data="el" :bind-data="bindData"  :show="show" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :statistic-data="statisticData" :child-data-index="childDataIndex">
                 <!--            <p>{{ el.name }}</p>-->
-                <nest-component :tasks="el.children" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :statistic-data="statisticData" :child-data-index="childDataIndex"/>
+                <nest-component :tasks="el.children" :bind-data="bindData" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :statistic-data="statisticData" :child-data-index="childDataIndex"/>
             </component>
         </template>
 
@@ -52,8 +52,13 @@
             /** 手动输入看板条目 */
             manualInputBoardItems:{
                 type:Array,
-                default:()=>[]
+                default:([])
             },
+          /** 医院级科室级联统计数据 */
+          hospitalStatisticsCascader: {
+            type: Array,
+            default: ([])
+          },
             /** 动画驱动**/
             show:{
                 type:Boolean,
@@ -73,7 +78,7 @@
             }
         },
       mounted() {
-            console.log('nest',this.statisticData)
+            console.log('nest',this.hospitalStatisticsCascader)
             // console.log('child',this.data.children)
       }
     }

+ 11 - 6
src/views/custom-infoboard/nest-draggable.vue

@@ -2,17 +2,17 @@
     <draggable class="dragArea" tag="div" :list="tasks"  :options="floorOptions" @add="additem"  :clone="clonedata">
         <div v-for="(el,index) in tasks" :key="el.unique" ><!---->
             <template v-if="el.moduleConfig.isCircleChild">
-        <component   :is="templates[el.tpl_id]" :bind-data="bindData" :show="show" :statistic-data="statisticData" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :child-data-index="childDataIndex" :data="el" :is-edit="el.isEdit"  @remove="deleteModule" @copy="copyModule" @active="activeModule">
+        <component   :is="templates[el.tpl_id]" :bind-data="bindData" :show="show" :statistic-data="statisticData" :board-customer-items="boardCustomerItems" :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :child-data-index="childDataIndex" :data="el" :is-edit="el.isEdit"  @remove="deleteModule" @copy="copyModule" @active="activeModule">
 <!--            <p>{{ el.name }}</p>-->
             <grid-item  v-for="i in ((el.moduleConfig.gridCloumns*el.moduleConfig.gridRows)>(bindData.items?bindData.items.length:0)?(bindData.items?bindData.items.length:0):(el.moduleConfig.gridCloumns*el.moduleConfig.gridRows))" style="padding: 5px;" :key="el.unique+i">
-            <nest-draggable :tasks="el.children" :bind-data="bindData" :show="show" :statistic-data="statisticData" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :child-data-index="i-1" :is-edit="i===1" @add="additem" @delete="deleteModule" @copy="copyModule" @active="activeModule"/>
+            <nest-draggable :tasks="el.children" :bind-data="bindData" :show="show" :statistic-data="statisticData" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :child-data-index="i-1" :is-edit="i===1" @add="additem" @delete="deleteModule" @copy="copyModule" @active="activeModule"/>
             </grid-item>
         </component>
             </template>
         <template v-else>
-            <component   :is="templates[el.tpl_id]" :data="el"  :child-data-index="childDataIndex" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :bind-data="bindData" :statistic-data="statisticData" :is-edit="el.isEdit&&isEdit" @remove="deleteModule" @copy="copyModule" @active="activeModule">
+            <component   :is="templates[el.tpl_id]" :data="el"  :child-data-index="childDataIndex" :show="show" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :bind-data="bindData" :statistic-data="statisticData" :is-edit="el.isEdit&&isEdit" @remove="deleteModule" @copy="copyModule" @active="activeModule">
                 <!--            <p>{{ el.name }}</p>-->
-                <nest-draggable :tasks="el.children" :bind-data="bindData" :show="show"  :statistic-data="statisticData" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :child-data-index="childDataIndex" :is-edit="el.isEdit&&isEdit" @add="additem" @delete="deleteModule" @copy="copyModule" @active="activeModule"/>
+                <nest-draggable :tasks="el.children" :bind-data="bindData" :show="show"  :statistic-data="statisticData" :board-customer-items="boardCustomerItems"  :manual-input-board-items="manualInputBoardItems" :hospital-statistics-cascader="hospitalStatisticsCascader" :child-data-index="childDataIndex" :is-edit="el.isEdit&&isEdit" @add="additem" @delete="deleteModule" @copy="copyModule" @active="activeModule"/>
             </component>
         </template>
 
@@ -56,8 +56,13 @@
             /** 手动输入看板条目 */
             manualInputBoardItems:{
                 type:Array,
-                default:()=>[]
+                default:([])
             },
+          /** 医院级科室级联统计数据 */
+          hospitalStatisticsCascader: {
+            type: Array,
+            default: ([])
+          },
             /** 动画驱动**/
             show:{
                 type:Boolean,
@@ -82,7 +87,7 @@
             }
         },
         mounted() {
-            console.log(this.tasks)
+            console.log('nest-draggable',this.hospitalStatisticsCascader)
         },
         methods:{
             additem(){

+ 13 - 11
src/views/custom-infoboard/templates/common/index.js

@@ -9,17 +9,19 @@ import text_display2 from './text-display2'
 import row_container from './row-container'
 import column_container from './cloumn-container'
 import html_display from './html-display'
+import text_display_hospital from './text-display-hospital'
 
 export default {
-    // 1: tpl_one_cloum, //资阳ui 123 ,其他5 6 7 8 9 10
-    // 2: tpl_two_cloum,
-    // 3: tpl_three_cloum,
-    /// // 4:tpl_header,
-    5:tpl_beds_grid,
-    6:tpl_bed_unit,
-    9:row_container,
-    10:column_container,
-    7:text_display,
-    8:text_display2,
-    11:html_display
+  // 1: tpl_one_cloum, //资阳ui 123 ,其他5 6 7 8 9 10
+  // 2: tpl_two_cloum,
+  // 3: tpl_three_cloum,
+  // / // 4:tpl_header,
+  5: tpl_beds_grid,
+  6: tpl_bed_unit,
+  9: row_container,
+  10: column_container,
+  7: text_display,
+  8: text_display2,
+  11: html_display,
+  12: text_display_hospital
 }

+ 136 - 0
src/views/custom-infoboard/templates/common/text-display-hospital.vue

@@ -0,0 +1,136 @@
+<script>
+import DragTool from "@/views/custom-infoboard/templates/DragTool.vue";
+import mixin from "@/views/custom-infoboard/mixinnew";
+
+export default {
+  name: 'text-display-hospital',
+  components: {DragTool},
+  mixins:[mixin],
+  title:'wu20240604.textDisplayHospitalModuleTitle',//医院信息显示
+  computed:{
+    displayText(){
+      if(this.data.moduleConfig.dataConfig&&this.data.moduleConfig.dataConfig.displayPartItem&&!!this.data.moduleConfig.dataConfig.displayPartItem.length){ //看板项内容
+        let customItem = this.hospitalStatisticsCascader.filter(p=>p.value===this.data.moduleConfig.dataConfig.displayPartItem[0])[0]
+        if(customItem){
+          var childItem = customItem.children.filter(p=>p.value===this.data.moduleConfig.dataConfig.displayPartItem[1])[0];
+          if(childItem){
+            return childItem.summary
+          }
+        }
+      }
+      return ''
+    },
+    titleText(){
+      //重写自定看板项标题
+      if(this.data.moduleConfig.dataConfig&&this.data.moduleConfig.dataConfig.titleText!=='') {
+        return  this.data.moduleConfig.dataConfig.titleText
+      }
+
+      if(this.data.moduleConfig.dataConfig&&this.data.moduleConfig.dataConfig.displayPartItem&&!!this.data.moduleConfig.dataConfig.displayPartItem.length){ //看板项内容
+
+        let customItem = this.hospitalStatisticsCascader.filter(p=>p.value===this.data.moduleConfig.dataConfig.displayPartItem[0])[0]
+        if(customItem){
+          var childItem = customItem.children.filter(p=>p.value===this.data.moduleConfig.dataConfig.displayPartItem[1])[0];
+          if(childItem){
+            return childItem.label
+          }
+        }
+      }
+      return this.$t('boarderDesign.titleTextDefault')
+    }
+
+  },
+  dataTpl:{
+    tpl_id: 12,
+    tpl_type: 'HOSPITAL_ITEM',
+    templateName:'text-display-hospital',
+    isEdit:true,
+    unique:'',
+    moduleIconClass:'icon-Text',
+    moduleConfig:{
+      moduleStyle: {
+        borderColor: '',
+        borderRadius:'0px',
+        borderStyle:'solid',
+        backgroundColor:'',
+        borderTopWidth:'0px',
+        borderRightWidth:'0px',
+        borderBottomWidth:'0px',
+        borderLeftWidth:'0px',
+        margin:'0px',
+        padding:'0px',
+        height:'40px'
+      },
+      styleConfig:{
+
+      },
+      titleStyle:{ //标题样式
+        fontSize:'14px',
+        color:'',
+        fontWeight:'normal',
+        marginLeft:'0px',
+        marginRight:'0px',
+        border:'0px',
+        width:'auto',
+        borderColor:'',
+        paddingRight:'10px',
+        paddingLeft:'10px',
+        borderStyle: 'solid',
+        borderRightWidth: '0px'
+      },
+      textStyle:{ //内容样式
+        fontSize:'14px',
+        color:'',
+        fontWeight:'normal',
+        marginLeft:'0px',
+        marginRight:'0px',
+        textAlign:'center'
+      },
+      dataConfig:{
+        displayPartItem:[],
+        titleText:''
+      },
+      showTitle:true, //显示标题,
+    },
+    children:([])
+  }
+}
+</script>
+
+<template>
+  <drag-tool  :unique="data.unique" @delete="deleteModule" :is-edit="isEdit" @copy="copyModule" @active="activeModule">
+    <div :style="moduleComputedStyle" class="flex">
+
+      <div :style="titleComputedStyle" v-if="data.moduleConfig.showTitle"   class="titlewrap"> <div class="titleStyle">{{titleText}}</div>
+      </div>
+      <div class="flex-sub flex"  > <div class="contentStyle" :style="textComputedStyle">{{displayText}}</div>
+      </div>
+    </div>
+  </drag-tool>
+</template>
+
+<style scoped>
+.content_item{
+  align-self: center;
+}
+.titlewrap{
+  align-items: center;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+  overflow-wrap: break-word;
+}
+.titleStyle{
+  height: 100%;
+  display: inline-flex;
+  align-items: center;
+  flex-direction: row-reverse;
+  width: 100%;
+  overflow-wrap: break-word;
+  word-break: break-all;
+}
+.contentStyle{
+  flex:1;
+  align-self: center;
+}
+</style>

+ 46 - 1
src/views/custom-infoboard/templates/moduleConfig.vue

@@ -439,6 +439,34 @@
 
                 </el-form-item>
 
+              <el-form-item :label="this.$t('boarderDesign.fieldDisplay')"
+                            v-if="moduleConfig.dataConfig&&moduleConfig.dataConfig.displayPartItem">
+
+                <el-cascader
+                    v-model="moduleConfig.dataConfig.displayPartItem"
+                    :options="partStatisticSummary"
+                    filterable
+                    clearable
+                   ></el-cascader>
+
+<!--                <el-select v-model="moduleConfig.dataConfig.displayPartItem"-->
+<!--                           :placeholder="this.$t('boarderDesign.manulInputDisplay')"-->
+<!--                           filterable-->
+<!--                           clearable-->
+<!--                >-->
+
+
+<!--                  <el-option v-for="(item, index) in manualInputBoardItems" :key="index"-->
+<!--                             :label="item.item_name" :value="item.item_name_md5"/>-->
+
+
+<!--                  &lt;!&ndash;                        <el-option v-for="field in dataFields" :label="field.display" :value="field.value"/>&ndash;&gt;-->
+
+<!--                </el-select>-->
+
+              </el-form-item>
+
+
 
                 <el-form-item :label="this.$t('boarderDesign.displayFormat')"
                               v-if="moduleConfig.dataConfig&&moduleConfig.dataConfig.textType!==undefined">
@@ -597,6 +625,19 @@
                     </el-input>
                 </el-form-item>
 
+              <el-form-item :label="this.$t('boarderDesign.contentAlign')"
+                            v-if="moduleConfig.textStyle&&moduleConfig.textStyle.textAlign!==undefined">
+                <el-select v-model="moduleConfig.textStyle.textAlign"
+                           :placeholder="this.$t('boarderDesign.contentAlign')"
+                           filterable
+                           clearable
+                >
+                  <el-option :label="this.$t('boarderDesign.alignLeft')" value="left"/>
+                  <el-option :label="this.$t('boarderDesign.alignCenter')" value="center"/>
+                  <el-option :label="this.$t('boarderDesign.alignRight')" value="right"/>
+                </el-select>
+              </el-form-item>
+
                 <el-form-item :label="this.$t('boarderDesign.contentTextMarginLeft')"
                               v-if="moduleConfig.textStyle&&moduleConfig.textStyle.marginLeft!==undefined">
                     <el-input :placeholder="this.$t('boarderDesign.contentTextMarginLeft')"
@@ -707,6 +748,7 @@
     import * as API_BoardItem from '@/api/ncs_board_item'
     import * as API_ManualInputBoardItem from '@/api/ncs_manual_input_board_item'
     import {INFORMATION_BOARD_STATISTICS_ENUM} from '@/utils/enum/InfomationBoardStatisticEnum'
+    import {getHospitalStatisticsCascader} from "@/api/ncs_board_item";
 
     export default {
         props: ['moduleConfig'],
@@ -776,7 +818,9 @@
                 }],
                 //自定义看板项
                 boardItems: [],
-                manualInputBoardItems: []
+                //手动输入看板项
+                manualInputBoardItems: [],
+                partStatisticSummary: []
 
             }
         },
@@ -791,6 +835,7 @@
             this.getNurseConfigsByPartId()
             this.getPartStatisticSummary()
             this.boardItems = await API_BoardItem.getPartList(this.$store.getters.partId)
+            this.partStatisticSummary = await API_Board.getHospitalStatisticsCascader(this.$store.getters.partId)
             this.manualInputBoardItems = await API_ManualInputBoardItem.getList(this.$store.getters.partId)
         },
         methods: {

+ 1 - 1
src/views/customer/components/elderlyCareManager.vue

@@ -342,7 +342,7 @@
                 </el-tab-pane>
 
                 <el-tab-pane v-if="formmodel.id" :label="this.$t('customerManage.vital')" name="customer-vital-sign">
-                    <vital-sign-log :member-id="formmodel.id+''" :active-name="'vital_signs1'"/>
+                    <vital-sign-log :member-id="formmodel.member_id+''" :active-name="'vital_signs1'"/>
                 </el-tab-pane>
 
                 <el-tab-pane v-if="formmodel.id" :label="this.$t('customerManage.remark')" name="customerRemark">

+ 1 - 0
src/views/login/index.vue

@@ -109,6 +109,7 @@ export default {
     // window.addEventListener('storage', this.afterQRScan)
   },
   mounted() {
+    console.log(this.$t('action.wdklCallingSystem'))
     const uuid = Storage.getItem('calling_uuid')
     if (uuid) {
       this.uuid = uuid

+ 198 - 100
src/views/ncs-nurse-config/index.vue

@@ -13,18 +13,18 @@
 
       <el-aside width="300px" style="background-color: rgb(238, 241, 246)">
         <el-table
-          ref="nurseConfigTable"
-          v-loading="listLoading"
-          :data="tagList1"
-          highlight-current-row
-          :height="tableHeight-40"
-          stripe
-          @row-click="tableClick"
+            ref="nurseConfigTable"
+            v-loading="listLoading"
+            :data="tagList1"
+            highlight-current-row
+            :height="tableHeight-40"
+            stripe
+            @row-click="tableClick"
         >
-          <el-table-column prop="config_name" :label="this.$t('nurseConfig.configName')" width="120px" />
+          <el-table-column prop="config_name" :label="this.$t('nurseConfig.configName')" width="120px"/>
           <el-table-column
-            width="160px"
-            align="right"
+              width="160px"
+              align="right"
           >
             <template slot="header" slot-scope="scope">
               <el-button type="primary" size="mini" @click="addNurseConfig(1,null,1)">{{ configAdd }}</el-button>
@@ -38,18 +38,18 @@
               <!--                @click.native.prevent="addNurseConfig(scope.$index, scope.row,2)"-->
               <!--              />-->
               <el-button
-                type="primary"
-                icon="el-icon-edit"
-                circle
-                size="mini"
-                @click.native.prevent="updateRow(scope.$index, scope.row, 1)"
+                  type="primary"
+                  icon="el-icon-edit"
+                  circle
+                  size="mini"
+                  @click.native.prevent="updateRow(scope.$index, scope.row, 1)"
               />
               <el-button
-                type="danger"
-                icon="el-icon-delete"
-                circle
-                size="mini"
-                @click.native.prevent="deleteRow(scope.$index, scope.row,1)"
+                  type="danger"
+                  icon="el-icon-delete"
+                  circle
+                  size="mini"
+                  @click.native.prevent="deleteRow(scope.$index, scope.row,1)"
               />
             </template>
           </el-table-column>
@@ -77,38 +77,41 @@
         <!--        </el-table>-->
 
         <ag-grid-layout
-          toolbar
-          :table-height="tableHeight-130"
-          theme="ag-theme-alpine"
-          :column-defs="columnDefs"
-          :row-data="tagList2"
-          :locale-text="localeText"
-          :grid-options="gridOptions"
-          :default-col-def="defaultColDef"
-          :animate-rows="true"
-          :row-selection="rowSelection"
-          @filterChanged="filterModifed"
-          @sortChanged="gridSortChange"
+            toolbar
+            :table-height="tableHeight-130"
+            theme="ag-theme-alpine"
+            :column-defs="columnDefs"
+            :row-data="tagList2"
+            :locale-text="localeText"
+            :grid-options="gridOptions"
+            :default-col-def="defaultColDef"
+            :animate-rows="true"
+            :row-selection="rowSelection"
+            @filterChanged="filterModifed"
+            @sortChanged="gridSortChange"
         >
           <!--        @rowDoubleClicked="getList"-->
           <div slot="toolbar" class="inner-toolbar">
             <div class="toolbar-search">
-              <en-table-search :placeholder="this.$t('action.keywords')" @search="handlerSearch" />
+              <en-table-search :placeholder="this.$t('action.keywords')" @search="handlerSearch"/>
             </div>
             <div class="toolbar-btns">
-              <el-button type="primary" size="mini" @click="addOption">{{ this.$t('nurseConfig.optionAdd') }}</el-button>
+              <el-button type="primary" size="mini" @click="addOption">{{
+                  this.$t('nurseConfig.optionAdd')
+                }}
+              </el-button>
             </div>
           </div>
           <el-pagination
-            v-if="pageData"
-            slot="pagination"
-            :current-page="pageData.page_no"
-            :page-sizes="[10, 20, 50, 100]"
-            :page-size="pageData.page_size"
-            layout="total, sizes, prev, pager, next, jumper"
-            :total="pageData.data_total"
-            @size-change="handlePageSizeChange"
-            @current-change="handlePageCurrentChange"
+              v-if="pageData"
+              slot="pagination"
+              :current-page="pageData.page_no"
+              :page-sizes="[10, 20, 50, 100]"
+              :page-size="pageData.page_size"
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="pageData.data_total"
+              @size-change="handlePageSizeChange"
+              @current-change="handlePageCurrentChange"
           />
         </ag-grid-layout>
       </el-main>
@@ -118,53 +121,118 @@
     <el-dialog v-model="addFormVisible" :title="myTitle" :visible.sync="addFormVisible" :close-on-click-modal="false">
       <el-form ref="addForm" :model="addForm" label-width="140px" :rules="addFormRules">
         <el-form-item :label="this.$t('nurseConfig.configName')" prop="config_name">
-          <el-input v-model="addForm.config_name" maxlength="100" />
+          <el-input v-model="addForm.config_name" maxlength="100"/>
         </el-form-item>
         <el-form-item :label="this.$t('action.sort')" prop="index_no">
-          <el-input-number v-model="addForm.index_no" :min="1" :max="100" />
+          <el-input-number v-model="addForm.index_no" :min="1" :max="100"/>
         </el-form-item>
-        <el-form-item  prop="basic">
-          <el-checkbox v-model="addForm.basic">{{this.$t('nurseConfig.basic')}}</el-checkbox>
+        <el-form-item :label="this.$t('wu20240530.nurseConfig.default_icon')" prop="default_icon">
+          <el-avatar shape="square" :size="32" fit="fill" @click.native="chooseImage('config')"
+                     :src="addForm.default_icon"></el-avatar>
+          <el-button type="text" v-if="addForm.default_icon&&addForm.default_icon.length" @click="clearIcon('config')">
+            {{ $t('wu20240530.clear_icon') }}
+          </el-button>
+        </el-form-item>
+        <el-form-item :label="this.$t('wu20240530.nurseConfig.default_content_show')" prop="default_content_show">
+          <el-radio-group v-model="addForm.default_content_show">
+            <el-radio :label="1">{{ $t('wu20240530.nurseConfig.icon_text') }}</el-radio>
+            <el-radio :label="2">{{ $t('wu20240530.nurseConfig.icon') }}</el-radio>
+            <el-radio :label="3">{{ $t('wu20240530.nurseConfig.text') }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item prop="basic">
+          <el-checkbox v-model="addForm.basic">{{ this.$t('nurseConfig.basic') }}</el-checkbox>
         </el-form-item>
         <el-form-item>
-          <el-checkbox v-model="addForm.bool_critical">{{this.$t('nurseConfig.boolCritical')}}</el-checkbox>
+          <el-checkbox v-model="addForm.bool_critical">{{ this.$t('nurseConfig.boolCritical') }}</el-checkbox>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click.native="addFormVisible = false">{{ this.$t('action.cancel') }}</el-button>
-        <el-button type="primary" :loading="addOptionLoading" @click.native="addSubmit">{{ this.$t('action.submit') }}</el-button>
+        <el-button type="primary" :loading="addOptionLoading" @click.native="addSubmit">{{
+            this.$t('action.submit')
+          }}
+        </el-button>
       </div>
     </el-dialog>
     <!--新增护理项界面-->
-    <el-dialog v-model="addFormOptionVisible" :title="myTitle" :visible.sync="addFormOptionVisible" :close-on-click-modal="false">
+    <el-dialog v-model="addFormOptionVisible" :title="myTitle" :visible.sync="addFormOptionVisible"
+               :close-on-click-modal="false">
       <el-form ref="addOptionForm" :model="addOptionForm" label-width="140px" :rules="addFormRules">
         <el-form-item :label="this.$t('nurseConfig.optionName')" prop="option_name">
-          <el-input v-model="addOptionForm.option_name" maxlength="100" />
+          <el-input v-model="addOptionForm.option_name" maxlength="100"/>
         </el-form-item>
         <el-form-item :label="this.$t('nurseConfig.optionColor')">
-          <colorPicker v-model="addOptionForm.color_rgb" />
+          <colorPicker v-model="addOptionForm.color_rgb"/>
+        </el-form-item>
+        <el-form-item :label="this.$t('wu20240530.nurseOption.icon_url')" prop="icon_url">
+          <el-avatar shape="square" :size="32" fit="fill" @click.native="chooseImage('option')"
+                     :src="addOptionForm.icon_url"></el-avatar>
+          <el-button type="text" v-if="addOptionForm.icon_url&&addOptionForm.icon_url.length" @click="clearIcon('option')">清除图标
+          </el-button>
+        </el-form-item>
+        <el-form-item :label="this.$t('wu20240530.nurseOption.content_show')" prop="content_show">
+          <el-radio-group v-model="addOptionForm.content_show">
+            <el-radio :label="1">{{ $t('wu20240530.nurseConfig.icon_text') }}</el-radio>
+            <el-radio :label="2">{{ $t('wu20240530.nurseConfig.icon') }}</el-radio>
+            <el-radio :label="3">{{ $t('wu20240530.nurseConfig.text') }}</el-radio>
+          </el-radio-group>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click.native="addFormOptionVisible = false">{{ this.$t('action.cancel') }}</el-button>
-        <el-button type="primary" :loading="addOptionLoading" @click.native="addOptionSubmit">{{ this.$t('action.submit') }}</el-button>
+        <el-button type="primary" :loading="addOptionLoading" @click.native="addOptionSubmit">
+          {{ this.$t('action.submit') }}
+        </el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :visible.sync="customerFormVisible" class="customer-dialog" width="60%">
+      <div slot="title" style="display: none;">
       </div>
+      <VueFinder id="vuefinder" :height="500" :select-button="handleSelectButton" theme="dark" :persist="true"
+                 max-file-size="50 GB" path="" :request="fileServer"></VueFinder>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
-import { unix2Date } from '@/utils/Foundation'
+import {AG_GRID_LOCALE_CN} from '@/utils/AgGridVueLocaleCn'
+import {unix2Date} from '@/utils/Foundation'
 import ButtonCellRender from '../../components/AgGridCellRender/ButtonCellRender'
 import * as API_NcsNurseConfig from '@/api/ncs_nurse_config'
 import * as API_NcsNurseConfigOption from '@/api/ncs_nurse_config_option'
 
 export default {
   name: 'NcsNurseConfigList',
-  components: { ButtonCellRender },
+  components: {ButtonCellRender},
   data() {
     return {
+      fileServer: domain.fileServer,
+      customerFormVisible: false,
+      imageBlockId: '',
+      chooseType:'',
+      handleSelectButton: {
+        // show select button
+        active: true,
+        // allow multiple selection
+        multiple: false,
+        filters: ['png'],
+        // handle click event
+        click: (items, event) => {
+          if (!items.length) {
+            return;
+          }
+          this.customerFormVisible=false
+          if(this.chooseType=== 'config'){
+            this.addForm.default_icon = `${domain.fileServer}${items[0].href}`
+            console.log('addForm',this.addForm)
+          }else if (this.chooseType==='option'){
+            this.addOptionForm.icon_url=`${domain.fileServer}${items[0].href}`
+          }
+        }
+      },
+
       listLoading: false,
       tagList1: [],
       tagList2: [],
@@ -177,10 +245,10 @@ export default {
       addLoading: false,
       addFormRules: {
         config_name: [
-          { required: true, message: this.$t('nurseConfig.inputConfigName'), trigger: 'blur' }
+          {required: true, message: this.$t('nurseConfig.inputConfigName'), trigger: 'blur'}
         ],
         option_name: [
-          { required: true, message: this.$t('nurseConfig.inputOptionName'), trigger: 'blur' }
+          {required: true, message: this.$t('nurseConfig.inputOptionName'), trigger: 'blur'}
         ]
       },
       addFormOptionVisible: false,
@@ -223,8 +291,7 @@ export default {
     }
   },
   beforeMount() {
-    this.gridOptions = {
-    }
+    this.gridOptions = {}
     this.columnDefs = [
       {
         headerName: '#',
@@ -236,20 +303,28 @@ export default {
         resizable: false,
         valueGetter: this.hashValueGetter
       },
-      { headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 80 },
-      { headerName: this.$t('nurseConfig.optionName'), field: 'option_name', sortable: true, flex: 1, filter: 'agTextColumnFilter', filterParams: {
-        debounceMs: 200,
-        newRowsAction: 'keep'
-      }
+      {headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 80},
+      {
+        headerName: this.$t('nurseConfig.optionName'),
+        field: 'option_name',
+        sortable: true,
+        flex: 1,
+        filter: 'agTextColumnFilter',
+        filterParams: {
+          debounceMs: 200,
+          newRowsAction: 'keep'
+        }
       },
       // lockPosition 锁定位置,会在第一列
       // lockPinned = true 不能拖动然后固定
       // resizeable 单元个大小是否可以调整
-      { headerName: this.$t('nurseConfig.colorRgb'), field: 'color_rgb', sortable: true, filter: false,
+      {
+        headerName: this.$t('nurseConfig.colorRgb'), field: 'color_rgb', sortable: true, filter: false,
         cellRenderer: this.colorFormatter
       },
 
-      { headerName: this.$t('action.edit'),
+      {
+        headerName: this.$t('action.edit'),
         cellRendererFramework: 'ButtonCellRender',
         cellRendererParams: {
           onClick: this.handEdit,
@@ -262,8 +337,10 @@ export default {
         lockPinned: true,
         width: 100,
         resizable: false,
-        sortable: false },
-      { headerName: this.$t('action.delete'),
+        sortable: false
+      },
+      {
+        headerName: this.$t('action.delete'),
         cellRendererFramework: 'ButtonCellRender',
         cellRendererParams: param => {
           return {
@@ -279,7 +356,8 @@ export default {
         width: 100,
         resizable: false,
         filter: false,
-        sortable: false }
+        sortable: false
+      }
     ]
     this.defaultColDef = {
       filter: 'agTextColumnFilter',
@@ -350,12 +428,14 @@ export default {
         this.myTitle = this.$t('nurseConfig.configAdd')
         this.addFormVisible = true
         this.addForm = {
-          index_no: 1
+          index_no: 1,
+          default_content_show: 3
         }
       } else if (type === 2) {
         this.addOptionForm = {
           option_name: null,
-          color_rgb: '#000000'
+          color_rgb: '#000000',
+          content_show: 3
         }
         this.pid = row.id
         this.myTitle = this.$t('nurseConfig.optionAdd')
@@ -363,7 +443,7 @@ export default {
       }
     },
     addOption() {
-      this.addNurseConfig(null, { id: this.pid }, 2)
+      this.addNurseConfig(null, {id: this.pid}, 2)
     },
     addOptionSubmit() {
       const _this = this
@@ -433,13 +513,15 @@ export default {
       this.addOredit = 'edit'
       this.myTitle = this.$t('nurseConfig.configEdit')
       if (type === 1) {
-        this.addForm = { ...row }
+        this.addForm = {...row, default_content_show: row.default_content_show||3}
         this.addFormVisible = true
       } else {
         this.addOptionForm = {
           id: row.id,
           option_name: row.option_name,
-          color_rgb: '#' + row.color_rgb
+          color_rgb: '#' + row.color_rgb,
+          icon_url: row.icon_url,
+          content_show: row.content_show||3
         }
         this.addFormOptionVisible = true
       }
@@ -512,15 +594,15 @@ export default {
       console.log('sortparam', param)
       const columnState = param.columnApi.getColumnState()
       // 排序状态
-      const sortState = columnState.filter(function(s) {
+      const sortState = columnState.filter(function (s) {
         return s.sort != null
-      }).map(function(s) {
+      }).map(function (s) {
         return {
           colId: s.colId,
           sort: s.sort,
           sortIndex: s.sortIndex
         }
-      }).sort(function(a, b) {
+      }).sort(function (a, b) {
         return a.sortIndex - b.sortIndex
       })
       if (sortState.length > 0) {
@@ -529,7 +611,7 @@ export default {
           this.params.dir = sortState[0].sort
         } else {
           let sortstring = ''
-          sortState.forEach(function(item) {
+          sortState.forEach(function (item) {
             sortstring += item.colId + ' ' + item.sort + ','
           })
           this.params.sort = sortstring.substring(0, sortstring.length - 1)
@@ -549,31 +631,47 @@ export default {
       console.log('model', JSON.stringify(model))
       this.params.filter = JSON.stringify(model)
       this.gettagList2()
+    },
+    clearIcon(type) {
+      if(type==='config') {
+        this.addForm.default_icon = ''
+      }else if (type==='option'){
+        this.addOptionForm.icon_url = ''
+      }
+
+    },
+    chooseImage(type) {
+      this.customerFormVisible = true
+      this.chooseType = type
     }
   }
 }
 </script>
 
 <style scoped>
-  .permission-container {
-    padding: 10px;
-    background-color: #fff;
-  }
-  .el-aside{
-    padding: 8px 10px;
-  }
-  .mytable {
-    width: 100%;
-    padding: 20px;
-    min-height: 480px;
-    cursor: pointer;
-    font-size: 16px;
-  }
-  /deep/ .colorBtn {
-    width: 80px !important;
-    height: 40px !important;
-  }
-  /deep/ .m-colorPicker .box.open{
-    z-index: 1000 !important;
-  }
+.permission-container {
+  padding: 10px;
+  background-color: #fff;
+}
+
+.el-aside {
+  padding: 8px 10px;
+}
+
+.mytable {
+  width: 100%;
+  padding: 20px;
+  min-height: 480px;
+  cursor: pointer;
+  font-size: 16px;
+}
+
+/deep/ .colorBtn {
+  width: 80px !important;
+  height: 40px !important;
+}
+
+/deep/ .m-colorPicker .box.open {
+  z-index: 1000 !important;
+}
 </style>

+ 6 - 0
src/views/ncs-orginazition/components/partInfoEdit.vue

@@ -507,6 +507,12 @@
                 <el-checkbox v-model="formmodel.bool_display_nc_title" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
+
+            <el-col :span="8">
+              <el-form-item :label="this.$t('zy20240611.boolTransfer')" prop="bool_transfer">
+                <el-checkbox v-model="formmodel.bool_transfer" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
+              </el-form-item>
+            </el-col>
           </el-row>
 
           <el-row>