浏览代码

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

TonyKang 8 年之前
父节点
当前提交
c37f93fdaa

+ 39 - 16
modules/billsLib/billsLibControllers/billsLibControllers.js

@@ -17,15 +17,26 @@ var callback = function(req, res, err, message, data){
 }
 }
 
 
 module.exports = {
 module.exports = {
+    getMaxNumber: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsLibDao.getMaxNumber(data, function(err, message, maxNumber){
+            callback(req, res, err, message, maxNumber);
+        });
+    },
+    getABillsLib: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsLibDao.getABillsLib(data, function(err, message, data){
+            callback(req, res, err, message, data);
+        });
+    },
     getStdBillsLib: function(req, res){
     getStdBillsLib: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.getStdBillsLib(data.userId, function(err, message, stdBillsLib){
+        billsLibDao.getStdBillsLib(data, function(err, message, stdBillsLib){
             callback(req, res, err, message, stdBillsLib );
             callback(req, res, err, message, stdBillsLib );
         });
         });
     },
     },
     createStdBillsLib: function(req, res){
     createStdBillsLib: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        var billsLibName = data.name;
          billsLibDao.createStdBillsLib(data, function(err, message, info){
          billsLibDao.createStdBillsLib(data, function(err, message, info){
             callback(req, res, err, message, info);
             callback(req, res, err, message, info);
          });
          });
@@ -72,6 +83,18 @@ module.exports = {
             callback(req, res, err, message, null);
             callback(req, res, err, message, null);
         });
         });
     },
     },
+    updateBillsArr: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsLibDao.updateBillsArr(data, function(err, message){
+           callback(req, res, err, message, null);
+        });
+    },
+    updateRecharge: function(req, res){
+      var data = JSON.parse(req.body.data);
+        billsLibDao.updateRecharge(data, function(err, message){
+            callback(req, res, err, message, null);
+        });
+    },
     deleteBills: function(req, res){
     deleteBills: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
         billsLibDao.deleteBills(data, function(err, message){
         billsLibDao.deleteBills(data, function(err, message){
@@ -84,40 +107,40 @@ module.exports = {
             callback(req, res, err, message, jobs);
             callback(req, res, err, message, jobs);
         });
         });
     },
     },
-    getSomeJobs: function(req, res){
+    createJobContent: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.getSomeJobs(data, function(err, message, jobs){
-           callback(req, res, err, message, jobs);
+        billsLibDao.createJobContent(data, function(err, message, id){
+            callback(req, res, err, message, id);
         });
         });
     },
     },
-    createJobContent: function(req, res){
+    updateJobContent: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.createJobContent(data, function(err, message){
-            callback(req, res, err, message, null);
+        billsLibDao.updateJobContent(data, function(err, message, id){
+            callback(req, res, err, message, id);
         });
         });
     },
     },
-    updateJobContent: function(req, res){
+    updateValue: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.updateJobContent(data, function(err, message){
+        billsLibDao.updateValue(data, function(err, message){
             callback(req, res, err, message, null);
             callback(req, res, err, message, null);
-        });
+        })
     },
     },
     deleteJobContent: function(req, res){
     deleteJobContent: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.deleteJobContent(data.jobId, function(err, message){
+        billsLibDao.deleteJobContent(data, function(err, message){
             callback(req, res, err, message, null);
             callback(req, res, err, message, null);
         });
         });
     },
     },
     getItemCharacter: function(req, res){
     getItemCharacter: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.getItemCharacter(data.billsLibId, function(err, message, items){
+        billsLibDao.getItemCharacter(data, function(err, message, items){
             callback(req, res, err, message, items);
             callback(req, res, err, message, items);
         });
         });
     },
     },
     createItemCharacter: function(req, res){
     createItemCharacter: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.createItemCharacter(data, function(err, message){
-            callback(req, res, err, message, null);
+        billsLibDao.createItemCharacter(data, function(err, message, id){
+            callback(req, res, err, message, id);
         });
         });
     },
     },
     updateItemCharacter: function(req, res){
     updateItemCharacter: function(req, res){
@@ -128,7 +151,7 @@ module.exports = {
     },
     },
     deleteItemCharacter: function(req, res){
     deleteItemCharacter: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
-        billsLibDao.deleteItemCharacter(data.itemId, function(err, message){
+        billsLibDao.deleteItemCharacter(data, function(err, message){
             callback(req, res, err, message, null);
             callback(req, res, err, message, null);
         });
         });
     }
     }

+ 390 - 153
modules/billsLib/billsLibModel/billsLibInterfaces.js

@@ -11,9 +11,47 @@ var ItemCharacter = model.itemCharacterMod;
 var fieldArr = ["code", "name", "unit", "ruleText", "Expression"];
 var fieldArr = ["code", "name", "unit", "ruleText", "Expression"];
 
 
 var billsLibDao = function(){};
 var billsLibDao = function(){};
+
+billsLibDao.prototype.getMaxNumber = function(gData, callback){
+    var billsLibId = gData.billsLibId;
+    var field = gData.field;
+    if(field === 'jobs'){
+        JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
+            if(err){
+                callback(1, 'Error', null);
+            }
+            else {
+                callback(0, '', result);
+            }
+        });
+    }
+    else if(field === 'items'){
+        ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
+            if(err){
+                callback(1, 'Error', null);
+            }
+            else {
+                callback(0, '', result);
+            }
+        });
+    }
+};
 //----------StdBillsLib-------------------
 //----------StdBillsLib-------------------
-billsLibDao.prototype.getStdBillsLib = function(userId, callback){
-    StdBillsLib.find({}, "-_id", function(err, data){
+billsLibDao.prototype.getABillsLib = function(data, callback){
+    var billsLibId = data.billsLibId;
+    StdBillsLib.find({billsLibId: billsLibId, deleted: false}, function(err, data){
+        if(err){
+            callback(1, 'Error', null);
+        }
+        else {
+            callback(0, '', data);
+        }
+    });
+};
+
+billsLibDao.prototype.getStdBillsLib = function(data, callback){
+    var userId = data.userId;
+    StdBillsLib.find({userId: userId, deleted: false}, "-_id", function(err, data){
         if(err){
         if(err){
             callback(1, "Error", null);
             callback(1, "Error", null);
         }
         }
@@ -21,18 +59,21 @@ billsLibDao.prototype.getStdBillsLib = function(userId, callback){
             callback(0, "", data);
             callback(0, "", data);
         }
         }
     })
     })
-}
+};
 
 
 billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
 billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
-    counter.getIDAfterCount("bills", 1, function(err, result){
+    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
         var billsLibId = result.value.sequence_value;
         var billsLibId = result.value.sequence_value;
+        var userId = clibData.userId;
         var billsLibName = clibData.name;
         var billsLibName = clibData.name;
         var createDate = Date.now();
         var createDate = Date.now();
         var newStdBillsLib = {
         var newStdBillsLib = {
+            userId: userId,
             billsLibId: billsLibId,
             billsLibId: billsLibId,
             billsLibName: billsLibName,
             billsLibName: billsLibName,
-            createDate: createDate
-        }
+            createDate: createDate,
+            deleted: false
+        };
         StdBillsLib.create(newStdBillsLib, function(err){
         StdBillsLib.create(newStdBillsLib, function(err){
             if(err){
             if(err){
                 callback(1, "Error", null);
                 callback(1, "Error", null);
@@ -49,18 +90,18 @@ billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
             }
             }
         });
         });
     });
     });
-}
+};
 
 
 billsLibDao.prototype.deleteStdBillsLib = function(billsLibId, callback){
 billsLibDao.prototype.deleteStdBillsLib = function(billsLibId, callback){
-    StdBillsLib.remove({billsLibId: billsLibId}, function(err){
+    StdBillsLib.update({billsLibId: billsLibId}, {$set: {deleted: true}}, function(err){
         if(err){
         if(err){
-            callback(1, "Error");
+            callback(1, 'Error');
         }
         }
         else{
         else{
-            callback(0, "");
+            callback(0, '');
         }
         }
     });
     });
-}
+};
 
 
 billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
 billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
     var billsLibId = renameData.id;
     var billsLibId = renameData.id;
@@ -73,10 +114,10 @@ billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
             callback(0, "");
             callback(0, "");
         }
         }
     });
     });
-}
+};
 
 
 billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
 billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
-    StdBillsLib.find({billsLibId: billsLibId}, "-_id", function(err,  data){
+    StdBillsLib.find({billsLibId: billsLibId, deleted: false}, "-_id", function(err,  data){
         if(err){
         if(err){
             callback(1, "Error", null);
             callback(1, "Error", null);
         }
         }
@@ -87,7 +128,7 @@ billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
 }
 }
 //----------------------------Bills---------------------
 //----------------------------Bills---------------------
 billsLibDao.prototype.getBills = function (billsLibId, callback) {
 billsLibDao.prototype.getBills = function (billsLibId, callback) {
-    Bills.find({billsLibId: billsLibId}, "-_id",  function(err, billsData){
+    Bills.find({billsLibId: billsLibId, deleted: false}, "-_id",  function(err, billsData){
         if(err){
         if(err){
             callback(1, "Error", null);
             callback(1, "Error", null);
         }
         }
@@ -98,66 +139,98 @@ billsLibDao.prototype.getBills = function (billsLibId, callback) {
 }
 }
 
 
 billsLibDao.prototype.createBills = function(cbillsData, callback){
 billsLibDao.prototype.createBills = function(cbillsData, callback){
-        var newId = cbillsData.newId;
-        var pid = cbillsData.ParentID;
-        var nid = cbillsData.NextSiblingID;
-        var billsLibId = cbillsData.billsLibId;
-        var newBills = {
-            ID: newId,
-            ParentID: pid,
-            NextSiblingID: nid,
-            billsLibId: billsLibId,
-            code: '',
-            name: '',
-            unit: '',
-            ruleText: '',
-            Expression: '',
-            recharge:'',
-        };
-        Bills.create(newBills, function(err){
-            if(err){
-                callback(1, "Error");
-            }
-            else{
-                callback(0, "");
-            }
-        });
-}
+    var newId = cbillsData.newId;
+    var pid = cbillsData.ParentID;
+    var nid = cbillsData.NextSiblingID;
+    var billsLibId = cbillsData.billsLibId;
+    var newBills = {
+        ID: newId,
+        ParentID: pid,
+        NextSiblingID: nid,
+        billsLibId: billsLibId,
+        code: '',
+        name: '',
+        unit: '',
+        ruleText: '',
+        Expression: '',
+        recharge:'',
+        deleted: false
+    };
+    Bills.create(newBills, function(err){
+        if(err){
+            callback(1, "Error");
+        }
+        else{
+            callback(0, "");
+        }
+    });
+};
 
 
-billsLibDao.prototype.updatePNId= function(updateData, callback){
-    var billsLibId = updateData.billsLibId;
-    var updateId = updateData.updateId;
-    var updatepid= updateData.ParentID;
-    var updatenid = updateData.NextSiblingID;
-    if(!updatepid){
-        Bills.update({billsLibId: billsLibId, ID: updateId}, {$set: {NextSiblingID: updatenid}}, function(err){
-            if(err){
-                callback(1, "Error")
-            }
-            else{
-                callback(0, "");
-            }
-        });
-    }
-    else if(!updatenid){
-        Bills.update({billsLibId: billsLibId, ID: updateId}, {$set: {ParentID: updatepid}}, function(err){
-            if(err){
-                callback(1, "Error")
+
+billsLibDao.prototype.updatePNId= function(upData, callback){
+    var billsLibId = upData.billsLibId;
+    var updateDatas = upData.updateData;
+    var success = true;
+    if(updateDatas.length > 0){
+        updateDatas.forEach(function(data){
+            if(data.ID.length >1){
+                data.ID.forEach(function(id){
+                    if(data.ParentID && data.NextSiblingID){
+                        Bills.update({billsLibId: billsLibId, ID: id}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
+                            if(err){
+                                callback(1, "Error")
+                                success = false;
+                            }
+                        });
+                    }
+                    else if(data.ParentID && !data.NextSiblingID){
+                        Bills.update({billsLibId: billsLibId, ID: id}, {$set: {ParentID: data.ParentID}}, function(err){
+                            if(err){
+                                callback(1, 'Error');
+                                success = false;
+                            }
+                        });
+                    }
+                    else if(!data.ParentID && data.NextSiblingID){
+                        Bills.update({billsLibId: billsLibId, ID: id}, {$set: {NextSiblingID: data.NextSiblingID}}, function(err){
+                            if(err){
+                                callback(1, 'Error');
+                                success = false;
+                            }
+                        });
+                    }
+                });
             }
             }
-            else{
-                callback(0, "");
+            else {
+                if(data.ParentID && data.NextSiblingID){
+                    Bills.update({billsLibId: billsLibId, ID: data.ID}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
+                        if(err){
+                            callback(1, "Error")
+                            success = false;
+                        }
+                    });
+                }
+                else if(data.ParentID && !data.NextSiblingID){
+                    Bills.update({billsLibId: billsLibId, ID: data.ID}, {$set: {ParentID: data.ParentID}}, function(err){
+                        if(err){
+                            callback(1, 'Error');
+                            success = false;
+                        }
+                    });
+                }
+                else if(!data.ParentID && data.NextSiblingID){
+                    Bills.update({billsLibId: billsLibId, ID: data.ID}, {$set: {NextSiblingID: data.NextSiblingID}}, function(err){
+                        if(err){
+                            callback(1, 'Error');
+                            success = false;
+                        }
+                    });
+                }
             }
             }
         });
         });
     }
     }
-    else {
-        Bills.update({billsLibId: billsLibId, ID: updateId}, {$set: {ParentID: updatepid, NextSiblingID: updatenid}}, function(err){
-            if(err){
-                callback(1, "Error")
-            }
-            else{
-                callback(0, "");
-            }
-        });
+    if(success){
+        callback(0, '');
     }
     }
 }
 }
 
 
@@ -228,45 +301,155 @@ billsLibDao.prototype.updateBills = function(ubillsData, callback){
     }
     }
 }
 }
 
 
+billsLibDao.prototype.updateBillsArr = function(updateData, callback){
+    var billsLibId = updateData.billsLibId;
+    var updateId = updateData.updateId;
+    var orgId = updateData.orgId;
+    var newId = updateData.newId;
+    var classify = updateData.classify;
+    var type = updateData.type;
+    var success = true;
+    if(classify === 'jobs'){
+        if(orgId && newId && type === 'update'){
+            Bills.update({billsLibId: billsLibId, ID: updateId, jobs: orgId}, {$set: {'jobs.$': newId}}, function(err){
+                if(err){
+                    callback(1, 'Error');
+                }
+                else {
+                    callback(0, '');
+                }
+            });
+        }
+        if(orgId && !newId && type === 'delete'){
+            orgId.forEach(function(oid){
+                Bills.update({billsLibId: billsLibId, ID: updateId}, {$pull: {jobs: oid}}, function(err){
+                    if(err){
+                        callback(1, 'Error');
+                    }
+                });
+            });
+        }
+        //todo: test
+        if(orgId && !newId && type === 'deleteAll'){
+            updateId.forEach(function(uid){
+                orgId.forEach(function(oid){
+                    Bills.update({billsLibId: billsLibId, ID: uid}, {$pull: {jobs: oid}}, function(err){
+                        if(err){
+                            callback(1, 'Error');
+                        }
+                    });
+                });
+            });
+        }
+    }
+    else if(classify === 'items'){
+        if(orgId && newId && type === 'update'){
+            Bills.update({billsLibId: billsLibId, ID: updateId, items: orgId}, {$set: {'items.$': newId}}, function(err){
+                if(err){
+                    callback(1, 'Error');
+                }
+                else {
+                    callback(0, '');
+                }
+            });
+        }
+        if(orgId && !newId && type === 'delete'){
+            orgId.forEach(function(oid){
+                Bills.update({billsLibId: billsLibId, ID: updateId}, {$pull: {items: oid}}, function(err){
+                    if(err){
+                        callback(1, 'Error');
+                    }
+                });
+            });
+        }
+        if(orgId && !newId &&  type === 'deleteAll'){
+            updateId.forEach(function(uid){
+                orgId.forEach(function(oid){
+                    Bills.update({billsLibId: billsLibId, ID: uid}, {$pull: {items: oid}}, function(err){
+                        if(err){
+                            callback(1, 'Error');
+                        }
+                    });
+                });
+            });
+        }
+    }
+}
+
+billsLibDao.prototype.updateRecharge = function(uData, callback){
+    var billsLibId = uData.billsLibId;
+    var updateIds = uData.updateIds;
+    var data = uData.data;
+    var success = true;
+    updateIds.forEach(function(id){
+        Bills.update({billsLibId: billsLibId, ID: id}, {$set: {recharge: data}}, function(err){
+            if(err){
+                callback(1, 'Error');
+                success = false;
+            }
+        });
+    });
+    if(success){
+        callback(0, '');
+    }
+};
+//todo: test $in
 billsLibDao.prototype.deleteBills = function(delData, callback){
 billsLibDao.prototype.deleteBills = function(delData, callback){
     var deleteIds = delData.deleteIds;
     var deleteIds = delData.deleteIds;
     var billsLibId = delData.billsLibId;
     var billsLibId = delData.billsLibId;
+    var success = true;
     if(deleteIds){
     if(deleteIds){
         //deleteIds.forEach(function(deleteId){
         //deleteIds.forEach(function(deleteId){
-           Bills.remove({billsLibId: billsLibId, ID: {$in: deleteIds}}, function(err){
-               if(err){
-                   callback(1, 'Error');
-               }
-               else {
-                   callback(0, '');
-               }
-           });
-      //  });
+        /*Bills.remove({billsLibId: billsLibId, ID: {$in: deleteIds}}, function(err){
+         if(err){
+         callback(1, 'Error');
+         }
+         else {
+         callback(0, '');
+         }
+         });*/
+        //  });
+        deleteIds.forEach(function(delId){
+            /*Bills.remove({billsLibId: billsLibId, ID: delId}, function(err){
+                if(err){
+                    success = false;
+                    callback(1, 'Error');
+                }
+            });*/
+            Bills.update({billsLibId: billsLibId, ID: delId}, {$set: {deleted: true}}, function(err){
+                if(err){
+                    success = false;
+                    callback(1, 'Error');
+                }
+            });
+        });
+        if(success){
+            callback(0, '');
+        }
     }
     }
 }
 }
 
 
 //--------------JobContent------------------
 //--------------JobContent------------------
-billsLibDao.prototype.getJobContent = function(gJobData, callback){
-    var billsLibId = gJobData.billsLibId;
-        JobContent.find({billsLibId: billsLibId}, "-_id", function(err, jobs){
-            if(err){
-                callback(1, "Error", null);
-            }
-            else{
-                callback(0, "", jobs)
-            }
-        });
-}
 
 
-billsLibDao.prototype.getSomeJobs = function(gJobData, callback){
+/*billsLibDao.prototype.getJobContent = function(gJobData, callback){
+ var billsLibId = gJobData.billsLibId;
+ JobContent.find({billsLibId: billsLibId}, "-_id", function(err, jobs){
+ if(err){
+ callback(1, "Error", null);
+ }
+ else{
+ callback(0, "", jobs)
+ }
+ });
+ }*/
+billsLibDao.prototype.getJobContent = function(gJobData, callback){
     var billsLibId = gJobData.billsLibId;
     var billsLibId = gJobData.billsLibId;
-    var ids = gJobData.ids;
-    JobContent.find({billsLibId: billsLibId, id: {$in: ids}}, "-_id", function(err, jobs){
+    JobContent.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
         if(err){
         if(err){
-            callback(1, "Error", null);
+            callback(1, 'Error', null);
         }
         }
-        else{
-            callback(0, "", jobs)
+        else {
+            callback(0, '', result);
         }
         }
     });
     });
 }
 }
