Преглед на файлове

定额库逻辑视图部分分离,应用spreadjs

zhangenping преди 8 години
родител
ревизия
d908b4c6e0

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

@@ -0,0 +1,21 @@
+/**
+ * Created by Syusuke on 2017/3/20.
+ */
+var rationItemData = require('../models/rationTree');
+var callback = function(req, res, err, message, data){
+    res.json({error: err, message: message, data: data});
+}
+module.exports = {
+    getRationItems:function(req,res){}
+}
+var rationLibMapDAO = function(){};
+
+rationLibMapDAO.prototype.getDisplayRationLibs = function(userId, callback){
+    Projects.find({userId: userId, deleted: { $in: [false, null]}}, '-_id', function(err, templates){
+        if (err) {
+            callback(1, 'Error', null);
+        } else {
+            callback(0, '', templates);
+        }
+    });
+};

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

@@ -0,0 +1,72 @@
+/**
+ * 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);
+            }
+        })
+    }
+}

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

@@ -0,0 +1,53 @@
+/**
+ * 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 - 2
modules/rationLibEditor/RationEditorDB/Schemas.js

@@ -12,8 +12,6 @@ var connectMap = function(callBack){
 }
 
 
-
-
 var MainContentSchema = mongoose.Schema({
     ContentItems:String,//总说明
     CalcRule:String//计算规则

+ 15 - 21
modules/rationLibEditor/RationEditorDB/interfaces.js

@@ -22,7 +22,7 @@ var inserts = {};
 var searchs = {};
 var updates = {}
 var removes = {}
-inserts.RationLibInsert = function(req,res){
+/*inserts.RationLibInsert = function(req,res){
     var str = req.body.rationDisPlayName;
     Schemas.connectMap(function(db){
         var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
@@ -32,9 +32,9 @@ inserts.RationLibInsert = function(req,res){
            callback(req,res,false," ");
        })
     })
-}
+}*/
 inserts.MainContentInsert = function(){};
