Browse Source

培训班功能更新

caipin 7 năm trước cách đây
mục cha
commit
2e124f6723
50 tập tin đã thay đổi với 4740 bổ sung446 xóa
  1. 31 0
      global/css/KDNWidget.css
  2. 455 0
      global/js/DataTables/jquery.dataTables.css
  3. 167 0
      global/js/DataTables/jquery.dataTables.min.js
  4. 1 0
      global/js/KDNWidget.js
  5. 953 0
      global/js/bar.js
  6. 29 0
      global/js/echarts.js
  7. 1 0
      global/js/echarts.min.js
  8. 1 0
      global/js/esl.js
  9. 41 2
      global/js/invoice.js
  10. 1141 0
      global/js/pie.js
  11. 2 0
      protected/config/acl.conf.php
  12. 111 0
      protected/config/msg.conf.php
  13. 6 0
      protected/config/routes.conf.php
  14. 281 50
      protected/controller/InvoiceController.php
  15. 18 3
      protected/controller/MobileController.php
  16. 10 0
      protected/model/invoice.php
  17. 445 0
      protected/model/invoiceStore.php
  18. 44 24
      protected/model/invoiceTraining.php
  19. 1 1
      protected/plugin/TemplateTag.php
  20. 8 4
      protected/view/admin/invoiceElement.html
  21. 61 0
      protected/view/admin/invoiceExpress.html
  22. 1 1
      protected/view/admin/invoicePrint.html
  23. 159 0
      protected/view/admin/invoicePrintStayAchieve.html
  24. 229 0
      protected/view/admin/invoiceStoreEdit.html
  25. 544 0
      protected/view/admin/invoiceTrainingDetail.html
  26. BIN
      upload/swfupload/1456730686.png
  27. BIN
      upload/swfupload/1456730739.png
  28. BIN
      upload/swfupload/1456730801.png
  29. BIN
      upload/swfupload/1456730831.png
  30. BIN
      upload/swfupload/1456730861.png
  31. BIN
      upload/swfupload/1456733868.png
  32. BIN
      upload/swfupload/1456736119.png
  33. BIN
      upload/swfupload/1456736158.png
  34. BIN
      upload/swfupload/1456736783.png
  35. BIN
      upload/swfupload/1456736833.png
  36. BIN
      upload/swfupload/1456737088.png
  37. BIN
      upload/swfupload/1456737113.png
  38. BIN
      upload/swfupload/1456737117.png
  39. BIN
      upload/swfupload/1456737135.png
  40. BIN
      upload/swfupload/1456737136.png
  41. BIN
      upload/swfupload/1456814306.png
  42. BIN
      upload/swfupload/1456815628.jpg
  43. BIN
      upload/swfupload/1456815630.png
  44. BIN
      upload/swfupload/1458197506.jpg
  45. BIN
      upload/swfupload/1458197667.jpg
  46. BIN
      upload/swfupload/1461831150.png
  47. BIN
      upload/swfupload/1462343602.png
  48. BIN
      upload/swfupload/1467098556.docx
  49. 0 361
      upload/swfupload/1467098744.doc
  50. BIN
      upload/swfupload/1473672489.jpg

+ 31 - 0
global/css/KDNWidget.css

@@ -0,0 +1,31 @@
+.kdnlogin-box {
+            position: fixed;
+            left: 50%;
+            top: 50%;
+            width: 900px;
+            height: 600px;
+            border: 1px solid #ccc;
+            margin-left: -350px;
+            margin-top: -300px;
+            background-color: #fff;
+        }
+
+        .kdnlogin-title {
+            height: 40px;
+            line-height: 40px;
+            background-color: #e5e5e5;
+            padding-left: 15px;
+        }
+
+        .kdnlogin-close {
+            color: #333;
+            float: right;
+            vertical-align: middle;
+            margin-top: -1px;
+            margin-right: 15px;
+            cursor: pointer;
+        }
+
+            .kdnlogin-close:hover {
+                color: #555;
+            }

+ 455 - 0
global/js/DataTables/jquery.dataTables.css