@@ -275,40 +458,36 @@ billsLibDao.prototype.createJobContent = function(cJobData, callback){
     var field = cJobData.field;
     var field = cJobData.field;
     var data = cJobData.data;
     var data = cJobData.data;
     var billsLibId = cJobData.billsLibId;
     var billsLibId = cJobData.billsLibId;
-    counter.getIDAfterCount("bills", 1, function(err, result){
+    var serialNo = cJobData.serialNo;
+    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
         var id = result.value.sequence_value;
         var id = result.value.sequence_value;
         var newJobContent;
         var newJobContent;
-        if(field == "code"){
+        if(field == "content"){
             newJobContent = {
             newJobContent = {
                 id: id,
                 id: id,
                 billsLibId: billsLibId,
                 billsLibId: billsLibId,
-                code: data,
-                content: ''
-            }
-        }
-        else if(field == "content"){
-            newJobContent = {
-                id: id,
-                billsLibId: billsLibId,
-                code: '',
+                code: serialNo,
                 content: data,
                 content: data,
+                deleted: false
             }
             }
         }
         }
         JobContent.create(newJobContent, function(err){
         JobContent.create(newJobContent, function(err){
             if(err){
             if(err){
-                callback(1, "Error");
+                callback(1, "Error", null);
+                console.log('error');
             }
             }
             else{
             else{
-                callback(0, "");
+                console.log(id);
+                callback(0, "", id);
             }
             }
         });
         });
     });
     });
 }
 }
 
 
 billsLibDao.prototype.updateJobContent = function(uJobData, callback){
 billsLibDao.prototype.updateJobContent = function(uJobData, callback){
-    var field = cJobData.field;
-    var updateData = cJobData.data;
-    var updateid = cJobData.updateId;
+    var field = uJobData.field;
+    var updateData = uJobData.data;
+    var updateid = uJobData.updateId;
     if(field == "code"){
     if(field == "code"){
         JobContent.update({id: updateid}, {$set: {code: updateData}}, function(err){
         JobContent.update({id: updateid}, {$set: {code: updateData}}, function(err){
             if(err){
             if(err){
@@ -331,26 +510,34 @@ billsLibDao.prototype.updateJobContent = function(uJobData, callback){
     }
     }
 }
 }
 
 
-billsLibDao.prototype.deleteJobContent = function(jobId, callback){
-    JobContent.remove({id: jobId}, function(err){
-        if(err){
-            callback(1, "Error");
-        }
-        else{
-            callback(0, "");
-        }
+billsLibDao.prototype.deleteJobContent = function(data, callback){
+    var delIds = data.ids;
+    var success = true;
+    delIds.forEach(function(id){
+        /*JobContent.remove({id: id}, function(err){
+            if(err){
+                callback(1, "Error");
+            }
+        });*/
+        JobContent.update({id: id}, {$set: {deleted: true}}, function(err){
+            if(err){
+                success = false;
+                callback(1, 'Error');
+            }
+        });
     });
     });
 }
 }
 
 
 
 
 //----------------------ItemCharacter---------------------
 //----------------------ItemCharacter---------------------
-billsLibDao.prototype.getItemCharacter = function(billsLibId, callback){
-    ItemCharacter.find({billsLibId: billsLibId}, "-_id", function(err, items){
+billsLibDao.prototype.getItemCharacter = function(gdata, callback){
+    var billsLibId = gdata.billsLibId;
+    ItemCharacter.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
         if(err){
         if(err){
-            callback(1, "Error", null);
+            callback(1, 'Error', null);
         }
         }
-        else{
-            callback(0, "", items)
+        else {
+            callback(0, '', result);
         }
         }
     });
     });
 }
 }
@@ -358,30 +545,36 @@ billsLibDao.prototype.getItemCharacter = function(billsLibId, callback){
 billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
 billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
     var field = cItemData.field;
     var field = cItemData.field;
     var data = cItemData.data;
     var data = cItemData.data;
-    var id = counter.getIDAfterCount("billsLib", 1);
     var billsLibId = cItemData.billsLibId;
     var billsLibId = cItemData.billsLibId;
+    var serialNo = cItemData.serialNo;
     var newItemCharacter;
     var newItemCharacter;
-    if(field == "code"){
-        newItemCharacter = {
-            id: id,
-            billsLibId: billsLibId,
-            code: data
-        }
-    }
-    else if(field == "content"){
-        newItemCharacter = {
-            id: id,
-            billsLibId: billsLibId,
-            content: data
+    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
+        var id = result.value.sequence_value;
+        if(field === 'content'){
+            newItemCharacter = {
+                id: id,
+                billsLibId: billsLibId,
+                content: data,
+                code: serialNo,
+                deleted: false
+            }
         }
         }
-    }
+        ItemCharacter.create(newItemCharacter, function(err){
+            if(err){
+                callback(1, "Error", null);
+            }
+            else{
+                callback(0, "", id);
+            }
+        });
+    });
 }
 }
 
 
 billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
 billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
     var field = uItemData.field;
     var field = uItemData.field;
     var updateData = uItemData.data;
     var updateData = uItemData.data;
-    var id = uItemData.id;
-    if(field == "code"){
+    var id = uItemData.updateId;
+    if(field === "code"){
         ItemCharacter.update({id: id}, {$set: {code: updateData}}, function(err){
         ItemCharacter.update({id: id}, {$set: {code: updateData}}, function(err){
             if(err){
             if(err){
                 callback(1, "Error");
                 callback(1, "Error");
@@ -391,8 +584,8 @@ billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
             }
             }
         });
         });
     }
     }
-    else if(field == "character"){
-        ItemCharacter.update({id: id}, {$set: {character: updateData}}, function(err){
+    else if(field === "content"){
+        ItemCharacter.update({id: id}, {$set: {content: updateData}}, function(err){
             if(err){
             if(err){
                 callback(1, "Error");
                 callback(1, "Error");
             }
             }
@@ -401,21 +594,65 @@ billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
             }
             }
         });
         });
     }
     }
-}
+};
 
 
-billsLibDao.prototype.deleteItemCharacter = function(itemId, callback){
-    JobContent.remove({id: itemId}, function(err){
-        if(err){
-            callback(1, "Error");
-        }
-        else{
-            callback(0, "");
+billsLibDao.prototype.updateValue = function(uData, callback){
+    var type = uData.type;
+    var updateId = uData.updateId;
+    var data = uData.data;
+    var deleteCodes = uData.deleteCodes;
+    if(type === 'create'){
+        ItemCharacter.update({id: updateId}, {$addToSet: {itemValue: data}}, function(err){
+            if(err){
+                callback(1, 'Error');
+            }
+            else{
+                callback(0, '');
+            }
+        });
+    }
+    else if(type === 'update'){
+        ItemCharacter.update({id: updateId,  'itemValue.code': data.code}, {$set: {'itemValue.$.value': data.value}}, function(err){
+            if(err){
+                callback(1, 'Error');
+            }
+            else{
+                callback(0, '');
+            }
+        });
+    }
+    //delete
+    else {
+        if(deleteCodes.length > 0){
+            deleteCodes.forEach(function(code){
+                ItemCharacter.update({id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){
+                    if(err){
+                        callback(1, 'Error');
+                    }
+                });
+            });
         }
         }
+    }
+};
+
+billsLibDao.prototype.deleteItemCharacter = function(data, callback){
+    var delIds = data.ids;
+    var success = true;
+    delIds.forEach(function(id){
+        /*ItemCharacter.remove({id: id}, function(err){
+            if(err){
+                callback(1, "Error");
+            }
+        });*/
+        ItemCharacter.update({id: id}, {$set: {deleted: true}}, function(err){
+            if(err){
+                success = false;
+                callback(1, 'Error');
+            }
+        });
     });
     });
 }
 }
+//
 
 
-//----------------------itemValue
-
-//-----------------------------
 
 
 module.exports = new billsLibDao();
 module.exports = new billsLibDao();

+ 12 - 12
modules/billsLib/billsLibModel/billsLibSchemas.js

@@ -1,9 +1,11 @@
 var mongoose = require('mongoose');
 var mongoose = require('mongoose');
 
 
 var stdBillsLibSchema =mongoose.Schema({
 var stdBillsLibSchema =mongoose.Schema({
+    userId: Number,
     billsLibId: Number,
     billsLibId: Number,
     billsLibName: String,
     billsLibName: String,
-    createDate: Date
+    createDate: Date,
+    deleted: Boolean
 },
 },
     {versionKey: false}
     {versionKey: false}
 );
 );
@@ -20,34 +22,32 @@ var billsSchema = mongoose.Schema({
     jobs: Array,
     jobs: Array,
     items: Array,
     items: Array,
     recharge:String,
     recharge:String,
-    billsLibId: Number
+    billsLibId: Number,
+    deleted: Boolean
 },
 },
     {versionKey: false}
     {versionKey: false}
 );
 );
 
 
 var jobContentSchema = mongoose.Schema({
 var jobContentSchema = mongoose.Schema({
     id: Number,
     id: Number,
-    code: String,
+    code: Number,
     content: String,
     content: String,
-    billsLibId: Number
+    billsLibId: Number,
+    deleted: Boolean
 },
 },
     {versionKey: false}
     {versionKey: false}
 );
 );
 
 
 var itemCharacterSchema = mongoose.Schema({
 var itemCharacterSchema = mongoose.Schema({
     id: Number,
     id: Number,
-    code: String,
-    character: String,
+    code: Number,
+    content: String,
     itemValue: Array,
     itemValue: Array,
-    billsLibId: Number
+    billsLibId: Number,
+    deleted: Boolean
 },
 },
     {versionKey: false}
     {versionKey: false}
 );
 );