-inserts.RationSectionInsert = function(req,res){//find and updata;
+/*inserts.RationSectionInsert = function(req,res){//find and updata;
     var DBName = req.body.rationName;
     var rationSection = JSON.parse(req.body.rationSection);
     Schemas.connectMap(function(db){
@@ -65,7 +65,7 @@ inserts.RationSectionInsert = function(req,res){//find and updata;
             }
         })
     })
-};
+};*/
 inserts.SectionTextInsert = function(req,res){};
 inserts.RationItemsInsert = function(req,res){
     var DBName = req.body.rationName;
@@ -153,7 +153,7 @@ inserts.GLJTypeTreeInsert = function(){};
 inserts.MinorRationInsert = function(){};
 inserts.CoeListInsert = function(){};
 inserts.RationCoeInsert = function(){};
-inserts.TempRationTreeInsert = function(req,res){
+/*inserts.TempRationTreeInsert = function(req,res){
     var DBName = req.body.rationName;
     var rationTempTree = JSON.parse(req.body.rationTempTree);
     Schemas.connectMap(function(db){
@@ -181,8 +181,8 @@ inserts.TempRationTreeInsert = function(req,res){
             }
         })
     })
-}
-searchs.getRationTree = function(req,res){
+}*/
+/*searchs.getRationTree = function(req,res){
     //打开连接相映定额库
     //返回树结构到前段ztree处理
     var DBName = req.body.rationName;
@@ -206,8 +206,8 @@ searchs.getRationTree = function(req,res){
             }
         })
     });
-}
-searchs.getRationLibs = function(req,res){
+}*/
+/*searchs.getRationLibs = function(req,res){
     Schemas.connectMap(function(db){
         var LibMapModel = db.model("rationlibmaps",Schemas.RationLibMapSchema);
         LibMapModel.find({},{"DisplayName":1},function(err,data){
@@ -219,7 +219,7 @@ searchs.getRationLibs = function(req,res){
             }
         })
     })
-}
+}*/
 searchs.getGLJList = function(req,res){
     var DBName = req.body.rationName;
     Schemas.connectMap(function(db){
@@ -358,31 +358,25 @@ searchs.getRationByCode = function(req,res){
         })
     });
 }
-removes.deleteRationLibs = function(req,res){//只删除了映射表内容  级联操作待完成
+/*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 = 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")
-  /*                      var db = mongoose.createConnection("192.168.1.184"," rationLibMap", 60666)
-                        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.deleteRationMapItem=function(req,res){
     var rationName = req.body.rationName;
     Schemas.connectMap(function(db){
@@ -474,7 +468,7 @@ removes.deleteRationGLJ = function(req,res){
     })
 
 }
-updates.updateRationLib = function(req,res){
+/*updates.updateRationLib = function(req,res){
     var str = req.body.rationName;
     var newName = req.body.newName;
     Schemas.connectMap(function(db){
@@ -485,7 +479,7 @@ updates.updateRationLib = function(req,res){
             })
     })
 
-}
+}*/
 updates.updateGLJItem = function(req,res){
     var DBName = req.body.rationName;
     var GLJCode = req.body.GLJCode;

+ 9 - 0
modules/rationLibEditor/db/rationTree.js

@@ -0,0 +1,9 @@
+/**
+ * Created by Syusuke on 2017/3/20.
+ */
+var RationTreeSchema = mongoose.Schema({//章节树  //生成唯一id改为sectionid  改成string
+    SectionID:Number,
+    ParentID:Number,
+    NextSiblingID:Number,
+    Name:String
+});

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

@@ -0,0 +1,92 @@
+/**
+ * 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({"DisplayName":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();

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

@@ -0,0 +1,67 @@
+/**
+ * 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()

+ 17 - 8
modules/rationLibEditor/routes/rationLibEditor_route.js

@@ -2,13 +2,15 @@ var express = require("express");
 var apiRouter =express.Router();
 var _rootDir = __dirname;
 
+var RationLibMapController = require("../controller/RLibMapController")
+var RationTreeController = require("../controller/RTreeController")
 var path = require('path');
 var htmlPath = path.join(__dirname,'../../../','web/rationLibEditor/');
 apiRouter.get('/', function(req, res) {
         res.redirect('/main');
 });
 
-var RationInterface = require("../RationEditorDB/interfaces");
+var RationInterface = require("../db/interfaces");
 apiRouter.get("/main",function(req,res){
     res.render("rationLibEditor/main.html");
 })
@@ -24,12 +26,8 @@ apiRouter.get('/gongliao', function (req, res) {
 apiRouter.get('/fuzhu', function (req, res) {
     res.render("rationLibEditor/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("/addSection",RationInterface.insert.RationSectionInsert);
 apiRouter.post("/removeSection",RationInterface.remove.deleteRationSection);
 apiRouter.post("/saveGLJ",RationInterface.insert.GLJListInsert);
 apiRouter.post("/getGLJ",RationInterface.search.getGLJList);
@@ -40,7 +38,6 @@ 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("/deleteRationMapItem",RationInterface.remove.deleteRationMapItem);
@@ -51,4 +48,16 @@ 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);
+
 module.exports = apiRouter;

+ 130 - 0
web/rationLibEditor/_zSpread.js

@@ -0,0 +1,130 @@
+/**
+ * Created by Syusuke on 2017/3/17.
+ *
+ */
+(function($){
+    var _spSetting = {
+        spType:"",
+        view:{
+            comboBox:[],
+            lockedCells:[]
+        },
+        private:{
+            spType:"",
+            colCount:0,
+            cellPrimValue:null,
+            celCurrValue:null
+        }
+    }
+
+    _tools = {
+        isArray:function(arr){
+            return Object.prototype.toString.apply(arr) === "[object Array]"
+        },
+        clone:function(obj){  //���colon����  �������ֱ����ȸ��ƣ����󲻿���
+            if(obj===null) return null;
+            var o = _tools.isArray(obj)?[]:{};
+            for(var i in obj){
+                o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()): (typeof obj[i] === "object"? _tools.clone(obj[i]): obj[i]);
+            }
+            return o;
+        }
+    }
+
+
+    var _initSpread = function(spID,spSetting,headerItems){
+        spSetting.private.colCount = headerItems.length;
+        var spread = new GC.Spread.Sheets.Workbook(spID[0],{sheetCount:1});
+        var ActiveSheet = spread.getActiveSheet();
+        ActiveSheet.setColumnCount(headerItems.length, GC.Spread.Sheets.SheetArea.viewport);
+        ActiveSheet.options.isProtected = true;
+        ActiveSheet.getRange(-1, 0, -1 ,100, GC.Spread.Sheets.SheetArea.viewport).locked(false);
+        spread.options.tabStripVisible = false;
+        spread.options.scrollbarMaxAlign = false;
+        for(var i=0;i<headerItems.length;i++){
+            ActiveSheet.setValue(0, i, headerItems[i].headerName, GC.Spread.Sheets.SheetArea.colHeader);
+            ActiveSheet.setColumnWidth(i,headerItems[i].headerWidth, GC.Spread.Sheets.SheetArea.colHeader);
+        }
+        for(var i=0;i<spSetting.view.comboBox.length;i++){
+                var c = spSetting.view.comboBox[i]
+                var cellType = new GC.Spread.Sheets.CellTypes.ComboBox();
+                cellType.items(c.items);
+                ActiveSheet.getRange(c.row,c.col,c.rowCount,c.colCount, GC.Spread.Sheets.SheetArea.viewport).cellType(cellType);
+            }
+        ActiveSheet.getRange(-1, 1, -1 , 100, GC.Spread.Sheets.SheetArea.viewport).locked(true);
+
+        ActiveSheet.bind(GC.Spread.Sheets.Events.EditStarting,function(sender,args){
+            spSetting.private.cellCurrValue = null;
+            spSetting.private.cellPriValue = ActiveSheet.getValue(args.row,args.col);
+        })
+
+        ActiveSheet.bind(GC.Spread.Sheets.Events.EditEnding,function(sender,args){
+            spSetting.private.celCurrValue = ActiveSheet.getValue(args.row,args.col);
+            if(args.col == 0){
+                var a = spSetting.view.lockedCells;
+                var b = [];
+                ActiveSheet.getRange(args.row, 1, 1 , 100, GC.Spread.Sheets.SheetArea.viewport).locked(args.editingText == null);
+                a.forEach(function(x){
+                    b.push(x.col);
+                })
+                b.forEach(function(x){
+                    ActiveSheet.getCell(args.row,x).locked(true);
+                });
+                if(args.editingText == null){
+                    removeAction(spSetting)
+                   for(var i=0;i<spSetting.private.colCount;i++){
+                       ActiveSheet.setValue(args.row,i,null);
+                   }
+                }else{
+                    upsertAction(spSetting);
+                }
+            }else
+            upsertAction(spSetting);
+        })
+
+
+        return spread;
+    }
+    function upsertAction(spSetting){
+        var value =JSON.parse(spSetting.private);
+        $.ajax({
+            type:"POST",
+            url:"http://localhost:6060/rationLibEditor/insert" + spSetting.view.spType,
+            data:{"rationLibName":properties.realLibName,"value":value},
+            dataType:"json",
+            cache:false,
+            timeout:1000,
+            success:function(result){
+                spSetting.private.celCurrValue = null;
+                spSetting.private.cellPrimValue = null;
+            },
+            error:function(){
+            }
+        })
+    }
+    function removeAction(spSetting){
+        var value =JSON.parse(spSetting.private);
+        $.ajax({
+            type:"POST",
+            url:"http://localhost:6060/rationLibEditor/delete" + spSetting.view.spType,
+            data:{"rationLibName":properties.realLibName,"value":value},
+            dataType:"json",
+            cache:false,
+            timeout:1000,
+            success:function(result){
+                spSetting.private.celCurrValue = null;
+                spSetting.private.cellPrimValue = null;
+            },
+            error:function(){
+            }
+        })
+    }
+
+    $.fn.Spread = {
+        init:function(spID,zSetting,headerItems){
+            var spSetting = _tools.clone(_spSetting);
+            $.extend(true,spSetting,zSetting);
+            return  _initSpread(spID,spSetting,headerItems);
+        }
+    }
+}(jQuery))

+ 33 - 228
web/rationLibEditor/dinge.html

@@ -12,6 +12,7 @@
     <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>
 
@@ -67,16 +68,19 @@
                           <!-- Tab panes -->
                           <div class="tab-content">
                               <div class="tab-pane active" id="tde" role="tabpanel">
-                                  <div class="warp-p2">
-                                      <table class="table table-sm table-bordered m-0">
+                                 <div id="rationItemsSheet" class="warp-p2" style='width:100%; height:400px;'>
+
+                            <!--         <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>显示名称(以%s表示参数)</th><th>默认取费专业</th><th width="90">操作</th></tr></thead>
                                         <tbody id ="rationTbody">
 
                                         </tbody>
                                       </table>
-                                      <div class="m-2"><a href="javacript:void(0);" data-toggle="modal" data-target="#add" id="mkadd" class="btn btn-primary btn-sm">添加</a></div>
+                            -->
+
                                   </div>
+
                               </div>
                               <div class="tab-pane" id="tsm" role="tabpanel">
                                   <div class="warp-p2">
@@ -152,15 +156,17 @@
                             <!-- Tab panes -->
                             <div class="tab-content">
                                 <div class="tab-pane active" id="bglj" role="tabpanel">
-                                    <div 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>
+                                   <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>
 
-                                          </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">
@@ -182,7 +188,7 @@
                                           <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"></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>
+                                              <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>
@@ -856,6 +862,7 @@
         </div>
     </div>
     <!-- JS. -->
+    <script src = "/lib/spreadjs/gc.spread.sheets.all.10.0.1.min.js"></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>
@@ -864,8 +871,10 @@
   	<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/_zSpread.js"></script>
+    <script type="text/javascript" src="/web/rationLibEditor/js/dinge.js"></script>
     <SCRIPT type="text/javascript">
-var rationName = getQueryString("rationname");
+/*var rationName = getQueryString("rationname");*/
 var treeObj;
 var zNodes =[
     { id:1, pId:0,nId:2, name:"第一章 土石方工程",isParent:true,children:[]},
@@ -884,7 +893,7 @@ var zNodes =[
 ];
 var setting = {
     view: {
-    //	showIcon: showIconForTree,//已存在*/
+        //	showIcon: showIconForTree,//已存在*/
         addHoverDom: addHoverDom,
         removeHoverDom: removeHoverDom,
         selectedMulti: false
@@ -917,9 +926,8 @@ var setting = {
         onRemove: onRemove,
         onRename: onRename
     }
-};
+}; //ztree  setting
 var log, className = "dark";
-//章节树点击事件
 var properties = {
 }
 //点击树获取定额
@@ -947,35 +955,7 @@ function beforeRemove(treeId, treeNode) {
     return true;
 }
 //删除树节点事件
-function onRemove(e, treeId, treeNode) {
-    var id = treeNode.id;
-    var pNodes = treeNode.getParentNode().children;
-    for(var i=0;i<pNodes.length;i++){
-        if(pNodes[i].nId==id){
-            pNodes[i].nId = -1;
-            saveNewSection(pNodes[i]);
-        }
-    }
-    $.ajax({
-        type:"POST",
-        url:"http://localhost:6060/ration/getRationsBySectionID",
-        data:{"rationName": rationName,"sectionID": treeNode.id},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success:function(result){
-            if(result){
-                caseDeleteTreeNode(result.data)
-            }
 
-        },
-        error:function(){
-        }
-    })
-    removeSection(id)
-    $("#rationTbody").html("");
-    $("#rationGLJTbody").html("");
-}
 //级联删除章节点
 function caseDeleteTreeNode(arryObj){
     for(var i=0;i<arryObj.length;i++){
@@ -1026,11 +1006,6 @@ function beforeRename(treeId, treeNode, newName, isCancel) {
     }
     return true;
 }
-//编辑树节点事件(添加节点到数据库)
-function onRename(e, treeId, treeNode, isCancel) {
-    saveNewSection(treeNode);
-}
-//增加节点Ajax函数
 function showRemoveBtn(treeId, treeNode) {
     return true
 }
@@ -1045,56 +1020,8 @@ function getTime() {
             ms=now.getMilliseconds();
     return (h+":"+m+":"+s+ " " +ms);
 }
-var newCount = 13;
-function addHoverDom(treeId, treeNode) {
-    var sObj = $("#" + treeNode.tId + "_span");
-    if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0||(treeNode.level==2)) return;
-    var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
-            + "' title='add node' onfocus='this.blur();'></span>";
-    sObj.after(addStr);
-    var btn = $("#addBtn_"+treeNode.tId);
-    if (btn) btn.bind("click", function(){
-        var zTree = $.fn.zTree.getZTreeObj("treeDemo");
-        if((treeNode.level==0)){
-            var newNode = zTree.addNodes(treeNode, {id:(++newCount), pId:treeNode.id,nId:-1,isParent:true, name:"请输入章节名称",children:[]});
 
-        }
-        else{
-            var newNode = zTree.addNodes(treeNode, {id:(++newCount), pId:treeNode.id,nId:-1,isParent:false, name:"请输入章节名称"});
 
-        }
-        saveNewSection(newNode[0]);
-        var pnode = newNode[0].getPreNode()
-        if(pnode){
-            pnode.nId = newNode[0].id;
-            saveNewSection(pnode);
-        }
-        return false;
-    });
-};
-function saveNewSection(n){
-    var sec={};
-    sec.SectionID = n.id;
-    sec.ParentID = n.pId;
-    sec.NextSiblingID = n.nId;
-    sec.Name = n.name;
-    var section = JSON.stringify(sec);
-    $.ajax({
-        type:"POST",
-        url:"http://localhost:6060/ration/addSection",
-        data:{"rationName":rationName,"rationSection":section},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success:function(result){
-         //   getRationTree();//重新获取刷新树节点
-
-        },
-        error:function(){
-          //  getRationTree();
-        }
-    })
-}
 function removeHoverDom(treeId, treeNode) {
     $("#addBtn_"+treeNode.tId).unbind().remove();
 };
@@ -1102,124 +1029,12 @@ function selectAll() {
     var zTree = $.fn.zTree.getZTreeObj("treeDemo");
     zTree.setting.edit.editNameSelectAll =  $("#selectAll").attr("checked");
 }
-//onLoad事件
-$(document).ready(function(){
-   getRationTree();
-});
-//获取章节树ajax函数
-function  getRationTree(){
-    $.ajax({
-        type:"POST",
-        url:"http://localhost:6060/ration/getRationTree",
-        data:{"rationName": rationName},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success:function(result){
-            createRationTree(result.data);//根据返回的全部定额章节对象,构架树。
-        },
-        error:function(){
-            treeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes);
-            saveTempTree();
-        }
-    })
-}
-//新建的定额库保存模板节点
-function saveTempTree(){
-    var rationTempTree = JSON.stringify(zNodes)
-    $.ajax({
-        type:"POST",
-        url:"http://localhost:6060/ration/saveTempRationTree",
-        data:{"rationName":rationName,"rationTempTree":rationTempTree},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success:function(result){
 
-        },
-        error:function(){
 
-        }
-    })
-}
-//根据返回的节点集合构建树节点
-function createRationTree(obj){
-    var treeArr;
-    treeArr = makeNodes(obj);
-    var  maxIDNode = obj.reduce(function(a,b){
-        return (a.id> b.id)?a:b;
-    });
-    newCount = maxIDNode.id;
-   treeObj = $.fn.zTree.init($("#treeDemo"), setting, treeArr);
-}
-function makeNodes(obj){
-    var arr=[];
-    arr = obj.filter(function(x){
-        return x.ParentID==0
-    })
-    arr.forEach(function(x){
-        x.id = x.SectionID;
-        x.pId = x.ParentID;
-        x.nId = x.NextSiblingID;
-        x.name = x.Name;
-        x.isParent = true
-        x.lev = 0
-    });
-    arr  =  sortArray(arr);
-    for(var i=0;i<arr.length;i++){
-        var L1 = [];
-        L1 = obj.filter(function(x){
-            return x.ParentID ==arr[i].id;
-        });
-        L1.forEach(function(x){
-            x.id = x.SectionID;
-            x.pId = x.ParentID;
-            x.nId = x.NextSiblingID;
-            x.name = x.Name;
-            x.isParent = true
-            x.lev = 1
-        });
-        L1=sortArray(L1);
-        for(var j=0; j<L1.length;j++){
-            var L2 = [];
-            L2 =obj.filter(function(x){
-                return x.ParentID == L1[j].id;
-            })
-            L2.forEach(function(x){
-                x.id = x.SectionID;
-                x.pId = x.ParentID;
-                x.nId = x.NextSiblingID;
-                x.name = x.Name;
-                x.isParent = false;
-                x.lev = 2
-            })
-            L2=sortArray(L2)
-            L1[j].children = L2;
-        }
-        arr[i].children = L1;
-    }
-    return arr;
-}
-function sortArray(arr){
-    var a = [];
-    for(var i=0;i<arr.length;i++)
-        if (arr[i].NextSiblingID == -1)
-            a.push(arr[i])
-    for(; a.length < arr.length;){
-        for(var j=0;j<arr.length;j++) {
-            if (arr[j].NextSiblingID == a[0].SectionID)
-            {a.unshift(arr[j]); break;}
-        }
-    }
-    return a ;
-}
-function getQueryString(key){
-    var reg = new RegExp("(^|&)"+key+"=([^&]*)(&|$)");
-    var result = window.location.search.substr(1).match(reg);
-    return result?decodeURIComponent(result[2]):null;
-}
-$("#dinge").attr('href', "/ration/rationLib" + "?rationname=" + rationName);
-$("#gongliao").attr('href', "/ration/gongliao" + "?rationname=" + rationName);
+
+
+$("#dinge").attr('href', "/ration/rationLib" + "?rationname=" + rationLibName);
+$("#gongliao").attr('href', "/rationLibEditor/gongliao" + "?rationname=" + rationLibName);
 //新增定额事件
 $("#mkadd").click(function(){
     var section = treeObj.getSelectedNodes();
@@ -1257,7 +1072,7 @@ function saveRationItem(obj){
     var rationItem = JSON.stringify(obj)
     $.ajax({
         type:"POST",
-        url:"http://localhost:6060/ration/saveRationItem",
+        url:"http://localhost:6060/rationLibEditor/saveRationItem",
         data:{"rationName":rationName,"rationItem":rationItem},
         dataType:"json",
         cache:false,
@@ -1293,20 +1108,10 @@ function getRationItems(sectionID){
 }
 //显示定额条目
 function showRationItems(data){
-    $("#rationTbody tr").remove();
-    for(var i=0 ;i<data.length;i++){
-        var $tr = $('<tr><td></td><td><a href="#"></a></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,a;
-        var code,name,danwei,jijia,xsname,qfzy;
-        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),
-                a = $("a",td1);
-        code = data[i].RationCode;name = data[i].RationName;danwei=data[i].Unit;jijia = data[i].BasePrice;xsname = data[i].Caption;qfzy=data[i].FeeType;
-        a.text(code);td2.text(name);td3.text(danwei);td4.text(jijia);td5.text(xsname);td6.text(qfzy);
-        $tr.appendTo("#rationTbody");
-    }
-    bindRationClick();
-    bindRationEdit();
-    bindRationDelete();
+    //var RationJSONStr = JSON.stringify(data);
+    var spread = $("#rationItemsSheet").data("workbook");
+    spread.fromJSON(data);
+
 }
 //绑定点击定额号
 function bindRationClick(){

+ 1 - 1
web/rationLibEditor/gongliao.html

@@ -225,7 +225,7 @@
     <SCRIPT type="text/javascript">
   		<!--
 var rationName = getQueryString("rationname");//请求参数(定额库名称)
-$("#drirect-dinge").attr('href', "/ration/rationLib" + "?rationname=" + rationName );
+$("#drirect-dinge").attr('href', "/rationLibEditor/rationLib" + "?rationname=" + rationName );
 var setting = {
     view: {
         showIcon: false

+ 347 - 0
web/rationLibEditor/js/dinge.js

@@ -0,0 +1,347 @@
+/**
+ * Created by Syusuke on 2017/3/17.
+ */
+var rationLibName = getQueryString("rationname");//获取定额库参数
+function getQueryString(key){
+    var reg = new RegExp("(^|&)"+key+"=([^&]*)(&|$)");
+    var result = window.location.search.substr(1).match(reg);
+    return result?decodeURIComponent(result[2]):null;
+}
+//----------------------------------------------------页面初始化
+var properties = {};//综合属性
+properties.sectionSelected = "";//选择的章节
+properties.rationSelected = "";//选择的定额
+function getRealLib(){
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/getRealLibName",
+        data:{"rationName":rationLibName},
+        async:false,
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+            properties.realLibName = result.data[0].DBName
+        },
+        error:function(){}
+    })
+}
+$(document).ready(function(){
+    getRealLib();
+    getRationTree();
+    mkRationItemSpread();
+});
+//---------------------------------------------------初始化章节树界面
+function  getRationTree(){
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/getRationTree",
+        data:{"rationLibName": properties.realLibName},
+        dataType:"json",
+        cache:false,
+        timeout:500000,
+        success:function(result,textStatus,status){
+            if(status.status == 200) createRationTree(result.data);//根据返回的全部定额章节对象,构架树。
+            else{
+                treeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes);
+                saveTempTree();
+            }
+        },
+        error:function(){
+            alert("caonima")
+        }
+    })
+}
+//根据返回的节点集合构建树节点
+function createRationTree(obj){
+    var treeArr;
+    treeArr = makeNodes(obj);
+    var  maxIDNode = obj.reduce(function(a,b){
+        return (a.id> b.id)?a:b;
+    });
+    newCount = maxIDNode.id;
+    treeObj = $.fn.zTree.init($("#treeDemo"), setting, treeArr);
+}
+function makeNodes(obj){
+    var arr=[];
+    arr = obj.filter(function(x){
+        return x.ParentID==0
+    })
+    arr.forEach(function(x){
+        x.id = x.SectionID;
+        x.pId = x.ParentID;
+        x.nId = x.NextSiblingID;
+        x.name = x.Name;
+        x.isParent = true
+        x.lev = 0
+    });
+    arr  =  sortArray(arr);
+    for(var i=0;i<arr.length;i++){
+        var L1 = [];
+        L1 = obj.filter(function(x){
+            return x.ParentID ==arr[i].id;
+        });
+        L1.forEach(function(x){
+            x.id = x.SectionID;
+            x.pId = x.ParentID;
+            x.nId = x.NextSiblingID;
+            x.name = x.Name;
+            x.isParent = true
+            x.lev = 1
+        });
+        L1=sortArray(L1);
+        for(var j=0; j<L1.length;j++){
+            var L2 = [];
+            L2 =obj.filter(function(x){
+                return x.ParentID == L1[j].id;
+            })
+            L2.forEach(function(x){
+                x.id = x.SectionID;
+                x.pId = x.ParentID;
+                x.nId = x.NextSiblingID;
+                x.name = x.Name;
+                x.isParent = false;
+                x.lev = 2
+            })
+            L2=sortArray(L2)
+            L1[j].children = L2;
+        }
+        arr[i].children = L1;
+    }
+    return arr;
+}
+function sortArray(arr){
+    var a = [];
+    for(var i=0;i<arr.length;i++)
+        if (arr[i].NextSiblingID == -1)
+            a.push(arr[i])
+    for(; a.length < arr.length;){
+        for(var j=0;j<arr.length;j++) {
+            if (arr[j].NextSiblingID == a[0].SectionID)
+            {a.unshift(arr[j]); break;}
+        }
+    }
+    return a ;
+}
+//新建的定额库保存模板节点
+function saveTempTree(){
+    var N = []
+    for(i=0;i<zNodes.length;i++){
+        var node ={}
+        node.SectionID = zNodes[i].id;
+        node.ParentID = zNodes[i].pId;
+
+        node.NextSiblingID = zNodes[i].nId;
+        node.Name =zNodes[i].name;
+        N.push(node);
+    }
+    var rationTempTree = JSON.stringify(N)
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/saveTempRationTree",
+        data:{"rationName":rationLibName,"rationTempTree":rationTempTree},
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+
+        },
+        error:function(){
+
+        }
+    })
+}
+//--------------------------------------------------------树处理事件
+var newCount = 13;
+//新增树节点
+function addHoverDom(treeId, treeNode) {
+    var sObj = $("#" + treeNode.tId + "_span");
+    if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0||(treeNode.level==2)) return;
+    var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+        + "' title='add node' onfocus='this.blur();'></span>";
+    sObj.after(addStr);
+    var btn = $("#addBtn_"+treeNode.tId);
+    if (btn) btn.bind("click", function(){
+        var zTree = $.fn.zTree.getZTreeObj("treeDemo");
+        if((treeNode.level==0)){
+            var newNode = zTree.addNodes(treeNode, {id:(++newCount), pId:treeNode.id,nId:-1,isParent:true, name:"请输入章节名称",children:[]});
+
+        }
+        else{
+            var newNode = zTree.addNodes(treeNode, {id:(++newCount), pId:treeNode.id,nId:-1,isParent:false, name:"请输入章节名称"});
+
+        }
+        saveNewSection(newNode[0]);
+        var pnode = newNode[0].getPreNode()
+        if(pnode){
+            pnode.nId = newNode[0].id;
+            saveNewSection(pnode);
+        }
+        return false;
+    });
+};
+//保存新增的节点
+function saveNewSection(n){
+    var sec={};
+    sec.SectionID = n.id;
+    sec.ParentID = n.pId;
+    sec.NextSiblingID = n.nId;
+    sec.Name = n.name;
+    var section = JSON.stringify(sec);
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/addSection",
+        data:{"rationLibName":properties.realLibName,"rationSection":section},
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+        },
+        error:function(){
+        }
+    })
+}
+//编辑树节点事件(添加节点到数据库)
+function onRename(e, treeId, treeNode, isCancel) {
+    saveNewSection(treeNode);
+}
+function onRemove(e, treeId, treeNode) {
+    var id = treeNode.id;
+    var pNodes = treeNode.getParentNode().children;
+    for(var i=0;i<pNodes.length;i++){
+        if(pNodes[i].nId==id){
+            pNodes[i].nId = -1;
+            saveNewSection(pNodes[i]);
+        }
+    }
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/deleteSection",
+        data:{"rationLibName":properties.realLibName,"sectionID": treeNode.id},
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+            //if(result){
+            //    caseDeleteTreeNode(result.data)
+            //}
+        },
+        error:function(){
+        }
+    })
+    removeSection(id)
+    $("#rationTbody").html("");
+    $("#rationGLJTbody").html("");
+}
+//--------------------------------------------------------定额spreadjs
+var spSetting_ration = {
+    spType:"Ration",
+    view:{
+        comboBox:[
+            {row:-1,col:2,rowCount:-1,colCount:1}
+        ],
+        lockedCells:[
+            {row:-1,col:3,rowCount:-1, colCount:1}
+        ]
+    }
+};
+var spSetting_rationGLJ = {
+    spType:"RationGLJ",
+    view:{
+        comboBox:[],
+        lockedCells:[
+            {row:-1,col:1,rowCount:-1, colCount:1},
+            {row:-1,col:2,rowCount:-1, colCount:1},
+            {row:-1,col:3,rowCount:-1, colCount:1},
+            {row:-1,col:5,rowCount:-1, colCount:1},
+            {row:-1,col:6,rowCount:-1, colCount:1}
+        ]
+    }
+};
+var ration_header = [
+    {headerName:"编码",headerWidth:120},
+    {headerName:"名称",headerWidth:400},
+    {headerName:"单位",headerWidth:120},
+    {headerName:"基价",headerWidth:120},
+    {headerName:"显示名称(以%s表示参数)",headerWidth:450},
+    {headerName:"取费专业",headerWidth:120}
+]
+var rationGLJ_header = [
+    {headerName:"编码",headerWidth:160},
+    {headerName:"名称",headerWidth:400},
+    {headerName:"单位",headerWidth:160},
+    {headerName:"单位基价",headerWidth:160},
+    {headerName:"定额消耗",headerWidth:160},
+    {headerName:"类型",headerWidth:160},
+    {headerName:"操作",headerWidth:130}
+]
+function editRationStarting(spread_setting,args){
+    properties.rationSelected = args.editingText;
+}
+function editRationEnding(spread,spread_setting,args){
+    if(spread_setting.event.remove)
+        Remove(spread_setting,args);
+    else{
+        var ActiveSheet = spread.getActiveSheet();
+        var rationItem = {}
+     // rationItem.RationCode = ActiveSheet.getValue(args.row,0);
+        rationItem.RationCode = args.editingText;
+        rationItem.RationName = ActiveSheet.getValue(args.row,1);
+        rationItem.Unit = ActiveSheet.getValue(args.row,2);
+        rationItem.BasePrice = Number(ActiveSheet.getValue(args.row,3));
+        if(properties.sectionSelected = "")
+        {
+            alert("请选择章节点")
+            return;
+        }
+        else
+        rationItem.SectionID = properties.sectionSelected;
+        rationItem.ContentID = 0;
+        rationItem.Caption = ActiveSheet.getValue(args.row,4);
+        rationItem.FeeType = Number(ActiveSheet.getValue(args.row,5))
+        upsert(spread_setting,rationItem);
+    }
+}
+//通用remove
+function Remove(spread_setting,args){
+    AjaxRemove(spread_setting);
+}
+//通用upsert
+function upsert(spread_setting,data){
+    AjaxUpsert(spread_setting,data)
+}
+function AjaxRemove(spread_setting){
+    var pro = JSON.stringify(properties);
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/remove"+spread_setting.name,
+        data:{"setting":spread_setting,"properties":pro},
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+            spread_setting.event.remove = false;
+        },
+        error:function(){}
+    })
+}
+function AjaxUpsert(spread_setting,data){
+    var pro = JSON.stringify(spread_setting.properties);
+    var dataStr = JSON.stringify(data);
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/upsert"+spread_setting.name,
+        data:{"properties":pro,"data":dataStr},
+        dataType:"json",
+        cache:false,
+        timeout:1000,
+        success:function(result){
+            spread_setting.event.upsert = false;
+        },
+        error:function(){}
+    })
+}
+function mkRationItemSpread(){
+    var rationSpread =  $.fn.Spread.init($("#rationItemsSheet"),spSetting_ration,ration_header);
+    var rationGLJSpread =  $.fn.Spread.init($("#rationGLJSheet"),spSetting_rationGLJ,rationGLJ_header);
+}

