Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhangyin 8 years ago
parent
commit
d1292a9dff
72 changed files with 4990 additions and 3137 deletions
  1. 7 7
      lib/global.js
  2. BIN
      lib/jquery-contextmenu/font/context-menu-icons.eot
  3. BIN
      lib/jquery-contextmenu/font/context-menu-icons.ttf
  4. BIN
      lib/jquery-contextmenu/font/context-menu-icons.woff
  5. BIN
      lib/jquery-contextmenu/font/context-menu-icons.woff2
  6. 287 0
      lib/jquery-contextmenu/jquery.contextMenu.css
  7. 2051 0
      lib/jquery-contextmenu/jquery.contextMenu.js
  8. 16 0
      lib/jquery-contextmenu/jquery.contextMenu.min.css
  9. 1 0
      lib/jquery-contextmenu/jquery.contextMenu.min.css.map
  10. 2 0
      lib/jquery-contextmenu/jquery.contextMenu.min.js
  11. 1 0
      lib/jquery-contextmenu/jquery.contextMenu.min.js.map
  12. 513 0
      lib/jquery-contextmenu/jquery.ui.position.js
  13. 6 0
      lib/jquery-contextmenu/jquery.ui.position.min.js
  14. 2 2
      modules/fees/controllers/fees_controller.js
  15. 0 0
      modules/fee_rates/models/fee_rates.js
  16. 19 0
      modules/fee_rates/routes/fee_rates_route.js
  17. 0 19
      modules/fees/routes/fees_router.js
  18. 1 1
      modules/pm/controllers/copy_proj_controller.js
  19. 0 42
      modules/rationLibEditor/controller/RItemsController.js
  20. 0 72
      modules/rationLibEditor/controller/RLibMapController.js
  21. 0 53
      modules/rationLibEditor/controller/RtreeController.js
  22. 0 47
      modules/rationLibEditor/controller/gljListController.js
  23. 0 135
      modules/rationLibEditor/db/Schemas.js
  24. 0 569
      modules/rationLibEditor/db/interfaces.js
  25. 0 80
      modules/rationLibEditor/models/gljList.js
  26. 0 78
      modules/rationLibEditor/models/rationItems.js
  27. 0 92
      modules/rationLibEditor/models/rationLibMap.js
  28. 0 67
      modules/rationLibEditor/models/rationTree.js
  29. 0 71
      modules/rationLibEditor/routes/rationLibEditor_route.js
  30. 23 0
      modules/rationRepository/controllers/coe_controller.js
  31. 9 0
      modules/rationRepository/controllers/rationRepositoryController.js
  32. 2 2
      modules/rationRepository/controllers/repositoryGljController.js
  33. 107 0
      modules/rationRepository/models/coe.js
  34. 0 45
      modules/rationRepository/models/coeList.js
  35. 6 12
      modules/rationRepository/models/gljRepository.js
  36. 12 2
      modules/rationRepository/models/repositoryMap.js
  37. 5 0
      modules/rationRepository/routes/rationRepRoutes.js
  38. 0 0
      modules/std_fee_rate_libs/models/std_fee_rate_libs.js
  39. 1 1
      modules/users/controllers/users_controller.js
  40. 0 10
      modules/users/models/umDB.js
  41. 0 0
      modules/users/models/users.js
  42. 2 1
      public/counter/counter.js
  43. 28 0
      public/debug.js
  44. 0 0
      public/web/QueryParam.js
  45. 0 0
      public/web/dateUtil.js
  46. 68 0
      public/web/sheet.js
  47. 130 0
      public/web/sheet_contextmenu.js
  48. 0 0
      public/web/storageUtil.js
  49. 3 0
      public/web/tree_sheet_helper.js
  50. 13 4
      server.js
  51. 28 27
      test/tmp_data/bills_grid_setting.js
  52. 1 1
      web/fees/feeRate.html
  53. 4 4
      web/fees/feeRate.js
  54. 59 3
      web/main/html/main.html
  55. 2 1
      web/main/js/models/bills.js
  56. 290 223
      web/main/js/views/std_bills_lib.js
  57. 161 144
      web/main/js/views/std_ration_lib.js
  58. 0 928
      web/rationLibEditor/dinge.html
  59. 0 338
      web/rationLibEditor/fuzhu.html
  60. 566 0
      web/rationRepository/dinge.html
  61. 261 0
      web/rationRepository/fuzhu.html
  62. 18 18
      web/rationLibEditor/gongliao.html
  63. 2 1
      web/rationLibEditor/js/chapterTree.js
  64. 161 0
      web/rationRepository/js/coe.js
  65. 16 11
      web/rationLibEditor/js/mainJ.js
  66. 18 9
      web/rationLibEditor/js/ration.js
  67. 0 0
      web/rationRepository/js/rationGLJ.js
  68. 30 14
      web/rationLibEditor/js/repositoryGLJ.js
  69. 1 1
      web/rationLibEditor/js/sheetCommon.js
  70. 0 0
      web/rationRepository/js/zTreeCommon.js
  71. 3 2
      web/rationLibEditor/main.html
  72. 54 0
      web/scripts/sheetDataHelper.js

+ 7 - 7
lib/global.js

@@ -1,16 +1,16 @@
 /*全局自适应高度*/
 function autoFlashHeight(){
     var headerHeight = $(".header").height();
-    var toolsbarHeight = $(".toolsbar").height();
     var bottomContentHeight = $(".bottom-content").height();
-    var sidebarToolsBarHeight = $(".sidebar-tools-bar").height();
-    $(".main-data-side-f").height($(window).height()-headerHeight-toolsbarHeight-2);
-    $(".main-data-side-s").height($(window).height()-headerHeight-toolsbarHeight-sidebarToolsBarHeight-202);
-    $(".main-data-top").height($(window).height()-headerHeight-toolsbarHeight-bottomContentHeight-1);
-    $(".main-data-full").height($(window).height()-headerHeight-toolsbarHeight-1);
+    var toolsBar = $(".tools-bar").height();
+    $(".content").height($(window).height()-headerHeight);
+    $(".main-side").height($(window).height()-headerHeight-2);
+    $(".fluid-content").height($(window).height()-headerHeight-1);
     $(".side-content").height($(window).height()-headerHeight );
-    $(".poj-list").height($(window).height()-headerHeight-toolsbarHeight);
+    $(".poj-list").height($(window).height()-headerHeight);
     $(".form-list").height($(window).height()-headerHeight-50 );
+    $(".main-data-top").height($(window).height()-headerHeight-toolsBar-bottomContentHeight-2);
+    $(".main-data").height($(window).height()-headerHeight);
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/

BIN
lib/jquery-contextmenu/font/context-menu-icons.eot


BIN
lib/jquery-contextmenu/font/context-menu-icons.ttf


BIN
lib/jquery-contextmenu/font/context-menu-icons.woff


BIN
lib/jquery-contextmenu/font/context-menu-icons.woff2


+ 287 - 0
lib/jquery-contextmenu/jquery.contextMenu.css

@@ -0,0 +1,287 @@
+@charset "UTF-8";
+/*!
+ * jQuery contextMenu - Plugin for simple contextMenu handling
+ *
+ * Version: v2.4.5
+ *
+ * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
+ * Web: http://swisnl.github.io/jQuery-contextMenu/
+ *
+ * Copyright (c) 2011-2017 SWIS BV and contributors
+ *
+ * Licensed under
+ *   MIT License http://www.opensource.org/licenses/mit-license
+ *
+ * Date: 2017-05-05T14:40:37.763Z
+ */
+@-webkit-keyframes cm-spin {
+  0% {
+    -webkit-transform: translateY(-50%) rotate(0deg);
+            transform: translateY(-50%) rotate(0deg);
+  }
+  100% {
+    -webkit-transform: translateY(-50%) rotate(359deg);
+            transform: translateY(-50%) rotate(359deg);
+  }
+}
+@-o-keyframes cm-spin {
+  0% {
+    -webkit-transform: translateY(-50%) rotate(0deg);
+         -o-transform: translateY(-50%) rotate(0deg);
+            transform: translateY(-50%) rotate(0deg);
+  }
+  100% {
+    -webkit-transform: translateY(-50%) rotate(359deg);
+         -o-transform: translateY(-50%) rotate(359deg);
+            transform: translateY(-50%) rotate(359deg);
+  }
+}
+@keyframes cm-spin {
+  0% {
+    -webkit-transform: translateY(-50%) rotate(0deg);
+         -o-transform: translateY(-50%) rotate(0deg);
+            transform: translateY(-50%) rotate(0deg);
+  }
+  100% {
+    -webkit-transform: translateY(-50%) rotate(359deg);
+         -o-transform: translateY(-50%) rotate(359deg);
+            transform: translateY(-50%) rotate(359deg);
+  }
+}
+
+@font-face {
+  font-family: "context-menu-icons";
+  font-style: normal; 
+  font-weight: normal;
+
+  src: url("font/context-menu-icons.eot?lnvb");
+  src: url("font/context-menu-icons.eot?lnvb#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?lnvb") format("woff2"), url("font/context-menu-icons.woff?lnvb") format("woff"), url("font/context-menu-icons.ttf?lnvb") format("truetype");
+}
+
+.context-menu-icon-add:before {
+  content: "\EA01";
+}
+
+.context-menu-icon-copy:before {
+  content: "\EA02";
+}
+
+.context-menu-icon-cut:before {
+  content: "\EA03";
+}
+
+.context-menu-icon-delete:before {
+  content: "\EA04";
+}
+
+.context-menu-icon-edit:before {
+  content: "\EA05";
+}
+
+.context-menu-icon-loading:before {
+  content: "\EA06";
+}
+
+.context-menu-icon-paste:before {
+  content: "\EA07";
+}
+
+.context-menu-icon-quit:before {
+  content: "\EA08";
+}
+
+.context-menu-icon::before {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  width: 2em; 
+  font-family: "context-menu-icons";
+  font-size: 1em;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  color: #2980b9;
+  text-align: center;
+  -webkit-transform: translateY(-50%);
+      -ms-transform: translateY(-50%);
+       -o-transform: translateY(-50%);
+          transform: translateY(-50%);
+
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.context-menu-icon.context-menu-hover:before {
+  color: #fff;
+}
+
+.context-menu-icon.context-menu-disabled::before {
+  color: #bbb;
+}
+
+.context-menu-icon.context-menu-icon-loading:before {
+  -webkit-animation: cm-spin 2s infinite;
+       -o-animation: cm-spin 2s infinite;
+          animation: cm-spin 2s infinite;
+}
+
+.context-menu-icon.context-menu-icon--fa {
+  display: list-item;
+  font-family: inherit;
+}
+.context-menu-icon.context-menu-icon--fa::before {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  width: 2em; 
+  font-family: FontAwesome;
+  font-size: 1em;
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  color: #2980b9;
+  text-align: center;
+  -webkit-transform: translateY(-50%);
+      -ms-transform: translateY(-50%);
+       -o-transform: translateY(-50%);
+          transform: translateY(-50%);
+
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.context-menu-icon.context-menu-icon--fa.context-menu-hover:before {
+  color: #fff;
+}
+.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before {
+  color: #bbb;
+}
+
+.context-menu-list {
+  position: absolute; 
+  display: inline-block;
+  min-width: 13em;
+  max-width: 26em;
+  padding: .25em 0;
+  margin: .3em;
+  font-family: inherit;
+  font-size: inherit;
+  list-style-type: none;
+  background: #fff;
+  border: 1px solid #bebebe;
+  border-radius: .2em;
+  -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
+          box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
+}
+
+.context-menu-item {
+  position: relative;
+  padding: .2em 2em;
+  color: #2f2f2f;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none; 
+  background-color: #fff;
+}
+
+.context-menu-separator {
+  padding: 0; 
+  margin: .35em 0;
+  border-bottom: 1px solid #e6e6e6;
+}
+
+.context-menu-item > label > input,
+.context-menu-item > label > textarea {
+  -webkit-user-select: text;
+     -moz-user-select: text;
+      -ms-user-select: text;
+          user-select: text;
+}
+
+.context-menu-item.context-menu-hover {
+  color: #fff;
+  cursor: pointer; 
+  background-color: #2980b9;
+}
+
+.context-menu-item.context-menu-disabled {
+  color: #bbb;
+  cursor: default; 
+  background-color: #fff;
+}
+
+.context-menu-input.context-menu-hover {
+  color: #2f2f2f; 
+  cursor: default;
+}
+
+.context-menu-submenu:after {
+  position: absolute;
+  top: 50%;
+  right: .5em;
+  z-index: 1; 
+  width: 0;
+  height: 0;
+  content: '';
+  border-color: transparent transparent transparent #2f2f2f;
+  border-style: solid;
+  border-width: .25em 0 .25em .25em;
+  -webkit-transform: translateY(-50%);
+      -ms-transform: translateY(-50%);
+       -o-transform: translateY(-50%);
+          transform: translateY(-50%);
+}
+
+/**
+ * Inputs
+ */
+.context-menu-item.context-menu-input {
+  padding: .3em .6em;
+}
+
+/* vertically align inside labels */
+.context-menu-input > label > * {
+  vertical-align: top;
+}
+
+/* position checkboxes and radios as icons */
+.context-menu-input > label > input[type="checkbox"],
+.context-menu-input > label > input[type="radio"] {
+  position: relative;
+  top: .12em; 
+  margin-right: .4em;
+}
+
+.context-menu-input > label {
+  margin: 0;
+}
+
+.context-menu-input > label,
+.context-menu-input > label > input[type="text"],
+.context-menu-input > label > textarea,
+.context-menu-input > label > select {
+  display: block;
+  width: 100%; 
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.context-menu-input > label > textarea {
+  height: 7em;
+}
+
+.context-menu-item > .context-menu-list {
+  top: .3em; 
+  /* re-positioned by js */
+  right: -.3em;
+  display: none;
+}
+
+.context-menu-item.context-menu-visible > .context-menu-list {
+  display: block;
+}
+
+.context-menu-accesskey {
+  text-decoration: underline;
+}

File diff suppressed because it is too large
+ 2051 - 0
lib/jquery-contextmenu/jquery.contextMenu.js


File diff suppressed because it is too large
+ 16 - 0
lib/jquery-contextmenu/jquery.contextMenu.min.css


File diff suppressed because it is too large
+ 1 - 0
lib/jquery-contextmenu/jquery.contextMenu.min.css.map


File diff suppressed because it is too large
+ 2 - 0
lib/jquery-contextmenu/jquery.contextMenu.min.js


File diff suppressed because it is too large
+ 1 - 0
lib/jquery-contextmenu/jquery.contextMenu.min.js.map


+ 513 - 0
lib/jquery-contextmenu/jquery.ui.position.js

@@ -0,0 +1,513 @@
+/*! jQuery UI - v1.12.1 - 2016-09-16
+ * http://jqueryui.com
+ * Includes: position.js
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+    if ( typeof define === "function" && define.amd ) {
+
+        // AMD. Register as an anonymous module.
+        define([ "jquery" ], factory );
+    } else {
+
+        // Browser globals
+        factory( jQuery );
+    }
+}(function( $ ) {
+
+    $.ui = $.ui || {};
+
+    var version = $.ui.version = "1.12.1";
+
+
+    /*!
+     * jQuery UI Position 1.12.1
+     * http://jqueryui.com
+     *
+     * Copyright jQuery Foundation and other contributors
+     * Released under the MIT license.
+     * http://jquery.org/license
+     *
+     * http://api.jqueryui.com/position/
+     */
+
+//>>label: Position
+//>>group: Core
+//>>description: Positions elements relative to other elements.
+//>>docs: http://api.jqueryui.com/position/
+//>>demos: http://jqueryui.com/position/
+
+
+    ( function() {
+        var cachedScrollbarWidth,
+            max = Math.max,
+            abs = Math.abs,
+            rhorizontal = /left|center|right/,
+            rvertical = /top|center|bottom/,
+            roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+            rposition = /^\w+/,
+            rpercent = /%$/,
+            _position = $.fn.position;
+
+        function getOffsets( offsets, width, height ) {
+            return [
+                parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+                parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+            ];
+        }
+
+        function parseCss( element, property ) {
+            return parseInt( $.css( element, property ), 10 ) || 0;
+        }
+
+        function getDimensions( elem ) {
+            var raw = elem[ 0 ];
+            if ( raw.nodeType === 9 ) {
+                return {
+                    width: elem.width(),
+                    height: elem.height(),
+                    offset: { top: 0, left: 0 }
+                };
+            }
+            if ( $.isWindow( raw ) ) {
+                return {
+                    width: elem.width(),
+                    height: elem.height(),
+                    offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+                };
+            }
+            if ( raw.preventDefault ) {
+                return {
+                    width: 0,
+                    height: 0,
+                    offset: { top: raw.pageY, left: raw.pageX }
+                };
+            }
+            return {
+                width: elem.outerWidth(),
+                height: elem.outerHeight(),
+                offset: elem.offset()
+            };
+        }
+
+        $.position = {
+            scrollbarWidth: function() {
+                if ( cachedScrollbarWidth !== undefined ) {
+                    return cachedScrollbarWidth;
+                }
+                var w1, w2,
+                    div = $( "<div " +
+                        "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
+                        "<div style='height:100px;width:auto;'></div></div>" ),
+                    innerDiv = div.children()[ 0 ];
+
+                $( "body" ).append( div );
+                w1 = innerDiv.offsetWidth;
+                div.css( "overflow", "scroll" );
+
+                w2 = innerDiv.offsetWidth;
+
+                if ( w1 === w2 ) {
+                    w2 = div[ 0 ].clientWidth;
+                }
+
+                div.remove();
+
+                return ( cachedScrollbarWidth = w1 - w2 );
+            },
+            getScrollInfo: function( within ) {
+                var overflowX = within.isWindow || within.isDocument ? "" :
+                        within.element.css( "overflow-x" ),
+                    overflowY = within.isWindow || within.isDocument ? "" :
+                        within.element.css( "overflow-y" ),
+                    hasOverflowX = overflowX === "scroll" ||
+                        ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
+                    hasOverflowY = overflowY === "scroll" ||
+                        ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
+                return {
+                    width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+                    height: hasOverflowX ? $.position.scrollbarWidth() : 0
+                };
+            },
+            getWithinInfo: function( element ) {
+                var withinElement = $( element || window ),
+                    isWindow = $.isWindow( withinElement[ 0 ] ),
+                    isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
+                    hasOffset = !isWindow && !isDocument;
+                return {
+                    element: withinElement,
+                    isWindow: isWindow,
+                    isDocument: isDocument,
+                    offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
+                    scrollLeft: withinElement.scrollLeft(),
+                    scrollTop: withinElement.scrollTop(),
+                    width: withinElement.outerWidth(),
+                    height: withinElement.outerHeight()
+                };
+            }
+        };
+
+        $.fn.position = function( options ) {
+            if ( !options || !options.of ) {
+                return _position.apply( this, arguments );
+            }
+
+            // Make a copy, we don't want to modify arguments
+            options = $.extend( {}, options );
+
+            var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+                target = $( options.of ),
+                within = $.position.getWithinInfo( options.within ),
+                scrollInfo = $.position.getScrollInfo( within ),
+                collision = ( options.collision || "flip" ).split( " " ),
+                offsets = {};
+
+            dimensions = getDimensions( target );
+            if ( target[ 0 ].preventDefault ) {
+
+                // Force left top to allow flipping
+                options.at = "left top";
+            }
+            targetWidth = dimensions.width;
+            targetHeight = dimensions.height;
+            targetOffset = dimensions.offset;
+
+            // Clone to reuse original targetOffset later
+            basePosition = $.extend( {}, targetOffset );
+
+            // Force my and at to have valid horizontal and vertical positions
+            // if a value is missing or invalid, it will be converted to center
+            $.each( [ "my", "at" ], function() {
+                var pos = ( options[ this ] || "" ).split( " " ),
+                    horizontalOffset,
+                    verticalOffset;
+
+                if ( pos.length === 1 ) {
+                    pos = rhorizontal.test( pos[ 0 ] ) ?
+                        pos.concat( [ "center" ] ) :
+                        rvertical.test( pos[ 0 ] ) ?
+                            [ "center" ].concat( pos ) :
+                            [ "center", "center" ];
+                }
+                pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+                pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+                // Calculate offsets
+                horizontalOffset = roffset.exec( pos[ 0 ] );
+                verticalOffset = roffset.exec( pos[ 1 ] );
+                offsets[ this ] = [
+                    horizontalOffset ? horizontalOffset[ 0 ] : 0,
+                    verticalOffset ? verticalOffset[ 0 ] : 0
+                ];
+
+                // Reduce to just the positions without the offsets
+                options[ this ] = [
+                    rposition.exec( pos[ 0 ] )[ 0 ],
+                    rposition.exec( pos[ 1 ] )[ 0 ]
+                ];
+            } );
+
+            // Normalize collision option
+            if ( collision.length === 1 ) {
+                collision[ 1 ] = collision[ 0 ];
+            }
+
+            if ( options.at[ 0 ] === "right" ) {
+                basePosition.left += targetWidth;
+            } else if ( options.at[ 0 ] === "center" ) {
+                basePosition.left += targetWidth / 2;
+            }
+
+            if ( options.at[ 1 ] === "bottom" ) {
+                basePosition.top += targetHeight;
+            } else if ( options.at[ 1 ] === "center" ) {
+                basePosition.top += targetHeight / 2;
+            }
+
+            atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+            basePosition.left += atOffset[ 0 ];
+            basePosition.top += atOffset[ 1 ];
+
+            return this.each( function() {
+                var collisionPosition, using,
+                    elem = $( this ),
+                    elemWidth = elem.outerWidth(),
+                    elemHeight = elem.outerHeight(),
+                    marginLeft = parseCss( this, "marginLeft" ),
+                    marginTop = parseCss( this, "marginTop" ),
+                    collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
+                        scrollInfo.width,
+                    collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
+                        scrollInfo.height,
+                    position = $.extend( {}, basePosition ),
+                    myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+                if ( options.my[ 0 ] === "right" ) {
+                    position.left -= elemWidth;
+                } else if ( options.my[ 0 ] === "center" ) {
+                    position.left -= elemWidth / 2;
+                }
+
+                if ( options.my[ 1 ] === "bottom" ) {
+                    position.top -= elemHeight;
+                } else if ( options.my[ 1 ] === "center" ) {
+                    position.top -= elemHeight / 2;
+                }
+
+                position.left += myOffset[ 0 ];
+                position.top += myOffset[ 1 ];
+
+                collisionPosition = {
+                    marginLeft: marginLeft,
+                    marginTop: marginTop
+                };
+
+                $.each( [ "left", "top" ], function( i, dir ) {
+                    if ( $.ui.position[ collision[ i ] ] ) {
+                        $.ui.position[ collision[ i ] ][ dir ]( position, {
+                            targetWidth: targetWidth,
+                            targetHeight: targetHeight,
+                            elemWidth: elemWidth,
+                            elemHeight: elemHeight,
+                            collisionPosition: collisionPosition,
+                            collisionWidth: collisionWidth,
+                            collisionHeight: collisionHeight,
+                            offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+                            my: options.my,
+                            at: options.at,
+                            within: within,
+                            elem: elem
+                        } );
+                    }
+                } );
+
+                if ( options.using ) {
+
+                    // Adds feedback as second argument to using callback, if present
+                    using = function( props ) {
+                        var left = targetOffset.left - position.left,
+                            right = left + targetWidth - elemWidth,
+                            top = targetOffset.top - position.top,
+                            bottom = top + targetHeight - elemHeight,
+                            feedback = {
+                                target: {
+                                    element: target,
+                                    left: targetOffset.left,
+                                    top: targetOffset.top,
+                                    width: targetWidth,
+                                    height: targetHeight
+                                },
+                                element: {
+                                    element: elem,
+                                    left: position.left,
+                                    top: position.top,
+                                    width: elemWidth,
+                                    height: elemHeight
+                                },
+                                horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+                                vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+                            };
+                        if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+                            feedback.horizontal = "center";
+                        }
+                        if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+                            feedback.vertical = "middle";
+                        }
+                        if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+                            feedback.important = "horizontal";
+                        } else {
+                            feedback.important = "vertical";
+                        }
+                        options.using.call( this, props, feedback );
+                    };
+                }
+
+                elem.offset( $.extend( position, { using: using } ) );
+            } );
+        };
+
+        $.ui.position = {
+            fit: {
+                left: function( position, data ) {
+                    var within = data.within,
+                        withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+                        outerWidth = within.width,
+                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                        overLeft = withinOffset - collisionPosLeft,
+                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+                        newOverRight;
+
+                    // Element is wider than within
+                    if ( data.collisionWidth > outerWidth ) {
+
+                        // Element is initially over the left side of within
+                        if ( overLeft > 0 && overRight <= 0 ) {
+                            newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
+                                withinOffset;
+                            position.left += overLeft - newOverRight;
+
+                            // Element is initially over right side of within
+                        } else if ( overRight > 0 && overLeft <= 0 ) {
+                            position.left = withinOffset;
+
+                            // Element is initially over both left and right sides of within
+                        } else {
+                            if ( overLeft > overRight ) {
+                                position.left = withinOffset + outerWidth - data.collisionWidth;
+                            } else {
+                                position.left = withinOffset;
+                            }
+                        }
+
+                        // Too far left -> align with left edge
+                    } else if ( overLeft > 0 ) {
+                        position.left += overLeft;
+
+                        // Too far right -> align with right edge
+                    } else if ( overRight > 0 ) {
+                        position.left -= overRight;
+
+                        // Adjust based on position and margin
+                    } else {
+                        position.left = max( position.left - collisionPosLeft, position.left );
+                    }
+                },
+                top: function( position, data ) {
+                    var within = data.within,
+                        withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+                        outerHeight = data.within.height,
+                        collisionPosTop = position.top - data.collisionPosition.marginTop,
+                        overTop = withinOffset - collisionPosTop,
+                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+                        newOverBottom;
+
+                    // Element is taller than within
+                    if ( data.collisionHeight > outerHeight ) {
+
+                        // Element is initially over the top of within
+                        if ( overTop > 0 && overBottom <= 0 ) {
+                            newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
+                                withinOffset;
+                            position.top += overTop - newOverBottom;
+
+                            // Element is initially over bottom of within
+                        } else if ( overBottom > 0 && overTop <= 0 ) {
+                            position.top = withinOffset;
+
+                            // Element is initially over both top and bottom of within
+                        } else {
+                            if ( overTop > overBottom ) {
+                                position.top = withinOffset + outerHeight - data.collisionHeight;
+                            } else {
+                                position.top = withinOffset;
+                            }
+                        }
+
+                        // Too far up -> align with top
+                    } else if ( overTop > 0 ) {
+                        position.top += overTop;
+
+                        // Too far down -> align with bottom edge
+                    } else if ( overBottom > 0 ) {
+                        position.top -= overBottom;
+
+                        // Adjust based on position and margin
+                    } else {
+                        position.top = max( position.top - collisionPosTop, position.top );
+                    }
+                }
+            },
+            flip: {
+                left: function( position, data ) {
+                    var within = data.within,
+                        withinOffset = within.offset.left + within.scrollLeft,
+                        outerWidth = within.width,
+                        offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+                        overLeft = collisionPosLeft - offsetLeft,
+                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+                        myOffset = data.my[ 0 ] === "left" ?
+                            -data.elemWidth :
+                            data.my[ 0 ] === "right" ?
+                                data.elemWidth :
+                                0,
+                        atOffset = data.at[ 0 ] === "left" ?
+                            data.targetWidth :
+                            data.at[ 0 ] === "right" ?
+                                -data.targetWidth :
+                                0,
+                        offset = -2 * data.offset[ 0 ],
+                        newOverRight,
+                        newOverLeft;
+
+                    if ( overLeft < 0 ) {
+                        newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
+                            outerWidth - withinOffset;
+                        if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+                            position.left += myOffset + atOffset + offset;
+                        }
+                    } else if ( overRight > 0 ) {
+                        newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
+                            atOffset + offset - offsetLeft;
+                        if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+                            position.left += myOffset + atOffset + offset;
+                        }
+                    }
+                },
+                top: function( position, data ) {
+                    var within = data.within,
+                        withinOffset = within.offset.top + within.scrollTop,
+                        outerHeight = within.height,
+                        offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+                        collisionPosTop = position.top - data.collisionPosition.marginTop,
+                        overTop = collisionPosTop - offsetTop,
+                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+                        top = data.my[ 1 ] === "top",
+                        myOffset = top ?
+                            -data.elemHeight :
+                            data.my[ 1 ] === "bottom" ?
+                                data.elemHeight :
+                                0,
+                        atOffset = data.at[ 1 ] === "top" ?
+                            data.targetHeight :
+                            data.at[ 1 ] === "bottom" ?
+                                -data.targetHeight :
+                                0,
+                        offset = -2 * data.offset[ 1 ],
+                        newOverTop,
+                        newOverBottom;
+                    if ( overTop < 0 ) {
+                        newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
+                            outerHeight - withinOffset;
+                        if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+                            position.top += myOffset + atOffset + offset;
+                        }
+                    } else if ( overBottom > 0 ) {
+                        newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
+                            offset - offsetTop;
+                        if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+                            position.top += myOffset + atOffset + offset;
+                        }
+                    }
+                }
+            },
+            flipfit: {
+                left: function() {
+                    $.ui.position.flip.left.apply( this, arguments );
+                    $.ui.position.fit.left.apply( this, arguments );
+                },
+                top: function() {
+                    $.ui.position.flip.top.apply( this, arguments );
+                    $.ui.position.fit.top.apply( this, arguments );
+                }
+            }
+        };
+
+    } )();
+
+    var position = $.ui.position;
+
+
+
+
+}));

