温红权 7 年之前
父節點
當前提交
e28175f7db
共有 36 個文件被更改,包括 4079 次插入145 次删除
  1. 2 0
      VisualInspection/node_modules/fixed-header-table/.npmignore
  2. 20 0
      VisualInspection/node_modules/fixed-header-table/LICENSE.md
  3. 25 0
      VisualInspection/node_modules/fixed-header-table/README.md
  4. 92 0
      VisualInspection/node_modules/fixed-header-table/css/defaultTheme.css
  5. 641 0
      VisualInspection/node_modules/fixed-header-table/demo/css/960.css
  6. 236 0
      VisualInspection/node_modules/fixed-header-table/demo/css/demo.css
  7. 168 0
      VisualInspection/node_modules/fixed-header-table/demo/css/myTheme.css
  8. 53 0
      VisualInspection/node_modules/fixed-header-table/demo/css/reset.css
  9. 60 0
      VisualInspection/node_modules/fixed-header-table/demo/demo.html
  10. 13 0
      VisualInspection/node_modules/fixed-header-table/demo/demo.js
  11. 二進制
      VisualInspection/node_modules/fixed-header-table/demo/images/bg.png
  12. 73 0
      VisualInspection/node_modules/fixed-header-table/demo/js/demo.js
  13. 1287 0
      VisualInspection/node_modules/fixed-header-table/demo/test.html
  14. 706 0
      VisualInspection/node_modules/fixed-header-table/jquery.fixedheadertable.js
  15. 18 0
      VisualInspection/node_modules/fixed-header-table/jquery.fixedheadertable.min.js
  16. 92 0
      VisualInspection/node_modules/fixed-header-table/lib/jquery.mousewheel.js
  17. 48 0
      VisualInspection/node_modules/fixed-header-table/package.json
  18. 5 0
      VisualInspection/package-lock.json
  19. 1 0
      VisualInspection/package.json
  20. 276 89
      VisualInspection/qzd/js/task/add.js
  21. 9 8
      VisualInspection/qzd/js/task/task_list.js
  22. 62 12
      VisualInspection/qzd/view/task/add.html
  23. 7 2
      VisualInspection/view/common/commoncsslink.html
  24. 4 0
      VisualInspection/view/common/commonscriptlink.html
  25. 19 2
      VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/gettway/RecordController_Q.java
  26. 20 3
      VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/gettway/TaskController_Q.java
  27. 3 3
      VisualInspection_server/src/main/resources/application.properties
  28. 1 0
      Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/QzdCheckTask.java
  29. 28 0
      Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/QzdRecord.java
  30. 2 1
      Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/pojo/qzd/TaskDate_Q.java
  31. 1 1
      Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/service/TaskService_Q.java
  32. 1 1
      Visuallnspection_fjq/visuallnspectioninteface/target/maven-archiver/pom.properties
  33. 1 0
      Visuallnspection_fjq/visuallnspectioninteface/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  34. 1 0
      Visuallnspection_fjq/visuallnspectioninteface/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  35. 54 5
      Visuallnspection_qzd/src/main/java/com/xintong/visualinspection/visuallnspection_qzd/mapper/master/TaskMapper.xml
  36. 50 18
      Visuallnspection_qzd/src/main/java/com/xintong/visualinspection/visuallnspection_qzd/service/impl/TaskService_QImpl.java

+ 2 - 0
VisualInspection/node_modules/fixed-header-table/.npmignore

@@ -0,0 +1,2 @@
+/.DS_Store
+demo/.DS_Store

+ 20 - 0
VisualInspection/node_modules/fixed-header-table/LICENSE.md

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Mark Malek
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 25 - 0
VisualInspection/node_modules/fixed-header-table/README.md

@@ -0,0 +1,25 @@
+## Version 1.3
+ - jquery.fixedheadertable.js
+ 
+## Methods:
+
+* show - `$('selector').fixedHeaderTable('show');`
+* hide - `$('selector').fixedHeaderTable('hide');`
+* destroy - `$('selector').fixedHeaderTable('destroy');`
+
+## Options:
+
+* width - Number - Default: 100%
+* height - Number - Default: 100%
+* fixedColumns - Number - Default: 0
+* footer - Boolean - Default: false
+* cloneHeadToFoot - Boolean - Default: false
+* autoShow - Boolean - Default: true
+* altClass - String - Default: none
+* themeClass - String - Default: none
+
+### Notes:
+
+If you aren't using the minified version, be sure to include
+`lib/jquery.mousewheel.js` in your page if you require mousewheel
+scrolling via fixed columns.

+ 92 - 0
VisualInspection/node_modules/fixed-header-table/css/defaultTheme.css

@@ -0,0 +1,92 @@
+/*!
+* jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin
+*
+* Copyright (c) 2011 Mark Malek
+* http://fixedheadertable.com
+*
+* Licensed under MIT
+* http://www.opensource.org/licenses/mit-license.php
+* 
+* http://docs.jquery.com/Plugins/Authoring
+* jQuery authoring guidelines
+*
+* Launch  : October 2009
+* Version : 1.3
+* Released: May 9th, 2011
+*
+* 
+* all CSS sizing (width,height) is done in pixels (px)
+*/
+
+/* @group Reset */
+
+.fht-table,
+.fht-table thead,
+.fht-table tfoot,
+.fht-table tbody,
+.fht-table tr,
+.fht-table th,
+.fht-table td {
+	/* position */
+    margin: 0;
+    
+    /* size */
+	padding: 0;
+
+	/* text */
+	font-size: 100%;
+	font: inherit;
+	vertical-align: top;
+	}
+
+.fht-table {
+	/* appearance */
+    border-collapse: collapse;
+    border-spacing: 0;
+	}
+
+/* @end */
+
+/* @group Content */
+
+.fht-table-wrapper,
+.fht-table-wrapper .fht-thead,
+.fht-table-wrapper .fht-tfoot,
+.fht-table-wrapper .fht-fixed-column .fht-tbody,
+.fht-table-wrapper .fht-fixed-body .fht-tbody,
+.fht-table-wrapper .fht-tbody {
+	/* appearance */
+	overflow: hidden;
+	
+	/* position */
+	position: relative;
+	}
+
+	.fht-table-wrapper .fht-fixed-body .fht-tbody,
+	.fht-table-wrapper .fht-tbody {
+		/* appearance */
+	    overflow: auto;
+		}
+
+		.fht-table-wrapper .fht-table .fht-cell {
+			/* appearance */
+			overflow: hidden;
+			
+			/* size */
+		    height: 1px;
+			}
+	
+	.fht-table-wrapper .fht-fixed-column,
+	.fht-table-wrapper .fht-fixed-body {
+	    /* position */
+	    top: 0;
+	    left: 0;
+	    position: absolute;
+	    }
+	    
+	.fht-table-wrapper .fht-fixed-column {
+	    /* position */
+	    z-index: 1;
+	    }
+
+/* @end */

+ 641 - 0
VisualInspection/node_modules/fixed-header-table/demo/css/960.css

@@ -0,0 +1,641 @@
+/*
+	960 Grid System ~ Core CSS.
+	Learn more ~ http://960.gs/
+
+	Licensed under GPL and MIT.
+*/
+
+/*
+	Forces backgrounds to span full width,
+	even if there is horizontal scrolling.
+	Increase this if your layout is wider.
+
+	Note: IE6 works fine without this fix.
+*/
+
+body {
+	min-width: 960px;
+}
+
+/* `Containers
+----------------------------------------------------------------------------------------------------*/
+
+.container_12,
+.container_16 {
+	margin-left: auto;
+	margin-right: auto;
+	width: 960px;
+}
+
+/* `Grid >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.grid_1,
+.grid_2,
+.grid_3,
+.grid_4,
+.grid_5,
+.grid_6,
+.grid_7,
+.grid_8,
+.grid_9,
+.grid_10,
+.grid_11,
+.grid_12,
+.grid_13,
+.grid_14,
+.grid_15,
+.grid_16 {
+	display: inline;
+	float: left;
+	margin-left: 10px;
+	margin-right: 10px;
+}
+
+.push_1, .pull_1,
+.push_2, .pull_2,
+.push_3, .pull_3,
+.push_4, .pull_4,
+.push_5, .pull_5,
+.push_6, .pull_6,
+.push_7, .pull_7,
+.push_8, .pull_8,
+.push_9, .pull_9,
+.push_10, .pull_10,
+.push_11, .pull_11,
+.push_12, .pull_12,
+.push_13, .pull_13,
+.push_14, .pull_14,
+.push_15, .pull_15 {
+	position: relative;
+}
+
+.container_12 .grid_3,
+.container_16 .grid_4 {
+	width: 220px;
+}
+
+.container_12 .grid_6,
+.container_16 .grid_8 {
+	width: 460px;
+}
+
+.container_12 .grid_9,
+.container_16 .grid_12 {
+	width: 700px;
+}
+
+.container_12 .grid_12,
+.container_16 .grid_16 {
+	width: 940px;
+}
+
+/* `Grid >> Children (Alpha ~ First, Omega ~ Last)
+----------------------------------------------------------------------------------------------------*/
+
+.alpha {
+	margin-left: 0;
+}
+
+.omega {
+	margin-right: 0;
+}
+
+/* `Grid >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .grid_1 {
+	width: 60px;
+}
+
+.container_12 .grid_2 {
+	width: 140px;
+}
+
+.container_12 .grid_4 {
+	width: 300px;
+}
+
+.container_12 .grid_5 {
+	width: 380px;
+}
+
+.container_12 .grid_7 {
+	width: 540px;
+}
+
+.container_12 .grid_8 {
+	width: 620px;
+}
+
+.container_12 .grid_10 {
+	width: 780px;
+}
+
+.container_12 .grid_11 {
+	width: 860px;
+}
+
+/* `Grid >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .grid_1 {
+	width: 40px;
+}
+
+.container_16 .grid_2 {
+	width: 100px;
+}
+
+.container_16 .grid_3 {
+	width: 160px;
+}
+
+.container_16 .grid_5 {
+	width: 280px;
+}
+
+.container_16 .grid_6 {
+	width: 340px;
+}
+
+.container_16 .grid_7 {
+	width: 400px;
+}
+
+.container_16 .grid_9 {
+	width: 520px;
+}
+
+.container_16 .grid_10 {
+	width: 580px;
+}
+
+.container_16 .grid_11 {
+	width: 640px;
+}
+
+.container_16 .grid_13 {
+	width: 760px;
+}
+
+.container_16 .grid_14 {
+	width: 820px;
+}
+
+.container_16 .grid_15 {
+	width: 880px;
+}
+
+/* `Prefix Extra Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .prefix_3,
+.container_16 .prefix_4 {
+	padding-left: 240px;
+}
+
+.container_12 .prefix_6,
+.container_16 .prefix_8 {
+	padding-left: 480px;
+}
+
+.container_12 .prefix_9,
+.container_16 .prefix_12 {
+	padding-left: 720px;
+}
+
+/* `Prefix Extra Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .prefix_1 {
+	padding-left: 80px;
+}
+
+.container_12 .prefix_2 {
+	padding-left: 160px;
+}
+
+.container_12 .prefix_4 {
+	padding-left: 320px;
+}
+
+.container_12 .prefix_5 {
+	padding-left: 400px;
+}
+
+.container_12 .prefix_7 {
+	padding-left: 560px;
+}
+
+.container_12 .prefix_8 {
+	padding-left: 640px;
+}
+
+.container_12 .prefix_10 {
+	padding-left: 800px;
+}
+
+.container_12 .prefix_11 {
+	padding-left: 880px;
+}
+
+/* `Prefix Extra Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .prefix_1 {
+	padding-left: 60px;
+}
+
+.container_16 .prefix_2 {
+	padding-left: 120px;
+}
+
+.container_16 .prefix_3 {
+	padding-left: 180px;
+}
+
+.container_16 .prefix_5 {
+	padding-left: 300px;
+}
+
+.container_16 .prefix_6 {
+	padding-left: 360px;
+}
+
+.container_16 .prefix_7 {
+	padding-left: 420px;
+}
+
+.container_16 .prefix_9 {
+	padding-left: 540px;
+}
+
+.container_16 .prefix_10 {
+	padding-left: 600px;
+}
+
+.container_16 .prefix_11 {
+	padding-left: 660px;
+}
+
+.container_16 .prefix_13 {
+	padding-left: 780px;
+}
+
+.container_16 .prefix_14 {
+	padding-left: 840px;
+}
+
+.container_16 .prefix_15 {
+	padding-left: 900px;
+}
+
+/* `Suffix Extra Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .suffix_3,
+.container_16 .suffix_4 {
+	padding-right: 240px;
+}
+
+.container_12 .suffix_6,
+.container_16 .suffix_8 {
+	padding-right: 480px;
+}
+
+.container_12 .suffix_9,
+.container_16 .suffix_12 {
+	padding-right: 720px;
+}
+
+/* `Suffix Extra Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .suffix_1 {
+	padding-right: 80px;
+}
+
+.container_12 .suffix_2 {
+	padding-right: 160px;
+}
+
+.container_12 .suffix_4 {
+	padding-right: 320px;
+}
+
+.container_12 .suffix_5 {
+	padding-right: 400px;
+}
+
+.container_12 .suffix_7 {
+	padding-right: 560px;
+}
+
+.container_12 .suffix_8 {
+	padding-right: 640px;
+}
+
+.container_12 .suffix_10 {
+	padding-right: 800px;
+}
+
+.container_12 .suffix_11 {
+	padding-right: 880px;
+}
+
+/* `Suffix Extra Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .suffix_1 {
+	padding-right: 60px;
+}
+
+.container_16 .suffix_2 {
+	padding-right: 120px;
+}
+
+.container_16 .suffix_3 {
+	padding-right: 180px;
+}
+
+.container_16 .suffix_5 {
+	padding-right: 300px;
+}
+
+.container_16 .suffix_6 {
+	padding-right: 360px;
+}
+
+.container_16 .suffix_7 {
+	padding-right: 420px;
+}
+
+.container_16 .suffix_9 {
+	padding-right: 540px;
+}
+
+.container_16 .suffix_10 {
+	padding-right: 600px;
+}
+
+.container_16 .suffix_11 {
+	padding-right: 660px;
+}
+
+.container_16 .suffix_13 {
+	padding-right: 780px;
+}
+
+.container_16 .suffix_14 {
+	padding-right: 840px;
+}
+
+.container_16 .suffix_15 {
+	padding-right: 900px;
+}
+
+/* `Push Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .push_3,
+.container_16 .push_4 {
+	left: 240px;
+}
+
+.container_12 .push_6,
+.container_16 .push_8 {
+	left: 480px;
+}
+
+.container_12 .push_9,
+.container_16 .push_12 {
+	left: 720px;
+}
+
+/* `Push Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .push_1 {
+	left: 80px;
+}
+
+.container_12 .push_2 {
+	left: 160px;
+}
+
+.container_12 .push_4 {
+	left: 320px;
+}
+
+.container_12 .push_5 {
+	left: 400px;
+}
+
+.container_12 .push_7 {
+	left: 560px;
+}
+
+.container_12 .push_8 {
+	left: 640px;
+}
+
+.container_12 .push_10 {
+	left: 800px;
+}
+
+.container_12 .push_11 {
+	left: 880px;
+}
+
+/* `Push Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .push_1 {
+	left: 60px;
+}
+
+.container_16 .push_2 {
+	left: 120px;
+}
+
+.container_16 .push_3 {
+	left: 180px;
+}
+
+.container_16 .push_5 {
+	left: 300px;
+}
+
+.container_16 .push_6 {
+	left: 360px;
+}
+
+.container_16 .push_7 {
+	left: 420px;
+}
+
+.container_16 .push_9 {
+	left: 540px;
+}
+
+.container_16 .push_10 {
+	left: 600px;
+}
+
+.container_16 .push_11 {
+	left: 660px;
+}
+
+.container_16 .push_13 {
+	left: 780px;
+}
+
+.container_16 .push_14 {
+	left: 840px;
+}
+
+.container_16 .push_15 {
+	left: 900px;
+}
+
+/* `Pull Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .pull_3,
+.container_16 .pull_4 {
+	left: -240px;
+}
+
+.container_12 .pull_6,
+.container_16 .pull_8 {
+	left: -480px;
+}
+
+.container_12 .pull_9,
+.container_16 .pull_12 {
+	left: -720px;
+}
+
+/* `Pull Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .pull_1 {
+	left: -80px;
+}
+
+.container_12 .pull_2 {
+	left: -160px;
+}
+
+.container_12 .pull_4 {
+	left: -320px;
+}
+
+.container_12 .pull_5 {
+	left: -400px;
+}
+
+.container_12 .pull_7 {
+	left: -560px;
+}
+
+.container_12 .pull_8 {
+	left: -640px;
+}
+
+.container_12 .pull_10 {
+	left: -800px;
+}
+
+.container_12 .pull_11 {
+	left: -880px;
+}
+
+/* `Pull Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .pull_1 {
+	left: -60px;
+}
+
+.container_16 .pull_2 {
+	left: -120px;
+}
+
+.container_16 .pull_3 {
+	left: -180px;
+}
+
+.container_16 .pull_5 {
+	left: -300px;
+}
+
+.container_16 .pull_6 {
+	left: -360px;
+}
+
+.container_16 .pull_7 {
+	left: -420px;
+}
+
+.container_16 .pull_9 {
+	left: -540px;
+}
+
+.container_16 .pull_10 {
+	left: -600px;
+}
+
+.container_16 .pull_11 {
+	left: -660px;
+}
+
+.container_16 .pull_13 {
+	left: -780px;
+}
+
+.container_16 .pull_14 {
+	left: -840px;
+}
+
+.container_16 .pull_15 {
+	left: -900px;
+}
+
+/* `Clear Floated Elements
+----------------------------------------------------------------------------------------------------*/
+
+/* http://sonspring.com/journal/clearing-floats */
+
+.clear {
+	clear: both;
+	display: block;
+	overflow: hidden;
+	visibility: hidden;
+	width: 0;
+	height: 0;
+}
+
+/* http://perishablepress.com/press/2009/12/06/new-clearfix-hack */
+
+.clearfix:after {
+	clear: both;
+	content: ' ';
+	display: block;
+	font-size: 0;
+	line-height: 0;
+	visibility: hidden;
+	width: 0;
+	height: 0;
+}
+
+/*
+	The following zoom:1 rule is specifically for IE6 + IE7.
+	Move to separate stylesheet if invalid CSS is a problem.
+*/
+
+* html .clearfix,
+*:first-child+html .clearfix {
+	zoom: 1;
+}

