Browse Source

add my rations modules and my web modules ,add some lines in server.js

zhangenping 8 năm trước cách đây
mục cha
commit
287f8a5c0d

+ 152 - 0
modules/rations/RationDB/Schemas.js

@@ -0,0 +1,152 @@
+var mongoose = require("mongoose");
+
+var RationLibMapSchema = mongoose.Schema({
+    DisplayName:String,
+    DBName:String
+
+})
+
+var connectMap = function(callBack){
+    var db = mongoose.createConnection("localhost","rationLibMap");
+    callBack(db);
+}
+
+/*var connectDB = function(str,callBack){//查找rationLibMap数据库找出ID,按ID查找需要连接的数据库
+    var db = mongoose.createConnection("localhost","rationLibMap");
+    var LibMapModel = db.model("rationlibmaps",RationLibMapSchema);
+   LibMapModel.find({DisplayName:str}, function(err, data){
+           if (data.length) {
+               var DBName = data[0].DBName;
+               var db = mongoose.createConnection("localhost",DBName);
+               callBack(db);
+           }
+           else {
+               var newDB = new LibMapModel({DisplayName: str,DBName:str});
+               newDB.save();
+           }
+    })
+}*/
+
+
+
+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;

+ 492 - 0
modules/rations/RationDB/interfaces.js

