Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/realTimeDashboardsConfig.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/realTimeDashboardsConfig.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/realTimeDashboardsConfig.js (revision 39172) @@ -0,0 +1,13 @@ +var realTimeDashboardsConfig = { + //中间显示的模块 + columnCenter: { + width: '50%', + items: [{ + dataSources: 'notificationOfPatientDischarge', + title: '病人出室通知', + height: '88%', + playVideo: true, + minuteInterval: 30 + }] + } +} \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js =================================================================== diff -u -r39125 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 39125) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 39172) @@ -391,6 +391,8 @@ syncOperation_AllowSyncWhenAnyNoMatchingOperationName:true, //启用回收后生成实例的功能 enableAnInstanceIsGeneratedAfterRecycled:true, +//启用数据实时看板 +enableRealTimeDashboardsForDataFunction:true, //器械包信息的默认查询数据排序方式 defaultSortingMethodOfTousseInstanceManager:"packing" } \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/index.jsp =================================================================== diff -u -r38999 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/index.jsp (.../index.jsp) (revision 38999) +++ ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/index.jsp (.../index.jsp) (revision 39172) @@ -32,6 +32,7 @@ + Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/interfaces/mybatis/FindPatientSurgicalStatusMapper.xml =================================================================== diff -u -r39122 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/interfaces/mybatis/FindPatientSurgicalStatusMapper.xml (.../FindPatientSurgicalStatusMapper.xml) (revision 39122) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/interfaces/mybatis/FindPatientSurgicalStatusMapper.xml (.../FindPatientSurgicalStatusMapper.xml) (revision 39172) @@ -18,4 +18,26 @@ ]]> + + + + \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/index.js =================================================================== diff -u -r38872 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/index.js (.../index.js) (revision 38872) +++ ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/index.js (.../index.js) (revision 39172) @@ -1,3 +1,4 @@ +//是否显示模块 var showUrgentAmount = false; var showNowTime = false; var showOnlineUserAmount = false; @@ -9,8 +10,11 @@ var showUrgentGoodsSummary = false; var showUrgentGoodsDetails = false; var showForeignTousseSummarySpecifyPeriod = false; +var showNotificationOfPatientDischarge = false; +//图表类型 var tousseSummaryChartType = ''; var foreignTousseSummaryChartType = ''; +//刷新时间 var refreshRateByOnlineUserAmount = 0; var refreshRateByUrgentAmount = 0; var refreshRateByOperationReservationSummary = 0; @@ -21,7 +25,13 @@ var refreshRateByUrgentGoodsSummary = 0; var refreshRateByUrgentGoodsDetails = 0; var refreshRateByForeignTousseSummarySpecifyPeriod = 0; - +var refreshRateByNotificationOfPatientDischarge = 0; +//ZSYY-395:显示间隔(notificationOfPatientDischarge专属属性) +var minuteInterval = 30; +var speakMsgByPatientDischarge = ''; +var speakStatusByPatientDischarge = 0; +var speakMsgByUrgentGoodsSummary = ''; +var speakStatusByUrgentGoodsSummary = 0; //当前时间 var m = 0; function getTime() { @@ -42,6 +52,50 @@ m++; }; +var playTime = null; +var speaker = new Speaker(); + +function playEnabled(name) { + speaker.enable(true); + if (name == 'PatientDischarge') { + speakStatusByPatientDischarge = 1; + if (speakMsgByPatientDischarge !== '') { + speaker.speak(speakMsgByPatientDischarge); + } + } else if (name == 'UrgentGoodsSummar') { + speakStatusByUrgentGoodsSummary = 1; + if (speakMsgByUrgentGoodsSummary !== '') { + speaker.speak(speakMsgByUrgentGoodsSummary); + } + } + $('.playDisabledBy' + name).hide(); + $('.playEnabledBy' + name).show(); +} + +function playDisabled(name) { + speaker.enable(false); + if (name == 'PatientDischarge') { + speakStatusByPatientDischarge = 0; + } else if (name == 'UrgentGoodsSummar') { + speakStatusByUrgentGoodsSummary = 0; + } + $('.playDisabledBy' + name).show(); + $('.playEnabledBy' + name).hide(); +} + +function playVideoToTime() { + var time = 30 * 60 * 1000; + if (urgentBroadcastFrequency && urgentBroadcastFrequency > 0) { + time = urgentBroadcastFrequency * 60 * 1000; + } + if (urgentMessage !== '') { + speaker.speak(urgentMessage); + } + playTime = setTimeout(function () { + playVideoToTime(); + }, time); +} + //获取人员总数 在线人数。 function getFirstSupplyRoomConfigOnlineUserDate() { var url = WWWROOT + '/jasperreports/jasperreportsAction!getFirstSupplyRoomConfigOnlineUserDate.do'; @@ -375,6 +429,7 @@ if (result.success) { var data = result.message || []; var html = ''; + var speakMsg = '当前待发货加急物品'; html += '
'; for (var k = 0; k < urgentGoodsSummaryHeaders.length; k++) { html += '' + urgentGoodsSummaryHeaders[k].header + ''; @@ -394,10 +449,15 @@ } html += ''; html += '
'; + speakMsg += data[i].tousseName + '共' + data[i].urgentAmount + '个、'; } + speakMsgByUrgentGoodsSummary = speakMsg; + if (speakStatusByUrgentGoodsSummary == 1 && speakMsg !== '') { + speaker.speak(speakMsg); + } } html += ''; - $('#urgentGoodsSummary').html(html) + $('#urgentGoodsSummary').html(html); } } }) @@ -546,6 +606,64 @@ }) } +//ZSYY-395:获取病人出室通知数据 +function getPatientDischargeNotificationData() { + var url = WWWROOT + '/disinfectSystem/useRecordAction!patientDischargeNotification.do'; + $.ajax({ + type: 'post', + dataType: 'json', + url: url, + timeout: 300000, + data: { + minuteInterval: minuteInterval + }, + success: function (result) { + if (result.success) { + var data = result.data || []; + var html = ''; + var contentHeight = $('#notificationOfPatientDischarge').height() - 40; + html += '
'; + for (var k = 0; k < patientDischargeHeaders.length; k++) { + var width = patientDischargeHeaders[k].width; + var align = patientDischargeHeaders[k].align || 'center'; + var color = patientDischargeHeaders[k].color || ''; + var header = patientDischargeHeaders[k].header || ''; + html += '' + header + ''; + } + html += '
'; + html += '
'; + if (data.length < parseInt(contentHeight / 40)) { + html += '
'; + } else { + html += '
'; + } + var speakMsg = ''; + if (data.length > 0) { + for (var i = 0; i < data.length; i++) { + speakMsg += '手术间【' + data[i]["operationRoom"] + '】的台次【' + data[i]["operationTableNum"] + '】患者已出室。手术间【' + data[i]["operationRoom"] + '】的台次【' + data[i]["operationTableNum"] + '】患者已出室。' + html += '
'; + for (var k = 0; k < patientDischargeHeaders.length; k++) { + var width = patientDischargeHeaders[k].width; + var align = patientDischargeHeaders[k].align || 'center'; + var color = patientDischargeHeaders[k].color || ''; + var dataIndex = patientDischargeHeaders[k].dataIndex || ''; + html += '' + (data[i][dataIndex] || 0) + ''; + } + html += ''; + html += '
'; + } + } + html += '
'; + $('#notificationOfPatientDischarge').html(html); + speakMsgByPatientDischarge = speakMsg; + if (speakStatusByPatientDischarge == 1 && speakMsg !== '') { + speaker.speak(speakMsg); + } + } + } + }) +} + //获取模块函数 function getModuleFun(realTimeDashboardsConfig) { var realTimeDashboardsObj = JSON.parse(realTimeDashboardsConfig); @@ -569,7 +687,7 @@ } else if (name == 'operationReservationSummaryBox') { showOperationReservationSummary = true; refreshRateByOperationReservationSummary = refreshRate; - if (height > 25) { + if (parseInt(height) > 25) { return operationReservationSummaryBox(title, 1); } else { return operationReservationSummaryBox(title, 2); @@ -611,7 +729,7 @@ urgentGoodsSummaryHeaders = headers } refreshRateByUrgentGoodsSummary = refreshRate; - return urgentGoodsSummaryBox(title); + return urgentGoodsSummaryBox(title, realTimeDashboardsObj.playVideo); } else if (name == 'urgentGoodsDetailsBox') { showUrgentGoodsDetails = true; if (headers.length > 0) { @@ -624,6 +742,14 @@ refreshRateByForeignTousseSummarySpecifyPeriod = refreshRate; foreignTousseSummaryChartType = chartType || 'bar'; return foreignTousseSummarySpecifyPeriodBox(title); + } else if (name == 'notificationOfPatientDischargeBox') { + showNotificationOfPatientDischarge = true; + if (headers.length > 0) { + patientDischargeHeaders = headers + } + refreshRateByNotificationOfPatientDischarge = refreshRate; + minuteInterval = realTimeDashboardsObj.minuteInterval; + return notificationOfPatientDischargeBox(title, realTimeDashboardsObj.playVideo); } } @@ -655,9 +781,15 @@ if (realTimeDashboardsConfig) { if (realTimeDashboardsConfig.columnLeft && realTimeDashboardsConfig.columnLeft.items.length > 0) { var length = (realTimeDashboardsConfig.columnLeft.items.length > 3) ? 3 : realTimeDashboardsConfig.columnLeft.items.length; - if (realTimeDashboardsConfig.columnLeft && realTimeDashboardsConfig.columnLeft.width > 0) { + if (realTimeDashboardsConfig.columnLeft && realTimeDashboardsConfig.columnLeft.width) { + var width = 0; + if (typeof realTimeDashboardsConfig.columnLeft.width == 'number') { + width = realTimeDashboardsConfig.columnLeft.width + '%'; + } else { + width = realTimeDashboardsConfig.columnLeft.width; + } $('.columnLeft').css({ - width: realTimeDashboardsConfig.columnLeft.width + '%' + width: width }) var columnLeftHtml = '' for (var i = 0; i < length; i++) { @@ -667,16 +799,23 @@ var type = realTimeDashboardsConfig.columnLeft.items[i].type; var refreshRate = realTimeDashboardsConfig.columnLeft.items[i].refreshRate; var headers = realTimeDashboardsConfig.columnLeft.items[i].headers || []; + var minuteInterval = realTimeDashboardsConfig.columnLeft.items[i].minuteInterval || 30; + var playVideo = realTimeDashboardsConfig.columnLeft.items[i].playVideo || false; + if (typeof height == 'number') { + height = height + '%'; + } var realTimeDashboardsObj = { dataSources: dataSources, title: title, height: height, type: type, refreshRate: refreshRate, + minuteInterval: minuteInterval, + playVideo: playVideo, headers: headers } - if (height > 0) { - columnLeftHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; + if (height !== '') { + columnLeftHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; } } $('.columnLeft').html(columnLeftHtml); @@ -688,9 +827,15 @@ } if (realTimeDashboardsConfig.columnCenter && realTimeDashboardsConfig.columnCenter.items.length > 0) { var length = (realTimeDashboardsConfig.columnCenter.items.length > 3) ? 3 : realTimeDashboardsConfig.columnCenter.items.length; - if (realTimeDashboardsConfig.columnCenter && realTimeDashboardsConfig.columnCenter.width > 0) { + if (realTimeDashboardsConfig.columnCenter && realTimeDashboardsConfig.columnCenter.width) { + var width = 0; + if (typeof realTimeDashboardsConfig.columnCenter.width == 'number') { + width = realTimeDashboardsConfig.columnCenter.width + '%'; + } else { + width = realTimeDashboardsConfig.columnCenter.width; + } $('.columnCenter').css({ - width: realTimeDashboardsConfig.columnCenter.width + '%' + width: width }) var columnCenterHtml = '' for (var i = 0; i < length; i++) { @@ -700,16 +845,23 @@ var type = realTimeDashboardsConfig.columnCenter.items[i].type; var refreshRate = realTimeDashboardsConfig.columnCenter.items[i].refreshRate; var headers = realTimeDashboardsConfig.columnCenter.items[i].headers || []; + var minuteInterval = realTimeDashboardsConfig.columnCenter.items[i].minuteInterval || 30; + var playVideo = realTimeDashboardsConfig.columnCenter.items[i].playVideo || false; + if (typeof height == 'number') { + height = height + '%'; + } var realTimeDashboardsObj = { dataSources: dataSources, title: title, height: height, type: type, refreshRate: refreshRate, + minuteInterval: minuteInterval, + playVideo: playVideo, headers: headers } - if (height > 0) { - columnCenterHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; + if (height !== '') { + columnCenterHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; } } $('.columnCenter').html(columnCenterHtml); @@ -721,9 +873,15 @@ } if (realTimeDashboardsConfig.columnRight && realTimeDashboardsConfig.columnRight.items.length > 0) { var length = (realTimeDashboardsConfig.columnRight.items.length > 3) ? 3 : realTimeDashboardsConfig.columnRight.items.length; - if (realTimeDashboardsConfig.columnCenter && realTimeDashboardsConfig.columnRight.width > 0) { + if (realTimeDashboardsConfig.columnCenter && realTimeDashboardsConfig.columnRight.width) { + var width = 0; + if (typeof realTimeDashboardsConfig.columnRight.width == 'number') { + width = realTimeDashboardsConfig.columnRight.width + '%'; + } else { + width = realTimeDashboardsConfig.columnRight.width; + } $('.columnRight').css({ - width: realTimeDashboardsConfig.columnRight.width + '%' + width: width }) var columnRightHtml = '' for (var i = 0; i < length; i++) { @@ -733,16 +891,23 @@ var type = realTimeDashboardsConfig.columnRight.items[i].type; var refreshRate = realTimeDashboardsConfig.columnRight.items[i].refreshRate; var headers = realTimeDashboardsConfig.columnRight.items[i].headers || []; + var minuteInterval = realTimeDashboardsConfig.columnRight.items[i].minuteInterval || 30; + var playVideo = realTimeDashboardsConfig.columnRight.items[i].playVideo || false; + if (typeof height == 'number') { + height = height + '%'; + } var realTimeDashboardsObj = { dataSources: dataSources, title: title, height: height, type: type, refreshRate: refreshRate, + minuteInterval: minuteInterval, + playVideo: playVideo, headers: headers } - if (height > 0) { - columnRightHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; + if (height !== '') { + columnRightHtml += '
' + getModuleFun(JSON.stringify(realTimeDashboardsObj)) + '
'; } } $('.columnRight').html(columnRightHtml); @@ -838,6 +1003,14 @@ setInterval(getForeignTousseSummarySpecifyPeriodData, refreshRateByForeignTousseSummarySpecifyPeriod); } } + + //ZSYY-395:病人出室通知 + if (showNotificationOfPatientDischarge) { + getPatientDischargeNotificationData(); + if (refreshRateByNotificationOfPatientDischarge > 0) { + setInterval(getPatientDischargeNotificationData, refreshRateByNotificationOfPatientDischarge); + } + } })(); //加急数量模块 @@ -988,10 +1161,23 @@ } //加急物品汇总功能 -function urgentGoodsSummaryBox(title) { +function urgentGoodsSummaryBox(title, playVideo) { var html = ''; html += '
'; - html += '

' + title + '

'; + html += '

' + title + '

'; + html += '
'; + html += ''; + if (playVideo) { + html += ''; + } else { + html += ''; + html += '
'; + html += '
'; html += '
'; html += '
'; html += '
数据加载中,请稍后...
'; @@ -1031,6 +1217,33 @@ return html; } +//ZSYY-395:病人出室通知 +function notificationOfPatientDischargeBox(title, playVideo) { + var html = ''; + html += '
'; + html += '

' + title + '

'; + html += '
'; + html += ''; + if (playVideo) { + html += ''; + } else { + html += ''; + html += '
'; + html += '
'; + html += '
'; + html += '
'; + html += '
数据加载中,请稍后...
'; + html += '
'; + html += '
'; + html += '
'; + return html; +} + function fillZero(str) { var realNum; if (str < 10) { Index: ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/css/index.css =================================================================== diff -u -r38635 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/css/index.css (.../index.css) (revision 38635) +++ ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/css/index.css (.../index.css) (revision 39172) @@ -62,6 +62,7 @@ margin: 0 auto; background: url(../images/logo.png) no-repeat 0 0 / contain; display: flex; + justify-content: space-between; padding: 3.667rem 0.833rem 0; height: 100%; position: relative; @@ -110,6 +111,10 @@ color: #fff; } +.panel .inner .img { + margin-right: 1.5rem; +} + .urgentAmount .inner { display: flex; justify-content: space-between; @@ -130,6 +135,7 @@ .deviceUsageSummary .inner, .urgentGoodsSummary .inner, +.notificationOfPatientDischarge .inner, .urgentGoodsDetails .inner { padding: 1rem 0; display: flex; @@ -138,6 +144,7 @@ .deviceUsageSummary .inner h3, .urgentGoodsSummary .inner h3, +.notificationOfPatientDischarge .inner h3, .urgentGoodsDetails .inner h3 { margin-left: 1.5rem; margin-bottom: 1rem; @@ -160,13 +167,15 @@ .deviceUsageSummary .content, .urgentGoodsSummary .content, +.notificationOfPatientDischarge .content, .urgentGoodsDetails .content { flex: 1; position: relative; } .deviceUsageSummary .head, .urgentGoodsSummary .head, +.notificationOfPatientDischarge .head, .urgentGoodsDetails .head { background: rgba(255, 255, 255, 0.1); font-size: 0.583rem; @@ -179,6 +188,7 @@ .deviceUsageSummary .marquee-view, .urgentGoodsSummary .marquee-view, +.notificationOfPatientDischarge .marquee-view, .urgentGoodsDetails .marquee-view { position: absolute; top: 1.6rem; @@ -189,6 +199,7 @@ .deviceUsageSummary .row, .urgentGoodsSummary .row, +.notificationOfPatientDischarge .row, .urgentGoodsDetails .rowForUrgentGoodsDetails { line-height: 1.05; padding: 0.5rem 1.5rem; @@ -201,19 +212,22 @@ .deviceUsageSummary .row:hover, .urgentGoodsSummary .row:hover, +.notificationOfPatientDischarge .row:hover, .urgentGoodsDetails .rowForUrgentGoodsDetails:hover { color: #68d8ff; background: rgba(255, 255, 255, 0.1); } .deviceUsageSummary .row:hover .icon-dot, .urgentGoodsSummary .row:hover .icon-dot, +.notificationOfPatientDischarge .row:hover .icon-dot, .urgentGoodsDetails .rowForUrgentGoodsDetails:hover .icon-dot { opacity: 1; } .deviceUsageSummary .icon-dot, .urgentGoodsSummary .icon-dot, +.notificationOfPatientDischarge .icon-dot, .urgentGoodsDetails .icon-dot { position: absolute; left: 0.64rem; @@ -222,6 +236,7 @@ .deviceUsageSummary .marquee-view, .urgentGoodsSummary .marquee-view, +.notificationOfPatientDischarge .marquee-view, .urgentGoodsDetails .marquee-view { position: absolute; top: 1.6rem; @@ -276,6 +291,16 @@ animation-play-state: paused; } +.notificationOfPatientDischarge .marquee { + animation: 20s rowForUrgentGoodsDetails linear infinite; + position: relative; +} + +/*鼠标划入 停止动画 */ +.notificationOfPatientDischarge .marquee:hover { + animation-play-state: paused; +} + .tousseSummary, .foreignTousseSummary, .foreignTousseSummary_SpecifyPeriod { Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/his.xml =================================================================== diff -u -r39122 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/his.xml (.../his.xml) (revision 39122) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/his.xml (.../his.xml) (revision 39172) @@ -132,13 +132,23 @@ - + --> + + + + + + + @@ -158,10 +168,14 @@ - + + + + + Index: ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/headerColumn.js =================================================================== diff -u -r38774 -r39172 --- ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/headerColumn.js (.../headerColumn.js) (revision 38774) +++ ssts-web/src/main/webapp/disinfectsystem/realTimeDashboards/js/headerColumn.js (.../headerColumn.js) (revision 39172) @@ -210,4 +210,36 @@ }, { name: '签收', dataIndex: 'signedAmount' +}] +//ZSYY-395:病人出室通知 +var patientDischargeHeaders = [{ + header: '病人出室时间', + dataIndex: 'exitTime', + width: '20%', + align: 'center', + color: '#ffff00' +}, { + header: '手术间', + dataIndex: 'operationRoom', + width: '20%', + align: 'center', + color: '#ffff00' +}, { + header: '手术台次', + dataIndex: 'operationTableNum', + width: '20%', + align: 'center', + color: '#ffff00' +}, { + header: '手术名称', + dataIndex: 'operation', + width: '20%', + align: 'center', + color: '#ffff00' +}, { + header: '手术医生', + dataIndex: 'doctorName', + width: '20%', + align: 'center', + color: '#ffff00' }] \ No newline at end of file