-/*
-var eigenvalueSchema = mongoose.Schema({
-    eigenvalId: Number,
-    eigenvalContent: String
-});*/
 
 
 module.exports = {
 module.exports = {
     stdBillsLibSchema: stdBillsLibSchema,
     stdBillsLibSchema: stdBillsLibSchema,

+ 5 - 24
modules/billsLib/billsLibRoutes/billsLibRoutes.js

@@ -5,29 +5,8 @@ var express = require("express");
 var billsController = require("../billsLibControllers/billsLibControllers");
 var billsController = require("../billsLibControllers/billsLibControllers");
 var billsRouter =express.Router();
 var billsRouter =express.Router();
 
 
-
-
-/*billsRouter.get("/", function(req, res) {
-    console.log("get/ing");
-    res.redirect("/stdBillsEditor/main");
-});*/
-
-/*billsRouter.get("/main", function(req, res){
-    res.render("billsLib/html/main.html");
-});
-
-billsRouter.get("/billsLib", function(req, res){
-    res.render("billsLib/html/qingdan.html");
-});
-
-billsRouter.get("/jobs", function(req, res){
-    res.render("billsLib/html/neirong.html");
-});
-
-billsRouter.get("/items", function(req, res){
-    res.render("billsLib/html/tezheng.html");
-});*/
-
+billsRouter.post('/getMaxNumber', billsController.getMaxNumber);
+billsRouter.post('/getABillsLib', billsController.getABillsLib);
 billsRouter.post("/getStdBillsLib", billsController.getStdBillsLib);
 billsRouter.post("/getStdBillsLib", billsController.getStdBillsLib);
 billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
 billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
 billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
 billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
@@ -37,15 +16,17 @@ billsRouter.post("/getBills", billsController.getBills);
 billsRouter.post("/createBills", billsController.createBills);
 billsRouter.post("/createBills", billsController.createBills);
 billsRouter.post("/updatePNId", billsController.updatePNId);
 billsRouter.post("/updatePNId", billsController.updatePNId);
 billsRouter.post("/updateBills", billsController.updateBills);
 billsRouter.post("/updateBills", billsController.updateBills);
+billsRouter.post("/updateBillsArr", billsController.updateBillsArr);
+billsRouter.post('/updateRecharge', billsController.updateRecharge);
 billsRouter.post("/deleteBills", billsController.deleteBills);
 billsRouter.post("/deleteBills", billsController.deleteBills);
 billsRouter.post("/getJobContent", billsController.getJobContent);
 billsRouter.post("/getJobContent", billsController.getJobContent);
-billsRouter.post('/getSomeJobs', billsController.getSomeJobs);
 billsRouter.post("/createJobContent", billsController.createJobContent);
 billsRouter.post("/createJobContent", billsController.createJobContent);
 billsRouter.post("/updateJobContent", billsController.updateJobContent);
 billsRouter.post("/updateJobContent", billsController.updateJobContent);
 billsRouter.post("/deleteJobContent", billsController.deleteJobContent);
 billsRouter.post("/deleteJobContent", billsController.deleteJobContent);
 billsRouter.post("/getItemCharacter", billsController.getItemCharacter);
 billsRouter.post("/getItemCharacter", billsController.getItemCharacter);
 billsRouter.post("/createItemCharacter", billsController.createItemCharacter);
 billsRouter.post("/createItemCharacter", billsController.createItemCharacter);
 billsRouter.post("/updateItemCharacter", billsController.updateItemCharacter);
 billsRouter.post("/updateItemCharacter", billsController.updateItemCharacter);
+billsRouter.post("/updateValue", billsController.updateValue);
 billsRouter.post("/deleteItemCharacter", billsController.deleteItemCharacter);
 billsRouter.post("/deleteItemCharacter", billsController.deleteItemCharacter);
 
 
 module.exports = billsRouter;
 module.exports = billsRouter;

+ 8 - 0
modules/pm/controllers/pm_controller.js

@@ -9,6 +9,14 @@ var callback = function(req, res, err, message, data){
 }
 }
 
 
 module.exports = {
 module.exports = {
+    checkRight: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        if (data.user_id) {
+            return data.user_id === req.session.userID;
+        } else {
+            return false;
+        }
+    },
     getProjects: function(req, res){
     getProjects: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
         ProjectsData.getUserProjects(data.user_id, function(err, message, projects){
         ProjectsData.getUserProjects(data.user_id, function(err, message, projects){

+ 8 - 0
modules/pm/routes/pm_route.js

@@ -6,6 +6,14 @@ var express = require('express');
 var pmRouter = express.Router();
 var pmRouter = express.Router();
 var pmController = require('./../controllers/pm_controller');
 var pmController = require('./../controllers/pm_controller');
 
 
+pmRouter.use(function (req, res, next) {
+    if (/\/getNewProjectID/.test(req.originalUrl) || pmController.checkRight(req, res)) {
+        next();
+    } else {
+        res.json({error: 1, message: '对不起,您无权限操作。', data: null});
+    }
+});
+
 pmRouter.post('/getProjects', pmController.getProjects);
 pmRouter.post('/getProjects', pmController.getProjects);
 pmRouter.post('/updateProjects', pmController.updateProjects);
 pmRouter.post('/updateProjects', pmController.updateProjects);
 pmRouter.post('/copyProjects', pmController.copyProjects);
 pmRouter.post('/copyProjects', pmController.copyProjects);

+ 1 - 1
modules/reports/controllers/rpt_controller.js

@@ -38,7 +38,7 @@ module.exports = {
             }
             }
         }).then(function(tplData){
         }).then(function(tplData){
                 if (tplData) {
                 if (tplData) {
-                    var printCom = JpcEx.createNew();
+                    var printCom = JpcEx.createInit();
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
                     var defProperties = rptUtil.getReportDefaultCache();
                     var defProperties = rptUtil.getReportDefaultCache();
                     printCom.initialize(rptTpl);
                     printCom.initialize(rptTpl);

+ 9 - 9
modules/reports/rpt_component/JpcEx.js

@@ -11,7 +11,7 @@ var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
 var JE = require('./Jpc_RTE'); //Important: for self-define function execution purpose
 var JE = require('./Jpc_RTE'); //Important: for self-define function execution purpose
 
 
 var JpcExSrv = function(){};
 var JpcExSrv = function(){};
-JpcExSrv.prototype.createNew = function(){
+JpcExSrv.prototype.createInit = function(){
     function private_buildDftItems(rptTpl, dftCollection, propArray, nodeName) {
     function private_buildDftItems(rptTpl, dftCollection, propArray, nodeName) {
         var rst = {};
         var rst = {};
         if (dftCollection) {
         if (dftCollection) {
@@ -85,29 +85,29 @@ JpcExSrv.prototype.createNew = function(){
     JpcResult.initialize = function(rptTpl) {
     JpcResult.initialize = function(rptTpl) {
         var me = this;
         var me = this;
         if (rptTpl[JV.NODE_FLOW_INFO]) {
         if (rptTpl[JV.NODE_FLOW_INFO]) {
-            me.flowTab = JpcFlowTab.createNew();
+            me.flowTab = JpcFlowTab.createInit();
             me.flowTab.initialize();
             me.flowTab.initialize();
         }
         }
         if (rptTpl[JV.NODE_BILL_INFO]) {
         if (rptTpl[JV.NODE_BILL_INFO]) {
-            me.billTab = JpcBillTab.createNew();
+            me.billTab = JpcBillTab.createInit();
             me.billTab.initialize();
             me.billTab.initialize();
         }
         }
         //var dt1 = new Date();
         //var dt1 = new Date();
         if (rptTpl[JV.NODE_CROSS_INFO]) {
         if (rptTpl[JV.NODE_CROSS_INFO]) {
-            me.crossTab = JpcCrossTab.createNew();
+            me.crossTab = JpcCrossTab.createInit();
             me.crossTab.initialize();
             me.crossTab.initialize();
         }
         }
         me.totalPages = 0;
         me.totalPages = 0;
         me.runTimePageData = {};
         me.runTimePageData = {};
-        me.fields = JpcField.createNew(rptTpl);
-        me.params = JpcParam.createNew(rptTpl);
-        me.formulas = JpcFunc.createNew(rptTpl);
+        me.fields = JpcField.createInit(rptTpl);
+        me.params = JpcParam.createInit(rptTpl);
+        me.formulas = JpcFunc.createInit(rptTpl);
     };
     };
 
 
     JpcResult.analyzeData = function(rptTpl, dataObj, defProperties) {
     JpcResult.analyzeData = function(rptTpl, dataObj, defProperties) {
         var me = this;
         var me = this;
         //1. data object
         //1. data object
-        var dataHelper = JpcData.createNew();
+        var dataHelper = JpcData.createInit();
         dataHelper.analyzeData(rptTpl, dataObj);
         dataHelper.analyzeData(rptTpl, dataObj);
         //2. tab object
         //2. tab object
         //pre-condition: the data should be sorted in SQL/NoSQL level!
         //pre-condition: the data should be sorted in SQL/NoSQL level!
@@ -157,7 +157,7 @@ JpcExSrv.prototype.createNew = function(){
             rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);
             rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);
             rst[JV.NODE_PAGE_INFO] = JpcCommonHelper.getPageSize(rptTpl);
             rst[JV.NODE_PAGE_INFO] = JpcCommonHelper.getPageSize(rptTpl);
             rst.items = [];
             rst.items = [];
-            var bands = JpcBand.createNew(rptTpl, defProperties);
+            var bands = JpcBand.createInit(rptTpl, defProperties);
             try {
             try {
                 for (var page = startPage; page <= endPage; page++) {
                 for (var page = startPage; page <= endPage; page++) {
                     me.runTimePageData.currentPage = page;
                     me.runTimePageData.currentPage = page;

+ 1 - 1
modules/reports/rpt_component/Jpc_BillTab.js

@@ -10,7 +10,7 @@ var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 
 
 var JpcBillTabSrv = function(){};
 var JpcBillTabSrv = function(){};
-JpcBillTabSrv.prototype.createNew = function(){
+JpcBillTabSrv.prototype.createInit = function(){
     var JpcBillTabResult = {};
     var JpcBillTabResult = {};
     JpcBillTabResult.initialize = function() {
     JpcBillTabResult.initialize = function() {
         var me = this;
         var me = this;

+ 2 - 2
modules/reports/rpt_component/Jpc_CrossTab.js

@@ -11,7 +11,7 @@ var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 
 
 var JpcCrossTabSrv = function(){};
 var JpcCrossTabSrv = function(){};
-JpcCrossTabSrv.prototype.createNew = function(){
+JpcCrossTabSrv.prototype.createInit = function(){
     function private_addTabValue(tabValuedIdxLst, sortedSequence, segIdx, preRec, nextRec, dispSerialIdxLst, sorted_sum_value_Lst, rst_sum_value_Lst) {
     function private_addTabValue(tabValuedIdxLst, sortedSequence, segIdx, preRec, nextRec, dispSerialIdxLst, sorted_sum_value_Lst, rst_sum_value_Lst) {
         if (tabValuedIdxLst) {
         if (tabValuedIdxLst) {
             var serial1stTier = null;
             var serial1stTier = null;
@@ -232,7 +232,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
         var maxRowRec = 1, maxColRec = 1, counterRowRec = 0, counterColRec = 0, pageIdx = 0, segCnt = me.sortedContentSequence.length;
         var maxRowRec = 1, maxColRec = 1, counterRowRec = 0, counterColRec = 0, pageIdx = 0, segCnt = me.sortedContentSequence.length;
         var pageStatus = [true, true, false, true, false, false, false, false];
         var pageStatus = [true, true, false, true, false, false, false, false];
         //2. calculate the page info one by one
         //2. calculate the page info one by one
-        var bands = JpcBand.createNew(rptTpl, defProperties);
+        var bands = JpcBand.createInit(rptTpl, defProperties);
         function private_resetBandArea() {
         function private_resetBandArea() {
             JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
             JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
             maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);
             maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);

+ 2 - 2
modules/reports/rpt_component/Jpc_FlowTab.js

@@ -11,7 +11,7 @@ var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
 
 
 var JpcFlowTabSrv = function(){};
 var JpcFlowTabSrv = function(){};
-JpcFlowTabSrv.prototype.createNew = function(){
+JpcFlowTabSrv.prototype.createInit = function(){
     function private_addPageValue(ValuedIdxLst, sortedSequence, preRec, nextRec,page_seg_map, segIdx, pageIdx) {
     function private_addPageValue(ValuedIdxLst, sortedSequence, preRec, nextRec,page_seg_map, segIdx, pageIdx) {
         var vIdx = [];
         var vIdx = [];
         for (var vi = 0; vi < nextRec; vi++) {
         for (var vi = 0; vi < nextRec; vi++) {
@@ -73,7 +73,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
     JpcFlowTabResult.preSetupPages = function (rptTpl, dataOjb, defProperties) {
     JpcFlowTabResult.preSetupPages = function (rptTpl, dataOjb, defProperties) {
         var rst = 0, me = this, counterRowRec = 0, maxRowRec = 1, pageIdx = 0;
         var rst = 0, me = this, counterRowRec = 0, maxRowRec = 1, pageIdx = 0;
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_idx);
-        var bands = JpcBand.createNew(rptTpl, defProperties);
+        var bands = JpcBand.createInit(rptTpl, defProperties);
         var pageStatus = [true, true, false, false, false, false, false, false];
         var pageStatus = [true, true, false, false, false, false, false, false];
         if (rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN]) {
         if (rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN]) {
             me.multiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];
             me.multiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];

+ 3 - 2
public/counter/counter.js

@@ -26,7 +26,8 @@ const COUNTER_MODULE_NAME = {
     rationTree: 'rationChapterTrees',
     rationTree: 'rationChapterTrees',
     report: 'rptTemplates',
     report: 'rptTemplates',
     fee: 'fees',
     fee: 'fees',
-    template_bills: 'temp_bills'
+    template_bills: 'temp_bills',
+    billsLib: 'billsLib'
 }
 }
 /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
 /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
     REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/
     REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/
@@ -35,7 +36,7 @@ var counterDAO = function(){};
 
 
 /*
 /*
  * callback = function (err, result) {
  * callback = function (err, result) {
- *     result.value.sequence_value 为修改后的id
+ *     result.value.sequence_value 为锟睫改猴拷锟絠d
  * }
  * }
  */
  */
 counterDAO.prototype.getIDAfterCount = function(moduleName, stepCount, callback) {
 counterDAO.prototype.getIDAfterCount = function(moduleName, stepCount, callback) {

+ 3 - 0
public/web/idTree.js

@@ -66,6 +66,7 @@ var idTree = {
                     nodes[i].nextSibling = (i === nodes.length - 1) ? null : nodes[i + 1];
                     nodes[i].nextSibling = (i === nodes.length - 1) ? null : nodes[i + 1];
                 }
                 }
             },
             },
+            // ��nodes�У���iIndex����������ʼȫ���Ƴ�
             // 在nodes中,从iIndex(包括)开始全部移除
             // 在nodes中,从iIndex(包括)开始全部移除
             removeNodes: function (tree, parent, iIndex, count) {
             removeNodes: function (tree, parent, iIndex, count) {
                 var children = parent ? parent.children : tree.roots;
                 var children = parent ? parent.children : tree.roots;
@@ -84,6 +85,7 @@ var idTree = {
                     children.splice(iIndex, children.length - iIndex);
                     children.splice(iIndex, children.length - iIndex);
                 }
                 }
             },
             },
+            // ��nodes������addNodes, λ�ô�index��ʼ
             // 在parent.children/tree.roots中增加nodes, 位置从index开始
             // 在parent.children/tree.roots中增加nodes, 位置从index开始
             addNodes: function (tree, parent, nodes, iIndex) {
             addNodes: function (tree, parent, nodes, iIndex) {
                 var children = parent ? parent.children : tree.roots;
                 var children = parent ? parent.children : tree.roots;
@@ -137,6 +139,7 @@ var idTree = {
         };
         };
 
 
         var Node = function (tree, data) {
         var Node = function (tree, data) {
+            // ���µ����ԣ�����Ԫ�������ֱ���޸�
             // 以下的属性,本单元外均不可直接修改
             // 以下的属性,本单元外均不可直接修改
             this.tree = tree;
             this.tree = tree;
             this.data = data;
             this.data = data;

+ 35 - 14
server.js

@@ -11,6 +11,8 @@ var path = require('path');
 var session = require('express-session');
 var session = require('express-session');
 var DBStore = require('connect-mongo')(session);
 var DBStore = require('connect-mongo')(session);
 
 
+var URL = require('url')
+
 var app = express();
 var app = express();
 var _rootDir = __dirname;
 var _rootDir = __dirname;
 app.use(express.static(_rootDir));
 app.use(express.static(_rootDir));
@@ -37,10 +39,11 @@ app.use(session({
 }));
 }));
 
 
 app.use(function (req, res, next) {
 app.use(function (req, res, next) {
-    var url = req.originalUrl;
+    var url = req.originalUrl, referer;
     if (!/^\/login/.test(req.originalUrl) && !req.session.userAccount) {
     if (!/^\/login/.test(req.originalUrl) && !req.session.userAccount) {
-        if (req.headers.referer) {
-            return res.redirect('/login' + '?referer=' + req.headers.referer);
+        if (/\/api/.test(req.originalUrl)) {
+            referer = URL.parse(req.headers.referer);
+            return res.redirect('/login' + '?referer=' + referer.path);
         } else {
         } else {
             return res.redirect("/login" + '?referer=' + req.originalUrl);
             return res.redirect("/login" + '?referer=' + req.originalUrl);
         }
         }
@@ -52,12 +55,19 @@ app.use('/', require('./modules/users/routes/users_route'));
 app.use('/fees', require('./modules/fees/routes/fees_router'));
 app.use('/fees', require('./modules/fees/routes/fees_router'));
 
 
 app.get('/template/bills', function (req, res) {
 app.get('/template/bills', function (req, res) {
-    res.render('templates/html/bills.html',
-        {userAccount: req.session.userAccount,
-            userID: req.session.userID});
+    var checkAdmin = function (userAccount) {
+        return true;
+    }
+    if (checkAdmin(req.session.userAccount)) {
+        res.render('templates/html/bills.html',
+            {userAccount: req.session.userAccount,
+                userID: req.session.userID});
+    } else {
+        res.redirect('/pm');
+    }
 });
 });
 
 
-app.use('/template/bills', function (req, res, next) {
+app.use('/template/bills/api', function (req, res, next) {
     var checkAdmin = function (userAccount) {
     var checkAdmin = function (userAccount) {
         return true;
         return true;
     }
     }
@@ -68,27 +78,28 @@ app.use('/template/bills', function (req, res, next) {
     }
     }
 });
 });
 var billsTemplateRouter = require('./modules/templates/routes/bills_template_router');
 var billsTemplateRouter = require('./modules/templates/routes/bills_template_router');
-app.use('/template/bills', billsTemplateRouter);
+app.use('/template/bills/api', billsTemplateRouter);
 
 
 app.get('/pm', function(req, res){
 app.get('/pm', function(req, res){
     res.render('pm/html/project-management.html',
     res.render('pm/html/project-management.html',
         {userAccount: req.session.userAccount,
         {userAccount: req.session.userAccount,
             userID: req.session.userID});
             userID: req.session.userID});
 });
 });
-
 var pmRouter = require('./modules/pm/routes/pm_route');
 var pmRouter = require('./modules/pm/routes/pm_route');
-app.use('/', pmRouter);
+app.use('/pm/api', pmRouter);
 
 
 app.get('/main',  function(req, res) {
 app.get('/main',  function(req, res) {
-    if (!req.session.userAccount) {
-        res.redirect('/login');
+    var checkProjectRight = function (userID, projectID) {
+        return true;
     }
     }
-    else {
+    if (checkProjectRight(req.session.userID, req.query.project)) {
         res.render('main/html/main.html',
         res.render('main/html/main.html',
             {
             {
                 userAccount: req.session.userAccount,
                 userAccount: req.session.userAccount,
                 userID: req.session.userID
                 userID: req.session.userID
             });
             });
+    } else {
+        res.redirect('/pm');
     }
     }
 });
 });
 
 
@@ -137,7 +148,14 @@ app.get('/rationRepository/ration', function(req, res) {
 app.use("/rationRepository/api",rationRepository_Router);
 app.use("/rationRepository/api",rationRepository_Router);
 
 
 app.get("/stdBillsmain", function(req, res){
 app.get("/stdBillsmain", function(req, res){
-    res.render("billsLib/html/main.html");
+    if(!req.session.userAccount){
+        res.redirect('/login');
+    }
+    else {
+        res.render("billsLib/html/main.html",
+            {userAccount: req.session.userAccount,
+                userID: req.session.userID});
+    }
 });
 });
 app.get("/stdBills", function(req, res){
 app.get("/stdBills", function(req, res){
     res.render("billsLib/html/qingdan.html");
     res.render("billsLib/html/qingdan.html");
@@ -145,6 +163,9 @@ app.get("/stdBills", function(req, res){
 app.get('/stdJobs', function(req, res){
 app.get('/stdJobs', function(req, res){
     res.render('billsLib/html/neirong.html');
     res.render('billsLib/html/neirong.html');
 });
 });
+app.get('/stdItems', function(req, res){
+    res.render('billsLib/html/tezheng.html');
+});
 var billsLibRouter = require("./modules/billsLib/billsLibRoutes/billsLibRoutes");
 var billsLibRouter = require("./modules/billsLib/billsLibRoutes/billsLibRoutes");
 app.use("/stdBillsEditor", billsLibRouter);
 app.use("/stdBillsEditor", billsLibRouter);
 //-----------------
 //-----------------

+ 1 - 1
test/unit/reports/testRpt.js

@@ -32,7 +32,7 @@ test('test get report pages function: ', function (t) {
         tplData = rst;
         tplData = rst;
         t.equal(tplData != null, true);
         t.equal(tplData != null, true);
         if (tplData) {
         if (tplData) {
-            var printCom = JpcEx.createNew();
+            var printCom = JpcEx.createInit();
             rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
             rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
             var defProperties = rptUtil.getReportDefaultCache();
             var defProperties = rptUtil.getReportDefaultCache();
             printCom.initialize(rptTpl);
             printCom.initialize(rptTpl);

+ 0 - 114
test/unit/stdBillsTree/testMyTree.js

@@ -1,114 +0,0 @@
-/**
- * Created by vian on 2017/3/31.
- */
-var test = require("tape");
-test("testMyBillsTree:", function(t){
-    var billsData = [
-        {ID: 2, ParentID: -1, NextSiblingID: 3},
-        {ID: 1, ParentID: -1, NextSiblingID: 2},
-        {ID: 3, ParentID: -1, NextSiblingID: 9},
-        {ID: 4, ParentID: 3, NextSiblingID: 5},
-        {ID: 5, ParentID: 3, NextSiblingID: -1},
-        {ID: 6, ParentID: 4, NextSiblingID: 7},
-        {ID: 7, ParentID: 4, NextSiblingID: -1},
-        {ID: 8, ParentID: 6, NextSiblingID: -1},
-        {ID: 10, ParentID: -1, NextSiblingID: -1},
-        {ID: 9, ParentID: -1, NextSiblingID: 10},
-        {ID: 11, ParentID: 10, NextSiblingID: -1},
-        {ID: 12, ParentID: 11, NextSiblingID: -1},
-        {ID: 13, ParentID: 12, NextSiblingID: -1},
-        {ID: 14, ParentID: 13, NextSiblingID: -1},
-        {ID: 15, ParentID: 14, NextSiblingID: 16},
-        {ID: 16, ParentID: 14, NextSiblingID: 17},
-        {ID: 17, ParentID: 14, NextSiblingID: -1},
-        {ID: 18, ParentID: 17, NextSiblingID: 19},
-        {ID: 19, ParentID: 17, NextSiblingID: -1},
-        {ID: 20, ParentID: 1, NextSiblingID: -1},
-    ]
-
-    function getTop(data, topId){
-        var top = [];
-        for(var i=0; i<data.length; i++){
-            if(data[i].ParentID == -1 ||data[i].ParentID == topId){
-                top.push(data[i]);
-            }
-        }
-        return top;
-    }
-    function sortNodes(nodes){
-        for(var i=0; i<nodes.length; i++){
-            for(var j=i+1; j<nodes.length; j++){
-                var temp;
-                if(nodes[i].NextSiblingID == nodes[j].ID){
-                    temp = nodes[i+1];
-                    nodes[i+1] = nodes[j];
-                    nodes[j] = temp;
-                }
-            }
-            if(nodes[i].NextSiblingID == nodes[0].ID){
-                var topNode = nodes[i];
-                for(var j=nodes.length-2; j>=0; j-- ){
-                    nodes[j+1] = nodes[j];
-                }
-                nodes[0] = topNode;
-            }
-        }
-        return nodes;
-    }
-
-    function getNodeChildren(node, children){
-        for(var i=0; i<billsData.length; i++){
-            if(billsData[i].ParentID == node.ID){
-                children.push(billsData[i].ID);
-                getNodeChildren(billsData[i], children);
-            }
-        }
-        return children;
-    }
-
-    function buildChildren(billsData){
-        var tempTree = [];
-        for(var i=0; i<billsData.length; i++){
-            var children = [];
-            getNodeChildren(billsData[i], children);
-            tempTree.push({"ID": billsData[i].ID, "ParentID": billsData[i].ParentID, "NextSiblingID": billsData[i].NextSiblingID, "children": children});
-        }
-        return tempTree;
-    }
-
-    function getNodes(data ,ids){
-        var idsNodes = [];
-        for(var i =0; i<ids.length; i++){
-            for(var j=0 ; j<data.length; j++){
-                if(ids[i] == data[j].ID){
-                    idsNodes.push({ID: data[j].ID, ParentID: data[j].ParentID, NextSiblingID: data[j].NextSiblingID, children: data[j].children});
-                }
-            }
-        }
-        return idsNodes;
-    }
-
-    function buildTree(treeContainer, billsData, tempTree, topId){
-        var sortTempTree = sortNodes(getTop(tempTree, topId));
-        for(var i=0; i<sortTempTree.length; i++){
-           if(sortTempTree[i].children.length > 0){
-               treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
-               var childrenTree = getNodes(buildChildren(billsData), sortTempTree[i].children);
-               buildTree(treeContainer, billsData, childrenTree, sortTempTree[i].ID);
-           }
-           else {
-               treeContainer.push({"ID": sortTempTree[i].ID, "ParentID": sortTempTree[i].ParentID, "NextSiblingID": sortTempTree[i].NextSiblingID, "children": sortTempTree[i].children});
-           }
-       }
-        return treeContainer;
-    }
-
-    //console.log("sortNodes:====================");
-    //console.log(sortNodes(getTop(buildChildren(billsData))));
-   // console.log("buildChildren:====================");
-   // console.log(buildChildren(billsData));
-    console.log("buildTree:====================");
-    var billsTree = [];
-    console.log(buildTree(billsTree, billsData, buildChildren(billsData), -1));
-    t.end();
-});

+ 7 - 8
web/billsLib/html/main.html

@@ -6,12 +6,9 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>清单规则编辑器</title>
     <title>清单规则编辑器</title>
-    <link rel="stylesheet" href="../../css/bootstrap/bootstrap.min.css">
-    <!--<link rel="stylesheet" href="css/bootstrap/themes.css">-->
-    <link rel="stylesheet" href="../../css/main.css">
-    <link rel="stylesheet" href="../../css/font-awesome/font-awesome.min.css">
-    <!--zTree-->
-  	<link rel="stylesheet" href="../../css/ztree/zTreeStyle.css" type="text/css">
+    <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">
 </head>
 </head>
 
 
 <body>
 <body>
@@ -130,15 +127,17 @@
 </body>
 </body>
 <script type="text/javascript">
 <script type="text/javascript">
     autoFlashHeight();
     autoFlashHeight();
-    mainAjax.getStdBillsLib(null);
 </script>
 </script>
 <script>
 <script>
+    var userId = '<%= userID %>';
+    var userAccount = '<%= userAccount %>';
+    mainAjax.getStdBillsLib(userId);
     $(document).ready(function(){
     $(document).ready(function(){
         //main 增删改
         //main 增删改
         $("#createA").click(function(){
         $("#createA").click(function(){
             var billsLibName = $("#createText").val();
             var billsLibName = $("#createText").val();
             if(billsLibName){
             if(billsLibName){
-                mainAjax.createStdBillsLib(billsLibName);
+                mainAjax.createStdBillsLib(userId, billsLibName);
                 $("#createText").val("");
                 $("#createText").val("");
             }
             }
             else{
             else{

+ 54 - 28
web/billsLib/html/neirong.html

@@ -20,7 +20,7 @@
     <div class="header">
     <div class="header">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
             <span class="header-logo px-2">清单规则编辑器</span>
             <span class="header-logo px-2">清单规则编辑器</span>
-            <div class="navbar-text"><a href="main.html">清单规则</a><i class="fa fa-angle-right fa-fw"></i>XXX清单规则</div>
+            <div class="navbar-text"></div>
         </nav>
         </nav>
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
 
 
@@ -32,7 +32,7 @@
                       <a class="nav-link active px-3" href="javascript: void(0);">工作内容</a>
                       <a class="nav-link active px-3" href="javascript: void(0);">工作内容</a>
                   </li>
                   </li>
                   <li class="nav-item">
                   <li class="nav-item">
-                      <a class="nav-link px-3" href="tezheng.html">项目特征</a>
+                      <a id="aStdItems" class="nav-link px-3" href="stdItems">项目特征</a>
                   </li>
                   </li>
               </ul>
               </ul>
         </nav>
         </nav>
@@ -173,41 +173,67 @@
     <script src="web/billsLib/scripts/setSheets.js"></script>
     <script src="web/billsLib/scripts/setSheets.js"></script>
     <script src="web/billsLib/scripts/billsLibAjax.js"></script>
     <script src="web/billsLib/scripts/billsLibAjax.js"></script>
     <script src="web/billsLib/scripts/tools.js"></script>
     <script src="web/billsLib/scripts/tools.js"></script>
+    <script src="public/web/tree_sheet_helper.js"></script>
+    <script src="web/billsLib/scripts/billsLibSetting.js"></script>
+    <script src="web/billsLib/scripts/dbController.js"></script>
     <SCRIPT type="text/javascript">
     <SCRIPT type="text/javascript">
-        var billsLibId = getQueryString('billsLibId');
+        var billsLibId = getQueryString("billsLibId");
+        tools.redirect(billsLibId, 'stdBillsmain');
+        var spreadAllJobs = new GC.Spread.Sheets.Workbook($('#spreadAllJobs')[0], {sheetCount: 1});
+        var orgJobData;
+        var maxJobNumer;
         $(document).ready(function(){
         $(document).ready(function(){
             $('#aStdBills').attr('href', function(){
             $('#aStdBills').attr('href', function(){
                 return 'stdBills?billsLibId=' + billsLibId;
                 return 'stdBills?billsLibId=' + billsLibId;
             });
             });
-            buildAllJobs();
+            $('#aStdItems').attr('href', function(){
+                return 'stdItems?billsLibId=' + billsLibId;
+            });
+            billsAjax.getStdBillsLibName(billsLibId);
+            buildAllJobs(spreadAllJobs, totalJobsSetting);
         });
         });
-        function buildAllJobs(){
-            var spread = new GC.Spread.Sheets.Workbook($("#spreadAllJobs")[0], {sheetCount: 1});
-            var sheet = spread.getSheet(0);
-            var chRowCount = 2;
-            var vpColCount = 2;
-            var vpRowCount = 28;
-            sheet.suspendPaint();
-            sheet.suspendEvent();
-            initSheet(spread, sheet, chRowCount, vpRowCount, vpColCount);
-            setupColHeader(sheet);
-            //initRowHeight(sheet);
-            setCell(sheet);
-            myCommand(spread, sheet);
-            setScrollBar(spread, sheet, vpRowCount);
-            sheet.resumePaint();
-            sheet.resumeEvent();
+        function buildAllJobs(spreadAllJobs, setting){
+            setSheet.initSheet(spreadAllJobs, setting);
+            setSheet.setEditCol(spreadAllJobs.getActiveSheet(), 1);
+            myKey.downKey(spreadAllJobs);
+            myKey.enterKey(spreadAllJobs);
+            TREE_SHEET_HELPER.loadSheetHeader(setting, spreadAllJobs.getActiveSheet());
+            jobsAjax.getJobContent(billsLibId, function(datas){
+                spreadAllJobs.getActiveSheet().suspendPaint();
+                for(var i=0; i<datas.length; i++){
+                    setting.cols.forEach(function(col, colIdx){
+                        spreadAllJobs.getActiveSheet().setTag(i, colIdx, datas[i].id, GC.Spread.Sheets.SheetArea.viewport);
+                        if(datas[i][col.data.field]){
+                            spreadAllJobs.getActiveSheet().getCell(i, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(datas[i][col.data.field]);
+                        }
+                        else {
+                            spreadAllJobs.getActiveSheet().getCell(i, colIdx, GC.Spread.Sheets.SheetArea.viewport).value('');
+                        }
+                    });
+                }
+                spreadAllJobs.getActiveSheet().resumePaint();
+                var totalJobs = createObj.newJobs();
+                totalJobs.loadJobs(null, datas);
+                tools.getBillsIds(function(ids){
+                    myKey.delKey(spreadAllJobs, ids, totalJobs, setting, 'totalJobs');
+                    bindSheet(totalJobs, spreadAllJobs.getActiveSheet(), setting);
+                });
+            });
         }
         }
-        function setupColHeader(sheet){
-            var ch = GC.Spread.Sheets.SheetArea.colHeader;
-            sheet.addSpan(0 ,0, 2, 1, ch);
-            sheet.setValue(0, 0, "编号", ch);
-            sheet.setColumnWidth(0, 200);
-            sheet.addSpan(0 ,1, 2, 1, ch);
-            sheet.setValue(0, 1, "工作内容", ch);
-            sheet.setColumnWidth(1, 850);
+        function bindSheet(totalJobs, sheet, setting){
+            mainAjax.getMaxNumber(billsLibId, 'jobs', function(result){
+                if(result.length === 0){
+                    maxJobsNumber = 0;
+                }
+                else {
+                    maxJobsNumber = result[0].code;
+                }
+                orgJobData = sheet.getCell(0, 0).value();
+                totalJobsController.eiditData(totalJobs, sheet, setting);
+            });
         }
         }
 
 
+
   	</SCRIPT>
   	</SCRIPT>
 </body>
 </body>
 <script type="text/javascript">
 <script type="text/javascript">

+ 147 - 45
web/billsLib/html/qingdan.html

@@ -32,7 +32,7 @@
                       <a id="aStdJobs" class="nav-link px-3" href="stdJobs">工作内容</a>
                       <a id="aStdJobs" class="nav-link px-3" href="stdJobs">工作内容</a>
                   </li>
                   </li>
                   <li class="nav-item">
                   <li class="nav-item">
-                      <a class="nav-link px-3" href="tezheng.html">项目特征</a>
+                      <a id="aStdItems" class="nav-link px-3" href="stdItems">项目特征</a>
                   </li>
                   </li>
               </ul>
               </ul>
         </nav>
         </nav>
@@ -67,7 +67,6 @@
                   </div>
                   </div>
                 </nav>
                 </nav>
                 <div class="main-data" id="spreadBills">
                 <div class="main-data" id="spreadBills">
-                  <!--<div id="spreadBills" style="width: 100%; height: 700px;"></div>-->
                 </div>
                 </div>
             </div>
             </div>
             <div class="main-side col-lg-5 p-0">
             <div class="main-side col-lg-5 p-0">
@@ -220,65 +219,93 @@
     <script src="public/web/tree_sheet_helper.js"></script>
     <script src="public/web/tree_sheet_helper.js"></script>
     <script src="web/billsLib/scripts/billsLibSetting.js"></script>
     <script src="web/billsLib/scripts/billsLibSetting.js"></script>
     <script src="web/billsLib/scripts/billsLibTree.js"></script>
     <script src="web/billsLib/scripts/billsLibTree.js"></script>
-    <!--<script src="test/tmp_data/data_15690.js"></script>-->
     <script src="test/tmp_data/bills_grid_setting.js"></script>
     <script src="test/tmp_data/bills_grid_setting.js"></script>
     <script src="web/billsLib/scripts/dbController.js"></script>
     <script src="web/billsLib/scripts/dbController.js"></script>
     <script src="web/billsLib/scripts/tools.js"></script>
     <script src="web/billsLib/scripts/tools.js"></script>
 </body>
 </body>
 <script type="text/javascript">
 <script type="text/javascript">
     autoFlashHeight();
     autoFlashHeight();
+    var maxJobsNumber;
+    var maxItemsNumber;
+    var orgJobData;
+    var orgItemData;
     var billsTree = billsLibTree.createBillsTree();
     var billsTree = billsLibTree.createBillsTree();
     var billsLibId = getQueryString("billsLibId");
     var billsLibId = getQueryString("billsLibId");
+    tools.redirect(billsLibId, 'stdBillsmain');
+    var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
+    var itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
     $(document).ready(function(){
     $(document).ready(function(){
         $("#aStdJobs").attr('href', function(){
         $("#aStdJobs").attr('href', function(){
             return 'stdJobs?billsLibId=' + billsLibId;
             return 'stdJobs?billsLibId=' + billsLibId;
         });
         });
+        $('#aStdItems').attr('href', function(){
+            return 'stdItems?billsLibId=' + billsLibId;
+        });
         billsAjax.getStdBillsLibName(billsLibId);
         billsAjax.getStdBillsLibName(billsLibId);
-        billsAjax.getBills(billsLibId);
-        buildJobs();
-        buildItems();
+        billsAjax.getBills(billsLibId, function(bills){
+            showBillsSheet(bills, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet(), billsLibSetting)
+        });
+        buildJobs(jobsSpread, jobsSetting);
+        buildItems(itemsSpread, itemsSetting);
     });
     });
-    //test
-    //test
 
 
-
-    function nodeOpration(controller){
+    function nodeOpration(controller, totalJobs, totalItems){
         dbController.editData(controller, controller.sheet);
         dbController.editData(controller, controller.sheet);
         $('#insert').click(function(){
         $('#insert').click(function(){
-            //controller.insert();
             dbController.insert(controller);
             dbController.insert(controller);
+            tools.clearData(jobsSpread.getActiveSheet());
+            tools.clearData(itemsSpread.getActiveSheet());
         });
         });
         $('#delete').click(function(){
         $('#delete').click(function(){
-            //controller.delete();
-            dbController.delete(controller);
+            dbController.delete(controller, totalJobs, totalItems);
         });
         });
         $('#upLevel').click(function(){
         $('#upLevel').click(function(){
-            //controller.upLevel();
             dbController.upLevel(controller);
             dbController.upLevel(controller);
         });
         });
         $('#downLevel').click(function(){
         $('#downLevel').click(function(){
-            //controller.downLevel();
            dbController.downLevel(controller);
            dbController.downLevel(controller);
         });
         });
         $('#upMove').click(function(){
         $('#upMove').click(function(){
-            //controller.upMove();
             dbController.upMove(controller);
             dbController.upMove(controller);
         });
         });
         $('#downMove').click(function(){
         $('#downMove').click(function(){
-            //controller.downMove();
             dbController.downMove(controller);
             dbController.downMove(controller);
         });
         });
     }
     }
 
 
-    function showBillsSheet(datas){
+
+    function showBillsSheet(datas, jobsSheet, itemsSheet, setting) {
         var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
         var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
-        initSheet(billsSpread);
+        setSheet.initSheet(billsSpread, setting);
+        myKey.delKey(billsSpread);
         billsTree.loadDatas(datas);
         billsTree.loadDatas(datas);
-        var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), billsLibSetting);
+        var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
         controller.showTreeData();
         controller.showTreeData();
-        if(!controller.tree.selected && controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport))){
+        if (!controller.tree.selected && controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport))) {
             controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport)));
             controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0, 0, GC.Spread.Sheets.SheetArea.viewport)));
         }
         }
+        //刷新节点可进行操作的按钮
+        refreshBtn(controller);
+        controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0, 0)));
+       // console.log(controller.sheet.getTag(0, 0));
+        //console.log(controller.tree.selected.getID());
+        /*//节点操作
+        nodeOpration(controller, totalJobs, totalItems);*/
+        //补注内容改变
+        rechargeChange(controller);
+        //jobs
+        jobOperation(controller, jobsSheet, function(totalJobs){
+            //items
+            itemOperation(controller, itemsSheet, function(totalItems){
+                //节点操作
+                nodeOpration(controller, totalJobs, totalItems);
+            });
+        });
+      /*  //items
+        itemOperation(controller, itemsSheet);*/
+    }
+
+    function refreshBtn(controller){
         controller.bind('refreshBaseActn', function (tree) {
         controller.bind('refreshBaseActn', function (tree) {
             var showButton = function (show, btn) {
             var showButton = function (show, btn) {
                 if (show) {
                 if (show) {
@@ -293,42 +320,117 @@
             showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
             showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
             showButton(tree.selected ? true : false, $('#delete'));
             showButton(tree.selected ? true : false, $('#delete'));
         });
         });
-        controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0,0)));
-        nodeOpration(controller);
     }
     }
 
 
-    function buildJobs(){
-        var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
-        initSheet(jobsSpread);
-        TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
+    function rechargeChange(controller){
+        $('#exampleTextarea').bind('change', function(){
+            var newData = $('#exampleTextarea').val();
+            if(controller.tree.selected){
+                rechargeController.updateRechar(controller.tree.selected, newData);
+            }
+        });
     }
     }
 
 
-    function jobsController(sheet, jobsSetting){
-        jobsAjax.getJobContent(billsLibId, function(jobsArr){
+    function jobOperation(controller, jobsSheet, callback){
+        mainAjax.getMaxNumber(billsLibId, 'jobs', function(result){
+            if(result.length === 0){
+                maxJobsNumber = 0;
+            }
+            else {
+                maxJobsNumber = result[0].code;
+            }
+            jobsAjax.getJobContent(billsLibId, function(datas){
+                var totalJobs = createObj.newJobs();
+                totalJobs.loadJobs(controller.tree.items, datas);
+                initData(controller, jobsSheet, jobsSetting, 'jobs');
+                myKey.delKey(jobsSpread, controller, totalJobs, jobsSetting, 'jobs');
+                bindSheet(controller, jobsSheet, 'jobs', jobsSetting);
+                jobsController.editData(controller, jobsSheet, totalJobs, jobsSetting);
+                if (callback){
+                    callback(totalJobs);
+                }
+            });
+        });
+    }
 
 
-            sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
-                var field, oldData = args.sheet.getValue(args.row, args.col), newData = args.editingText, id = sheet.getTag(args.row, args.col) ;
-                jobsSetting.cols.forEach(function(col, idx){
-                    if(args.col === idx){
-                        field = col.data.field;
+    function itemOperation(controller, itemsSheet, callback){
+        mainAjax.getMaxNumber(billsLibId, 'items', function(result){
+            if(result.length === 0){
+                maxItemsNumber = 0;
+            }
+            else {
+                maxItemsNumber = result[0].code;
+            }
+            itemsAjax.getItemCharacter(billsLibId, function(datas){
+                var totalItems = createObj.newItems();
+                totalItems.loadItems(controller.tree.items, datas);
+                initData(controller, itemsSheet, itemsSetting, 'items');
+                myKey.delKey(itemsSpread, controller, totalItems, itemsSetting, 'items');
+                bindSheet(controller, itemsSheet, 'items', itemsSetting);
+                itemsController.editData(controller, itemsSheet, totalItems, itemsSetting);
+                if(callback){
+                    callback(totalItems)
+                }
+            });
+        });
+    }
+
+    //初始焦点工作表和项目表绑定数据
+    function initData(controller, sheet, setting, classify){
+        if(controller.tree.selected){
+            var arr = controller.tree.selected[classify];
+            var recharge = controller.tree.selected.data.recharge;
+            if(arr.length > 0){
+                tools.reshowData(sheet, arr, setting, true);
+            }
+            if(recharge){
+                $('#exampleTextarea').val(recharge);
+            }
+        }
+    }
+
+    function bindSheet(controller, sheet, field, setting){
+        controller.sheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function(sender, args){
+            if(controller.tree.selected  && args.oldSelections[0].row !== args.newSelections[0].row|| controller.tree.selected && args.oldSelections[0].row === 0){
+                //rechargeArea
+                $('#exampleTextarea').val(controller.tree.selected.data.recharge);
+                tools.clearData(sheet);
+                if(field === 'jobs'){
+                    var jobs = controller.tree.selected.jobs;
+                    if(jobs.length > 0){
+                        tools.reshowData(sheet, jobs, setting, true);
+                        orgJobData = sheet.getValue(0, 0);
                     }
                     }
-                });
-                //create
-                if(!id && !newData){
-                    jobsAjax.createJobContent(billsLibId, field, newData);
                 }
                 }
-                //update
-                if(id && newData !== oldData ){
-                    jobsAjax.updateJobContent(id, field, newData);
+                if(field === 'items'){
+                    var items = controller.tree.selected.items;
+                    if(items.length > 0){
+                        tools.reshowData(sheet, items, setting, true);
+                        orgItemData = sheet.getValue(0, 0);
+                    }
                 }
                 }
-            });
+            }
+            else {
+                tools.clearData(sheet);
+                $('#exampleTextarea').val('');
+            }
         });
         });
+    }
+
 
 
+    function buildJobs(jobsSpread, setting){
+        setSheet.initSheet(jobsSpread, setting);
+        setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
+        myKey.downKey(jobsSpread);
+        myKey.enterKey(jobsSpread);
+        TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
     }
     }
 
 
-    function buildItems(){
-        var itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
-        initSheet(itemsSpread);
+    function buildItems(itemsSpread, setting){
+        setSheet.initSheet(itemsSpread, setting);
+        setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
+        myKey.downKey(itemsSpread);
+        myKey.enterKey(itemsSpread);
         TREE_SHEET_HELPER.loadSheetHeader(itemsSetting, itemsSpread.getActiveSheet());
         TREE_SHEET_HELPER.loadSheetHeader(itemsSetting, itemsSpread.getActiveSheet());
     }
     }
 
 

+ 0 - 19
web/billsLib/html/test.html

@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>test</title>
-    <script src="../../../lib/jquery/jquery.min.js"></script>
-</head>
-<body>
-    <div id="di">ss</div>
-</body>
-<script>
-    $(document).ready(function(){
-       var test = {a: 1}
-        if(!test.b){
-            alert(1);
-        }
-    });
-</script>
-</html>

+ 117 - 66
web/billsLib/html/tezheng.html

@@ -6,33 +6,33 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>清单规则编辑器</title>
     <title>清单规则编辑器</title>
-    <link rel="stylesheet" href="../../css/bootstrap/bootstrap.min.css">
+    <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/bootstrap/themes.css">-->
-    <link rel="stylesheet" href="../../css/main.css">
-    <link rel="stylesheet" href="../../css/font-awesome/font-awesome.min.css">
+    <link rel="stylesheet" href="web/css/main.css">
+    <link rel="stylesheet" href="web/css/font-awesome/font-awesome.min.css">
     <!--spread-->
     <!--spread-->
-    <link rel="stylesheet" href="../../../web/css/spreadjs/gc.spread.sheets.excel2013white.10.0.1.css">
+    <link rel="stylesheet" href="web/css/spreadjs/gc.spread.sheets.excel2013white.10.0.1.css">
     <!--zTree-->
     <!--zTree-->
-    <link rel="stylesheet" href="../../css/ztree/zTreeStyle.css" type="text/css">
+    <link rel="stylesheet" href="web/css/ztree/zTreeStyle.css" type="text/css">
 </head>
 </head>
 
 
 <body>
 <body>
     <div class="header">
     <div class="header">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
         <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 ">
             <span class="header-logo px-2">清单规则编辑器</span>
             <span class="header-logo px-2">清单规则编辑器</span>
-            <div class="navbar-text"><a href="main.html">清单规则</a><i class="fa fa-angle-right fa-fw"></i>XXX清单规则</div>
+            <div class="navbar-text"></div>
         </nav>
         </nav>
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
         <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
 
 
               <ul class="nav nav-tabs" role="tablist">
               <ul class="nav nav-tabs" role="tablist">
                   <li class="nav-item">
                   <li class="nav-item">
-                      <a class="nav-link px-3" href="qingdan.html">清单</a>
+                      <a id="aStdBills" class="nav-link px-3" href="stdBills">清单</a>
                   </li>
                   </li>
                   <li class="nav-item">
                   <li class="nav-item">
-                      <a class="nav-link px-3" href="neirong.html">工作内容</a>
+                      <a id="aStdJobs" class="nav-link px-3" href="stdJobs">工作内容</a>
                   </li>
                   </li>
                   <li class="nav-item">
                   <li class="nav-item">
-                      <a class="nav-link active px-3" href="tezheng.html">项目特征</a>
+                      <a class="nav-link active px-3" href="javascript: void(0);">项目特征</a>
                   </li>
                   </li>
               </ul>
               </ul>
         </nav>
         </nav>
@@ -47,7 +47,7 @@
             </div>
             </div>
             </div>
             </div>
             <div class="main-side col-lg-5 p-0">
             <div class="main-side col-lg-5 p-0">
-              <div class="main-data" id="spreadEigenvalue">
+              <div class="main-data" id="spreadEigenvalue" style="width: 95%">
               </div>
               </div>
             </div>
             </div>
           </div>
           </div>
@@ -166,69 +166,120 @@
         </div>
         </div>
     </div>
     </div>
     <!-- JS. -->
     <!-- 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>
-    <script src="..//scripts/global.js"></script>
-    <script src="..//scripts/setSheets.js"></script>
+    <script src="lib/spreadjs/sheets/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>
+    <script src="web/billsLib/scripts/global.js"></script>
+    <!--<script src="lib/global.js"></script>-->
+    <script src="web/billsLib/scripts/setSheets.js"></script>
+    <script src="web/billsLib/scripts/billsLibAjax.js"></script>
+    <script src="web/billsLib/scripts/tools.js"></script>
+    <script src="public/web/tree_sheet_helper.js"></script>
+    <script src="web/billsLib/scripts/billsLibSetting.js"></script>
+    <script src="web/billsLib/scripts/dbController.js"></script>
     <SCRIPT type="text/javascript">
     <SCRIPT type="text/javascript">
+        var spread = new GC.Spread.Sheets.Workbook($('#spreadAllItems')[0], {sheetCount: 1});
+        var spreadVal = new GC.Spread.Sheets.Workbook($('#spreadEigenvalue')[0], {sheetCount: 1});
+        var billsLibId = getQueryString('billsLibId');
+        tools.redirect(billsLibId, 'stdBillsmain');
+        var selectedId;
+        var orgValue;
+        var orgItemData;
+        var maxItemsNumber;
   		$(document).ready(function(){
   		$(document).ready(function(){
-            buildAllItems();
-            buildEigenvalue();
+            $('#aStdBills').attr('href', function(){
+                return 'stdBills?billsLibId=' + billsLibId;
+            });
+            $('#aStdJobs').attr('href', function(){
+                return 'stdJobs?billsLibId=' + billsLibId;
+            });
+
+            billsAjax.getStdBillsLibName(billsLibId);
+            buildAllItems(spread, totalItemsSetting);
+            buildEigenvalue(spreadVal, eigenValueSetting);
   		});
   		});
-        function buildAllItems(){
-            var spread = new GC.Spread.Sheets.Workbook($("#spreadAllItems")[0], {sheetCount: 1});
-            var sheet = spread.getSheet(0);
-            var chRowCount = 2;
-            var vpColCount = 2;
-            var vpRowCount = 28;
-            sheet.suspendPaint();
-            sheet.suspendEvent();
-            initSheet(spread, sheet, chRowCount, vpRowCount, vpColCount);
-            setupItemsColHeader(sheet);
-            //initRowHeight(sheet);
-            setCell(sheet);
-            myCommand(spread, sheet);
-            setScrollBar(spread, sheet, vpRowCount);
-            sheet.resumePaint();
-            sheet.resumeEvent();
+        function buildAllItems(spread, setting){
+            setSheet.initSheet(spread, setting);
+            myKey.downKey(spread);
+            myKey.enterKey(spread);
+            setSheet.setEditCol(spread.getActiveSheet(), 1);
+            TREE_SHEET_HELPER.loadSheetHeader(setting, spread.getActiveSheet());
+            itemsAjax.getItemCharacter(billsLibId, function(datas){
+                spread.getActiveSheet().suspendPaint();
+                for(var i=0; i<datas.length; i++){
+                    if(datas[0].id){
+                        selectedId = datas[0].id;
+                    }
+                    totalItemsSetting.cols.forEach(function(col, colIdx){
+                        spread.getActiveSheet().setTag(i, colIdx, datas[i].id, GC.Spread.Sheets.SheetArea.viewport);
+                        if(datas[i][col.data.field]){
+                            spread.getActiveSheet().getCell(i, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(datas[i][col.data.field]);
+                        }
+                        else {
+                            spread.getActiveSheet().getCell(i, colIdx, GC.Spread.Sheets.SheetArea.viewport).value('');
+                        }
+                    });
+                }
+                //
+                var totalItems = createObj.newItems();
+                totalItems.loadItems(null, datas);
+                initValue(spreadVal.getActiveSheet(), totalItems, eigenValueSetting);
+                tools.getBillsIds(function(ids){
+                    myKey.delKey(spread, ids, totalItems, totalItemsSetting, 'totalItems');
+                    myKey.delKey(spreadVal, null, totalItems, eigenValueSetting, 'itemValue');
+                    bindSheet(totalItems, spread.getActiveSheet(), spreadVal.getActiveSheet(), totalItemsSetting);
+                });
+                //
+                spread.getActiveSheet().resumePaint();
+            });
         }
         }
-        function setupItemsColHeader(sheet){
-            var ch = GC.Spread.Sheets.SheetArea.colHeader;
-            sheet.addSpan(0 ,0, 2, 1, ch);
-            sheet.setValue(0, 0, "编号", ch);
-            sheet.setColumnWidth(0, 200);
-            sheet.addSpan(0 ,1, 2, 1, ch);
-            sheet.setValue(0, 1, "项目特征", ch);
-            sheet.setColumnWidth(1, 850);
+
+        function buildEigenvalue(spread, setting){
+            setSheet.initSheet(spread, setting);
+            setSheet.setMaxRowCount(spread.getActiveSheet(), 10);
+            setSheet.setEditCol(spread.getActiveSheet(), 1);
+            myKey.downKey(spread);
+            myKey.enterKey(spread);
+            TREE_SHEET_HELPER.loadSheetHeader(setting, spread.getActiveSheet());
         }
         }
 
 
-        function buildEigenvalue(){
-            var spread = new GC.Spread.Sheets.Workbook($("#spreadEigenvalue")[0], {sheetCount: 1});
-            var sheet = spread.getSheet(0);
-            var chRowCount = 2;
-            var vpColCount = 2;
-            var vpRowCount = 6;
-            sheet.suspendPaint();
-            sheet.suspendEvent();
-            initSheet(spread, sheet, chRowCount, vpRowCount, vpColCount);
-            setupValueColHeader(sheet);
-            //initRowHeight(sheet);
-            setCell(sheet);
-            myCommand(spread, sheet);
-            setScrollBar(spread, sheet, vpRowCount);
-            sheet.resumePaint();
-            sheet.resumeEvent();
+        function bindSheet(totalItems, itemSheet, valueSheet, setting){
+            mainAjax.getMaxNumber(billsLibId, 'items', function(result){
+                if(result.length === 0){
+                    maxItemsNumber = 0;
+                }
+                else {
+                    maxItemsNumber = result[0].code;
+                }
+                orgItemData = itemSheet.getCell(0, 0).value();
+                totalItemsController.eiditData(totalItems, itemSheet, setting);
+            });
+            valueController.editData(totalItems, valueSheet, eigenValueSetting);
+            itemSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function(sender, args){
+                var itemId = itemSheet.getTag(args.newSelections[0].row, args.newSelections[0].col, GC.Spread.Sheets.SheetArea.viewport);
+                if(itemId && args.oldSelections[0].row !== args.newSelections[0].row|| itemId && args.oldSelections[0].row === 0){
+                    var valueArr = valueController.getValues(totalItems, itemId);
+                    tools.clearData(valueSheet);
+                    selectedId = itemId;
+                    tools.reshowValue(valueSheet, valueArr, eigenValueSetting, true);
+                    orgValue = valueSheet.getValue(0, 0);
+                    //
+                    console.log('bindSelectedID: ' + selectedId);
+                }
+                else {
+                    tools.clearData(valueSheet);
+                }
+            });
         }
         }
-        function setupValueColHeader(sheet){
-            var ch = GC.Spread.Sheets.SheetArea.colHeader;
-            sheet.addSpan(0 ,0, 2, 1, ch);
-            sheet.setValue(0, 0, "编号", ch);
-            sheet.setColumnWidth(0, 200);
-            sheet.addSpan(0 ,1, 2, 1, ch);
-            sheet.setValue(0, 1, "特征值", ch);
-            sheet.setColumnWidth(1, 550);
+
+        function initValue(sheet, totalItems, setting){
+            if(selectedId){
+                var valueArr = valueController.getValues(totalItems, selectedId);
+                if(valueArr.length > 0){
+                    tools.reshowValue(sheet, valueArr, setting, true);
+                }
+            }
         }
         }
 
 
   	</SCRIPT>
   	</SCRIPT>

+ 181 - 15
web/billsLib/scripts/billsLibAjax.js

@@ -2,6 +2,36 @@
  * Created by vian on 2017/3/27.
  * Created by vian on 2017/3/27.
  */
  */
 var mainAjax = {
 var mainAjax = {
+    getMaxNumber: function(billsLibId, field, callback){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/getMaxNumber',
+            data: {data: JSON.stringify({billsLibId: billsLibId, field: field})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback(result.data);
+                    }
+                }
+            }
+        });
+    },
+    getABillsLib: function(billsLibId, callback){
+        $.ajax({
+            type: 'post',
+            url: '/stdBillsEditor/getABillsLib',
+            data: {data: JSON.stringify({billsLibId: billsLibId})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback(result.data);
+                    }
+                }
+            }
+        });
+    },
     getStdBillsLib: function(userId){
     getStdBillsLib: function(userId){
         $.ajax({
         $.ajax({
             type: "post",
             type: "post",
@@ -31,11 +61,11 @@ var mainAjax = {
             }
             }
         });
         });
     },
     },
-    createStdBillsLib: function(billsLibName){
+    createStdBillsLib: function(userId, billsLibName){
         $.ajax({
         $.ajax({
             type: "POST",
             type: "POST",
             url: "/stdBillsEditor/createStdBillsLib",
             url: "/stdBillsEditor/createStdBillsLib",
-            data: {data: JSON.stringify({name: billsLibName}) },
+            data: {data: JSON.stringify({userId: userId, name: billsLibName}) },
             dataType: "json",
             dataType: "json",
             success: function(result){
             success: function(result){
                 if(!result.error){
                 if(!result.error){
@@ -99,7 +129,7 @@ var billsAjax = {
             }
             }
         });
         });
     },
     },
-    getBills: function(billsLibId){
+    getBills: function(billsLibId, callback){
         $.ajax({
         $.ajax({
             type: "post",
             type: "post",
             url: "/stdBillsEditor/getBills",
             url: "/stdBillsEditor/getBills",
@@ -107,41 +137,72 @@ var billsAjax = {
             dataType: "json",
             dataType: "json",
             success: function(result){
             success: function(result){
                 if(!result.error){
                 if(!result.error){
-                    showBillsSheet(result.data);
+                    if(callback) {
+                        callback(result.data);
+                    }
                 }
                 }
             }
             }
         });
         });
     },
     },
-    createBills: function(billsLibId, newId, pid, nid){
+    createBills: function(billsLibId, newId, pid, nid, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/createBills',
             url: 'stdBillsEditor/createBills',
             data: {data: JSON.stringify({billsLibId: billsLibId, newId: newId, ParentID: pid, NextSiblingID: nid})},
             data: {data: JSON.stringify({billsLibId: billsLibId, newId: newId, ParentID: pid, NextSiblingID: nid})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback();
+                    }
+                }
             }
             }
         });
         });
     },
     },
-    updatePNId: function(billsLibId, updateId, pid, nid){
+   /* updatePNId: function(billsLibId, updateId, pid, nid, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/updatePNId',
             url: 'stdBillsEditor/updatePNId',
             data: {data: JSON.stringify({billsLibId: billsLibId, updateId: updateId, ParentID: pid, NextSiblingID: nid})},
             data: {data: JSON.stringify({billsLibId: billsLibId, updateId: updateId, ParentID: pid, NextSiblingID: nid})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
-
+                if(!result.error){
+                    if(callback){
+                        callback();
+                    }
+                }
+            }
+        });
+    },*/
+    updatePNId: function(billsLibId, updateData, callback){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updatePNId',
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateData: updateData})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback();
+                    }
+                }
             }
             }
         });
         });
     },
     },
-    deleteBills: function(billsLibId, deleteIds){
+    deleteBills: function(billsLibId, deleteIds, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/deleteBills',
             url: 'stdBillsEditor/deleteBills',
             data: {data: JSON.stringify({billsLibId: billsLibId, deleteIds: deleteIds})},
             data: {data: JSON.stringify({billsLibId: billsLibId, deleteIds: deleteIds})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
-
+                if(!result.error){
+                    if(callback){
+                        callback();
+                    }
+                }
             }
             }
+
         });
         });
     },
     },
     updateBills: function(billsLibId, updateId, field, data){
     updateBills: function(billsLibId, updateId, field, data){
@@ -154,6 +215,27 @@ var billsAjax = {
 
 
             }
             }
         });
         });
+    },
+    updateBillsArr: function(billsLibId, updateId, orgId, newId, type, classify){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updateBillsArr',
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateId: updateId, orgId: orgId, newId: newId, type: type, classify: classify})},
+            dataType: 'json',
+            success: function(result){
+            }
+        });
+    },
+    updateRecharge: function(billsLibId, updateIds, data){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updateRecharge',
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateIds: updateIds, data: data})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
     }
     }
 }
 }
 
 
@@ -171,25 +253,31 @@ var jobsAjax = {
             }
             }
         });
         });
     },
     },