+ 236 - 0
VisualInspection/node_modules/fixed-header-table/demo/css/demo.css

@@ -0,0 +1,236 @@
+body {
+	/* appearance */
+	background-image: url(../images/bg.png);
+	background-repeat: repeat;
+	
+	/* text */
+	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+	}
+	
+.styles {
+	display: none;
+	}
+	
+input::-webkit-input-placeholder {
+    color: #585858;
+	}
+input:-moz-placeholder {
+    color: #585858;
+	}
+	
+.button {
+	/* appearance */
+	background-color: #3f3f3f;
+	background-image: -moz-linear-gradient(
+		top,
+		rgba(255,255,255,0.0) 0%,
+		rgba(255,255,255,0.1) 50%);
+	
+	background-image: -webkit-gradient(
+		linear, left top, left bottom,
+		color-stop(100%,rgba(255,255,255,0.0)),
+		color-stop(50%,rgba(255,255,255,0.1)));
+	border: 1px solid #000000;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	border-radius: 5px;
+	-webkit-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1);
+	-moz-box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1);
+	box-shadow: 0 1px 0 rgba(139,139,139,1) inset, 0 1px 0 rgba(88,88,88,1);
+	
+	/* position */
+	display: inline-block;
+	margin: 10px 0;
+	
+	/* size */
+	padding: 0 10px;
+	
+	/* text */
+	color: #eaeaea;
+	font-size: 12px;
+	line-height: 30px;
+	text-decoration: none;
+	white-space: nowrap;
+	}
+.button:hover {
+	/* appearance */
+	background-color: #6495ed;
+	-webkit-box-shadow: 0 0 3px #6495ed;
+	-moz-box-shadow: 0 0 3px #6495ed;
+	box-shadow: 0 0 3px #6495ed;
+	}
+	
+#buildTable {
+	margin-top: 20px;
+	}
+	
+#tablePlaceholder {
+	margin-top: 40px;
+	}
+
+.table_options {
+	/* appearance */
+	background-color: #252525;
+	background-image: -moz-linear-gradient(
+		top,
+		rgba(255,255,255,0.05) 20%,
+		rgba(255,255,255,0.0) 80%);
+	
+	background-image: -webkit-gradient(
+		linear, left top, left bottom,
+		color-stop(20%,rgba(255,255,255,0.05)),
+		color-stop(80%,rgba(255,255,255,0.0)));
+	border: 1px solid #000000;
+	-webkit-box-shadow: 0 5px 10px rgba(0,0,0,0.75);
+	-moz-box-shadow: 0 5px 10px rgba(0,0,0,0.75);
+	box-shadow: 0 5px 10px rgba(0,0,0,0.75);
+	overflow: hidden;
+	
+	/* size */
+	padding: 10px 0;
+	
+	}
+	h2 {
+		/* text */
+		color: #dadada;
+		font-size: 14px;
+		font-weight: bold;
+		text-align: center;
+		text-shadow: 0 -1px 1px #000000;
+		}
+	.table_options fieldset {
+		/* appearance */
+		border: none;
+		
+		/* size */
+		padding: 5px 0;
+		
+		/* text */
+		text-align: right;
+		}
+		.table_options label {
+			/* size */
+			padding: 0 10px 0 0;
+			
+			/* text */
+			color: #b2b2b2;
+			font-size: 12px;
+			text-shadow: 0 -1px 1px #000000;
+			
+			}
+		.table_options input,
+		.table_options input:focus {
+			/* appearance */
+			background-color: #1f1f1f;
+			border: 1px solid #000000;
+			-webkit-border-radius: 5px;
+			-moz-border-radius: 5px;
+			border-radius: 5px;
+			-webkit-box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset;
+			-moz-box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset;
+			box-shadow: 0 1px 1px rgba(63,63,63,1), 0 1px 3px rgba(0,0,0,1) inset;
+			
+			/* size */
+			padding: 8px 5px;
+			width: 50px;
+			
+			/* text */
+			color: #fff;
+			}
+		.table_options input:focus {
+			outline: 1px solid #fff;
+			}
+			
+			
+			
+			
+/* Fancy Dark Table */	
+.fancyDarkTable .numeric {
+	/* text */
+	text-align: right;
+	}
+
+.fancyDarkTable td, .fancyDarkTable th {
+	border: 1px solid #000000;
+	padding: 5px;
+}
+
+.fancyDarkTable thead tr th {
+	padding: 10px 5px 10px 5px;
+	}
+
+.fancyDarkTable {
+	/*border-collapse: separate;*/
+	
+	/* text */
+	font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+	}
+
+.fancyDarkTable tbody tr td {
+	/* appearance */
+	background-color: #3f3f3f;
+	background-image: -moz-linear-gradient(
+		top,
+		rgba(255,255,255,0.0) 0%,
+		rgba(255,255,255,0.02) 100%);
+	
+	background-image: -webkit-gradient(
+		linear, left top, left bottom,
+		color-stop(0%,rgba(255,255,255,0.0)),
+		color-stop(100%,rgba(255,255,255,0.02)));
+	border-bottom-color: #2f2f2f;
+	border-right-color: #2f2f2f;
+
+	/* size */
+	padding: 10px 5px 30px 5px;
+
+	/* text */
+	color: #FFFFFF;
+	font-size: 11px;
+	font-weight: bold;
+	text-shadow: 0 -1px 1px #000000;
+	}
+
+.fancyDarkTable tbody tr.odd td {
+	/* appearance */
+	background-color: #464646;
+	background-image: -moz-linear-gradient(
+		top,
+		rgba(255,255,255,0.0) 0%,
+		rgba(255,255,255,0.02) 100%);
+	
+	background-image: -webkit-gradient(
+		linear, left top, left bottom,
+		color-stop(0%,rgba(255,255,255,0.0)),
+		color-stop(100%,rgba(255,255,255,0.02)));
+	border-right-color: #2f2f2f;
+	}
+
+.fancyDarkTable thead tr th,
+.fancyDarkTable tfoot tr td {
+	/* appearance */
+	background-color: #151515;
+	background-image: -moz-linear-gradient(
+		top,
+		rgba(255,255,255,0.05) 0%,
+		rgba(255,255,255,0.0) 100%);
+	
+	background-image: -webkit-gradient(
+		linear, left top, left bottom,
+		color-stop(0%,rgba(255,255,255,0.05)),
+		color-stop(100%,rgba(255,255,255,0.0)));
+		
+	/* text */
+	color: #ffffff;
+	font-size: 12px;
+	font-weight: bold;
+	text-shadow: 0 -1px 1px #000;
+	}
+	
+.fancyDarkTable .fht-head {
+	-webkit-box-shadow: 0 -1px 0 #3f3f3f;
+	-moz-box-shadow: 0 -1px 0 #3f3f3f;
+	box-shadow: 0 -1px 0 #3f3f3f;
+	z-index: 1;
+	position: relative;
+	}

+ 168 - 0
VisualInspection/node_modules/fixed-header-table/demo/css/myTheme.css

@@ -0,0 +1,168 @@
+.divider {
+    margin-top: 40px;
+}
+
+.button {
+    /* appearance */
+    background-color: #3f3f3f;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.0) 0%, rgba(255, 255, 255, 0.1) 50%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(100%, rgba(255, 255, 255, 0.0)), color-stop(50%, rgba(255, 255, 255, 0.1)));
+    border: 1px solid #000000;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    -webkit-box-shadow: 0 1px 0 rgba(139, 139, 139, 1) inset, 0 1px 0 rgba(88, 88, 88, 1);
+    -moz-box-shadow: 0 1px 0 rgba(139, 139, 139, 1) inset, 0 1px 0 rgba(88, 88, 88, 1);
+    box-shadow: 0 1px 0 rgba(139, 139, 139, 1) inset, 0 1px 0 rgba(88, 88, 88, 1);
+    cursor: pointer;
+    /* position */
+    display: inline-block;
+    margin: 10px;
+    /* size */
+    padding: 0 10px;
+    /* text */
+    color: #eaeaea;
+    font-size: 12px;
+    line-height: 30px;
+    text-decoration: none;
+    white-space: nowrap;
+}
+
+.button:hover {
+    /* appearance */
+    background-color: #6495ed;
+    -webkit-box-shadow: 0 0 3px #6495ed;
+    -moz-box-shadow: 0 0 3px #6495ed;
+    box-shadow: 0 0 3px #6495ed;
+}
+
+.myTableWrapper {
+    width: 800px;
+    height: 500px;
+}
+
+.height250 {
+    height: 250px;
+    overflow-x: auto;
+    overflow-y: auto;
+}
+
+.height400 {
+    height: 400px;
+    overflow-x: auto;
+    overflow-y: auto;
+}
+
+.fancyTable td,
+.fancyTable th {
+    /* appearance */
+    border: 1px solid #778899;
+    /* size */
+    padding: 5px;
+}
+
+.fancyTable {
+    /* text */
+    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+.fancyTable tbody tr td {
+    /* appearance */
+    background-color: #eef2f9;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.1) 51%, rgba(255, 255, 255, 0.0) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.4)), color-stop(50%, rgba(255, 255, 255, 0.2)), color-stop(51%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.0)));
+    /* text */
+    color: #262c31;
+    font-size: 11px;
+}
+
+.fancyTable tbody tr.odd td {
+    /* appearance */
+    background-color: #d6e0ef;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.1) 51%, rgba(255, 255, 255, 0.0) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.4)), color-stop(50%, rgba(255, 255, 255, 0.2)), color-stop(51%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.0)));
+}
+
+.fancyTable thead tr th,
+.fancyTable thead tr td,
+.fancyTable tfoot tr th,
+.fancyTable tfoot tr td {
+    /* appearance */
+    background-color: #8ca9cf;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.1) 51%, rgba(255, 255, 255, 0.0) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.4)), color-stop(50%, rgba(255, 255, 255, 0.2)), color-stop(51%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.0)));
+    /* text */
+    color: #121517;
+    font-size: 12px;
+    font-weight: bold;
+    text-shadow: 0 1px 1px #e8ebee;
+}
+
+
+/* Fancy Dark Table */
+
+.fancyDarkTable .numeric {
+    /* text */
+    text-align: right;
+}
+
+.fancyDarkTable td,
+.fancyDarkTable th {
+    border: 1px solid #000000;
+    padding: 5px;
+}
+
+.fancyDarkTable thead tr th {
+    padding: 10px 5px 10px 5px;
+}
+
+.fancyDarkTable {
+    /*border-collapse: separate;*/
+    /* text */
+    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+.fancyDarkTable tbody tr td {
+    /* appearance */
+    background-color: #48535e;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.0) 0%, rgba(255, 255, 255, 0.02) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.0)), color-stop(100%, rgba(255, 255, 255, 0.02)));
+    border-bottom-color: #22272e;
+    border-top-color: #708090;
+    border-right-color: #000;
+    border-left-color: #3c454f;
+    /* size */
+    padding: 10px 5px 30px 5px;
+    /* text */
+    color: #FFFFFF;
+    font-size: 11px;
+    font-weight: bold;
+    text-shadow: 0 -1px 1px #000000;
+}
+
+.fancyDarkTable tbody tr.odd td {
+    /* appearance */
+    background-color: #3c454f;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.0) 0%, rgba(255, 255, 255, 0.02) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.0)), color-stop(100%, rgba(255, 255, 255, 0.02)));
+    border-right-color: #000;
+}
+
+.fancyDarkTable thead tr th,
+.fancyDarkTable tfoot tr td {
+    /* appearance */
+    background-color: #0b0d10;
+    background-image: -moz-linear-gradient( top, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.1) 51%, rgba(255, 255, 255, 0.0) 100%);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.4)), color-stop(50%, rgba(255, 255, 255, 0.2)), color-stop(51%, rgba(255, 255, 255, 0.1)), color-stop(100%, rgba(255, 255, 255, 0.0)));
+    /* text */
+    color: #ffffff;
+    font-size: 12px;
+    font-weight: bold;
+    text-shadow: 0 -1px 1px #000;
+}
+
+.fancyDarkTable .fht-head {
+    -webkit-box-shadow: 0 5px 10px #000;
+    z-index: 1;
+    position: relative;
+}