@@ -0,0 +1,492 @@
+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:"e"});
+    }
+    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("localhost", realRationName);
+                var RationTreeModel = db.model("rationtrees", Schemas.RationTreeSchema);
+                RationTreeModel.find({"SectionID":rationSection.SectionID},function(err,data){
+                    if(data.length){
+                        RationTreeModel.update({'SectionID':rationSection.SectionID},{$set:{'Name':rationSection.Name}},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("localhost",realRationName);
+                var GLJListModel =db.model("rationitems",Schemas.RationItemsSchema);
+                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("localhost",realRationName);
+                var GLJListModel =db.model("gljlists",Schemas.GLJListSchema);
+                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("localhost",realRationName);
+                var GLJListModel =db.model("rationgljs",Schemas.RationGLJSchema);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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("localhost",realRationName);
+                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)
+                    }
+                })
+            }
+        })
+    });
+}
+removes.deleteRationLibs = 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("localhost", realRationName);
+                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("localhost", realRationName);
+                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 deltype = req.body.type;
+    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("localhost", realRationName);
+                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("localhost", realRationName);
+                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("localhost",realRationName);
+
+                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("localhost",realRationName);
+                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 gljCode = req.body.GLJCode;
+    var amount =JSON.parse(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("localhost",realRationName);
+                var RationModel =db.model("rationgljs",Schemas.RationGLJSchema);
+                RationModel.update({"GLJCode":gljCode},{$set:{"Amount":amount}},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;

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1537 - 0
web/rations/dinge.html


+ 338 - 0
web/rations/fuzhu.html

@@ -0,0 +1,338 @@
+<!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 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>

+ 429 - 0
web/rations/gongliao.html

@@ -0,0 +1,429 @@
+<!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">
+    <!--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"><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="rationLib">定额</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link active px-3" href="gongliao">工料机</a>
+                  </li>
+                  <li class="nav-item">
+                      <a class="nav-link px-3" href="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-content">
+                      <ul id="treeDemo" class="ztree"></ul>
+                    </div>
+                  </div>
+                  <div class="main-content col-lg-9 p-0">
+                    <table class="table table-sm table-bordered m-0">
+                      <thead>
+                        <tr>
+                          <th></th>
+                          <th>编码</th>
+                          <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>工日</td>
+                          <td>22.00</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>
+                        <tr>
+                          <td>2</td>
+                          <td>03010101</td>
+                          <td>钢材</td>
+                          <td></td>
+                          <td>t</td>
+                          <td>2600.00</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>
+                        <tr>
+                          <td>3</td>
+                          <td>36290101</td>
+                          <td>水</td>
+                          <td></td>
+                          <td>m3</td>
+                          <td>2600.00</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>-->
+                      </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" id="gljcode" placeholder="输入编码" type="text">
+                    </div>
+                    <div class="form-group">
+                      <label>名称</label>
+                      <input class="form-control" id="gljname" placeholder="输入名称" type="text">
+                    </div>
+                    <div class="form-group">
+                      <label>规格</label>
+                      <input class="form-control" id="gljgg" placeholder="输入规格" type="text">
+                    </div>
+                    <div class="form-group">
+                      <label>单位</label>
+                      <select class="form-control" id = "gljdw"><option>选择单位</option><option>工日</option><option>t</option><option>m3</option></select>
+                    </div>
+                    <div class="form-group">
+                      <label>基价单价</label>
+                      <input class="form-control" id="gljjj" placeholder="输入基价" type="number">
+                    </div>
+                    <div class="form-group">
+                      <label>类型</label>
+                      <select class="form-control" id="gljlx"><option>人工</option><option>材料</option></select>
+                    </div>
+                  </form>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" id="btadd" data-dismiss="modal">添加</button>
+                    <a   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" placeholder="输入编码" id="Ecode" type="text" value="">
+                    </div>
+                    <div class="form-group">
+                      <label>名称</label>
+                      <input class="form-control" placeholder="输入名称" id ="Ename" type="text" vaule="">
+                    </div>
+                    <div class="form-group">
+                      <label>规格</label>
+                      <input class="form-control" placeholder="输入规格" id="Eguige" type="text">
+                    </div>
+                    <div class="form-group">
+                      <label>单位</label>
+                      <select class="form-control" id="Edanwei"><option>工日</option></select>
+                    </div>
+                    <div class="form-group">
+                      <label>基价单价</label>
+                      <input class="form-control" id="Ejijia" placeholder="输入基价" type="number" value="">
+                    </div>
+                    <div class="form-group">
+                      <label>类型</label>
+                      <select class="form-control" id="Eleixing"><option>人工</option></select>
+                    </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="edtglj" data-dismiss="modal">确定</button>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!--弹出删除-->
+    <div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <input type="hidden" id="did" 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="deleteGLJ"  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 rationName = getQueryString("rationname");//请求参数(定额库名称)
+$("#drirect-dinge").attr('href', "/ration/rationLib" + "?rationname=" + rationName );
+var setting = {
+    view: {
+        showIcon: false
+    },
+    data: {
+        simpleData: {
+            enable: true
+        }
+    }
+};
+var zNodes =[
+{ id:1, pId:0, name:"全部", open:true},
+    { id:11, pId:1, name:"人工"},
+    { id:111, pId:1, name:"材料"},
+    { id:112, pId:1, name:"机械"}
+    ];
+function showIconForTree(treeId, treeNode) {
+    return !treeNode.isParent;
+};
+//页面onLoad事件,获取工料机并绑定修改删除
+$(document).ready(function(){
+    getGLJ();
+    $.fn.zTree.init($("#treeDemo"), setting, zNodes);
+});
+function getGLJ() {
+    $.ajax({
+        type: "POST",
+        url: "http://localhost:6060/ration/getGLJ",
+        data: {"rationName": rationName},
+        dataType: "json",
+        cache: false,
+        timeout: 1000,
+        success: function (result) {
+          if(result){
+            showGLJ(result.data);
+            deleteGLJ();
+            bindEditGLJ();
+          }
+        },
+        error: function () {}
+    });
+}
+function showGLJ(obj){
+    $("tbody tr").html("");
+    for(var i=0;i<obj.length;i++){
+        addTags(obj[i]);
+    }
+}
+$("#btadd").click(function(){
+    addGLJItems();
+})
+function addTags(obj){
+    var $tr = $('<tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></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 td1,td2,td3,td4,td5,td6;
+    var code,name,guige,danwei,jijia,leixin;
+    td1 = $("td:eq(1)",$tr);td2 = $("td:eq(2)",$tr);td3 = $("td:eq(3)",$tr);td4 = $("td:eq(4)",$tr);td5 = $("td:eq(5)",$tr);td6 = $("td:eq(6)",$tr);
+    code = obj.GLJCode;name = obj.GLJName;guige = obj.Specs;danwei=obj.Unit;jijia = obj.BasePrice;leixin = obj.Type;
+    td1.text(code);td2.text(name);td3.text(guige);td4.text(danwei);td5.text(jijia);td6.text(leixin)
+    $tr.appendTo("tbody");
+}
+//绑定删除工料机
+function deleteGLJ(){
+    $("tbody tr").each(function() {
+        var td7, a1,td1,a2;
+        td7 = $("td:eq(7)", $(this));
+        td1 = $("td:eq(1)", $(this));
+        var str = td1.text();
+        a2 = $("a:eq(1)",td7);
+        a2.click(function(){
+            $("#did").val(str);
+        })
+    })
+}
+ //绑定编辑工料机
+function bindEditGLJ(){
+    $("tbody tr").each(function() {
+        var td7, td1,a2;
+        td7 = $("td:eq(7)", $(this));
+        td1 = $("td:eq(1)", $(this));
+        var str = td1.text();
+        a2 = $("a:eq(0)",td7);
+        a2.click(function(){
+            $("#did").val(str);
+        })
+    })
+}
+$("#edtglj").click(function(){
+    var GLJCode = $("#did").val();
+    var code,name,guige,danwei,jijia,leixing,glj={};
+    code=$("#Ecode").val();
+    name=$("#Ename").val();
+    guige=$("#Eguige").val();
+    danwei=$("#Edanwei").val();
+    jijia=$("#Ejijia").val();
+    leixing=$("#Eleixing").val();
+    glj.GLJCode = code;
+    glj.GLJName = name;
+    glj.Specs = guige;
+    glj.Unit = danwei;
+    glj.BasePrice = Number(jijia);
+    var type;
+    switch (leixing){
+        case "人工": type = 1;break;
+        case "材料": type = 3;break;
+        case "机械": type = 4;break;
+    }
+    glj.Type =type;
+    var gljItem = JSON.stringify(glj);
+
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/editGLJItem",
+        dataType:"json",
+        data:{"rationName":rationName,"GLJCode": GLJCode,"newGLJ":gljItem},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+
+            getGLJ();
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+            alert("error "+textStatus+" "+errorThrown);
+        }
+    })
+}
+)
+$("#deleteGLJ").click(function(){
+    var GLJCode = $("#did").val();
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/deleteGLJItem",
+        dataType:"json",
+        data:{"rationName":rationName,"GLJCode": GLJCode},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            $("tbody tr").html("");
+            getGLJ();
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+            alert("error "+textStatus+" "+errorThrown);
+        }
+    })
+})
+function addGLJItems(){
+    var $tr = $('<tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></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 td1,td2,td3,td4,td5,td6;
+    var code,name,guige,danwei,jijia,leixin;
+    td1 = $("td:eq(1)",$tr);td2 = $("td:eq(2)",$tr);td3 = $("td:eq(3)",$tr);td4 = $("td:eq(4)",$tr);td5 = $("td:eq(5)",$tr);td6 = $("td:eq(6)",$tr);
+    code = $("#gljcode").val();name = $("#gljname").val();guige = $("#gljgg").val();danwei=$("#gljdw").val();jijia = $("#gljjj").val();leixin = $("#gljlx").val();
+    td1.text(code);td2.text(name);td3.text(guige);td4.text(danwei);td5.text(jijia);td6.text(leixin)
+    $tr.appendTo("tbody");
+        var gljItem = {}
+        gljItem.GLJCode = code;
+        gljItem.GLJName = name;
+        gljItem.Specs = guige;
+        gljItem.Unit = danwei;
+        gljItem.BasePrice =Number(jijia);
+        var type
+        switch (leixin){
+            case "人工": type = 1;break;
+            case "材料": type = 3;break;
+            case "机械": type = 4;break;
+        }
+        gljItem.Type =type;
+        saveGLJ(gljItem);
+}
+function saveGLJ(glj){
+    var gljItem = JSON.stringify(glj)
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/saveGLJ",
+        data:{"rationName":rationName,"gljItem":gljItem},
+            dataType:"json",
+            cache:false,
+            timeout:1000,
+            success:function(result){
+
+            },
+            error:function(){
+
+            }
+            })
+
+ }
+function getQueryString(key){
+    var reg = new RegExp("(^|&)"+key+"=([^&]*)(&|$)");
+    var result = window.location.search.substr(1).match(reg);
+    return result?decodeURIComponent(result[2]):null;
+}
+
+
+
+  		//-->
+  	</SCRIPT>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

