zhongzewei 8 سال پیش
والد
کامیت
91a25ff7da

+ 21 - 10
modules/billsLib/billsLibControllers/billsLibControllers.js

@@ -23,15 +23,20 @@ module.exports = {
             callback(req, res, 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);
          });
          });
@@ -84,6 +89,12 @@ module.exports = {
            callback(req, res, err, message, null);
            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){
@@ -96,12 +107,6 @@ module.exports = {
             callback(req, res, err, message, jobs);
             callback(req, res, err, message, jobs);
         });
         });
     },
     },
-    getSomeJobs: function(req, res){
-        var data = JSON.parse(req.body.data);
-        billsLibDao.getSomeJobs(data, function(err, message, jobs){
-           callback(req, res, err, message, jobs);
-        });
-    },
     createJobContent: function(req, res){
     createJobContent: function(req, res){
         var data = JSON.parse(req.body.data);
         var data = JSON.parse(req.body.data);
         billsLibDao.createJobContent(data, function(err, message, id){
         billsLibDao.createJobContent(data, function(err, message, id){
@@ -114,9 +119,15 @@ module.exports = {
             callback(req, res, err, message, id);
             callback(req, res, err, message, id);
         });
         });
     },
     },
+    updateValue: function(req, res){
+        var data = JSON.parse(req.body.data);
+        billsLibDao.updateValue(data, function(err, message){
+            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.id, function(err, message){
+        billsLibDao.deleteJobContent(data, function(err, message){
             callback(req, res, err, message, null);
             callback(req, res, err, message, null);
         });
         });
     },
     },
@@ -140,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);
         });
         });
     }
     }

+ 309 - 190
modules/billsLib/billsLibModel/billsLibInterfaces.js

@@ -16,29 +16,42 @@ billsLibDao.prototype.getMaxNumber = function(gData, callback){
     var billsLibId = gData.billsLibId;
     var billsLibId = gData.billsLibId;
     var field = gData.field;
     var field = gData.field;
     if(field === 'jobs'){
     if(field === 'jobs'){
-        JobContent.find().sort({code: -1}).limit(1).exec(function(err, result){
+        JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
             if(err){
             if(err){
                 callback(1, 'Error', null);
                 callback(1, 'Error', null);
             }
             }
             else {
             else {
-                callback(0, '', result.code);
+                callback(0, '', result);
             }
             }
         });
         });
     }
     }
     else if(field === 'items'){
     else if(field === 'items'){
-        ItemCharacter.find().sort({code: -1}).limit(1).exec(function(err, result){
+        ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
             if(err){
             if(err){
                 callback(1, 'Error', null);
                 callback(1, 'Error', null);
             }
             }
             else {
             else {
-                callback(0, '', result.code);
+                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);
         }
         }
@@ -46,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.counterDAO.getIDAfterCount(counter.moduleName.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);
@@ -74,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;
@@ -98,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);
         }
         }
@@ -112,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);
         }
         }