@@ -0,0 +1,455 @@
+/*
+ * Table styles
+ */
+table.dataTable {
+  width: 100%;
+  margin: 0 auto;
+  clear: both;
+  border-collapse: separate;
+  border-spacing: 0;
+  /*
+   * Header and footer styles
+   */
+  /*
+   * Body styles
+   */
+}
+table.dataTable thead th,
+table.dataTable tfoot th {
+  font-weight: bold;
+}
+table.dataTable thead th,
+table.dataTable thead td {
+  padding: 10px 18px;
+  border-bottom: 1px solid #111;
+}
+table.dataTable thead th:active,
+table.dataTable thead td:active {
+  outline: none;
+}
+table.dataTable tfoot th,
+table.dataTable tfoot td {
+  padding: 10px 18px 6px 18px;
+  border-top: 1px solid #111;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+  cursor: pointer;
+  *cursor: hand;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+  background-repeat: no-repeat;
+  background-position: center right;
+}
+table.dataTable thead .sorting {
+  background-image: url("../images/sort_both.png");
+}
+table.dataTable thead .sorting_asc {
+  background-image: url("../images/sort_asc.png");
+}
+table.dataTable thead .sorting_desc {
+  background-image: url("../images/sort_desc.png");
+}
+table.dataTable thead .sorting_asc_disabled {
+  background-image: url("../images/sort_asc_disabled.png");
+}
+table.dataTable thead .sorting_desc_disabled {
+  background-image: url("../images/sort_desc_disabled.png");
+}
+table.dataTable tbody tr {
+  background-color: #ffffff;
+}
+table.dataTable tbody tr.selected {
+  background-color: #B0BED9;
+}
+table.dataTable tbody th,
+table.dataTable tbody td {
+  padding: 8px 10px;
+}
+table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
+  border-top: 1px solid #ddd;
+}
+table.dataTable.row-border tbody tr:first-child th,
+table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
+table.dataTable.display tbody tr:first-child td {
+  border-top: none;
+}
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+  border-top: 1px solid #ddd;
+  border-right: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+  border-left: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr:first-child th,
+table.dataTable.cell-border tbody tr:first-child td {
+  border-top: none;
+}
+table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
+  background-color: #f9f9f9;
+}
+table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
+  background-color: #acbad4;
+}
+table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
+  background-color: #f6f6f6;
+}
+table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
+  background-color: #aab7d1;
+}
+table.dataTable.order-column tbody tr > .sorting_1,
+table.dataTable.order-column tbody tr > .sorting_2,
+table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
+table.dataTable.display tbody tr > .sorting_2,
+table.dataTable.display tbody tr > .sorting_3 {
+  background-color: #fafafa;
+}
+table.dataTable.order-column tbody tr.selected > .sorting_1,
+table.dataTable.order-column tbody tr.selected > .sorting_2,
+table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
+table.dataTable.display tbody tr.selected > .sorting_2,
+table.dataTable.display tbody tr.selected > .sorting_3 {
+  background-color: #acbad5;
+}
+table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
+  background-color: #f1f1f1;
+}
+table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
+  background-color: #f3f3f3;
+}
+table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
+  background-color: whitesmoke;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
+  background-color: #a6b4cd;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
+  background-color: #a8b5cf;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
+  background-color: #a9b7d1;
+}
+table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
+  background-color: #fafafa;
+}
+table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
+  background-color: #fcfcfc;
+}
+table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
+  background-color: #fefefe;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
+  background-color: #acbad5;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
+  background-color: #aebcd6;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
+  background-color: #afbdd8;
+}
+table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
+  background-color: #eaeaea;
+}
+table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
+  background-color: #ececec;
+}
+table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
+  background-color: #efefef;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
+  background-color: #a2aec7;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
+  background-color: #a3b0c9;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
+  background-color: #a5b2cb;
+}
+table.dataTable.no-footer {
+  border-bottom: 1px solid #111;
+}
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+  white-space: nowrap;
+}
+table.dataTable.compact thead th,
+table.dataTable.compact thead td {
+  padding: 4px 17px 4px 4px;
+}
+table.dataTable.compact tfoot th,
+table.dataTable.compact tfoot td {
+  padding: 4px;
+}
+table.dataTable.compact tbody th,
+table.dataTable.compact tbody td {
+  padding: 4px;
+}
+table.dataTable th.dt-left,
+table.dataTable td.dt-left {
+  text-align: left;
+}
+table.dataTable th.dt-center,
+table.dataTable td.dt-center,
+table.dataTable td.dataTables_empty {
+  text-align: center;
+}
+table.dataTable th.dt-right,
+table.dataTable td.dt-right {
+  text-align: right;
+}
+table.dataTable th.dt-justify,
+table.dataTable td.dt-justify {
+  text-align: justify;
+}
+table.dataTable th.dt-nowrap,
+table.dataTable td.dt-nowrap {
+  white-space: nowrap;
+}
+table.dataTable thead th.dt-head-left,
+table.dataTable thead td.dt-head-left,
+table.dataTable tfoot th.dt-head-left,
+table.dataTable tfoot td.dt-head-left {
+  text-align: left;
+}
+table.dataTable thead th.dt-head-center,
+table.dataTable thead td.dt-head-center,
+table.dataTable tfoot th.dt-head-center,
+table.dataTable tfoot td.dt-head-center {
+  text-align: center;
+}
+table.dataTable thead th.dt-head-right,
+table.dataTable thead td.dt-head-right,
+table.dataTable tfoot th.dt-head-right,
+table.dataTable tfoot td.dt-head-right {
+  text-align: right;
+}
+table.dataTable thead th.dt-head-justify,
+table.dataTable thead td.dt-head-justify,
+table.dataTable tfoot th.dt-head-justify,
+table.dataTable tfoot td.dt-head-justify {
+  text-align: justify;
+}
+table.dataTable thead th.dt-head-nowrap,
+table.dataTable thead td.dt-head-nowrap,
+table.dataTable tfoot th.dt-head-nowrap,
+table.dataTable tfoot td.dt-head-nowrap {
+  white-space: nowrap;
+}
+table.dataTable tbody th.dt-body-left,
+table.dataTable tbody td.dt-body-left {
+  text-align: left;
+}
+table.dataTable tbody th.dt-body-center,
+table.dataTable tbody td.dt-body-center {
+  text-align: center;
+}
+table.dataTable tbody th.dt-body-right,
+table.dataTable tbody td.dt-body-right {
+  text-align: right;
+}
+table.dataTable tbody th.dt-body-justify,
+table.dataTable tbody td.dt-body-justify {
+  text-align: justify;
+}
+table.dataTable tbody th.dt-body-nowrap,
+table.dataTable tbody td.dt-body-nowrap {
+  white-space: nowrap;
+}
+
+table.dataTable,
+table.dataTable th,
+table.dataTable td {
+  -webkit-box-sizing: content-box;
+  box-sizing: content-box;
+}
+
+/*
+ * Control feature layout
+ */
+.dataTables_wrapper {
+  position: relative;
+  clear: both;
+  *zoom: 1;
+  zoom: 1;
+}
+.dataTables_wrapper .dataTables_length {
+  float: left;
+}
+.dataTables_wrapper .dataTables_filter {
+  float: right;
+  text-align: right;
+}
+.dataTables_wrapper .dataTables_filter input {
+  margin-left: 0.5em;
+}
+.dataTables_wrapper .dataTables_info {
+  clear: both;
+  float: left;
+  padding-top: 0.755em;
+}
+.dataTables_wrapper .dataTables_paginate {
+  float: right;
+  text-align: right;
+  padding-top: 0.25em;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button {
+  box-sizing: border-box;
+  display: inline-block;
+  min-width: 1.5em;
+  padding: 0.5em 1em;
+  margin-left: 2px;
+  text-align: center;
+  text-decoration: none !important;
+  cursor: pointer;
+  *cursor: hand;
+  color: #333 !important;
+  border: 1px solid transparent;
+  border-radius: 2px;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
+  color: #333 !important;
+  border: 1px solid #979797;
+  background-color: white;
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
+  /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
+  /* Chrome10+,Safari5.1+ */
+  background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
+  /* FF3.6+ */
+  background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
+  /* IE10+ */
+  background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
+  /* Opera 11.10+ */
+  background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
+  /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
+  cursor: default;
+  color: #666 !important;
+  border: 1px solid transparent;
+  background: transparent;
+  box-shadow: none;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
+  color: white !important;
+  border: 1px solid #111;
+  background-color: #585858;
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
+  /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
+  /* Chrome10+,Safari5.1+ */
+  background: -moz-linear-gradient(top, #585858 0%, #111 100%);
+  /* FF3.6+ */
+  background: -ms-linear-gradient(top, #585858 0%, #111 100%);
+  /* IE10+ */
+  background: -o-linear-gradient(top, #585858 0%, #111 100%);
+  /* Opera 11.10+ */
+  background: linear-gradient(to bottom, #585858 0%, #111 100%);
+  /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:active {
+  outline: none;
+  background-color: #2b2b2b;
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
+  /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+  /* Chrome10+,Safari5.1+ */
+  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+  /* FF3.6+ */
+  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+  /* IE10+ */
+  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+  /* Opera 11.10+ */
+  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
+  /* W3C */
+  box-shadow: inset 0 0 3px #111;
+}
+.dataTables_wrapper .dataTables_paginate .ellipsis {
+  padding: 0 1em;
+}
+.dataTables_wrapper .dataTables_processing {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  width: 100%;
+  height: 40px;
+  margin-left: -50%;
+  margin-top: -25px;
+  padding-top: 20px;
+  text-align: center;
+  font-size: 1.2em;
+  background-color: white;
+  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+  background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+}
+.dataTables_wrapper .dataTables_length,
+.dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info,
+.dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+  color: #333;
+}
+.dataTables_wrapper .dataTables_scroll {
+  clear: both;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
+  *margin-top: -1px;
+  -webkit-overflow-scrolling: touch;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {
+  vertical-align: middle;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {
+  height: 0;
+  overflow: hidden;
+  margin: 0 !important;
+  padding: 0 !important;
+}
+.dataTables_wrapper.no-footer .dataTables_scrollBody {
+  border-bottom: 1px solid #111;
+}
+.dataTables_wrapper.no-footer div.dataTables_scrollHead > table,
+.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {
+  border-bottom: none;
+}
+.dataTables_wrapper:after {
+  visibility: hidden;
+  display: block;
+  content: "";
+  clear: both;
+  height: 0;
+}
+
+@media screen and (max-width: 767px) {
+  .dataTables_wrapper .dataTables_info,
+  .dataTables_wrapper .dataTables_paginate {
+    float: none;
+    text-align: center;
+  }
+  .dataTables_wrapper .dataTables_paginate {
+    margin-top: 0.5em;
+  }
+}
+@media screen and (max-width: 640px) {
+  .dataTables_wrapper .dataTables_length,
+  .dataTables_wrapper .dataTables_filter {
+    float: none;
+    text-align: center;
+  }
+  .dataTables_wrapper .dataTables_filter {
+    margin-top: 0.5em;
+  }
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 167 - 0
global/js/DataTables/jquery.dataTables.min.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
global/js/KDNWidget.js


+ 953 - 0
global/js/bar.js

@@ -0,0 +1,953 @@
+/**
+ * echarts图表类:柱形图
+ *
+ * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
+ * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ *
+ */
+define(function (require) {
+    var ChartBase = require('./base');
+    
+    // 图形依赖
+    var RectangleShape = require('zrender/shape/Rectangle');
+    // 组件依赖
+    require('../component/axis');
+    require('../component/grid');
+    require('../component/dataZoom');
+    
+    var ecConfig = require('../config');
+    // 柱形图默认参数
+    ecConfig.bar = {
+        zlevel: 0,                  // 一级层叠
+        z: 2,                       // 二级层叠
+        clickable: true,
+        legendHoverLink: true,
+        // stack: null
+        xAxisIndex: 0,
+        yAxisIndex: 0,
+        barMinHeight: 0,          // 最小高度改为0
+        // barWidth: null,        // 默认自适应
+        barGap: '30%',            // 柱间距离,默认为柱形宽度的30%,可设固定值
+        barCategoryGap: '20%',    // 类目间柱形距离,默认为类目间距的20%,可设固定值
+        itemStyle: {
+            normal: {
+                // color: '各异',
+                barBorderColor: '#fff',       // 柱条边线
+                barBorderRadius: 0,           // 柱条边线圆角,单位px,默认为0
+                barBorderWidth: 0,            // 柱条边线线宽,单位px,默认为1
+                label: {
+                    show: false
+                    // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+                    // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为
+                    //           'inside'|'left'|'right'|'top'|'bottom'
+                    // textStyle: null      // 默认使用全局文本样式,详见TEXTSTYLE
+                }
+            },
+            emphasis: {
+                // color: '各异',
+                barBorderColor: '#fff',            // 柱条边线
+                barBorderRadius: 0,                // 柱条边线圆角,单位px,默认为0
+                barBorderWidth: 0,                 // 柱条边线线宽,单位px,默认为1
+                label: {
+                    show: false
+                    // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+                    // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为
+                    //           'inside'|'left'|'right'|'top'|'bottom'
+                    // textStyle: null      // 默认使用全局文本样式,详见TEXTSTYLE
+                }
+            }
+        }
+    };
+
+    var ecData = require('../util/ecData');
+    var zrUtil = require('zrender/tool/util');
+    var zrColor = require('zrender/tool/color');
+    
+    /**
+     * 构造函数
+     * @param {Object} messageCenter echart消息中心
+     * @param {ZRender} zr zrender实例
+     * @param {Object} series 数据
+     * @param {Object} component 组件
+     */
+    function Bar(ecTheme, messageCenter, zr, option, myChart){
+        // 图表基类
+        ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
+        
+        this.refresh(option);
+    }
+    
+    Bar.prototype = {
+        type: ecConfig.CHART_TYPE_BAR,
+        /**
+         * 绘制图形
+         */
+        _buildShape: function () {
+            this._buildPosition();
+        },
+        
+        _buildNormal: function(seriesArray, maxDataLength, locationMap, xMarkMap, orient) {
+            var series = this.series;
+            // 确定类目轴和数值轴,同一方向随便找一个即可
+            var seriesIndex = locationMap[0][0];
+            var serie = series[seriesIndex];
+            var isHorizontal = orient == 'horizontal';
+            var xAxis = this.component.xAxis;
+            var yAxis = this.component.yAxis;
+            var categoryAxis = isHorizontal 
+                               ? xAxis.getAxis(serie.xAxisIndex)
+                               : yAxis.getAxis(serie.yAxisIndex);
+            var valueAxis;  // 数值轴各异
+
+            var size = this._mapSize(categoryAxis, locationMap);
+            var gap = size.gap;
+            var barGap = size.barGap;
+            var barWidthMap = size.barWidthMap;
+            var barMaxWidthMap = size.barMaxWidthMap;
+            var barWidth = size.barWidth;                   // 自适应宽度
+            var barMinHeightMap = size.barMinHeightMap;
+            var barHeight;
+            var curBarWidth;
+            var interval = size.interval;
+
+            var x;
+            var y;
+            var lastP; // 正向堆积处理
+            var baseP;
+            var lastN; // 负向堆积处理
+            var baseN;
+            var barShape;
+            var data;
+            var value;
+            var islandR = this.deepQuery([this.ecTheme, ecConfig], 'island.r');
+            for (var i = 0, l = maxDataLength; i < l; i++) {
+                if (categoryAxis.getNameByIndex(i) == null) {
+                    // 系列数据超出类目轴长度
+                    break;
+                }
+                isHorizontal
+                    ? (x = categoryAxis.getCoordByIndex(i) - gap / 2)
+                    : (y = categoryAxis.getCoordByIndex(i) + gap / 2);
+
+                for (var j = 0, k = locationMap.length; j < k; j++) {
+                    // 堆积数据用第一条valueAxis
+                    var yAxisIndex = series[locationMap[j][0]].yAxisIndex || 0;
+                    var xAxisIndex = series[locationMap[j][0]].xAxisIndex || 0;
+                    valueAxis = isHorizontal 
+                                ? yAxis.getAxis(yAxisIndex)
+                                : xAxis.getAxis(xAxisIndex);
+                    baseP = lastP = baseN = lastN = valueAxis.getCoord(0);
+                    for (var m = 0, n = locationMap[j].length; m < n; m++) {
+                        seriesIndex = locationMap[j][m];
+                        serie = series[seriesIndex];
+                        data = serie.data[i];
+                        value = this.getDataFromOption(data, '-');
+                        xMarkMap[seriesIndex] = xMarkMap[seriesIndex] 
+                                                || {
+                                                    min: Number.POSITIVE_INFINITY,
+                                                    max: Number.NEGATIVE_INFINITY,
+                                                    sum: 0,
+                                                    counter: 0,
+                                                    average: 0
+                                                };
+                        curBarWidth = Math.min(
+                            barMaxWidthMap[seriesIndex] || Number.MAX_VALUE,
+                            barWidthMap[seriesIndex] || barWidth
+                        );
+                        if (value === '-') {
+                            // 空数据在做完后补充拖拽提示框
+                            continue;
+                        }
+                        if (value > 0) {
+                            // 正向堆积
+                            barHeight = m > 0 
+                                        ? valueAxis.getCoordSize(value)
+                                        : (
+                                            isHorizontal
+                                            ? (baseP - valueAxis.getCoord(value))
+                                            : (valueAxis.getCoord(value) - baseP)
+                                        );
+                            // 非堆积数据最小高度有效
+                            if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
+                                barHeight = barMinHeightMap[seriesIndex];
+                            }
+                            if (isHorizontal) {
+                                lastP -= barHeight;
+                                y = lastP;
+                            }
+                            else {
+                                x = lastP;
+                                lastP += barHeight;
+                            }
+                        }
+                        else if (value < 0){
+                            // 负向堆积
+                            barHeight = m > 0 
+                                        ? valueAxis.getCoordSize(value)
+                                        : (
+                                            isHorizontal
+                                            ? (valueAxis.getCoord(value) - baseN)
+                                            : (baseN - valueAxis.getCoord(value))
+                                        );
+                            // 非堆积数据最小高度有效
+                            if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
+                                barHeight = barMinHeightMap[seriesIndex];
+                            }
+                            if (isHorizontal) {
+                                y = lastN;
+                                lastN += barHeight;
+                            }
+                            else {
+                                lastN -= barHeight;
+                                x = lastN;
+                            }
+                        }
+                        else {
+                            // 0值
+                            barHeight = 0;
+                            // 最小高度无效
+                            if (isHorizontal) {
+                                lastP -= barHeight;
+                                y = lastP;
+                            }
+                            else {
+                                x = lastP;
+                                lastP += barHeight;
+                            }
+                        }
+                        xMarkMap[seriesIndex][i] = isHorizontal
+                                                   ? (x + curBarWidth / 2) 
+                                                   : (y - curBarWidth / 2);
+                        if (xMarkMap[seriesIndex].min > value) {
+                            xMarkMap[seriesIndex].min = value;
+                            if (isHorizontal) {
+                                xMarkMap[seriesIndex].minY = y;
+                                xMarkMap[seriesIndex].minX = xMarkMap[seriesIndex][i];
+                            }
+                            else {
+                                xMarkMap[seriesIndex].minX = x + barHeight;
+                                xMarkMap[seriesIndex].minY = xMarkMap[seriesIndex][i];
+                            }
+                        }
+                        if (xMarkMap[seriesIndex].max < value) {
+                            xMarkMap[seriesIndex].max = value;
+                            if (isHorizontal) {
+                                xMarkMap[seriesIndex].maxY = y;
+                                xMarkMap[seriesIndex].maxX = xMarkMap[seriesIndex][i];
+                            }
+                            else {
+                                xMarkMap[seriesIndex].maxX = x + barHeight;
+                                xMarkMap[seriesIndex].maxY = xMarkMap[seriesIndex][i];
+                            }
+                            
+                        }
+                        xMarkMap[seriesIndex].sum += value;
+                        xMarkMap[seriesIndex].counter++;
+                        
+                        if (i % interval === 0) {
+                            barShape = this._getBarItem(
+                                seriesIndex, i,
+                                categoryAxis.getNameByIndex(i),
+                                x,
+                                y - (isHorizontal ? 0 : curBarWidth),
+                                isHorizontal ? curBarWidth : barHeight,
+                                isHorizontal ? barHeight : curBarWidth,
+                                isHorizontal ? 'vertical' : 'horizontal'
+                            );
+                            this.shapeList.push(new RectangleShape(barShape));
+                        }
+                    }
+
+                    // 补充空数据的拖拽提示框
+                    for (var m = 0, n = locationMap[j].length; m < n; m++) {
+                        seriesIndex = locationMap[j][m];
+                        serie = series[seriesIndex];
+                        data = serie.data[i];
+                        value = this.getDataFromOption(data, '-');
+                        curBarWidth = Math.min(
+                            barMaxWidthMap[seriesIndex] || Number.MAX_VALUE,
+                            barWidthMap[seriesIndex] || barWidth
+                        );
+                        if (value != '-') {
+                            // 只关心空数据
+                            continue;
+                        }
+
+                        if (this.deepQuery([data, serie, this.option], 'calculable')) {
+                            if (isHorizontal) {
+                                lastP -= islandR;
+                                y = lastP;
+                            }
+                            else {
+                                x = lastP;
+                                lastP += islandR;
+                            }
+                            
+                            barShape = this._getBarItem(
+                                seriesIndex, i,
+                                categoryAxis.getNameByIndex(i),
+                                x,
+                                y - (isHorizontal ? 0 : curBarWidth),
+                                isHorizontal ? curBarWidth : islandR,
+                                isHorizontal ? islandR : curBarWidth,
+                                isHorizontal ? 'vertical' : 'horizontal'
+                            );
+                            barShape.hoverable = false;
+                            barShape.draggable = false;
+                            barShape.style.lineWidth = 1;
+                            barShape.style.brushType = 'stroke';
+                            barShape.style.strokeColor = serie.calculableHolderColor
+                                                         || this.ecTheme.calculableHolderColor
+                                                         || ecConfig.calculableHolderColor;
+
+                            this.shapeList.push(new RectangleShape(barShape));
+                        }
+                    }
+                    isHorizontal
+                        ? (x += (curBarWidth + barGap))
+                        : (y -= (curBarWidth + barGap));
+                }
+            }
+            
+            this._calculMarkMapXY(xMarkMap, locationMap, isHorizontal ? 'y' : 'x');
+        },
+        /**
+         * 构建类目轴为水平方向的柱形图系列
+         */
+        _buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
+            return this._buildNormal(
+                seriesArray, maxDataLength, locationMap, xMarkMap, 'horizontal'
+            );
+        },
+
+        /**
+         * 构建类目轴为垂直方向的柱形图系列
+         */
+        _buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
+            return this._buildNormal(
+                seriesArray, maxDataLength, locationMap, xMarkMap, 'vertical'
+            );
+        },
+        
+        /**
+         * 构建双数值轴柱形图
+         */
+        _buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
+            var series = this.series;
+            
+            for (var j = 0, k = locationMap.length; j < k; j++) {
+                for (var m = 0, n = locationMap[j].length; m < n; m++) {
+                    var seriesIndex = locationMap[j][m];
+                    var serie = series[seriesIndex];
+                    var xAxisIndex = serie.xAxisIndex || 0;
+                    var xAxis = this.component.xAxis.getAxis(xAxisIndex);
+                    var baseX = xAxis.getCoord(0);
+                    var yAxisIndex = serie.yAxisIndex || 0;
+                    var yAxis = this.component.yAxis.getAxis(yAxisIndex);
+                    var baseY = yAxis.getCoord(0);
+                    
+                    xMarkMap[seriesIndex] = xMarkMap[seriesIndex] 
+                                            || {
+                                                min0: Number.POSITIVE_INFINITY,
+                                                min1: Number.POSITIVE_INFINITY,
+                                                max0: Number.NEGATIVE_INFINITY,
+                                                max1: Number.NEGATIVE_INFINITY,
+                                                sum0: 0,
+                                                sum1: 0,
+                                                counter0: 0,
+                                                counter1: 0,
+                                                average0: 0,
+                                                average1: 0
+                                            };
+
+                    for (var i = 0, l = serie.data.length; i < l; i++) {
+                        var data = serie.data[i];
+                        var value = this.getDataFromOption(data, '-');
+                        if (!(value instanceof Array)) {
+                            continue;
+                        }
+                        
+                        var x = xAxis.getCoord(value[0]);
+                        var y = yAxis.getCoord(value[1]);
+                        
+                        var queryTarget = [data, serie];
+                        var barWidth = this.deepQuery(queryTarget, 'barWidth') || 10; // 默认柱形
+                        var barHeight = this.deepQuery(queryTarget, 'barHeight');
+                        var orient;
+                        var barShape;
+                        
+                        if (barHeight != null) {
+                            // 条形图
+                            orient = 'horizontal';
+                            
+                            if (value[0] > 0) {
+                                // 正向
+                                barWidth = x - baseX;
+                                x -= barWidth;
+                            }
+                            else if (value[0] < 0){
+                                // 负向
+                                barWidth = baseX - x;
+                            }
+                            else {
+                                // 0值
+                                barWidth = 0;
+                            }
+                            
+                            barShape = this._getBarItem(
+                                seriesIndex, i,
+                                value[0],
+                                x, 
+                                y - barHeight / 2,
+                                barWidth,
+                                barHeight,
+                                orient
+                            );
+                        }
+                        else {
+                            // 柱形
+                            orient = 'vertical';
+                            
+                            if (value[1] > 0) {
+                            // 正向
+                                barHeight = baseY - y;
+                            }
+                            else if (value[1] < 0){
+                                // 负向
+                                barHeight = y - baseY;
+                                y -= barHeight;
+                            }
+                            else {
+                                // 0值
+                                barHeight = 0;
+                            }
+                            barShape = this._getBarItem(
+                                seriesIndex, i,
+                                value[0],
+                                x - barWidth / 2, 
+                                y,
+                                barWidth,
+                                barHeight,
+                                orient
+                            );
+                        }
+                        this.shapeList.push(new RectangleShape(barShape));
+                        
+                        
+                        x = xAxis.getCoord(value[0]);
+                        y = yAxis.getCoord(value[1]);
+                        if (xMarkMap[seriesIndex].min0 > value[0]) {
+                            xMarkMap[seriesIndex].min0 = value[0];
+                            xMarkMap[seriesIndex].minY0 = y;
+                            xMarkMap[seriesIndex].minX0 = x;
+                        }
+                        if (xMarkMap[seriesIndex].max0 < value[0]) {
+                            xMarkMap[seriesIndex].max0 = value[0];
+                            xMarkMap[seriesIndex].maxY0 = y;
+                            xMarkMap[seriesIndex].maxX0 = x;
+                        }
+                        xMarkMap[seriesIndex].sum0 += value[0];
+                        xMarkMap[seriesIndex].counter0++;
+                        
+                        if (xMarkMap[seriesIndex].min1 > value[1]) {
+                            xMarkMap[seriesIndex].min1 = value[1];
+                            xMarkMap[seriesIndex].minY1 = y;
+                            xMarkMap[seriesIndex].minX1 = x;
+                        }
+                        if (xMarkMap[seriesIndex].max1 < value[1]) {
+                            xMarkMap[seriesIndex].max1 = value[1];
+                            xMarkMap[seriesIndex].maxY1 = y;
+                            xMarkMap[seriesIndex].maxX1 = x;
+                        }
+                        xMarkMap[seriesIndex].sum1 += value[1];
+                        xMarkMap[seriesIndex].counter1++;
+                    }
+                }
+            }
+            
+            this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
+        },
+        
+        /**
+         * 我真是自找麻烦啊,为啥要允许系列级个性化最小宽度和高度啊!!!
+         * @param {CategoryAxis} categoryAxis 类目坐标轴,需要知道类目间隔大小
+         * @param {Array} locationMap 整形数据的系列索引
+         */
+        _mapSize: function (categoryAxis, locationMap, ignoreUserDefined) {
+            var res = this._findSpecialBarSzie(locationMap, ignoreUserDefined);
+            var barWidthMap = res.barWidthMap;
+            var barMaxWidthMap = res.barMaxWidthMap;
+            var barMinHeightMap = res.barMinHeightMap;
+            var sBarWidthCounter = res.sBarWidthCounter;    // 用户指定
+            var sBarWidthTotal = res.sBarWidthTotal;        // 用户指定
+            var barGap = res.barGap;
+            var barCategoryGap = res.barCategoryGap;
+            
+            var gap;
+            var barWidth;
+            var interval = 1;
+            if (locationMap.length != sBarWidthCounter) {
+                // 至少存在一个自适应宽度的柱形图
+                if (!ignoreUserDefined) {
+                    gap = typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/)
+                          // 百分比
+                          ? ((categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) - 0)
+                          // 数值
+                          : (categoryAxis.getGap() - barCategoryGap);
+                    if (typeof barGap === 'string' && barGap.match(/%$/)) {
+                        barGap = parseFloat(barGap) / 100;
+                        barWidth = +(
+                            (gap - sBarWidthTotal) / (
+                                (locationMap.length - 1) * barGap + locationMap.length - sBarWidthCounter
+                            )
+                        ).toFixed(2);
+                        barGap = barWidth * barGap;
+                    }
+                    else {
+                        barGap = parseFloat(barGap);
+                        barWidth = +(
+                            (gap - sBarWidthTotal - barGap * (locationMap.length - 1)) / (
+                                locationMap.length - sBarWidthCounter
+                            )
+                        ).toFixed(2);
+                    }
+                    // 无法满足用户定义的宽度设计,忽略用户宽度,打回重做
+                    if (barWidth <= 0) {
+                        return this._mapSize(categoryAxis, locationMap, true);
+                    }
+                }
+                else {
+                    // 忽略用户定义的宽度设定
+                    gap = categoryAxis.getGap();
+                    barGap = 0;
+                    barWidth = +(gap / locationMap.length).toFixed(2);
+                    // 已经忽略用户定义的宽度设定依然还无法满足显示,只能硬来了;
+                    if (barWidth <= 0) {
+                        interval = Math.floor(locationMap.length / gap);
+                        barWidth = 1;
+                    }
+                }
+            }
+            else {
+                // 全是自定义宽度,barGap无效,系列间隔决定barGap
+                gap = sBarWidthCounter > 1
+                      ? (typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/))
+                          // 百分比
+                          ? +(categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2)
+                          // 数值
+                          : (categoryAxis.getGap() - barCategoryGap)
+                      // 只有一个
+                      : sBarWidthTotal;
+                barWidth = 0;
+                barGap = sBarWidthCounter > 1 
+                         ? +((gap - sBarWidthTotal) / (sBarWidthCounter - 1)).toFixed(2)
+                         : 0;
+                if (barGap < 0) {
+                    // 无法满足用户定义的宽度设计,忽略用户宽度,打回重做
+                    return this._mapSize(categoryAxis, locationMap, true);
+                }
+            }
+            
+            // 检查是否满足barMaxWidthMap
+            
+            return this._recheckBarMaxWidth(
+                locationMap,
+                barWidthMap, barMaxWidthMap, barMinHeightMap,
+                gap,   // 总宽度
+                barWidth, barGap, interval
+            );
+        },
+        
+        /**
+         * 计算堆积下用户特殊指定的各种size 
+         */
+        _findSpecialBarSzie: function(locationMap, ignoreUserDefined) {
+            var series = this.series;
+            var barWidthMap = {};
+            var barMaxWidthMap = {};
+            var barMinHeightMap = {};
+            var sBarWidth;              // 用户指定
+            var sBarMaxWidth;           // 用户指定
+            var sBarWidthCounter = 0;   // 用户指定
+            var sBarWidthTotal = 0;     // 用户指定
+            var barGap;
+            var barCategoryGap;
+            for (var j = 0, k = locationMap.length; j < k; j++) {
+                var hasFound = {
+                    barWidth: false,
+                    barMaxWidth: false
+                };
+                for (var m = 0, n = locationMap[j].length; m < n; m++) {
+                    var seriesIndex = locationMap[j][m];
+                    var queryTarget = series[seriesIndex];
+                    if (!ignoreUserDefined) {
+                        if (!hasFound.barWidth) {
+                            sBarWidth = this.query(queryTarget, 'barWidth');
+                            if (sBarWidth != null) {
+                                // 同一堆积第一个生效barWidth
+                                barWidthMap[seriesIndex] = sBarWidth;
+                                sBarWidthTotal += sBarWidth;
+                                sBarWidthCounter++;
+                                hasFound.barWidth = true;
+                                // 复位前面同一堆积但没被定义的
+                                for (var ii = 0, ll = m; ii < ll; ii++) {
+                                    var pSeriesIndex = locationMap[j][ii];
+                                    barWidthMap[pSeriesIndex] = sBarWidth;
+                                }
+                            }
+                        }
+                        else {
+                            barWidthMap[seriesIndex] = sBarWidth;   // 用找到的一个
+                        }
+                        
+                        if (!hasFound.barMaxWidth) {
+                            sBarMaxWidth = this.query(queryTarget, 'barMaxWidth');
+                            if (sBarMaxWidth != null) {
+                                // 同一堆积第一个生效barMaxWidth
+                                barMaxWidthMap[seriesIndex] = sBarMaxWidth;
+                                hasFound.barMaxWidth = true;
+                                // 复位前面同一堆积但没被定义的
+                                for (var ii = 0, ll = m; ii < ll; ii++) {
+                                    var pSeriesIndex = locationMap[j][ii];
+                                    barMaxWidthMap[pSeriesIndex] = sBarMaxWidth;
+                                }
+                            }
+                        }
+                        else {
+                            barMaxWidthMap[seriesIndex] = sBarMaxWidth;   // 用找到的一个
+                        }
+                    }
+
+                    barMinHeightMap[seriesIndex] = this.query(queryTarget, 'barMinHeight');
+                    barGap = barGap != null ? barGap : this.query(queryTarget, 'barGap');
+                    barCategoryGap = barCategoryGap != null 
+                                     ? barCategoryGap : this.query(queryTarget, 'barCategoryGap');
+                }
+            }
+            
+            return {
+                barWidthMap: barWidthMap,
+                barMaxWidthMap: barMaxWidthMap,
+                barMinHeightMap: barMinHeightMap,
+                sBarWidth: sBarWidth,
+                sBarMaxWidth: sBarMaxWidth,
+                sBarWidthCounter: sBarWidthCounter,
+                sBarWidthTotal: sBarWidthTotal,
+                barGap: barGap,
+                barCategoryGap: barCategoryGap
+            };
+        },
+        
+        /**
+         * 检查是否满足barMaxWidthMap 
+         */
+        _recheckBarMaxWidth: function(
+                locationMap,
+                barWidthMap, barMaxWidthMap, barMinHeightMap,
+                gap,   // 总宽度
+                barWidth, barGap, interval
+        ) {
+            for (var j = 0, k = locationMap.length; j < k; j++) {
+                var seriesIndex = locationMap[j][0];
+                if (barMaxWidthMap[seriesIndex] && barMaxWidthMap[seriesIndex] < barWidth) {
+                    // 不满足最大宽度
+                    gap -= barWidth - barMaxWidthMap[seriesIndex]; // 总宽度减少
+                }
+            }
+            
+            return {
+                barWidthMap: barWidthMap,
+                barMaxWidthMap: barMaxWidthMap,
+                barMinHeightMap: barMinHeightMap ,
+                gap: gap,   // 总宽度
+                barWidth: barWidth,
+                barGap: barGap,
+                interval: interval
+            };
+        },
+        
+        /**
+         * 生成最终图形数据
+         */
+        _getBarItem: function (seriesIndex, dataIndex, name, x, y, width, height, orient) {
+            var series = this.series;
+            var barShape;
+            var serie = series[seriesIndex];
+            var data = serie.data[dataIndex];
+            // 多级控制
+            var defaultColor = this._sIndex2ColorMap[seriesIndex];
+            var queryTarget = [data, serie];
+            
+            var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
+            var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
+            var normalBorderWidth = normal.barBorderWidth;
+            
+            barShape = {
+                zlevel: serie.zlevel,
+                z: serie.z,
+                clickable: this.deepQuery(queryTarget, 'clickable'),
+                style: {
+                    x: x,
+                    y: y,
+                    width: width,
+                    height: height,
+                    brushType: 'both',
+                    color: this.getItemStyleColor(
+                        this.deepQuery(queryTarget, 'itemStyle.normal.color') || defaultColor,
+                        seriesIndex, dataIndex, data
+                    ),
+                    radius: normal.barBorderRadius,
+                    lineWidth: normalBorderWidth,
+                    strokeColor: normal.barBorderColor
+                },
+                highlightStyle: {
+                    color: this.getItemStyleColor(
+                        this.deepQuery(queryTarget, 'itemStyle.emphasis.color'),
+                        seriesIndex, dataIndex, data
+                    ),
+                    radius: emphasis.barBorderRadius,
+                    lineWidth: emphasis.barBorderWidth,
+                    strokeColor: emphasis.barBorderColor
+                },
+                _orient: orient
+            };
+            var barShapeStyle = barShape.style;
+            barShape.highlightStyle.color = barShape.highlightStyle.color
+                            || (typeof barShapeStyle.color === 'string'
+                                ? zrColor.lift(barShapeStyle.color, -0.3)
+                                : barShapeStyle.color
+                               );
+            //亚像素优化
+            barShapeStyle.x = Math.floor(barShapeStyle.x);
+            barShapeStyle.y = Math.floor(barShapeStyle.y);
+            barShapeStyle.height = Math.ceil(barShapeStyle.height);
+            barShapeStyle.width = Math.ceil(barShapeStyle.width);
+            // 考虑线宽的显示优化
+            if (normalBorderWidth > 0
+                && barShapeStyle.height > normalBorderWidth
+                && barShapeStyle.width > normalBorderWidth
+            ) {
+                barShapeStyle.y += normalBorderWidth / 2;
+                barShapeStyle.height -= normalBorderWidth;
+                barShapeStyle.x += normalBorderWidth / 2;
+                barShapeStyle.width -= normalBorderWidth;
+            }
+            else {
+                // 太小了或者线宽小于0,废了边线
+                barShapeStyle.brushType = 'fill';
+            }
+            
+            barShape.highlightStyle.textColor = barShape.highlightStyle.color;
+            
+            barShape = this.addLabel(barShape, serie, data, name, orient);
+            var barShapeStyleList = [                    // normal emphasis都需要检查
+                barShapeStyle,
+                barShape.highlightStyle
+            ];
+            for (var i = 0, l = barShapeStyleList.length; i < l; i++) {
+                var textPosition = barShapeStyleList[i].textPosition;
+                if (textPosition === 'insideLeft'
+                    || textPosition === 'insideRight'
+                    || textPosition === 'insideTop'
+                    || textPosition === 'insideBottom'
+                ) {
+                    var gap = 5;
+                    switch (textPosition) {
+                        case 'insideLeft':
+                            barShapeStyleList[i].textX = barShapeStyle.x + gap;
+                            barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
+                            barShapeStyleList[i].textAlign = 'left';
+                            barShapeStyleList[i].textBaseline = 'middle';
+                            break;
+                        case 'insideRight':
+                            barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width - gap;
+                            barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
+                            barShapeStyleList[i].textAlign = 'right';
+                            barShapeStyleList[i].textBaseline = 'middle';
+                            break;
+                        case 'insideTop':
+                            barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
+                            barShapeStyleList[i].textY = barShapeStyle.y + gap / 2;
+                            barShapeStyleList[i].textAlign = 'center';
+                            barShapeStyleList[i].textBaseline = 'top';
+                            break;
+                        case 'insideBottom':
+                            barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
+                            barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height - gap / 2;
+                            barShapeStyleList[i].textAlign = 'center';
+                            barShapeStyleList[i].textBaseline = 'bottom';
+                            break;
+                    }
+                    barShapeStyleList[i].textPosition = 'specific';
+                    barShapeStyleList[i].textColor = barShapeStyleList[i].textColor || '#fff';
+                }
+            }
+            
+
+            if (this.deepQuery([data, serie, this.option],'calculable')) {
+                this.setCalculable(barShape);
+                barShape.draggable = true;
+            }
+
+            ecData.pack(
+                barShape,
+                series[seriesIndex], seriesIndex,
+                series[seriesIndex].data[dataIndex], dataIndex,
+                name
+            );
+
+            return barShape;
+        },
+
+        // 位置转换
+        getMarkCoord: function (seriesIndex, mpData) {
+            var serie = this.series[seriesIndex];
+            var xMarkMap = this.xMarkMap[seriesIndex];
+            var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
+            var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
+            var dataIndex;
+            var pos;
+            if (mpData.type
+                && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')
+            ) {
+                // 特殊值内置支持
+                var valueIndex = mpData.valueIndex != null 
+                                 ? mpData.valueIndex 
+                                 : xMarkMap.maxX0 != null 
+                                   ? '1' : '';
+                pos = [
+                    xMarkMap[mpData.type + 'X' + valueIndex],
+                    xMarkMap[mpData.type + 'Y' + valueIndex],
+                    xMarkMap[mpData.type + 'Line' + valueIndex],
+                    xMarkMap[mpData.type + valueIndex]
+                ];
+            }
+            else if (xMarkMap.isHorizontal) {
+                // 横向
+                dataIndex = typeof mpData.xAxis === 'string' && xAxis.getIndexByName
+                            ? xAxis.getIndexByName(mpData.xAxis)
+                            : (mpData.xAxis || 0);
+                
+                var x = xMarkMap[dataIndex];
+                x = x != null
+                    ? x 
+                    : typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex
+                      ? xAxis.getCoordByIndex(mpData.xAxis || 0)
+                      : xAxis.getCoord(mpData.xAxis || 0);
+                
+                pos = [x, yAxis.getCoord(mpData.yAxis || 0)];
+            }
+            else {
+                // 纵向
+                dataIndex = typeof mpData.yAxis === 'string' && yAxis.getIndexByName
+                            ? yAxis.getIndexByName(mpData.yAxis)
+                            : (mpData.yAxis || 0);
+                
+                var y = xMarkMap[dataIndex];
+                y = y != null
+                    ? y
+                    : typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex
+                      ? yAxis.getCoordByIndex(mpData.yAxis || 0)
+                      : yAxis.getCoord(mpData.yAxis || 0);
+                
+                pos = [xAxis.getCoord(mpData.xAxis || 0), y];
+            }
+            
+            return pos;
+        },
+        
+        /**
+         * 刷新
+         */
+        refresh: function (newOption) {
+            if (newOption) {
+                this.option = newOption;
+                this.series = newOption.series;
+            }
+            
+            this.backupShapeList();
+            this._buildShape();
+        },
+        
+        /**
+         * 动态数据增加动画 
+         */
+        addDataAnimation: function (params, done) {
+            var series = this.series;
+            var aniMap = {}; // seriesIndex索引参数
+            for (var i = 0, l = params.length; i < l; i++) {
+                aniMap[params[i][0]] = params[i];
+            }
+            var x;
+            var dx;
+            var y;
+            var dy;
+            var serie;
+            var seriesIndex;
+            var dataIndex;
+
+            var aniCount = 0;
+            function animationDone() {
+                aniCount--;
+                if (aniCount === 0) {
+                    done && done();
+                }
+            }
+            for (var i = this.shapeList.length - 1; i >= 0; i--) {
+                seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
+                if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
+                    // 有数据删除才有移动的动画
+                    if (this.shapeList[i].type === 'rectangle') {
+                        // 主动画
+                        dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
+                        serie = series[seriesIndex];
+                        if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
+                            // 队头加入删除末尾
+                            this.zr.delShape(this.shapeList[i].id);
+                            continue;
+                        }
+                        else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
+                            // 队尾加入删除头部
+                            this.zr.delShape(this.shapeList[i].id);
+                            continue;
+                        }
+                        if (this.shapeList[i]._orient === 'horizontal') {
+                            // 条形图
+                            dy = this.component.yAxis.getAxis(serie.yAxisIndex || 0).getGap();
+                            y = aniMap[seriesIndex][2] ? -dy : dy;
+                            x = 0;
+                        }
+                        else {
+                            // 柱形图
+                            dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
+                            x = aniMap[seriesIndex][2] ? dx : -dx;
+                            y = 0;
+                        }
+                        this.shapeList[i].position = [0, 0];
+
+                        aniCount++;
+                        this.zr.animate(this.shapeList[i].id, '')
+                            .when(
+                                this.query(this.option, 'animationDurationUpdate'),
+                                { position: [x, y] }
+                            )
+                            .done(animationDone)
+                            .start();
+                    }
+                }
+            }
+            
+            // 没有动画
+            if (!aniCount) {
+                done && done();
+            }
+        }
+    };
+    
+    zrUtil.inherits(Bar, ChartBase);
+    
+    // 图表注册
+    require('../chart').define('bar', Bar);
+    
+    return Bar;
+});

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 29 - 0
global/js/echarts.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
global/js/echarts.min.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
global/js/esl.js


