const $ = require('jquery'); require("../css/reset.less") require("../css/console.less") require("../images/logo.png") // import 'zrender/lib/svg/svg'; const echarts = require('echarts'); const {post,setCookie,delCookie,getCookie} = require('../js/utils.js'); $(function(){ // var mySwiper = new Swiper('.swiper-container',{ // // autoplay : 500,//可选选项,自动滑动 // loop : true,//可选选项,开启循环 // slidesPerView : 3, // }) $(".partWrap").css({ height:$(window).height()-38+'px' }) $(".partTitle p span").html(getCookie("hospital")) initConsole()//质控列表 getBarData()//图标数据获取 dateChange() $(window).click(function(){ window.parent.userActionHide() }) }) //所有数据切换日期筛选 function dateChange(){ $(".monthYear .mon").click(function(){ $(this).css({ backgroundColor:'#5A8EEE', color:'#fff' }).siblings().css({ color:'#5A8EEE', backgroundColor:'#fff' }) getBarData(1) }) $(".monthYear .year").click(function(){ $(this).css({ backgroundColor:'#5A8EEE', color:'#fff' }).siblings().css({ color:'#5A8EEE', backgroundColor:'#fff' }) 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){ post('/console/mrStatistics',{//出院人数统计,各科室甲级病历占比,病历数统计 "type": type||1//1月2年 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result = data.data let result1 = data.data['出院人数统计']||[] let result2 = data.data['各科室甲级病历占比']||[] let result3 = data.data['病历数统计']||[] let dataX2=[],dataY2=[]; for(let i = 0;i < result2.length;i++){ dataX2.push(result2[i].deptName) dataY2.push(result2[i].firstPercent.replace('%','')) } personNum(result1) lineChart(dataX2,dataY2) setNumDetail(result3) } }) post('/console/averageStatistics',{//平均住院日,平均住院费用,各科室质控平均分 type:type||1 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result1 = data.data['平均住院费用']||[] let result2 = data.data['平均住院日']||[] let dataX1=[],dataY1=[],dataX2=[],dataY2=[]; for(let i = 0;i < result1.length;i++){ dataX1.push(result1[i].deptName) dataY1.push(result1[i].averageValue) } barChartPay(dataX1,dataY1) barChart(result2) } }) post('/console/resultStatistics',{//各科室缺陷占比,各模块缺陷占比排行,条目缺陷占比 type:type||1 }).then((res)=>{ let data = res.data; if(data.code == 0){ let result1 = data.data['各模块缺陷占比排行']||[] let result2 = data.data['各科室缺陷占比']||[] let result3 = data.data['条目缺陷占比']||[] for(let i = 0;i < result2.length;i++){ result2[i].value = result2[i].num } for(let i = 0;i < result3.length;i++){ result3[i].value = result3[i].num } queList(result1) emptyCircle(result2) emptyCircleB(result3) panDetail(result2) panDetailB(result3) } }) } //part01 function personNum(data){ $(".personNum").html("总人数:"+data['总人数']) $(".died").html(data['死亡人数']) $(".newborn").html(data['新生儿人数']) $(".patientNum").html(data['手术病人数']) } //part02 function setNumDetail(data){ 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){ 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: '百分比', 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' }, 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 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', 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:lengthNum>8?30:0 }, 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: lengthNum<5?'8%':'23%', data: dataY } ] }; myCharts.setOption(option); } //柱状图住院日期 function barChart(data){ 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) } console.log(dataX) option = { color: ['#5A8EEE', '#FAD336', '#37CBCB'], tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, title:[{ text: '天数', top: 15, left: 10, textStyle: { fontSize: 14, color:'#666666', fontWeight: 400 } }], legend: { itemWidth :8, itemHeight :8, right:15, top:15, 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' }, axisLine: {//x轴 lineStyle:{ color:'#AAAAAA' } } } ], yAxis: [ { type: 'value', axisLine: {//y轴 show: false }, axisTick: { show: false }, splitLine:{//分割线 lineStyle:{ color:'#EFF3FC' } } } ], series: [ { name: '上月', type: 'bar', barGap: 0, label: labelOption, barWidth: '15%', data: data2 }, { name: '去年本月', type: 'bar', label: labelOption, barWidth: '15%', data: data3 }, { name: '本月', 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; console.log(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 queList(data){ let strAll = '',tmp = ` 排名 缺陷名称 数量 占比 ` 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}) ` } $(".explainPan 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' }) }