@@ -123,73 +139,99 @@ 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;
+
+billsLibDao.prototype.updatePNId= function(upData, callback){
+    var billsLibId = upData.billsLibId;
+    var updateDatas = upData.updateData;
     var success = true;
     var success = true;
-    if(!updatepid){
-        Bills.update({billsLibId: billsLibId, ID: updateId}, {$set: {NextSiblingID: updatenid}}, function(err){
-            if(err){
-                callback(1, "Error")
-            }
-            else{
-                callback(0, "");
+    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 if(!updatenid){
-        updateId.forEach(function(uid){
-            Bills.update({billsLibId: billsLibId, ID: uid}, {$set: {ParentID: updatepid}}, function(err){
-                if(err){
-                    success = false;
+            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;
+                        }
+                    });
                 }
                 }
-            });
-        });
-        if(!success){
-            callback(1, 'Error');
-        }
-        else {
-            callback(0, '');
-        }
-    }
-    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, '');
+    }
 }
 }
 
 
 billsLibDao.prototype.updateBills = function(ubillsData, callback){
 billsLibDao.prototype.updateBills = function(ubillsData, callback){
@@ -262,113 +304,152 @@ billsLibDao.prototype.updateBills = function(ubillsData, callback){
 billsLibDao.prototype.updateBillsArr = function(updateData, callback){
 billsLibDao.prototype.updateBillsArr = function(updateData, callback){
     var billsLibId = updateData.billsLibId;
     var billsLibId = updateData.billsLibId;
     var updateId = updateData.updateId;
     var updateId = updateData.updateId;
-    var id = updateData.id;
-    var data = updateData.data;
+    var orgId = updateData.orgId;
+    var newId = updateData.newId;
     var classify = updateData.classify;
     var classify = updateData.classify;
+    var type = updateData.type;
     var success = true;
     var success = true;
     if(classify === 'jobs'){
     if(classify === 'jobs'){
-        if(data.id){
-            Bills.update({billsLibId: billsLibId, ID: updateId, 'jobs.id': id}, {$set: {'jobs.$.id': data.id}}, function(err){
+        if(orgId && newId && type === 'update'){
+            Bills.update({billsLibId: billsLibId, ID: updateId, jobs: orgId}, {$set: {'jobs.$': newId}}, function(err){
                 if(err){
                 if(err){
-                    success = false;
+                    callback(1, 'Error');
+                }
+                else {
+                    callback(0, '');
                 }
                 }
             });
             });
         }
         }
-        else if(data.code){
-            Bills.update({billsLibId: billsLibId, ID: updateId, 'jobs.id': id}, {$set: {'jobs.$.code': data.code}}, function(err){
-                if(err){
-                    success = false;
-                }
+        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');
+                    }
+                });
             });
             });
         }
         }
-        else {
-            Bills.update({billsLibId: billsLibId, ID: updateId, 'jobs.id': id}, {$set: {'jobs.$.content': data.content}}, function(err){
+        //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){
                 if(err){
-                    success =false
+                    callback(1, 'Error');
+                }
+                else {
+                    callback(0, '');
                 }
                 }
             });
             });
         }
         }
-       /* if(!success){
-            callback(1, 'Error');
-        }
-        else {
-            callback(0, '');
-        }*/
-    }
-    else if(classify === 'items') {
-        if(field === 'code'){
-            updateIds.forEach(function(updateId){
-                Bills.update({billsLibId: billsLibId, ID: updateId, 'items.id': id}, {$set: {'items.$.code': data}}, function(err){
+        if(orgId && !newId && type === 'delete'){
+            orgId.forEach(function(oid){
+                Bills.update({billsLibId: billsLibId, ID: updateId}, {$pull: {items: oid}}, function(err){
                     if(err){
                     if(err){
-                        success = false;
+                        callback(1, 'Error');
                     }
                     }
                 });
                 });
             });
             });
-            if(!success){
-                callback(1, 'Error');
-            }
-            else {
-                callback(0, '');
-            }
         }
         }
-        else {
-            updateIds.forEach(function(updateId){
-                Bills.update({billsLibId: billsLibId, ID: updateId, 'items.id': id}, {$set: {'items.$.content': data}}, function(err){
-                    if(err){
-                        success = false;
-                    }
+        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');
+                        }
+                    });
                 });
                 });
             });
             });
-            if(!success){
-                callback(1, 'Error');
-            }
-            else {
-                callback(0, '');
-            }
         }
         }
     }
     }
 }
 }
 
 
+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.getJobContent = function(gJobData, callback){
 billsLibDao.prototype.getJobContent = function(gJobData, callback){
     var billsLibId = gJobData.billsLibId;
     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){
-    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);
         }
         }
     });
     });
 }
 }