+ 310 - 0
web/rations/main.html

@@ -0,0 +1,310 @@
+<!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="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 class="navbar-text"></div>
+        </nav>
+        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
+          <ul class="nav navbar-nav px-1">
+                          <li class="nav-item">
+                              <a class="nav-link" href="javacript:void(0);" aria-haspopup="true" aria-expanded="false" data-toggle="modal" data-target="#add">新建定额库</a>
+                          </li>
+                      </ul>
+        </nav>
+    </div>
+    <div class="main">
+        <div class="content">
+            <div class="container-fluid">
+                <div class="row">
+                  <div class="col-md-8">
+                    <div class="warp-p2 mt-3">
+                      <table class="table table-hover table-bordered">
+                        <thead><tr><th>定额库名称</th><th width="160">添加时间</th><th width="90">操作</th></tr></thead>
+                        <tbody>
+                        <!--
+                          <tr><td><a href="dinge.html">XX定额库</a></td><td>2017-01-01 </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>
+                          <tr><td><a href="dinge.html">XX定额库</a></td><td>2017-01-01 </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>
+                          <tr><td><a href="dinge.html">XX定额库</a></td><td>2017-01-01 </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>
+                        -->
+                        </tbody>
+                      </table>
+                    </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="addInput" placeholder="输入定额库名称" type="text">
+                    </div>
+                  </form>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" id="rationAdd" class="btn btn-secondary" data-dismiss="modal">新建</button>
+                    <a href="" id="addCancel" 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 = "inputRation" placeholder="输入编码" type="text" value="">
+                    </div>
+                  </form>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" id="edtCancel" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                    <button type="button"  id="edtOK" class="btn btn-secondary" data-dismiss="modal">确定</button>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!--弹出删除-->
+    <div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <input type="hidden" id="did" 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>
+                    <a href="" id="deleteLib" 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>
+
+</body>
+<script type="text/javascript">
+//onLoad  获取所有定额库
+$(function(){
+    getRationLibs();
+})
+//为定额库添加跳转功能
+function addressdirect(){
+    $("tr:gt(0)").each(function() {
+        var td, a;
+        td = $("td:eq(0)", $(this));
+        a = $('a', td);
+        a.attr('href', "/ration/rationLib" + "?rationname=" + a.text());
+    })
+}
+//为定额库添加点击删除后对应定额库名称
+function deleteLib(){
+    $("tr:gt(0)").each(function() {
+        var td0, a1,td2,a2;
+        td2 = $("td:eq(2)", $(this));
+        td0 = $("td:eq(0)", $(this));
+        a1 = $('a', td0);
+        var str = a1.text();
+        a2 = $("a:eq(1)",td2);
+        a2.click(function(){
+            $("#did").val(str)
+        })
+       // a.attr('href', "/ration/rationLib" + "?rationname=" + a.text());
+    })
+}
+//为定额库添加点击编辑后对应定额库名称
+function editLib(){
+    $("tr:gt(0)").each(function() {
+        var td0, a1,td2,a2;
+        td2 = $("td:eq(2)", $(this));
+        td0 = $("td:eq(0)", $(this));
+        a1 = $('a', td0);
+        var str = a1.text();
+        a2 = $("a:eq(0)",td2);
+        a2.click(function(){
+            $("#did").val(str)
+        })
+        // a.attr('href', "/ration/rationLib" + "?rationname=" + a.text());
+    })
+}
+
+//删除按钮点击事件
+$("#deleteLib").click(function(){
+    var rationName = $("#did").val();
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/deleteRationLibs",
+        dataType:"json",
+        data:{"rationName": rationName},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            getRationLibs();//刷新界面重新获取定额库
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+
+        }
+    })
+});
+//获取定额库
+function getRationLibs(){
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/getRationLibs",
+        dataType:"json",
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            $("tbody tr").html("");
+            for(var i=0;i<result.data.length;i++){
+                addLibTag(result.data[i].DisplayName);
+            }
+            addressdirect();//为所有定额库添加跳转功能
+            deleteLib();//为所有定额库添加删除功能
+            editLib();
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+            alert("error "+textStatus+" "+errorThrown);
+        }
+    })
+}
+//显示定额库条目
+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>')
+    var $td0 = $("td:eq(0)",$tr);
+    var $td1 = $("td:eq(1)",$tr);
+    var a = $("a",$td0);
+    var str = string;
+    a.text(str);
+    var date = new Date().format("yyyy-MM-dd");
+    $td1.text(date);
+    $tr.appendTo("tbody");
+}
+//增加定额库ajax函数
+function addRation(str) {
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/addRationName",
+        data:{"rationDisPlayName": str},
+        dataType:"json",
+        cache:false,
+        timeout:50000,
+        success:function(result){
+
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+            alert("error "+textStatus+" "+errorThrown);
+        }
+    })
+
+}
+//增加定额库按钮点击事件
+$("#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 $td0 = $("td:eq(0)",$tr);
+    var $td1 = $("td:eq(1)",$tr);
+    var a = $("a",$td0);
+    var str = $("#addInput").val();
+    a.text(str);
+    var date = new Date().format("yyyy-MM-dd");
+    $td1.text(date);
+    $tr.appendTo("tbody");
+    addRation(str);
+    addressdirect();
+    deleteLib();
+});
+//编辑按钮点击事件
+$("#edtOK").click(function(){
+    var str = $("#did").val();
+    var newStr = $("#inputRation").val();
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/ration/editRationLibs",
+        dataType:"json",
+        data:{"rationName": str,"newName":newStr},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            getRationLibs();//刷新界面重新获取定额库
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+
+        }
+    })
+
+});
+Date.prototype.format = function(fmt) {
+    var o = {
+        "M+" : this.getMonth()+1,                 //月份
+        "d+" : this.getDate(),                    //日
+        "h+" : this.getHours(),                   //小时
+        "m+" : this.getMinutes(),                 //分
+        "s+" : this.getSeconds(),                 //秒
+        "q+" : Math.floor((this.getMonth()+3)/3), //季度
+        "S"  : this.getMilliseconds()             //毫秒
+    };
+    if(/(y+)/.test(fmt)) {
+        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
+    }
+    for(var k in o) {
+        if(new RegExp("("+ k +")").test(fmt)){
+            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
+        }
+    }
+    return fmt;
+}
+autoFlashHeight();
+</script>
+
+</html>