File diff suppressed because it is too large
+ 6 - 0
lib/jquery-contextmenu/jquery.ui.position.min.js


+ 2 - 2
modules/fees/controllers/fees_controller.js

@@ -2,8 +2,8 @@
  * Created by CSL on 2017-03-23.
  */
 
-var stdFeeRateLibs = require('../../feeLibs/models/feeLibs_db');
-var projectFeeRateFile = require('../models/fees_db');
+var stdFeeRateLibs = require('../../std_fee_rate_libs/models/std_fee_rate_libs');
+var projectFeeRateFile = require('../models/fee_rates');
 
 module.exports = {
     libNames: function (req, res) {

modules/fees/models/fees_db.js → modules/fee_rates/models/fee_rates.js


+ 19 - 0
modules/fee_rates/routes/fee_rates_route.js

@@ -0,0 +1,19 @@
+/**
+ * Created by CSL on 2017-03-22.
+ */
+
+var express = require('express');
+var frRouter = express.Router();
+var frController = require('../controllers/fee_rates_controller');
+
+frRouter.get('/', function(req, res) {
+    res.render('fee_rates/fee_rate', {});
+});
+
+frRouter.post('/getLibNames', frController.libNames);
+frRouter.post('/getLibFeeRates', frController.libFeeRates);
+frRouter.post('/getProjectFeeRates', frController.projectFeeRates);
+frRouter.post('/updateProjectFeeRate', frController.projectFeeUpdateRate);
+
+
+module.exports = frRouter;

+ 0 - 19
modules/fees/routes/fees_router.js

@@ -1,19 +0,0 @@
-/**
- * Created by CSL on 2017-03-22.
- */
-
-var express = require('express');
-var feesRouter = express.Router();
-var feesController = require('../controllers/fees_controller');
-
-feesRouter.get('/', function(req, res) {
-    res.render('fees/feeRate', {});
-});
-
-feesRouter.post('/getLibNames', feesController.libNames);
-feesRouter.post('/getLibFeeRates', feesController.libFeeRates);
-feesRouter.post('/getProjectFeeRates', feesController.projectFeeRates);
-feesRouter.post('/updateProjectFeeRate', feesController.projectFeeUpdateRate);
-
-
-module.exports = feesRouter;

+ 1 - 1
modules/pm/controllers/copy_proj_controller.js

@@ -13,7 +13,7 @@ module.exports = {
                 datas.push(result._doc);
             });
             return billsData.AddBillsFromTemplate(datas, callback);
-        }).then(function (err) {
+        }).catch(function (err) {
             callback(err);
         });
     }

+ 0 - 42
modules/rationLibEditor/controller/RItemsController.js

@@ -1,42 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/20.
- */
-var rationItemsData = require('../models/rationItems');
-var callback = function(req,res,err,data){
-    if(data){
-        res.status(200)
-        res.json({success:true,data:data});
-    }
-    else
-    if(err){
-        res.status(500)
-        res.json({success:false,error:err});
-    }
-    else{
-        res.status(204);
-        res.json({success:true,data:null});
-    }
-}
-module.exports = {
-    insertRation:
-        function(req,res){
-            var libName = req.body.rationLibName;
-            var value = JSON.parse(req.body.value)
-            rationItemsData.insertRation(libName,value,function(err,data){
-                callback(req,res,err,data);
-            })
-        },
-    updateRation:
-        function(req,res){
-            var libName = req.body.rationLibName;
-            var value = JSON.parse(req.body.value)
-           // var code = req.body.code;
-            var data = JSON.parse(req.body.data);
-            rationItemsData.updateRation(libName,value,data,function(err,data){
-                callback(req,res,err,data);
-            })
-        }
-
-}
-
-

+ 0 - 72
modules/rationLibEditor/controller/RLibMapController.js

@@ -1,72 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/20.
- */
-var rationLibData = require('../models/rationLibMap');
-var callback = function(req,res,err,data){
-    if(data){
-        res.status(200)
-        res.json({success:true,data:data});
-    }
-    else
-    if(err){
-        res.status(500)
-        res.json({success:false,error:err});
-    }
-    else{
-        res.status(204);
-        res.json({success:true});
-    }
-}
-
-module.exports ={
-    addRationLib:function(req,res){
-        var libName = req.body.rationDisPlayName;
-        rationLibData.addRationLib(libName,function(err,data){
-            if (data) {
-                callback(req, res, err, data);
-            } else {
-                callback(req, res, err, null);
-            }
-        })
-    },
-    getRealLibName:function(req,res){
-        var libName = req.body.rationName;
-        rationLibData.getRealLibName(libName,function(err,data){
-            if (data) {
-                callback(req, res, err, data);
-            } else {
-                callback(req, res, err, null);
-            }
-        })
-    },
-    getDisPlayRationLibs: function(req, res){
-        rationLibData.getDisplayRationLibs(function(err, data){
-            if (data) {
-                callback(req, res, err, data);
-            } else {
-                callback(req, res, err, null);
-            }
-        });
-    },
-    deleteRationLib:function(req,res){
-        var rationName = req.body.rationName;
-        rationLibData.deleteRationLib(rationName,function(err,data){
-            if (data) {
-                callback(req, res, err, data);
-            } else {
-                callback(req, res, err,  null);
-            }
-        })
-    },
-    editRationLibs:function(req,res){
-        var rationName = req.body.rationName;
-        var newName = req.body.newName;
-        rationLibData.editRationLib(rationName,newName,function(err,data){
-            if (data) {
-                callback(req, res, err, data);
-            } else {
-                callback(req, res, err,  null);
-            }
-        })
-    }
-}

+ 0 - 53
modules/rationLibEditor/controller/RtreeController.js

@@ -1,53 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/21.
- */
-var rationTreeData = require('../models/rationTree');
-var callback = function(req,res,err,data){
-    if(data){
-        res.status(200)
-        res.json({success:true,data:data});
-    }
-    else
-    if(err){
-        res.status(500)
-        res.json({success:false,error:err});
-    }
-    else{
-        res.status(204);
-        res.json({success:true,data:null});
-    }
-}
-module.exports ={
-    getRationTree:
-        function(req,res){
-             var libName = req.body.rationLibName;
-             rationTreeData.getRationTrees(libName,function(err,data){
-                callback(req,res,err,data)
-             })
-        },
-    tempRationTreeInsert:
-        function(req,res){
-            var DBName = req.body.rationName;
-            var rationTempTree = JSON.parse(req.body.rationTempTree);
-            rationTreeData.tempRationTreeInsert(DBName,rationTempTree,function(err,data){
-                callback(req,res,err,data)
-            })
-        },
-    sectionUpsert:
-        function(req,res){
-            var LibName = req.body.rationLibName;
-            var section = JSON.parse(req.body.rationSection);
-            rationTreeData.sectionUpsert(LibName,section,function(err,data){
-                callback(req,res,err,data)
-            })
-        },
-    deleteSection:
-        function(req,res){
-            var LibName = req.body.rationLibName;
-            var sectionID = req.body.sectionID;
-            rationTreeData.deleteSection(LibName,sectionID,function(err,data){
-                callback(req,res,err,data)
-            })
-        }
-
-}

+ 0 - 47
modules/rationLibEditor/controller/gljListController.js

@@ -1,47 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/23.
- */
-var gljListData = require('../models/gljList');
-var callback = function(req,res,err,data){
-    if(data){
-        res.status(200)
-        res.json({success:true,data:data});
-    }
-    else
-    if(err){
-        res.status(500)
-        res.json({success:false,error:err});
-    }
-    else{
-        res.status(204);
-        res.json({success:true,data:null});
-    }
-}
-
-module.exports = {
-    insertGLJList:
-        function(req,res){
-            var libName = req.body.rationLibName;
-            var value = JSON.parse(req.body.value);
-            gljListData.insertGLJList(libName,value,function(err,data){
-                callback(req,res,err,data);
-            })
-        },
-    updateGLJList:
-        function(req,res){
-            var libName = req.body.rationLibName;
-            var value = JSON.parse(req.body.value)
-            var data = JSON.parse(req.body.data);
-            gljListData.updateGLJList(libName,value,data,function(err,data){
-                callback(req,res,err,data);
-            })
-        },
-    removeGLJList:
-        function(req,res){
-            var libName = req.body.rationLibName;
-            var value = JSON.parse(req.body.value)
-            gljListData.removeGLJList(libName,value,function(err,data){
-                callback(req,res,err,data);
-            })
-        }
-}

+ 0 - 135
modules/rationLibEditor/db/Schemas.js

@@ -1,135 +0,0 @@
-var mongoose = require("mongoose");
-
-var RationLibMapSchema = mongoose.Schema({
-    DisplayName:String,
-    DBName:String
-
-})
-
-var connectMap = function(callBack){
-    var db = mongoose.createConnection("192.168.1.184","rationLibMap",60666);
-    callBack(db);
-}
-
-
-var MainContentSchema = mongoose.Schema({
-    ContentItems:String,//总说明
-    CalcRule:String//计算规则
-})
-
-
-var RationTreeSchema = mongoose.Schema({//章节树  //生成唯一id改为sectionid  改成string
-    SectionID:Number,
-    ParentID:Number,
-    NextSiblingID:Number,
-    Name:String
-});
-
-
-var SectionTextSchema = mongoose.Schema({//说明及计算规则
-    SectionID:Number,
-    ContentID:Number,
-    Type:Number,
-    Content:[],
-    Interpretation:String,
-    CalcRule:String
-})
-
-
-var RationItemsSchema = mongoose.Schema({//只记载定额基本元素,并未和工料机挂钩
-    RationCode:String,
-    RationName:String,
-    Unit:String,
-    BasePrice:Number,
-    SectionID:Number,
-    ContentID:Number,
-    Caption:String,//显示内容
-    FeeType:Number //取费类别,这条定额对应怎样的费率参与计算,在键定额库的时候手动输入
-});
-
-
-
-var GLJListSchema = mongoose.Schema({
-    GLJCode:String,
-    GLJName:String,
-    Specs:String,//规格,钢筋粗细,光圆
-    Unit:String,//单位
-    BasePrice:Number,
-    Type:Number //工料机类型,便于分类
-});
-
-
-var RationGLJSchema = mongoose.Schema({//定额下的工料机
-    RationCode:String,
-    GLJCode:String,
-    Amount:Number,//消耗量
-    Type:Number//工料机的类型
-});
-
-
-var GLJTypeTreeSchema = mongoose.Schema({//工料机类型树,用于分类工料机
-    ID:Number,
-    ParentID:Number,
-    NextSiblingID:Number,
-    Name:String
-});
-
-
-var MinorRationSchema = mongoose.Schema({
-    MainCode:String,
-    MinorIndex:Number,//辅助定额之间的排序
-    MinorParam:Number,//参数  和自动选择相应辅助定额有关
-    MinorName:String,//调整名称
-    ParamName:String,//参数名称
-    MinorCode:String,//辅助定额编码
-    StdValue:Number,//主定额的临界值
-    Step:Number,//辅助定额调整步距
-    RoundDigit:Number,//不足时百分比小数保留位数
-    RoundMode:Number//进位模式
-});
-
-
-var CoeListSchema = mongoose.Schema({//附注列表,定额的变体,比如没有挖芦苇根这个定额,则利用挖树根定额的工料机做相应调整变为挖芦苇根
-    CoeID:Number,
-    CoeName:String,
-    Param:Number,//工料机总的乘以系数
-    Type:String,//系数类型+ *
-    G:Number,//单行人工系数
-    L:Number,
-    J:Number,
-    Content:String,//调整内容
-    MutexCoeID:Number,//互斥乘系数项ID
-    GLJArray:[{   //除了可以整体调整工料机,还可以调整特定工料机的分项  GLJArray是分项的数组
-        GLJ:Number,//工料机号
-        Count:Number,//调整数量
-        type:String//系数类型
-    }]
-});
-
-
-var RationCoeSchema = mongoose.Schema({//定额与其附注关系
-    ID:Number,
-    SectionCode:Number,//附注可用于相关节点下所有的定额
-    RationCode:String,
-    CoeID:Number,
-    Order:Number//排序
-});
-
-
-var Schemas = {
-    "connectMap":connectMap,
-    //"connectDB": connectDB,
-    "MainContentSchema":MainContentSchema,
-    "RationTreeSchema":RationTreeSchema,
-    "SectionTextSchema":SectionTextSchema,
-    "RationItemsSchema":RationItemsSchema,
-    "GLJListSchema":GLJListSchema,
-    "RationGLJSchema":RationGLJSchema,
-    "GLJTypeTreeSchema":GLJTypeTreeSchema,
-    "MinorRationSchema":MinorRationSchema,
-    "CoeListSchema":CoeListSchema,
-    "RationCoeSchema":RationCoeSchema,
-     "RationLibMapSchema": RationLibMapSchema
-}
-
-module.exports = Schemas;

+ 0 - 569
modules/rationLibEditor/db/interfaces.js