@@ -378,23 +459,16 @@ billsLibDao.prototype.createJobContent = function(cJobData, callback){
     var data = cJobData.data;
     var data = cJobData.data;
     var billsLibId = cJobData.billsLibId;
     var billsLibId = cJobData.billsLibId;
     var serialNo = cJobData.serialNo;
     var serialNo = cJobData.serialNo;
-    counter.counterDAO.getIDAfterCount(counter.moduleName.bills, 1, function(err, result){
+    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"){
-            newJobContent = {
-                id: id,
-                billsLibId: billsLibId,
-                code: data,
-                content: ''
-            }
-        }*/
-         if(field == "content"){
+        if(field == "content"){
             newJobContent = {
             newJobContent = {
                 id: id,
                 id: id,
                 billsLibId: billsLibId,
                 billsLibId: billsLibId,
                 code: serialNo,
                 code: serialNo,
                 content: data,
                 content: data,
+                deleted: false
             }
             }
         }
         }
         JobContent.create(newJobContent, function(err){
         JobContent.create(newJobContent, function(err){
@@ -436,14 +510,21 @@ 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');
+            }
+        });
     });
     });
 }
 }
 
 
@@ -451,12 +532,12 @@ billsLibDao.prototype.deleteJobContent = function(jobId, callback){
 //----------------------ItemCharacter---------------------
 //----------------------ItemCharacter---------------------
 billsLibDao.prototype.getItemCharacter = function(gdata, callback){
 billsLibDao.prototype.getItemCharacter = function(gdata, callback){
     var billsLibId = gdata.billsLibId;
     var billsLibId = gdata.billsLibId;
-    ItemCharacter.find({billsLibId: billsLibId}, "-_id", function(err, items){
+    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);
         }
         }
     });
     });
 }
 }
@@ -465,23 +546,17 @@ billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
     var field = cItemData.field;
     var field = cItemData.field;
     var data = cItemData.data;
     var data = cItemData.data;
     var billsLibId = cItemData.billsLibId;
     var billsLibId = cItemData.billsLibId;
+    var serialNo = cItemData.serialNo;
     var newItemCharacter;
     var newItemCharacter;