+ 3 - 0
web/rationLibEditor/js/gongliao.js

@@ -0,0 +1,3 @@
+/**
+ * Created by Syusuke on 2017/3/22.
+ */

+ 171 - 0
web/rationLibEditor/js/mainJ.js

@@ -0,0 +1,171 @@
+/**
+ * Created by Syusuke on 2017/3/17.
+ */
+$(function(){
+    getRationLibs();
+})
+
+function addressdirect(){
+    $("tr:gt(0)").each(function() {
+        var td, a;
+        td = $("td:eq(0)", $(this));
+        a = $('a', td);
+        a.attr('href', "/rationLibEditor/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)
+        })
+    })
+}
+
+$("#deleteLib").click(function(){
+    var rationLibName = $("#did").val();
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/deleteRationLibs",
+        dataType:"json",
+        data:{"rationName": rationLibName},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            getRationLibs();
+        },
+        error:function(iqXHR,textStatus,errorThrown){
+
+        }
+    })
+
+
+});
+function getRationLibs(){
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/getRationDisplayNames",
+        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");
+}
+
+function addRation(str) {
+    $.ajax({
+        type:"POST",
+        url:"http://localhost:6060/rationLibEditor/addRationLib",
+        dataType:"json",
+        data:{"rationDisPlayName": str},
+        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/rationLibEditor/editRationLibs",
+        dataType:"json",
+        data:{"rationName": str,"newName":newStr},
+        cache:false,
+        timeout:50000,
+        success:function(result){
+            getRationLibs();
+        },
+        error:function(jqXHR){
+            var err = JSON.parse(jqXHR.responseText);
+            alert(err.error);
+        }
+    })
+
+});
+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();

+ 1 - 188
web/rationLibEditor/main.html

@@ -132,197 +132,10 @@
     <!-- 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="/web/rationLibEditor/js/mainJ.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,
-        async:false,
-        timeout:50000,
-        success:function(result){
-        //    getRationLibs();//刷新界面重新获取定额库
-        },
-        error:function(iqXHR,textStatus,errorThrown){
-
-        }
-    })
-    $.ajax({
-        type:"POST",
-        url:"http://localhost:6060/ration/deleteRationMapItem",
-        dataType:"json",
-        data:{"rationName": rationName},
-        async:false,
-        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>