@@ -1,569 +0,0 @@
-var mongoose = require("mongoose");
-var Schemas = require("./Schemas");
-
-
-var callback = function(req,res,err,data){
-    if(data){
-        res.status(200)
-        res.json({success:true,data:data});
-    }
-    else
-    if(err){
-        res.status(500)
-        res.json({success:false,error:err});
-    }
-    else{
-        res.status(204);
-        res.json({success:true});
-    }
-}
-
-var inserts = {};
-var searchs = {};
-var updates = {}
-var removes = {}
-/*inserts.RationLibInsert = function(req,res){
-    var str = req.body.rationDisPlayName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-       var lib = new LibMapModel({"DisplayName":str, "DBName":str}).save(function(err){
-           if(err) callback(req,res,err,false)
-           else
-           callback(req,res,false," ");
-       })
-    })
-}*/
-inserts.MainContentInsert = function(){};
-/*inserts.RationSectionInsert = function(req,res){//find and updata;
-    var DBName = req.body.rationName;
-    var rationSection = JSON.parse(req.body.rationSection);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                var RationTreeModel = db.model("rationtrees", Schemas.RationTreeSchema);
-                RationTreeModel.find({"SectionID":rationSection.SectionID},function(err,data){
-                    if(data.length){
-                        RationTreeModel.update({'SectionID':rationSection.SectionID},rationSection,function(err,data){
-                            if(err){
-                                callback(req,res,"some error occured when save RationTempTree!",false);
-                            }else
-                                callback(req,res,false,"save RationTempTree success!");
-                        });
-
-                    }else{
-                        var N = new RationTreeModel(rationSection).save(function(err){
-                            if(err){
-                                callback(req,res,"some error occured when save RationTempTree!",false);
-                            }else
-                                callback(req,res,false,"save RationTempTree success!");
-                        })
-                    }
-                })
-            }
-        })
-    })
-};*/
-inserts.SectionTextInsert = function(req,res){};
-inserts.RationItemsInsert = function(req,res){
-    var DBName = req.body.rationName;
-    var rationItem = JSON.parse(req.body.rationItem);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("rationitems",Schemas.RationItemsSchema);
-                //加控制语句
-                GLJListModel.find({"RationCode":rationItem.RationCode},function(err,data){
-                    if(data.length)
-                        callback(req,res,"定额号重复!",false)
-                    else
-                    new GLJListModel(rationItem).save(function(err){
-                        if(err){
-                            callback(req,res,"",false);
-                        }else{
-                            callback(req,res,false,"");
-                        }
-                    })
-                })
-
-
-            }
-        })
-    })
-};
-inserts.RationContentInsert = function(){};
-inserts.GLJListInsert = function(req,res){
-    var DBName = req.body.rationName;
-    var glj = JSON.parse(req.body.gljItem);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
-                GLJListModel.find({"GLJCode":glj.GLJCode},function(err,data){
-                    if(data.length) callback(req,res,"工料机号重复!",false)
-                    else
-                        new GLJListModel(glj).save(function(err){
-                            if(err){
-                                callback(req,res,"新增工料机错误!",false);
-                            }else{
-                                callback(req,res,false,"");
-                            }
-                        })
-                })
-
-            }
-        })
-    })
-};
-inserts.RationGLJInsert = function(req,res){
-    var DBName = req.body.rationName;
-    var rationGLJ = JSON.parse(req.body.rationGLJ);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("rationgljs",Schemas.RationGLJSchema);
-                GLJListModel.find({"RationCode":rationGLJ.RationCode,"GLJCode":rationGLJ.GLJCode},function(err,data){
-                    if(data.length) callback(req,res,"不可在一条定额下套用相同定额多次",false)
-                    else
-                        new GLJListModel(rationGLJ).save(function(err){
-                            if(err){
-                                callback(req,res,"",false);
-                            }else{
-                                callback(req,res,false,data);
-                            }
-                        })
-                })
-
-            }
-        })
-    })
-};
-inserts.GLJTypeTreeInsert = function(){};
-inserts.MinorRationInsert = function(){};
-inserts.CoeListInsert = function(){};
-inserts.RationCoeInsert = function(){};
-/*inserts.TempRationTreeInsert = function(req,res){
-    var DBName = req.body.rationName;
-    var rationTempTree = JSON.parse(req.body.rationTempTree);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationTreeModel =db.model("rationtrees",Schemas.RationTreeSchema);
-                for(i=0;i<rationTempTree.length;i++){
-                    var node ={}
-                    node.SectionID = rationTempTree[i].id;
-                    node.ParentID = rationTempTree[i].pId;
-
-                    node.NextSiblingID = rationTempTree[i].nId;
-                    node.Name =rationTempTree[i].name;
-                    var N = new RationTreeModel(node).save(function(err){
-                        if(err) console.log("wocao")
-                    });
-                }
-                if (i>=rationTempTree.length)
-                    callback(req,res,false,"save RationTempTree success!");
-                else
-                    callback(req,res,"some error occured when save RationTempTree!",false);
-            }
-        })
-    })
-}*/
-/*searchs.getRationTree = function(req,res){
-    //打开连接相映定额库
-    //返回树结构到前段ztree处理
-    var DBName = req.body.rationName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationTreeModel =db.model("rationtrees",Schemas.RationTreeSchema);
-                RationTreeModel.find({},function(err,data){
-                    if(data.length)
-                    {
-                        callback(req,res,false,data);
-                    }
-                    else
-                    {
-                        callback(req,res,"查询定额错误!",false)
-                    }
-                })
-            }
-        })
-    });
-}*/
-/*searchs.getRationLibs = function(req,res){
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({},{"DisplayName":1},function(err,data){
-            if(data){
-                callback(req,res,false,data);
-            }
-            else{
-                callback(req,res,"没有定额库",false);
-            }
-        })
-    })
-}*/
-searchs.getGLJList = function(req,res){
-    var DBName = req.body.rationName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
-                GLJListModel.find({},function(err,data){
-                    if(data.length)
-                    {
-                        callback(req,res,false,data);
-                    }
-                    else
-                    if(err)
-                    {
-                        callback(req,res,"err",false)
-                    }
-                    else{
-                        callback(req,res,false,false)
-                    }
-                })
-            }
-        })
-    });
-}
-searchs.getGLJByCode = function(req,res){
-    var DBName = req.body.rationName;
-    var gljCode =req.body.gljCode ;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
-                GLJListModel.find({"GLJCode":gljCode},function(err,data){
-                    if(data.length)
-                        callback(req,res,false,data);
-                    else
-                        callback(req,res,"无此工料机",false)
-                })
-            }
-        })
-    });
-}
-searchs.getRationGLJItems = function(req,res){
-    var DBName = req.body.rationName;
-    var rationCode = req.body.rationCode;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                var db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationGLJModel =db.model("rationgljs",Schemas.RationGLJSchema);
-                RationGLJModel.find({"RationCode":rationCode},function(err,rationglj){
-                    if(rationglj.length) callback(req,res,false,rationglj);
-                    else if(err)callback(req,res,"err",false);
-                    else callback(req,res,false,false);
-                })
-            }
-        })
-    });
-}
-searchs.getGLJ = function(req,res){
-    var DBName = req.body.rationName;
-    var GLJCode = req.body.GLJCode ;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
-                GLJListModel.find({"GLJCode":GLJCode},function(err,data){
-                    if(data.length)
-                    {
-                        callback(req,res,false,data);
-                    }
-                    else
-                    {
-                        callback(req,res,"",false)
-                    }
-                })
-            }
-        })
-    });
-}
-searchs.getRationsBySectionID = function(req,res){
-    var DBName = req.body.rationName;
-    var sectionID = Number(req.body.sectionID) ;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var GLJListModel =db.model("rationitems",Schemas.RationItemsSchema);
-                GLJListModel.find({"SectionID":sectionID},function(err,data){
-                    if(data.length)
-                    {
-                        callback(req,res,false,data);
-                    }
-                    else
-                    {
-                        callback(req,res,"",false)
-                    }
-                })
-            }
-        })
-    });
-}
-searchs.getRationByCode = function(req,res){
-    var DBName = req.body.rationName;
-    var rationCode =req.body.RationCode ;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationModel =db.model("rationitems",Schemas.RationItemsSchema);
-                RationModel.find({"RationCode":rationCode},function(err,data){
-                    if(data.length)
-                    {
-                        callback(req,res,false,data);
-                    }
-                    else
-                    {
-                        callback(req,res,"",false)
-                    }
-                })
-            }
-        })
-    });
-}
-/*removes.deleteRationLibs = function(req,res){//只删除了映射表内容  级联操作待完成
-    var rationName = req.body.rationName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":rationName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                db.dropDatabase(function(err){
-                    if(err) callback(req,res,"drop err",false);
-                    else{
-                        callback(req,res,false,"ok")
-                    }
-                });
-            }
-        })
-    })
-
-}*/
-removes.deleteRationMapItem=function(req,res){
-    var rationName = req.body.rationName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.remove({"DisplayName":rationName},function(err){
-            if(err) callback(req,res,"删除错误",false);
-            else callback(req,res,false,"已删除");
-        })
-    })
-}
-removes.deleteRationSection =function(req,res){
-    var DBName = req.body.rationName;
-    var sectionID = req.body.rationSection;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                var RationTreeModel = db.model("rationtrees", Schemas.RationTreeSchema);
-                RationTreeModel.remove({"SectionID":sectionID},function(err){
-                    if(err){callback(req,res,"删除错误",false);}
-                    else{callback(req,res,false,"已删除");}
-                })
-            }
-        })
-    })
-}
-removes.deleteGLJItem = function(req,res){
-    var DBName = req.body.rationName;
-    var gljItem = req.body.GLJCode;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                var gljListModel = db.model("gljlists", Schemas.GLJListSchema);
-                gljListModel.remove({"GLJCode":gljItem},function(err){
-                    if(err){callback(req,res,"删除错误",false);}
-                    else{callback(req,res,false,"已删除");}
-                })
-            }
-        })
-    })
-}
-removes.deleteRation = function(req,res){
-    var DBName = req.body.rationName;
-    var delvalue = req.body.value;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                var rationModel = db.model("rationitems",Schemas.RationItemsSchema);
-                rationModel.remove({"RationCode":delvalue},function(err){
-                    if(err) callback(req,res,"err",false)
-                    else {
-                        var rationGLJModel = db.model("rationgljs",Schemas.RationGLJSchema);
-                        rationGLJModel.remove({"RationCode":delvalue},function(err){
-                            if(err) callback(req,res,"err",false)
-                            else callback(req,res,false,"ok")
-                        })
-                    };
-                });
-            }
-        })
-    })
-}
-removes.deleteRationGLJ = function(req,res){
-   var DBName = req.body.rationName;
-    var delvalue = req.body.value;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length) {
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184", realRationName,60666);
-                var rationModel = db.model("rationgljs",Schemas.RationGLJSchema);
-                rationModel.remove({"GLJCode":delvalue},function(err){
-                    if(err)
-                        callback(req,res,"err",false)
-                    else
-                        callback(req,res,false,"ok")
-                });
-            }
-        })
-    })
-
-}
-/*updates.updateRationLib = function(req,res){
-    var str = req.body.rationName;
-    var newName = req.body.newName;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.update({"DisplayName":str},{$set:{"DisplayName":newName}},function(err){
-            if(err) callback(req,res,"err",false)
-            else callback(req,res,false,"ok");
-            })
-    })
-
-}*/
-updates.updateGLJItem = function(req,res){
-    var DBName = req.body.rationName;
-    var GLJCode = req.body.GLJCode;
-    var glj =JSON.parse(req.body.newGLJ);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-
-                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
-                GLJListModel.update({"GLJCode":GLJCode},glj,function(err){
-                    if(err) callback(req,res,"err",false)
-                    else callback(req,res,false,"ok");
-                })
-            }
-        })
-    })
-}
-updates.updateRationItem = function(req,res){
-    var DBName = req.body.rationName;
-    var rationCode = req.body.RationCode;
-    var rationItem =JSON.parse(req.body.newRation);
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationModel =db.model("rationitems",Schemas.RationItemsSchema);
-                RationModel.update({"RationCode":rationCode},rationItem,function(err){
-                    if(err) callback(req,res,"err",false)
-                    else callback(req,res,false,"ok");
-                })
-            }
-        })
-    })
-}
-updates.updateRGLJAmount = function(req,res){
-    var DBName = req.body.rationName;
-    var rationCode = req.body.RationCode;
-    var gljCdoe = req.body.GLJCode
-    var Amount = req.body.Amount;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationModel =db.model("rationgljs",Schemas.RationGLJSchema);
-                RationModel.update({"RationCode":rationCode,"GLJCode":gljCdoe},{$set:{'Amount':Amount}},function(err){
-                    if(err) callback(req,res,"err",false)
-                    else callback(req,res,false,"ok");
-                })
-            }
-        })
-    })
-}
-updates.setRationBasePrice = function(req,res){
-    var DBName = req.body.rationName;
-    var rationCode = req.body.rationCode;
-    var basePrice = req.body.BasePrice;
-    Schemas.connectMap(function(db){
-        var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
-        LibMapModel.find({"DisplayName":DBName},function(err,data){
-            if(data.length){
-                var realRationName = data[0].DBName;
-                db = mongoose.createConnection("192.168.1.184",realRationName,60666);
-                var RationModel =db.model("rationitems",Schemas.RationItemsSchema);
-                RationModel.update({"RationCode":rationCode},{$set:{'BasePrice':basePrice}},function(err){
-                    if(err) callback(req,res,"err",false)
-                    else callback(req,res,false,"ok");
-
-                })
-            }
-        })
-    })
-}
-var interfaces = {
-    "insert":inserts,
-    "remove":removes,
-    "search":searchs,
-    "update":updates
-};
-
-module.exports =interfaces;

+ 0 - 80
modules/rationLibEditor/models/gljList.js

@@ -1,80 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/23.
- */
-var mongoose = require("mongoose");
-var dbm = require("../../../config/db/db_manager");
-var async = require("async");
-var Schema = mongoose.Schema;
-
-
-var gljListSchema = mongoose.Schema({
-    GLJCode:String,
-    GLJName:String,
-    specs:String,//规格,钢筋粗细,光圆
-    unit:String,//单位
-    basePrice:Number,
-    type:Number //工料机类型,便于分类
-});
-
-var gljListDAO = function(){};
-
-gljListDAO.prototype.insertGLJList = function(LibName,value,callback){
-    var db = dbm.getCfgConnection(LibName);
-    var gljListModel = db.model("gljlists",gljListSchema);
-    if(value.cellCurrValue == value.cellPrimValue) callback(false,false);
-    gljListModel.find({GLJCode:value.cellCurrValue},function(err,data){
-        if(data.length)
-            callback(false,false);
-        else{
-            if(value.cellPrimValue == null){
-                var glj = {};
-                glj.GLJCode = value.cellCurrValue;
-                glj.GLJName = null;
-                glj.specs = null;
-                glj.unit = null;
-                glj.basePrice = null;
-                glj.type = null;
-                new gljListModel(glj).save(function(err){
-                    if(err)
-                        callback(err,false);
-                    else
-                        callback(err,"ok")
-                })
-            }else
-                gljListModel.update({gljCode:value.cellPrimValue},{$set:{gljCode:value.cellCurrValue}},function(err){
-                    if(err) callback("更新工料机发生错误",false);
-                    else  callback(err,"ok");
-                });
-        }
-    })
-}
-
-gljListDAO.prototype.updateGLJList = function(libName,value,data,callback){
-    var db = dbm.getCfgConnection(libName);
-    var gljListModel = db.model("gljlists",gljListSchema);
-    var glj = {}
-    glj.GLJCode = data[0];
-    glj.GLJName = data[1];
-    glj.specs = data[2];
-    glj.unit = data[3];
-    glj.basePrice = data[4];
-    glj.type = data[5];
-    gljListModel.find({GLJCode:glj.GLJCode},function(err,data){
-        if(err) callback("请确是否有该工料机!",false)
-        else
-            gljListModel.update({GLJCode:glj.GLJCode},glj,function(err){
-                if(err) callback("更新工料机错误",false);
-                else callback(err,"更新成功");
-            })
-    })
-}
-
-gljListDAO.prototype.removeGLJList = function(libName,value,callback){
-    var db = dbm.getCfgConnection(libName);
-    var gljListModel = db.model("gljlists",gljListSchema);
-    gljListModel.remove({GLJCode:value.cellPrimValue},function(err){
-        if(err) callback("删除失败",false)
-        else callback(err,"ok");
-    })
-}
-module.exports = new gljListDAO()

+ 0 - 78
modules/rationLibEditor/models/rationItems.js

@@ -1,78 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/23.
- */
-var mongoose = require("mongoose");
-var dbm = require("../../../config/db/db_manager");
-var async = require("async");
-var Schema = mongoose.Schema;
-
-
-var rationItemsSchema = mongoose.Schema({//只记载定额基本元素,并未和工料机挂钩
-    rationCode:String,
-    rationName:String,
-    unit:String,
-    basePrice:Number,
-    sectionId:Number,
-    contentId:Number,
-    caption:String,//显示内容
-    feeType:Number //取费类别,这条定额对应怎样的费率参与计算,在键定额库的时候手动输入
-});
-
-var rationItemsDAO = function(){};
-
-rationItemsDAO.prototype.insertRation = function(LibName,value,callback){
-    var db = dbm.getCfgConnection(LibName);
-    var rationItemsModel = db.model("rationItems",rationItemsSchema);
-    if(value.cellCurrValue == value.cellPrimValue) callback(false,false);
-    rationItemsModel.find({rationCode:value.cellCurrValue},function(err,data){
-        if(data.length)
-            callback(false,false);
-        else{
-            if(value.cellPrimValue == null){
-                var ration = {};
-                ration.rationCode = value.cellCurrValue;
-                ration.rationName = null;
-                ration.unit = null;
-                ration.basePrice = null;
-                ration.sectionId = null;
-                ration.contentId = null;
-                ration.caption = null;
-                ration.feeType = null;
-                new rationItemsModel(ration).save(function(err){
-                    if(err)
-                        callback(err,false);
-                    else
-                        callback(err,"ok")
-
-                })
-            }else
-                rationItemsModel.update({rationCode:value.cellPrimValue},{$set:{rationCode:value.cellCurrValue}},function(err){
-                    if(err) callback("更新定额发生错误",false);
-                    else  callback(err,"ok");
-                });
-        }
-    })
-}
-rationItemsDAO.prototype.updateRation = function(libName,value,data,callback){
-    var db = dbm.getCfgConnection(libName);
-    var rationItemsModel = db.model("rationItems",rationItemsSchema);
-    var ration = {}
-    ration.rationCode = data[0];
-    ration.rationName = data[1];
-    ration.unit = data[2];
-    ration.basePrice = data[3];
-    ration.sectionId = value.sectionSelected;
-    ration.contentId = null;
-    ration.caption = data[4];
-    ration.feeType = data[5];
-    rationItemsModel.find({rationCode:ration.rationCode},function(err,data){
-        if(err) callback("请确是否有该定额!",false)
-        else
-        rationItemsModel.update({rationCode:ration.rationCode},ration,function(err){
-            if(err) callback("更新定额错误",false)
-            else callback(err,"更新成功");
-        })
-    })
-}
-
-module.exports = new rationItemsDAO()

+ 0 - 92
modules/rationLibEditor/models/rationLibMap.js

@@ -1,92 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/20.
- */
-var mongoose = require("mongoose");
-var dbm = require("../../../config/db/db_manager");
-var async = require("async");
-var db = dbm.getCfgConnection("rationLibMap");
-//var schema = mongoose.Schema;
-
-var rationLibMapSchema = mongoose.Schema({
-    displayName:String,
-    dbName:String
-})
-
-var rationLibMap = db.model("rationlibmaps", rationLibMapSchema);
-
-var rationLibMapDAO = function(){};
-
-rationLibMapDAO.prototype.getRealLibName = function(rationName,callback){
-    rationLibMap.find({"displayName":rationName}, function(err,data){
-        if (err) {
-            callback('Error', null);
-        } else {
-            callback(0, data);
-        }
-    });
-};
-
-rationLibMapDAO.prototype.addRationLib = function(rationName,callback){
-    rationLibMap.find({"risplayName":rationName},function(err,data){
-        if(data.length == 0)
-            new rationLibMap({"displayName":rationName,"dbName":rationName}).save(function(err) {
-                if (err) callback("Error", null)
-                else
-                    callback(false, "ok");
-            })
-        else
-        callback("定额库重名!",null)
-    })
-}
-
-rationLibMapDAO.prototype.getDisplayRationLibs = function(callback) {
-    rationLibMap.find({}, function(err, data){
-        if (err) {
-            callback( 'Error', null);
-        } else {
-            callback( false, data);
-        }
-    });
-};
-
-rationLibMapDAO.prototype.deleteRationLib = function(rationName,callback){
-    async.waterfall([
-        function(cb){
-            rationLibMap.find({"displayName":rationName},function(err,data){
-                cb(err,data)
-            })
-        },
-        function(data,cb){
-            var db1 = dbm.getCfgConnection(data[0].dbName);
-            db1.dropDatabase(function(err){
-              cb(err,data)
-            })
-        },
-        function(data,cb){
-             RationLibMap.remove({"displayName":rationName},function(err,data){
-                 cb(err,data);
-             })
-        }
-    ],
-        function(err,result){
-        if (err) {
-            callback( 'Error', null);
-        } else {
-            callback( '', "ok");
-        }
-    })
-}
-
-rationLibMapDAO.prototype.editRationLib = function(rationName,newName,callback){
-    rationLibMap.find({"displayName":newName}, function(err, data){
-        if (data.length == 0) {
-            rationLibMap.update({displayName:rationName},{$set:{displayName:newName}},function(err){
-                if(err) callback("err",false);
-                else callback(false,"ok")
-            })
-        } else
-        callback("不可重名!",false);
-    });
-}
-
-module.exports = new rationLibMapDAO();

+ 0 - 67
modules/rationLibEditor/models/rationTree.js

@@ -1,67 +0,0 @@
-/**
- * Created by Syusuke on 2017/3/20.
- */
-var mongoose = require("mongoose");
-var dbm = require("../../../config/db/db_manager");
-var async = require("async");
-var Schema = mongoose.Schema;
-
-var rationTreeSchema = mongoose.Schema({//章节树  //生成唯一id改为sectionID  改成string
-    sectionId:Number,
-    parentId:Number,
-    nextSiblingId:Number,
-    name:String
-});
-
-
-var rationTreeDAO = function(){};
-
-rationTreeDAO.prototype.getRationTrees = function(Libname,callback){
-    var db = dbm.getCfgConnection(Libname)
-    var rationTreeModel = db.model("rationtrees",rationTreeSchema)
-    rationTreeModel.find({},function(err,data){
-        if(data.length) callback(false,data);
-        else  if(err) callback("获取定额树错误!",false)
-        else callback(false,false);
-    })
-}
-rationTreeDAO.prototype.tempRationTreeInsert = function(Libname,rationTempTree,callback){
-    var db = dbm.getCfgConnection(Libname)
-    var rationTreeModel = db.model("rationtrees",rationTreeSchema)
-    rationTreeModel.collection.insert(rationTempTree,function(err,data){
-     if(err) callback("插入定额模板错误",false)
-     else callback(false,"ok")
-     })
-}
-
-rationTreeDAO.prototype.sectionUpsert = function(Libname,section,callback){
-    var db = dbm.getCfgConnection(Libname);
-    var rationTreeModel = db.model("rationtrees",rationTreeSchema);
-    rationTreeModel.find({"sectionId": section.sectionId},function(err,data){
-        if(data.length){
-            rationTreeModel.update({'sectionId':section.sectionId},section,function(err,data){
-                if(err){
-                    callback(" ",false);
-                }else
-                    callback(false,"ok");
-            });
-        }else{
-            var N = new rationTreeModel(section).save(function(err){
-                if(err){
-                    callback(" ",false);
-                }else
-                    callback(false,"success!");
-            })
-        }
-    })
-}
-//待  ration模块完成
-rationTreeDAO.prototype.deleteSection= function(Libname,sectionId,callback){
-    var db = dbm.getCfgConnection(Libname);
-    var rationTreeModel = db.model("rationItems",rationTreeSchema);
-    rationTreeModel.find({"sectionId": sectionId},[],function(err,data){
-
-    })
-}
-
-module.exports = new rationTreeDAO()

+ 0 - 71
modules/rationLibEditor/routes/rationLibEditor_route.js

@@ -1,71 +0,0 @@
-var express = require("express");
-var apiRouter =express.Router();
-var _rootDir = __dirname;
-
-var RationLibMapController = require("../controller/RLibMapController")
-var RationTreeController = require("../controller/RTreeController");
-var RationItemController = require("../controller/RItemsController")
-var GLJListController = require("../controller/gljListController")
-var path = require('path');
-var htmlPath = path.join(__dirname,'../../../','web/rationLibEditor/');
-apiRouter.get('/', function(req, res) {
-        res.redirect('/main');
-});
-
-var RationInterface = require("../db/interfaces");
-apiRouter.get("/main",function(req,res){
-    res.render("rationLibEditor/main.html");
-})
-
-apiRouter.get('/rationLib', function (req, res) {
-    res.render("rationLibEditor/dinge.html");
-});
-
-apiRouter.get('/gongliao', function (req, res) {
-    res.render("rationLibEditor/gongliao.html");
-});
-
-apiRouter.get('/fuzhu', function (req, res) {
-    res.render("rationLibEditor/fuzhu.html");
-});
-
-//apiRouter.post("/addSection",RationInterface.insert.RationSectionInsert);
-apiRouter.post("/removeSection",RationInterface.remove.deleteRationSection);
-apiRouter.post("/saveGLJ",RationInterface.insert.GLJListInsert);
-apiRouter.post("/getGLJ",RationInterface.search.getGLJList);
-apiRouter.post("/deleteGLJItem",RationInterface.remove.deleteGLJItem);
-apiRouter.post("/saveRationItem",RationInterface.insert.RationItemsInsert);
-apiRouter.post("/getRationsBySectionID",RationInterface.search.getRationsBySectionID);
-apiRouter.post("/getGLJByCode",RationInterface.search.getGLJByCode);
-apiRouter.post("/getRationGLJItems",RationInterface.search.getRationGLJItems);
-apiRouter.post("/saveRationGLJ",RationInterface.insert.RationGLJInsert);
-apiRouter.post("/getGLJItem",RationInterface.search.getGLJ);
-apiRouter.post("/editGLJItem",RationInterface.update.updateGLJItem);
-apiRouter.post("/deleteRation",RationInterface.remove.deleteRation);
-apiRouter.post("/deleteRationMapItem",RationInterface.remove.deleteRationMapItem);
-apiRouter.post("/deleteRationGLJ",RationInterface.remove.deleteRationGLJ);
-apiRouter.post("/editRation",RationInterface.remove.deleteRationGLJ);
-apiRouter.post("/editRGLJAmount",RationInterface.update.updateRGLJAmount);
-apiRouter.post("/editRationItem",RationInterface.update.updateRationItem);
-apiRouter.post("/getRationByCode",RationInterface.search.getRationByCode);
-apiRouter.post("/setRationBasePrice",RationInterface.update.setRationBasePrice);
-
-//--------------------------------------------------rationLibMap
-apiRouter.post("/addRationLib",RationLibMapController.addRationLib);
-apiRouter.post("/getRationDisplayNames",RationLibMapController.getDisPlayRationLibs);
-apiRouter.post("/deleteRationLibs",RationLibMapController.deleteRationLib);
-apiRouter.post("/editRationLibs",RationLibMapController.editRationLibs);
-apiRouter.post("/getRealLibName",RationLibMapController.getRealLibName);
-//----------------------------------------------------rationTree
-apiRouter.post("/getRationTree",RationTreeController.getRationTree);
-apiRouter.post("/saveTempRationTree",RationTreeController.tempRationTreeInsert);
-apiRouter.post("/addSection",RationTreeController.sectionUpsert);
-apiRouter.post("/deleteSection",RationTreeController.deleteSection);
-//----------------------------------------------------ration
-apiRouter.post("/insertRation",RationItemController.insertRation);
-apiRouter.post("/updateRation",RationItemController.updateRation);
-//----------------------------------------------------gljList
-apiRouter.post("/insertGLJList",GLJListController.insertGLJList);
-apiRouter.post("/updateGLJList",GLJListController.updateGLJList);
-apiRouter.post("/removeGLJList",GLJListController.removeGLJList);
-module.exports = apiRouter;

+ 23 - 0
modules/rationRepository/controllers/coe_controller.js

@@ -0,0 +1,23 @@
+/**
+ * Created by CSL on 2017/5/19.
+ */
+var coeList = require("../models/coe");
+
+var callback = function(req,res,err,message, data){
+    res.json({error: err, message: message, data: data});
+}
+
+module.exports ={
+    getCoeList: function(req,res){
+        coeList.getCoesByLibID(req.body.libID, function(err,data){
+            callback(req, res, err, 'Get coes', data);
+        });
+    },
+
+    saveCoeList: function(req, res) {
+        coeList.saveToCoeList(JSON.parse(req.body.data), function(err, info){
+            callback(req, res, err, info, null);
+        });
+    }
+
+}

+ 9 - 0
modules/rationRepository/controllers/rationRepositoryController.js

@@ -37,6 +37,15 @@ module.exports = {
             }
         })
     },