-    getSomeJobs: function(billsLibId, ids){
+    getSomeJobs: function(billsLibId, ids, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/getSomeJobs',
             url: 'stdBillsEditor/getSomeJobs',
             data: {data: JSON.stringify({billsLibId: billsLibId, ids: ids})},
             data: {data: JSON.stringify({billsLibId: billsLibId, ids: ids})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
-
+                if(!result.error && callback){
+                    callback(result.data);
+                }
             }
             }
         });
         });
     },
     },
-    createJobContent: function(billsLibId, field, data){
+    createJobContent: function(billsLibId, field, data, serialNo, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/createJobContent',
             url: 'stdBillsEditor/createJobContent',
-            data: {data: JSON.stringify({billsLibId: billsLibId, field: field, data: data})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, field: field, data: data, serialNo: serialNo })},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
-
+                if(!result.error){
+                    if(callback){
+                        callback(result.data);
+                    }
+                }
             }
             }
         });
         });
     },
     },
@@ -198,7 +286,84 @@ var jobsAjax = {
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/updateJobContent',
             url: 'stdBillsEditor/updateJobContent',
             data: {data: JSON.stringify({updateId: id, field: field, data: data })},
             data: {data: JSON.stringify({updateId: id, field: field, data: data })},
-            dataTypea: 'json',
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
+    },
+    deleteJobContent: function(ids){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/deleteJobContent',
+            data: {data: JSON.stringify({ids: ids})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
+    }
+}
+
+var itemsAjax = {
+    getItemCharacter: function(billsLibId, callback){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/getItemCharacter',
+            data: {data: JSON.stringify({billsLibId: billsLibId})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback(result.data);
+                    }
+                }
+            }
+        });
+    },
+    createItemCharacter: function(billsLibId, field, data, serialNo, callback){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/createItemCharacter',
+            data: {data: JSON.stringify({billsLibId: billsLibId, field: field, data: data, serialNo: serialNo})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    if(callback){
+                        callback(result.data);
+                    }
+                }
+            }
+        });
+    },
+    updateItemCharacter: function(id, field, data){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updateItemCharacter',
+            data: {data: JSON.stringify({updateId: id, field: field, data: data })},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
+    },
+    updateValue: function(id, data, deleteCodes, type){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/updateValue',
+            data: {data: JSON.stringify({updateId: id, data: data, type: type, deleteCodes: deleteCodes})},
+            dataType: 'json',
+            success: function(reslut){
+
+            }
+        });
+    },
+    deleteItemCharacter: function(ids){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/deleteItemCharacter',
+            data: {data: JSON.stringify({ids: ids})},
+            dataType: 'json',
             success: function(result){
             success: function(result){
 
 
             }
             }
@@ -206,3 +371,4 @@ var jobsAjax = {
     }
     }
 }
 }
 
 