+ 53 - 0
VisualInspection/node_modules/fixed-header-table/demo/css/reset.css

@@ -0,0 +1,53 @@
+/* http://meyerweb.com/eric/tools/css/reset/ */
+/* v1.0 | 20080212 */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	font-size: 100%;
+	vertical-align: baseline;
+	background: transparent;
+}
+body {
+	line-height: 1;
+}
+ol, ul {
+	list-style: none;
+}
+blockquote, q {
+	quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+	content: '';
+	content: none;
+}
+
+/* remember to define focus styles! */
+:focus {
+	outline: 0;
+}
+
+/* remember to highlight inserts somehow! */
+ins {
+	text-decoration: none;
+}
+del {
+	text-decoration: line-through;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}

+ 60 - 0
VisualInspection/node_modules/fixed-header-table/demo/demo.html

@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<html>
+    <head>
+        <title>FixedHeaderTable Demo</title>
+        <link href="../css/defaultTheme.css" rel="stylesheet" media="screen" />
+        <link href="css/960.css" rel="stylesheet" media="screen" />
+        <link href="css/demo.css" rel="stylesheet" media="screen" />
+        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
+        <script src="../jquery.fixedheadertable.js"></script>
+        <script src="js/demo.js"></script>
+    </head>
+    <body>
+    	<div class="styles">
+    	
+    	</div>
+    	<div class="container_16 table_options">
+    		<div class="grid_3 prefix_1 alpha">
+    			<h2>Table Properties</h2>
+    			<fieldset>
+    				<label for="rows">rows</label>
+    				<input id="rows" type="text" value="" />
+    			</fieldset>
+    			<fieldset>
+    				<label for="columns">columns</label>
+    				<input id="columns" type="text" value="" />
+    			</fieldset>
+    		</div>
+    		
+    		<div class="grid_4">
+    			<h2>Table Appearance</h2>
+    			<fieldset>
+    				<label for="borderWidth">border-width</label>
+    				<input id="borderWidth" type="text" value="" placeholder="ex. 1px" />
+    			</fieldset>
+    			<fieldset>
+    				<label for="borderColor">border-color</label>
+    				<input id="borderColor" type="text" value="" placeholder="ex. #353535" />
+    			</fieldset>
+    		</div>
+    		
+    		<div class="grid_3">
+    			<h2>&nbsp;</h2>
+    			<fieldset>
+    				<label for="padding">padding</label>
+    				<input id="padding" type="text" value="" placeholder="ex. 5" />
+    			</fieldset>
+    		</div>
+    		
+    		<div class="grid_2 prefix_2 omega">
+    			<a id="buildTable" class="button" href="#">Build Table</a>
+    			<a id="runPlugin" class="button" href="#">Run Plugin</a>
+    		</div>
+    	</div>
+    
+    	<div class="container_12">
+    		<div id="tablePlaceholder" class="grid_12 alpha omega"></div>
+    	</div>
+    
+    </body>
+</html>

+ 13 - 0
VisualInspection/node_modules/fixed-header-table/demo/demo.js

@@ -0,0 +1,13 @@
+$(document).ready(function() {
+    $('#myTable01').fixedHeaderTable({ footer: true, cloneHeadToFoot: true, altClass: 'odd', autoShow: false });
+    
+    $('#myTable01').fixedHeaderTable('show', 1000);
+    
+    $('#myTable02').fixedHeaderTable({ footer: true, altClass: 'odd' });
+    
+    $('#myTable05').fixedHeaderTable({ altClass: 'odd', footer: true, fixedColumns: 1 });
+    
+    $('#myTable03').fixedHeaderTable({ altClass: 'odd', footer: true, fixedColumns: 1 });
+    
+    $('#myTable04').fixedHeaderTable({ altClass: 'odd', footer: true, cloneHeadToFoot: true, fixedColumns: 3 });
+});

二進制
VisualInspection/node_modules/fixed-header-table/demo/images/bg.png


+ 73 - 0
VisualInspection/node_modules/fixed-header-table/demo/js/demo.js

@@ -0,0 +1,73 @@
+$(document).ready(function() {
+	$('#buildTable').bind('click', function(e) {
+		e.preventDefault();
+		
+		$('#tablePlaceholder').empty()
+			.buildTable();
+	});
+	
+	$('#runPlugin').bind('click', function(e) {
+		e.preventDefault();
+		
+		$('#tablePlaceholder table').fixedHeaderTable({ height: '400', altClass: 'odd', themeClass: 'fancyDarkTable' });
+	});
+});
+
+$.fn.extend({
+	buildTable: function() {
+		var defaults = {
+			width: '100%',
+			height: 400,
+			rows: 100,
+			columns: 5,
+			borderWidth: 1,
+			borderColor: '#000000',
+			padding: 5
+		};
+		
+		var $self 		= $(this),
+			self  		= this,
+			rows  		= $('#rows').val(),
+			columns 	= $('#columns').val(),
+			borderWidth = $('#borderWidth').val(),
+			borderColor = $('#borderColor').val(),
+			padding 	= $('#padding').val(),
+			$thead,
+			$tbody,
+			$currentRow,
+			$styles,
+			options		= {};
+		
+		if ( padding != '' ) {
+			options.padding = padding;
+		}
+		
+		options = $.extend({}, defaults, options);
+			
+		$self.append('<table><thead></thead><tbody></tbody></table>');
+		
+		$thead = $self.find('thead');
+		$thead.append('<tr></tr>');
+		for ( var column = 1; column <= columns; column++ ) {
+			$thead.find('tr')
+				.append('<th>Column '+column+'</th>');
+		}
+		
+		$tbody = $self.find('tbody');
+		for ( var row = 1; row <= rows; row++ ) {
+			$currentRow = $('<tr></tr>').appendTo($tbody);
+			
+			for ( var column = 1; column <= columns; column++ ) {
+				$currentRow.append('<td>Column '+column+'</td>');
+			}
+		}
+		
+/*
+		var paddingStyle = "padding: " + options.padding + "px !important;";
+		
+		$styles = $('<style></style>').appendTo('.styles');
+		
+		$styles.html('th, td { '+paddingStyle+' }');
+*/
+	}
+});

+ 1287 - 0
VisualInspection/node_modules/fixed-header-table/demo/test.html

@@ -0,0 +1,1287 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+    <head>
+        <title>FixedHeaderTable Test</title>
+        <link href="css/960.css" rel="stylesheet" media="screen" />
+        <link href="../css/defaultTheme.css" rel="stylesheet" media="screen" />
+        <link href="css/myTheme.css" rel="stylesheet" media="screen" />
+        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
+
+        <script src="../jquery.fixedheadertable.js"></script>
+        <script src="demo.js"></script>
+    </head>
+    <body>
+    	<div class="container_12">
+    		<div class="grid_4">
+    			<pre>
+    				<code>
+$('#myTable01').fixedHeaderTable({ 
+	footer: true,
+	cloneHeadToFoot: true,
+	altClass: 'odd',
+	autoShow: false
+});
+    				</code>
+    			</pre>
+    		</div>
+    		<div class="grid_8 height250">
+    			<table class="fancyTable" id="myTable01" cellpadding="0" cellspacing="0">
+    			    <thead>
+    			        <tr>
+    			            <th>Browser</th>
+    			            <th>Visits</th>
+    			            <th>Pages/Visit</th>
+    			            <th>Avg. Time on Site</th>
+    			            <th>% New Visits</th>
+    			            <th>Bounce Rate</th>
+    			        </tr>
+    			    </thead>
+    			    <tbody>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			        <tr>
+    			            <td>Firefox</td>
+    			            <td>1,990</td>
+    			            <td>3.11</td>
+    			            <td>00:04:22</td>
+    			            <td>70.00%</td>
+    			            <td>32.61%</td>
+    			        </tr>
+    			    </tbody>
+    			</table>
+    		</div>
+    		<div class="clear"></div>
+    	</div>
+        
+        <div class="container_12 divider">
+        	<div class="grid_4">
+        		<pre>
+        		    				<code>
+$('#myTable02').fixedHeaderTable({
+	footer: true,
+	altClass: 'odd',
+});
+        		    				</code>
+        		    			</pre>
+        	</div>
+        	<div class="grid_8 height250">
+        		<table class="fancyTable" id="myTable02" cellpadding="0" cellspacing="0">
+        		    <thead>
+        		        <tr>
+        		            <th>Browser</th>
+        		            <th>Visits</th>
+        		            <th>Pages/Visit</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		        </tr>
+        		    </thead>
+        		    <tfoot>
+        		        <tr>
+        		            <td>This is a unique footer</td>
+        		            <td>1</td>
+        		            <td>2</td>
+        		            <td>3</td>
+        		            <td>4</td>
+        		            <td>5</td>
+        		        </tr>
+        		    </tfoot>
+        		    <tbody>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox Web Browser Version 4.0</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		    </tbody>
+        		</table>
+        	</div>
+        	<div class="clear"></div>
+        </div>
+        
+        <div class="container_12 divider">
+        	<div class="grid_4">
+        		<pre>
+        			<code>
+$('#myTable05').fixedHeaderTable({
+	altClass: 'odd',
+	footer: true,
+	fixedColumns: 1,
+});
+        			</code>
+        		</pre>
+        	</div>
+        	<div class="grid_4 height400">
+        		<table class="fancyTable" id="myTable05" cellpadding="0" cellspacing="0">
+        		    <thead>
+        		        <tr>
+        		            <th>Browser</th>
+        		            <th>Visits</th>
+        		            <th>Pages/Visit</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		        </tr>
+        		    </thead>
+        		    <tfoot>
+        		        <tr>
+        		            <th>Browser</th>
+        		            <th>Visits</th>
+        		            <th>Pages/Visit</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		        </tr>
+        		    </tfoot>
+        		    <tbody>
+        		        <tr>
+        		            <td>Firefox first</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22 test test test</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00% test test test</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		    </tbody>
+        		</table>
+        	</div>
+        	<div class="clear"></div>
+        </div>
+        
+        <div class="container_12 divider">
+        	<div class="grid_4">
+        		<pre>
+        			<code>
+$('#myTable03').fixedHeaderTable({
+	altClass: 'odd',
+	footer: true,
+	fixedColumns: 1,
+});
+        			</code>
+        		</pre>
+        	</div>
+        	<div class="grid_4 height400">
+        		<table class="fancyTable" id="myTable03" cellpadding="0" cellspacing="0">
+        		    <thead>
+        		        <tr>
+        		            <th>Browser</th>
+        		            <th>Visits</th>
+        		            <th>Pages/Visit</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		        </tr>
+        		    </thead>
+        		    <tfoot>
+        		        <tr>
+        		            <td colspan="9"><a class="button pagination" href="#">Prev</a><a class="button pagination" href="#">Next</a></td>
+        		        </tr>
+        		    </tfoot>
+        		    <tbody>
+        		        <tr>
+        		            <td>Firefox first</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22 test test test</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00% test test test</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		    </tbody>
+        		</table>
+        	</div>
+        	<div class="clear"></div>
+        </div>
+        
+		<div class="container_12 divider">
+        	<div class="grid_4">
+        		<pre>
+        			<code>
+$('#myTable04').fixedHeaderTable({
+	altClass: 'odd',
+	footer: true,
+	cloneHeadToFoot: true,
+	fixedColumn: 3,
+});
+        			</code>
+        		</pre>
+        	</div>
+        	<div class="grid_4 height400">
+        		<table class="fancyTable" id="myTable04" cellpadding="0" cellspacing="0">
+        		    <thead>
+        		        <tr>
+        		            <th>Browser</th>
+        		            <th>Visits</th>
+        		            <th>Pages/Visit</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		            <th>Avg. Time on Site</th>
+        		            <th>% New Visits</th>
+        		            <th>Bounce Rate</th>
+        		        </tr>
+        		    </thead>
+        		    <tbody>
+        		        <tr>
+        		            <td>Firefox first</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22 test test test</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00% test test test</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		        <tr>
+        		            <td>Firefox</td>
+        		            <td class="numeric">1,990</td>
+        		            <td class="numeric">3.11</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		            <td class="numeric">00:04:22</td>
+        		            <td class="numeric">70.00%</td>
+        		            <td class="numeric">32.61%</td>
+        		        </tr>
+        		    </tbody>
+        		</table>
+        	</div>
+        	<div class="clear"></div>
+        </div>
+    </body>
+</html>