-    counter.counterDAO.getIDAfterCount(counter.moduleName.bills, 1, function(err, result){
+    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
         var id = result.value.sequence_value;
         var id = result.value.sequence_value;
-        if(field === 'code'){
-            newItemCharacter = {
-                id: id,
-                billsLibId: billsLibId,
-                code: data,
-                content: ''
-            }
-        }
-        else if(field === 'content'){
+        if(field === 'content'){
             newItemCharacter = {
             newItemCharacter = {
                 id: id,
                 id: id,
                 billsLibId: billsLibId,
                 billsLibId: billsLibId,
                 content: data,
                 content: data,
-                code: ''
+                code: serialNo,
+                deleted: false
             }
             }
         }
         }
         ItemCharacter.create(newItemCharacter, function(err){
         ItemCharacter.create(newItemCharacter, function(err){
@@ -519,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();

+ 3 - 6
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}
 );
 );
@@ -46,11 +48,6 @@ var itemCharacterSchema = mongoose.Schema({
 },
 },
     {versionKey: false}
     {versionKey: false}
 );
 );
-/*
-var eigenvalueSchema = mongoose.Schema({
-    eigenvalId: Number,
-    eigenvalContent: String
-});*/
 
 
 module.exports = {
 module.exports = {
     stdBillsLibSchema: stdBillsLibSchema,
     stdBillsLibSchema: stdBillsLibSchema,

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

@@ -5,30 +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('/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);
@@ -39,15 +17,16 @@ 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("/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;

+ 11 - 1
server.js

@@ -109,7 +109,14 @@ app.use("/rationLibEditor",rations_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");
@@ -117,6 +124,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);
 //-----------------
 //-----------------

+ 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();
-});

+ 4 - 2
web/billsLib/html/main.html

@@ -130,15 +130,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{

+ 53 - 30
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,44 +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();
-            jobsAjax.getJobContent(billsLibId, function(result){
-
+            $('#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">

+ 117 - 271
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,70 +219,91 @@
     <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 jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
     var itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[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, function(bills){
         billsAjax.getBills(billsLibId, function(bills){
             showBillsSheet(bills, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet(), billsLibSetting)
             showBillsSheet(bills, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet(), billsLibSetting)
         });
         });
-        buildJobs(jobsSpread);
-        buildItems(itemsSpread);
+        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, jobsSheet, itemsSheet, setting){
+    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.createInit(billsTree.tree, billsSpread.getActiveSheet(), setting);
+        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)));
+        /*//节点操作
+        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) {
@@ -298,291 +318,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);
-
-        /*var totalJobs = new TotalJobs(controller.tree);
-        totalJobs.loadJobs(controller.tree.items);
-
-        bindSheet(controller, jobsSheet, 'jobs', jobsSetting);
-        jobsController(controller, jobsSheet, totalJobs, jobsSetting);*/
-
-        mainAjax.getMaxNumber(billsLibId, 'jobs', function(maxNumber){
-            var totalJobs = createObj.newJobs();
-            totalJobs.loadJobs(controller.tree.items);
-            bindSheet(controller, jobsSheet, 'jobs', jobsSetting);
-            jobsController.editData(controller, jobsSheet, totalJobs, maxNumber, jobsSetting);
-        });
-
-
-        /*var totalItems = createObj.newItems();
-        totalItems.loadItems(controller.tree.items);
-        bindSheet(controller, itemsSheet, 'items', itemsSetting);
-        itemsController.editData(controller, itemsSheet, totalItems, itemsSetting);*/
-
-
-        //testNodeID:
-        /*console.log('newNodeID: '+controller.tree.newNodeID());
-        console.log('maxNodeID: '+controller.tree.maxNodeID());
-        console.log('rangeNodeID: '+controller.tree.rangeNodeID());
-        controller.tree.maxNodeID(100);
-        console.log('newNodeID: '+controller.tree.newNodeID());*/
-        //test
     }
     }
 
 
-    /*var Job = function(data){
-        this.data = data;
-    }
-
-    var TotalJobs = function(tree){
-        this.tree = tree;
-        this.jobs = {};
-        this.jobsArr = [];
-        this.prefix = '_id';
-    }
-
-    TotalJobs.prototype.loadJobs = function (nodes){
-        var me = this;
-        jobsAjax.getJobContent(billsLibId, function(reslut){
-            reslut.forEach(function(jobData){
-                var job = new Job(jobData);
-                me.jobs[me.prefix + jobData.id] = job;
-                me.jobsArr.push(job);
-            });
-            nodes.forEach(function(node){
-                node.data.jobs.forEach(function(data){
-                    node.jobs.push(me.jobs[me.prefix + data.id]);
-                });
-            });
-       });
+    function rechargeChange(controller){
+        $('#exampleTextarea').bind('change', function(){
+            var newData = $('#exampleTextarea').val();
+            if(controller.tree.selected){
+                rechargeController.updateRechar(controller.tree.selected, newData);
+            }
+        });
     }
     }
 
 
-    TotalJobs.prototype.getUpdateIds = function(nodes, repeatId){
-        var ids = [];
-        nodes.forEach(function(node){
-            node.jobs.forEach(function(job){
-                if(job.data.id === repeatId){
-                    ids.push(node.getID());
+    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);
                 }
                 }
             });
             });
         });
         });
-        return ids;
-    }
-
-    //items
-    var Item = function(data){
-        this.data = data;
-    }
-
-    var TotalItems = function(tree){
-        this.tree = tree;
-        this.items = {};
-        this.itemsArr = [];
-        this.prefix = '_id';
     }
     }
 
 
-    TotalItems.prototype.loaditems = function (nodes){
-        var me = this;
-        itemsAjax.getItemCharacter(billsLibId, function(reslut){
-            reslut.forEach(function(itemData){
-                var item = new Item(itemData);
-                me.items[me.prefix + itemData.id] = item;
-                me.itemsArr.push(item);
-            });
-            nodes.forEach(function(node){
-                node.data.items.forEach(function(data){
-                    node.items.push(me.items[me.prefix + data.id]);
-                });
+    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)
+                }
             });
             });
         });
         });
     }
     }
 
 
-    TotalItems.prototype.getUpdateIds = function(nodes, repeatId){
-        var ids = [];
-        nodes.forEach(function(node){
-            node.items.forEach(function(item){
-                if(item.data.id === repeatId){
-                    ids.push(node.getID());
-                }
-            });
-        });
-        return ids;
-    }*/
+    //初始焦点工作表和项目表绑定数据
+    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){
     function bindSheet(controller, sheet, field, setting){
         controller.sheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function(sender, args){
         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){
-                sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
-                sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.tag);
+            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'){
                 if(field === 'jobs'){
                     var jobs = controller.tree.selected.jobs;
                     var jobs = controller.tree.selected.jobs;
                     if(jobs.length > 0){
                     if(jobs.length > 0){
-                        for(var i=0; i<jobs.length; i++){
-                            setting.cols.forEach(function(col, cidx){
-                                sheet.setTag(i, cidx, jobs[i].data.id, GC.Spread.Sheets.SheetArea.viewport);
-                                if(jobs[i].data[col.data.field]){
-                                    sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value(jobs[i].data[col.data.field]);
-                                }
-                                else {
-                                    sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value('');
-                                }
-                            });
-                        }
+                        tools.reshowData(sheet, jobs, setting, true);
+                        orgJobData = sheet.getValue(0, 0);
                     }
                     }
                 }
                 }
                 if(field === 'items'){
                 if(field === 'items'){
                     var items = controller.tree.selected.items;
                     var items = controller.tree.selected.items;
                     if(items.length > 0){
                     if(items.length > 0){
-                        for(var i=0; i<items.length; i++){
-                            setting.cols.forEach(function(col, cidx){
-                                sheet.setTag(i, cidx, items[i].data.id, GC.Spread.Sheets.SheetArea.viewport);
-                                if(items[i].data[col.data.field]){
-                                    sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value(items[i].data[col.data.field]);
-                                }
-                                else {
-                                    sheet.getCell(i, cidx, GC.Spread.Sheets.SheetArea.viewport).value('');
-                                }
-                            });
-                        }
+                        tools.reshowData(sheet, items, setting, true);
+                        orgItemData = sheet.getValue(0, 0);
                     }
                     }
                 }
                 }
             }
             }