+ 41 - 2
global/js/invoice.js

@@ -295,7 +295,10 @@ $(function() {
 					$("td[mailItems-data='express-msg']").html(data.invoiceDetail.mailItems);
 					$("td[actualItems-data='express-msg']").html(data.invoiceDetail.actualItems);
 					$("td[expressCompany-data='express-msg']").html(data.invoiceDetail.expressCompany);
-					$("td[expressNumber-data='express-msg']").html(data.invoiceDetail.expressNumber+"&nbsp;<a target='_blank' href='/invoiceExpress/"+data.invoiceDetail.expressCom+"/"+data.invoiceDetail.expressNumber+".html'>点击查询快递信息</a>");
+					if(data.invoiceDetail.expressCom=="SF")
+						$("td[expressNumber-data='express-msg']").html(data.invoiceDetail.expressNumber+"&nbsp;<a target='_blank' href='http://www.sf-express.com/cn/sc/dynamic_function/waybill/#search/bill-number/'>点击查询快递信息</a>");
+					else
+						$("td[expressNumber-data='express-msg']").html(data.invoiceDetail.expressNumber+"&nbsp;<a target='_blank' href='/invoiceExpress/"+data.invoiceDetail.expressCom+"/"+data.invoiceDetail.expressNumber+".html'>点击查询快递信息</a>");
 					$("div[loading-msg='express-msg']").html("");
 				} else
 					$("div[loading-msg='express-msg']").html("illegal request");
@@ -325,7 +328,13 @@ $(function() {
 					$("td[mailItems-data='express-msg']").html(data.invoiceDetail.mailItems);
 					$("td[actualItems-data='express-msg']").html(data.invoiceDetail.actualItems);
 					
-					$("td[expressCompany-data='express-msg']").html(data.invoiceDetail.expressCompany+"&nbsp;<a target='_blank' href='/invoiceExpress/"+data.invoiceDetail.expressCom+"/"+data.invoiceDetail.expressNumber+".html'>点击查询快递信息</a>");
+					
+					if(data.invoiceDetail.expressCom=="SF")
+						$("td[expressCompany-data='express-msg']").html(data.invoiceDetail.expressNumber+"&nbsp;<a target='_blank' href='http://www.sf-express.com/cn/sc/dynamic_function/waybill/#search/bill-number/'>点击查询快递信息</a>");
+					else
+						$("td[expressCompany-data='express-msg']").html(data.invoiceDetail.expressCompany+"&nbsp;<a target='_blank' href='/invoiceExpress/"+data.invoiceDetail.expressCom+"/"+data.invoiceDetail.expressNumber+".html'>点击查询快递信息</a>");
+					
+					
 					$("td[actualItems-data='express-msg']").html(data.invoiceDetail.actualItems);
 					
 //					$("td[recipients-data='express-msg']").html(data.invoiceDetail.recipients);
@@ -582,6 +591,36 @@ $(function() {
 		});
 	});
 	
+	$("a[node-invoice=PRINT]").click(function() {
+		var postData = $(this).attr("data-isKey");
+		var type =$(this).attr("data-type");
+		
+		
+		$("div[loading-msg='true']").html("<img src='/global/img/loadIco.gif' />");
+		var url = "/ajaxGetInvoiceInfoByPrint";
+		$.ajax({
+			url : url,
+			type : "post",
+			cache : false,
+			dataType : "json",
+			data : {
+				serial : postData
+			},
+			global : true,
+			success : function(data) {
+				if (data.status == 1) {
+					$("div[loading-msg='true']").html("");
+					$("#prIn").html(data.html);
+				} else
+					$("div[loading-msg='true']").html("illegal request");
+			},
+			error : function(err) {
+				$("div[loading-msg='true']").html("");
+			}
+		});
+	});
+	
+	
 	
 	$("a[node-alter]").click(function() {
 		

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1141 - 0
global/js/pie.js


+ 2 - 0
protected/config/acl.conf.php

@@ -97,6 +97,8 @@ $acl ['发票打印'] ['allow'] = array (
 				'invoicePrintDo',
 				'invoiceTAchieve',
 				//新增权限
+				'invoicePrintStayAchieve',
+				'ajaxGetInvoiceInfoByPrint',
 				'ajaxCheckInvoiceNoUniqueness'
 		) 
 );

+ 111 - 0
protected/config/msg.conf.php

@@ -0,0 +1,111 @@
+<?php
+$acl ['ordinary'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoice',
+				'invoiceAdd',
+				'invoiceAddDo',
+				'invoiceMyReceivables',
+				'invoiceReceivablesClaim',
+				
+				'invoiceReceivablesAscription',
+				//发票绑定收款操作
+				//'invoiceBindReceivables',
+				'invoiceDroppedDo',
+				'invoiceEdit',
+				'invoiceEditDo',
+				
+				'invoiceDelDo',
+				'invoiceAchieve',
+				'invoiceReceivablesAchieve',
+				'ajaxGetInvoiceInfoByType',
+				'ajaxGetInvoiceReceivables',
+				'ajaxGetInvoicePostDetail',
+				
+				'ajaxCompareInvoicePrice',
+				//新加普通
+				'invoiceUntreadIsAchieve',
+				'invoiceMyUnAccountAchieve',
+				'invoiceUntreadMailDo',
+				//删除核销相关操作
+				'invoiceUntreadDo',
+				
+				'importInvoice',
+				'uploadInvoice',
+				'importInvoiceDo',
+				'importInvoiceReceivables',
+				'importInvoiceReceivablesDo',
+				
+				'invoiceTraining',
+				'invoiceTrainingAdd',
+				
+				'testSend'
+		) 
+);
+
+$acl ['收款管理'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoiceReceivables',
+				'invoiceReceivablesDo',
+				'invoiceReceivablesUpdateClaim',
+				'invoiceReceivablesDelete',
+				'invoiceReceivablesAS',
+				'ajaxGetStaffByCategory',
+				'ajaxGetInvoiceReceivablesByStaff',
+				//新加入账相关权限
+				'ajaxGetInvoiceReceivablesByIrid',
+				'ajaxGetInvoiceReceivablesByTitle',
+				'invoiceBindReceivables',
+				'invoiceAS',
+				'invoiceUnBundLing',
+				'ajaxCheckInvoicePrice',
+				'invoiceCompareClaimPrice'
+				
+		) 
+);
+$acl ['发票审批'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoiceApproval',
+				'invoiceDetail',
+				'invoiceApprovalDo',
+				'invoiceApprovalAchieve',
+				
+				'ajaxInvoicePushNotice'
+		) 
+);
+$acl ['发票打印'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoicePrint',
+				'invoicePrintDetail',
+				'invoicePrintDo',
+				'invoiceTAchieve',
+				//新增权限
+				'ajaxCheckInvoiceNoUniqueness'
+		) 
+);
+$acl ['发票邮寄'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoicePost',
+				'ajaxGetInvoicePostDetail',
+				'invoiceExpressAddDo',
+				'invoiceExpressUpdateDo',
+				'invoiceTAchieve'
+		) 
+);
+$acl ['发票退票'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoiceUntread',
+				'invoiceUntreadEstablishedDo',
+				'invoiceLossDo'
+
+		)
+);
+$acl ['公司汇总查阅'] ['allow'] = array (
+		'InvoiceController' => array (
+				'invoiceAggregate',
+				'invoiceAggregateStaff',
+				'invoiceAggregateCategory'
+
+		)
+);
+
+?>