+

+ 131 - 2
web/billsLib/scripts/billsLibSetting.js

@@ -142,7 +142,7 @@ var itemsSetting = {
         },
         },
         {
         {
             head: {
             head: {
-                titleNames: ['项目 特征'],
+                titleNames: ['项目特征'],
                 spanCols: [1],
                 spanCols: [1],
                 spanRows: [2],
                 spanRows: [2],
                 vAlign: [1, 1],
                 vAlign: [1, 1],
@@ -150,7 +150,7 @@ var itemsSetting = {
                 font: '16px Arial'
                 font: '16px Arial'
             },
             },
             data: {
             data: {
-                field: 'character',
+                field: 'content',
                 vAlign: 1,
                 vAlign: 1,
                 hAlign: 0,
                 hAlign: 0,
                 font: '14px Arial'
                 font: '14px Arial'
@@ -162,4 +162,133 @@ var itemsSetting = {
     headRowHeight: [20, 30, 30],
     headRowHeight: [20, 30, 30],
     emptyRows: 3,
     emptyRows: 3,
     treeCol: 0
     treeCol: 0
+};
+
+var totalJobsSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编号'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 200
+        },
+        {
+            head: {
+                titleNames: ['工作内容'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'content',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 850
+        },
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
+};
+
+var totalItemsSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编号'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 200
+        },
+        {
+            head: {
+                titleNames: ['项目特征'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'content',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 850
+        },
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
+};
+
+var eigenValueSetting = {
+    cols:[
+        {
+            head: {
+                titleNames: ['编号'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'code',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 200
+        },
+        {
+            head: {
+                titleNames: ['特征值'],
+                spanCols: [1],
+                spanRows: [2],
+                vAlign: [1, 1],
+                hAlign: [1, 1],
+                font: '16px Arial'
+            },
+            data: {
+                field: 'value',
+                vAlign: 1,
+                hAlign: 0,
+                font: '14px Arial'
+            },
+            width: 480
+        },
+    ],
+    headRows: 2,
+    headRowHeight: [20, 30, 30],
+    emptyRows: 3,
+    treeCol: 0
 }
 }

文件差异内容过多而无法显示
+ 972 - 29
web/billsLib/scripts/dbController.js


+ 204 - 68
web/billsLib/scripts/setSheets.js

@@ -1,51 +1,34 @@
 /**
 /**
  * Created by vian on 2017/3/16.
  * Created by vian on 2017/3/16.
  */
  */
-
-function initSheet(spread){
-    var spreadNS = GC.Spread.Sheets, sheet = spread.getActiveSheet();
-    spread.options.showHorizontalScrollbar = false;
-    spread.options.showVerticalScrollbar =false;
-    spread.options.tabStripVisible = false;
-    spread.options.scrollbarMaxAlign = true;
-    sheet.showRowOutline(false);
-    sheet.defaults.rowHeight = 30;
-}
-
-function initHeader(spread, setting){
-    var sheet = spread.getActiveSheet();
-    sheet.setColumnCount(setting.cols.length);
-    sheet.setRowCount();
-}
-
-function setCell(sheet){
-    var colCount = sheet.getColumnCount();
-    var vp = GC.Spread.Sheets.SheetArea.viewport;
-    var center = GC.Spread.Sheets.VerticalAlign.center;
-    var left =  GC.Spread.Sheets.HorizontalAlign.left;
-    for(var i= 0; i<colCount; i++){
-        sheet.getRange(-1, i, -1, 1, vp).vAlign(center);
-        sheet.getRange(-1, i, -1, 1, vp).hAlign(left);
-        sheet.getRange(-1, i, -1, 1, vp).font("12pt ����");
+var setSheet = {
+    initSheet: function(spread, setting){
+        var spreadNS = GC.Spread.Sheets, sheet = spread.getActiveSheet();
+        sheet.suspendPaint();
+        spread.options.showHorizontalScrollbar = false;
+        spread.options.showVerticalScrollbar =false;
+        spread.options.tabStripVisible = false;
+        spread.options.scrollbarMaxAlign = true;
+        sheet.showRowOutline(false);
+        sheet.defaults.rowHeight = 30;
+        setting.cols.forEach(function(col, colIdx){
+            sheet.getRange(-1,colIdx,-1,1, GC.Spread.Sheets.SheetArea.viewport).hAlign(GC.Spread.Sheets.HorizontalAlign.left);
+            sheet.getRange(-1,colIdx,-1,1, GC.Spread.Sheets.SheetArea.viewport).vAlign(GC.Spread.Sheets.VerticalAlign.center);
+            sheet.getRange(-1,colIdx,-1,1, GC.Spread.Sheets.SheetArea.viewport).textIndent(0.5);
+        });
+        sheet.resumePaint();
+    },
+    setEditCol: function(sheet, colIdx){
+        var style = new GC.Spread.Sheets.Style();
+        style.locked = false;
+        sheet.setStyle(-1, colIdx, style);
+        sheet.options.isProtected = true;
+    },
+    setMaxRowCount: function(sheet, rowCount){
+        sheet.setRowCount(rowCount, GC.Spread.Sheets.SheetArea.viewport);
     }
     }
 }
 }
 
 
-function setupEvents(spread, sheet){
-    var events = GC.Spread.Sheets.Events;
-    $("#aDelete").click(function(){
-        var rowIdx = sheet.getActiveRowIndex();
-        sheet.deleteRows(rowIdx, 1);
-    });
-
-   sheet.bind(events.EditEnded, function(e, args){
-       var editRow = args.row;
-       var editCol = args.col;
-       var eiditVal = sheet.getValue(editRow, editCol);
-        console.log("EE: row: "+editRow+"  col: "+editCol +"val: "+eiditVal);
-    });
-
-}
-
 function setScrollBar(spread, sheet, initRow){
 function setScrollBar(spread, sheet, initRow){
     var events = GC.Spread.Sheets.Events;
     var events = GC.Spread.Sheets.Events;
     sheet.bind(events.EnterCell, function(e, data){
     sheet.bind(events.EnterCell, function(e, data){
@@ -60,32 +43,185 @@ function setScrollBar(spread, sheet, initRow){
     });
     });
 }
 }
 
 
+var myKey = {
+    enterKey: function(spread){
+        var sheet = spread.getActiveSheet();
+        spread.commandManager().register("myEnter", function(){
+            var idxRow = sheet.getActiveRowIndex();
+            var rowCount = sheet.getRowCount();
+            if(idxRow+1 == rowCount){
+                sheet.addRows(rowCount, 1);
+                sheet.setRowHeight(rowCount, 30);
+                sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
+                sheet.getRange(rowCount, -1, 1, -1).hAlign(GC.Spread.Sheets.HorizontalAlign.left);
+                sheet.getRange(rowCount, -1, 1, -1).textIndent(0.5);
+                sheet.getRange(rowCount, -1, 1, -1).font("14px Arial");
+            }
+        });
+        spread.commandManager().setShortcutKey("myEnter", GC.Spread.Commands.Key.enter, false, false, false, false);
+    },
 
 
-function myCommand(spread, sheet){
-    var keys = GC.Spread.Commands.Key;
-    //enter,���һ�лس����������
-    spread.commandManager().register("myEnter", function(){
-        var idxRow = sheet.getActiveRowIndex();
-        var rowCount = sheet.getRowCount();
-        if(idxRow+1 == rowCount){
-            sheet.addRows(rowCount, 1);
-            sheet.setRowHeight(rowCount, 30);//�����и�
-            sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
-            sheet.getRange(rowCount, -1, 1, -1).font("10pt ΢���ź�");
+    downKey: function(spread){
+        var sheet = spread.getActiveSheet();
+        spread.commandManager().register("myDown", function(){
+            var idxRow = sheet.getActiveRowIndex();
+            var rowCount = sheet.getRowCount();
+            if(idxRow+1 == rowCount){
+                sheet.suspendPaint();
+                sheet.addRows(rowCount, 1);
+                sheet.setRowHeight(rowCount, 30);
+                sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
+                sheet.getRange(rowCount, -1, 1, -1).hAlign(GC.Spread.Sheets.HorizontalAlign.left);
+                sheet.getRange(rowCount, -1, 1, -1).textIndent(0.5);
+                sheet.getRange(rowCount, -1, 1, -1).font("14px Arial");
+                sheet.resumePaint();
+            }
+        });
+        spread.commandManager().setShortcutKey("myDown", GC.Spread.Commands.Key.down, false, false, false, false);
+    },
+
+
+    delKey: function(spread, controller, totalObj, setting, classify){
+        if(classify === 'jobs' || classify === 'items'){
+            bindRefDel(spread, controller, totalObj, setting, classify);
         }
         }
-    });
-    spread.commandManager().setShortcutKey("myEnter", keys.enter, false, false, false, false);
-    spread.commandManager().register("myDown", function(){
-        var idxRow = sheet.getActiveRowIndex();
-        var rowCount = sheet.getRowCount();
-        if(idxRow+1 == rowCount){
-            sheet.suspendPaint();
-            sheet.addRows(rowCount, 1);
-            sheet.setRowHeight(rowCount, 30);//�����и�
-            sheet.getRange(rowCount, -1, 1, -1).vAlign(GC.Spread.Sheets.VerticalAlign.center);
-            sheet.getRange(rowCount, -1, 1, -1).font("10pt ΢���ź�");
-            sheet.resumePaint();
+        else if(classify === 'totalJobs'){
+            bindTotalJobDel(spread, controller, totalObj, setting);
         }
         }
-    });
-    spread.commandManager().setShortcutKey("myDown", keys.down, false, false, false, false);
-}
+        else if(classify === 'totalItems'){
+            bindTotalItemDel(spread, spreadVal.getActiveSheet(), controller, totalObj, setting);
+        }
+        else if(classify === 'itemValue'){
+            bindValDel(spread, totalObj, setting);
+        }
+        else if(!classify){
+            rejectDel(spread);
+        }
+
+        function bindRefDel(spread, controller, totalObj, setting, classify){
+            var sheet = spread.getActiveSheet();
+            spread.commandManager().register('myDelete', function(){
+                spread.suspendEvent();
+                var ids = tools.delIds(sheet);
+                console.log(ids);
+                tools.deleteELes(controller.tree.selected[classify], ids, function(result){
+                    //deleteFrontData
+                    tools.reshowData(sheet, controller.tree.selected[classify], setting, true);
+                    //deleteDB
+                    billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), ids, null, 'delete', classify);
+                    if(result.length > 0){
+                        if(classify === 'jobs'){
+                            result.forEach(function(id){
+                                if(totalObj.findJob(id)){
+                                    totalObj.jobsArr.splice(totalObj.jobsArr.indexOf(totalObj.findJob(id)), 1);
+                                    delete  totalObj.jobs[totalObj.prefix + id];
+                                }
+                            });
+                            jobsAjax.deleteJobContent(result);
+                        }
+                        else {
+                            result.forEach(function(id){
+                                if(totalObj.findItem(id)){
+                                    totalObj.itemsArr.splice(totalObj.itemsArr.indexOf(totalObj.findItem(id)), 1);
+                                    delete totalObj.items[totalObj.prefix + id];
+                                }
+                            });
+                            itemsAjax.deleteItemCharacter(result);
+                        }
+                    }
+                });
+                spread.resumeEvent();
+            });
+            spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+            spread.commandManager().setShortcutKey('myDelete', GC.Spread.Commands.Key.del, false, false, false, false);
+        }
+
+        function rejectDel(spread){
+            var sheet = spread.getActiveSheet();
+            spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+        }
+
+        function bindTotalJobDel(spread, billsIds, totalJobs, setting){
+            var sheet = spread.getActiveSheet();
+            spread.commandManager().register('myJobDelete', function(){
+                spread.suspendEvent();
+                var ids = tools.delIds(sheet);
+                if(ids.length > 0){
+                    ids.forEach(function(id){
+                        var job = totalJobs.findJob(id);
+                        totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1);
+                    });
+                    tools.reshowData(sheet, totalJobs.jobsArr, setting, true);
+                    jobsAjax.deleteJobContent(ids);
+                    billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'jobs');
+                }
+                spread.resumeEvent();
+            });
+            spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+            spread.commandManager().setShortcutKey('myJobDelete', GC.Spread.Commands.Key.del, false, false, false, false)
+        }
+
+        function bindTotalItemDel(spread, valSheet, billsIds, totalItems, setting){
+            var sheet = spread.getActiveSheet();
+            spread.commandManager().register('myItemDelete', function(){
+                spread.suspendEvent();
+                var ids = tools.delIds(sheet);
+                if(ids.length > 0){
+                    ids.forEach(function(id){
+                        var item = totalItems.findItem(id);
+                        totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1);
+                    });
+                    tools.reshowData(sheet, totalItems.itemsArr, setting, true);
+                    itemsAjax.deleteItemCharacter(ids);
+                    billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'items');
+                    //reshowVal
+                    if(totalItems.itemsArr.length > 0){
+                        selectedId = totalItems.itemsArr[0].data.id;
+                        tools.reshowValue(valSheet, totalItems.itemsArr[0].data.itemValue, eigenValueSetting, true);
+                    }
+                    else {
+                        tools.clearData(valSheet);
+                    }
+                }
+                spread.resumeEvent();
+            });
+            spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+            spread.commandManager().setShortcutKey('myItemDelete', GC.Spread.Commands.Key.del, false, false, false, false)
+        }
+
+        function bindValDel(spread, totalItems, setting){
+            var sheet = spread.getActiveSheet();
+            spread.commandManager().register('valDelete', function(){
+                spread.suspendEvent();
+                //test
+                console.log('MYVAL!!');
+                //
+                var ids = tools.delIds(sheet);
+                console.log(ids);
+                console.log('sI: ' + selectedId);
+                //deleteFront
+                var valsArr = valueController.getValues(totalItems, selectedId);
+                console.log('Arr: '+ valsArr);
+                ids.forEach(function(id){
+                    valsArr.forEach(function(val){
+                        if(val.code === id){
+                            valsArr.splice(valsArr.indexOf(val), 1);
+                        }
+                    });
+                });
+                tools.reshowValue(sheet, valsArr, setting, true);
+                //deleteDb
+                itemsAjax.updateValue(selectedId, null, ids, 'delete');
+                spread.resumeEvent();
+            });
+            spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+            spread.commandManager().setShortcutKey('valDelete', GC.Spread.Commands.Key.del, false, false, false, false);
+        }
+
+        function reSerialNo(){
+
+        }
+
+    }
+}
+

+ 25 - 0
web/main/html/main.html

@@ -629,6 +629,30 @@
             data.flags.push({fieldName: 'isPartGather', flag: false});
             data.flags.push({fieldName: 'isPartGather', flag: false});
         });*/
         });*/
 
 
