const $ = require('jquery'); require("../css/reset.less") require("../css/console.less") require("../images/logo.png") require("../images/arrow_down.png") // import 'zrender/lib/svg/svg'; const {api} = require('./api.js') const echarts = require('echarts'); const {post,setCookie,delCookie,getCookie} = require('../js/utils.js'); let payMoney = [],dayLis = [],dateType = 2,slideType = 1,hospital=getCookie("hospital"); $(function(){ if(!hasData('YH-KZT')){ $("body").html('') } if(hospital == "台州市立"){ $(".part03 .partTitlePub .name").html('各科室甲级病例占比') }else{ $(".part03 .partTitlePub .name").html('病案首页合格率') } $(".partTitle p span").html(hospital) setInterval(() => { getTimeDetail() }, 1000); resizeBox() initConsole()//质控列表 getBarData(2)//图标数据获取 dateChange() $(window).click(function(){ window.parent.userActionHide() $(".toggleSlide ul").css("display","none") }) let sildeIS = true if(!hasData('FUNC000045')&&!hasData('FUNC000046')){ $(".toggleSlide").css("opacity","0.5") sildeIS = false } $(".toggleSlide p").click(function(e){ if(!sildeIS)return e.stopPropagation() $(this).next().slideToggle() }) $(".toggleSlide li").click(function(){ let str = $(this).attr("data-str"),type = $(this).attr("data-type") if(type == 1){ if(!hasData('FUNC000045')){ return } slideType = 1 $(".pubEchart .title").html("科室平均住院天数柱状图") barChart(dayLis,dateType) }else{ if(!hasData('FUNC000046')){ return } slideType = 2 $(".pubEchart .title").html("科室平均住院花费柱状图") barChart(payMoney,dateType) } $(this).parent().slideToggle().prev().find("span").html(str) }) getDetails() }) function getDetails(){ $(".part02 .bingli,.part02 .bingliLis,.part03 .circle .title,.pubEchartB.paymoney .title").click(function(){ $(parent.document).find("#contentIframe").attr("src","deptScoreDetailControl.html") }) $(".part03 .partTitlePub").click(function(){ $(parent.document).find("#contentIframe").attr("src",hospital=="台州市立"?"jiaji.html":"partDetailControl.html") }) $(".paymoney.pubEchart .title").click(function(){ $(parent.document).find("#contentIframe").attr("src","dayDetail.html") }) $(".defect .partTitlePub").click(function(){//from 1 console / 2 deptConsole $(parent.document).find("#contentIframe").attr("src","mukuai.html?from=1&dateType="+dateType) }) $(".circleB .title").click(function(){ $(parent.document).find("#contentIframe").attr("src","tiaomu.html?from=1&dateType="+dateType) }) } //判断有无某一权限 function hasData(data){ let lis = JSON.parse(getCookie("codeLis")) // console.log(lis) if(lis.indexOf(data)>-1){//有权限 return true } return false; } function resizeBox(){ $(".partWrap").css({ height:$(window).height()-38+'px' }) } //所有数据切换日期筛选 function dateChange(){ $(".monthYear .mon").click(function(){ $(this).css({ backgroundColor:'#5A8EEE', color:'#fff' }).siblings().css({ color:'#5A8EEE', backgroundColor:'#fff' }) dateType = 1 getBarData(1) }) $(".monthYear .year").click(function(){ $(this).css({ backgroundColor:'#5A8EEE', color:'#fff' }).siblings().css({ color:'#5A8EEE', backgroundColor:'#fff' }) dateType = 2 getBarData(2) }) } //控制台数 function initConsole(result){ let url = { '本月病历数':require("../images/icon6.png"), '本月不合格病历-机器':require("../images/icon7.png"), '本月质控数-机器':require("../images/icon10.png"), '本月甲级病历-机器':require("../images/icon8.png"), '本月乙级病历-机器':require("../images/icon9.png"), '本年病历数':require("../images/icon6.png"), '本年不合格病历-机器':require("../images/icon7.png"), '本年质控数-机器':require("../images/icon10.png"), '本年甲级病历-机器':require("../images/icon8.png"), '本年乙级病历-机器':require("../images/icon9.png"), } let dom = ''; for(let i in result){ if(i.indexOf("人工")==-1){ let name = i.split("-")[0]; let num = 0; if(name=='本月病历数'||name=='本年病历数'){ num = result[i] }else{ num = result[name+'-人工']+result[i] } dom += `
  • ${name}

    ${num}

  • ` } } $(".partAll").html(dom) } //获取图表数据 function getBarData(type){ if(hasData('FUNC000045')){ post(api.getAverageDayNum,{//平均住院天数 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result2 = data.data['平均住院日']||[] dayLis = result2 if(slideType == 1){ barChart(result2,type||1) } } }) }else{ $(".toggleSlide1").css("opacity",0.5) } if(hasData('FUNC000046')){ post(api.getAverageFee,{//平均住院费用 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result3 = data.data['平均住院费用']||[] payMoney = result3; if(slideType == 2){ barChart(result3,type||1) } } }) }else{ $(".toggleSlide2").css("opacity",0.5) } if(hasData('FUNC000047')){ post(api.getAverageScore,{//各科室质控平均分 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result1 = data.data['各科室质控平均分']||[] let dataX1=[],dataY1=[] for(let i = 0;i < result1.length;i++){ dataX1.push(result1[i].name) dataY1.push(result1[i].averageValue) } barChartPay(dataX1,dataY1) } }) } if(hasData('FUNC000048')&&hospital=="台州市立"){ post(api.getLevelResultDept,{//各科室甲级占比 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result2 = data.data['各科室甲级病历占比']||[] let dataX2=[],dataY2=[]; for(let i = 0;i < result2.length;i++){ dataX2.push(result2[i].deptName) dataY2.push(result2[i].firstPercent.replace('%','')) } lineChart(dataX2,dataY2) } }) } if(hasData('FUNC000075')&&hospital=="长兴医院"){ post(api.homePageLevelLimit,{//病案首页 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result1 = data.data||[] let dataX1=[],dataY1=[] for(let i = 0;i < result1.length;i++){ dataX1.push(result1[i].deptName) dataY1.push(result1[i].firstLevelPercentStr.replace('%','')) } lineChartSpecial(dataX1,dataY1) } }) } if(hasData('FUNC000049')){ post(api.leaveHosCount,{//出院人数统计 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ // barChart(result2,type||1) // console.log(data) let result1 = data.data['出院人数统计']||[] personNum(result1) } }) } if(hasData('FUNC000050')){ post(api.mrCount,{//质控病历统计 "type": type||1//1月2年 }).then((res)=>{ let data = res.data if(data.code == 0){ let result3 = data.data['病历数统计']||[] if(result3.length == 0){ result3 = [ { "id":null, "name":"累计质控病历数", "totleNum":0, "num":0, "percent":null, "percentStr":null }, { "id":null, "name":"甲级病历", "totleNum":10, "num":0, "percent":0, "percentStr":"0.00%" }, { "id":null, "name":"乙级病历", "totleNum":10, "num":0, "percent":0, "percentStr":"0.00%" }, { "id":null, "name":"丙级病历", "totleNum":10, "num":0, "percent":0, "percentStr":"0.00%" } ] } setNumDetail(result3) } }) } if(hasData('FUNC000051')){ post(api.entryCountGroupByCase,{//各模块缺陷占比排行 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result1 = data.data['各模块缺陷占比排行']||[] queList(result1) } }) } if(hasData('FUNC000052')){ post(api.entryCountGroupByEntry,{//条目缺陷占比 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result3 = data.data['条目缺陷占比']||[] for(let i = 0;i < result3.length;i++){ result3[i].value = result3[i].num } emptyCircleB(result3) panDetailB(result3) } }) } if(hasData('FUNC000053')){ post(api.entryByDept,{//各科室缺陷占比 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result2 = data.data['各科室缺陷占比']||[] for(let i = 0;i < result2.length;i++){ result2[i].value = result2[i].num } emptyCircle(result2) panDetail(result2) } }) } } //part01 function personNum(data){ $(".personNum").html("总人数:"+data['总人数']) $(".died").html(data['死亡人数']) $(".newborn").html(data['新生儿人数']) $(".patientNum").html(data['手术病人数']) } //part02 function setNumDetail(data){ // console.log(data,2222222222) if(data.length == 0)return let str = '' for(let i = 0;i < data.length;i++){ str += `
  • ${data[i].num}

    ${data[i].name}

  • ` if(data[i].name == '甲级病历'){ let tmp = [] data[i].value = data[i].num tmp.push(data[i]) tmp.push({percentStr:(1-data[i].percent)*100+'%',value:data[i].totleNum - data[i].num}) part02pan(tmp,'fen01') } if(data[i].name == '乙级病历'){ let tmp = [] data[i].value = data[i].num tmp.push(data[i]) tmp.push({percentStr:(1-data[i].percent)*100+'%',value:data[i].totleNum - data[i].num}) part02pan(tmp,'fen02') } if(data[i].name == '丙级病历'){ let tmp = [] data[i].value = data[i].num tmp.push(data[i]) tmp.push({percentStr:(1-data[i].percent)*100+'%',value:data[i].totleNum - data[i].num}) part02pan(tmp,'fen03') } } $('.bingli').html(str) } //part02pan function part02pan(data,dom){ // console.log(data,33333) dom = echarts.init(document.getElementById(dom)); $(window).resize(function(){ dom.resize() }); let bgColor = '#fff'; let title = '总量'; let color = ['#37CBCB','#dedede']; let echartData = data; option = { backgroundColor: bgColor, color: color, title: [{ text:'{val|' + echartData[0].percentStr + '}', top: 'center', left: 'center', textStyle: { rich: { val: { fontSize: 14, color: '#333', fontWeight: 'bold', padding: [10, 0] }, name: { fontSize: 12, fontWeight: 'normal', color: '#777', } } } }], series: [{ name: '', type: 'pie', radius: ['70%', '90%'], data: echartData, hoverAnimation:false, label: { normal: { show:false, } }, }] }; dom.setOption(option); } //折现图 function lineChart(dataX,dataY){ var myCharts = echarts.init(document.getElementById('lineChart')); $(window).resize(function(){ myCharts.resize() }); option = { color:"#5A8EEE", tooltip: { trigger: 'axis', color:'#fff', formatter: function(param) { return '
    '+ param[0].name + "
    " +"甲级病历占比:"+ param[0].value+"%" + "
    " '
    ' } }, grid: { left: '3%', right: '5%', bottom: '3%', containLabel: true }, title:[{ text: dataX.length>0?'百分比':'', top: 15, left: 0, textStyle: { fontSize: 14, color:'#666666', fontWeight: 400 } }], toolbox: { show: false, feature: { dataZoom: { yAxisIndex: 'none' }, dataView: {readOnly: false}, magicType: {type: ['line', 'bar']}, restore: { }, saveAsImage: {} }, emphasis:{ iconStyle:{ color:'red' } }, }, xAxis: { type: 'category', boundaryGap: false, data: dataX, axisLabel: {//x轴刻度 textStyle: { color: '#333' }, rotate:'45', formatter: function (value) { //x轴的文字改为竖版显示 if(value.length>7){ return value.slice(0,7)+'...' } return value; } }, axisLine: {//x轴 lineStyle:{ color:'#AAAAAA' } } }, yAxis: { type: 'value', axisLabel: { formatter: '{value} %', textStyle: { color: '#333333' } }, axisLine: {//y轴 show: false }, axisTick: { show: false }, splitLine:{//分割线 lineStyle:{ color:'#EFF3FC' } } }, series: [ { name: '甲级病历占比:', type: 'line', data: dataY, } ] }; myCharts.setOption(option); } function lineChartSpecial(dataX,dataY){ var myCharts = echarts.init(document.getElementById('lineChart')); var lengthNum = dataX.length; $(window).resize(function(){ myCharts.resize() }); option = { color: ['#3398DB'], tooltip: { trigger: 'axis', position: 'right', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'line' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', data: dataX, axisTick: { alignWithLabel: true }, axisLabel: {//x轴刻度 textStyle: { color: '#333' }, rotate:45, formatter: function (value) { //x轴的文字改为竖版显示 if(value.length>7){ return value.slice(0,7)+'...' } return value; } }, axisLine: {//x轴 lineStyle:{ color:'#AAAAAA' } } } ], yAxis: [ { type: 'value', axisLine: {//y轴 show: false }, axisTick: { show: false }, axisLabel: {//y轴刻度 textStyle: { color: '#333333' } }, splitLine:{//分割线 lineStyle:{ color:'#EFF3FC' } } } ], title:[{ text: '合格率', top: 15, left: 10, textStyle: { fontSize: 14, color:'#666666', fontWeight: 400 } }], series: [ { name: '质控平均分', type: 'bar', barWidth: '23%', data: dataY } ] }; myCharts.setOption(option); } //柱状图住院费用 function barChartPay(dataX,dataY){ var myCharts = echarts.init(document.getElementById('barChartPay')); var lengthNum = dataX.length; $(window).resize(function(){ myCharts.resize() }); option = { color: ['#3398DB'], tooltip: { trigger: 'axis', position: 'right', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'line' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', data: dataX, axisTick: { alignWithLabel: true }, axisLabel: {//x轴刻度 textStyle: { color: '#333' }, rotate:45, formatter: function (value) { //x轴的文字改为竖版显示 if(value.length>7){ return value.slice(0,7)+'...' } return value; } }, axisLine: {//x轴 lineStyle:{ color:'#AAAAAA' } } } ], yAxis: [ { type: 'value', axisLine: {//y轴 show: false }, axisTick: { show: false }, axisLabel: {//y轴刻度 textStyle: { color: '#333333' } }, splitLine:{//分割线 lineStyle:{ color:'#EFF3FC' } } } ], title:[{ text: '分数', top: 15, left: 10, textStyle: { fontSize: 14, color:'#666666', fontWeight: 400 } }], series: [ { name: '质控平均分', type: 'bar', barWidth: '23%', data: dataY } ] }; myCharts.setOption(option); } //柱状图住院日期 function barChart(data,type){ // console.log(data,type) var myChart = echarts.init(document.getElementById('barChart')); $(window).resize(function(){ myChart.resize() }); var posList = [ 'left', 'right', 'top', 'bottom', 'inside', 'insideTop', 'insideLeft', 'insideRight', 'insideBottom', 'insideTopLeft', 'insideTopRight', 'insideBottomLeft', 'insideBottomRight' ]; let app = {} app.configParameters = { rotate: { min: -90, max: 90 }, align: { options: { left: 'left', center: 'center', right: 'right' } }, verticalAlign: { options: { top: 'top', middle: 'middle', bottom: 'bottom' } }, position: { options: echarts.util.reduce(posList, function (map, pos) { map[pos] = pos; return map; }, {}) }, distance: { min: 0, max: 100 } }; app.config = { rotate: 90, align: 'left', verticalAlign: 'middle', position: 'insideBottom', distance: 15, onChange: function () { var labelOption = { normal: { rotate: app.config.rotate, align: app.config.align, verticalAlign: app.config.verticalAlign, position: app.config.position, distance: app.config.distance } }; myChart.setOption({ series: [{ label: labelOption }, { label: labelOption }, { label: labelOption }, { label: labelOption }] }); } }; var labelOption = { show: false, position: app.config.position, distance: app.config.distance, align: app.config.align, verticalAlign: app.config.verticalAlign, rotate: app.config.rotate, formatter: '{c} {name|{a}}', fontSize: 12, rich: { name: { textBorderColor: '#fff' } } }; let dataX = [] let data1 = [] let data2 = [] let data3 = [] for(let i = 0;i < data.length;i++){ dataX.push(data[i].name) data1.push(data[i].averageValue)//本月 data2.push(data[i].lastAverageValue)//本年 data3.push(data[i].lastYearAverageValue)//去年本月 } option = { color: ['#5A8EEE', '#FAD336', '#37CBCB'], tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, title:[{ text: slideType==1?'天数':'元', top: 15, left: 10, textStyle: { fontSize: 14, color:'#666666', fontWeight: 400 } }], legend: { itemWidth :10, itemHeight :10, right:15, top:15, selectedMode:false, formatter: function (name) { return name; } }, toolbox: { show: false, orient: 'vertical', left: 'right', top: 'center', feature: { mark: {show: true}, dataView: {show: true, readOnly: false}, magicType: {show: true, type: ['line', 'bar', 'stack', 'tiled']}, restore: {show: true}, saveAsImage: {show: true} } }, xAxis: [ { type: 'category', axisTick: {show: false}, data: dataX, axisLabel: {//x轴刻度 textStyle: { color: '#333' }, rotate:'45', formatter: function (value) { //x轴的文字改为竖版显示 if(value.length>7){ return value.slice(0,7)+'...' } return value; } }, axisLine: {//x轴 lineStyle:{ color:'#AAAAAA' } }, } ], yAxis: [ { type: 'value', axisLine: {//y轴 show: false }, axisTick: { show: false }, splitLine:{//分割线 lineStyle:{ color:'#EFF3FC' } } } ], series: [ { name: type==1?'上月':'', type: 'bar', barGap: 0, label: labelOption, barWidth: '15%', data: type==1?data2:[] }, { name: type==1?'去年本月':'去年', type: 'bar', label: labelOption, barWidth: '15%', data: data3 }, { name: type==1?'本月':'本年', type: 'bar', label: labelOption, barWidth: '15%', data: data1 } ] }; myChart.setOption(option); } //空心饼图 function emptyCircle(data){ // console.log(data,1111111111) var myChart = echarts.init(document.getElementById('emptyCircle')); $(window).resize(function(){ myChart.resize() }); let bgColor = '#fff'; let title = '总量'; let color = ['#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336','#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336']; let echartData = data; let total = 0; for(let i = 0;i < echartData.length;i++){ total += echartData[i].num } option = { backgroundColor: bgColor, color: color, title: [{ text: data.length>0?'{val|' + total + '}\n{name|' + title + '}':'', top: 'center', left: 'center', textStyle: { rich: { val: { fontSize: 24, color: '#333', fontWeight: 'bold', padding: [10, 0] }, name: { fontSize: 12, fontWeight: 'normal', color: '#777', } } } }], tooltip: { trigger: 'item', // formatter: '{b} : {c} ({d}%)', formatter:function(item){ const {name, num, percentStr} = item.data return `${name} : ${num} (${percentStr})` } }, series: [{ name: '', type: 'pie', radius: ['70%', '90%'], data: echartData, hoverAnimation:true, hoverOffset:5, itemStyle: { normal: { borderColor: bgColor, borderWidth: 2 } }, labelLine: { normal: { length: 20, length2: 120, lineStyle: { color: '#e6e6e6' } } }, label: { normal: { show:false, formatter: params => { return params.name == 'A类'?params.name:'' }, padding: [0 , -100, 25, -100], rich: { icon: { fontSize: 16 }, name: { fontSize: 14, padding: [0, 10, 0, 4], color: '#666666' }, value: { fontSize: 18, fontWeight: 'bold', color: '#333333' } } } }, }] }; myChart.setOption(option); } function emptyCircleB(data){ var myChart = echarts.init(document.getElementById('emptyCircleB')); $(window).resize(function(){ myChart.resize() }); let bgColor = '#fff'; let title = '总量'; let color = ['#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336','#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336']; let echartData = data; let total = 0; for(let i = 0;i < echartData.length;i++){ total += echartData[i].num } option = { backgroundColor: bgColor, color: color, title: [{ text: data.length>0?'{val|' + total + '}\n{name|' + title + '}':'', top: 'center', left: 'center', textStyle: { rich: { val: { fontSize: 24, color: '#333', fontWeight: 'bold', padding: [10, 0] }, name: { fontSize: 12, fontWeight: 'normal', color: '#777', } } } }], tooltip: { trigger: 'item', position: 'right', // formatter: '{b} : {c} ({d}%)', formatter:function(item){ const {name, num, percentStr} = item.data return `${name} : ${num} (${percentStr})` } }, series: [{ name: '', type: 'pie', radius: ['70%', '90%'], data: echartData, hoverAnimation:true, hoverOffset:5, itemStyle: { normal: { borderColor: bgColor, borderWidth: 2 } }, labelLine: { normal: { length: 20, length2: 120, lineStyle: { color: '#e6e6e6' } } }, label: { normal: { show:false, formatter: params => { return params.name == 'A类'?params.name:'' }, padding: [0 , -100, 25, -100], rich: { icon: { fontSize: 16 }, name: { fontSize: 14, padding: [0, 10, 0, 4], color: '#666666' }, value: { fontSize: 18, fontWeight: 'bold', color: '#333333' } } } }, }] }; myChart.setOption(option); } //缺陷列表渲染 function queList(data){ let strAll = '',tmp = `mm 排名 缺陷详情 数量 占比 ` for(let i = 0;i < data.length;i++){ strAll += ` ${i+1}

    ${data[i].name}

    ${data[i].num} ${data[i].percentStr} ` } $(".qtable").html(tmp+strAll) } //饼图列表注释渲染 function panDetail(data){ let color = ['#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336','#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336']; let strAll = ''; for(let i = 0;i < data.length;i++){ strAll += `

    ${data[i].name}

    ${data[i].num} (${data[i].percentStr}) ` } $(".explainPanT table").html(strAll); $(".explainPan").css({ marginTop:-($(".explainPan").height()/2-20)+'px' }) } function panDetailB(data){ let color = ['#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336','#F2637B','#975FE4', '#399FFF', '#37CBCB', '#4CCB73','#FAD336']; let strAll = ''; for(let i = 0;i < data.length;i++){ strAll += `

    ${data[i].name}

    ${data[i].num} (${data[i].percentStr}) ` } $(".explainPanB table").html(strAll); $(".explainPan").css({ marginTop:-($(".explainPan").height()/2-20)+'px' }) } //时间获取 function getTimeDetail(){ const d = new Date(); const days = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; let sec = d.getSeconds() let min = d.getMinutes() let hour = d.getHours() let str = `${d.getFullYear()}年${d.getMonth()+1}月${d.getDate()}日 / ${days[d.getDay()]} / ${hour>9?hour:'0'+hour}:${min>9?min:'0'+min}:${sec>9?sec:'0'+sec}` $(".dateDetail").html(str) }