1.合并单元格

  这个表格在报表里面算是比较典型的

    1.里面的表格的列标题现在是写死的,其实这些可以通过配置进行

    2.至于如果表头要进行合并(这种需求比较少,也比较容易实现)

    3.至于统计:最好在后台按照一定的格式统计直接加入即可

    注意:其实这个表格关注的仅仅病历的缺陷数量已经种类的数量,其余的都是一些维度

         度量:缺陷数量,缺陷种类---真正的有意义的数字

       维度:科室,病区,年度,医生,病人---完全就是类似进行挖掘的维度(上卷或者下钻)(做为列是采取具体的度量值,作为行是使其维度层次)

//运行病历质量病历明细报表
function builderTables(){ var html = '<div align="center" style=" height:22px; color:#1D417D; font-size:14px;font-weight:bold">运行病历质量病历明细报表</div>';
html += '<div id="title" style="font-size:12px; font-weight:bold;width:400px;position: absolute;">统计日期:' + "2012-01" + ' 至 ' +"2012-12" + '</div>';
html += "<div align='center'><br/><br/><table class='LxStyle'id='LxTable' border='1' cellspacing='0' ><thead><tr>" +
"<th style=\"text-align:center ; \">科室名称</th>" +
"<th style=\"text-align:center ; \">病区</th>" +
"<th style=\"text-align:center ; \">病案号</th>" +
"<th style=\"text-align:center ; \">医生</th>" +
"<th style=\"text-align:center ; \">入院日期</th>" +
"<th style=\"text-align:center ; \">缺陷种类</th>" +
"<th style=\"text-align:center ; \">缺陷总数</th>" +
"</tr></thead><tbody>"; var datas = [
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科一病区',INPNO:'13021',DOCTORNAME:'周一渠',INDATE:'2012-12-12',CHECKTYPECOUNT:'5',CHECKPOINTCOUNT:'17'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科二病区',INPNO:'30015',DOCTORNAME:'李思雨',INDATE:'2012-02-22',CHECKTYPECOUNT:'15',CHECKPOINTCOUNT:'20'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科二病区',INPNO:'10421',DOCTORNAME:'张议天',INDATE:'2012-09-13',CHECKTYPECOUNT:'2',CHECKPOINTCOUNT:'13'},
{DEPTNAME:'骨科',SUBDEPTNAME:'骨科三病区',INPNO:'92021',DOCTORNAME:'麦子子',INDATE:'2012-08-14',CHECKTYPECOUNT:'34',CHECKPOINTCOUNT:'44'},
{DEPTNAME:'眼科',SUBDEPTNAME:'眼科一病区',INPNO:'15421',DOCTORNAME:'顾一宇',INDATE:'2012-08-15',CHECKTYPECOUNT:'5',CHECKPOINTCOUNT:'55'},
{DEPTNAME:'血液科',SUBDEPTNAME:'血液科一病区',INPNO:'10051',DOCTORNAME:'吴子玉',INDATE:'2012-09-22',CHECKTYPECOUNT:'15',CHECKPOINTCOUNT:'55'},
{DEPTNAME:'血液科',SUBDEPTNAME:'血液科二病区',INPNO:'10079',DOCTORNAME:'李永堂',INDATE:'2012-07-19',CHECKTYPECOUNT:'4',CHECKPOINTCOUNT:'22'}
]; var deptString = "";
var cntDept = 0;
var cntSubdept = 0; var subdeptString = ""; for (var i = 0; i < datas.length; i++) {
var n = datas[i]; html += "<tr>";
if (deptString != n.DEPTNAME) {
deptString = n.DEPTNAME;
subdeptString = n.SUBDEPTNAME; html = html.replace(/subdeptspan/g, cntSubdept);
html = html.replace(/deptspan/g, cntDept); html += "<td rowspan='deptspan' style=\"text-align:center ; \">" + n.DEPTNAME + "</td>" +
"<td rowspan='subdeptspan' style=\"text-align:center ; \">" +
n.SUBDEPTNAME +
"</td>"; cntDept = 0;
cntSubdept = 0;
} else if (subdeptString != n.SUBDEPTNAME) { subdeptString = n.SUBDEPTNAME;
html = html.replace(/subdeptspan/g, cntSubdept); html += "<td rowspan='subdeptspan' style=\"text-align:center ;\">" + n.SUBDEPTNAME + "</td>";
cntSubdept = 0;
} cntSubdept++;
cntDept++; html += "<td style=\"text-align:center ; \">" + n.INPNO + "</td>" +
"<td style=\"text-align:center ; \">" +
n.DOCTORNAME +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.INDATE +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.CHECKTYPECOUNT +
"</td>" +
"<td style=\"text-align:center ; \">" +
n.CHECKPOINTCOUNT +
"</td>"
"</tr>";
}
html = html.replace(/subdeptspan/g, cntSubdept);
html = html.replace(/deptspan/g, cntDept); html += "</tbody></table></div>"; document.getElementById("tab").innerHTML=html; }

  