+ 45 - 0
web/rations/rations_route.js

@@ -0,0 +1,45 @@
+var express = require("express");
+var _rootDir = __dirname;
+var apiRouter =express.Router();
+
+var RationInterface = require(_rootDir+"/modules/rations/RationDB/interfaces");
+apiRouter.get("/main",function(req,res){
+    res.sendfile(_rootDir+"/web/rations/main.html");
+})
+
+apiRouter.get('/rationLib', function (req, res) {
+    res.sendFile(_rootDir+"/web/rations/dinge.html");
+});
+
+apiRouter.get('/gongliao', function (req, res) {
+    res.sendFile(_rootDir+"/web/rations/gongliao.html");
+});
+
+apiRouter.get('/fuzhu', function (req, res) {
+    res.sendFile(_rootDir+"/web/rations/fuzhu.html");
+});
+apiRouter.post("/addRationName",RationInterface.insert.RationLibInsert);
+apiRouter.post("/getRationTree",RationInterface.search.getRationTree);
+apiRouter.post("/saveTempRationTree",RationInterface.insert.TempRationTreeInsert);//Ϊ¿Õ¶¨¶î¿ârationtrees²åÈëÕ½ڵã
+apiRouter.post("/getRationLibs",RationInterface.search.getRationLibs);
+apiRouter.post("/deleteRationLibs",RationInterface.remove.deleteRationLibs);
+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("/editRationLibs",RationInterface.update.updateRationLib);
+apiRouter.post("/editGLJItem",RationInterface.update.updateGLJItem);
+apiRouter.post("/deleteRation",RationInterface.remove.deleteRation);
+apiRouter.post("/deleteRationGLJ",RationInterface.remove.deleteRationGLJ);
+apiRouter.post("/editRation",RationInterface.remove.deleteRationGLJ);
+apiRouter.post("/editRGLJAmount",RationInterface.update.updateRGLJAmount);
+apiRouter.post("/editRationItem",RationInterface.update.updateRationItem);
+
+module.exports = apiRouter;