+ 706 - 0
VisualInspection/node_modules/fixed-header-table/jquery.fixedheadertable.js

@@ -0,0 +1,706 @@
+/*!
+ * jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin
+ *
+ * Copyright (c) 2013 Mark Malek
+ * http://fixedheadertable.com
+ *
+ * Licensed under MIT
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * http://docs.jquery.com/Plugins/Authoring
+ * jQuery authoring guidelines
+ *
+ * Launch  : October 2009
+ * Version : 1.3
+ * Released: May 9th, 2011
+ *
+ *
+ * all CSS sizing (width,height) is done in pixels (px)
+ */
+
+(function ($) {
+
+  $.fn.fixedHeaderTable = function (method) {
+
+    // plugin's default options
+    var defaults = {
+      width:          '100%',
+      height:         '100%',
+      themeClass:     'fht-default',
+      borderCollapse:  true,
+      fixedColumns:    0, // fixed first columns
+      fixedColumn:     false, // For backward-compatibility
+      sortable:        false,
+      autoShow:        true, // hide table after its created
+      footer:          false, // show footer
+      cloneHeadToFoot: false, // clone head and use as footer
+      autoResize:      false, // resize table if its parent wrapper changes size
+      create:          null // callback after plugin completes
+    };
+
+    var settings = {};
+
+    // public methods
+    var methods = {
+      init: function (options) {
+        settings = $.extend({}, defaults, options);
+
+        // iterate through all the DOM elements we are attaching the plugin to
+        return this.each(function () {
+          var $self = $(this); // reference the jQuery version of the current DOM element
+
+          if (helpers._isTable($self)) {
+            methods.setup.apply(this, Array.prototype.slice.call(arguments, 1));
+            $.isFunction(settings.create) && settings.create.call(this);
+          } else {
+            $.error('Invalid table mark-up');
+          }
+        });
+      },
+
+      /*
+       * Setup table structure for fixed headers and optional footer
+       */
+      setup: function () {
+        var $self       = $(this),
+            self        = this,
+            $thead      = $self.find('thead'),
+            $tfoot      = $self.find('tfoot'),
+            tfootHeight = 0,
+            $wrapper,
+            $divHead,
+            $divBody,
+            $fixedBody,
+            widthMinusScrollbar;
+
+        settings.originalTable = $(this).clone();
+        settings.includePadding = helpers._isPaddingIncludedWithWidth();
+        settings.scrollbarOffset = helpers._getScrollbarWidth();
+        settings.themeClassName = settings.themeClass;
+
+        if (settings.width.search('%') > -1) {
+            widthMinusScrollbar = $self.parent().width() - settings.scrollbarOffset;
+        } else {
+            widthMinusScrollbar = settings.width - settings.scrollbarOffset;
+        }
+
+        $self.css({
+          width: widthMinusScrollbar
+        });
+
+
+        if (!$self.closest('.fht-table-wrapper').length) {
+          $self.addClass('fht-table');
+          $self.wrap('<div class="fht-table-wrapper"></div>');
+        }
+
+        $wrapper = $self.closest('.fht-table-wrapper');
+
+        if(settings.fixedColumn == true && settings.fixedColumns <= 0) {
+          settings.fixedColumns = 1;
+        }
+
+        if (settings.fixedColumns > 0 && $wrapper.find('.fht-fixed-column').length == 0) {
+          $self.wrap('<div class="fht-fixed-body"></div>');
+
+          $('<div class="fht-fixed-column"></div>').prependTo($wrapper);
+
+          $fixedBody    = $wrapper.find('.fht-fixed-body');
+        }
+
+        $wrapper.css({
+          width: settings.width,
+          height: settings.height
+        })
+          .addClass(settings.themeClassName);
+
+        if (!$self.hasClass('fht-table-init')) {
+          $self.wrap('<div class="fht-tbody"></div>');
+        }
+
+        $divBody = $self.closest('.fht-tbody');
+
+        var tableProps = helpers._getTableProps($self);
+
+        helpers._setupClone($divBody, tableProps.tbody);
+
+        if (!$self.hasClass('fht-table-init')) {
+          if (settings.fixedColumns > 0) {
+            $divHead = $('<div class="fht-thead"><table class="fht-table"></table></div>').prependTo($fixedBody);
+          } else {
+            $divHead = $('<div class="fht-thead"><table class="fht-table"></table></div>').prependTo($wrapper);
+          }
+
+          $divHead.find('table.fht-table')
+            .addClass(settings.originalTable.attr('class'))
+            .attr('style', settings.originalTable.attr('style'));
+
+          $thead.clone().appendTo($divHead.find('table'));
+        } else {
+          $divHead = $wrapper.find('div.fht-thead');
+        }
+
+        helpers._setupClone($divHead, tableProps.thead);
+
+        $self.css({
+          'margin-top': -$divHead.outerHeight(true)
+        });
+
+        /*
+         * Check for footer
+         * Setup footer if present
+         */
+        if (settings.footer == true) {
+          helpers._setupTableFooter($self, self, tableProps);
+
+          if (!$tfoot.length) {
+            $tfoot = $wrapper.find('div.fht-tfoot table');
+          }
+
+          tfootHeight = $tfoot.outerHeight(true);
+        }
+
+        var tbodyHeight = $wrapper.height() - $thead.outerHeight(true) - tfootHeight - tableProps.border;
+
+        $divBody.css({
+          'height': tbodyHeight
+        });
+
+        $self.addClass('fht-table-init');
+
+        if (typeof(settings.altClass) !== 'undefined') {
+          methods.altRows.apply(self);
+        }
+
+        if (settings.fixedColumns > 0) {
+          helpers._setupFixedColumn($self, self, tableProps);
+        }
+
+        if (!settings.autoShow) {
+          $wrapper.hide();
+        }
+
+        helpers._bindScroll($divBody, tableProps);
+
+        return self;
+      },
+
+      /*
+       * Resize the table
+       * Incomplete - not implemented yet
+       */
+      resize: function() {
+        var self  = this;
+        return self;
+      },
+
+      /*
+       * Add CSS class to alternating rows
+       */
+      altRows: function(arg1) {
+        var $self = $(this),
+        altClass  = (typeof(arg1) !== 'undefined') ? arg1 : settings.altClass;
+
+        $self.closest('.fht-table-wrapper')
+          .find('tbody tr:odd:not(:hidden)')
+          .addClass(altClass);
+      },
+
+      /*
+       * Show a hidden fixedHeaderTable table
+       */
+      show: function(arg1, arg2, arg3) {
+        var $self   = $(this),
+            self      = this,
+            $wrapper  = $self.closest('.fht-table-wrapper');
+
+        // User provided show duration without a specific effect
+        if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'number') {
+          $wrapper.show(arg1, function() {
+            $.isFunction(arg2) && arg2.call(this);
+          });
+
+          return self;
+
+        } else if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'string' &&
+          typeof(arg2) !== 'undefined' && typeof(arg2) === 'number') {
+          // User provided show duration with an effect
+
+          $wrapper.show(arg1, arg2, function() {
+            $.isFunction(arg3) && arg3.call(this);
+          });
+
+          return self;
+
+        }
+
+        $self.closest('.fht-table-wrapper')
+          .show();
+        $.isFunction(arg1) && arg1.call(this);
+
+        return self;
+      },
+
+      /*
+       * Hide a fixedHeaderTable table
+       */
+      hide: function(arg1, arg2, arg3) {
+        var $self     = $(this),
+            self    = this,
+            $wrapper  = $self.closest('.fht-table-wrapper');
+
+        // User provided show duration without a specific effect
+        if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'number') {
+          $wrapper.hide(arg1, function() {
+            $.isFunction(arg3) && arg3.call(this);
+          });
+
+          return self;
+        } else if (typeof(arg1) !== 'undefined' && typeof(arg1) === 'string' &&
+          typeof(arg2) !== 'undefined' && typeof(arg2) === 'number') {
+
+          $wrapper.hide(arg1, arg2, function() {
+            $.isFunction(arg3) && arg3.call(this);
+          });
+
+          return self;
+        }
+
+        $self.closest('.fht-table-wrapper')
+          .hide();
+
+        $.isFunction(arg3) && arg3.call(this);
+
+
+
+        return self;
+      },
+
+      /*
+       * Destory fixedHeaderTable and return table to original state
+       */
+      destroy: function() {
+        var $self    = $(this),
+            self     = this,
+            $wrapper = $self.closest('.fht-table-wrapper');
+
+        $self.insertBefore($wrapper)
+          .removeAttr('style')
+          .append($wrapper.find('tfoot'))
+          .removeClass('fht-table fht-table-init')
+          .find('.fht-cell')
+          .remove();
+
+        $wrapper.remove();
+
+        return self;
+      }
+
+    };
+
+    // private methods
+    var helpers = {
+
+      /*
+       * return boolean
+       * True if a thead and tbody exist.
+       */
+      _isTable: function($obj) {
+        var $self = $obj,
+            hasTable = $self.is('table'),
+            hasThead = $self.find('thead').length > 0,
+            hasTbody = $self.find('tbody').length > 0;
+
+        if (hasTable && hasThead && hasTbody) {
+          return true;
+        }
+
+        return false;
+
+      },
+
+      /*
+       * return void
+       * bind scroll event
+       */
+      _bindScroll: function($obj) {
+        var $self = $obj,
+            $wrapper = $self.closest('.fht-table-wrapper'),
+            $thead = $self.siblings('.fht-thead'),
+            $tfoot = $self.siblings('.fht-tfoot');
+
+        $self.bind('scroll', function() {
+          if (settings.fixedColumns > 0) {
+            var $fixedColumns = $wrapper.find('.fht-fixed-column');
+
+            $fixedColumns.find('.fht-tbody table')
+              .css({
+                  'margin-top': -$self.scrollTop()
+              });
+          }
+
+          $thead.find('table')
+            .css({
+              'margin-left': -this.scrollLeft
+            });
+
+          if (settings.footer || settings.cloneHeadToFoot) {
+            $tfoot.find('table')
+              .css({
+                'margin-left': -this.scrollLeft
+              });
+          }
+        });
+      },
+
+      /*
+       * return void
+       */
+      _fixHeightWithCss: function ($obj, tableProps) {
+        if (settings.includePadding) {
+          $obj.css({
+            'height': $obj.height() + tableProps.border
+          });
+        } else {
+          $obj.css({
+            'height': $obj.parent().height() + tableProps.border
+          });
+        }
+      },
+
+      /*
+       * return void
+       */
+      _fixWidthWithCss: function($obj, tableProps, width) {
+        if (settings.includePadding) {
+          $obj.each(function() {
+            $(this).css({
+              'width': width == undefined ? $(this).width() + tableProps.border : width + tableProps.border
+            });
+          });
+        } else {
+          $obj.each(function() {
+            $(this).css({
+              'width': width == undefined ? $(this).parent().width() + tableProps.border : width + tableProps.border
+            });
+          });
+        }
+
+      },
+
+      /*
+       * return void
+       */
+      _setupFixedColumn: function ($obj, obj, tableProps) {
+        var $self             = $obj,
+            $wrapper          = $self.closest('.fht-table-wrapper'),
+            $fixedBody        = $wrapper.find('.fht-fixed-body'),
+            $fixedColumn      = $wrapper.find('.fht-fixed-column'),
+            $thead            = $('<div class="fht-thead"><table class="fht-table"><thead><tr></tr></thead></table></div>'),
+            $tbody            = $('<div class="fht-tbody"><table class="fht-table"><tbody></tbody></table></div>'),
+            $tfoot            = $('<div class="fht-tfoot"><table class="fht-table"><tfoot><tr></tr></tfoot></table></div>'),
+            fixedBodyWidth    = $wrapper.width(),
+            fixedBodyHeight   = $fixedBody.find('.fht-tbody').height() - settings.scrollbarOffset,
+            $firstThChildren,
+            $firstTdChildren,
+            fixedColumnWidth,
+            $newRow,
+            firstTdChildrenSelector;
+
+        $thead.find('table.fht-table').addClass(settings.originalTable.attr('class'));
+        $tbody.find('table.fht-table').addClass(settings.originalTable.attr('class'));
+        $tfoot.find('table.fht-table').addClass(settings.originalTable.attr('class'));
+
+        $firstThChildren = $fixedBody.find('.fht-thead thead tr > *:lt(' + settings.fixedColumns + ')');
+        fixedColumnWidth = settings.fixedColumns * tableProps.border;
+        $firstThChildren.each(function() {
+          fixedColumnWidth += $(this).outerWidth(true);
+        });
+
+        // Fix cell heights
+        helpers._fixHeightWithCss($firstThChildren, tableProps);
+        helpers._fixWidthWithCss($firstThChildren, tableProps);
+
+        var tdWidths = [];
+        $firstThChildren.each(function() {
+          tdWidths.push($(this).width());
+        });
+
+        firstTdChildrenSelector = 'tbody tr > *:not(:nth-child(n+' + (settings.fixedColumns + 1) + '))';
+        $firstTdChildren = $fixedBody.find(firstTdChildrenSelector)
+          .each(function(index) {
+            helpers._fixHeightWithCss($(this), tableProps);
+            helpers._fixWidthWithCss($(this), tableProps, tdWidths[index % settings.fixedColumns] );
+          });
+
+        // clone header
+        $thead.appendTo($fixedColumn)
+          .find('tr')
+          .append($firstThChildren.clone());
+
+        $tbody.appendTo($fixedColumn)
+          .css({
+            'margin-top': -1,
+            'height': fixedBodyHeight + tableProps.border
+          });
+
+        $firstTdChildren.each(function(index) {
+          if (index % settings.fixedColumns == 0) {
+            $newRow = $('<tr></tr>').appendTo($tbody.find('tbody'));
+
+            if (settings.altClass && $(this).parent().hasClass(settings.altClass)) {
+              $newRow.addClass(settings.altClass);
+            }
+          }
+
+          $(this).clone()
+            .appendTo($newRow);
+        });
+
+        // set width of fixed column wrapper
+        $fixedColumn.css({
+          'height': 0,
+          'width': fixedColumnWidth
+        });
+
+
+        // bind mousewheel events
+        var maxTop = $fixedColumn.find('.fht-tbody .fht-table').height() - $fixedColumn.find('.fht-tbody').height();
+        $fixedColumn.find('.fht-tbody .fht-table').bind('mousewheel', function(event, delta, deltaX, deltaY) {
+          if (deltaY == 0) {
+            return;
+          }
+          var top = parseInt($(this).css('marginTop'), 10) + (deltaY > 0 ? 120 : -120);
+          if (top > 0) {
+            top = 0;
+          }
+          if (top < -maxTop) {
+            top = -maxTop;
+          }
+          $(this).css('marginTop', top);
+          $fixedBody.find('.fht-tbody').scrollTop(-top).scroll();
+          return false;
+        });
+
+
+        // set width of body table wrapper
+        $fixedBody.css({
+          'width': fixedBodyWidth
+        });
+
+        // setup clone footer with fixed column
+        if (settings.footer == true || settings.cloneHeadToFoot == true) {
+          var $firstTdFootChild = $fixedBody.find('.fht-tfoot tr > *:lt(' + settings.fixedColumns + ')'),
+              footwidth;
+
+          helpers._fixHeightWithCss($firstTdFootChild, tableProps);
+          $tfoot.appendTo($fixedColumn)
+            .find('tr')
+            .append($firstTdFootChild.clone());
+          // Set (view width) of $tfoot div to width of table (this accounts for footers with a colspan)
+          footwidth = $tfoot.find('table').innerWidth();
+          $tfoot.css({
+            'top': settings.scrollbarOffset,
+            'width': footwidth
+          });
+        }
+      },
+
+      /*
+       * return void
+       */
+      _setupTableFooter: function ($obj, obj, tableProps) {
+        var $self     = $obj,
+            $wrapper  = $self.closest('.fht-table-wrapper'),
+            $tfoot    = $self.find('tfoot'),
+            $divFoot  = $wrapper.find('div.fht-tfoot');
+
+        if (!$divFoot.length) {
+          if (settings.fixedColumns > 0) {
+            $divFoot = $('<div class="fht-tfoot"><table class="fht-table"></table></div>').appendTo($wrapper.find('.fht-fixed-body'));
+          } else {
+            $divFoot = $('<div class="fht-tfoot"><table class="fht-table"></table></div>').appendTo($wrapper);
+          }
+        }
+        $divFoot.find('table.fht-table').addClass(settings.originalTable.attr('class'));
+
+        switch (true) {
+          case !$tfoot.length && settings.cloneHeadToFoot == true && settings.footer == true:
+
+            var $divHead = $wrapper.find('div.fht-thead');
+
+            $divFoot.empty();
+            $divHead.find('table')
+              .clone()
+              .appendTo($divFoot);
+
+            break;
+          case $tfoot.length && settings.cloneHeadToFoot == false && settings.footer == true:
+
+            $divFoot.find('table')
+              .append($tfoot)
+              .css({
+                'margin-top': -tableProps.border
+              });
+
+            helpers._setupClone($divFoot, tableProps.tfoot);
+
+            break;
+        }
+
+      },
+
+      /*
+       * return object
+       * Widths of each thead cell and tbody cell for the first rows.
+       * Used in fixing widths for the fixed header and optional footer.
+       */
+      _getTableProps: function($obj) {
+        var tableProp = {
+              thead: {},
+              tbody: {},
+              tfoot: {},
+              border: 0
+            },
+            borderCollapse = 1;
+
+        if (settings.borderCollapse == true) {
+          borderCollapse = 2;
+        }
+
+        tableProp.border = ($obj.find('th:first-child').outerWidth() - $obj.find('th:first-child').innerWidth()) / borderCollapse;
+
+        $obj.find('thead tr:first-child > *').each(function(index) {
+          tableProp.thead[index] = $(this).width() + tableProp.border;
+        });
+
+        $obj.find('tfoot tr:first-child > *').each(function(index) {
+          tableProp.tfoot[index] = $(this).width() + tableProp.border;
+        });
+
+        $obj.find('tbody tr:first-child > *').each(function(index) {
+          tableProp.tbody[index] = $(this).width() + tableProp.border;
+        });
+
+        return tableProp;
+      },
+
+      /*
+       * return void
+       * Fix widths of each cell in the first row of obj.
+       */
+      _setupClone: function($obj, cellArray) {
+        var $self    = $obj,
+            selector = ($self.find('thead').length) ?
+              'thead tr:first-child > *' :
+              ($self.find('tfoot').length) ?
+              'tfoot tr:first-child > *' :
+              'tbody tr:first-child > *',
+            $cell;
+
+        $self.find(selector).each(function(index) {
+          $cell = ($(this).find('div.fht-cell').length) ? $(this).find('div.fht-cell') : $('<div class="fht-cell"></div>').appendTo($(this));
+
+          $cell.css({
+            'width': parseInt(cellArray[index], 10)
+          });
+
+          /*
+           * Fixed Header and Footer should extend the full width
+           * to align with the scrollbar of the body
+           */
+          if (!$(this).closest('.fht-tbody').length && $(this).is(':last-child') && !$(this).closest('.fht-fixed-column').length) {
+            var padding = Math.max((($(this).innerWidth() - $(this).width()) / 2), settings.scrollbarOffset);
+            $(this).css({
+              'padding-right': parseInt($(this).css('padding-right')) + padding + 'px'
+            });
+          }
+        });
+      },
+
+      /*
+       * return boolean
+       * Determine how the browser calculates fixed widths with padding for tables
+       * true if width = padding + width
+       * false if width = width
+       */
+      _isPaddingIncludedWithWidth: function() {
+        var $obj = $('<table class="fht-table"><tr><td style="padding: 10px; font-size: 10px;">test</td></tr></table>'),
+            defaultHeight,
+            newHeight;
+
+        $obj.addClass(settings.originalTable.attr('class'));
+        $obj.appendTo('body');
+
+        defaultHeight = $obj.find('td').height();
+
+        $obj.find('td')
+          .css('height', $obj.find('tr').height());
+
+        newHeight = $obj.find('td').height();
+        $obj.remove();
+
+        if (defaultHeight != newHeight) {
+          return true;
+        } else {
+          return false;
+        }
+
+      },
+
+      /*
+       * return int
+       * get the width of the browsers scroll bar
+       */
+      _getScrollbarWidth: function() {
+        var scrollbarWidth = 0;
+
+        if (!scrollbarWidth) {
+          if (/msie/.test(navigator.userAgent.toLowerCase())) {
+            var $textarea1 = $('<textarea cols="10" rows="2"></textarea>')
+                  .css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body'),
+                $textarea2 = $('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>')
+                  .css({ position: 'absolute', top: -1000, left: -1000 }).appendTo('body');
+
+            scrollbarWidth = $textarea1.width() - $textarea2.width() + 2; // + 2 for border offset
+            $textarea1.add($textarea2).remove();
+          } else {
+            var $div = $('<div />')
+                  .css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: -1000 })
+                  .prependTo('body').append('<div />').find('div')
+                  .css({ width: '100%', height: 200 });
+
+            scrollbarWidth = 100 - $div.width();
+            $div.parent().remove();
+          }
+        }
+
+        return scrollbarWidth;
+      }
+
+    };
+
+
+    // if a method as the given argument exists
+    if (methods[method]) {
+
+      // call the respective method
+      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+
+      // if an object is given as method OR nothing is given as argument
+    } else if (typeof method === 'object' || !method) {
+
+      // call the initialization method
+      return methods.init.apply(this, arguments);
+
+      // otherwise
+    } else {
+
+      // trigger an error
+      $.error('Method "' +  method + '" does not exist in fixedHeaderTable plugin!');
+
+    }
+
+  };
+
+})(jQuery);