+ 6 - 0
protected/config/routes.conf.php

@@ -456,11 +456,17 @@ $route['*']['/invoicePrint'] = array('InvoiceController', 'invoicePrint');
 $route['*']['/invoicePrintDetail/:iid'] = array('InvoiceController', 'invoicePrintDetail','extension'=>'.html');
 $route['*']['/invoicePrintDo'] = array('InvoiceController', 'invoicePrintDo');
 
+$route['*']['/invoicePrintStayAchieve'] = array('InvoiceController', 'invoicePrintStayAchieve');
+$route['*']['/invoicePrintStayAchieve/:page/:status'] = array('InvoiceController', 'invoicePrintStayAchieve');
+
 $route['get']['/invoicePrintAchieve'] = array('InvoiceController', 'invoiceTAchieve');
 $route['get']['/invoicePrintAchieve/:page'] = array('InvoiceController', 'invoiceTAchieve');
 $route['get']['/invoicePrintAchieve/:page/:date'] = array('InvoiceController', 'invoiceTAchieve');
 $route['get']['/invoicePrintAchieve/:page/:date/:MebSea'] = array('InvoiceController', 'invoiceTAchieve');
 
+$route['post']['/ajaxGetInvoiceInfoByPrint'] = array('InvoiceController', 'ajaxGetInvoiceInfoByPrint');
+
+
 //发票邮寄
 $route['*']['/invoicePost'] = array('InvoiceController', 'invoicePost');
 $route['*']['/invoiceExpressAddDo'] = array('InvoiceController', 'invoiceExpressAddDo');

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 281 - 50
protected/controller/InvoiceController.php


+ 18 - 3
protected/controller/MobileController.php

@@ -197,18 +197,33 @@ class MobileController extends DooController {
 			
 			Doo::loadClass ( 'XDeode' );
 			$XDeode = new XDeode ( 5 );
-			$sid = $XDeode->decode ( $_COOKIE ["staff"] );
+				
+			if (!isset($_COOKIE ["staff"])){
+				$sid=0;
+			}else{ 
+				
+				$sid = $XDeode->decode ( $_COOKIE ["staff"] );
+			}
+			
+			
 			
 			$clientList=$client->getOne(array('where'=>'cid='.$cid,'asArray'=>true));
+			
+			$companyList=$longleList=$colleague=$serviceLogList=array();$clientCount=array();
+			if (!empty($clientList)){
+			
 			$companyList=$company->getOne(array('where'=>'cid='.$clientList['companyid'],'asArray'=>true));
 			$serviceLogList=$serviceLog->find(array('where'=>'clientid='.$cid,'desc'=>'date','asArray'=>true));
 			$clientCount=$client->count(array('where'=>'companyid='.$clientList['companyid'],'asArray'=>true));
 			$longleList=$longle->find(array('where'=>'clientid='.$cid,'asArray'=>true));
 			$colleague=$client->find(array('where'=>'companyid='.$clientList['companyid'].' and cid!='.$cid,'asArray'=>true));
+			}
 			
 			$staffDetail=$staff->getOne(array('where'=>'sid='.$sid,'asArray'=>true));
 			$ClientTagList=$tagClient->getTagClientBySid( $sid);
-			$toollist=$cTooltip->find(array('where'=>'cateid='.$staffDetail["cid"],'asArray'=>true));
+			$toollist=array();
+			if (!empty($staffDetail))
+				$toollist=$cTooltip->find(array('where'=>'cateid='.$staffDetail["cid"],'asArray'=>true));
 			
 			$companyTagL=$tagCompany->find(array('where'=>'sid='.$sid,'asArray'=>true));
 			$CompanyTagList=$tagCompanyNexus->getTagClientBySid( $sid);
@@ -247,7 +262,7 @@ class MobileController extends DooController {
 					}
 				}
 				
-				$list[$key]['tooltipList']=array();
+				//$list[$key]['tooltipList']=array();
 				foreach ($toollist as $k=>$v){
 					if($v['cid']==$clientList['cid']){
 						$clientList['tooltipList']=explode(",", $v['name']);

+ 10 - 0
protected/model/invoice.php

@@ -374,6 +374,14 @@ class invoice extends DooModel {
 				'asArray' => TRUE 
 		) );
 		
+		if (! empty ( $detail ['expressCompany'] )) {
+			$express = explode ( ":", $detail ['expressCompany'] );
+			$detail ['expressCompany'] = $express [0];
+			$detail ['expressCom'] = $express [1];
+		}
+		
+		$detail ['iidKeyXD'] = $this->authcode ( $detail ['iid'], '' );
+		
 		return $detail;
 	}
 	
