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代码的更多相关文章
-
使用jsCompress压缩混淆js代码的一些常见的问题和技巧
不同的团队使用的js混淆器或压缩工具不一样,jsCompress是一款绿色的免费的js压缩工具,时代定制的UI团队推荐大家使用,不仅性能优越,而且操作非常人性化. 使用jsCompress.exe时, ...
-
常见的页面效果,相关的js代码
1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...
-
10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
-
Web报表工具JS开发之日期校验
在报表开发过程中,我们常常需要对查询界面进行日期校验.例如有两个参数:开始日期和结束日期,我们要校验的是:开始日期与结束日期不能为空,结束日期必须在开始日期之后以及结束日期必须在开始日期后的某个时间段 ...
-
移动手机端H5无缝间歇平滑向上滚动js代码
在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...
-
常见算法是js实现汇总(转载)
常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...
-
最新的JavaScript核心语言标准&mdash;&mdash;ES6,彻底改变你编写JS代码的方式!【转载+整理】
原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...
-
编写高质量JS代码的68个有效方法(四)
[20141129]编写高质量JS代码的68个有效方法(四) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...
-
JS代码格式化修改表格的数值的格式
今天在cognos中第一次需要用到JS,主要是报表页面展示的时候是可能得到如下的数据 ,我需要对其中类型中有金额字样的,后面的数值,精确2位小数:有百分比字样的,数值显示成百分比.如下. 我先尝试了自 ...
随机推荐
-
IOS第二天多线程-02一次性代码
********** #import "HMViewController.h" #import "HMImageDownloader.h" @interface ...
-
python学习之路-day5-模块
本节内容: 模块详解 1.模块定义 2.os&sys模块 3.time&datetime模块 4.random模块 5.shutil模块 6.shelve模块 7.configpars ...
-
paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
-
ios应运程序的五种状态
ios应运程序的五种状态即转化 从apple的官方文档扣下来的 5状态: Not running The app has not been launched or was running but w ...
-
ul li a active jquery.cookie.js
div class="righter nav-navicon" id="admin-nav"> <div class="mainer&qu ...
-
深入学习 DUBBO
1.什么是 RPC 协议? RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显 ...
-
11 Django RESTful framework 实现缓存
01-安装 pip install drf-extensions 02-导入 from rest_framework_extensions.cache.mixins import CacheRespo ...
-
[OC] Block的使用
由ControllerA跳转到controllerB,在controllerB中选择一个参数的值,并将它传回给controllerA. 首先,在controllerB的.h文件中写入: @interf ...
-
express框架中如何只执行一次res响应操作
在做东西时候遇到一个可能会重复输出res.json的地方,重复输出会产生Error:Cannot set header after they are sent. Node.js不像c++里可以直接通过 ...
-
scrapy框架初级
scrapy入门教程:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 一.安装 python模块网站,应用文件放置在s ...