+<<<<<<< HEAD
+        project = PROJECT.createInit();
+        project.Bills.loadDatas(datas);
+        project.Rations.loadDatas(drawing_data);
+        project.loadMainTree();
+        //project.mainTree.loadDatas(project.Bills.tree, project.Rations.datas);
+
+        controller = TREE_SHEET_CONTROLLER.createInit(project.mainTree, billsSpread.getActiveSheet(), BillsGridSetting);
+        //controller = TREE_SHEET_CONTROLLER.createInit(project.Bills.tree, billsSpread.getActiveSheet(), BillsGridSetting);
+        controller.showTreeData();
+        controller.bind('refreshBaseActn', function (tree) {
+            var showButton = function (show, btn) {
+                if (show) {
+                    btn.show();
+                } else {
+                    btn.hide();
+                }
+            };
+            showButton(tree.selected && tree.selected.canUpLevel(), $('#upLevel'));
+            showButton(tree.selected && tree.selected.canDownLevel(), $('#downLevel'));
+            showButton(tree.selected && tree.selected.canUpMove(), $('#upMove'));
+            showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
+            showButton(tree.selected ? true : false, $('#delete'));
+=======
         project = PROJECT.createNew();
         project = PROJECT.createNew();
         CommonAjax.post('/bills/getData', {projectId: scUrlUtil.GetQueryString('project')}, function (bills) {
         CommonAjax.post('/bills/getData', {projectId: scUrlUtil.GetQueryString('project')}, function (bills) {
             project.Bills.loadDatas(bills);
             project.Bills.loadDatas(bills);
@@ -654,6 +678,7 @@
                 showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
                 showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
                 showButton(tree.selected ? true : false, $('#delete'));
                 showButton(tree.selected ? true : false, $('#delete'));
             });
             });
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
         });
         });
 
 
         $('#insert').click(function () {
         $('#insert').click(function () {

+ 1 - 1
web/main/js/main_ajax.js

@@ -28,7 +28,7 @@ var PullData = function (url, data, successCallback, errorCallback) {
 var GetProject = function (proj_id, callback) {
 var GetProject = function (proj_id, callback) {
     $.ajax({
     $.ajax({
         type:"POST",
         type:"POST",
-        url: '/getProject',
+        url: '/pm/api/getProject',
         data: {'data': JSON.stringify({"user_id": userID, "proj_id": proj_id})},
         data: {'data': JSON.stringify({"user_id": userID, "proj_id": proj_id})},
         dataType: 'json',
         dataType: 'json',
         cache: false,
         cache: false,

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

@@ -11,14 +11,21 @@ var Bills = {
             rootId: -1
             rootId: -1
         };
         };
 
 
+<<<<<<< HEAD
+        // �û�����private����
+        var tools = {};
+
+        // ����ͨ��this���ʵ����ԣ�����Ӧ�ڴ˵�Ԫ�ⲿ����д�����
+=======
         // 用户定义private方法
         // 用户定义private方法
         var tools = {};
         var tools = {};
 
 
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
         var bills = function (proj) {
         var bills = function (proj) {
             this.project = proj;
             this.project = proj;
             this.datas = null;
             this.datas = null;
-            this.tree = idTree.createNew(billsTreeSetting);
+            this.tree = idTree.createInit(billsTreeSetting);
 
 
             var sourceType = ModuleNames.bills;
             var sourceType = ModuleNames.bills;
             this.getSourceType = function () {
             this.getSourceType = function () {
@@ -27,6 +34,12 @@ var Bills = {
             proj.registerModule(ModuleNames.bills, this);
             proj.registerModule(ModuleNames.bills, this);
         };
         };
 
 
+<<<<<<< HEAD
+        // prototype���ڶ���public����
+        bills.prototype.loadDatas = function (datas) {
+            this.datas = datas;
+            // generate Fees & Flags Index��For View & Calculate
+=======
         // 从后台获取数据
         // 从后台获取数据
         bills.prototype.pullData = function (){
         bills.prototype.pullData = function (){
             this.project.pullData(
             this.project.pullData(
@@ -49,6 +62,7 @@ var Bills = {
         bills.prototype.loadDatas = function (datas) {
         bills.prototype.loadDatas = function (datas) {
             this.datas = datas;
             this.datas = datas;
             // generate Fees & Flags Index, For View & Calculate
             // generate Fees & Flags Index, For View & Calculate
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
             this.datas.forEach(function (data) {
             this.datas.forEach(function (data) {
                 data.FeesIndex = {};
                 data.FeesIndex = {};
                 if (data.fees) {
                 if (data.fees) {

+ 19 - 1
web/main/js/models/project.js

@@ -2,6 +2,13 @@
  * Created by Mai on 2017/4/1.
  * Created by Mai on 2017/4/1.
  */
  */
 var PROJECT = {
 var PROJECT = {
+<<<<<<< HEAD
+    createNew: function () {
+        // ����private����
+        var tools = {};
+
+        // ����ͨ��this���ʵ����ԣ�����Ӧ�ڴ˵�Ԫ�ⲿ����д�����
+=======
     createNew: function (projectID, userID) {
     createNew: function (projectID, userID) {
         // 定义private方法
         // 定义private方法
         var tools = {
         var tools = {
@@ -22,18 +29,29 @@ var PROJECT = {
         };
         };
 
 
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
         var project = function () {
         var project = function () {
-            this.mainTree = cacheTree.createNew(this);
+            this.mainTree = cacheTree.createInit(this);
 
 
+<<<<<<< HEAD
+            this.Bills = Bills.createInit(this);
+            this.Rations = Rations.createInit(this);
+            this.GLJs = GLJs.createInit(this);
+=======
             this.Bills = Bills.createNew(this);
             this.Bills = Bills.createNew(this);
             this.Ration = Ration.createNew(this);
             this.Ration = Ration.createNew(this);
             this.GLJ = GLJ.createNew(this);
             this.GLJ = GLJ.createNew(this);
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
 
 
 
 
             this.masterField = {ration: 'BillsID'};
             this.masterField = {ration: 'BillsID'};
         };
         };
 
 
+<<<<<<< HEAD
+        // prototype���ڶ���public����
+=======
         // prototype用于定义public方法
         // prototype用于定义public方法
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
         project.prototype.modify = function (modifyDatas, callback) {
         project.prototype.modify = function (modifyDatas, callback) {
             // To Do
             // To Do
         };
         };

+ 4 - 4
web/pm/js/pm_ajax.js

@@ -5,7 +5,7 @@
 var GetAllProjectData = function (callback) {
 var GetAllProjectData = function (callback) {
     $.ajax({
     $.ajax({
         type:"POST",
         type:"POST",
-        url: '/getProjects',
+        url: '/pm/api/getProjects',
         data: {'data': JSON.stringify({"user_id": userID})},
         data: {'data': JSON.stringify({"user_id": userID})},
         dataType: 'json',
         dataType: 'json',
         cache: false,
         cache: false,
@@ -27,7 +27,7 @@ var GetAllProjectData = function (callback) {
 var UpdateProjectData = function (updateData, callback) {
 var UpdateProjectData = function (updateData, callback) {
     $.ajax({
     $.ajax({
         type:"POST",
         type:"POST",
-        url: '/updateProjects',
+        url: '/pm/api/updateProjects',
         data: {'data': JSON.stringify({"user_id": userID, "updateData": updateData})},
         data: {'data': JSON.stringify({"user_id": userID, "updateData": updateData})},
         dataType: 'json',
         dataType: 'json',
         cache: false,
         cache: false,
@@ -48,7 +48,7 @@ var UpdateProjectData = function (updateData, callback) {
 var RenameProject = function(projId, newName, callback) {
 var RenameProject = function(projId, newName, callback) {
     $.ajax({
     $.ajax({
         type: "POST",
         type: "POST",
-        url: '/renameProject',
+        url: '/pm/api/renameProject',
         data: {'data': JSON.stringify({"user_id": userID, "id": projId, "newName": newName})},
         data: {'data': JSON.stringify({"user_id": userID, "id": projId, "newName": newName})},
         dataType: 'json',
         dataType: 'json',
         cache: false,
         cache: false,
@@ -69,7 +69,7 @@ var RenameProject = function(projId, newName, callback) {
 var BeforeOpenProject = function (projId, updateData, callback) {
 var BeforeOpenProject = function (projId, updateData, callback) {
     $.ajax({
     $.ajax({
         type: "POST",
         type: "POST",
-        url: '/beforeOpenProject',
+        url: '/pm/api/beforeOpenProject',
         data: {'data': JSON.stringify({"user_id": userID, "proj_id": projId, "updateData": updateData})},
         data: {'data': JSON.stringify({"user_id": userID, "proj_id": projId, "updateData": updateData})},
         dataType: 'json',
         dataType: 'json',
         cache: false,
         cache: false,

+ 5 - 5
web/pm/js/pm_main.js

@@ -373,7 +373,7 @@ $('#addFolderOk').click(function () {
             next = Tree.firstNode();
             next = Tree.firstNode();
         }
         }
 
 
-        CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+        CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function (IDs) {
             var updateData = GetAddForlderUpdateData(parent, next, name, IDs.lowID);
             var updateData = GetAddForlderUpdateData(parent, next, name, IDs.lowID);
             Tree.maxNodeId(IDs.lowID - 1);
             Tree.maxNodeId(IDs.lowID - 1);
             UpdateProjectData(updateData, function(datas){
             UpdateProjectData(updateData, function(datas){
@@ -408,7 +408,7 @@ var AddProj = function () {
         //     parent = Tree._root();
         //     parent = Tree._root();
         //     next = Tree.firstNode();
         //     next = Tree.firstNode();
         // }
         // }
-        CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+        CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function (IDs) {
             var updateData = GetAddProjUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID);
             var updateData = GetAddProjUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID);
             Tree.maxNodeId(IDs.lowID - 1);
             Tree.maxNodeId(IDs.lowID - 1);
             UpdateProjectData(updateData, function (datas) {
             UpdateProjectData(updateData, function (datas) {
@@ -428,7 +428,7 @@ var AddProj = function () {
 var AddFolderProj = function () {
 var AddFolderProj = function () {
     var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val();
     var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val();
     if (nameB !== '' && nameX !== '' && name !== '') {
     if (nameB !== '' && nameX !== '' && name !== '') {
-        CommonAjax.post('/getNewProjectID', {count: 3}, function (IDs) {
+        CommonAjax.post('/pm/api/getNewProjectID', {count: 3}, function (IDs) {
             var updateData = GetAddFolderProjUpdateData(Tree._root, Tree.firstNode(), nameB, nameX, name, IDs.lowID);
             var updateData = GetAddFolderProjUpdateData(Tree._root, Tree.firstNode(), nameB, nameX, name, IDs.lowID);
             Tree.maxNodeId(IDs.lowID - 1);
             Tree.maxNodeId(IDs.lowID - 1);
             UpdateProjectData(updateData, function (datas) {
             UpdateProjectData(updateData, function (datas) {
@@ -595,10 +595,10 @@ $('#copytoOk').click(function() {
         }
         }
 
 
         if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
         if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
-            CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+            CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function (IDs) {
                 var updateData = GetCopyUpdateData(cur, parent, next, IDs.lowID);
                 var updateData = GetCopyUpdateData(cur, parent, next, IDs.lowID);
                 Tree.maxNodeId(IDs.lowID - 1);
                 Tree.maxNodeId(IDs.lowID - 1);
-                CommonAjax.post('/copyProjects', {user_id: userID, updateData: updateData}, function (data) {
+                CommonAjax.post('/pm/api/copyProjects', {user_id: userID, updateData: updateData}, function (data) {
                     form.modal('hide');
                     form.modal('hide');
                     data.forEach(function (nodeData) {
                     data.forEach(function (nodeData) {
                         if (nodeData.updateType === 'copy') {
                         if (nodeData.updateType === 'copy') {

+ 16 - 11
web/templates/js/bills.js

@@ -33,9 +33,14 @@ $(document).ready(function () {
         });
         });
     };
     };
 
 
+<<<<<<< HEAD
+    var bills;
+    var tree = idTree.createInit({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1});
+=======
     var tree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
     var tree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: true});
+>>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2
     var billsSpread = new GC.Spread.Sheets.Workbook($('#billsSpread')[0], { sheetCount: 1 });
     var billsSpread = new GC.Spread.Sheets.Workbook($('#billsSpread')[0], { sheetCount: 1 });
-    var controller = TREE_SHEET_CONTROLLER.createNew(tree, billsSpread.getActiveSheet(), TEMPLATE_BILLS_SETTING);
+    var controller = TREE_SHEET_CONTROLLER.createInit(tree, billsSpread.getActiveSheet(), TEMPLATE_BILLS_SETTING);
 
 
     GC.Spread.Common.CultureManager.culture("zh-cn");
     GC.Spread.Common.CultureManager.culture("zh-cn");
 
 
@@ -51,7 +56,7 @@ $(document).ready(function () {
         var data = {type: 'update', data: {ID: node.getID()}};
         var data = {type: 'update', data: {ID: node.getID()}};
         data.data[fieldName] = info.editingText;
         data.data[fieldName] = info.editingText;
         var updateData = FormatUpdateData([data]);
         var updateData = FormatUpdateData([data]);
-        CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+        CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
             node.data[fieldName] = info.editingText;
             node.data[fieldName] = info.editingText;
             controller.refreshTreeNode([node], false);
             controller.refreshTreeNode([node], false);
         }, function () {
         }, function () {
@@ -77,7 +82,7 @@ $(document).ready(function () {
                 datas.push(data);
                 datas.push(data);
             }
             }
         };
         };
-        CommonAjax.post('/template/bills/updateBillsTemplate', FormatUpdateData(datas), function (data) {
+        CommonAjax.post('/template/bills/api/updateBillsTemplate', FormatUpdateData(datas), function (data) {
             RefreshBillsData(data);
             RefreshBillsData(data);
             controller.showTreeData();
             controller.showTreeData();
         }, function () {
         }, function () {
@@ -85,7 +90,7 @@ $(document).ready(function () {
         });
         });
     });
     });
 
 
-    CommonAjax.post('/template/bills/getBillsTemplate', {tempType: tempType}, function (data) {
+    CommonAjax.post('/template/bills/api/getBillsTemplate', {tempType: tempType}, function (data) {
         var bills = data;
         var bills = data;
         tree.loadDatas(bills);
         tree.loadDatas(bills);
         controller.showTreeData();
         controller.showTreeData();
@@ -96,7 +101,7 @@ $(document).ready(function () {
     });
     });
 
 
     $('#insert').click(function () {
     $('#insert').click(function () {
-        CommonAjax.post('/template/bills/getNewBillsTemplateID', {count: 1}, function (data) {
+        CommonAjax.post('/template/bills/api/getNewBillsTemplateID', {count: 1}, function (data) {
             var selected = controller.tree.selected, updateData;
             var selected = controller.tree.selected, updateData;
             controller.tree.maxNodeID(data.lowID - 1);
             controller.tree.maxNodeID(data.lowID - 1);
             controller.tree.rangeNodeID(data.highID);
             controller.tree.rangeNodeID(data.highID);
@@ -106,7 +111,7 @@ $(document).ready(function () {
                 updateData = FormatUpdateData(controller.tree.getInsertData());
                 updateData = FormatUpdateData(controller.tree.getInsertData());
             }
             }
             if (updateData.updateData.length > 0) {
             if (updateData.updateData.length > 0) {
-                CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+                CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                     controller.insert();
                     controller.insert();
                     controller.showTreeData();
                     controller.showTreeData();
                 });
                 });
@@ -119,7 +124,7 @@ $(document).ready(function () {
         var selected = controller.tree.selected, updateData;
         var selected = controller.tree.selected, updateData;
         if (selected) {
         if (selected) {
             updateData = FormatUpdateData(controller.tree.getDeleteData(selected));
             updateData = FormatUpdateData(controller.tree.getDeleteData(selected));
-            CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+            CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                 controller.delete();
                 controller.delete();
                 controller.showTreeData();
                 controller.showTreeData();
             });
             });
@@ -129,7 +134,7 @@ $(document).ready(function () {
         var selected = controller.tree.selected, updateData;
         var selected = controller.tree.selected, updateData;
         if (selected) {
         if (selected) {
             updateData = FormatUpdateData(selected.getUpLevelData());
             updateData = FormatUpdateData(selected.getUpLevelData());
-            CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+            CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                 controller.upLevel();
                 controller.upLevel();
                 controller.showTreeData();
                 controller.showTreeData();
             });
             });
@@ -139,7 +144,7 @@ $(document).ready(function () {
         var selected = controller.tree.selected, updateData;
         var selected = controller.tree.selected, updateData;
         if (selected) {
         if (selected) {
             updateData = FormatUpdateData(selected.getDownLevelData());
             updateData = FormatUpdateData(selected.getDownLevelData());
-            CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+            CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                 controller.downLevel();
                 controller.downLevel();
                 controller.showTreeData();
                 controller.showTreeData();
             });
             });
@@ -149,7 +154,7 @@ $(document).ready(function () {
         var selected = controller.tree.selected, updateData;
         var selected = controller.tree.selected, updateData;
         if (selected) {
         if (selected) {
             updateData = FormatUpdateData(selected.getUpMoveData());
             updateData = FormatUpdateData(selected.getUpMoveData());
-            CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+            CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                 controller.upMove();
                 controller.upMove();
                 controller.showTreeData();
                 controller.showTreeData();
             });
             });
@@ -159,7 +164,7 @@ $(document).ready(function () {
         var selected = controller.tree.selected, updateData;
         var selected = controller.tree.selected, updateData;
         if (selected) {
         if (selected) {
             updateData = FormatUpdateData(selected.getDownMoveData());
             updateData = FormatUpdateData(selected.getDownMoveData());
-            CommonAjax.post('/template/bills/updateBillsTemplate', updateData, function (data) {
+            CommonAjax.post('/template/bills/api/updateBillsTemplate', updateData, function (data) {
                 controller.downMove();
                 controller.downMove();
                 controller.showTreeData();
                 controller.showTreeData();
             });
             });