文件差異過大導致無法顯示
+ 18 - 0
VisualInspection/node_modules/fixed-header-table/jquery.fixedheadertable.min.js


+ 92 - 0
VisualInspection/node_modules/fixed-header-table/lib/jquery.mousewheel.js

@@ -0,0 +1,92 @@
+/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
+ *
+ * Version: 3.0.4
+ * 
+ * Requires: 1.2.2+
+ */
+
+(function($) {
+
+var types = ['DOMMouseScroll', 'mousewheel'];
+
+$.event.special.mousewheel = {
+    setup: function() {
+        if ( this.addEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.addEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = handler;
+        }
+    },
+    
+    teardown: function() {
+        if ( this.removeEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.removeEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = null;
+        }
+    }
+};
+
+$.fn.extend({
+    mousewheel: function(fn) {
+        return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
+    },
+    
+    unmousewheel: function(fn) {
+        return this.unbind("mousewheel", fn);
+    }
+});
+
+
+function handler(event) {
+    var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
+    event = $.event.fix(orgEvent);
+    event.type = "mousewheel";
+    
+    // Old school scrollwheel delta
+    if ( event.wheelDelta ) { delta = event.wheelDelta/120; }
+    if ( event.detail     ) { delta = -event.detail/3; }
+    
+    // New school multidimensional scroll (touchpads) deltas
+    deltaY = delta;
+    
+    // Gecko
+    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+        deltaY = 0;
+        deltaX = -1*delta;
+    }
+    
+
+    // Webkit    
+    var userAgent = navigator.userAgent.toLowerCase();
+    
+    var wheelDeltaScaleFactor = 1;
+    if (jQuery.browser.msie || (jQuery.browser.webkit && !(/chrome/.test(userAgent)))) {
+      wheelDeltaScaleFactor = 40;
+    }
+
+    if (orgEvent.wheelDeltaY !== undefined) { 
+        deltaY = orgEvent.wheelDeltaY / 120 / wheelDeltaScaleFactor;
+    }
+    if (orgEvent.wheelDeltaX !== undefined) {
+        deltaX = -1*orgEvent.wheelDeltaX / 120 / wheelDeltaScaleFactor;
+    }
+    
+    // Add event and delta to the front of the arguments
+    args.unshift(event, delta, deltaX, deltaY);
+    
+    if ($.event.handle) {
+        return $.event.handle.apply(this, args);
+    }
+}
+
+})(jQuery);

+ 48 - 0
VisualInspection/node_modules/fixed-header-table/package.json

@@ -0,0 +1,48 @@
+{
+  "_from": "fixed-header-table",
+  "_id": "fixed-header-table@1.3.0",
+  "_inBundle": false,
+  "_integrity": "sha1-YmqUZWrQGAo0d4PsizqLk0QOG+E=",
+  "_location": "/fixed-header-table",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "fixed-header-table",
+    "name": "fixed-header-table",
+    "escapedName": "fixed-header-table",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "http://registry.npm.taobao.org/fixed-header-table/download/fixed-header-table-1.3.0.tgz",
+  "_shasum": "626a94656ad0180a347783ec8b3a8b93440e1be1",
+  "_spec": "fixed-header-table",
+  "_where": "/Users/wenhongquan/VisualInspection/VisualInspection",
+  "author": {
+    "name": "Mark Malek",
+    "email": "mark@mmalek.com"
+  },
+  "bugs": {
+    "url": "https://github.com/markmalek/Fixed-Header-Table/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "jQuery plugin for tables with fixed headers",
+  "homepage": "https://github.com/markmalek/Fixed-Header-Table",
+  "license": "MIT",
+  "main": "jquery.fixedheadertable.js",
+  "name": "fixed-header-table",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/markmalek/Fixed-Header-Table.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "version": "1.3.0"
+}

+ 5 - 0
VisualInspection/package-lock.json

@@ -65,6 +65,11 @@
       "resolved": "http://registry.npm.taobao.org/dom-walk/download/dom-walk-0.1.1.tgz",
       "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
     },