-        });
-    }
-
-/*    function jobsController(controller, sheet, totalJobs, setting){
-        var orgData;
-        sheet.bind(GC.Spread.Sheets.Events.EnterCell, function(sender, args){
-            orgData = sheet.getCell(args.row, args.col).value();
-        });
-        sheet.bind(GC.Spread.Sheets.Events.EditEnded, function(sender, args){
-            var field, newData = args.editingText, id = sheet.getTag(args.row, args.col) ;
-            setting.cols.forEach(function(col, idx){
-                if(args.col === idx){
-                    field = col.data.field;
-                }
-            });
-            if(controller.tree.selected){
-                var isExist = false;
-                var isRepeat = false;
-                //isRepeat?
-                if(controller.tree.selected.jobs){
-                    controller.tree.selected.jobs.forEach(function(job){
-                        if(job.data[field] === newData && id !== job.data.id){
-                            isRepeat = true;
-                        }
-                    });
-                }
-                //create
-                if(!id && newData && !isRepeat){
-                    if(totalJobs.jobsArr.length > 0){
-                        totalJobs.jobsArr.forEach(function(job){
-                            //todo:整合代码
-                            if(field === 'content'&& newData === job.data.content){
-                                console.log('ECreate1');
-                                isExist = true;
-                                billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
-                                if(!controller.tree.selected.jobs){
-                                    controller.tree.selected.jobs = new Array();
-                                }
-                                controller.tree.selected.jobs.push(job);
-                                sheet.getCell(args.row, 0).value(job.data.code);
-                                sheet.setTag(args.row, 0, job.data.id);
-                                sheet.setTag(args.row, 1, job.data.id);
-                            }
-                            else if(field === 'code' && newData === job.data.code){
-                                console.log('ECreate2');
-                                isExist = true;
-                                billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', job.data);
-                                if(!controller.tree.selected.jobs){
-                                    controller.tree.selected.jobs = new Array();
-                                }
-                                controller.tree.selected.jobs.push(job);
-                                sheet.getCell(args.row, 1).value(job.data.content);
-                                sheet.setTag(args.row, 0, job.data.id);
-                                sheet.setTag(args.row, 1, job.data.id);
-                            }
-                        });
-                        if(!isExist){
-                            console.log('notEcreate');
-                            jobsAjax.createJobContent(billsLibId, field, newData, function(id){
-                                var newJobData, newJob;
-                                if(field === 'code'){
-                                    newJobData = {id: id, code: newData, content: ''};
-                                }
-                                else {
-                                    newJobData = {id: id, content: newData, code: ''};
-                                }
-                                newJob = new Job(newJobData);
-                                totalJobs.jobs[totalJobs.prefix + id] = newJob;
-                                totalJobs.jobsArr.push(newJob);
-                                billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
-                                if(!controller.tree.selected.jobs){
-                                    controller.tree.selected.jobs = new Array();
-                                }
-                                controller.tree.selected.jobs.push(newJob);
-                                sheet.setTag(args.row, 0, id);
-                                sheet.setTag(args.row, 1, id);
-                            });
-                        }
-                    }
-                    else {
-                        console.log('0create '+totalJobs.jobsArr.length);
-                        jobsAjax.createJobContent(billsLibId, field, newData, function(id){
-                            var newJobData, newJob;
-                            if(field === 'code'){
-                                newJobData = {id: id, code: newData, content: ''};
-                            }
-                            else {
-                                newJobData = {id: id, content: newData, code: ''};
-                            }
-                            newJob = new Job(newJobData);
-                            totalJobs.jobs[totalJobs.prefix + id] = newJob;
-                            totalJobs.jobsArr.push(newJob);
-                            billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', newJobData);
-                            if(!controller.tree.selected.jobs){
-                                controller.tree.selected.jobs = new Array();
-                            }
-                            controller.tree.selected.jobs.push(newJob);
-                            sheet.setTag(args.row, 0, id);
-                            sheet.setTag(args.row, 1, id);
-                        });
-                    }
-                }
-                //update
-                else if(id && newData !== orgData && !isRepeat){
-                    console.log('update');
-                    var ids = totalJobs.getUpdateIds(controller.tree.items, id);
-                    totalJobs.jobs[totalJobs.prefix + id].data[field] = newData;
-                    jobsAjax.updateJobContent(id, field, newData);
-                    billsAjax.updateBillsArr(billsLibId, ids, field, id, newData);
-                }
-                if(isRepeat){
-                    //todo:redirect focus
-                    if(id && newData){
-                        console.log('isRepeat1 orgData:'+orgData);
-                        sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value(orgData);
-                    }
-                    else {
-                        console.log('isRepeat2');
-                        sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
-                    }
-                }
-                //delete
-
-
+            else {
+                tools.clearData(sheet);
+                $('#exampleTextarea').val('');
             }
             }
         });
         });
+    }
 
 
-    }*/
 
 
-    function buildJobs(jobsSpread){
-        initSheet(jobsSpread);
+    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());
         TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
     }
     }
 
 