@@ -381,6 +389,8 @@ class invoice extends DooModel {
 	 * 统计培训班开票
 	 */
 	function sumOfinvoiceTrain($itidSql) {
+		
+		
 		$sql = 'select sum(invoicePrice) as invoicePrice ,trainId
 				from ' . $this->_table . ' 
 						where trainId in ('.$itidSql.') and status=2 and printStatus=1 and (untreadStatus =0 or untreadStatus=3)

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 445 - 0
protected/model/invoiceStore.php


+ 44 - 24
protected/model/invoiceTraining.php

@@ -54,45 +54,63 @@ class invoiceTraining extends DooModel {
 		}
 		return $itid;
 	}
-	function getInvoiceTrainStatistics() {
+	function getInvoiceTrainStatistics($itid=0) {
+		
+		$itidCondition=' and trainId=NULL ';
+		if (!empty($itid))
+			$itidCondition=' and trainId in ('.$itid.') ';
+		
 		$sql = 'select sum(invoicePrice) as invoicePrice ,trainId
 				from CLD_invoice
-				where trainId !=0 and status=2 and printStatus=1 and (untreadStatus =0 or untreadStatus=3)
+				where status=2 and printStatus=1 and (untreadStatus =0 or untreadStatus=3) '.$itidCondition.'
 				GROUP BY status';
 		$query = Doo::db ()->query ( $sql );
 		$result = $query->fetchAll ();
 		
-		if (!empty($result))
-			$detail=array('invoicePrice'=>$result[0]['invoicePrice']);
-		else 
-			$detail=array('invoicePrice'=>0);
-		//print_r($result);
-		
+		if (! empty ( $result ))
+			$detail = array (
+					'invoicePrice' => $result [0] ['invoicePrice'] 
+			);
+		else
+			$detail = array (
+					'invoicePrice' => 0 
+			);
+			// print_r($result);
+		$itidCondition=' and a.trainId=NULL ';
+		if (!empty($itid))
+			$itidCondition=' and a.trainId in ('.$itid.') ';
 		$sql = 'select sum(b.receivablesPrice) as receivablesPrice ,a.trainId,count(*) as count
 				from CLD_invoice as a left join CLD_invoiceReceivables as b on find_in_set(a.irid,b.irid)
-				where a.trainId !=0 and a.status=2 and a.printStatus=1 and (a.untreadStatus =0 or a.untreadStatus=3) and a.irid!=""
+				where  a.status=2 and a.printStatus=1 and (a.untreadStatus =0 or a.untreadStatus=3) and a.irid!="" '.$itidCondition.'
 				GROUP BY a.status';
 		$query = Doo::db ()->query ( $sql );
 		$result = $query->fetchAll ();
 		
-		if (!empty($result)){
-			$detail+=array('receivablesPrice'=>$result[0]['receivablesPrice']);
-			$detail+=array('rPrice'=>$detail['invoicePrice']-$result[0]['receivablesPrice']);
-			
-		}else{
-			$detail+=array('receivablesPrice'=>0);
-			$detail+=array('rPrice'=>$detail['invoicePrice']);
+		if (! empty ( $result )) {
+			$detail += array (
+					'receivablesPrice' => $result [0] ['receivablesPrice'] 
+			);
+			$detail += array (
+					'rPrice' => $detail ['invoicePrice'] - $result [0] ['receivablesPrice'] 
+			);
+		} else {
+			$detail += array (
+					'receivablesPrice' => 0 
+			);
+			$detail += array (
+					'rPrice' => $detail ['invoicePrice'] 
+			);
 		}
 		return $detail;
 	}
-	function getInvoiceTrainingByTodo($select = "", $sid = 0) {
+	function getInvoiceTrainingByTodo($select = "", $cid = 0,$sid=0) {
 		Doo::loadModel ( 'staff' );
 		$staff = new staff ();
 		Doo::loadModel ( 'L_category' );
 		$lCategory = new L_category ();
 		
 		$condition = array (
-				'where' => "(status= 0 or status=1) and creator=" . $sid,
+				'where' => "(status= 0 or status=1) and ( cid=" . $cid." or creator=".$sid." )",
 				'limit' => 8,
 				'asArray' => TRUE 
 		);
@@ -119,10 +137,12 @@ class invoiceTraining extends DooModel {
 		Doo::loadModel ( 'invoice' );
 		$invoice = new invoice ();
 		
-		$itidSql = implode ( ',', $itid );
-		
-		$invoiceList = $invoice->sumOfinvoiceTrain ( $itidSql );
-		$invoiceRecelvablesList = $invoice->sumOfInvoiceRecelvablesTrain ( $itidSql );
+		$invoiceList=$invoiceRecelvablesList=array();
+		if (! empty ( $itid )) {
+			$itidSql = implode ( ',', $itid );
+			$invoiceList = $invoice->sumOfinvoiceTrain ( $itidSql );
+			$invoiceRecelvablesList = $invoice->sumOfInvoiceRecelvablesTrain ( $itidSql );
+		}
 		// print_r($invoiceRecelvablesList);
 		
 		foreach ( $list as $key => $value ) {
@@ -176,14 +196,14 @@ class invoiceTraining extends DooModel {
 	 * 根据状态获取培训班
 	 * @param number $status
 	 */
-	function getInvoiceTrainingByStatus($status = 0, $select = "", $sid = 0) {
+	function getInvoiceTrainingByStatus($status = 0, $select = "", $cid = 0,$sid=0) {
 		Doo::loadModel ( 'staff' );
 		$staff = new staff ();
 		Doo::loadModel ( 'L_category' );
 		$lCategory = new L_category ();
 		
 		$condition = array (
-				'where' => "status= '" . $status . "' and  creator=" . $sid,
+				'where' => "status= '" . $status . "' and  (cid=" . $cid." or creator=".$sid." )",
 				'limit' => 8,
 				'asArray' => TRUE 
 		);

+ 1 - 1
protected/plugin/TemplateTag.php

@@ -277,7 +277,7 @@ function getReceiptCount() {
 	$st[0]['sid'] = $XDeode->decode ( $_COOKIE["staff"] );
 	$vidList = array ();
 	$verifyDetail = $verify->find ( array (
-			'where' => ' (staff not like "%\"' . $st [0] ['sid'] . '\",\"ROLE%") and (staff like "%[\"' . $st ['sid'] . '\",%" or staff like "%\"' . $st [0] ['sid'] . '\_%" )',
+			'where' => ' (staff not like "%\"' . $st [0] ['sid'] . '\",\"ROLE%") and (staff like "%[\"' . $st [0] ['sid'] . '\",%" or staff like "%\"' . $st [0] ['sid'] . '\_%" )',
 			'asArray' => true
 	) );
 	foreach ( $verifyDetail as $key => $value ) {

+ 8 - 4
protected/view/admin/invoiceElement.html

@@ -1,9 +1,11 @@
 
 <!-- if isset({{invoiceDetail}}) -->
 <option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程造价管理系统V9.0' --> selected <!-- endif --> value="纵横公路工程造价管理系统V9.0">纵横公路工程造价管理系统V9.0</option>
-<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程设计数量表算量软件V3.1' --> selected <!-- endif --> value="纵横公路工程设计数量表算量软件V3.1">纵横公路工程设计数量表算量软件V3.1</option>
-<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程计量支付决算一体化软件V3.1' --> selected <!-- endif --> value="纵横公路工程计量支付决算一体化软件V3.1">纵横公路工程计量支付决算一体化软件V3.1</option>
+<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程设计数量表算量软件V3.3' --> selected <!-- endif --> value="纵横公路工程设计数量表算量软件V3.3">纵横公路工程设计数量表算量软件V3.3</option>
+<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程计量支付决算一体化软件V3.3' --> selected <!-- endif --> value="纵横公路工程计量支付决算一体化软件V3.3">纵横公路工程计量支付决算一体化软件V3.3</option>
 <option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路造价编审软件V9.0' --> selected <!-- endif --> value="纵横公路造价编审软件V9.0">纵横公路造价编审软件V9.0</option>
+<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路养护造价管理软件V10.1' --> selected <!-- endif --> value="纵横公路养护造价管理软件V10.1">纵横公路养护造价管理软件V10.1</option>
+<option <!-- if {{invoiceDetail.invoiceElement}}=='纵横公路工程计量支付决算一体化云版软件V3.3' --> selected <!-- endif --> value="纵横公路工程计量支付决算一体化云版软件V3.3">纵横公路工程计量支付决算一体化云版软件V3.3</option>
 <option <!-- if {{invoiceDetail.invoiceElement}}=='培训费' --> selected <!-- endif --> value="培训费">培训费</option>
 <option <!-- if {{invoiceDetail.invoiceElement}}=='服务费' --> selected <!-- endif --> value="服务费">服务费</option>
 <option <!-- if {{invoiceDetail.invoiceElement}}=='软件培训费' --> selected <!-- endif --> value="软件培训费">软件培训费</option>
@@ -11,9 +13,11 @@
 <option <!-- if {{invoiceDetail.invoiceElement}}=='报表定制费' --> selected <!-- endif --> value="报表定制费">报表定制费</option>
 <!-- else -->
 <option value="纵横公路工程造价管理系统V9.0">纵横公路工程造价管理系统V9.0</option>
-<option value="纵横公路工程设计数量表算量软件V3.1">纵横公路工程设计数量表算量软件V3.1</option>
-<option value="纵横公路工程计量支付决算一体化软件V3.1">纵横公路工程计量支付决算一体化软件V3.1</option>
+<option value="纵横公路工程设计数量表算量软件V3.3">纵横公路工程设计数量表算量软件V3.3</option>
+<option value="纵横公路工程计量支付决算一体化软件V3.3">纵横公路工程计量支付决算一体化软件V3.3</option>
 <option value="纵横公路造价编审软件V9.0">纵横公路造价编审软件V9.0</option>
+<option value="纵横公路养护造价管理软件V10.1">纵横公路养护造价管理软件V10.1</option>
+<option value="纵横公路工程计量支付决算一体化云版软件V3.3">纵横公路工程计量支付决算一体化云版软件V3.3</option>
 <option value="培训费">培训费</option>
 <option value="服务费">服务费</option>
 <option value="软件培训费">软件培训费</option>

+ 61 - 0
protected/view/admin/invoiceExpress.html

@@ -0,0 +1,61 @@
+
+<!DOCTYPE html>
+                <html lang="zh-cn">
+                 <head> 
+                    <title></title>
+                    <link rel="stylesheet" href="<?= WEB_SITE_GLOBAL ?>css/KDNWidget.css" />
+                 </head>
+                 <body>
+          
+<div id="demoID"></div>
+               
+                      <script src="<?= WEB_SITE_GLOBAL ?>js/KDNWidget.js"></script>
+                      <script>
+                          
+                          window.onload = function () {
+                              KDNWidget.run({
+                                  serviceType: "B",
+                                  expCode:"{{expressCom}}",
+                                  expNo:"{{expressNumber}}",
+                                  showType:"normal",
+                                  container: "demoID"
+                              })
+                          }
+                          
+                    </script> 
+                   </body>
+                </html>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 1 - 1
protected/view/admin/invoicePrint.html

@@ -27,7 +27,7 @@
 					
 						<div class="clearfix">
 							
-							<legend><div class="fR"></div>待打印</legend>
+							<legend><div class="fR"></div>待打印 <div class="fR"><a href="/invoicePrintStayAchieve">查看更多</a></div></legend>
 							<!-- if !empty({{toPrint}}) -->
 							<table class="table table-bordered table-condensed">
 								<tbody>

+ 159 - 0
protected/view/admin/invoicePrintStayAchieve.html

@@ -0,0 +1,159 @@
+<!-- include 'header' -->
+<link href="<?= WEB_SITE_GLOBAL ?>css/datepicker.min.css" rel="stylesheet" type="text/css">
+<script src="<?= WEB_SITE_GLOBAL ?>js/datepicker.min.js"></script>
+<script src="<?= WEB_SITE_GLOBAL ?>js/datepicker.zh.js"></script>
+<script src="<?= WEB_SITE_GLOBAL ?>js/invoice.js"></script>
+
+
+
+<body>
+	<div class="mainLayout">
+		<div class="mainMenu">
+			<div class="menuItem">
+				<a href="#" class="mLogo">CLD</a>
+				<ul>
+					<!-- include 'menuReceipt' -->
+				</ul>
+			</div>
+			
+		</div>
+		<div class="warpContent">
+			<div class="subMenu fL">
+				<div class="menuItem">
+					<!-- include 'invoiceMenu' -->
+				</div>
+			</div>
+			<div class="adminContent autoHeight">
+				<legend>
+					已打印发票
+				</legend>
+				<div class="demandCate">
+				<form action="/invoicePrintStayAchieve/1/{{status}}"  method="get" >
+				
+				
+					<ul class="cateList">
+						<li><a <!-- if {{status}}=='ALL' --> class="now" <!-- endif --> href="/invoicePrintStayAchieve/1/ALL">所有</a>
+	  					<a <!-- if {{status}}=='TOPRINT' --> class="now" <!-- endif --> href="/invoicePrintStayAchieve/1/TOPRINT">待打印</a>
+	  					<a <!-- if {{status}}=='PRINTED' --> class="now" <!-- endif --> href="/invoicePrintStayAchieve/1/PRINTED" >已打印</a></li>
+	  					
+	  					
+	  					<li>
+							<div class="search">
+								<div class="input-append">
+									<input class="datepicker-here span3" name="date" value="{{date}}" placeholder="按时间筛选" type="text" data-range="true" data-multiple-dates-separator=" : " data-language="zh">
+									<button class="btn btn-small" type="submit">查询</button>
+								</div>
+							</div></li>
+	  					
+						<li>
+							<div class="search">
+								<div class="input-append">
+									
+								<input class="span3" type="text" name="MebSea"  data-irmMebSea value="{{MebSeaEn}}" placeholder="发票抬头、开票金额">
+								<button class="btn btn-small" node-iramMebSea type="submit">搜索</button>
+								
+								</div>
+							</div></li>
+					</ul>
+					</form>
+				</div>
+				<div class="saeaList">
+					<table class="table table-hover">
+						<tbody>
+						<tr class="thead"><th>开票流水号</th><th>开票单位(抬头)</th> <th>纳税人识别码</th> <th>注册地址`电话</th><th>开户银行`账号</th> <th>数量</th><th>单价</th> <th>开票金额</th><th>提交开票</th><th>发票号</th><th>打印发票</th></tr>
+						
+						<!-- loop list -->
+						<tr>
+							<td><a href="#invdetail" node-invoice='INFO' data-isKey="{{pendingInvoice' value.iidKeyK}}" data-toggle="modal">{{list' value.invoiceSerial}}</a></td>
+							<td><!-- if !empty({{list' value.invoiceType}}) -->
+	                                   	{{list' value.invoiceCompany}}
+	                                    <!-- else -->
+	                                    {{list' value.invoiceTitle}}
+	                                    <!-- endif --></td>
+	                                    
+	                          <td>{{list' value.TIN}}</td>   
+	                          <td>{{list' value.address}} {{list' value.phone}}</td>             
+	                           <td>{{list' value.bank}} {{list' value.bankAccount}}</td>                      
+	                                
+	                         <td>{{list' value.invoiceQuantity}}</td>    
+	                         <td>{{list' value.invoiceUnitPrice}}</td>           
+	                                    
+							<td>
+							<!-- if !empty({{list' value.invoiceType}}) -->
+	                        <b>¥{{list' value.invoicePrice}}</b><sup>专</sup>
+	                          <!-- else -->
+	                          <b>¥{{list' value.invoicePrice}}</b>
+	                          <!-- endif -->
+							</td>
+							
+							
+							
+							<td>{{list' value.categoryName}}{{list' value.userName}} {{list' value.date}}</td>
+							<td>
+							  {{invoiceList' value.invoiceNo}}
+							</td>
+							<td>
+							<!-- if {{list' value.printStatus}}==0 -->
+							<a class="button btn-block" node-invoice='PRINT' data-isKey="{{pendingInvoice' value.iidKeyK}}" href="#printInvice" data-toggle="modal">打印发票</a>
+							<!-- else -->
+							{{invoiceList' value.lastApprover.username}}&nbsp;{{invoiceList' value.printTime}}
+							<!-- endif -->
+							</td>
+						</tr>
+						<!-- endloop -->
+						
+						
+						</tbody>
+					</table>
+				</div>
+						  		<!--翻页-->
+				<div class="demandPage">
+					<ul class="pagination fL">
+	  							<!-- if {{page.previous}}==0 -->
+								<li><a href="javascript:void(0)" title="上一页">&lt;</a></li>
+								<!-- else -->
+								<li><a href="/invoicePrintAchieve/{{page.previous}}{{get}}" title="上一页">&lt;</a></li>
+								<!-- endif -->	
+								
+	  							<!-- if {{page.on_page}}>=3 -->
+	  							<li><a href="/invoicePrintAchieve/1{{get}}" title="上一页">1</a></li>
+	  							<li class="point"><span>...</span></li>
+	  							<!-- endif -->
+	  							
+	  							{{page.page}}
+	  							
+	  							<!-- if {{page.on_page}}<3 && {{page.total_page}}>5 -->
+	  							<li><a href="/invoicePrintAchieve/4{{get}}" >4</a></li>
+	  							<li><a href="/invoicePrintAchieve/5{{get}}" >5</a></li>
+	  							<!-- endif -->
+	  							
+	  							<!-- if {{page.total_page}}>3 -->
+	  							<li class="point"><span>...</span></li>
+			  					<!-- endif -->
+			  					
+			  					<!-- if {{page.next}}=={{page.on_page}} -->
+								<li><a href="javascript:void(0)" title="下一页">&gt;</a></li>
+								<!-- else -->
+								<li><a href="/invoicePrintAchieve/{{page.next}}{{get}}" title="下一页">&gt;</a></li>
+								<!-- endif -->
+			  					
+			  		</ul>
+			  	</div>				
+			</div>
+		</div>
+	</div>
+	
+	<div loading-msg='true' style="position:absolute;  left:50%;  top:50%;  "></div>
+	
+	<div class="modal  fade" id="invdetail">
+		
+		<div id="nc"></div>
+	</div>
+	
+	<div class="modal  fade" id="printInvice">
+		
+		<div id="prIn">2222</div>
+	</div>
+	
+<script type="text/javascript">autoFlashHeight();</script>	
+</body>

+ 229 - 0
protected/view/admin/invoiceStoreEdit.html

@@ -0,0 +1,229 @@
+<!-- include 'header' -->
+<link rel=stylesheet href="<?= WEB_SITE_GLOBAL ?>css/jquery.validator.css"> 
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/jquery.validator.min.js"></script>
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/zh-CN.js"></script>
+<script src="<?= WEB_SITE_GLOBAL ?>js/invoice.validator.js"></script>
+<body>
+	<div class="mainLayout">
+		<div class="mainMenu">
+			<div class="menuItem">
+				<a href="#" class="mLogo">CLD</a>
+				<ul>
+					<!-- include 'menuReceipt' -->
+				</ul>
+			</div>
+			
+		</div>
+		<div class="warpContent">
+			<div class="subMenu fL">
+				<div class="menuItem">
+					<ul>
+						<!-- include 'invoiceMenu' -->
+					</ul>
+				</div>
+			</div>
+			<div class="adminContent autoHeight">
+				<legend>
+					填写申请开票
+				</legend>
+				<div class="borad-news">
+					<div class="saeaList">
+					<form action="/invoiceStoreEditDo" method="post" id="invoice">
+						<input type="hidden" name="storeKey" value="{{invoiceDetail.storeKey}}">
+						<input type="hidden" name="trainKey" value="{{invoiceDetail.trainKey}}">
+						
+						<table class="table table-bordered table-condensed">
+							<tbody>
+							<tr>
+								<th class="taC" width="150">所在办事处</th>
+								<td>
+									<select name="cid">
+									<!-- loop invoiceDetail.category -->
+									<option <!-- if {{category' value.cid}}=={{invoiceDetail.cid}} --> selected <!-- endif --> value="{{category' value.cid}}:{{category' value.title}}">{{category' value.title}}</option>
+									<!-- endloop -->
+									</select>
+								</td>
+								<th class="taC" width="150"><span class="colRed">*</span>开票内容</th><td><select name="invoiceElement" >
+								<!-- include 'invoiceElement' -->
+							</select></td>
+							</tr>
+							
+							<tr>
+									<th class="taC"><span class="colRed">*</span>数量</th>
+									<td>
+										<input style="width:60px" name="invoiceQuantity" id="invoiceQuantity" value="{{invoiceDetail.invoiceQuantity}}" placeholder="输入数量" pattern="[0-9]" type="number" min="1" step="1">
+									</td>
+									<th class="taC"><span class="colRed">*</span>单价</th>
+									<td><input style="width:100px" name="invoiceUnitPrice" id="invoiceUnitPrice" value="{{invoiceDetail.invoiceUnitPrice}}"  placeholder="输入单价" pattern="[0-9]" type="number" min="1" step="100"></td>
+								</tr>
+							
+							<tr>
+								<th class="taC"><span class="colRed">*</span>开票金额</th>
+								
+								<td colspan="3">
+									
+										<p class="colGray">数量*单价=开票金额</p>
+										<b class="colOrange" id="tp" style="font-size:18px">¥{{invoiceDetail.invoicePrice}}</b>
+									
+									<input value="{{invoiceDetail.invoicePrice}}"  placeholder="输入开票金额" pattern="[0-9]" name="invoicePrice-del" id="invoicePrice" type="hidden" min="0" step="0.01">
+									</td>
+								
+							</tr>
+							
+							<tr>
+									<th class="taC">发票备注</th><td colspan="3"><textarea placeholder="用于发票右下角备注栏内容,如项目名称、项目地点" name="remark" style="width:550px">{{invoiceDetail.remark}}</textarea>
+									</td>
+								</tr>
+							
+							<tr>
+								<th class="taC"><span class="colRed">*</span>发票类型</th><td colspan="3">
+								<label class="radio inline"><input name="invoiceType" id="invoicePlain" onclick="invoiceShow()"  value="0" <!-- if {{invoiceDetail.invoiceType}}==0 --> checked <!-- endif --> type="radio">增值税普通发票</label>
+								<label class="radio inline"><input name="invoiceType" id="invoiceSpecial" onclick="invoiceShow()"  value="1" <!-- if {{invoiceDetail.invoiceType}}==1 --> checked <!-- endif --> type="radio">增值税专用发票</label>
+							</td>
+							</tr>
+							</tbody>
+						</table>
+						<table id="plainInvoice_box" class="table table-bordered table-condensed" <!-- if {{invoiceDetail.invoiceType}}==1 --> style="display:none" <!-- endif --> >
+							<tbody>
+							<tr>
+								<th colspan="4" class="taC">增值税普通发票</th>
+							</tr>
+							<tr>
+								<th class="taC" width="150"><span class="colRed">*</span>发票抬头</th>
+								<td ><input name="invoiceTitle" id="invoiceTitle" value="{{invoiceDetail.invoiceTitle}}" type="text" ></td>
+						<th class="taC" width="150"><span class="colRed"></span>纳税人识别码</th>
+									<td><input name="TINT" id="TINT" value="{{invoiceDetail.TIN}}" type="text"></td>
+							</tr>
+							
+							<tr>
+									<th class="taC"><span class="colRed"></span>注册地址</th>
+									<td><input type="text" name="addressT" id="addressT" value="{{invoiceDetail.address}}"></td>
+									<th class="taC"><span class="colRed"></span>注册电话</th>
+									<td><input type="text" name="phoneT" id="phoneT" value="{{invoiceDetail.phone}}"></td>
+								</tr>
+								<tr>
+									<th class="taC"><span class="colRed"></span>开户银行</th>
+									<td><input type="text" name="bankT" id="bankT" value="{{invoiceDetail.bank}}"></td>
+									<th class="taC"><span class="colRed"></span>银行账号</th>
+									<td><input type="text" name="bankAccountT" id="bankAccountT" value="{{invoiceDetail.bankAccount}}"></td>
+								</tr>
+							
+							
+							</tbody>
+						</table>
+						<table id="specialInvoice_box" class="table table-bordered table-condensed" <!-- if {{invoiceDetail.invoiceType}}==0 --> style="display:none" <!-- endif --> >
+							<tbody>
+							<tr>
+								<th colspan="4" class="taC">增值税专用发票</th>
+							</tr>
+							<tr>
+								<th class="taC" width="150"><span class="colRed">*</span>单位名称</th>
+								<td>
+								<input name="invoiceCompany" id="invoiceCompany" value="{{invoiceDetail.invoiceCompany}}" type="text">
+								</td>
+								<th class="taC" width="150"><span class="colRed">*</span>纳税人识别码</th>
+								<td><input name="TIN" id="TIN" value="{{invoiceDetail.TIN}}" type="text"></td>
+
+							</tr>
+							</tr>
+							<tr>
+								<th class="taC"><span class="colRed">*</span>注册地址</th>
+								<td><input type="text" value="{{invoiceDetail.address}}" name="address" id="address"></td>
+								<th class="taC"><span class="colRed">*</span>注册电话</th>
+								<td><input type="text" value="{{invoiceDetail.phone}}" name="phone" id="phone"></td>
+							</tr>
+							<tr>
+								<th class="taC"><span class="colRed">*</span>开户银行</th>
+								<td><input type="text" name="bank" id="bank" value="{{invoiceDetail.bank}}"></td>
+								<th class="taC"><span class="colRed">*</span>银行账号</th>
+								<td><input type="text" name="bankAccount" id="bankAccount" value="{{invoiceDetail.bankAccount}}"></td>
+							</tr>
+							</tbody>
+						</table>
+						<table class="table table-bordered table-condensed">
+							
+							<tr>
+								<th colspan="4" class="taC">邮寄信息</th>
+							</tr>
+							<tr>
+								<th class="taC" width="150"><span class="colRed">*</span>是否邮寄</th><td colspan="3">
+								<label class="radio inline">
+								<input type="radio" onclick="mailShow()" id="isMail" name="doPost" value="1" <!-- if {{invoiceDetail.doPost}}==1 --> checked <!-- endif -->  >是</label>
+								<label class="radio inline"><input type="radio" onclick="mailShow()" name="doPost" value="0" <!-- if {{invoiceDetail.doPost}}==0 --> checked <!-- endif --> >否</label>
+							</td>
+							</tr>
+							<tbody id="mail_box" <!-- if {{invoiceDetail.doPost}}==0 --> style="display:none" <!-- endif --> >
+							<tr>
+								<th class="taC" width="150"><span class="colRed">*</span>收件人</th>
+								<td><input type="text"  name="recipients" id="recipients" value="{{invoiceDetail.recipients}}" ></td>
+								<th class="taC" width="150"><span class="colRed">*</span>收件人手机/电话</th>
+								<td><input type="text" name="recipientsPhone" id="recipientsPhone" value="{{invoiceDetail.recipientsPhone}}" ></td>
+							</tr>
+							<tr>
+								<th class="taC" width="150"><span class="colRed">*</span>收件地址</th>
+								<td colspan="3"><input type="text" class="span6" name="recipientsAddress" id="recipientsAddress" value="{{invoiceDetail.recipientsAddress}}" ></td>
+							</tr>
+							<tr>
+								<th class="taC" width="150">邮寄物品</th>
+								<td colspan="3">
+								
+								
+								<div class="checkbox">
+									  <label>
+									    <input <!-- if !empty({{invoiceDetail.mailItemsJson.softLock}}) --> checked <!-- endif --> type="checkbox" name="softLock" value="1">
+									    软件锁 <br><input type="number" name="softLockNum" class="span1" placeholder="数量" value="{{invoiceDetail.mailItemsJson.softLock}}">
+									  </label>
+									</div>
+									<div class="checkbox">
+									  <label>
+									    <input type="checkbox" checked disabled value="1">
+									    发票 <br>1
+									  </label>
+									</div>
+									<div class="checkbox">
+									  <label>
+									    <input <!-- if !empty({{invoiceDetail.mailItemsJson.contract}}) --> checked <!-- endif --> type="checkbox" name="contract" value="1">
+									    合同 <br><input type="number" name="contractNum" class="span1" placeholder="数量" value="{{invoiceDetail.mailItemsJson.contract}}">
+									  </label>
+									</div>
+									<div class="checkbox">
+									  <label>
+									    <input <!-- if !empty({{invoiceDetail.mailItemsJson.instructions}}) --> checked <!-- endif --> type="checkbox" name="instructions" value="1">
+									    说明书 <br><input type="number" name="instructionsNum" class="span1" placeholder="数量" value="{{invoiceDetail.mailItemsJson.instructions}}">
+									  </label>
+									</div>
+									<div class="checkbox">
+									  <label>
+									    <input <!-- if !empty({{invoiceDetail.mailItemsJson.remittance}}) --> checked <!-- endif --> type="checkbox" name="remittance" value="1">
+									    汇款账号单
+									  </label>
+									</div>
+									<div class="checkbox">
+									  <label>
+									    <input type="checkbox" checked="" disabled="">
+									    备注<br><input type="text" class="span4" name="mailItems" value="{{invoiceDetail.mailItemsJson.mailItems}}" placeholder="备注信息或其他需要邮寄物品请填写在这,写明数量。">
+									  </label>
+									</div>
+								
+								
+								
+								
+								
+								</td>
+							</tr>
+							</tbody>
+						</table>
+						
+						<p class="taR"><button type="submit" class="button" href="#confirm" data-toggle="modal">保存</button></p>
+					</p>
+					</form>
+					
+					
+					
+				</div>
+			</div>
+		</div>
+	</div>
+ 	
+<script type="text/javascript">autoFlashHeight();</script>	
+</body>

+ 544 - 0
protected/view/admin/invoiceTrainingDetail.html

@@ -0,0 +1,544 @@
+<!-- include 'header' -->
+
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/swfuplad2/swfupload.js"></script>
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/swfuplad2/swfupload.queue.js"></script>
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/swfuplad2/fileprogress.js"></script>
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/swfuplad2/handlers.js"></script>
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/invoice.js"></script>
+
+<link rel=stylesheet href="<?= WEB_SITE_GLOBAL ?>js/DataTables/jquery.dataTables.css"> 
+<script type="text/javascript" src="<?= WEB_SITE_GLOBAL ?>js/DataTables/jquery.dataTables.min.js"></script>
+
+
+
+<script type="text/javascript">
+		var swfu;
+
+		window.onload = function() {
+			var settings = {
+				flash_url : "<?= WEB_SITE_GLOBAL ?>js/swfuplad2/swfupload.swf",
+				upload_url: "/invoiceTrainingUpload",	// Relative to the SWF file
+				
+				file_size_limit : "8 MB",
+				file_types : "*.xlsx",
+				file_types_description : "*.xlsx",
+				file_upload_limit : 8,
+				file_queue_limit : 1,
+				custom_settings : {
+					progressTarget : "fsUploadProgress",
+					cancelButtonId : "btnCancel"
+				},
+				debug: false,
+
+				// Button settings
+				//button_image_url: "<?= WEB_SITE_GLOBAL ?>images/btn-normal.gif",	// Relative to the Flash file
+				button_width: "200",
+				button_height: "50",
+				button_placeholder_id: "spanButtonPlaceHolder",
+				button_text: '<span class="theFont">浏览</span>',
+				button_text_style: ".theFont { font-size: 16; }",
+				button_text_left_padding: 12,
+				button_text_top_padding: 3,
+
+				// The event handler functions are defined in handlers.js
+				file_queued_handler : fileQueued,
+				file_queue_error_handler : fileQueueError,
+				file_dialog_complete_handler : fileDialogComplete,
+				upload_start_handler : uploadStart,
+				upload_progress_handler : uploadProgress,
+				upload_error_handler : uploadError,
+				upload_success_handler : uploadSuccess,
+				upload_complete_handler : uploadComplete,
+				queue_complete_handler : queueComplete	// Queue plugin event
+			};
+
+			swfu = new SWFUpload(settings);
+	     };
+	</script>
+
+
+<body>
+	<div class="mainLayout">
+		<div class="mainMenu">
+			<div class="menuItem">
+				<a href="#" class="mLogo">CLD</a>
+				<ul>
+					<!-- include 'menuReceipt' -->
+				</ul>
+			</div>
+			
+		</div>
+		<div class="warpContent">
+			<div class="subMenu fL">
+				<div class="menuItem">
+					<!-- include 'invoiceMenu' -->
+				</div>
+			</div>
+			<div class="adminContent autoHeight">
+				<legend>
+				{{iTrainDetail.trainName}}</legend>
+				<div class="demandCate">
+				<form action="/invoiceTrainingDetail/{{itid}}.html" id="its" method="get" class="nice-validator n-default" novalidate="novalidate">
+					<ul class="cateList">
+						<li>
+						<select name="trainStatus" node-itSChange >
+							<option <!-- if {{trainStatus}}=='ALL' --> selected <!-- endif --> value="ALL">所有 </option>
+							<option <!-- if {{trainStatus}}=='SUBED' --> selected <!-- endif --> value="SUBED" >待提交 </option><!--该状态为还没提交审批的发票-->
+							<option <!-- if {{trainStatus}}=='APPROVAL' --> selected <!-- endif --> value="APPROVAL">审批中  </option>
+							<option <!-- if {{trainStatus}}=='TICKET' --> selected <!-- endif --> value="TICKET">出票中 </option>
+							
+						</select>
+						</li>
+						
+						<li>
+							<a href="#confirmBatchMail" node-store=batchMail data-toggle="modal">批量设置邮寄物品</a>
+							<a href="#batchApproval" node-store=batchApproval data-toggle="modal">批量提交审批</a>
+							<a href="#batchdel" node-store=batchDel data-toggle="modal">批量移除</a>
+						</li>
+						<li>
+							<a href="#import" data-toggle="modal"class="button">导入Excel</a>
+						</li>
+	  			</ul>
+	  			</form>
+	  		</div>
+				<div class="saeaList">
+					<table class="table table-hover" id="table_id_example">
+						<thead>
+							<tr class="thead">
+							<th width="25"></th>
+							<th>操作</th>
+							<th>开票流水号</th>
+							<th>开票单位(抬头)</th>
+							<th>纳税人识别码</th>
+							<th>注册地址、电话</th>
+							<th>开户银行及账号</th>
+							<th>开票内容</th>
+							<th>数量</th>
+							<th>单价</th>
+							<th>总额</th>
+							<th>发票备注</th>
+							<th>邮寄物品</th>
+							<th>邮寄地址</th>
+							
+							
+							<th>状态</th>
+							<th>发票号</th>
+							<th>出票时间</th>
+							<th>收款流水号</th>
+							</tr>
+						</thead>
+						<tbody>
+							<!--处理中/已完成发票/退票-->
+						
+							<!--还未设置邮寄物品的发票-->
+						<tr class="warning">
+							<td><input type="checkbox" disabled></td>
+							<td><a href="invoice-batch-edit.html">编辑</a> <a href="#confirm-erro" data-toggle="modal">提交审批</a> <a href="#del" data-toggle="modal" class="colRed">移除</a></td>
+							<td></td>
+							<td>珠海XXXX公司</td>
+							<td>1212123123123</td>
+							<td>广东省珠海市香洲区银桦路8号24D0756-34324</td>
+							<td>广发银行234324234</td>
+							<td>纵横公路工程造价管理系统V9.0</td>
+							<td>1</td>
+							<td>¥9800.00</td>
+							<td><b>¥9800.00</b><sup>专</sup></td>
+							<td></td>
+							<td><a href="#">设置邮寄物品</a></td>
+							<td>珠海市银桦路8号深发展大厦24D 陈特 12345677898</td>
+							<td>已出票</td>
+							<td>NO.12123</td>
+							<td>2016-03-03<br>11:30:03</td>
+							<td></td>
+						</tr>
+							<!--待提交审批的发票-->
+						<tr>
+							<td><input type="checkbox"></td>
+							<td><a href="invoice-batch-edit.html">编辑</a> <a href="#confirm" data-toggle="modal">提交审批</a> <a href="#del" data-toggle="modal" class="colRed">移除</a></td>
+							<td></td>
+							<td>珠海XXXX公司</td>
+							<td>1212123123123</td>
+							<td>广东省珠海市香洲区银桦路8号24D0756-34324</td>
+							<td>广发银行234324234</td>
+							<td>纵横公路工程造价管理系统V9.0</td>
+							<td>1</td>
+							<td>¥9800.00</td>
+							<td><b>¥9800.00</b><sup>专</sup></td>
+							<td></td>
+							<td>发票、软件锁*1</td>
+							<td>珠海市银桦路8号深发展大厦24D 陈特 12345677898</td>
+							<td>已出票</td>
+							<td>NO.12123</td>
+							<td>2016-03-03<br>11:30:03</td>
+							<td></td>
+						</tr>
+						</tbody>
+						<tfoot>
+							
+						</tfoot>
+					</table>
+				</div>
+				<!--翻页-->
+				
+			</div>
+		</div>
+	</div>
+	<!--设置邮寄物品-->
+	<div class="modal hide fade" id="confirm-erro">
+
+		<form action="/invoiceStoreMailItemSet" method="post">
+			<input type="hidden" id="trainKey" name="trainKey"
+				value="{{iTrainDetail.trainingKey}}"> <input type="hidden"
+				id="MailStoreKey" name="storeKey" value="">
+
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h3>设置邮寄物品</h3>
+					</div>
+					<div class="modal-body saeaList">
+						<table class="table table-bordered table-condensed">
+							<tr>
+								<th colspan="4" class="taC">邮寄信息</th>
+							</tr>
+							<tr>
+								<th class="taC" width="150">邮寄物品</th>
+								<td colspan="3">
+
+									<div class="checkbox">
+										<label> <input type="checkbox" name="softLock"
+											value="1"> 软件锁 <br>
+										<input type="number" name="softLockNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" checked disabled
+											value="1"> 发票 <br>1
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="contract"
+											value="1"> 合同 <br>
+										<input type="number" name="contractNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="instructions"
+											value="1"> 说明书 <br>
+										<input type="number" name="instructionsNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="remittance"
+											value="1"> 汇款账号单
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" checked="" disabled="">
+											备注<br>
+										<input type="text" class="span4" name="mailItems"
+											value=""
+											placeholder="备注信息或其他需要邮寄物品请填写在这,写明数量。">
+										</label>
+									</div>
+
+								</td>
+							</tr>
+						</table>
+						<div id="mailMsg" class="hide">获取信息失败</div>
+					</div>
+					<div class="modal-footer">
+						<input type="submit" class="button" value="确定"> <a
+							href="#" class="button btn-gray" data-dismiss="modal"
+							aria-hidden="true">取消</a>
+					</div>
+				</div>
+			</div>
+		</form>
+	</div>
+	
+	
+	
+	
+	<div class="modal hide fade" id="confirmBatchMail">
+
+		<form action="/invoiceStoreBatchMailItemSet" method="post">
+			<input type="hidden" id="trainKey" name="trainKey"
+				value="{{iTrainDetail.trainingKey}}"> <input type="hidden"
+				id="BatchMailStoreKey" name="storeKey" value="">
+
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h3>设置邮寄物品</h3>
+					</div>
+					<div class="modal-body saeaList">
+						<table class="table table-bordered table-condensed">
+							<tr>
+								<th colspan="4" class="taC">邮寄信息</th>
+							</tr>
+							<tr>
+								<th class="taC" width="150">邮寄物品</th>
+								<td colspan="3">
+
+									<div class="checkbox">
+										<label> <input type="checkbox" name="softLock"
+											value="1"> 软件锁 <br>
+										<input type="number" name="softLockNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" checked disabled
+											value="1"> 发票 <br>1
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="contract"
+											value="1"> 合同 <br>
+										<input type="number" name="contractNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="instructions"
+											value="1"> 说明书 <br>
+										<input type="number" name="instructionsNum" class="span1"
+											placeholder="数量"
+											value="">
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" name="remittance"
+											value="1"> 汇款账号单
+										</label>
+									</div>
+									<div class="checkbox">
+										<label> <input type="checkbox" checked="" disabled="">
+											备注<br>
+										<input type="text" class="span4" name="mailItems"
+											value=""
+											placeholder="备注信息或其他需要邮寄物品请填写在这,写明数量。">
+										</label>
+									</div>
+
+								</td>
+							</tr>
+						</table>
+						<div id="mailMsg" class="hide">获取信息失败</div>
+					</div>
+					<div class="modal-footer">
+						<input type="submit" class="button" value="确定"> <a
+							href="#" class="button btn-gray" data-dismiss="modal"
+							aria-hidden="true">取消</a>
+					</div>
+				</div>
+			</div>
+		</form>
+	</div>
+	
+	
+	
+	<!--申请确认-->
+    
+    
+		<!--申请确认-->
+<div class="modal hide fade" id="confirm">
+	
+	<form action="/invoiceStoreApproval" method="post" >
+	<input type="hidden" id="trainKey" name="trainKey" value="{{iTrainDetail.trainingKey}}">
+		<input type="hidden" id="appStoreKey" name="storeKey" value="">
+		<div class="modal-dialog">
+			<div class="modal-content">
+			<div class="modal-header">
+			<h3>确认信息无误</h3>
+			</div>
+			<div class="modal-body">
+				申请提交后开票信息将不能修改,请确认信息无误。
+			</div>
+		<div class="modal-footer">
+		<input type="submit" class="button" value="无误,提交申请">
+				
+		<a href="#" class="button btn-gray" data-dismiss="modal" aria-hidden="true">我要检查一下</a>
+		</div>
+	</div>
+	</div>
+	
+	</form>
+	
+	</div>
+	
+	
+	
+	<div class="modal hide fade" id="batchApproval">
+	
+	<form action="/invoiceStoreBatchApproval" method="post" >
+	<input type="hidden" id="trainKey" name="trainKey" value="{{iTrainDetail.trainingKey}}">
+		<input type="hidden" id="appBatchStoreKey" name="storeKey" value="">
+		<div class="modal-dialog">
+			<div class="modal-content">
+			<div class="modal-header">
+			<h3>确认信息无误</h3>
+			</div>
+			<div class="modal-body">
+				申请提交后开票信息将不能修改,请确认信息无误。
+			</div>
+		<div class="modal-footer">
+		<input type="submit" class="button" value="无误,提交申请">
+				
+		<a href="#" class="button btn-gray" data-dismiss="modal" aria-hidden="true">我要检查一下</a>
+		</div>
+	</div>
+	</div>
+	
+	</form>
+	
+	</div>
+	
+	
+	
+			<!--申请确认-->
+			
+			<!--移除-->
+		<div class="modal hide fade" id="del">
+		
+		<form action="/invoiceStoreDelete" method="post" >
+		<input type="hidden" id="trainKey" name="trainKey" value="{{iTrainDetail.trainingKey}}">
+		<input type="hidden" id="iStoreKey" name="iStoreKey" value="">
+			<div class="modal-dialog">
+				<div class="modal-content">
+				<div class="modal-header">
+				<h3>确认移除</h3>
+				</div>
+				<div class="modal-body">
+					请确认是否移除发票。
+				</div>
+			<div class="modal-footer">
+				<input type="submit" class="button" value="确定移除">
+					
+					<a href="#" class="button btn-gray" data-dismiss="modal" aria-hidden="true">取消</a>
+			</div>
+		</div>
+		</div>
+		
+		</form>
+		
+		</div>
+		
+		
+		
+		
+		
+		<div class="modal hide fade" id="batchdel">
+		
+		<form action="/invoiceStoreBatchDelete" method="post" >
+		<input type="hidden" id="trainKey" name="trainKey" value="{{iTrainDetail.trainingKey}}">
+		<input type="hidden" id="batchStoreKey" name="storeKey" value="">
+			<div class="modal-dialog">
+				<div class="modal-content">
+				<div class="modal-header">
+				<h3>确认移除</h3>
+				</div>
+				<div class="modal-body">
+					请确认是否移除发票。
+				</div>
+			<div class="modal-footer">
+				<input type="submit" class="button" value="确定移除">
+					
+					<a href="#" class="button btn-gray" data-dismiss="modal" aria-hidden="true">取消</a>
+			</div>
+		</div>
+		</div>
+		
+		</form>
+		
+		</div>
+		
+		
+		
+		
+		
+		
+				<!--移除-->
+				
+				<!--导入-->
+			<div class="modal hide fade" id="import">
+			<form action="/invoiceStoreImport" method="post" name="invoiceTraining">
+			<input type="hidden" id="trainingKey" name="trainingKey" value="{{iTrainDetail.trainingKey}}">
+			<input type="hidden" id="enclosurName" name="trainName" value="">
+				<div class="modal-dialog">
+					<div class="modal-content">
+					<div class="modal-header">
+					<h3>导入Excel</h3>
+					</div>
+					<div class="modal-body saeaList">
+						<table class="table table-bordered table-condensed">
+							<tr><th class="taC" width="150">Excel模板</th><td><a href="#">下载</a></td></tr>
+							<tr><th class="taC" width="150">选择Excel文件</th>
+							<td>
+						<div class="controls">
+							
+							
+			            <span id="spanButtonPlaceHolder"></span>
+										
+						<input id="btnCancel" type="button" value="取消所有上传" style="display:none"  onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
+									
+										
+			             </div>
+							
+							<span class="fieldset flash" id="fsUploadProgress"></span>
+									<span id="divStatus">0 个文件已上传</span>
+							
+							
+							</td></tr>
+						</table>
+						<p class="alert alert-block">导入数据为新增开票,已导入开票不受影响。</p>
+					</div>
+				<div class="modal-footer">
+					<input type="submit" class="button" value="确认上传">
+					<a href="#" class="button btn-gray" data-dismiss="modal" aria-hidden="true">取消</a>
+				</div>
+			</div>
+			</div>
+			</form>
+			</div>
+					<!--导入-->
+<script type="text/javascript">autoFlashHeight();
+$(document).ready( function () {
+	
+	var data = {{trainlistJson}}
+	
+	
+    $('#table_id_example').DataTable({
+    	language: {
+    		"sProcessing": "处理中...",
+    		"sLengthMenu": "显示 _MENU_ 项结果",
+    		"sSearch": "搜索:",
+    		"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
+    		"sEmptyTable": "表中数据为空",
+    		 "oPaginate": {
+    	            "sFirst": "首页",
+    	            "sPrevious": "上页",
+    	            "sNext": "下页",
+    	            "sLast": "末页"
+    	        },
+    		 "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
+    	},
+    	//serverSide: true,
+    	
+    data:data	
+    }
+    );
+} );
+
+</script>
+
+</body>

BIN
upload/swfupload/1456730686.png


BIN
upload/swfupload/1456730739.png


BIN
upload/swfupload/1456730801.png


BIN
upload/swfupload/1456730831.png


BIN
upload/swfupload/1456730861.png


BIN
upload/swfupload/1456733868.png


BIN
upload/swfupload/1456736119.png


BIN
upload/swfupload/1456736158.png


BIN
upload/swfupload/1456736783.png


BIN
upload/swfupload/1456736833.png


BIN
upload/swfupload/1456737088.png


BIN
upload/swfupload/1456737113.png


BIN
upload/swfupload/1456737117.png


BIN
upload/swfupload/1456737135.png


BIN
upload/swfupload/1456737136.png


BIN
upload/swfupload/1456814306.png


BIN
upload/swfupload/1456815628.jpg


BIN
upload/swfupload/1456815630.png


BIN
upload/swfupload/1458197506.jpg


BIN
upload/swfupload/1458197667.jpg


BIN
upload/swfupload/1461831150.png


BIN
upload/swfupload/1462343602.png


BIN
upload/swfupload/1467098556.docx


+ 0 - 361
upload/swfupload/1467098744.doc

@@ -1,361 +0,0 @@
-
-
-
-
-<!--html xmlns:v="urn:schemas-microsoft-com:vml"
-xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40"-->
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=gbk">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 11">
-<meta name=Originator content="Microsoft Word 11">
-<title>简历预览</title>
-<script language="JavaScript" type="text/javascript" src="/js/jquery/jquery.js"></script>
-<style media="all">
-body {width:680px;margin:0;padding:0; font-size:12px; color:#666; font-family:Arial, Helvetica, sans-serif}
-#header table {border-bottom:#06C 2px solid;margin-bottom:1px;}
-.nameBox {
-	padding-bottom:10px;
-}
-.nameBox span { color:#444}
-.nameBox #userName {font-size:1.8em; font-family:"微软雅黑","yahei","宋体";color:#06C}
-.nameBox span {margin-right:10px;}
-h1 {font-size:16px;height:40px; line-height:40px;margin:0;padding:0; font-family:"微软雅黑","黑体"; }
-.wrap {margin:0 auto;padding:10px;width:650px; background:#FFF;}
-.unitWrap {width:650px;margin-top:10px; overflow:hidden; clear:both;}
-.first {margin-top:0px;}
-.unitWrap .tbody {border:#DDD 0px solid; }
-.unitWrap .thead {margin-bottom:1px;}
-.unitWrap .thead th
-{padding-left:10px;
- text-align:left;
- font-size:14px;
- height:30px; 
- line-height:30px; 
- color:#0066cc;
-border-bottom:#06c 1px solid;
-}
-
-.unitWrap .tbody td {padding-left:0px;height:30px; line-height:30px; border-bottom:#DDD 1px dotted; color:#555555}
-.unitWrap table td.area {line-height:22px;padding:10px;}
-.unitWrap table td.alignR {padding-left:0;color:#666; font-weight:bold; text-align:right;padding-right:0px;}
-.unitWrap table td.alignR strong {color:#777;}
-
-.btnBox {text-align:center;padding:20px 0 40px;}
-.btnBox a {display:inline-block; padding:0 15px; height:30px; line-height:30px; text-decoration:none;margin-right:10px; font-size:14px;}
-.btnBox a.print {background:#06c; color:#FFF;padding:0 20px}
-.btnBox a.print:hover {background:#e86005;}
-.btnBox a.close {background:#CCC; color:#000;}
-.btnBox a.close:hover {background:#DDD; color:#000;}
-strong { color:#494949;}
-</style>
-<style media="print">
-.btnBox {display:none;}
-.unitWrap .tbody td {padding-left:10px;height:24px; line-height:24px; border-bottom:#CCCCCC 1px solid;}
-.nameBox #userName {font-size:1.8em; font-family:"微软雅黑","yahei","黑体";color:#000000}
-</style>
-</head>
-</head>
-<body>
-<div class="wrap">
-
-
-
-  
-  
-
-
-
-
-
-
-
-
-
-
-
-<table cellspacing="0" cellpadding="0" border="0" width="650">
-<tr><td>
-
-<div class="wrap">
-<div id="header" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" id="headerTable">
-
-  <tr>
-    <td width="72%" height="20" class="topBar" style="border-bottom:#DDD 1px solid">&nbsp;www.zh-hr.com</td>
-    <td width="28%" rowspan="2" align="right"><img src="http://www.zh-hr.com/style/images/logo_01.gif" height="40" /></td>
-  </tr>
-  <tr>
-    <td class="topBar">&nbsp;</td>
-  </tr>
-  <tr>
-    <td colspan="2" class="nameBox">
-		<span><strong id="userName">&nbsp;赖国然</strong> &nbsp;的简历</span>
-		<span>[普通求职]</span>
-		<span>简历编号:1576245</span>
-		<span>更新时间:2016-06-07</span></td>
-  </tr>
-</table>
-
-</div>    
-<div id="basic" class="unitWrap first">
-  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-    <tr>
-    <td width="24%" rowspan="7" align="center" valign="top" style="padding-top:10px;">
-							
-								<img width="98px" height="124px" src="http://www.zh-hr.com/disppersonimage?owner=1&person=1576245&defaultimg=/jsp/person/p_images/photo_default.gif"/>
-							</td>
-      <td width="15%" class="alignR"><strong>姓  名:</strong></td>
-      <td width="23%">赖国然</td>
-      <td width="15%" class="alignR"><strong>性  别:</strong></td>
-      <td width="23%">男</td>
-      
-    </tr>
-    <tr>
-      <td class="alignR"><strong>民  族:</strong></td>
-      <td>汉族</td>
-      <td class="alignR"><strong>出生日期:</strong></td>
-      <td>1993-05-23</td>
-    </tr>
-    <tr>
-      <td class="alignR"><strong>户  籍:</strong></td>
-      <td>斗门</td>
-      <td class="alignR"><strong>身  高:</strong></td>
-      <td>171cm</td>
-    </tr>
-    <tr>
-      <td class="alignR"><strong>婚姻状况:</strong></td>
-      <td>未婚</td>
-      <td class="alignR"><strong>学  历:</strong></td>
-      <td>本科</td>
-    </tr>
-    <tr>
-      <td class="alignR"><strong>现居住地:</strong></td>
-      <td>珠海市</td>
-      <td class="alignR"><strong>工作年限:</strong></td>
-      <td>1年</td>
-    </tr>
-    <tr>
-      <td class="alignR"><strong>当前情况:</strong></td>
-      <td>离职</td>
-      <td class="alignR"><strong>目前行业:</strong></td>
-      <td>计算机.互联网</td>
-    </tr>
-    <tr>
-      <td class="alignR"><strong>技术职称:</strong></td>
-      <td>无</td>	
-      <td class="alignR"><strong>身&nbsp;&nbsp;份&nbsp;&nbsp;证:</strong></td>
-      <td></td>
-    </tr>
-  </table>
-</div>
-<div id="base_edulanguage" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th><a onclick="javascript:setShowList($(this),$('#school'));" title="院校及语言">+ 院校及语言</a></th>
-</tr>
-</table>
-<table id="school" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-  <tr>
-    <td width="14%" class="alignR"><strong>毕业学校:</strong></td>
-    <td width="36%">吉林大学珠海学院</td>
-    <td width="14%" class="alignR"><strong>专  业:</strong></td>
-    <td width="36%">软件工程</td>
-  </tr> 
-  <tr>
-    <td class="alignR"><strong>毕业时间:</strong></td>
-    <td>2016 年 6月</td>
-    <td class="alignR"><strong>计算机水平:</strong></td>
-    <td>优秀</td>
-  </tr> 
-  <tr>
-    <td class="alignR"><strong>国语水平:</strong></td>
-    <td>优秀</td>
-    <td class="alignR"><strong>粤语水平:</strong></td>
-    <td>优秀</td>
-  </tr> 
-  <tr>
-    <td class="alignR"><strong>外语种类:</strong></td>
-    <td>英语水平良好具有 [四级] 证书,</td>
-    <td class="alignR"><strong>外语种类:</strong></td>
-    <td></td>
-  </tr>   
-</table>
-</div>
-
-<div id="qzyx" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th><a onclick="javascript:setShowList($(this),$('#gzyx_s'));" title="求职意向">+ 求职意向</a></th>
-</tr>
-</table>
-<table id="gzyx_s" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-	<tr>
-		<td width="14%" class="alignR"><strong>求职类型:</strong></td>
-		<td width="36%">
-			专职		
-		</td>
-		<td width="14%" class="alignR"><strong>期望月薪:</strong></td>
-		<td width="36%">5000-7000元</td>
-	</tr>
-	<tr>
-		<td class="alignR"><strong>具体职位:</strong></td>
-		<td colspan="3">PHP程序员or前端工程师&nbsp;</td>
-	</tr>
-	<tr>
-		<td class="alignR"><strong>希望岗位:</strong></td>
-		<td colspan="3">软件工程师/程序员&nbsp;&nbsp;&nbsp;数据库开发工程师&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		</td>
-	</tr>	
-	<tr>
-		<td class="alignR"><strong>希望地区:</strong></td>
-		<td>珠海市&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		</td>
-		<td class="alignR"><strong>希望行业:</strong></td>
-		<td>计算机.互联网&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		</td>			
-	</tr>
-</table>
-</div>
-
-
-<div id="jyjl" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th colspan="4"><a onclick="javascript:setShowList($(this),$('#jyjl_s'));" title="教育经历 ( 1 项)">- 教育经历 ( 1 项)</a></th>
-</tr>
-</table>
-<table id="jyjl_s" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-
-  <tr>
-    <td colspan="4" style="background:#f8f8f8;"><strong>吉林大学珠海学院</strong>&nbsp;&nbsp;(2012-09-16&nbsp;至&nbsp;2016-06-25)</td>
-  </tr>
-  <tr>
-    <td width="14%" class="alignR"><strong>学历:</strong></td>
-    <td width="36%">本科</td>
-	<td width="14%" class="alignR"><strong>专业名称:</strong></td>
-	<td width="36%">软件工程</td>
-  </tr>
-  <tr>
-    <td width="14%" valign="top" class="alignR">简要说明:</td>
-    <td colspan="3">大学学习,主要熟悉java开发,对web应用开发颇感兴趣,大学期间完成过飞机购票系统和电影网的java web项目开发,大学期间也获取过二,三等奖学金,优秀学生等荣誉。</td>
-  </tr>
-  
-</table>
-</div>
-
-
- 
-
-
-<div id="gzjl" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th colspan="4"><a onclick="javascript:setShowList($(this),$('#gzjl_s'));" title="工作经历 ( 2 项)">- 工作经历 ( 2 项)</a></th>
-</tr>
-</table>
-<table id="gzjl_s" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-
-  <tr>
-    <td colspan="4" style="background:#f8f8f8;"><strong>珠海健康云科技有限公司</strong>&nbsp;&nbsp;(2016-02-15&nbsp;至&nbsp;2016-06-01)</td>
-
-  </tr>
-  <tr>
-    <td width="14%" class="alignR"><strong>担任职位:</strong></td>
-    <td width="36%">php程序员</td>
-    <td width="14%" class="alignR"><strong>在职情况:</strong></td>
-    <td width="36%">离职</td>
-  </tr>
-  <tr>
-    <td width="14%" valign="top" class="alignR"><strong>工作描述:</strong></td>
-    <td colspan="3">主要对公司的有问必答网维护优化和添加新功能,老项目进行yii2重写,对互联网数据爬取等工作,了解熟悉运用yii框架和php爬虫知识,对管理大型网站,seo优化有了基础认识</td>
-  </tr>	
-
-  <tr>
-    <td colspan="4" style="background:#f8f8f8;"><strong>珠海国芯云科技有限公司</strong>&nbsp;&nbsp;(2015-07-15&nbsp;至&nbsp;2016-02-04)</td>
-
-  </tr>
-  <tr>
-    <td width="14%" class="alignR"><strong>担任职位:</strong></td>
-    <td width="36%">前端工程师(实习)</td>
-    <td width="14%" class="alignR"><strong>在职情况:</strong></td>
-    <td width="36%">离职</td>
-  </tr>
-  <tr>
-    <td width="14%" valign="top" class="alignR"><strong>工作描述:</strong></td>
-    <td colspan="3">在职期间,主要完成对公司官网前端开发,对公司芯学堂产品进行前端移动端开发~主要利用MUI框架加HTML5开发,了解整个项目的开发流程,熟悉HTMl+css+js的网站开发,对后端ThinkPhp框架有所运用和了解</td>
-  </tr>	
-  
-</table>
-</div>
- 
-
-<div id="grms" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th colspan="4"><a onclick="javascript:setShowList($(this),$('#grms_s'));" title="个人描述">+ 个人描述</a></th>
-</tr>
-</table>
-<table id="grms_s" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-<tr>
-	<td class="area">本人易相处、乐观向上。渴望成长,追求风格好的代码。通过一年丰富的学习经历,相信可以很好的胜任下一份工作</td>
-</tr>         
-</table>
-</div>
-
-<div id="wyjl" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th colspan="4"><a onclick="javascript:setShowList($(this),$('#wyjl_s'));" title="外语简历">- 外语简历</a></th>
-</tr>
-</table>
-<table id="wyjl_s" width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-<tr>
-	<td class="area">英语4级证书,能够完成简单的英语听说读写能力,对程序外文文档也可了解阅读<br></td>
-</tr>         
-</table>
-</div>
-
-<div id="base_link" class="unitWrap">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="thead">
-  <tr>
-    <th>+ 联系方式</th>
-</tr>
-</table>
-<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tbody">
-	<tr>
-		<td width="14%" class="alignR"><strong>联系电话:</strong></td>
-		<td width="36%">13726259839</td>
-		<td width="14%" class="alignR"><strong>E-mail:</strong></td>
-		<td width="36%">laiku123@qq.com</td>
-	</tr>
-	<tr>
-		<td class="alignR"><strong>移动电话:</strong></td>
-		<td>&nbsp;</td>	
-		<td class="alignR"><strong>QQ/MSN:</strong></td>
-		<td>1148790170&nbsp;</td>
-	</tr>
-	<tr>
-		<td class="alignR"><strong>邮政编码:</strong></td>
-		<td>519100&nbsp;</td>
-		<td class="alignR"><strong>个人主页:</strong></td>
-		<td>&nbsp;</td>		
-	</tr>
-	<tr>
-		<td class="alignR"><strong>通讯地址:</strong></td>
-		<td colspan="3">珠海市斗门区白藤湖旅游城&nbsp;</td>		
-	</tr>
-</table>
-</div>
-
-</div>
-
-</td></tr></table>,
-
-
-</div>
-</body>
-</html>

BIN
upload/swfupload/1473672489.jpg