+    "fixed-header-table": {
+      "version": "1.3.0",
+      "resolved": "http://registry.npm.taobao.org/fixed-header-table/download/fixed-header-table-1.3.0.tgz",
+      "integrity": "sha1-YmqUZWrQGAo0d4PsizqLk0QOG+E="
+    },
     "for-each": {
       "version": "0.3.3",
       "resolved": "http://registry.npm.taobao.org/for-each/download/for-each-0.3.3.tgz",

+ 1 - 0
VisualInspection/package.json

@@ -22,6 +22,7 @@
     "homepage": "https://github.com/fis-scaffold/default",
     "dependencies": {
         "blueimp-md5": "^2.10.0",
+        "fixed-header-table": "^1.3.0",
         "hashmap": "^2.3.0",
         "moment": "^2.22.2",
         "video.js": "^7.2.0",

+ 276 - 89
VisualInspection/qzd/js/task/add.js

@@ -44,9 +44,9 @@ var stimemonth = null;
 
 function initselecttable() {
     selectedData = { cols: [], array: [], cache: false };
-    selectedData.cols.push({ width: 0.2, name: "name", label: '人员', style: { 'text-align': 'center', 'line-height': '34px' } });
-    selectedData.cols.push({ width: 0.4, name: "car", label: '任务名称', style: { 'text-align': 'center', 'line-height': '34px' } });
-    selectedData.cols.push({ width: 0.3, name: "option", label: '操作', html: true, style: { 'text-align': 'center', 'line-height': '34px' } });
+    selectedData.cols.push({ width: 0.3, name: "usernames", label: '人员', style: { 'text-align': 'center', 'line-height': '34px' } });
+    selectedData.cols.push({ width: 0.5, name: "taskname", label: '任务名称', style: { 'text-align': 'center', 'line-height': '34px' } });
+    selectedData.cols.push({ width: 0.1, name: "option", label: '操作', html: true, style: { 'text-align': 'center', 'line-height': '34px' } });
     reloadtable();
 
 }
@@ -69,46 +69,124 @@ function inittAreaable(time, dept) {
     var endtime = moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss");
     var starttime = moment(moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss").subtract(1, 'month'));
 
-    var param1 = { "startTime": new Date(starttime), "endTime": new Date(endtime), "dept": dept }
-    post_common_service("/q/record/getall/0/0", param1, function(taskdata) {
-        taskMap = new HashMap();
-        recordlist = taskdata;
-        taskdata.forEach(t => {
-            var user = t.users.split(",");
-            for (var i = 0; i < user.length; i++) {
-                var key = user[i] + "_" + moment(t.received_time).format("YYYY-MM-DD");
-                if (taskMap.get(key) != null) {
-                    var list = taskMap.get(key);
-                    list.push(t);
-                    taskMap.set(key, list);
-                } else {
-                    var list = [];
-                    list.push(t);
-                    taskMap.set(key, list);
+    var param1 = { "start_time": starttime.format("YYYY-MM-DD HH:mm:ss"), "end_time": endtime.format("YYYY-MM-DD HH:mm:ss"), "checked_dept": dept }
+
+
+
+    //获取排班情况
+    post_common_service("/q/record/getall/0/0", param1, function(redatatemp) {
+
+        console.log(redatatemp)
+        var recodedata = redatatemp.records;
+
+        //获取任务情况
+        post_common_service("/q/task/getall/0/0", param1, function(taskdata) {
+            taskMap = new HashMap();
+            recodedata.forEach(r => {
+                taskdata.forEach(t => {
+                    if (r.id == t.record_id) {
+                        //该记录的任务
+                        r["task"] = t;
+                    }
+                });
+                var user = r.users.split(",");
+                for (var i = 0; i < user.length; i++) {
+                    var key = user[i] + "_" + "" + moment(r.received_time).format("YYYY-MM-DD");
+                    if (taskMap.get(key) != null) {
+                        var list = taskMap.get(key);
+                        list.push(r);
+                        taskMap.set(key, list);
+                    } else {
+                        var list = [];
+                        list.push(r);
+                        taskMap.set(key, list);
+                    }
                 }
-            }
+            });
+
         });
+
+        checkuserlist = redatatemp.checkusers;
+
+
         var userData = {
             "organid": dept
         };
         UserGetList(userData, function(redata) {
             layer.close(layer.index);
             var data = redata;
-            rowsDate = redata;
 
-            //  checkuserlist = redata.checkusers;
-            var datac = { cols: [], array: [] };
 
-            var days = endtime.diff(starttime, 'days');
+            datatemp = {
+                data: data,
+                t: t,
+                starttime: starttime,
+                endtime: endtime,
+                time: time,
+                records: recodedata
+            };
+            reloadtableData();
+
+            if (tabledatagride != null) {
+                tabledatagride.dataSource.data = null;
+                tabledatagride.setDataSource(datac);
+                tabledatagride.setPager(1, datac.array.length, datac.array.length);
+                tabledatagride.render();
+            } else {
+
+                $(".completec").mouseover(function() {
+                    var titlehtml = "稽查完成";
+                    layer.tips(titlehtml, "#" + this.id, {
+                        tips: [1, '#8e8e8e'],
+                        time: 0,
+                        width: '240px'
+                    });
+                });
+                $(".doingc").mouseover(function() {
+                    var titlehtml = "稽查中";
+                    layer.tips(titlehtml, "#" + this.id, {
+                        tips: [1, '#8e8e8e'],
+                        time: 0,
+                        width: '240px'
+                    });
+                });
+                $(".unusec").mouseover(function() {
+                    var titlehtml = "无效";
+                    layer.tips(titlehtml, "#" + this.id, {
+                        tips: [1, '#8e8e8e'],
+                        time: 0,
+                        width: '240px'
+                    });
+                });
+                $(".novideoc").mouseover(function() {
+                    var titlehtml = "未上传视屏";
+                    layer.tips(titlehtml, "#" + this.id, {
+                        tips: [1, '#8e8e8e'],
+                        time: 0,
+                        width: '240px'
+                    });
+                });
+
+
+                $(".btn,.btc").mouseout(function() {
+                    layer.close(layer.index);
+                });
+
+                $('#myTable05').fixedHeaderTable({ altClass: 'odd', footer: false, fixedColumns: 1 });
+            }
 
-            datac.cols.push({ width: 120, name: 'type', label: "", });
+            for (var index in checkuserlist) {
+                var p = checkuserlist[index];
+                p.title = p.truename;
+            }
 
-            for (var i = 1; i <= days; i++) {
-                var temp = moment(moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss").subtract(1, 'month'));
-                var currentday = temp.add(i, "day");
-                var day = currentday.date();
-                datac.cols.push({ width: 80, name: "day_" + i, label: currentday.format("MM-DD"), html: true, className: "table_content" });
+            if (checkusersselect != null) {
+                reset();
             }
+            checkusersselect = $('#check_users').comboTree({
+                source: checkuserlist,
+                isMultiple: true
+            });
         });
     });
 }
@@ -137,14 +215,12 @@ function reset() {
     $("#starttime").val("");
     $("#endtime").val("");
 
-
-
 }
 
 
 function selectedTask(obj) {
-    changeListItem(obj.id);
 
+    changeListItem(obj.id);
 }
 
 function removeListItem(obj) {
@@ -155,7 +231,6 @@ function removeListItem(obj) {
 }
 
 function changeListItem(id) {
-    console.log(taskMap);
     var cobj;
     var tempids = id.split("_");
     var t = stimemonth.replace("/", "-") + "";
@@ -163,39 +238,53 @@ function changeListItem(id) {
     var currentday = temp.add(tempids[1], "day");
     var taskMapid = tempids[0] + "_" + currentday.format("YYYY-MM-DD");
     var cpeople;
-    for (var index in rowsDate) {
-        var obj = rowsDate[index];
-        if (obj.id == tempids[0]) {
-            cpeople = obj;
-            // truename = obj.truename;
+
+    for (var index in datatemp.data) {
+        var user = datatemp.data[index];
+        if (user.id == tempids[0]) {
+            cpeople = user;
         }
     }
-    for (var i in recordlist) {
-        if (taskMap.get(taskMapid)[id.split("_")[2]].id == recordlist[i].id) {
-            cobj = recordlist[i];
+
+    for (var i in taskMap.get(taskMapid)) {
+        if (taskMap.get(taskMapid)[i].id == tempids[2]) {
+            cobj = taskMap.get(taskMapid)[i];
         }
     }
 
     if ($("#" + id).prop('checked')) {
         activteChange(cobj, tempids);
-        addlisttable(cobj, taskMapid, id);
+        addlisttable(cobj, id);
     } else {
         activteRemove(cobj, tempids);
-        removelisttable(cobj, currentday.format("YYYY-MM-DD"));
+        removelisttable(cobj);
     }
 }
 
 
-function addlisttable(people, id, arryid) {
-    var dept_info = null;
-    id = trim(id);
-    var time = id.split("_")[1];
-    var record = taskMap.get(id)[arryid.split("_")[2]];
-    var date = moment(record.received_time).format("MM/DD");
+function addlisttable(record, id) {
+    var tempids = id.split("_");
+    var t = stimemonth.replace("/", "-") + "";
+    var temp = moment(moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss").subtract(1, 'month'));
+    var currentday = temp.add(tempids[1], "day");
+
     var stime = moment(record.received_time).format("HH:mm");
     var etime = moment(record.back_time).format("HH:mm");
-    var btn = '<button class="btn btn-primary" type="button" onclick="removeListItem(this)" id="delete_' + arryid + '">删除</button>';
-    selectedData.array.push({ "name": people.userNames, "car": date + ' ' + stime + "-" + etime + record.car_info + "清障任务", "option": btn, peopleinfo: people, time: time });
+
+    var taskname = currentday.format("YYYY-MM-DD") + " " + stime + "~" + etime + " " + record.car_info + "清障任务";
+    record.rname = taskname;
+
+    var feeList = $.zui.store.get("cache_wrecker_group_list");
+    var dept_info = null;
+    for (var index in feeList) {
+        var dept = feeList[index];
+        if (record.dept == dept.deptid) {
+            dept_info = dept;
+        }
+    }
+    id = trim(id);
+    var btn = '<button class="btn btn-primary" type="button" onclick="removeListItem(this)" id="delete_' + id + '">删除</button>';
+    selectedData.array.push({ "usernames": record.userNames, "time": currentday.format("YYYY-MM-DD"), "dept_name": dept_info.name, "taskname": taskname, "option": btn, recordInfo: record, deptInfo: dept_info });
 
     var myDataGrid = $('#selected_table').data('zui.datagrid');
     myDataGrid.dataSource.data = null;
@@ -203,14 +292,15 @@ function addlisttable(people, id, arryid) {
     myDataGrid.setPager(1, selectedData.array.length, selectedData.array.length);
     myDataGrid.render();
 
-    // $('#selected_table').data('zui.datagrid').setDataSource(selectedData);
-    // $('#selected_table').data('zui.datagrid').renderData();
 }
 
-function removelisttable(people, time) {
+function removelisttable(record) {
+
+    console.log(record)
+
     for (var index in selectedData.array) {
         var o = selectedData.array[index];
-        if (o != null && o.peopleinfo.id == people.id && time.format("YYYY-MM-DD") == o.time) {
+        if (o != null && o.recordInfo.id == record.id) {
             selectedData.array.splice(index, 1);
         }
     }
@@ -234,7 +324,6 @@ function search() {
 function addTask() {
     //获取列表
     var tasklist = selectedData.array;
-    console.log(tasklist);
     if (tasklist.length < 1) {
         layer.msg('未选择清障记录!', {
             time: 2000, //20s后自动关闭
@@ -242,34 +331,35 @@ function addTask() {
         return;
     }
     var check_user_list = checkusersselect.getSelectedItemsId();
-    var count = tasklist.length / check_user_list.length;
-    var u_index = 0;
-    var index = 0;
-    for (var i in tasklist) {
-        var obj = tasklist[i];
-        if (index++ == count) {
-            u_index++;
-            if (u_index == check_user_list.length) {
-                u_index--;
-            }
-        }
-        var param = {
-            "name": obj.car,
-            "check_status": 2,
-            "start_time": moment(obj.peopleinfo.received_time).format("YYYY-MM-DD HH:mm:ss"),
-            "end_time": moment(obj.peopleinfo.back_time).format("YYYY-MM-DD HH:mm:ss"),
-            "checked_dept": obj.peopleinfo.dept,
-            "checkman": parseInt(check_user_list[u_index]),
-            "record_id": parseInt(obj.peopleinfo.id),
-            "checked_users": obj.peopleinfo.users,
-            "rule_id": 6
-        }
-        console.log(param);
-        post_common_service('/q/task/add', param, function(redata) {
-            layer.msg('已添加', { icon: 1 });
-            //inittAreaable($("#month_date").val(), $("#qzd").val());
-        });
-    }
+
+    // var param = {
+    //     "name": obj.car,
+    //     "check_status": 2,
+    //     "start_time": moment(obj.peopleinfo.received_time).format("YYYY-MM-DD HH:mm:ss"),
+    //     "end_time": moment(obj.peopleinfo.back_time).format("YYYY-MM-DD HH:mm:ss"),
+    //     "checked_dept": obj.peopleinfo.dept,
+    //     "checkman": parseInt(check_user_list[u_index]),
+    //     "record_id": parseInt(obj.peopleinfo.id),
+    //     "checked_users": obj.peopleinfo.users,
+    //     "rule_id": 6
+    // }
+    // console.log(param);
+
+
+
+    var check_user_list = checkusersselect.getSelectedItemsId();
+    var plist = []
+    tasklist.forEach(t => {
+        plist.push(t.recordInfo);
+    });
+    console.log(plist)
+    var param = { "userids": check_user_list, "qzdRecord": plist };
+
+    post_common_service('/q/task/add', param, function(redata) {
+        layer.msg('已添加', { icon: 1 });
+        inittAreaable($("#month_date").val(), $("#qzd").val());
+    });
+
     // post_common_service('/f/task/add', param, function(redata) {
     //     // layer.msg('已添加', { icon: 1 });
     //     inittAreaable($("#month_date").val(), $("#qzd").val());
@@ -279,10 +369,10 @@ function addTask() {
 }
 
 function getpeople() {
-    var orginid = $("#qzd").val();
-    var userData = {
-        "organid": orginid
-    }
+    // var orginid = $("#qzd").val();
+    // var userData = {
+    //     "organid": orginid
+    // }
 }
 
 function activteChange(cobj, tempids) {
@@ -309,4 +399,101 @@ function activteRemove(cobj, tempids) {
             }
         }
     }
+}
+
+
+
+var userlist = null;
+var stimemonth = null;
+var datatemp = {};
+
+function reloadtableData() {
+    var data = datatemp.data;
+    var t = datatemp.t;
+    var starttime = datatemp.starttime;
+    var endtime = datatemp.endtime;
+    var time = datatemp.time;
+
+    datac = { cols: [], array: [] };
+
+    var days = endtime.diff(starttime, 'days');
+
+    datac.cols.push({ width: 200, name: 'type', label: "", });
+
+    var tbhtml = "";
+    var thhtml = "<thead><tr>";
+    var tbodyhtml = "<tbody>";
+
+    thhtml += "<th>" + "<button class='datatime' onclick='selectedall(this)' id='datatimebtn_" + i + "' style='width:100px;height:100%;background:rgba(0,0,0,0)'></button>" + "</th>";
+
+    for (var i = 1; i <= days; i++) {
+        var temp = moment(moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss").subtract(1, 'month'));
+        var currentday = temp.add(i, "day");
+        var day = currentday.date();
+        thhtml += "<th>" + "<button class='datatime' onclick='selectedall(this)' id='datatimebtn_" + i + "' style='width:100px;height:100%;background:rgba(0,0,0,0)'>" + currentday.format("MM-DD") + "</button>" + "</th>";
+        // datac.cols.push({ width: 80, name: "day_" + i, label: "<button class='datatime' onclick='selectedall(this)' id='datatimebtn_" + i + "' style='width:100%;height:100%;background:rgba(0,0,0,0)'>" + currentday.format("MM-DD") + "</button>", html: true, className: "table_content" });
+    }
+    thhtml += "</tr></thead>";
+    tbhtml += thhtml;
+    userlist = data;
+    stimemonth = time;
+
+
+    for (var index in data) {
+        var user = data[index];
+
+        tbodyhtml += "<tr>";
+        tbodyhtml += "<td style='vertical-align:middle'><label style='width:100px;margin:0'>" + user.truename + "</label></td>";
+
+        for (var i = 1; i <= days; i++) {
+            //内容
+            var temp = moment(moment(t + "-25T23:00:00", "YYYY-MM-DD HH:mm:ss").subtract(1, 'month'));
+            var currentday = temp.add(i, "day");
+            var key = user.id + "_" + currentday.format("YYYY-MM-DD");
+
+            var temphtml = "";
+            tbodyhtml += "<td>";
+
+            if (taskMap.get(key) != null) {
+                //存在稽查记录
+                var list = taskMap.get(key);
+
+                list.forEach(r => {
+                    var t = r.task;
+                    //未生成任务
+                    if (t == null) {
+                        if (r.videos == null || r.videos == undefined || r.videos == "") {
+                            temphtml += '<button data-toggle="button" class="btc novideoc" style="margin:10px;background:#fff;border-color:#fff;color:#03b8cf"  type="button" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</button>';
+
+                        } else {
+                            temphtml += '<div class="btn-group normal" style="margin:10px;" data-toggle="buttons" id="btn_u_' + user.id + '_r_' + r.id + '"> <label class="btn btn-info2 "> <input type="checkbox"  onchange="selectedTask(this)" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</label></div>';
+                            //temphtml += '<button data-toggle="button" class="btc normal" style="margin:10px" onclick="selectedTask(this)" type="button" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</button>';
+
+                        }
+
+                    } else
+                    if (t.check_status == 4 || t.check_status == 16 || t.check_status == 6) {
+                        //完成稽查
+                        temphtml += '<button data-toggle="button" class="btc completec" style="margin:10px"  type="button" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</button>';
+
+                    } else
+                    if (t.check_status == 22) {
+                        //存在无效任务
+                        temphtml += '<button data-toggle="button" class="btc unusec" style="margin:10px"  type="button" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</button>';
+
+                    } else {
+                        //考核进行中
+                        temphtml += '<button data-toggle="button" class="btc doingc" style="margin:10px;" type="button" id="' + user.id + '_' + i + '_' + r.id + '">' + moment(r.received_time).format("HH:mm") + "~" + moment(r.back_time).format("HH:mm") + '</button>';
+                    }
+                });
+            }
+            tbodyhtml += temphtml;
+            tbodyhtml += "</td>";
+        }
+        tbodyhtml += "</tr>";
+    }
+    tbodyhtml += "</tbody>";
+    tbhtml += tbodyhtml;
+    $("#table_html").html('<table class="fancyTable" id="myTable05" cellpadding="0" cellspacing="0"> </table>');
+    $("#myTable05").html(tbhtml)
 }

+ 9 - 8
VisualInspection/qzd/js/task/task_list.js

@@ -102,15 +102,16 @@ function queryTask() {
         "checked_dept": $("#qzd").val(),
         "check_status": cur_status
     };
-     console.log(data);
+    console.log(data);
     var hide = false;
     if (hasRole(ROLE_QZD_ADMIN) || hasRole(ROLE_QZD) || hasRole(ROLE_JICHA) || roleContains('QZD')) {
         hide = true;
     }
     var cols = [
         { width: 80, text: '序号', type: 'number', flex: true, colClass: 'text-center', field: 'num' },
-        { width: 160, text: '任务名称', type: 'string', flex: true, sort: 'down', field: 'name' },
-        { width: 160, text: '考核部门', type: 'string', flex: true, sort: 'down', field: 'checked_dept_name' },
+        { width: 200, text: '任务名称', type: 'string', flex: true, sort: 'down', field: 'name' },
+        { width: 80, text: '考核部门', type: 'string', flex: true, sort: 'down', field: 'checked_dept_name' },
+        { width: 80, text: '考核人员', type: 'string', flex: true, colClass: '', field: 'checked_users_name' },
         { width: 80, text: '稽查人员', type: 'string', flex: true, hide: hide, colClass: '', field: 'checkman_name' },
         { width: 160, text: '稽查时间段', type: 'string', flex: true, sort: 'down', field: 'check_period' },
         // {width: 120, text: '状态', type: 'string', flex: true, colClass: '',field: 'check_status_name'}
@@ -269,10 +270,10 @@ function confirmTaskPatch() {
 }
 
 
-function gettask(){
-    param={"check_status":2};
+function gettask() {
+    param = { "check_status": 2 };
     post_common_service('/q/task/getall/0/0', param, function(redata) {
-      console.log(redata);
-       //inittAreaable($("#month_date").val(), $("#qzd").val());
-   });
+        console.log(redata);
+        //inittAreaable($("#month_date").val(), $("#qzd").val());
+    });
 }

+ 62 - 12
VisualInspection/qzd/view/task/add.html

@@ -23,8 +23,53 @@
         text-align: center;
     }
     
+    .btc {
+        padding: 5px 12px !important;
+        border: 1px solid;
+    }
+    
+    .doingc {
+        color: #fff;
+        background-color: #2EA98C;
+        border-radius: 4px;
+        border-color: #2EA98C;
+        text-shadow: none;
+    }
+    
+    .unusec {
+        color: #fff;
+        background-color: #ed980f;
+        border-radius: 4px;
+        border-color: #ed980f;
+        text-shadow: none;
+    }
+    
+    .completec {
+        color: #fff;
+        background-color: #ea644a;
+        border-radius: 4px;
+        border-color: #ea644a;
+        text-shadow: none;
+    }
+    
+    .normal {
+        color: #fff;
+        background-color: #03b8cf;
+        border-radius: 4px;
+        border-color: #03b8cf;
+        text-shadow: none;
+    }
+    
+    .novideoc {
+        color: #03b8cf;
+        background-color: #fff;
+        border-radius: 4px;
+        border-color: #fff;
+        text-shadow: none;
+    }
+    
     .divstyle {
-        width: 60px;
+        width: 30px;
         height: 20px;
         float: left;
     }
@@ -56,33 +101,38 @@
         </div>
     </div>
 
-    <div class="row" style="height: 400px;">
-        <div class="datagrid" id="table_s" data-checkable="false" data-sortable="false"></div>
+    <div class="row" style="height: 390px;" id="table_html">
+        <!-- <div class="datagrid" id="table_s" data-checkable="false" data-sortable="false"> -->
+
+        <table class="fancyTable" id="myTable05" cellpadding="0" cellspacing="0">
+
+        </table>
+
+
+        <!-- </div> -->
     </div>
-    <br/>
-    <div class="row">
+
+    <div class="row" style="margin-top: 5px">
         <div class="col-xs-2">
             <div class="divstyle" style="background-color: white"></div><span style="float: left;">&nbsp;&nbsp;未上传视频</span>
         </div>
         <div class="col-xs-2">
-            <div class="divstyle" style="background-color: #03b8cf"></div><span style="float: left;">&nbsp;&nbsp;上传视频未稽查</span>
+            <div class="divstyle" style="background-color: #03b8cf"></div><span style="float: left;">&nbsp;&nbsp;未稽查</span>
         </div>
         <div class="col-xs-2">
             <div class="divstyle" style="background-color: gray"></div><span style="float: left;">&nbsp;&nbsp;已选任务</span>
         </div>
-    </div>
-    <br/>
-    <div class="row">
         <div class="col-xs-2">
-            <div class="divstyle" style="background-color: red"></div><span style="float: left;">&nbsp;&nbsp;已稽查</span>
+            <div class="divstyle" style="background-color: #ea644a"></div><span style="float: left;">&nbsp;&nbsp;已稽查</span>
         </div>
         <div class="col-xs-2">
-            <div class="divstyle" style="background-color: green"></div><span style="float: left;">&nbsp;&nbsp;稽查中</span>
+            <div class="divstyle" style="background-color:#2EA98C"></div><span style="float: left;">&nbsp;&nbsp;稽查中</span>
         </div>
         <div class="col-xs-2">
-            <div class="divstyle" style="background-color: blue"></div><span style="float: left;">&nbsp;&nbsp;无效</span>
+            <div class="divstyle" style="background-color: #ed980f"></div><span style="float: left;">&nbsp;&nbsp;无效</span>
         </div>
     </div>
+
     <div class="row">
         <div class="col-xs-6" style="">
             <div class="row">

+ 7 - 2
VisualInspection/view/common/commoncsslink.html

@@ -7,8 +7,13 @@
 <link rel="stylesheet" type="text/css" href="/js/lib/kkpager_green.css">
 <link rel="stylesheet" type="text/css" href="/js/lib/slide/css/bootstrap-slider.min.css">
 <link rel="stylesheet" type="text/css" href="/node_modules/zui/dist/lib/calendar/zui.calendar.css">
-<link rel="stylesheet" type="text/css" href="/js/lib/webuploader/webuploader.css">  
-<link rel="stylesheet" type="text/css" href="/js/lib/tags/jquery.tagsinput.min.css"> 
+<link rel="stylesheet" type="text/css" href="/js/lib/webuploader/webuploader.css">
+<link rel="stylesheet" type="text/css" href="/js/lib/tags/jquery.tagsinput.min.css">
 <link rel="stylesheet" type="text/css" href="/node_modules/zui/dist/lib/uploader/zui.uploader.min.css">
 <link href="/node_modules/zui/dist/lib/chosen/chosen.min.css" rel="stylesheet">
 <link rel="stylesheet" type="text/css" href="/js/lib/jedate/skin/jedate.css">
+
+<link rel="stylesheet" type="text/css" href="/node_modules/fixed-header-table/css/defaultTheme.css">
+
+<link href="/node_modules/fixed-header-table/demo/css/960.css" rel="stylesheet" media="screen" />
+<link href="/node_modules/fixed-header-table/demo/css/myTheme.css" rel="stylesheet" media="screen" />

+ 4 - 0
VisualInspection/view/common/commonscriptlink.html

@@ -32,6 +32,10 @@
 <script src="/js/util/video.js"></script>
 <script src="/js/util/media.js"></script>
 
+<script src="/node_modules/fixed-header-table/jquery.fixedheadertable.min.js"></script>
+
+
+
 <script type="text/javascript">
     $(document).ready(function() {
         // getServerTime();

+ 19 - 2
VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/gettway/RecordController_Q.java

@@ -8,9 +8,11 @@ import com.xintong.visualinspection.pojo.fwq.TaskData_F;
 import com.xintong.visualinspection.service.CheckAppealService_F;
 import com.xintong.visualinspection.service.RecordService_Q;
 import com.xintong.visualinspection.service.TaskService_F;
+import com.xintong.visualinspection.service.UserService;
 import com.xintong.visualinspection.util.AuthorUtil;
 import com.xintong.visualinspection.util.CacheUtil;
 import com.xintong.visualinspection.util.Constants;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/q/record")
@@ -30,7 +34,8 @@ public class RecordController_Q extends BaseController {
             registry = "${dubbo.registry.address}")
     private RecordService_Q recordService_q;
 
-
+    @Autowired
+    private UserService userService;
 
     @RequestMapping(value = "/getall/{page}/{size}")
     public String getall(HttpServletRequest request, @PathVariable Integer page, @PathVariable Integer size, @RequestBody QzdRecord qzdRecord) {
@@ -41,7 +46,19 @@ public class RecordController_Q extends BaseController {
             qzdRecord.setDept(user.getOrganid());
         }
         Object ss = recordService_q.getAllRecord(page, size, qzdRecord);
-        return super.returnSuccessResult(ss);
+
+        if(page==0&&size==0) {
+            Map<String, Object> u = new HashMap<String, Object>();
+            User us = new User();
+            us.setOrganid(29);
+            List<Integer> pos = new ArrayList<>();
+            pos.add(2);
+            us.setPosition_ids(pos);
+            u.put("checkusers", userService.getUsers(us));
+            u.put("records", ss);
+            return super.returnSuccessResult("success",u,"yyyy-MM-dd HH:mm:ss");
+        }
+        return super.returnSuccessResult("success",ss,"yyyy-MM-dd HH:mm:ss");
     }
 
 

+ 20 - 3
VisualInspection_server/src/main/java/com/xintong/visualinspection/controller/gettway/TaskController_Q.java

@@ -5,9 +5,11 @@ import com.xintong.system.err.BusinessException;
 import com.xintong.visualinspection.bean.*;
 import com.xintong.visualinspection.controller.BaseController;
 import com.xintong.visualinspection.pojo.fwq.TaskData_F;
+import com.xintong.visualinspection.pojo.qzd.TaskDate_Q;
 import com.xintong.visualinspection.service.CheckAppealService_F;
 import com.xintong.visualinspection.service.TaskService_Q;
 import com.xintong.visualinspection.util.AuthorUtil;
+import com.xintong.visualinspection.util.CacheUtil;
 import com.xintong.visualinspection.util.Constants;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
 
 @RestController
@@ -33,13 +36,26 @@ public class TaskController_Q extends BaseController {
 
 
     @RequestMapping(value = "/add")
+    public String addtask(HttpServletRequest request, @RequestBody TaskDate_Q taskData_q) {
+        if (taskData_q == null || taskData_q.getQzdRecord() == null || taskData_q.getUserids() == null || taskData_q.getUserids().size() < 1 || taskData_q.getQzdRecord().size() < 1) {
+            throw new BusinessException(21502);
+        }
+        List<User> us = new ArrayList<>();
+        for (String u : taskData_q.getUserids()
+                ) {
+            User user = CacheUtil.userMap.get(Long.valueOf(u));
+            us.add(user);
+        }
+        taskData_q.setUsers(us);
 
-    public String addtask(HttpServletRequest request, @Valid @RequestBody QzdCheckTask task) {
+        User user = getCurrentUser(request);
+        taskData_q.setUser_id(user.getId());
         try {
-            taskService_q.addTask(task);
-        }catch (Exception e) {
+            taskService_q.addTask(taskData_q);
+        } catch (Exception e) {
             throw new BusinessException(21501);
         }
+
         return super.returnSuccessResult("添加成功", null);
     }
 
@@ -54,6 +70,7 @@ public class TaskController_Q extends BaseController {
             qzdCheckTask.setCheckman(new Long(user.getId()));
         }
         Object ss = taskService_q.getAllTask(page, size, qzdCheckTask);
+
         return super.returnSuccessResult(ss);
     }
 

+ 3 - 3
VisualInspection_server/src/main/resources/application.properties

@@ -57,12 +57,12 @@ spring.datasource.useGlobalDataSourceStat=true
 spring.redis.database=0  
 # Redis\u670D\u52A1\u5668\u5730\u5740
 #spring.redis.host=10.112.0.199
-#spring.redis.host=xt.wenhq.top
-spring.redis.host=192.168.45.158
+spring.redis.host=127.0.0.1
+#spring.redis.host=192.168.45.158
 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
 spring.redis.port=6379
 
-#spring.redis.port=8284
+#spring.redis.port=8281
 #spring.redis.port=9004
 #spring.redis.port=7003
 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09

+ 1 - 0
Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/QzdCheckTask.java

@@ -47,6 +47,7 @@ public class QzdCheckTask implements Serializable {
     private Integer invalid_from;
 
     private String checked_users;
+    private String checked_users_name;
 
     private Long update_user;
 

+ 28 - 0
Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/QzdRecord.java

@@ -1,6 +1,8 @@
 package com.xintong.visualinspection.bean;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -12,16 +14,26 @@ import java.util.Date;
 @Data
 public class QzdRecord implements Serializable {
     private Integer id;  //编号
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date creat_time; //创建时间
     private Integer type;//'类型 1 抛锚  2 事故'
     private String users;//'清障员'
     private Integer dept;//'部门'
     private String addr;//'桩号'
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date received_time;//'接警时间'
     private String car_info;//'车辆信息'
     private String car_user_info;//'车主信息'
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date start_time;//'出警时间'
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date arrive_time;//'到达时间'
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date back_time;//'撤离时间'
     private Integer record_user;//'值机员'
     private Integer arrive_in_time;//'N分钟到达 1到达 0否'
@@ -37,14 +49,30 @@ public class QzdRecord implements Serializable {
     private String remarks;//'备注'
     private String deptName;//'部门名称'
     private String userNames;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date startTime;//'开始时间'
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date endTime;//'结束时间'
     private Integer check_status;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date delivery_time;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date accept_time;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date rescue_time;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date relief_time;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date backfield_time;
 
+    private String rname;
+
 
 }

+ 2 - 1
Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/pojo/qzd/TaskDate_Q.java

@@ -4,9 +4,10 @@ import com.xintong.visualinspection.bean.QzdRecord;
 import com.xintong.visualinspection.bean.User;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 @Data
-public class TaskDate_Q {
+public class TaskDate_Q implements Serializable {
     private List<User> users;
     private List<QzdRecord> qzdRecord;
     private Integer user_id;

+ 1 - 1
Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/service/TaskService_Q.java

@@ -9,7 +9,7 @@ import java.util.List;
 
 public interface TaskService_Q {
     public Object getAllTask(Integer page,Integer size,QzdCheckTask qzdCheckTask);
-    public void addTask(QzdCheckTask qzdCheckTask);
+//    public void addTask(QzdCheckTask qzdCheckTask);
     public void updateStatus(QzdCheckTask qzdCheckTask);
     public QzdCheckTask getTask(QzdCheckTask qzdCheckTask);
     public void addTask(TaskDate_Q taskDate_q)  throws Exception;

+ 1 - 1
Visuallnspection_fjq/visuallnspectioninteface/target/maven-archiver/pom.properties

@@ -1,5 +1,5 @@
 #Generated by Maven
-#Thu Aug 09 14:20:45 CST 2018
+#Sat Aug 11 16:18:30 CST 2018
 version=1.0-SNAPSHOT
 groupId=com.xintong.visuallnspection.inteface
 artifactId=visuallnspectioninteface

+ 1 - 0
Visuallnspection_fjq/visuallnspectioninteface/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -13,6 +13,7 @@ com/xintong/visualinspection/bean/QzdCheckTask.class
 com/xintong/visualinspection/service/JobService.class
 com/xintong/visualinspection/bean/Job.class
 com/xintong/visualinspection/bean/WreckerGroup.class
+com/xintong/visualinspection/service/CheckOtherService_Q.class
 com/xintong/visualinspection/util/DateUtil.class
 com/xintong/visualinspection/bean/FwqStatisticsBean.class
 com/xintong/visualinspection/bean/Item.class

+ 1 - 0
Visuallnspection_fjq/visuallnspectioninteface/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -31,6 +31,7 @@
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/pojo/fwq/FwqRankingData.java
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/service/CommonService.java
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/CheckTaskPeriod.java
+/Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/service/CheckOtherService_Q.java
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/service/TaskService_Q.java
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/pojo/fwq/ServiceAreaStatistic.java
 /Users/wenhongquan/VisualInspection/Visuallnspection_fjq/visuallnspectioninteface/src/main/java/com/xintong/visualinspection/bean/QzdRecord.java

+ 54 - 5
Visuallnspection_qzd/src/main/java/com/xintong/visualinspection/visuallnspection_qzd/mapper/master/TaskMapper.xml

@@ -31,11 +31,60 @@
     </select>
 
     <select id="getall" parameterType="com.xintong.visualinspection.bean.FwqCheckTask" resultType="com.xintong.visualinspection.bean.QzdCheckTask">
-      select  * from  check_task
-      where 1=1
-        <if test="checked_dept != null">AND checked_dept = #{checked_dept}</if>
-        <if test="start_time != null and end_time != null">AND start_time >= #{start_time} <![CDATA[ AND end_time < #{end_time}]]> </if>
-        ORDER BY start_time DESC
+        select t.*,CONCAT(substr(t.start_time,1,16),'-',substr(t.end_time,12,5)) as check_period
+        ,ca.appeal_result as appeal_result
+        from check_task t
+        left join check_appeal ca on t.id=ca.task_id
+        where 1=1
+        <if test="period_id != null">AND t.period_id = #{period_id}</if>
+        <if test="checked_dept != null">AND t.checked_dept = #{checked_dept}</if>
+        <if test="start_time != null and end_time != null">AND t.start_time >= #{start_time} <![CDATA[ AND t.end_time < #{end_time}]]> </if>
+        <choose>
+            <when test="check_status_end != null and check_status != null">
+                AND t.check_status &gt;= #{check_status} AND t.check_status &lt;= #{check_status_end}
+            </when>
+            <otherwise>
+                <if test="check_status != null"> AND t.check_status = #{check_status}</if>
+            </otherwise>
+        </choose>
+
+        <if test="checkman != null">AND t.checkman = #{checkman}</if>
+        <if test="record_id != null">AND t.record_id = #{record_id}</if>
+        <if test="check_status_arr != null and check_status_arr.length > 0">AND
+            t.check_status in
+            <foreach collection="check_status_arr" item="status" index="index"
+                     open="(" close=")" separator=",">
+                #{status}
+            </foreach>
+        </if>
+        <if test="record_id != null">AND t.record_id = #{record_id}</if>
+        <if test="hasScore != null ">
+
+            <!--有扣分-->
+            <if test="hasScore == 1 ">
+                AND t.id in (select task_id from check_score where check_item_score>0 )
+            </if>
+            <!--无扣分-->
+            <if test="hasScore == 2 ">
+                AND t.id not in (select task_id from check_score where check_item_score>0 )
+            </if>
+
+        </if>
+        <if test="invalidFrom == -1">AND
+            ( t.invalid_from = 0 OR t.invalid_from = 1)
+        </if>
+
+        <if test="invalidFrom != null  and invalidFrom != -1">AND
+            t.invalid_from = #{invalidFrom}
+        </if>
+        <if test="dispatch_ids != null and dispatch_ids.length > 0">AND
+            t.id in
+            <foreach collection="dispatch_ids" item="dispatch_id" index="index"
+                     open="(" close=")" separator=",">
+                #{dispatch_id}
+            </foreach>
+        </if>
+        ORDER BY t.start_time DESC
     </select>
 
     <update id="updateStatus" parameterType="com.xintong.visualinspection.bean.QzdCheckTask" >

+ 50 - 18
Visuallnspection_qzd/src/main/java/com/xintong/visualinspection/visuallnspection_qzd/service/impl/TaskService_QImpl.java

@@ -72,6 +72,22 @@ public  class TaskService_QImpl implements TaskService_Q {
             if(q.getAppeal_result()!=null){
                 q.setAppeal_result_name(codeMap.get("appeal_result" + "_" + q.getAppeal_result() + "").getCode_name());
             }
+            String users = q.getChecked_users();
+            if (users != null && users != "") {
+                String[] usersdata = users.split(",");
+                String names = "";
+                for (int i = 0; i < usersdata.length; i++) {
+                    String ids = usersdata[i];
+                    long id = Long.parseLong(ids);
+                    String username = userMap.get(id).getTruename();
+                    username = username != null ? username : "";
+                    names += username;
+                    if (i < usersdata.length - 1) {
+                        names += ",";
+                    }
+                }
+                q.setChecked_users_name(names);
+            }
         }
 
         if (!(page.equals(0) && size.equals(0))) {
@@ -80,19 +96,19 @@ public  class TaskService_QImpl implements TaskService_Q {
         return QzdCheckTaskList;
     }
 
-    @Override
-    public void addTask(QzdCheckTask qzdCheckTask) {
-        qzdTaskDao.addtask(qzdCheckTask);
-        TaskStatus taskStatus = new TaskStatus();
-        taskStatus.setCheck_status(qzdCheckTask.getCheck_status());
-        taskStatus.setCheck_status_name((commonService.getCodeMap().get("task_status_" + qzdCheckTask.getCheck_status())).getCode_name());
-        User u = commonService.getUserMap().get((long) qzdCheckTask.getCheckman());
-        if (u != null) {
-            taskStatus.setUpdate_username(u.getTruename());
-        }
-        taskStatus.setTask_id((long) qzdCheckTask.getId());
-        qzdTaskDao.insertStatus(taskStatus);
-    }
+//    @Override
+//    public void addTask(QzdCheckTask qzdCheckTask) {
+//        qzdTaskDao.addtask(qzdCheckTask);
+//        TaskStatus taskStatus = new TaskStatus();
+//        taskStatus.setCheck_status(qzdCheckTask.getCheck_status());
+//        taskStatus.setCheck_status_name((commonService.getCodeMap().get("task_status_" + qzdCheckTask.getCheck_status())).getCode_name());
+//        User u = commonService.getUserMap().get((long) qzdCheckTask.getCheckman());
+//        if (u != null) {
+//            taskStatus.setUpdate_username(u.getTruename());
+//        }
+//        taskStatus.setTask_id((long) qzdCheckTask.getId());
+//        qzdTaskDao.insertStatus(taskStatus);
+//    }
 
     @Override
     public void updateStatus(QzdCheckTask qzdCheckTask) {
@@ -123,10 +139,10 @@ public  class TaskService_QImpl implements TaskService_Q {
     public void addTask(TaskDate_Q taskData_f) throws Exception {
         List<QzdRecord> qzdRecord = taskData_f.getQzdRecord();
         List<User> users = taskData_f.getUsers();
-        //CheckTaskPeriod p = commonService.getCheckTaskPeriod();
-//        if (p == null) {
-//            throw new Exception("所选任务超出当前稽查周期内!");
-//        }
+        CheckTaskPeriod p = commonService.getCheckTaskPeriod(qzdRecord.get(0).getReceived_time().getTime(), qzdRecord.get(0).getBack_time().getTime());
+        if (p == null) {
+            throw new Exception("所选任务超出当前稽查周期内!");
+        }
         try{
             List<QzdCheckTask> tasklist = new ArrayList<>();
             int count = tasklist.size() / users.size();
@@ -141,15 +157,31 @@ public  class TaskService_QImpl implements TaskService_Q {
                     }
                 }
                 try {
+
                     QzdCheckTask q = new QzdCheckTask();
-                    q.setName(s.getDeptName()+s.getAddr()+"号桩"+s.getCar_info());
+                    q.setName(s.getRname());
                     q.setCheck_status(Constants.STATUS_ASSIGN);
                     q.setStart_time(s.getReceived_time());
+                    q.setRecord_id(s.getId());
                     q.setEnd_time(s.getBack_time());
                     q.setCheckman((long) users.get(u_index).getId());
                     q.setChecked_dept((long) s.getDept());
                     q.setRule_id(6);
+                    q.setChecked_users(s.getUsers());
+                    q.setUpdate_user((long) taskData_f.getUser_id());
+                    if (p != null && p.getEndtime().getTime() > s.getStart_time().getTime()) {
+                        q.setPeriod_id(p.getId());
+                    }
                     qzdTaskDao.addtask(q);
+                    TaskStatus taskStatus = new TaskStatus();
+                    taskStatus.setCheck_status(q.getCheck_status());
+                    taskStatus.setCheck_status_name((commonService.getCodeMap().get("task_status_" + q.getCheck_status())).getCode_name());
+                    User u = commonService.getUserMap().get((long) taskData_f.getUser_id());
+                    if (u != null) {
+                        taskStatus.setUpdate_username(u.getTruename());
+                    }
+                    taskStatus.setTask_id((long) q.getId());
+                    qzdTaskDao.insertStatus(taskStatus);
                 }catch (Exception e){
                     logger.error(e.getMessage());
                 }

部分文件因文件數量過多而無法顯示