-    function buildItems(itemsSpread){
-        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 - 22
web/billsLib/html/test.html

@@ -1,22 +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', 'b', 'c', 'd'];
-        var index = test.indexOf('b');
-        console.log(test);
-        console.log('index: '+index);
-        //test.splice(index, 1);
-        test.splice(index, 0, 'vvvvv');
-        console.log(test);
-    });
-</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>

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

@@ -17,6 +17,21 @@ var mainAjax = {
             }
             }
         });
         });
     },
     },
+    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",
@@ -46,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){
@@ -125,40 +140,69 @@ var billsAjax = {
                     if(callback) {
                     if(callback) {
                         callback(result.data);
                         callback(result.data);
                     }
                     }
-                    //showBillsSheet(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){
@@ -172,13 +216,24 @@ var billsAjax = {
             }
             }
         });
         });
     },
     },
-    updateBillsArr: function(billsLibId, updateId, id, data, classify){
+    updateBillsArr: function(billsLibId, updateId, orgId, newId, type, classify){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/updateBillsArr',
             url: 'stdBillsEditor/updateBillsArr',
-            data: {data: JSON.stringify({billsLibId: billsLibId, updateId: updateId, id: id, data: data, classify: classify})},
+            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',
             dataType: 'json',
             success: function(result){
             success: function(result){
+
             }
             }
         });
         });
     }
     }