仔细琢磨上面三幅图

  就会发现,第三方图中,分类-季就是是一个层级维度,展示下钻

  第二图就是看起来就会更加的明显,但是实际大家可能看到的还是第三个图的方式比较多

  第一个图就是是本质图,他是平台的报表格式,通过维度,度量可以形成第2,3个图,都是关注的主要数据。

代码封装:

  满足大多数需求:

  

常见报表的JS代码的更多相关文章

  1. 使用jsCompress压缩混淆js代码的一些常见的问题和技巧

    不同的团队使用的js混淆器或压缩工具不一样,jsCompress是一款绿色的免费的js压缩工具,时代定制的UI团队推荐大家使用,不仅性能优越,而且操作非常人性化. 使用jsCompress.exe时, ...

  2. 常见的页面效果,相关的js代码

    1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...

  3. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  4. Web报表工具JS开发之日期校验

    在报表开发过程中,我们常常需要对查询界面进行日期校验.例如有两个参数:开始日期和结束日期,我们要校验的是:开始日期与结束日期不能为空,结束日期必须在开始日期之后以及结束日期必须在开始日期后的某个时间段 ...

  5. 移动手机端H5无缝间歇平滑向上滚动js代码

    在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...

  6. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  7. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】

    原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...

  8. 编写高质量JS代码的68个有效方法(四)

    [20141129]编写高质量JS代码的68个有效方法(四) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

  9. JS代码格式化修改表格的数值的格式

    今天在cognos中第一次需要用到JS,主要是报表页面展示的时候是可能得到如下的数据 ,我需要对其中类型中有金额字样的,后面的数值,精确2位小数:有百分比字样的,数值显示成百分比.如下. 我先尝试了自 ...

随机推荐

  1. render:h => h(App) 是什么意思?

    在学习vue.js时,使用vue-cli创建了一个vue项目,main.js文件中有一行代码不知道什么意思.在网上搜索得到如下解答: 参考一:https://www.cnblogs.com/longy ...

  2. 13个能快速开发android的经典项目

    一.okhttp一个让网络请求更简单的框架 项目地址 https://github.com/jeasonlzy/okhttp-OkGo 二. TwinklingRefreshLayout-下拉刷新和上 ...

  3. 转 CentOS 7 minimal 版本安装后网络配置

    转自[http://www.07net01.com/2016/01/1140061.html] 1.首先使用root登录服务器,输入 nmcli d 我们发现网卡是处于禁用状态. 2.打开网络管理器界 ...

  4. Intellij Idea 将java项目打包成jar

    1.菜单:File->project stucture 2.在弹窗最左侧选中Artifacts->"+",选jar,选择from modules with depend ...

  5. mysqli使用记录

    1.批量插入数据insert 方式一:insert into tableName (id,name,age) values ('1','张三','12'),('2','李四','16'),('3',' ...

  6. JQuery鼠标移到小图显示大图效果的方法

    JQuery鼠标移到小图显示大图效果的方法 本文实例讲述了JQuery鼠标移到小图显示大图效果的方法.分享给大家供大家参考.具体分析如下: 这里的显示大图功能类似上一篇<JQuery实现超链接鼠 ...

  7. 别名的使用注意,""真坑。

    我们使用别名都是使用as关键字. 大多数时候我们都会省略as关键字,然后后面直接加别名就好了.我的习惯是别名用双引号括起来. 今天因为这个习惯坑了我一大波 首先oracle的别名的规则: AS 别名 ...

  8. 通过VNC连接远程服务器,然后登陆服务器上的虚拟机,出现键盘输入问题的解决方法

    前几天由于要在服务器上装一个虚拟机,然后就选择了vmware workstation,装好之后,进入虚拟机中的centOS系统,发现键盘上的Cpas Lock键不起作用,按下之后还是输入小写,而且按住 ...

  9. java并发编程之一--Semaphore的使用

    1.介绍 Semaphore 中文的含义 信号,信号系统,此类的只要作用就是限制线程的并发的数量. Semaphore内部主要通过AQS(AbstractQueuedSynchronizer)实现线程 ...

  10. python安装openSSL

    首先确定您是否下载python (3).pip (3).python-wheel 官网下载源码包openSSL 参考:用pip安装python 模块OpenSSL