+    getLibIDByName:function(req,res){
+        rationRepository.getLibIDByName(req.body.libName, function(err,data){
+            if (data) {
+                callback(req, res, err, "has ID", data);
+            } else {
+                callback(req, res, err, "no ID", null);
+            }
+        })
+    },
     deleteRationLib:function(req,res){
         var rationName = req.body.rationName;
         rationRepository.deleteRationLib(rationName,function(err,data){

+ 2 - 2
modules/rationRepository/controllers/repositoryGljController.js

@@ -8,8 +8,8 @@ var callback = function(req,res,err,message, data){
 }
 module.exports ={
     getGljTree: function(req,res){
-        var libName = req.body.rationLibName;
-        gljRepository.getGljTypes(libName,function(err,data){
+        var rationLibId = req.body.rationLibId;
+        gljRepository.getGljTypes(rationLibId,function(err,data){
             callback(req,res,err, 'Get Tree', data)
         });
     },

+ 107 - 0
modules/rationRepository/models/coe.js

@@ -0,0 +1,107 @@
+/**
+ * Created by CSL on 2017/5/3.
+ * 系数表。
+ */
+
+var mongoose = require("mongoose");
+var dbm = require("../../../config/db/db_manager");
+var db = dbm.getCfgConnection("rationRepository");
+var counter = require('../../../public/counter/counter');
+
+var coeSchema = mongoose.Schema({
+    coeType: String,                // 系数类型,指作用范围:
+                                    // 单个(如:111量0.001)、人工类、材料类、机械类、全部(如:定额×0.925)。
+    gljID: Number,                  // 要调整的工料机ID(当coeType=0时有效)
+    operator: String,               // 运算符(*、+、-、=)
+    amount: String,                 // 调整的量
+    _id: false
+});
+
+var coeListSchema = mongoose.Schema({
+    libID: Number,                      // 所属定额定ID
+    ID: Number,                         // 系数ID(流水号ID)
+    name: String,                       // 名称
+    content: String,                    // 说明
+    coes: [coeSchema]
+});
+
+var coeListModel = db.model("coeLists",coeListSchema, "coeLists")
+
+var coeListDAO = function(){};
+
+coeListDAO.prototype.getCoe = function (data, callback) {
+    coeListModel.findOne({
+            "libID": data.libID,
+            "ID": data.ID,
+            "$or": [{"isDeleted": null}, {"isDeleted": false}]
+        },
+        function (err, doc) {
+            if (err) callback(true, "获取系数明细错误!", "")
+            else callback(false, "获取系数明细成功", doc);
+        })
+};
+
+coeListDAO.prototype.getCoesByLibID = function (libID, callback) {
+    coeListModel.find({ "libID": libID },
+        function (err, doc) {
+            if (err) callback("获取定额库系数表错误", null)
+            else callback(null, doc);
+        })
+};
+
+coeListDAO.prototype.saveToCoeList = function(data, callback) {
+    var me = this;
+    console.log(data);
+    if (data.addArr.length > 0) {
+        me.addItems(data.addArr, callback);
+    };
+
+    //if (data.deleteArr.length > 0) {
+    //    me.deleteItems(data.deleteArr, callback);
+    //};
+
+    if (data.updateArr.length > 0) {
+        me.updateItems(data.updateArr, callback);
+    };
+};
+
+coeListDAO.prototype.addItems = function(addArr, callback) {
+    if (addArr && addArr.length > 0) {
+        counter.counterDAO.getIDAfterCount(counter.moduleName.coeList, addArr.length, function(err, result){
+            var maxId = result.value.sequence_value;
+            for (var i = 0; i < addArr.length; i++) {
+                var obj = new coeListModel(addArr[i]);
+                obj.ID = (maxId - (addArr.length - 1) + i);
+                coeListModel.create(obj, function(err) {
+                    if (err) {
+                        callback(true, err);
+                    } else {
+                        callback(false, null);
+                    };
+                });
+            };
+
+        });
+    } else {
+        callback(true, "No source");
+    };
+};
+
+coeListDAO.prototype.updateItems = function(updateArr, callback) {
+    if (updateArr && updateArr.length > 0) {
+            for (var i = 0; i < updateArr.length; i++) {
+                var obj = updateArr[i];
+                coeListModel.update({"libID": obj.libID, "ID": obj.ID}, updateArr[i], function(err) {
+                    if (err) {
+                        callback(true, "update Fail");
+                    } else {
+                        callback(false, "update success");
+                    };
+                });
+            };
+    } else {
+        callback(true, "No source");
+    };
+};
+
+module.exports = new coeListDAO();

+ 0 - 45
modules/rationRepository/models/coeList.js

@@ -1,45 +0,0 @@
-/**
- * Created by CSL on 2017/5/3.
- * 系数表。
- */
-
-var mongoose = require("mongoose");
-var dbm = require("../../../config/db/db_manager");
-var db = dbm.getCfgConnection("rationRepository")
-
-var coeSchema = mongoose.Schema({
-    coeType: String,                // 系数类型,指作用范围:
-                                    // 0 针对单个工料机。如:111量0.001
-                                    // 1 人工类。 2 材料类。 3 机械类。
-                                    // 9 针对本定额所有工料机。如:定额×0.925 (可以用123代替,但9的好处是前端不用做多余的过滤判断,提高效率)
-    gljID: Number,                  // 要调整的工料机ID(当coeType=0时有效)
-    operator: String,               // 运算符(*、+、-、=)
-    amount: String,                 // 调整的量
-    _id: false
-});
-
-var coeListSchema = mongoose.Schema({
-    libID: Number,                      // 所属定额定ID
-    ID: Number,                         // 系数ID(流水号ID)
-    name: String,                       // 名称
-    content: String,                    // 说明
-    coes: [coeSchema]
-});
-
-var coeListModel = db.model("coeLists",coeListSchema, "coeLists")
-
-var coeListDAO = function(){};
-
-coeListDAO.prototype.getCoe = function (data, callback) {
-    coeListModel.findOne({
-            "libID": data.libID,
-            "ID": data.ID,
-            "$or": [{"isDeleted": null}, {"isDeleted": false}]
-        },
-        function (err, doc) {
-            if (err) callback(true, "获取系数明细错误!", "")
-            else callback(false, "获取系数明细成功", doc);
-        })
-};
-
-module.exports = new coeListDAO();

+ 6 - 12
modules/rationRepository/models/gljRepository.js

@@ -36,18 +36,12 @@ var repositoryMap = require('./repositoryMap');
 var counter = require('../../../public/counter/counter');
 
 var gljItemDAO = function(){};
-gljItemDAO.prototype.getGljTypes = function(repositoryName, callback){
-    repositoryMap.getRealLibName(repositoryName, function(err, rst){
-        if (err || rst.length == 0) {
-            callback("获取定额库错误!",false)
-        } else {
-            gljTypeModel.find({"repositoryId": rst[0].ID, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
-                if(data.length) callback(false,data);
-                else  if(err) callback("获取工料机类型错误!",false)
-                else callback(false,false);
-            })
-        }
-    });
+gljItemDAO.prototype.getGljTypes = function(rationLibId, callback){
+    gljTypeModel.find({"repositoryId": rationLibId, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
+        if(data.length) callback(false,data);
+        else  if(err) callback("获取工料机类型错误!",false)
+        else callback(false,false);
+    })
 };
 
 gljItemDAO.prototype.getGljItemsByRep = function(repositoryId,callback){

+ 12 - 2
modules/rationRepository/models/repositoryMap.js

@@ -46,6 +46,16 @@ rationRepositoryDao.prototype.getRealLibName = function(dispName,callback){
     }
 };
 
+rationRepositoryDao.prototype.getLibIDByName = function(dispName, callback){
+    rationRepository.findOne({"dispName": dispName}, function(err,data){
+        if (err) {
+            callback('Error', null);
+        } else {
+            callback(false, data.ID);
+        }
+    });
+};
+
 rationRepositoryDao.prototype.getRepositoryById = function(repId,callback){
     if (callback) {
         rationRepository.find({"ID": repId}, function(err,data){
@@ -65,10 +75,10 @@ rationRepositoryDao.prototype.addRationRepository = function( rationLibObj,callb
     counter.counterDAO.getIDAfterCount(counter.moduleName.rationMap, 1, function(err, result){
         var rMap = createNewLibModel(rationLibObj);
         rMap.ID = result.value.sequence_value;
-        new rationRepository(rMap).save(function(err) {
+        new rationRepository(rMap).save(function(err, result) {
             if (err) callback("Error", null)
             else
-                callback(false, "ok");
+                callback(false, result);
         });
     });
 };

+ 5 - 0
modules/rationRepository/routes/rationRepRoutes.js

@@ -9,12 +9,14 @@ var rationRepositoryController = require("../controllers/rationRepositoryControl
 var rationChapterTreeController = require("../controllers/rationChapterTreeController");
 var rationController = require("../controllers/rationController");
 var repositoryGljController = require("../controllers/repositoryGljController");
+var coeListController = require("../controllers/coe_controller");
 
 apiRouter.post("/getRationDisplayNames",rationRepositoryController.getDisPlayRationLibs);
 apiRouter.post("/editRationLibs",rationRepositoryController.updateRationRepositoryName);
 apiRouter.post("/addRationRepository",rationRepositoryController.addRationRepository);
 apiRouter.post("/deleteRationLibs",rationRepositoryController.deleteRationLib);
 apiRouter.post("/getRealLibName",rationRepositoryController.getRealLibName);
+apiRouter.post("/getLibIDByName",rationRepositoryController.getLibIDByName);
 
 apiRouter.post("/getRationTree",rationChapterTreeController.getRationChapterTree);
 apiRouter.post("/createNewNode",rationChapterTreeController.createNewNode);
@@ -33,5 +35,8 @@ apiRouter.post("/mixUpdateGljItems",repositoryGljController.mixUpdateGljItems);
 apiRouter.post("/getGljItemsByIds",repositoryGljController.getGljItemsByIds);
 apiRouter.post("/getGljItemsByCodes",repositoryGljController.getGljItemsByCodes);
 
+apiRouter.post("/getCoeList",coeListController.getCoeList);
+apiRouter.post("/saveCoeList",coeListController.saveCoeList);
+
 
 module.exports = apiRouter;

modules/feeLibs/models/feeLibs_db.js → modules/std_fee_rate_libs/models/std_fee_rate_libs.js


+ 1 - 1
modules/users/controllers/users_controller.js

@@ -1,4 +1,4 @@
-var ut = require('../models/users_data');
+var ut = require('../models/users');
 var rq = require('request');
 var online = true;
 

+ 0 - 10
modules/users/models/umDB.js

@@ -1,10 +0,0 @@
-var mg = require('mongoose');
-mg.connect('mongodb://localhost/usersManages');
-//mg.connect('mongodb://192.168.1.184:60666/usersManages');
-
-mg.connection.on('connected', function(){console.log('Mongoose connected to usersManages.')});
-mg.connection.on('disconnected', function(){console.log('Mongoose disconnected.')});
-mg.connection.on('error', function(err){console.log('Mongoose connect error:' + err)});
-
-exports.mongoose = mg;
-

modules/users/models/users_data.js → modules/users/models/users.js


+ 2 - 1
public/counter/counter.js

@@ -29,7 +29,8 @@ const COUNTER_MODULE_NAME = {
     unitPriceFile: 'unitPriceFile',
     unitPriceGLJ: 'unitPriceGLJ',
     template_bills: 'temp_bills',
-    billsLib: 'billsLib'
+    billsLib: 'billsLib',
+    coeList: 'coeList'
 }
 /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
     REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/

+ 28 - 0
public/debug.js

@@ -0,0 +1,28 @@
+/**
+ * Created by CSL on 2017-05-19.
+ * 用于展示未知对象的内容。如:debug.m(GC.Spread.Sheets.Events);
+ */
+
+debug = {
+    m: function (flag, obj) {
+        alert(flag + this.objStr(obj));
+    },
+
+    d: function (flag, obj) {
+        alert(flag + JSON.stringify(obj));
+    },
+
+    objStr: function (obj) {
+        var str = "";
+        var spr = "";
+        for (var x in obj) {
+            if (obj.hasOwnProperty(x)) {
+                if (str == '') {
+                    spr = ''
+                } else { spr = ', ' } ;
+                str += spr + x + ':' + obj[x];
+            }
+        }
+        return str;
+    }
+}

public/QueryParam.js → public/web/QueryParam.js


public/dateUtil.js → public/web/dateUtil.js


+ 68 - 0
public/web/sheet.js

@@ -0,0 +1,68 @@
+/**
+ * Created by CSL on 2017-05-19.
+ * 通用的SpreadSheet创建显示接口,应用数据源绑定列、脏数据等。
+ * var colDef = [{name: "coeType", displayName: "类型", size: 100, hAlign: "center"},..,{} ];
+ * var datas = [{},..,{}];
+ */
+
+sheetObj = {
+    spread: null,
+
+    create: function (container, colDef, datas){
+        var me = this;
+        me.spread = new GC.Spread.Sheets.Workbook(container, {sheetCount:1});
+        me.spread.suspendPaint();
+
+        me.spread.options.tabStripVisible = false;
+        me.spread.options.showHorizontalScrollbar = false;
+
+        var sheet = me.spread.getSheet(0);
+        var sheetArea = GC.Spread.Sheets.SheetArea;
+        sheet.setRowCount(20, sheetArea.viewport);
+        sheet.setRowHeight(0, 30, sheetArea.colHeader);
+        sheet.autoGenerateColumns = false;
+        sheet.setDataSource(datas);
+        sheet.bindColumns(colDef);
+        me.setColAlign(colDef);
+        me.setRowHeight(datas, 25);
+
+        me.spread.resumePaint();
+        return me.spread;
+    },
+
+    setColAlign: function(colDef){
+        var me = this;
+        var sheet = me.spread.getSheet(0);
+
+        for (var col = 0; col < colDef.length; col++) {
+            var ha = colDef[col].hAlign;
+            var va = colDef[col].vAlign;
+            var area = sheet.getRange(-1, col, -1, GC.Spread.Sheets.SheetArea.viewport);
+
+            if (ha === "right") {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.right);
+            } else if (ha === "center") {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
+            } else {
+                area.hAlign(GC.Spread.Sheets.HorizontalAlign.left);
+            };
+
+            if (va === "top") {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.top);
+            } else if (va === "bottom") {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.bottom);
+            } else {
+                area.vAlign(GC.Spread.Sheets.VerticalAlign.center);
+            };
+        };
+
+    },
+
+    setRowHeight: function(datas, hValue){
+        var me = this;
+        var sheet = me.spread.getSheet(0);
+        for (var row = 0; row < datas.length; row++) {
+            sheet.setRowHeight(row, hValue, GC.Spread.Sheets.SheetArea.viewport);
+        }
+    }
+};

+ 130 - 0
public/web/sheet_contextmenu.js

@@ -0,0 +1,130 @@
+/**
+ * Created by Mai on 2017/5/18.
+ */
+
+SHEET_CONTEXTMENU = {
+    /**
+     * @param spreadObj: Dom Element for create GC.Spread
+     * @param spread: GC.Spread created in spreadOBj
+     * @param menuObj: Dom Element for contextMenu, eg.:
+     * <ul id="spreadContextMenu" class="dropdown-menu" role="menu" style="display: none">
+     * <li><a class="dropdown-item localize" data-action="cut">剪切</a></li>
+     * <li><a class="dropdown-item localize" data-action="copy">复制</a></li>
+     * <li><a class="dropdown-item localize" data-action="paste">粘贴</a></li>
+     * <li class="context-header divider"></li>
+     * <li class="context-header"><a class="dropdown-item localize" data-action="insert">插入</a></li>
+     * <li class="context-header"><a class="dropdown-item localize" data-action="delete">删除</a></li>
+     * <li class="context-cell divider"></li>
+     * <li class="context-cell context-merge"><a class="dropdown-item localize" data-action="merge">合并</a></li>
+     * <li class="context-cell context-unmerge"><a class="dropdown-item localize" data-action="unmerge">取消合并</a></li>
+     * </ul>
+     * menu must be a, define menu's event must use bind method
+     * @returns {control}; use to bind contextmenu event, see eventName
+     */
+    createNew: function (spreadObj, spread, menuObj) {
+        var tools = {
+            getHitTest: function (pageX, pageY, sheet) {
+                var offset = spreadObj.offset(),
+                    x = pageX - offset.left,
+                    y = pageY - offset.top;
+                return sheet.hitTest(x, y);
+            },
+            getInfo: function (e) {
+                var info = {};
+                info.sheet = spread.getActiveSheet();
+                info.target = tools.getHitTest(e.pageX, e.pageY, info.sheet);
+                info.hitTestType = info.target.hitTestType;
+                info.isHideContextMenu = false;
+                info.contextMenu = menuObj;
+                return info;
+            },
+            getCellInSelections: function (selections, row, col) {
+                var count = selections.length, range;
+                for (var i = 0; i < count; i++) {
+                    range = selections[i];
+                    if (range.contains(row, col)) {
+                        return range;
+                    }
+                }
+                return null;
+            },
+            hideSpreadContextMenu: function () {
+                menuObj.hide();
+                $(document).off("click.contextmenu");
+            },
+            processSpreadContextMenu: function (e) {
+                var info = tools.getInfo(e), selections = info.sheet.getSelections(), row = info.target.row, col = info.target.col;
+
+                // reSet Selections when no selections
+                if (info.hitTestType === GC.Spread.Sheets.SheetArea.colHeader) {
+                    if (tools.getCellInSelections(selections, row, col) === null) {
+                        info.sheet.setSelection(-1, col, info.sheet.getRowCount(), 1);
+                    }
+                } else if (info.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader) {
+                    if (tools.getCellInSelections(selections, row, col) === null) {
+                        info.sheet.setSelection(row, -1, 1, info.sheet.getColumnCount());
+                    }
+                } else if (info.hitTestType === GC.Spread.Sheets.SheetArea.viewport) {
+                    if (tools.getCellInSelections(selections, row, col) === null) {
+                        info.sheet.clearSelection();
+                        info.sheet.endEdit();
+                        info.sheet.setActiveCell(row, col);
+                    }
+                } else if (info.hitTestType === GC.Spread.Sheets.SheetArea.corner) {
+                    info.sheet.setSelection(-1, -1, info.sheet.getRowCount(), info.sheet.getColumnCount());
+                };
+
+                menuObj.data("sheetArea", info.hitTestType);
+                if (info.isHideContextMenu) {
+                    tools.hideSpreadContextMenu();
+                } else {
+                    if (event.beforeShowContextMenu) {
+                        event.beforeShowContextMenu(info);
+                    };
+
+                    menuObj.css({left: e.pageX, top: e.pageY});
+                    menuObj.show();
+
+                    $(document).on("click.contextmenu", function () {
+                        if ($(event.target).parents(menuObj).length === 0) {
+                            tools.hideSpreadContextMenu();
+                        }
+                    });
+                }
+            }
+        };
+        var event = {
+            beforeShowContextMenu: null
+        };
+
+        var control = function () {
+            spreadObj.bind("contextmenu", tools.processSpreadContextMenu);
+            spreadObj.mouseup(function (e) {
+                // hide context menu when the mouse down on SpreadJS
+                if (e.button !== 2) {
+                    tools.hideSpreadContextMenu();
+                }
+            });
+            $(menuObj, 'a').bind('click', tools.hideSpreadContextMenu);
+            $(document).on("contextmenu", function (e) {
+                var evt = window.event || e;
+                if (!$(evt.target).data('contextmenu')) {
+                    evt.preventDefault();
+                    return false;
+                }
+            });
+        };
+        control.prototype.bind = function (eventName, event) {
+            event[eventName] = event;
+        };
+
+        return new control();
+    },
+    /**
+     * beforeShowContextMenu: right click spread, menu has different with spread.sheet.selections
+     * @Param info: see return of tools.getInfo
+     */
+    eventName: {
+        beforeShowContextMenu: 'beforeShowContextMenu'
+    }
+}

public/storageUtil.js → public/web/storageUtil.js


+ 3 - 0
public/web/tree_sheet_helper.js

@@ -248,6 +248,9 @@ var TREE_SHEET_HELPER = {
         TREE_SHEET_HELPER.massOperationSheet(sheet, function () {
             sheet.rowOutlines.direction(GC.Spread.Sheets.Outlines.OutlineDirection.backward);
             sheet.showRowOutline(false);
+            if (setting.defaultRowHeight) {
+                sheet.defaults.rowHeight = setting.defaultRowHeight;
+            }
             sheet.setRowCount(tree.count() + setting.emptyRows, GC.Spread.Sheets.SheetArea.viewport);
             setting.cols.forEach(function (colSetting, iCol) {
                 sheet.setStyle(-1, iCol, TREE_SHEET_HELPER.getSheetCellStyle(colSetting));

+ 13 - 4
server.js

@@ -52,7 +52,7 @@ app.use(function (req, res, next) {
 });
 
 app.use('/', require('./modules/users/routes/users_route'));
-app.use('/fees', require('./modules/fees/routes/fees_router'));
+app.use('/feeRates', require('./modules/fee_rates/routes/fee_rates_route'));
 
 app.get('/template/bills', function (req, res) {
     var checkAdmin = function (userAccount) {
@@ -132,26 +132,35 @@ app.use("/report_api", rpt_Router);
 
 var rationRepository_Router = require("./modules/rationRepository/routes/rationRepRoutes");
 app.get('/rationRepository/main', function(req, res) {
-    res.render('rationLibEditor/main.html',
+    res.render('rationRepository/main.html',
         {
             userAccount: req.session.userAccount,
             userID: req.session.userID
         });
 });
 app.get('/rationRepository/ration', function(req, res) {
-    res.render('rationLibEditor/dinge.html',
+    res.render('rationRepository/dinge.html',
         {
             userAccount: req.session.userAccount,
             userID: req.session.userID
         });
 });
 app.get('/rationRepository/lmm', function(req, res) {
-    res.render('rationLibEditor/gongliao.html',
+    res.render('rationRepository/gongliao.html',
         {
             userAccount: req.session.userAccount,
             userID: req.session.userID
         });
 });
+
+app.get('/rationRepository/coeList', function(req, res) {
+    res.render('rationRepository/fuzhu.html',
+        {
+            userAccount: req.session.userAccount,
+            userID: req.session.userID
+        });
+});
+
 app.use("/rationRepository/api",rationRepository_Router);
 
 app.get("/stdBillsmain", function(req, res){

+ 28 - 27
test/tmp_data/bills_grid_setting.js

@@ -10,13 +10,13 @@ var BillsGridSetting = {
                 spanRows: [2],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'code',
                 vAlign: 1,
                 hAlign: 0,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 200
         },
@@ -27,13 +27,13 @@ var BillsGridSetting = {
                 spanRows: [2],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'name',
                 vAlign: 1,
                 hAlign: 0,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 150
         },
@@ -44,13 +44,13 @@ var BillsGridSetting = {
                 spanRows: [2],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'unit',
                 vAlign: 1,
                 hAlign: 1,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 40
         },
@@ -61,13 +61,13 @@ var BillsGridSetting = {
                 spanRows: [2],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'Quantity',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -78,13 +78,13 @@ var BillsGridSetting = {
                 spanRows: [2],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'UnitPrice',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -95,13 +95,13 @@ var BillsGridSetting = {
                 spanRows: [1, 1],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'DesignQuantity',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -112,13 +112,13 @@ var BillsGridSetting = {
                 spanRows: [1, 1],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'DesignQuantity2',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -129,13 +129,13 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'ID',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -146,13 +146,13 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'ParentID',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -163,13 +163,13 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'NextSiblingID',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -180,13 +180,13 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'FeesIndex.labour.unitFee',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -197,13 +197,13 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'FeesIndex.machine.unitFee',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         },
@@ -214,19 +214,20 @@ var BillsGridSetting = {
                 spanRows: [2, 0],
                 vAlign: [1, 1],
                 hAlign: [1, 1],
-                font: '9px Arial'
+                font: 'Arial'
             },
             data: {
                 field: 'FlagsIndex.isPartGather.flag',
                 vAlign: 1,
                 hAlign: 2,
-                font: '9px Arial'
+                font: 'Arial'
             },
             width: 60
         }
     ],
     headRows: 2,
-    headRowHeight: [20, 20, 20],
+    headRowHeight: [20, 20],
+    defaultRowHeight: 21,
     emptyRows: 3,
     treeCol: 0
 };

+ 1 - 1
web/fees/feeRate.html

@@ -117,7 +117,7 @@
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script src="/lib/global.js"></script>
-    <script src="/web/fees/feeRate.js"></script>
+    <script src="/web/fee_rates/fee_rate.js"></script>
 </body>
 <script type="text/javascript">
     autoFlashHeight();

+ 4 - 4
web/fees/feeRate.js

@@ -24,7 +24,7 @@ $(document).ready(function () {
 function loadProjectFeeRates(fileID) {
     $.ajax({
         type: "POST",
-        url: '/fees/getProjectFeeRates',
+        url: '/feeRates/getProjectFeeRates',
         data: {"fileID": fileID},
         success: function (result) {
             if (result.data) {
@@ -43,7 +43,7 @@ function loadStdFeeRateLibNames(region) {
 
     $.ajax({
         type: "POST",
-        url: '/fees/getLibNames',
+        url: '/feeRates/getLibNames',
         data: {"region": region},
         success: function (result) {
             if (result.data) {
@@ -63,7 +63,7 @@ function loadStdFeeRateLibNames(region) {
 function loadLibFeeRates(libID) {
     $.ajax({
         type: "POST",
-        url: '/fees/getLibFeeRates',
+        url: '/feeRates/getLibFeeRates',
         data: {"libID": libID},
         success: function (result) {
             if (result.data) {
@@ -153,7 +153,7 @@ function createSpreadView(canEdit) {
         update: function(params) {
             $.ajax({
                 type: 'POST',
-                url: '/fees/updateProjectFeeRate',
+                url: '/feeRates/updateProjectFeeRate',
                 data: {"fileID": feeRateFileID, "rateID": params.dataItem.ID, "rateValue": params.dataItem.rate},
                 success: function(data) {
                     var iCode = data.data;

+ 59 - 3
web/main/html/main.html

@@ -13,6 +13,8 @@
     <link rel="stylesheet" href="web/css/ztree/zTreeStyle.css" type="text/css">
     <!--SpreadJs-->
     <link rel="stylesheet" href="web/css/spreadjs/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <!-- jquery.contextmenu -->
+    <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
     <script src="lib/jquery/jquery.min.js"></script>
     <script src="lib/global.js"></script>
     <script>
@@ -474,6 +476,8 @@
     <script src="lib/tether/tether.min.js"></script>
     <script src="lib/bootstrap/bootstrap.min.js"></script>
     <script type="text/javascript" src="/lib/bootstrap/bootstrap-select.min.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
     <!-- Common -->
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>
     <!--报表 zTree -->
@@ -584,6 +588,7 @@
         billsSpread = new GC.Spread.Sheets.Workbook($('#billsSpread')[0], { sheetCount: 1 });
         billsSpread.options.tabStripVisible = false;
         billsSpread.options.scrollbarMaxAlign = true;
+        billsSpread.getActiveSheet().selectionPolicy(GC.Spread.Sheets.SelectionPolicy.single);
 
         // For Test
         /*datas.forEach(function (data) {
@@ -627,6 +632,57 @@
 
             }
         });
+
+        $.contextMenu({
+            selector: '#billsSpread',
+            build: function ($trigger, e) {
+                var target = SheetDataHelper.safeRightClickSelection($trigger, e, billsSpread);
+                controller.setTreeSelected(controller.tree.items[target.row]);
+                return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
+            },
+            items: {
+                "insertBills": {
+                    name: "插入清单",
+                    icon: 'fa-sign-in',
+                    disabled: function () {
+                        return project.mainTree.selected ? project.mainTree.selected.sourceType !== project.Bills.getSourceType() : false;
+                    }
+                },
+                "insertRation": {
+                    name: "插入定额",
+                    icon: 'fa-sign-in',
+                    disabled: function () {
+                        var selected = project.mainTree.selected;
+                        if (selected) {
+                            if (selected.sourceType === project.Ration.getSourceType()) {
+                                return false;
+                            } else if (selected.sourceType === project.Bills.getSourceType()) {
+                                return selected.source.children.length !== 0;
+                            };
+                        } else {
+                            return true;
+                        }
+                    }
+                },
+                "insertLJ": {
+                    name: "插入量价",
+                    icon: 'fa-sign-in',
+                    disabled: function () {
+                        var selected = project.mainTree.selected;
+                        if (selected) {
+                            if (selected.sourceType === project.Ration.getSourceType()) {
+                                return false;
+                            } else if (selected.sourceType === project.Bills.getSourceType()) {
+                                return selected.source.children.length !== 0;
+                            };
+                        } else {
+                            return true;
+                        }
+                    }
+                }
+            }
+        });
+
         /*CommonAjax.post('/bills/getBills', {}, function (bills) {
             project.Bills.loadDatas(bills);
             project.Ration.loadDatas([]);
@@ -660,9 +716,9 @@
             if (!selected || selected.sourceType === project.Bills.getSourceType()) {
                 newSource = project.Bills.tree.insert(selected ? selected.source.getParentID() : -1, selected ? selected.source.getNextSiblingID() : -1);
                 newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID());
-            } else if (selected.sourceType === project.Rations.getSourceType()) {
+            } else if (selected.sourceType === project.Ration.getSourceType()) {
 
-            } else if (selected.sourceType === project.GLJs.getSourceType()) {
+            } else if (selected.sourceType === project.GLJ.getSourceType()) {
 
             }
 
@@ -691,7 +747,7 @@
                     project.Bills.delete(selected.source.getID());
                     controller.delete();
                 } else if (selected.sourceType === project.Rations.getSourceType()) {
-                    project.Rations.delete(selected.source);
+                    project.Ration.delete(selected.source);
                     controller.delete();
                 };
             }

+ 2 - 1
web/main/js/models/bills.js

@@ -8,7 +8,8 @@ var Bills = {
             id: 'ID',
             pid: 'ParentID',
             nid: 'NextSiblingID',
-            rootId: -1
+            rootId: -1,
+            autoUpdate: false
         };
 
         // 用户定义private方法

+ 290 - 223
web/main/js/views/std_bills_lib.js

@@ -2,8 +2,164 @@
  * Created by Mai on 2017/5/16.
  */
 
-/*var stdBillsLibController = {
+/**
+ * showObj = {bills, jobAndFeatureTab, job, feature, remarkTab, remark}
+ */
+/*var stdBillsLibObj = {
+    createNew: function (sessionID, showObj) {
+        var tools = {
+            sessionID: sessionID,
+            billsSpread: null,
+            billsJobSpread: null,
+            billsFeatureSpread: null,
+            checkSpread: function (spread, spreadObj) {
+                if (!spread) {
+                    spread = SheetDataHelper.createNewSpread(spreadObj);
+                }
+            }
+        };
+        var libObj = function () {
+            this.billsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
+            this.spread = tools.billsSpread;
+        };
 
+        libObj.prototype.LoadStdBills = function () {
+            tools.checkSpread(tools.billsSpread, showObj.bills);
+
+        };
+
+        return new libObj(sessionID);
+    },
+    settings: {
+        stdBillsTreeSetting: {
+            "treeCol": 0,
+            "emptyRows":0,
+            "headRows":1,
+            "headRowHeight":[
+                35
+            ],
+            "cols":[{
+                "width":100,
+                "readOnly":null,
+                "head":{
+                    "titleNames":["项目编码"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"]
+                },
+                "data":{
+                    "field":"code",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }, {
+                "width":120,
+                "readOnly":null,
+                "head":{
+                    "titleNames":["项目名称"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"]
+                },
+                "data":{
+                    "field":"name",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }, {
+                "width":40,
+                "readOnly":null,
+                "head":{
+                    "titleNames":["计量单位"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"],
+                    "wordWrap": true
+                },
+                "data":{
+                    "field":"unti",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }, {
+                "width":100,
+                "readOnly": true,
+                "head":{
+                    "titleNames":["工程量计算规则"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"]
+                },
+                "data":{
+                    "field":"ruleText",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }]
+        },
+        stdBillsJobSetting: {
+            "emptyRows":0,
+            "headRows":1,
+            "headRowHeight":[
+                20
+            ],
+            "cols":[{
+                "width":200,
+                "readOnly":true,
+                "head":{
+                    "titleNames":["工程内容"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"]
+                },
+                "data":{
+                    "field":"content",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }]
+        },
+        stdBillsFeatureSetting: {
+            "emptyRows":0,
+            "headRows":1,
+            "headRowHeight":[
+                20
+            ],
+            "cols":[{
+                "width":200,
+                "readOnly":null,
+                "head":{
+                    "titleNames":["项目特征"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["12px Arial"]
+                },
+                "data":{
+                    "field":"content",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"12px Arial"
+                }
+            }]
+        }
+    }
 };*/
 
 CommonAjax.post('/stdBillsEditor/getStdBillsLib', {userId: userID}, function (datas) {
@@ -22,136 +178,84 @@ var LoadStdBills = (function () {
     var stdBillsSpread = SheetDataHelper.createNewSpread($('#stdBillsSpread')[0]);
     var stdBillsJobSpread = null, stdBillsFeatureSpread = null;
     var stdBillsTreeSetting = {
-            "treeCol": 0,
-            "emptyRows":0,
-            "headRows":1,
-            "headRowHeight":[
-                35
-            ],
-            "cols":[
-                {
-                    "width":100,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "项目编码"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ]
-                    },
-                    "data":{
-                        "field":"code",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
-                },
-                {
-                    "width":120,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "项目名称"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ]
-                    },
-                    "data":{
-                        "field":"name",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
-                },
-                {
-                    "width":40,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "计量单位"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ],
-                        "wordWrap": true
-                    },
-                    "data":{
-                        "field":"unti",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
-                },
-                {
-                    "width":100,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "工程量计算规则"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ]
-                    },
-                    "data":{
-                        "field":"ruleText",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
-                }
-            ]
-        };
+        "treeCol": 0,
+        "emptyRows":0,
+        "headRows":1,
+        "headRowHeight":[
+            40
+        ],
+        "defaultRowHeight": 21,
+        "cols":[{
+            "width":150,
+            "readOnly":null,
+            "head":{
+                "titleNames":["项目编码"],
+                "spanCols":[1],
+                "spanRows":[1],
+                "vAlign":[1],
+                "hAlign":[1],
+                "font":["Arial"]
+            },
+            "data":{
+                "field":"code",
+                "vAlign":1,
+                "hAlign":0,
+                "font":"Arial"
+            }
+        }, {
+            "width":120,
+            "readOnly":null,
+            "head":{
+                "titleNames":["项目名称"],
+                "spanCols":[1],
+                "spanRows":[1],
+                "vAlign":[1],
+                "hAlign":[1],
+                "font":["Arial"]
+            },
+            "data":{
+                "field":"name",
+                "vAlign":1,
+                "hAlign":0,
+                "font":"Arial"
+            }
+        }, {
+            "width":40,
+            "readOnly":null,
+            "head":{
+                "titleNames":["计量单位"],
+                "spanCols":[1],
+                "spanRows":[1],
+                "vAlign":[1],
+                "hAlign":[1],
+                "font":["Arial"],
+                "wordWrap": true
+            },
+            "data":{
+                "field":"unit",
+                "vAlign":1,
+                "hAlign":1,
+                "font":"Arial"
+            }
+        }, {
+            "width":100,
+            "readOnly": true,
+            "head":{
+                "titleNames":["工程量计算规则"],
+                "spanCols":[1],
+                "spanRows":[1],
+                "vAlign":[1],
+                "hAlign":[1],
+                "font":["Arial"]
+            },
+            "data":{
+                "field":"ruleText",
+                "vAlign":1,
+                "hAlign":0,
+                "font":"Arial"
+            }
+        }]
+    };
     var stdBillsData, stdBillsJobData, stdBillsFeatureData;
     var stdBillsTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
     var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(stdBillsTree, stdBillsSpread.getActiveSheet(), stdBillsTreeSetting);
@@ -167,7 +271,7 @@ var LoadStdBills = (function () {
     };
     var getBillsJobs = function (node) {
         var jobs = [], i, jobData = null;
-        if (node && node.data.jobs) {
+        if (stdBillsJobData && node && node.data.jobs) {
             for (i = 0; i < node.data.jobs.length - 1; i++) {
                 jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
                 if (jobData) {
@@ -179,7 +283,7 @@ var LoadStdBills = (function () {
     };
     var getBillsFeatures = function (node) {
         var features = [], i, featureData = null;
-        if (node && node.data.items) {
+        if (stdBillsFeatureData && node && node.data.items) {
             for (i = 0; i < node.data.items.length - 1; i++) {
                 featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
                 if (featureData) {
@@ -189,46 +293,30 @@ var LoadStdBills = (function () {
         }
         return features;
     };
-
     var showJobs = function (jobs) {
         var jobsSetting = {
             "emptyRows":0,
             "headRows":1,
-            "headRowHeight":[
-                20
-            ],
-            "cols":[
-                {
-                    "width":200,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "工程内容"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ]
-                    },
-                    "data":{
-                        "field":"content",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
+            "headRowHeight":[25],
+            "defaultRowHeight": 21,
+            "cols":[{
+                "width":200,
+                "readOnly":true,
+                "head":{
+                    "titleNames":["工程内容"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
+                },
+                "data":{
+                    "field":"content",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"Arial"
                 }
-            ]
+            }]
         };
         SheetDataHelper.loadSheetHeader(jobsSetting, stdBillsJobSpread.getActiveSheet());
         SheetDataHelper.loadSheetData(jobsSetting, stdBillsJobSpread.getActiveSheet(), jobs);
@@ -237,46 +325,30 @@ var LoadStdBills = (function () {
         var featuresSetting = {
             "emptyRows":0,
             "headRows":1,
-            "headRowHeight":[
-                20
-            ],
-            "cols":[
-                {
-                    "width":200,
-                    "readOnly":null,
-                    "head":{
-                        "titleNames":[
-                            "项目特征"
-                        ],
-                        "spanCols":[
-                            1
-                        ],
-                        "spanRows":[
-                            1
-                        ],
-                        "vAlign":[
-                            1
-                        ],
-                        "hAlign":[
-                            1
-                        ],
-                        "font":[
-                            "12px Arial"
-                        ]
-                    },
-                    "data":{
-                        "field":"content",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
+            "headRowHeight":[25],
+            "defaultRowHeight": 21,
+            "cols":[{
+                "width":200,
+                "readOnly":true,
+                "head":{
+                    "titleNames":["项目特征"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
+                },
+                "data":{
+                    "field":"content",
+                    "vAlign":0,
+                    "hAlign":3,
+                    "font":"Arial"
                 }
-            ]
+            }]
         };
         SheetDataHelper.loadSheetHeader(featuresSetting, stdBillsFeatureSpread.getActiveSheet());
         SheetDataHelper.loadSheetData(featuresSetting, stdBillsFeatureSpread.getActiveSheet(), features);
     }
-
     var showJobsAndFeatures = function (node) {
         $('#stdBillsJobTab').show();
         $('#stdBillsRemarkTab').hide();
@@ -289,28 +361,20 @@ var LoadStdBills = (function () {
         }
         showFeatures(getBillsFeatures(node));
     };
-
     var showBillsRemark = function (node) {
         $('#stdBillsJobTab').hide();
         $('#stdBillsRemarkTab').show();
         $('#stdBillsRemark').text(node && node.data.recharge ? node.data.recharge : '');
     };
+    var showBillsRela = function (node) {
+        if (node && node.children.length === 0) {
+            showJobsAndFeatures(node);
+        } else {
+            showBillsRemark(node);
+        }
+    }
 
     var LoadData = function (stdBillsLibID) {
-        CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
-            stdBills = datas;
-            stdBillsTree.loadDatas(stdBills);
-            stdBillsTreeController.showTreeData();
-            showBillsRemark(stdBillsTree.firstNode());
-
-            stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
-                if (node.children.length === 0) {
-                    showJobsAndFeatures(node);
-                } else {
-                    showBillsRemark(node);
-                }
-            });
-        });
         CommonAjax.post('/stdBillsEditor/getJobContent', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
             stdBillsJobData = datas;
         }, function () {
@@ -321,12 +385,15 @@ var LoadStdBills = (function () {
         }, function () {
             stdBillsFeatureData = [];
         });
-    };
+        CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
+            stdBills = datas;
+            stdBillsTree.loadDatas(stdBills);
+            stdBillsTreeController.showTreeData();
+            showBillsRela(stdBillsTree.firstNode());
 
-    stdBillsSpread.options.tabStripVisible = false;
-    stdBillsSpread.options.scrollbarMaxAlign = true;
-    stdBillsSpread.options.cutCopyIndicatorVisible = false;
-    stdBillsSpread.options.allowCopyPasteExcelStyle = false;
+            stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
+        });
+    };
 
     return LoadData;
 })();

+ 161 - 144
web/main/js/views/std_ration_lib.js

@@ -1,174 +1,191 @@
 /**
  * Created by Mai on 2017/5/16.
  */
+/*var rationChapterSpread, sectionRationsSpread;*/
 
-var rationChapterSpread, sectionRationsSpread;
-
-var LoadStdRationLibs = function () {
-    CommonAjax.postRationLib('/rationRepository/api/getRationDisplayNames', {user_id: userID}, function (datas) {
-        var select = $('#stdRationLibSelect');
-        select.empty();
-        datas.forEach(function (data) {
-            select.append($('<option>').val(data.ID).text(data.dispName));
-        });
-        if (select[0].options.length !== 0) {
-            LoadStdRation(select.val());
+var rationLibObj = {
+    rationChapterSpread: null,
+    sectionRationsSpread: null,
+    checkSpread: function () {
+        if (!this.rationChapterSpread) {
+            this.rationChapterSpread = SheetDataHelper.createNewSpread($('#stdRationChapter')[0]);
         }
-    }, function () {
-        $('#stdRationLibSelect').empty();
-    });
-};
-
-var LoadStdRation = (function () {
-    var rationChapterTreeSetting = {
-        "emptyRows":0,
-        "headRows":1,
-        "headRowHeight":[30],
-        "treeCol": 0,
-        "cols":[{
-            "width":300,
-            "readOnly": true,
-            "head":{
-                "titleNames":["名称"],
-                "spanCols":[1],
-                "spanRows":[1],
-                "vAlign":[1],
-                "hAlign":[1],
-                "font":["9px Arial"]
-            },
-            "data":{
-                "field":"name",
-                "vAlign":0,
-                "hAlign":3,
-                "font":"9px Arial"
+        if (!this.sectionRationsSpread) {
+            this.sectionRationsSpread = SheetDataHelper.createNewSpread($('#stdSectionRations')[0]);
+        }
+    },
+    loadStdRationLibs: function () {
+        CommonAjax.postRationLib('/rationRepository/api/getRationDisplayNames', {user_id: userID}, function (datas) {
+            var select = $('#stdRationLibSelect');
+            select.empty();
+            datas.forEach(function (data) {
+                select.append($('<option>').val(data.ID).text(data.dispName));
+            });
+            if (select[0].options.length !== 0) {
+                rationLibObj.loadStdRation(select.val());
             }
-        }]
-    };
-    var showRationChapterTree = function (datas) {
-        var rationChapterTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: false});
-        var rationChapterTreeController = TREE_SHEET_CONTROLLER.createNew(rationChapterTree, rationChapterSpread.getActiveSheet(), rationChapterTreeSetting);
-        rationChapterTree.loadDatas(datas);
-        rationChapterTreeController.showTreeData();
-
-        rationChapterTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
-            LoadSectionRations(node.getID());
+        }, function () {
+            $('#stdRationLibSelect').empty();
         });
+    },
+    loadStdRation: (function () {
+        var rationChapterTreeSetting = {
+            "emptyRows":0,
+            "headRows":1,
+            "headRowHeight":[30],
+            "defaultRowHeight": 21,
+            "treeCol": 0,
+            "cols":[{
+                "width":300,
+                "readOnly": true,
+                "head":{
+                    "titleNames":["名称"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
+                },
+                "data":{
+                    "field":"name",
+                    "vAlign":1,
+                    "hAlign":0,
+                    "font":"Arial"
+                }
+            }]
+        };
+        var showRationChapterTree = function (datas) {
+            var rationChapterTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: false});
+            var rationChapterTreeController = TREE_SHEET_CONTROLLER.createNew(rationChapterTree, rationLibObj.rationChapterSpread.getActiveSheet(), rationChapterTreeSetting);
+            rationChapterTree.loadDatas(datas);
+            rationChapterTreeController.showTreeData();
+
+            rationChapterTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
+                rationLibObj.loadSectionRations(node.getID());
+            });
 
-        if (rationChapterTree.firstNode()) {
-            LoadSectionRations(rationChapterTree.firstNode().getID());
-        } else {
-            LoadSectionRations();
+            if (rationChapterTree.firstNode()) {
+                rationLibObj.loadSectionRations(rationChapterTree.firstNode().getID());
+            } else {
+                rationLibObj.loadSectionRations();
+            };
         };
-    }
 
-    var LoadData = function (rationLibID) {
-        CommonAjax.postRationLib('/rationRepository/api/getRationTree', {userId: userID, rationRepositoryId: rationLibID}, function (datas) {
-            showRationChapterTree(datas);
-        }, function () {
-            showRationChapterTree([]);
-        });
-    };
+        var LoadData = function (rationLibID) {
+            CommonAjax.postRationLib('/rationRepository/api/getRationTree', {userId: userID, rationRepositoryId: rationLibID}, function (datas) {
+                showRationChapterTree(datas);
+            }, function () {
+                showRationChapterTree([]);
+            });
+        };
 
-    return LoadData;
-})();
-var LoadSectionRations = (function () {
-    var sectionRationsSetting = {
+        return LoadData;
+    })(),
+    loadSectionRations: (function () {
+        var sectionRationsSetting = {
             "emptyRows":3,
             "headRows":1,
             "headRowHeight":[20],
-            "cols":[
-                {
-                    "width":100,
-                    "readOnly": true,
-                    "head":{
-                        "titleNames":["编码"],
-                        "spanCols":[1],
-                        "spanRows":[1],
-                        "vAlign":[1],
-                        "hAlign":[1],
-                        "font":["12px Arial"]
-                    },
-                    "data":{
-                        "field":"code",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
+            "defaultRowHeight": 21,
+            "cols":[{
+                "width":100,
+                "readOnly": true,
+                "head":{
+                    "titleNames":["编码"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
+                },
+                "data":{
+                    "field":"code",
+                    "vAlign":1,
+                    "hAlign":0,
+                    "font":"Arial"
+                }
+            }, {
+                "width":180,
+                "readOnly": true,
+                "head":{
+                    "titleNames":["名称"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
                 },
-                {
-                    "width":180,
-                    "readOnly": true,
-                    "head":{
-                        "titleNames":["名称"],
-                        "spanCols":[1],
-                        "spanRows":[1],
-                        "vAlign":[1],
-                        "hAlign":[1],
-                        "font":["12px Arial"]
-                    },
-                    "data":{
-                        "field":"name",
-                        "vAlign":0,
-                        "hAlign":3,
-                        "font":"12px Arial"
-                    }
+                "data":{
+                    "field":"name",
+                    "vAlign":1,
+                    "hAlign":0,
+                    "font":"Arial"
+                }
+            }, {
+                "width":50,
+                "readOnly":true,
+                "head":{
+                    "titleNames":["单位"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
+                },
+                "data":{
+                    "field":"unit",
+                    "vAlign":1,
+                    "hAlign":1,
+                    "font":"Arial"
+                }
+            }, {
+                "width":80,
+                "readOnly":true,
+                "head":{
+                    "titleNames":["基价"],
+                    "spanCols":[1],
+                    "spanRows":[1],
+                    "vAlign":[1],
+                    "hAlign":[1],
+                    "font":["Arial"]
                 },
-                {
-                    "width":50,
-                    "readOnly":true,
-                    "head":{
-                        "titleNames":["单位"],
-                        "spanCols":[1],
-                        "spanRows":[1],
-                        "vAlign":[1],
-                        "hAlign":[1],
-                        "font":["12px Arial"]
-                    },
-                    "data":{
-                        "field":"unit",
-                        "vAlign":0,
-                        "hAlign":1,
-                        "font":"12px Arial"
-                    }
+                "data":{
+                    "field":"basePrice",
+                    "vAlign":1,
+                    "hAlign":2,
+                    "font":"Arial"
                 }
-            ]
+            }]
         };
-
-    var LoadData = function (sectionID) {
-        if (sectionID) {
-            CommonAjax.postRationLib('/rationRepository/api/getRationItems', {userId: userID, sectionID: sectionID}, function (datas) {
-                SheetDataHelper.loadSheetHeader(sectionRationsSetting, sectionRationsSpread.getActiveSheet());
-                SheetDataHelper.loadSheetData(sectionRationsSetting, sectionRationsSpread.getActiveSheet(), datas);
-            }, function () {
-                SheetDataHelper.loadSheetHeader(sectionRationsSetting, sectionRationsSpread.getActiveSheet());
-                SheetDataHelper.loadSheetData(sectionRationsSetting, sectionRationsSpread.getActiveSheet(), []);
-            });
-        } else {
-            SheetDataHelper.loadSheetHeader(sectionRationsSetting, sectionRationsSpread.getActiveSheet());
-            SheetDataHelper.loadSheetData(sectionRationsSetting, sectionRationsSpread.getActiveSheet(), []);
+        var showDatas = function (datas) {
+            SheetDataHelper.loadSheetHeader(sectionRationsSetting, rationLibObj.sectionRationsSpread.getActiveSheet());
+            SheetDataHelper.loadSheetData(sectionRationsSetting, rationLibObj.sectionRationsSpread.getActiveSheet(), datas);
         }
-    };
-
-    return LoadData;
-})();
+        var LoadData = function (sectionID) {
+            if (sectionID) {
+                CommonAjax.postRationLib('/rationRepository/api/getRationItems', {userId: userID, sectionID: sectionID}, function (datas) {
+                    showDatas(datas);
+                }, function () {
+                    showDatas([]);
+                });
+            } else {
+                showDatas([]);
+            }
+        };
+        return LoadData;
+    })()
+};
 
 $('#stdRationTab').on('shown.bs.tab', function (e) {
     var select = $('#stdRationLibSelect');
-    if (!rationChapterSpread) {
-        rationChapterSpread = SheetDataHelper.createNewSpread($('#stdRationChapter')[0]);
-    }
-    if (!sectionRationsSpread) {
-        sectionRationsSpread = SheetDataHelper.createNewSpread($('#stdSectionRations')[0]);
-    }
+    rationLibObj.checkSpread();
     if (select[0].options.length === 0) {
-        LoadStdRationLibs();
+        rationLibObj.loadStdRationLibs();
     };
 });
-
 $('#stdRationLibSelect').change(function () {
     var select = $(this);
     if (this.children.length !== 0) {
-        LoadStdRation(select.val());
+        rationLibObj.loadStdRation(select.val());
     }
-    rationChapterSpread.getActiveSheet().repaint();
 });

+ 0 - 928
web/rationLibEditor/dinge.html

@@ -1,928 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器</title>
-    <link rel="stylesheet" href="/web/css/bootstrap/bootstrap.min.css">
-   <!-- <link rel="stylesheet" href="/lib/css/bootstrap/themes.css">-->
-    <link rel="stylesheet" href="/web/css/main.css">
-    <link rel="stylesheet" href="/web/css/font-awesome/font-awesome.min.css">
-    <!--zTree-->
-  	<link rel="stylesheet" href="/web/css/ztree/zTreeStyle.css" type="text/css">
-    <link rel="stylesheet" href="/web/css/spreadjs/gc.spread.sheets.10.0.1.css" type="text/css">
-
-</head>
-
-<body>
-    <div class="header">
-        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
-            <span class="header-logo px-2">Smartcost</span>
-            <div id="rationname" class="navbar-text"><a href="main">定额库</a><i class="fa fa-angle-right fa-fw"></i>XXX定额库</div>
-        </nav>
-        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
-              <ul class="nav nav-tabs" role="tablist">
-                  <li class="nav-item">
-                      <a class="nav-link active px-3" id ="dinge" >定额</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link px-3" id="gongliao" href="/rationLibEditor/lmm">工料机</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link px-3" id="fuzhu" href="/rationLibEditor/fuzhu">附注条件</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link px-3" href="#maz">安装增加费</a>
-                  </li>
-              </ul>
-        </nav>
-    </div>
-    <div class="main">
-        <div class="content">
-            <div class="container-fluid">
-                <div class="row">
-                  <div class="main-side col-lg-3 p-0">
-                      <div class="tab-bar">
-                          <!--
-                          <a href="#" class="btn btn-secondary btn-sm">创建默认章节树</a>
-                          -->
-                          <a onclick="zTreeOprObj.addRootNode()" class="btn btn-secondary btn-sm">增加根节点</a>
-                      </div>
-                    <div class="tab-content">
-                      <ul id="rationChapterTree" class="ztree"></ul>
-                    </div>
-                  </div>
-                  <div class="main-content col-lg-9 p-0">
-                        <div class="top-content">
-                          <ul class="nav nav-tabs" role="tablist">
-                              <li class="nav-item">
-                                  <a class="nav-link active" data-toggle="tab" href="#tde" role="tab">定额</a>
-                              </li>
-                              <li class="nav-item">
-                                  <a class="nav-link" data-toggle="tab" href="#tsm" role="tab">说明</a>
-                              </li>
-                              <li class="nav-item">
-                                  <a class="nav-link" data-toggle="tab" href="#tjs" role="tab">计算规则</a>
-                              </li>
-                              <li class="nav-item">
-                                  <a class="nav-link" data-toggle="tab" href="#tgz" role="tab">工作内容</a>
-                              </li>
-                          </ul>
-                          <!-- Tab panes -->
-                          <div class="tab-content">
-                              <div class="tab-pane active" id="tde" role="tabpanel">
-                                 <div id="rationItemsSheet" class="warp-p2" style='width:100%; height:400px;'></div>
-                              </div>
-                              <div class="tab-pane" id="tsm" role="tabpanel">
-                                  <div class="warp-p2">
-                                    <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#editTsm" title="编辑">编辑说明</a></div>
-                                    <div class="main-content">
-                                      <h5>说明</h5><p>一、一般说明</p><p>1.土壤及岩石分类,详见土壤及岩石分类表。</p><p>2.....</p>
-                                    </div>
-                                  </div>
-                              </div>
-                              <div class="tab-pane" id="tjs" role="tabpanel">
-                                  <div class="warp-p2">
-                                    <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#editTjs" title="编辑">编辑计算规则</a></div>
-                                    <div class="main-content">
-                                      <h5>计算规则</h5>
-                                      <p>土壤、岩石体积,均按挖掘前的天然密度体积以立方米计算。.....</p>
-                                    </div>
-                                  </div>
-                              </div>
-                              <div class="tab-pane" id="tgz" role="tabpanel">
-                                <div class="warp-p2">
-                                  <p class="m-2">适合本项所有定额</p>
-                                  <table class="table table-sm table-bordered m-0">
-                                    <thead>
-                                      <tr>
-                                        <th>工作内容</th>
-                                        <th>操作</th>
-                                      </tr>
-                                    </thead>
-                                    <tbody>
-                                      <tr rowspan="4">
-                                        <td>1.挖土、修理边底。</td>
-                                        <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editNewgznr" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                                      </tr>
-                                    </tbody>
-                                  </table>
-                                  <p class="m-2">适合本项部分定额</p>
-                                  <table class="table table-sm table-bordered m-0">
-                                    <thead>
-                                      <tr>
-                                        <th>编码</th>
-                                        <th>工作内容</th>
-                                        <th>操作</th>
-                                      </tr>
-                                    </thead>
-                                    <tbody>
-                                      <tr rowspan="4">
-                                        <td><p class="m-0">AA0017</p><p class="m-0">AA0018</p><p class="m-0">AA0019</p><p class="m-0">AA0020</p></td>
-                                        <td>1.挖土、修理边底。</td>
-                                        <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editNewgznr" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                                      </tr>
-                                    </tbody>
-                                  </table>
-                                  <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#addNewgznr" class="btn btn-primary btn-sm">新增工作内容</a></div>
-                                </div>
-                              </div>
-                          </div>
-                        </div>
-                        <div class="bottom-content">
-                            <ul class="nav nav-tabs" role="tablist">
-                                <li class="nav-item">
-                                    <a class="nav-link active" data-toggle="tab" href="#bglj" role="tab">工料机</a>
-                                </li>
-                                <li class="nav-item">
-                                    <a class="nav-link" data-toggle="tab" href="#bfzd" role="tab">辅助定额调整</a>
-                                </li>
-                                <li class="nav-item">
-                                    <a class="nav-link" data-toggle="tab" href="#bfzt" role="tab">附注条件调整</a>
-                                </li>
-                                <li class="nav-item">
-                                    <a class="nav-link" data-toggle="tab" href="#baz" role="tab">安装增加费</a>
-                                </li>
-                            </ul>
-                            <!-- Tab panes -->
-                            <div class="tab-content">
-                                <div class="tab-pane active" id="bglj" role="tabpanel">
-                                   <div id="rationGLJSheet" class="warp-p2">
-                                       <!--       <table class="table table-sm table-bordered m-0" id="rationGLJTbody">
-                                               <thead><tr><th width="30"></th><th width="120">编码</th><th>名称</th><th>单位</th><th>基价单位</th><th>定额消耗</th><th>类型</th><th width="90">操作</th></tr></thead>
-                                               <tbody>
-
-                                               </tbody>
-                                             </table>
-                                           <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#addBglj" id="mkaddglj"  class="btn btn-primary btn-sm">添加</a></div>
-                                          -->
-                                   </div>
-
-                                </div>
-                                <div class="tab-pane" id="bfzd" role="tabpanel">
-                                    <div class="warp-p2">
-                                      <table class="table table-sm table-bordered m-0">
-                                          <thead><tr><th width="30"></th><th width="120">调整名称</th><th>序号</th><th>参数最大值</th><th>辅助定额号</th><th>参数名称</th><th>标准值</th><th>步距</th><th>精度</th><th>进位方式</th><th width="90">操作</th></tr></thead>
-                                          <tbody>
-                                            <tr>
-                                              <td>1</td><td>运距m</td><td>0</td><td></td><td>AA0012</td><td>运距m</td>
-                                              <td>20</td><td>20</td><td>0</td><td>四舍五入</td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#editBfzd" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                                            </tr>
-                                          </tbody>
-                                        </table>
-                                        <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#addBfzd" class="btn btn-primary btn-sm">添加</a></div>
-                                    </div>
-                                </div>
-                                <div class="tab-pane " id="bfzt" role="tabpanel">
-                                    <div class="warp-p2">
-                                        <table class="table table-sm table-bordered m-0">
-                                          <thead><tr><th width="30"></th><th width="40">编号</th><th width="120">本分项全部适用</th><th>调整顺序</th><th>名称</th><th>内容</th><th width="90">操作</th></tr></thead>
-                                          <tbody>
-                                            <tr>
-                                              <td>1</td><td>1</td><td><i class="fa fa-check"></i></td><td>2</td><td>挖湿土时</td><td>人工x1.18</td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#editFztj" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                                            </tr>
-                                          </tbody>
-                                        </table>
-                                        <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#addFztj" class="btn btn-primary btn-sm">添加</a></div>
-                                    </div>
-                                </div>
-                                <div class="tab-pane" id="baz" role="tabpanel">
-                                    <div class="warp-p2">
-                                        安装增加费
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                  </div>
-                </div>
-            </div>
-        </div>
-    </div>
-    <!--弹出添加-->
-    <div class="modal fade" id="add" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加定额</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" id="code" placeholder="输入编码" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" id="name" placeholder="输入名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>单位</label>
-                      <select class="form-control" id = "danwei"><option>选择单位</option><option>m3</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>基价</label>
-                      <input class="form-control" id="jijia" placeholder="输入基价" type="number" value=0 disabled = true>
-                    </div>
-                    <div class="form-group">
-                      <label>显示名称(以%s表示参数)</label>
-                      <input class="form-control" id ="xsname" placeholder="输入显示名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>默认取费专业</label>
-                      <input class="form-control" id="qfzy" placeholder="输入取费专业" type="text">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-secondary" id="rationAdd" data-dismiss="modal">添加</button>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="addBglj" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <input type="hidden" id="gljparam" value="">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加工料机</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" placeholder="输入编码" id="bt-inputCode" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" id ="gljName" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>单位</label>
-                      <select class="form-control" id="gljdw"><option>选择单位</option><option>工日</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>基价单价</label>
-                      <input class="form-control" placeholder="输入基价单价" id="gljdj" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>定额消耗</label>
-                      <input class="form-control" placeholder="输入定额消耗" id="gljxh" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>类型</label>
-                      <input class="form-control" placeholder="输入类型" id="gljlx" type="text">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-secondary" id="bt-glj" data-dismiss="modal">添加</button>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="addBfzd" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加辅助定额调整</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>调整名称</label>
-                      <input class="form-control" placeholder="输入调整名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>序号</label>
-                      <input class="form-control" placeholder="输入序号" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>参数最大值</label>
-                      <input class="form-control" placeholder="输入参数最大值" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>辅助定额号</label>
-                      <input class="form-control" placeholder="输入辅助定额号" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>参数名称</label>
-                      <input class="form-control" placeholder="输入参数名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>标准值</label>
-                      <input class="form-control" placeholder="输入标准值" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>步距</label>
-                      <input class="form-control" placeholder="输入步距" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>精度</label>
-                      <input class="form-control" placeholder="输入类型" type="number" value="0">
-                    </div>
-                    <div class="form-group">
-                      <label>进位方式</label>
-                      <select class="form-control"><option>选择进位方式</option><option>四舍五入</option><option>向上取整</option></select>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">添加</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editFztj" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑附注条件</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>本分项是否全部适用</label>
-                      <select class="form-control" id="exampleSelect1"><option>是</option><option>否</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>调整顺序</label>
-                      <select class="form-control" id="exampleSelect1"><option>2</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入编码" type="text" value="AA0017">
-                    </div>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <select class="form-control" id="exampleSelect1"><option>人工×1.18</option></select>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="addFztj" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑附注条件</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>本分项是否全部适用</label>
-                      <select class="form-control" id="exampleSelect1"><option>是</option><option>否</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>调整顺序</label>
-                      <select class="form-control" id="exampleSelect1"><option>2</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <select class="form-control" id="exampleSelect1"><option>人工×1.18</option></select>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="addNewgznr" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加工作内容</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>选择</label>
-                      <select class="form-control" id="exampleSelect1"><option>适合本项所有定额</option><option>适合本项部分定额</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                  <form>
-                    <div class="form-group">
-                      <label>选择</label>
-                      <select class="form-control" id="exampleSelect1"><option>适合本项部分定额</option><option>适合本项所有定额</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <div class="form-control">
-                        <div class="row code">
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0017
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0018
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0019
-                            </label>
-                          </div>
-                          <div class="w-100"></div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0020
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0021
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0022
-                            </label>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <!--弹出编辑-->
-    <div class="modal fade" id="edit" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑定额</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" id="ERcode"  placeholder="输入编码" type="text" value="AA0001">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" id="ERname" placeholder="输入名称" type="text" value="人工挖土方">
-                    </div>
-                    <div class="form-group">
-                      <label>单位</label>
-                      <select class="form-control" id = "ERdanwei"><option>m3</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>基价</label>
-                      <input class="form-control" placeholder="输入基价" type="number" value="0" id="ERjijia" disabled = true>
-                    </div>
-                    <div class="form-group">
-                      <label>显示名称(以%s表示参数)</label>
-                      <input class="form-control" placeholder="输入显示名称" type="text" value="人工挖土方" id="ERxsmc">
-                    </div>
-                    <div class="form-group">
-                      <label>默认取费专业</label>
-                      <input class="form-control" placeholder="输入取费专业" type="text" value="1" id ="ERqfzy">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-secondary" id="Rbianji" data-dismiss="modal">确定</button>
-
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editBglj" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑工料机</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" placeholder="输入编码" type="text" value="00010201" id="ERGCode">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" type="text" value="土石方综合工日" id="ERGname">
-                    </div>
-                    <div class="form-group">
-                      <label>单位</label>
-                      <select class="form-control"  id="ERGdanwei"><option>工日</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>基价单价</label>
-                      <input class="form-control" placeholder="输入基价单价" type="number" value="22.00" id="ERGjijia">
-                    </div>
-                    <div class="form-group">
-                      <label>定额消耗</label>
-                      <input class="form-control" placeholder="输入定额消耗" type="number" value="38.220" id="ERGxh">
-                    </div>
-                    <div class="form-group">
-                      <label>类型</label>
-                      <input class="form-control" placeholder="输入类型" type="text" value="人工" id="ERGleixing">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal" id="RGbianji">确定</button>
-
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editBfzd" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑辅助定额调整</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>调整名称</label>
-                      <input class="form-control" placeholder="输入调整名称" type="text" value="运距m">
-                    </div>
-                    <div class="form-group">
-                      <label>序号</label>
-                      <input class="form-control" placeholder="输入序号" type="number" value="0">
-                    </div>
-                    <div class="form-group">
-                      <label>参数最大值</label>
-                      <input class="form-control" placeholder="输入参数最大值" type="number">
-                    </div>
-                    <div class="form-group">
-                      <label>辅助定额号</label>
-                      <input class="form-control" placeholder="输入辅助定额号" type="text" value="AA0012">
-                    </div>
-                    <div class="form-group">
-                      <label>参数名称</label>
-                      <input class="form-control" placeholder="输入参数名称" type="text" value="运距m">
-                    </div>
-                    <div class="form-group">
-                      <label>标准值</label>
-                      <input class="form-control" placeholder="输入标准值" type="number" value="20">
-                    </div>
-                    <div class="form-group">
-                      <label>步距</label>
-                      <input class="form-control" placeholder="输入步距" type="number" value="20">
-                    </div>
-                    <div class="form-group">
-                      <label>精度</label>
-                      <input class="form-control" placeholder="输入类型" type="number" value="0">
-                    </div>
-                    <div class="form-group">
-                      <label>进位方式</label>
-                      <select class="form-control"><option>四舍五入</option></select>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editTsm" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑说明</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editTjs" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑计算规则</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editFde" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑本项部分定额</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>选择</label>
-                      <select class="form-control" id="exampleSelect1"><option>是</option><option>否</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" placeholder="输入编码" type="text" value="AA0017">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editFztj" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑附注条件</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>本分项是否全部适用</label>
-                      <select class="form-control" id="exampleSelect1"><option>是</option><option>否</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>调整顺序</label>
-                      <select class="form-control" id="exampleSelect1"><option>2</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" type="text" value="AA0017">
-                    </div>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <select class="form-control" id="exampleSelect1"><option>人工×1.18</option></select>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editNewgznr" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加工作内容</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>选择</label>
-                      <select class="form-control" id="exampleSelect1"><option>适合本项所有定额</option><option>适合本项部分定额</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                  <form>
-                    <div class="form-group">
-                      <label>选择</label>
-                      <select class="form-control" id="exampleSelect1"><option>适合本项部分定额</option><option>适合本项所有定额</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <div class="form-control">
-                        <div class="row code">
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0017
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0018
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1" checked> AA0019
-                            </label>
-                          </div>
-                          <div class="w-100"></div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0020
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0021
-                            </label>
-                          </div>
-                          <div class="col">
-                            <label class="form-check-label">
-                              <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> AA0022
-                            </label>
-                          </div>
-                        </div>
-                      </div>
-                    </div>
-
-                    <div class="form-group">
-                      <label>内容</label>
-                      <textarea class="form-control" id="" rows="5"></textarea>
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!--弹出删除-->
-    <div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <input type="hidden" id="delType" value="">
-        <input type="hidden" id="delParam" value="">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">删除确认</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                    <h5 class="text-danger">删除后无法恢复,确认是否删除?</h5>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <button type="button" class="btn btn-secondary" id="shanchu" data-dismiss="modal">删除</button>
-                </div>
-            </div>
-        </div>
-    </div>
-    <!-- JS. -->
-    <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
-    <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
-    <script src="/lib/jquery/jquery.min.js"></script>
-    <script src="/lib/tether/tether.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
-    <script src="/lib/global.js"></script>
-    <!-- zTree -->
-  	<script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
-  	<script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
-    <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/chapterTree.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/zTreeCommon.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/sheetCommon.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/ration.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/rationGLJ.js"></script>
-    <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
-    <script type="text/javascript" src="/public/QueryParam.js"></script>
-    <script type="text/javascript" src="/public/storageUtil.js"></script>
-    <script type="text/javascript">
-        var setting = {
-            view: {
-                addHoverDom: zTreeOprObj.addHoverDom,
-                removeHoverDom: zTreeOprObj.removeHoverDom,
-                expandSpeed: "",
-                selectedMulti: false
-            },
-            edit: {
-                enable: true,
-                editNameSelectAll: true,
-                showRemoveBtn: true,
-                showRenameBtn: true,
-                removeTitle: "删除节点",
-                renameTitle: "更改名称"
-            },
-            data: {
-                keep: {
-                    parent:true,
-                    leaf:true
-                },
-                key: {
-                    children: "items"
-                },
-                simpleData: {
-                    enable: true,
-                    idKey: "ID",
-                    pIdKey: "ParentID",
-                    rootPId: -1
-                }
-            },
-            callback:{
-                onClick: zTreeOprObj.onClick,
-                beforeRename: zTreeOprObj.beforeRename,
-                beforeRemove: zTreeOprObj.onBeforeRemove,
-                onRemove: zTreeOprObj.onRemove,
-                onRename: zTreeOprObj.onRename
-            }
-        };
-  	</script>
-</body>
-<script type="text/javascript">
-    autoFlashHeight();
-    $(document).ready(function(){
-        pageOprObj.initPage();
-        rationOprObj.buildSheet($("#rationItemsSheet")[0]);
-        rationGLJOprObj.buildSheet($("#rationGLJSheet")[0]);
-        sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);
-        sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting);
-    });
-</script>
-
-</html>

+ 0 - 338
web/rationLibEditor/fuzhu.html

@@ -1,338 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>定额库编辑器</title>
-    <link rel="stylesheet" href="/web/css/bootstrap/bootstrap.min.css">
-    <link rel="stylesheet" href="/web/css/bootstrap/themes.css">
-    <link rel="stylesheet" href="/web/css/main.css">
-    <link rel="stylesheet" href="/web/css/font-awesome/font-awesome.min.css">
-    <!--zTree-->
-  	<link rel="stylesheet" href="/web/css/ztree/zTreeStyle.css" type="text/css">
-</head>
-
-<body>
-    <div class="header">
-        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
-            <span class="header-logo px-2">Smartcost</span>
-            <div id="rationname" class="navbar-text"><a href="main.html">定额库</a><i class="fa fa-angle-right fa-fw"></i>XXX定额库</div>
-        </nav>
-        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
-              <ul class="nav nav-tabs" role="tablist">
-                  <li class="nav-item">
-                      <a class="nav-link px-3" href="dinge.html">定额</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link px-3" href="gongliao.html">工料机</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link active px-3" href="fuzhu.html">附注条件</a>
-                  </li>
-                  <li class="nav-item">
-                      <a class="nav-link px-3" href="#maz">安装增加费</a>
-                  </li>
-              </ul>
-        </nav>
-    </div>
-    <div class="main">
-        <div class="content">
-            <div class="container-fluid">
-                <div class="row">
-                  <div class="main-side col-lg-7 p-0">
-                    <table class="table table-sm table-bordered m-0">
-                      <thead>
-                        <tr>
-                          <th></th>
-                          <th>编号</th>
-                          <th>名称</th>
-                          <th>内容</th>
-                        </tr>
-                      </thead>
-                      <tbody>
-                        <tr class="table-active">
-                          <td>1</td>
-                          <td>1</td>
-                          <td>挖湿土时</td>
-                          <td>人工×1.18</td>
-                        </tr>
-                        <tr>
-                          <td>2</td>
-                          <td>2</td>
-                          <td>深2m以内</td>
-                          <td>人工×2.63</td>
-                        </tr>
-                        <tr>
-                          <td>3</td>
-                          <td>3</td>
-                          <td>深4m以内</td>
-                          <td>人工×14.71</td>
-                        </tr>
-                        <tr>
-                          <td>4</td>
-                          <td>4</td>
-                          <td>深6m以内</td>
-                          <td>人工×26.72</td>
-                        </tr>
-                      </tbody>
-                    </table>
-                  </div>
-                  <div class="main-content col-lg-5 p-0">
-                    <div class="m-2">
-                      <p><div class="form-check"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1" checked> 工料机整体调整</label></div></p>
-                    </div>
-                    <table class="table table-sm table-bordered m-0">
-                      <thead>
-                        <tr>
-                          <th>名称</th>
-                          <th>操作符</th>
-                          <th>数量</th>
-                          <th>操作</th>
-                        </tr>
-                      </thead>
-                      <tbody>
-                        <tr>
-                          <td>人工</td>
-                          <td>*</td>
-                          <td>1.18</td>
-                          <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editZgl" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                        </tr>
-                        <tr>
-                          <td>材料</td>
-                          <td></td>
-                          <td></td>
-                          <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editZgl" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                        </tr>
-                        <tr>
-                          <td>机械</td>
-                          <td></td>
-                          <td></td>
-                          <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editZgl" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                        </tr>
-                      </tbody>
-                    </table>
-                    <div class="m-2">
-                      <p><div class="form-check"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios1" id="optionsRadios" value="option1" checked> 单个工料机调整</label></div></p>
-                    </div>
-                    <table class="table table-sm table-bordered m-0">
-                      <thead>
-                        <tr>
-                          <th></th>
-                          <th>编码</th>
-                          <th>名称</th>
-                          <th>操作符</th>
-                          <th>数量</th>
-                          <th>选择</th>
-                        </tr>
-                      </thead>
-                      <tbody>
-                        <tr>
-                          <td>1</td>
-                          <td>00010201</td>
-                          <td>人工</td>
-                          <td>*</td>
-                          <td>1.18</td>
-                          <td><a href="javacript:void(0);" data-toggle="modal" data-target="#editDgl" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td>
-                        </tr>
-                      </tbody>
-                    </table>
-                    <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#add" class="btn btn-primary btn-sm">添加</a></div>
-                  </div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!--弹出添加-->
-    <div class="modal fade" id="add" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">添加单个工料机</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" placeholder="输入编码" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>操作符</label>
-                      <select class="form-control"><option>选择操作符</option><option>*</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>数量</label>
-                      <input class="form-control" placeholder="输入数量" type="number">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <!--弹出编辑-->
-    <div class="modal fade" id="editZgl" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑整体工料机</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>操作符</label>
-                      <select class="form-control"><option>选择操作符</option><option>*</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>数量</label>
-                      <input class="form-control" placeholder="输入数量" type="number">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="modal fade" id="editDgl" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">编辑单个工料机</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                  <form>
-                    <div class="form-group">
-                      <label>编码</label>
-                      <input class="form-control" placeholder="输入编码" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>名称</label>
-                      <input class="form-control" placeholder="输入名称" type="text">
-                    </div>
-                    <div class="form-group">
-                      <label>操作符</label>
-                      <select class="form-control"><option>选择操作符</option><option>*</option></select>
-                    </div>
-                    <div class="form-group">
-                      <label>数量</label>
-                      <input class="form-control" placeholder="输入数量" type="number">
-                    </div>
-                  </form>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-primary">确定</a>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <!--弹出删除-->
-    <div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
-        <div class="modal-dialog" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                  <h5 class="modal-title">删除确认</h5>
-                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">×</span>
-                  </button>
-                </div>
-                <div class="modal-body">
-                    <h5 class="text-danger">删除后无法恢复,确认是否删除?</h5>
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                    <a href="" class="btn btn-danger">删除</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    <!-- JS. -->
-    <script src="/lib/jquery/jquery.min.js"></script>
-    <script src="/lib/tether/tether.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
-    <script src="/lib/global.js"></script>
-    <!-- zTree -->
-  	<script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
-  	<script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
-    <SCRIPT type="text/javascript">
-  		<!--
-  		var setting = {
-  			view: {
-  				showIcon: false
-  			},
-  			data: {
-  				simpleData: {
-  					enable: true
-  				}
-  			}
-  		};
-
-  		var zNodes =[
-  			{ id:1, pId:0, name:"父节点1 - 展开", open:true},
-  			{ id:11, pId:1, name:"父节点11 - 折叠"},
-  			{ id:111, pId:11, name:"叶子节点111"},
-  			{ id:112, pId:11, name:"叶子节点112"},
-  			{ id:113, pId:11, name:"叶子节点113"},
-  			{ id:114, pId:11, name:"叶子节点114"},
-  			{ id:12, pId:1, name:"父节点12 - 折叠"},
-  			{ id:121, pId:12, name:"叶子节点121"},
-  			{ id:122, pId:12, name:"叶子节点122"},
-  			{ id:123, pId:12, name:"叶子节点123"},
-  			{ id:124, pId:12, name:"叶子节点124"},
-  			{ id:13, pId:1, name:"父节点13 - 没有子节点", isParent:true},
-  			{ id:2, pId:0, name:"父节点2 - 折叠"},
-  			{ id:21, pId:2, name:"父节点21 - 展开", open:true},
-  			{ id:211, pId:21, name:"叶子节点211"},
-  			{ id:212, pId:21, name:"叶子节点212"},
-  			{ id:213, pId:21, name:"叶子节点213"},
-  			{ id:214, pId:21, name:"叶子节点214"},
-  			{ id:22, pId:2, name:"父节点22 - 折叠"},
-  			{ id:221, pId:22, name:"叶子节点221"},
-  			{ id:222, pId:22, name:"叶子节点222"},
-  			{ id:223, pId:22, name:"叶子节点223"},
-  			{ id:224, pId:22, name:"叶子节点224"},
-  			{ id:23, pId:2, name:"父节点23 - 折叠"},
-  			{ id:231, pId:23, name:"叶子节点231"},
-  			{ id:232, pId:23, name:"叶子节点232"},
-  			{ id:233, pId:23, name:"叶子节点233"},
-  			{ id:234, pId:23, name:"叶子节点234"},
-  			{ id:3, pId:0, name:"父节点3 - 没有子节点", isParent:true}
-  		];
-
-  		function showIconForTree(treeId, treeNode) {
-  			return !treeNode.isParent;
-  		};
-
-  		$(document).ready(function(){
-  			$.fn.zTree.init($("#treeDemo"), setting, zNodes);
-  		});
-  		//-->
-  	</SCRIPT>
-</body>
-<script type="text/javascript">
-    autoFlashHeight();
-</script>
-
-</html>

+ 566 - 0
web/rationRepository/dinge.html

@@ -0,0 +1,566 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>定额库编辑器</title>
+    <link rel="stylesheet" href="/web/css/bootstrap/bootstrap.min.css">
+   <!-- <link rel="stylesheet" href="/lib/css/bootstrap/themes.css">-->
+    <link rel="stylesheet" href="/web/css/main_dinge.css">
+    <link rel="stylesheet" href="/web/css/font-awesome/font-awesome.min.css">
+    <!--zTree-->
+  	<link rel="stylesheet" href="/web/css/ztree/zTreeStyle.css" type="text/css">
+    <link rel="stylesheet" href="/web/css/spreadjs/gc.spread.sheets.10.0.1.css" type="text/css">
+
+</head>
+
+<body>
+    <div class="header">
+        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
+            <span class="header-logo px-2">Smartcost</span>
+            <div id="rationname" class="navbar-text"><a href="main">定额库</a><i class="fa fa-angle-right fa-fw"></i>XXX定额库</div>
+        </nav>
+        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
+              <ul class="nav nav-tabs" role="tablist">
+                  <li class="nav-item">
+                      <a class="nav-link active px-3" id ="dinge" >定额</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" id="gongliao" href="#">工料机</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" id="fuzhu" href="#">附注条件</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" href="#maz">安装增加费</a>
+                  </li>
+              </ul>
+        </nav>
+    </div>
+    <div class="main">
+        <div class="content">
+            <div class="container-fluid">
+                <div class="row">
+                  <div class="main-side col-lg-3 p-0">
+                      <div class="tab-bar">
+                          <a onclick="zTreeOprObj.addRootNode()" class="btn btn-secondary btn-sm">增加根节点</a>
+                      </div>
+                    <div class="tab-content">
+                      <ul id="rationChapterTree" class="ztree"></ul>
+                    </div>
+                  </div>
+                  <div class="main-content col-lg-9 p-0">
+                      <!-- 右标签 -->
+                      <ul class="nav nav-tabs tools-bar" role="tablist">
+                          <li class="nav-item">
+                              <a class="nav-link active" data-toggle="tab" href="#tde" role="tab">定额</a>
+                          </li>
+                          <li class="nav-item">
+                              <a class="nav-link" data-toggle="tab" href="#tsm" role="tab">说明</a>
+                          </li>
+                          <li class="nav-item">
+                              <a class="nav-link" data-toggle="tab" href="#tjs" role="tab">计算规则</a>
+                          </li>
+                          <li class="nav-item">
+                              <a class="nav-link" data-toggle="tab" href="#tgz" role="tab">工作内容</a>
+                          </li>
+                      </ul>
+                      <div class="tab-content">
+                          <!--定额-->
+                          <div class="tab-pane active" id="tde" role="tabpanel">
+                              <!--定额top-->
+                              <div id="rationItemsSheet" class="main-data-top"></div>
+                              <!--定额bottom-->
+                              <div class="bottom-content">
+                                  <!-- 标签 -->
+                                  <ul class="nav nav-tabs" role="tablist">
+                                      <li class="nav-item">
+                                          <a class="nav-link" data-toggle="tab" href="#bglj" role="tab">工料机</a>
+                                      </li>
+                                      <li class="nav-item">
+                                          <a class="nav-link" data-toggle="tab" href="#bfzd" role="tab">辅助定额调整</a>
+                                      </li>
+                                      <li class="nav-item">
+                                          <a class="nav-link" data-toggle="tab" href="#bfzt" role="tab">附注条件调整</a>
+                                      </li>
+                                      <li class="nav-item">
+                                          <a class="nav-link" data-toggle="tab" href="#baz" role="tab">安装增加费</a>
+                                      </li>
+                                  </ul>
+                                  <!-- 内容 -->
+                                  <div class="tab-content">
+                                      <!--工料机-->
+                                      <div class="tab-pane active" id="bglj" role="tabpanel">
+                                          <div id="rationGLJSheet" class="main-data-bottom"></div>
+                                      </div>
+                                      <!--辅助定额调整-->
+                                      <div class="tab-pane" id="bfzd" role="tabpanel">
+                                          <div class="main-data-bottom">
+                                              <table class="table table-sm table-bordered m-0">
+                                                  <thead><tr><th width="30"></th><th width="120">调整名称</th><th>序号</th><th>参数最大值</th><th>辅助定额号</th><th>参数名称</th><th>标准值</th><th>步距</th><th>精度</th><th>进位方式</th></tr></thead>
+                                                  <tbody>
+                                                  <tr>
+                                                      <td>1</td><td>运距m</td><td>0</td><td></td><td>AA0012</td><td>运距m</td>
+                                                      <td>20</td><td>20</td><td>0</td><td>四舍五入</td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>2</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>3</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>4</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  </tbody>
+                                              </table>
+                                          </div>
+                                      </div>
+                                      <!--附注条件调整-->
+                                      <div class="tab-pane" id="bfzt" role="tabpanel">
+                                          <div class="main-data-bottom">
+                                              <table class="table table-sm table-bordered m-0">
+                                                  <thead><tr><th width="30"></th><th width="40">编号</th><th width="120">本分项全部适用</th><th>调整顺序</th><th>名称</th><th>内容</th></tr></thead>
+                                                  <tbody>
+                                                  <tr>
+                                                      <td>1</td><td>1</td><td><label class="form-check-label"><input type="checkbox" class="form-check-input" checked></label></td><td>2</td><td>挖湿土时</td><td>人工x1.18</td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>2</td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>3</td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  <tr>
+                                                      <td>4</td><td></td><td></td><td></td><td></td><td></td>
+                                                  </tr>
+                                                  </tbody>
+                                              </table>
+                                          </div>
+                                      </div>
+                                      <!--安装增加费-->
+                                      <div class="tab-pane" id="baz" role="tabpanel">
+                                          <div class="main-data-bottom">
+                                              安装增加费
+                                          </div>
+                                      </div>
+
+                                  </div>
+                              </div>
+                          </div>
+                          <!--说明-->
+                          <div class="tab-pane" id="tsm" role="tabpanel">
+                              <div class="main-data">
+                                  <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#editTsm" title="编辑">编辑说明</a></div>
+                                  <div class="main-content m-2">
+                                      <h5>说明</h5><p>一、一般说明</p><p>1.土壤及岩石分类,详见土壤及岩石分类表。</p><p>2.....</p>
+                                  </div>
+                              </div>
+                          </div>
+                          <!--计算规则-->
+                          <div class="tab-pane" id="tjs" role="tabpanel">
+                              <div class="main-data">
+                                  <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#editTjs" title="编辑">编辑计算规则</a></div>
+                                  <div class="main-content m-2">
+                                      <h5>计算规则</h5>
+                                      <p>土壤、岩石体积,均按挖掘前的天然密度体积以立方米计算。.....</p>
+                                  </div>
+                              </div>
+                          </div>
+                          <!--工作内容-->
+                          <div class="tab-pane" id="tgz" role="tabpanel">
+                              <div class="main-data">
+                                  <div class="form-check m-2"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" value="option1" checked=""> 适合本项所有定额</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" value="option1"> 适合本项部分定额</label></div>
+                                  <!-- <p class="m-2">适合本项所有定额</p> -->
+                                  <table class="table table-sm table-bordered m-0">
+                                      <tr>
+                                          <td>1.挖土、修理边底。2.挖淤泥、流沙、修理边底。</td>
+                                      </tr>
+                                  </table>
+                                  <div class="form-check m-2"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios2" value="option1"> 适合本项所有定额</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios2" value="option1" checked=""> 适合本项部分定额</label></div>
+                                  <table class="table table-sm table-bordered m-0">
+                                      <thead>
+                                      <tr>
+                                          <th></th>
+                                          <th>编码</th>
+                                          <th>工作内容</th>
+                                      </tr>
+                                      </thead>
+                                      <tbody>
+                                      <tr>
+                                          <td>1</td>
+                                          <td><a href data-toggle="modal" data-target="#editBianmaQ" class="m-0">编辑编码</a><p class="m-0">AA0017</p><p class="m-0">AA0018</p><p class="m-0">AA0019</p><p class="m-0">AA0020</p><p class="m-0">AA0021</p><p class="m-0">AA0022</p></td>
+                                          <td><p class="m-0">1.松填土:5m内的就地取土,铺平。</p><p class="m-0">2.夯填土方(石渣):5m内的就地取土(石渣)、铺平、夯实、洒水等。</p></td>
+                                      </tr>
+                              <tr>
+                                  <td>2</td>
+                                  <td><a href data-toggle="modal" data-target="#editBianma" class="m-0">点击勾选编码</a></td>
+                                  <td></td>
+                              </tr>
+                              <tr>
+                                  <td>3</td>
+                                  <td></td>
+                                  <td></td>
+                              </tr>
+                              <tr>
+                                  <td>4</td>
+                                  <td></td>
+                                  <td></td>
+                              </tr>
+                              </tbody>
+                              </table>
+                              <div class="form-check m-2"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios1" value="option1"> 适合本项所有定额</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios1" value="option1" checked=""> 适合本项部分定额</label></div>
+                              <table class="table table-sm table-bordered m-0">
+                                  <thead>
+                                  <tr>
+                                      <th></th>
+                                      <th>编码</th>
+                                      <th>工作内容</th>
+                                  </tr>
+                                  </thead>
+                                  <tbody>
+                                  <tr>
+                                      <td>1</td>
+                                      <td><a href data-toggle="modal" data-target="#editBianma" class="m-0">编辑编码</a><p class="m-0">AA0017</p><p class="m-0">AA0018</p><p class="m-0">AA0019</p></td>
+                                      <td><p class="m-0">1.松填土:5m内的就地取土,铺平。</p><p class="m-0">2.夯填土方(石渣):5m内的就地取土(石渣)、铺平、夯实、洒水等。</p></td>
+                                  </tr>
+                                  <tr>
+                                      <td>2</td>
+                                      <td><a href data-toggle="modal" data-target="#editBianma" class="m-0">编辑编码</a><p class="m-0">AA0020</p><p class="m-0">AA0021</p><p class="m-0">AA0022</p></td>
+                                      <td><p class="m-0">1.松填土:5m内的就地取土,铺平。</p><p class="m-0">2.夯填土方(石渣):5m内的就地取土(石渣)、铺平、夯实、洒水等。</p></td>
+                                  </tr>
+                                  <tr>
+                                      <td>3</td>
+                                      <td><a href data-toggle="modal" data-target="#editBianma" class="m-0">点击勾选编码</a></td>
+                                      <td></td>
+                                  </tr>
+                                  <tr>
+                                      <td>4</td>
+                                      <td></td>
+                                      <td></td>
+                                  </tr>
+                                  <tr>
+                                      <td>5</td>
+                                      <td></td>
+                                      <td></td>
+                                  </tr>
+                                  </tbody>
+                              </table>
+                          </div>
+                      </div>
+                  </div>
+                </div>
+            </div>
+        </div>
+    </div>
+        <!--弹出添加-->
+        <div class="modal fade" id="addNewgznr" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">添加工作内容</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label>内容</label>
+                                <textarea class="form-control" rows="5"></textarea>
+                            </div>
+                        </form>
+                        <form>
+                            <div class="form-group">
+                                <label>编码</label>
+                                <div class="form-control">
+                                    <div class="row code">
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0017
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0018
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0019
+                                            </label>
+                                        </div>
+                                        <div class="w-100"></div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1"> AA0020
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1"> AA0021
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1"> AA0022
+                                            </label>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+
+                            <div class="form-group">
+                                <label>内容</label>
+                                <textarea class="form-control" rows="5"></textarea>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                        <a href="" class="btn btn-primary">确定</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!--弹出编辑-->
+        <div class="modal fade" id="editTsm" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">编辑说明</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label>内容</label>
+                                <textarea class="form-control" rows="5"></textarea>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                        <a href="" class="btn btn-primary">确定</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="modal fade" id="editTjs" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">编辑计算规则</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label>内容</label>
+                                <textarea class="form-control" rows="5"></textarea>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                        <a href="" class="btn btn-primary">确定</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="modal fade" id="editBianmaQ" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">修改编码</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label>编码</label>
+                                <div class="form-control">
+                                    <div class="row code">
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0017
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0018
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0019
+                                            </label>
+                                        </div>
+                                        <div class="w-100"></div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0020
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0021
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0022
+                                            </label>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                        <a href="" class="btn btn-primary">确定</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="modal fade" id="editBianma" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">修改编码</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label>编码</label>
+                                <div class="form-control">
+                                    <div class="row code">
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0017
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0018
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" checked> AA0019
+                                            </label>
+                                        </div>
+                                        <div class="w-100"></div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" disabled> AA0020
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" disabled> AA0021
+                                            </label>
+                                        </div>
+                                        <div class="col">
+                                            <label class="form-check-label">
+                                                <input class="form-check-input" type="checkbox" value="option1" disabled> AA0022
+                                            </label>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                        <a href="" class="btn btn-primary">确定</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- JS. -->
+        <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
+        <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
+        <script src="/lib/jquery/jquery.min.js"></script>
+        <script src="/lib/tether/tether.min.js"></script>
+        <script src="/lib/bootstrap/bootstrap.min.js"></script>
+        <script src="/lib/global.js"></script>
+        <!-- zTree -->
+        <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
+        <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
+        <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
+        <script type="text/javascript" src="/web/rationRepository/js/chapterTree.js"></script>
+        <script type="text/javascript" src="/web/rationRepository/js/zTreeCommon.js"></script>
+        <script type="text/javascript" src="/web/rationRepository/js/sheetCommon.js"></script>
+        <script type="text/javascript" src="/web/rationRepository/js/ration.js"></script>
+        <script type="text/javascript" src="/web/rationRepository/js/rationGLJ.js"></script>
+        <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
+        <script type="text/javascript" src="/public/web/QueryParam.js"></script>
+        <script type="text/javascript" src="/public/web/storageUtil.js"></script>
+        <script type="text/javascript">
+            var setting = {
+                view: {
+                    addHoverDom: zTreeOprObj.addHoverDom,
+                    removeHoverDom: zTreeOprObj.removeHoverDom,
+                    expandSpeed: "",
+                    selectedMulti: false
+                },
+                edit: {
+                    enable: true,
+                    editNameSelectAll: true,
+                    showRemoveBtn: true,
+                    showRenameBtn: true,
+                    removeTitle: "删除节点",
+                    renameTitle: "更改名称"
+                },
+                data: {
+                    keep: {
+                        parent:true,
+                        leaf:true
+                    },
+                    key: {
+                        children: "items"
+                    },
+                    simpleData: {
+                        enable: true,
+                        idKey: "ID",
+                        pIdKey: "ParentID",
+                        rootPId: -1
+                    }
+                },
+                callback:{
+                    onClick: zTreeOprObj.onClick,
+                    beforeRename: zTreeOprObj.beforeRename,
+                    beforeRemove: zTreeOprObj.onBeforeRemove,
+                    onRemove: zTreeOprObj.onRemove,
+                    onRename: zTreeOprObj.onRename
+                }
+            };
+            $(document).ready(function(){
+                pageOprObj.initPage();
+                rationOprObj.buildSheet($("#rationItemsSheet")[0]);
+                rationGLJOprObj.buildSheet($("#rationGLJSheet")[0]);
+                sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);
+                sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting);
+            });
+        </script>
+    </div>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

+ 261 - 0
web/rationRepository/fuzhu.html

@@ -0,0 +1,261 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>定额库编辑器</title>
+    <link rel="stylesheet" href="/web/css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="/web/css/main.css">
+    <link rel="stylesheet" href="/web/css/font-awesome/font-awesome.min.css">
+    <link rel="stylesheet" href="/web/css/spreadjs/gc.spread.sheets.10.0.1.css" type="text/css">
+    <!--zTree-->
+    <link rel="stylesheet" href="/web/css/ztree/zTreeStyle.css" type="text/css">
+</head>
+
+<body>
+    <div class="header">
+        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
+            <span class="header-logo px-2">Smartcost</span>
+            <div class="navbar-text" id="rationname"><a href="main">定额库</a><i class="fa fa-angle-right fa-fw"></i>XXX定额库</div>
+        </nav>
+        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
+              <ul class="nav nav-tabs" role="tablist">
+                  <li class="nav-item">
+                      <a class="nav-link px-3" id="drirect-dinge" href="javascript:void(0);">定额</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" id="gongliao" href="javascript:void(0);">工料机</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link active px-3">附注条件</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" href="#maz">安装增加费</a>
+                  </li>
+              </ul>
+        </nav>
+    </div>
+    <div class="main">
+        <div class="content">
+            <div class="container-fluid">
+                <div class="row">
+                  <div class="main-side col-lg-7 p-0">
+                    <div class="main-data" id="mainSpread" style="height: 600px;">
+                   <!-- <table class="table table-sm table-bordered m-0">
+                      <thead>
+                        <tr>
+                          <th></th>
+                          <th>编号</th>
+                          <th>名称</th>
+                          <th>内容</th>
+                        </tr>
+                      </thead>
+                      <tbody>
+                        <tr class="table-active">
+                          <td>1</td>
+                          <td>1</td>
+                          <td>挖湿土时</td>
+                          <td>人工×1.18</td>
+                        </tr>
+                        <tr>
+                          <td>2</td>
+                          <td>2</td>
+                          <td>深2m以内</td>
+                          <td>人工×2.63</td>
+                        </tr>
+                        <tr>
+                          <td>3</td>
+                          <td>3</td>
+                          <td>深4m以内</td>
+                          <td>人工×14.71</td>
+                        </tr>
+                        <tr>
+                          <td>4</td>
+                          <td>4</td>
+                          <td>深6m以内</td>
+                          <td>人工×26.72</td>
+                        </tr>
+                        <tr>
+                          <td>5</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                        <tr>
+                          <td>6</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                        <tr>
+                          <td>7</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                      </tbody>
+                    </table>-->
+                    </div>
+                  </div>
+                  <div class="main-content col-lg-5 p-0">
+                      <div id="contentSpread" style="height: 400px; margin-left:4px;margin-right:4px;" />
+                    <!--<div class="m-2">
+                      <p><div class="form-check"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1" checked> 工料机整体调整</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios" id="optionsRadios1" value="option1"> 单个工料机调整</label></div></p>
+                    </div>
+                    <table class="table table-sm table-bordered m-0">
+                      <thead>
+                        <tr>
+                          <th>名称</th>
+                          <th>操作符</th>
+                          <th>数量</th>
+                        </tr>
+                      </thead>
+                      <tbody>
+                        <tr>
+                          <td>人工</td>
+                          <td>*</td>
+                          <td>1.18</td>
+                        </tr>
+                        <tr>
+                          <td>材料</td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                        <tr>
+                          <td>机械</td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                      </tbody>
+                    </table>
+                    <div class="m-2">
+                      <p><div class="form-check"><label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios1" id="optionsRadios" value="option1"> 工料机整体调整</label>&nbsp;&nbsp;<label class="form-check-label"><input type="radio" class="form-check-input" name="optionsRadios1" id="optionsRadios" value="option1" checked> 单个工料机调整</label></div></p>
+                    </div>
+                    <table class="table table-sm table-bordered m-0">
+                      <thead>
+                        <tr>
+                          <th></th>
+                          <th>编码</th>
+                          <th>名称</th>
+                          <th>操作符</th>
+                          <th>数量</th>
+                        </tr>
+                      </thead>
+                      <tbody>
+                        <tr>
+                          <td>1</td>
+                          <td>00010201</td>
+                          <td>人工</td>
+                          <td>*</td>
+                          <td>1.18</td>
+                        </tr>
+                        <tr>
+                          <td>2</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                        <tr>
+                          <td>3</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                        <tr>
+                          <td>4</td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                          <td></td>
+                        </tr>
+                      </tbody>
+                    </table>-->
+                  </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!-- JS. -->
+    <script src="/lib/jquery/jquery.min.js"></script>
+    <script src="/lib/tether/tether.min.js"></script>
+    <script src="/lib/bootstrap/bootstrap.min.js"></script>
+    <script src="/lib/global.js"></script>
+    <!-- zTree -->
+    <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
+    <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
+    <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
+    <script type="text/javascript" src="/public/web/QueryParam.js"></script>
+    <script src="/public/web/sheet.js"></script>
+    <script src="/public/debug.js"></script>
+    <script type="text/javascript" src="/public/web/storageUtil.js"></script>
+    <script type="text/javascript" src="/web/rationRepository/js/coe.js"></script>
+    <!--<script type="text/javascript" src="/web/rationRepository/js/zTreeCommon.js"></script>-->
+    <!--<script type="text/javascript" src="/web/rationRepository/js/sheetCommon.js"></script>-->
+    <SCRIPT type="text/javascript">
+  		<!--
+  		var setting = {
+  			view: {
+  				showIcon: false
+  			},
+  			data: {
+  				simpleData: {
+  					enable: true
+  				}
+  			}
+  		};
+
+  		var zNodes =[
+  			{ id:1, pId:0, name:"父节点1 - 展开", open:true},
+  			{ id:11, pId:1, name:"父节点11 - 折叠"},
+  			{ id:111, pId:11, name:"叶子节点111"},
+  			{ id:112, pId:11, name:"叶子节点112"},
+  			{ id:113, pId:11, name:"叶子节点113"},
+  			{ id:114, pId:11, name:"叶子节点114"},
+  			{ id:12, pId:1, name:"父节点12 - 折叠"},
+  			{ id:121, pId:12, name:"叶子节点121"},
+  			{ id:122, pId:12, name:"叶子节点122"},
+  			{ id:123, pId:12, name:"叶子节点123"},
+  			{ id:124, pId:12, name:"叶子节点124"},
+  			{ id:13, pId:1, name:"父节点13 - 没有子节点", isParent:true},
+  			{ id:2, pId:0, name:"父节点2 - 折叠"},
+  			{ id:21, pId:2, name:"父节点21 - 展开", open:true},
+  			{ id:211, pId:21, name:"叶子节点211"},
+  			{ id:212, pId:21, name:"叶子节点212"},
+  			{ id:213, pId:21, name:"叶子节点213"},
+  			{ id:214, pId:21, name:"叶子节点214"},
+  			{ id:22, pId:2, name:"父节点22 - 折叠"},
+  			{ id:221, pId:22, name:"叶子节点221"},
+  			{ id:222, pId:22, name:"叶子节点222"},
+  			{ id:223, pId:22, name:"叶子节点223"},
+  			{ id:224, pId:22, name:"叶子节点224"},
+  			{ id:23, pId:2, name:"父节点23 - 折叠"},
+  			{ id:231, pId:23, name:"叶子节点231"},
+  			{ id:232, pId:23, name:"叶子节点232"},
+  			{ id:233, pId:23, name:"叶子节点233"},
+  			{ id:234, pId:23, name:"叶子节点234"},
+  			{ id:3, pId:0, name:"父节点3 - 没有子节点", isParent:true}
+  		];
+
+  		function showIconForTree(treeId, treeNode) {
+  			return !treeNode.isParent;
+  		};
+
+  		$(document).ready(function(){
+  			$.fn.zTree.init($("#treeDemo"), setting, zNodes);
+  		});
+  		//-->
+  	</SCRIPT>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

+ 18 - 18
web/rationLibEditor/gongliao.html

@@ -7,7 +7,7 @@
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>定额库编辑器</title>
     <link rel="stylesheet" href="/web/css/bootstrap/bootstrap.min.css">
-    <link rel="stylesheet" href="/web/css/main.css">
+    <link rel="stylesheet" href="/web/css/main_dinge.css">
     <link rel="stylesheet" href="/web/css/font-awesome/font-awesome.min.css">
     <link rel="stylesheet" href="/web/css/spreadjs/gc.spread.sheets.10.0.1.css" type="text/css">
     <!--zTree-->
@@ -23,13 +23,13 @@
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
               <ul class="nav nav-tabs" role="tablist">
                   <li class="nav-item">
-                      <a class="nav-link px-3" id="drirect-dinge" href="/rationLibEditor/ration">定额</a>
+                      <a class="nav-link px-3" id="drirect-dinge" href="/rationRepository/ration">定额</a>
                   </li>
                   <li class="nav-item">
                       <a class="nav-link active px-3">工料机</a>
                   </li>
                   <li class="nav-item">
-                      <a class="nav-link px-3" href="/rationLibEditor/fuzhu">附注条件</a>
+                      <a class="nav-link px-3" id="fuzhu" href="javascript:void(0);">附注条件</a>
                   </li>
                   <li class="nav-item">
                       <a class="nav-link px-3" href="#maz">安装增加费</a>
@@ -40,14 +40,13 @@
     <div class="main">
         <div class="content">
             <div class="container-fluid">
-                <div class="row" style="height: 660px">
-                  <div class="main-side col-lg-3 p-0">
-                    <div class="tab-content">
-                      <ul id="repositoryTree" class="ztree"></ul>
+                <div class="row">
+                    <div class="main-side col-lg-3 p-0">
+                        <ul id="repositoryTree" class="ztree"></ul>
+                    </div>
+                    <div class="main-content col-lg-9 p-0">
+                        <div id="GLJListSheet" class="main-data"></div>
                     </div>
-                  </div>
-                  <div id="GLJListSheet" class="main-content col-lg-9 p-0">
-                  </div>
                 </div>
             </div>
         </div>
@@ -180,10 +179,11 @@
   	<script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
     <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
-    <script type="text/javascript" src="/public/QueryParam.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/repositoryGLJ.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/zTreeCommon.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/sheetCommon.js"></script>
+    <script type="text/javascript" src="/public/web/QueryParam.js"></script>
+    <script type="text/javascript" src="/web/rationRepository/js/repositoryGLJ.js"></script>
+    <script type="text/javascript" src="/web/rationRepository/js/zTreeCommon.js"></script>
+    <script type="text/javascript" src="/web/rationRepository/js/sheetCommon.js"></script>
+    <script type="text/javascript" src="/public/web/storageUtil.js"></script>
     <script type="text/javascript">
         var gljSetting = {
             view: {
@@ -224,14 +224,14 @@
                 onClick: gljTypeTreeOprObj.onClick
             }
         };
+        $(document).ready(function(){
+            pageOprObj.initPage($("#GLJListSheet")[0]);
+            //repositoryGljObj.buildSheet($("#GLJListSheet")[0]);
+        });
   	</script>
 </body>
 <script type="text/javascript">
     autoFlashHeight();
-    $(document).ready(function(){
-        pageOprObj.initPage($("#GLJListSheet")[0]);
-        //repositoryGljObj.buildSheet($("#GLJListSheet")[0]);
-    });
 </script>
 
 </html>

+ 2 - 1
web/rationLibEditor/js/chapterTree.js

@@ -5,7 +5,8 @@
 var pageOprObj = {
     rationLibName : null,
     initPage : function() {
-        var me = this, rationLibName = getQueryString("repository");//获取定额库参数
+        var me = this, rationLibId = getQueryString("repository"),//获取定额库参数
+            rationLibName = storageUtil.getSessionCache("RationGrp","repositoryID_" + rationLibId);
         if (rationLibName) {
             var html = $("#rationname")[0].outerHTML;
             html = html.replace("XXX定额库", rationLibName);

+ 161 - 0
web/rationRepository/js/coe.js

@@ -0,0 +1,161 @@
+/**
+ * Created by CSL on 2017-05-18.
+ */
+
+var pageObj = {
+    initPage: function (){
+        $("#drirect-dinge").click(function(){
+            $(this).attr('href', "/rationRepository/ration" + "?repository=" + getQueryString("repository"))
+        });
+
+        $("#gongliao").click(function(){
+            $(this).attr('href', "/rationRepository/lmm" + "?repository=" + getQueryString("repository"))
+        });
+
+        var libID = getQueryString("repository");
+        var libName = storageUtil.getSessionCache("RationGrp","repositoryID_" + libID);
+        if (libName) {
+            var html = $("#rationname")[0].outerHTML;
+            html = html.replace("XXX定额库", libName);
+            $("#rationname")[0].outerHTML = html;
+        };
+
+        coeList.show();
+    }
+};
+
+var coeList = {
+    mainSpread: null,
+    detailSpread: null,
+    datas: [],
+
+    colDefMain: [
+        {name: "ID", displayName: "编号", size: 100},
+        {name: "name", displayName: "名称", size: 280},
+        {name: "content", displayName: "内容", size: 250}
+    ],
+    colDefContent: [
+        {name: "coeType", displayName: "类型", size: 100, hAlign: "center"},
+        {name: "gljID", displayName: "工料机ID", size: 100, hAlign: "center",formatter: "00000000"},
+        {name: "operator", displayName: "操作符", size: 60, hAlign: "center"},
+        {name: "amount", displayName: "数量", size: 80, hAlign: "right"}
+    ],
+
+    show: function (){
+        var me = this;
+        me.getDatas();
+        me.mainSpread = sheetObj.create($('#mainSpread')[0], me.colDefMain, me.datas);
+        me.detailSpread = sheetObj.create($('#contentSpread')[0], me.colDefContent, me.datas[0].coes);
+
+        var coeType = new GC.Spread.Sheets.CellTypes.ComboBox();
+        coeType.items(["单个","全部","人工类","材料类","机械类"]);
+        me.detailSpread.getSheet(0).getRange(-1, 0, -1, 1).cellType(coeType);
+
+        var operType = new GC.Spread.Sheets.CellTypes.ComboBox();
+        operType.items(["+","-","*","/","="]);
+        me.detailSpread.getSheet(0).getRange(-1, 2, -1, 1).cellType(operType);
+
+        me.detailSpread.options.showVerticalScrollbar = false;
+
+        me.mainSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
+        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.CellChanged, me.onDetailCellChanged);
+    },
+
+    getDatas: function () {
+        var me = this;
+        var libID = getQueryString("repository");
+
+        $.ajax({
+            type:"POST",
+            url:"/rationRepository/api/getCoeList",
+            data:{"libID": libID},
+            dataType:"json",
+            cache:false,
+            async: false,
+            timeout:20000,
+            success: function (result) {
+                if (result.data) {
+                    me.datas = result.data;
+                };
+            },
+            error: function (result) {
+                alert('内部程序错误!');
+            }
+        })
+    },
+
+    getLibID: function(libName){
+        var me = this;
+        $.ajax({
+            type:"POST",
+            url:"/rationRepository/api/getLibIDByName",
+            data:{"libName": libName},
+            dataType:"json",
+            cache:false,
+            async: false,
+            timeout:20000,
+            success: function (result) {
+                if (result.data) {
+                    me.libID = result.data;
+                }
+            },
+            error: function (result) {
+                alert('内部程序错误!');
+            }
+        })
+    },
+
+    onMainEnterCell: function(sender, args) {
+        var me = coeList;
+        var row = args.sheet.getActiveRowIndex();
+        me.detailSpread.suspendPaint();
+        me.detailSpread.getSheet(0).setDataSource(me.datas[row].coes);
+        me.detailSpread.resumePaint();
+    },
+
+    onDetailCellChanged:  function(sender, args) {
+        //alert('onDetailCellChanged');
+        var me = coeList;
+        var row = args.sheet.getActiveRowIndex();
+        var mainRow = me.mainSpread.getSheet(0).getActiveRowIndex();
+        var curType = args.sheet.getValue(row,0);
+        if (!(curType == '单个')){
+            me.detailSpread.suspendEvent();
+            args.sheet.setValue(row, 1, null);
+            me.detailSpread.resumeEvent();
+            //args.sheet.getCell(row, 1).backColor("red");
+        }
+        else{
+            //args.sheet.getCell(row, 1).backColor("Blue");
+        };
+        var obj = me.datas[mainRow];
+        me.save([],[],[obj]);
+    },
+
+    save: function(addArr, deleteArr, updateArr) {
+        $.ajax({
+            type:"POST",
+            url:"api/saveCoeList",
+            data: {"data": JSON.stringify({"addArr": addArr, "deleteArr": deleteArr, "updateArr": updateArr})},
+            dataType:"json",
+            cache:false,
+            timeout:5000,
+            success:function(result){
+                if (result.error) {
+                    alert(result.message);
+                } else {
+                    // 成功。
+                }
+            },
+            error:function(err){
+                alert("内部程序错误!");
+            }
+        })
+    }
+};
+
+pageObj.initPage();
+
+
+
+

+ 16 - 11
web/rationLibEditor/js/mainJ.js

@@ -7,10 +7,10 @@ $(function(){
 
 function addEvent_Addressdirect(){
     $("tr:gt(0)").each(function() {
-        var td, a;
+        var td, a, tdId = $("td:eq(3)",$(this));
         td = $("td:eq(0)", $(this));
         a = $('a', td);
-        a.attr('href', "/rationRepository/ration" + "?repository=" + a.text());
+        a.attr('href', "/rationRepository/ration" + "?repository=" + tdId.text());
     })
 }
 function addEvent_DeleteLib(){
@@ -71,7 +71,8 @@ function getRationLibs(){
         success:function(result){
             $("tbody tr").html("");
             for(var i=0;i<result.data.length;i++){
-                addLibTag(result.data[i].dispName);
+                addLibTag(result.data[i].dispName, result.data[i].ID);
+                storageUtil.setSessionCache("RationGrp","repositoryID_" + result.data[i].ID, result.data[i].dispName);
             }
             addEvent_Addressdirect();
             addEvent_DeleteLib();
@@ -83,19 +84,21 @@ function getRationLibs(){
     })
 }
 
-function addLibTag(string){
-    var $tr = $('<tr><td><a href="#"></a></td><td></td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal"     data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td></tr>')
+function addLibTag(string, ID){
+    var $tr = $('<tr><td><a href="#"></a></td><td></td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal"     data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td><td style="display:none"></td></tr>')
     var $td0 = $("td:eq(0)",$tr);
     var $td1 = $("td:eq(1)",$tr);
+    var $tdId = $("td:eq(3)",$tr);
     var a = $("a",$td0);
     var str = string;
     a.text(str);
+    $tdId.text(ID);
     var date = new Date().Format("yyyy-MM-dd");
     $td1.text(date);
     $tr.appendTo("tbody");
 }
 
-function addRationRepository(rationObj) {
+function addRationRepository(rationObj, $tdId) {
     $.ajax({
         type:"POST",
         url:"api/addRationRepository",
@@ -104,7 +107,10 @@ function addRationRepository(rationObj) {
         cache:false,
         timeout:5000,
         success:function(result){
-            //
+            $tdId.text(result.data.ID);
+            storageUtil.setSessionCache("RationGrp","repositoryID_" + result.data.ID, result.data.dispName);
+            addEvent_Addressdirect();
+            addEvent_DeleteLib();
         },
         error:function(iqXHR,textStatus,errorThrown){
             alert("error "+textStatus+" "+errorThrown);
@@ -114,9 +120,10 @@ function addRationRepository(rationObj) {
 }
 
 $("#rationAdd").click(function(){
-    var $tr = $('<tr><td><a href="#"></a></td><td></td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td></tr>')
+    var $tr = $('<tr><td><a href="#"></a></td><td></td><td><a href="javacript:void(0);" data-toggle="modal" data-target="#edit" title="编辑"><i class="fa fa-pencil-square-o"></i></a> <a href="javacript:void(0);" data-toggle="modal" data-target="#del" class="text-danger" title="删除"><i class="fa fa-remove"></i></a></td><td style="display:none"></td></tr>')
     var $td0 = $("td:eq(0)",$tr);
     var $td1 = $("td:eq(1)",$tr);
+    var $tdId = $("td:eq(3)",$tr);
     var a = $("a",$td0);
     var str = $("#addInput").val();
     a.text(str);
@@ -127,9 +134,7 @@ $("#rationAdd").click(function(){
     newRationRepObj.dispName = str;
     newRationRepObj.appType = "建筑";
     newRationRepObj.descr = "";
-    addRationRepository(newRationRepObj);
-    addEvent_Addressdirect();
-    addEvent_DeleteLib();
+    addRationRepository(newRationRepObj, $tdId);
 });
 
 $("#edtOK").click(function(){

+ 18 - 9
web/rationLibEditor/js/ration.js

@@ -6,6 +6,10 @@ $("#gongliao").click(function(){
     $(this).attr('href', "/rationRepository/lmm" + "?repository=" + getQueryString("repository"))
 });
 
+$("#fuzhu").click(function(){
+    $(this).attr('href', "/rationRepository/coeList" + "?repository=" + getQueryString("repository"))
+});
+
 var rationOprObj = {
     workBook: null,
     currentRations: {},
@@ -30,28 +34,29 @@ var rationOprObj = {
         }
     },
     buildSheet: function(container) {
-        var me = this;
+        var me = rationOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
-        me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
-        me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
-        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.CellClick, me.onCellClcik);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.CellClick, me.onCellClick);
     },
-    onCellClcik: function(sender, args) {
+    onCellClick: function(sender, args) {
         var me = rationOprObj, sheet = rationGLJOprObj.workBook.getSheet(0), setting = rationGLJOprObj.setting;
         if(args.sheetArea === GC.Spread.Sheets.SheetArea.colHeader || args.sheetArea === GC.Spread.Sheets.SheetArea.corner){
             sheetCommonObj.cleanSheet(sheet, setting, -1);
             sheetCommonObj.shieldAllCells(sheet);
         } else {
-            sheetCommonObj.cleanSheet(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting, -1);
-            sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0));
+            sheetCommonObj.cleanSheet(sheet, setting, -1);
+            sheetCommonObj.shieldAllCells(sheet);
             var cacheSection = me.getCache();
             if (cacheSection && args.row < cacheSection.length) {
                 rationGLJOprObj.getGljItems(cacheSection[args.row]);
             }
         }
+        //me.workBook.focus(true);
     },
     getCache: function() {
         var me = this, rst = me.currentRations["_SEC_ID_" + me.currentSectionId];
@@ -151,10 +156,14 @@ var rationOprObj = {
             rObj["ID"] = me.currentEditingRation["ID"];
             updateArr.push(rObj);
         } else {
-            addArr.push(rObj);
+            if (!sheetCommonObj.chkIfEmpty(rObj, me.setting)) {
+                addArr.push(rObj);
+            }
         }
         me.currentEditingRation = null;
-        me.mixUpdateRequest(updateArr, addArr, []);
+        if (updateArr.length > 0 || addArr.length > 0) {
+            me.mixUpdateRequest(updateArr, addArr, []);
+        }
     },
     onClipboardPasting: function(sender, args) {
         var me = rationOprObj;

web/rationLibEditor/js/rationGLJ.js → web/rationRepository/js/rationGLJ.js


+ 30 - 14
web/rationLibEditor/js/repositoryGLJ.js

@@ -6,20 +6,25 @@ $("#drirect-dinge").click(function(){
     $(this).attr('href', "/rationRepository/ration" + "?repository=" + getQueryString("repository"))
 });
 
+$("#fuzhu").click(function(){
+    $(this).attr('href', "/rationRepository/coeList" + "?repository=" + getQueryString("repository"))
+});
+
 var pageOprObj = {
     rationLibName : null,
     initPage : function(container) {
-        var me = this, rationLibName = getQueryString("repository");//获取定额库参数
+        var me = this, rationLibId = getQueryString("repository"),//获取定额库参数
+            rationLibName = storageUtil.getSessionCache("RationGrp","repositoryID_" + rationLibId);
         if (rationLibName) {
             var html = $("#rationname")[0].outerHTML;
             html = html.replace("XXX定额库", rationLibName);
             $("#rationname")[0].outerHTML = html;
             me.rationLibName = rationLibName;
-            repositoryGljObj.getGljTree(rationLibName, function(repId){
-                repositoryGljObj.buildSheet(container);
-                repositoryGljObj.getGljItems(repId);
-                sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
-            });
+            repositoryGljObj.currentRepositoryId = parseInt(rationLibId);
+            repositoryGljObj.getGljTree(rationLibId);
+            repositoryGljObj.buildSheet(container);
+            repositoryGljObj.getGljItems(rationLibId);
+            sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
         }
     }
 }
@@ -48,12 +53,12 @@ repositoryGljObj = {
             ]
         }
     },
-    getGljTree: function(rationLibName, callback) {
+    getGljTree: function(rationLibId) {
         var me = this;
         $.ajax({
             type:"POST",
             url:"api/getGljTree",
-            data:{"rationLibName": rationLibName},
+            data:{"rationLibId": rationLibId},
             dataType:"json",
             cache:false,
             timeout:20000,
@@ -62,11 +67,8 @@ repositoryGljObj = {
                     zTreeHelper.createTree(result.data, gljSetting, "repositoryTree", me);
                     if (result.data && result.data.length > 0) {
                         me.gljCurTypeId = result.data[0].ID;
-                        if (callback) {
-                            var repId = -1;
-                            repId = result.data[0].repositoryId;
-                            callback(repId);
-                        }
+                    } else {
+                        gljTypeTreeOprObj.addRootNode();
                     }
                 }
             },
@@ -77,7 +79,6 @@ repositoryGljObj = {
     },
     getGljItems: function(repId) {
         var me = this;
-        me.currentRepositoryId = repId;
         $.ajax({
             type:"POST",
             url:"api/getGljItems",
@@ -393,6 +394,21 @@ var gljTypeTreeOprObj = {
             })
         }
     },
+    addRootNode: function() {
+        var me = repositoryGljObj, rawNode = {ParentID: -1, NextSiblingID: -1, Name: "所有"}, lastNodeId = -1;
+        if (me.treeObj) {
+            var rootNodes = me.treeObj.getNodes();
+            if (rootNodes.length == 0) {
+                gljTypeTreeOprObj.addNewNode(rawNode, lastNodeId, function(err, rst){
+                    if (!(err)) {
+                        var newNodes = [], isSilent = false;
+                        newNodes.push({ repositoryId: rst.data.repositoryId, ID: rst.data.ID, ParentID: rst.data.ParentID, NextSiblingID:-1, Name:"所有",isParent:false, items:[]});
+                        me.treeObj.addNodes(null, -1, newNodes, isSilent);
+                    }
+                });
+            }
+        }
+    },
     addNewNode : function(rawNode, lastNodeId, callback){
         $.ajax({
             type:"POST",

+ 1 - 1
web/rationLibEditor/js/sheetCommon.js

@@ -37,7 +37,7 @@ var sheetCommonObj = {
         sheet.suspendEvent();
         sheet.clear(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
         if (rowCount > 0) sheet.setRowCount(rowCount);
-        sheet.clearSelection();
+        //sheet.clearSelection();
         sheet.resumeEvent();
         sheet.resumePaint();
     },

web/rationLibEditor/js/zTreeCommon.js → web/rationRepository/js/zTreeCommon.js


+ 3 - 2
web/rationLibEditor/main.html

@@ -130,10 +130,11 @@
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script src="/lib/global.js"></script>
     <!-- zTree -->
-    <script type="text/javascript" src="/public/dateUtil.js"></script>
+    <script type="text/javascript" src="/public/web/dateUtil.js"></script>
   	<script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
   	<script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
-    <script type="text/javascript" src="/web/rationLibEditor/js/mainJ.js"></script>
+    <script type="text/javascript" src="/web/rationRepository/js/mainJ.js"></script>
+    <script type="text/javascript" src="/public/web/storageUtil.js"></script>
 </body>
 <script type="text/javascript">
 

+ 54 - 0
web/scripts/sheetDataHelper.js

@@ -88,6 +88,9 @@ var SheetDataHelper = {
         sheet.suspendEvent();
 
         sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
+        if (setting.defaultRowHeight) {
+            sheet.defaults.rowHeight = setting.defaultRowHeight;
+        }
         sheet.setRowCount(datas.length + setting.emptyRows, GC.Spread.Sheets.SheetArea.viewport);
         setting.cols.forEach(function (colSetting, iCol) {       
             sheet.setStyle(-1, iCol, SheetDataHelper.getSheetCellStyle(colSetting));
@@ -115,5 +118,56 @@ var SheetDataHelper = {
             sheet.setStyle(-1, iCol, SheetDataHelper.getSheetCellStyle(colSetting));
             sheet.bindColumn(iCol, getBindColInfo(colSetting));
         });
+    },
+    getHitTest: function (obj, e, sheet) {
+        var offset = obj.offset(),
+            x = e.pageX - offset.left,
+            y = e.pageY - offset.top;
+        return sheet.hitTest(x, y);
+    },
+    getTargetSelection: function (sheet, target) {
+        if (target.hitTestType === GC.Spread.Sheets.SheetArea.colHeader) {
+            return sheet.getRange(-1, target.col, sheet.getRowCount(), 1);
+        } else if (target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader) {
+            return sheet.getRange(target.row, -1, 1, sheet.getColumnCount());
+        } else if (target.hitTestType === GC.Spread.Sheets.SheetArea.viewport) {
+            return sheet.getRange(target.row, target.col, 1, 1);
+        } else if (target.hitTestType === GC.Spread.Sheets.SheetArea.corner) {
+            return sheet.getRange(-1, -1, sheet.getRowCount(), sheet.getColumnCount());
+        };
+    },
+    getCellInSelections: function (selections, row, col) {
+        var count = selections.length, range;
+        for (var i = 0; i < count; i++) {
+            range = selections[i];
+            if (range.contains(row, col)) {
+                return range;
+            }
+        }
+        return null;
+    },
+    checkTargetInSelection: function (selections, range) {
+        var count = selections.length, sel;
+        for (var i = 0; i < count; i++) {
+            sel = selections[i];
+            if (sel.containsRange(range)) {
+                return true;
+            }
+        }
+        return false;
+    },
+    /**
+     * @param obj: Dom Element of create spread(first parameter of jquery-contextmenu.build)
+     * @param e: secord parameter of jquery-contextmenu.build
+     * @param spread
+     * @returns {*}
+     */
+    safeRightClickSelection: function (obj, e, spread) {
+        var sheet = spread.getActiveSheet();
+        var selections = sheet.getSelections(), target = this.getHitTest(obj, e, sheet), range = this.getTargetSelection(sheet, target);
+        if (!this.checkTargetInSelection(selections, range)) {
+            sheet.setSelection(range.row, range.col, range.rowCount, range.colCount);
+        }
+        return target;
     }
 };