@@ -237,11 +292,11 @@ var jobsAjax = {
             }
             }
         });
         });
     },
     },
-    deleteJobContent: function(id){
+    deleteJobContent: function(ids){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/deleteJobContent',
             url: 'stdBillsEditor/deleteJobContent',
-            data: {data: JSON.stringify({id: id})},
+            data: {data: JSON.stringify({ids: ids})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
 
 
@@ -266,11 +321,11 @@ var itemsAjax = {
             }
             }
         });
         });
     },
     },
-    createItemCharacter: function(billsLibId, field, data, callback){
+    createItemCharacter: function(billsLibId, field, data, serialNo, callback){
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/createItemCharacter',
             url: 'stdBillsEditor/createItemCharacter',
-            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(!result.error){
@@ -292,11 +347,22 @@ var itemsAjax = {
             }
             }
         });
         });
     },
     },
-    deleteItemCharacter: function(id){
+    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({
         $.ajax({
             type: 'post',
             type: 'post',
             url: 'stdBillsEditor/deleteItemCharacter',
             url: 'stdBillsEditor/deleteItemCharacter',
-            data: {data: JSON.stringify({id: id})},
+            data: {data: JSON.stringify({ids: ids})},
             dataType: 'json',
             dataType: 'json',
             success: function(result){
             success: function(result){
 
 

+ 4 - 4
web/billsLib/scripts/billsLibSetting.js

@@ -193,7 +193,7 @@ var totalJobsSetting = {
                 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'
@@ -236,7 +236,7 @@ var totalItemsSetting = {
                 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'
@@ -279,12 +279,12 @@ var eigenValueSetting = {
                 font: '16px Arial'
                 font: '16px Arial'
             },
             },
             data: {
             data: {
-                field: 'itemValue',
+                field: 'value',
                 vAlign: 1,
                 vAlign: 1,
                 hAlign: 0,
                 hAlign: 0,
                 font: '14px Arial'
                 font: '14px Arial'
             },
             },
-            width: 550
+            width: 480
         },
         },
     ],
     ],
     headRows: 2,
     headRows: 2,

+ 2 - 2
web/billsLib/scripts/billsLibTree.js

@@ -23,12 +23,12 @@ var billsLibTree = {
         billsTree.prototype.loadDatas = function(datas){
         billsTree.prototype.loadDatas = function(datas){
             if(datas){
             if(datas){
                 this.datas = datas;
                 this.datas = datas;
-                this.tree = idTree.createInit(billsLibTree.setting);
+                this.tree = idTree.createNew(billsLibTree.setting);
                 this.tree.loadDatas(this.datas);
                 this.tree.loadDatas(this.datas);
            }
            }
            else {
            else {
                 this.datas = [];
                 this.datas = [];
-                this.tree = idTree.createInit(billsLibTree.setting);
+                this.tree = idTree.createNew(billsLibTree.setting);
                 this.tree.loadDatas(this.datas);
                 this.tree.loadDatas(this.datas);
             }
             }
         };
         };

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 735 - 386
web/billsLib/scripts/dbController.js


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

@@ -1,46 +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 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){
@@ -55,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(){
+
+        }
+
+    }
+}
+