Browse Source

解决一些bug

zhongzewei 8 years ago
parent
commit
6c81127c21

+ 6 - 0
modules/bills_lib/controllers/bills_lib_controllers.js

@@ -76,6 +76,12 @@ module.exports = {
             callback(req, res, err, message, null);
         });
     },
+    upMove: function(req, res){
+        let data = JSON.parse(req.body.data);
+        billsLibDao.upMove(data, function(err, message){
+            callback(req, res, err, message, null);
+        });
+    },
     updatePNId: function (req, res) {
         let data = JSON.parse(req.body.data);
         billsLibDao.updatePNId(data, function(err, message){

+ 91 - 14
modules/bills_lib/models/bills_lib_interfaces.js

@@ -157,6 +157,7 @@ billsLibDao.prototype.createBills = function(cbillsData, callback){
     let pid = cbillsData.ParentID;
     let nid = cbillsData.NextSiblingID;
     let billsLibId = cbillsData.billsLibId;
+    let updatePreData = cbillsData.updatePreData;
     let newBills = {
         ID: newId,
         ParentID: pid,
@@ -170,12 +171,60 @@ billsLibDao.prototype.createBills = function(cbillsData, callback){
         recharge:'',
         deleted: false
     };
-    Bills.create(newBills, function(err){
+    async.parallel([
+        function(cb){
+            Bills.create(newBills, function(err){
+                if(err){
+                    cb(err);
+                }
+                else {
+                    cb(null);
+                }
+            });
+        },
+        function(cb){
+            if(updatePreData){
+                Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updatePreData.ID, deleted: false}, {$set: {NextSiblingID: updatePreData.NextSiblingID}}, function(err, result){
+                    if(err){
+                        cb(err);
+                    }
+                    else {
+                        cb(null)
+                    }
+                });
+            }
+            else {
+                cb(null);
+            }
+        }
+    ], function(err){
         if(err){
-            callback(1, "Error");
+            callback(1, 'Error');
+        }
+        else {
+            callback(0, '');
+        }
+    });
+};
+
+billsLibDao.prototype.upMove = function(data, callback){
+    let billsLibId = data.billsLibId,
+        updateDatas = data.updateDatas;
+    async.each(updateDatas, function(updateData, cb){
+        Bills.findOneAndUpdate({billsLibId: billsLibId, ID: updateData.ID, deleted: false}, {$set: {NextSiblingID: updateData.NextSiblingID}}, function(err){
+            if(err){
+                cb(err);
+            }
+            else {
+                cb(null);
+            }
+        });
+    }, function(err){
+        if(err){
+            callback(1, 'Error');
         }
         else{
-            callback(0, "");
+            callback(0, '');
         }
     });
 };
@@ -330,7 +379,7 @@ billsLibDao.prototype.updateBillsArr = function(updateData, callback){
         }
         if(orgId && !newId && type === 'delete'){
             async.each(orgId, function(oid, cb){
-                Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {jobs: oid}}, function(err){
+                Bills.update({billsLibId: billsLibId, ID: updateId, deleted: false}, {$pull: {'jobs.id': oid}}, function(err){
                     if(err){
                         cb(err);
                     }else {
@@ -343,7 +392,7 @@ billsLibDao.prototype.updateBillsArr = function(updateData, callback){
                 }
             });
         }
-        //todo: test
+
         if(orgId && !newId && type === 'deleteAll'){
             let delArr = [];
             updateId.forEach(function(uid){
@@ -352,7 +401,7 @@ billsLibDao.prototype.updateBillsArr = function(updateData, callback){
                 });
             });
             async.each(delArr, function(delObj, cb){
-                Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: delObj.delId}}, function(err){
+                Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {'jobs.id': delObj.delId}}, function(err){
                     if(err){
                         cb(err);
                     }else {
@@ -759,18 +808,46 @@ billsLibDao.prototype.pasteRel = function (data, callback) {
 billsLibDao.prototype.deleteBills = function(delData, callback){
     let deleteIds = delData.deleteIds;
     let billsLibId = delData.billsLibId;
+    let updateNode = delData.updateNode;
     if(deleteIds){
-        async.each(deleteIds, function(delId, cb){
-            Bills.update({billsLibId: billsLibId, ID: delId, deleted: false}, {$set: {deleted: true}}, function(err){
-                if(err){
-                    cb(err);
+        async.parallel([
+            function(cb){
+                async.each(deleteIds, function(delId, ecb){
+                    Bills.update({billsLibId: billsLibId, ID: delId, deleted: false}, {$set: {deleted: true}}, function(err){
+                        if(err){
+                            ecb(err);
+                        }
+                        else {
+                            ecb(null);
+                        }
+                    });
+                }, function(err){
+                    if(err){
+                        cb(err);
+                    }
+                    else {
+                        cb(null);
+                    }
+                });
+            },
+            function(cb){
+                if(updateNode){
+                    Bills.update({billsLibId: billsLibId, ID: updateNode.ID, deleted: false}, {$set: {NextSiblingID: updateNode.NextSiblingID}}, function(err){
+                        if(err){
+                            cb(err);
+                        }
+                        else {
+                            cb(null);
+                        }
+                    });
+                }else {
+                    cb(null);
                 }
-            });
-        }, function(err){
+            }
+        ], function(err){
             if(err){
                 callback(1, 'Error');
-            }
-            else {
+            }else {
                 callback(0, '');
             }
         });

+ 1 - 0
modules/bills_lib/routes/bills_lib_routes.js

@@ -31,6 +31,7 @@ module.exports =function (app) {
     billsRouter.post('/getABillsLib', billsController.getABillsLib);
     billsRouter.post("/getStdBillsLib", billsController.getStdBillsLib);
     billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
+    billsRouter.post("/upMove", billsController.upMove);
     billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
     billsRouter.post("/renameStdBillsLib", billsController.renameStdBillsLib);
     billsRouter.post("/getStdBillsLibName", billsController.getStdBillsLibName);

+ 1 - 1
web/maintain/bills_lib/html/neirong.html

@@ -291,7 +291,7 @@
                         pasteController.pasteJobsFront(sheet, totalJobs,datas);
                     });
                 }
-                if(uncrossedDatas.length > 0 || crossedDatas.length > 0) {
+                else{
                     tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
                 }
             });

+ 32 - 12
web/maintain/bills_lib/html/qingdan.html

@@ -237,6 +237,7 @@
     let billsLibId = getQueryString("billsLibId");
     let sheetDatas;
     let sheetItemsDatas;
+    let sheetBillsDatas;
     tools.redirect(billsLibId, 'stdBillsmain');
     let jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
     let itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
@@ -455,31 +456,50 @@
     }
 
     function bindPasteBills(controller, sheet, setting){
+        sheetBillsDatas = tools.getsheetDatas(sheet, 'bills', controller);
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
             let datas = [], field;
             let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
             let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
-            let id =  controller.tree.selected.getID();
-            //for(var i=orgRow; i<= maxRow; i++){
-                //let id =  sheet.getTag(i, 0, GC.Spread.Sheets.SheetArea.viewport);
-                if(id){
-                    let pasteJson = {billsLibId: billsLibId, ID: id, code: '', name: '', unit: '', ruleText: ''};
-                    let colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
-                    for(var j=0; j<colLen; j++){
+            //let id =  controller.tree.selected.getID();
+            let markRow = orgRow, colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
+            //test
+            let validDatas = tools.getValidDatas(sheet, setting, args);
+            for(let i=orgRow, j=0; i<= maxRow; i++, j++){
+                let id = sheet.getTag(i, 0);
+                if(id && j< validDatas.length){
+                    console.log(`id: ${id} row: ${i}`);
+                    for(let k=0; k<colLen; k++){
                         setting.cols.forEach(function(col, colIdx){
-                            if(colIdx === j){
+                            if(colIdx === k){
                                 field = col.data.field;
                             }
                         });
-                        pasteJson[field] = sheet.getValue(orgRow, j);
+                        sheet.setValue(i, k, validDatas[j][field]);
                     }
-                    datas.push(pasteJson);
+                    validDatas[j].billsLibId = billsLibId;
+                    validDatas[j].ID = id;
+                    datas.push(validDatas[j]);
+
+                }
+                else if(i< controller.tree.items.length && j>= validDatas.length) {
+                    //reshow orgDatas
+                    console.log(`rowIdx: ${i}`)
+                    sheetBillsDatas.forEach(function(rowData){
+                        if(rowData.rowIdx === i){
+                            sheet.setValue(i, 0, rowData.code + '');
+                            sheet.setValue(i, 1, rowData.name);
+                            sheet.setValue(i, 2, rowData.unit + '');
+                            sheet.setValue(i, 3, rowData.ruleText);
+                        }
+                    });
                 }
                 else {
-                    sheet.clear(orgRow, 0, 1, sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
+                    sheet.clear(i, 0, 1, sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
                 }
-          //  }
+            }
             billsAjax.pasteBills(datas);
+            sheetBillsDatas = tools.getsheetDatas(sheet, 'bills', controller);
         });
     }
     function bindPasteRel(sheet, controller, totalJobs, setting){

+ 1 - 1
web/maintain/bills_lib/html/tezheng.html

@@ -398,7 +398,7 @@
                         pasteController.pasteValueFront(sheet, totalItems, datas);
                     });
                 }
-                if(uncrossedDatas.length >0 || crossedDatas.length > 0){
+                else{
                     tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
                 }
             });

+ 25 - 10
web/maintain/bills_lib/scripts/bills_lib_ajax.js

@@ -156,11 +156,11 @@ var billsAjax = {
             }
         });
     },
-    createBills: function(billsLibId, newId, pid, nid, callback){
+    createBills: function(billsLibId, newId, pid, nid, updatePreData, callback){
         $.ajax({
             type: 'post',
             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, updatePreData: updatePreData})},
             dataType: 'json',
             success: function(result){
                 if(!result.error){
@@ -171,16 +171,28 @@ var billsAjax = {
             }
         });
     },
-
-    updatePNId: function(billsLibId, updateData){
+    upMove: function(billsLibId, updateDatas, callback){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/upMove',
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateDatas: updateDatas})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error && 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){
-                    console.log(`更新成功!`);
+                if(!result.error && callback){
+                    callback();
                 }
                 else {
                     //提示窗口:更新失败
@@ -188,14 +200,15 @@ var billsAjax = {
             }
         });
     },
-    deleteBills: function(billsLibId, deleteIds, callback){
+    deleteBills: function(billsLibId, deleteIds, updateNode, callback){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/deleteBills',
-            data: {data: JSON.stringify({billsLibId: billsLibId, deleteIds: deleteIds})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, deleteIds: deleteIds, updateNode: updateNode})},
             dataType: 'json',
             success: function(result){
                 if(!result.error){
+                    console.log(result.message);
                     if(callback){
                         callback();
                     }
@@ -425,14 +438,16 @@ var itemsAjax = {
             }
         });
     },
-    pasteItems: function(pasteDatas){
+    pasteItems: function(pasteDatas, callback){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/pasteItems',
             data: {data: JSON.stringify({pasteDatas: pasteDatas})},
             dataType: 'json',
             success: function(result){
-
+                if(!result.error && callback){
+                    callback(result.data);
+                }
             }
 
         });

+ 248 - 116
web/maintain/bills_lib/scripts/db_controller.js

@@ -5,32 +5,39 @@ var dbController = {
     insert: function(controller){
         if(controller.tree.items.length === 0){
             controller.tree.maxNodeID(0);
-            controller.insert();
-            controller.tree.selected.jobs = new Array();
-            controller.tree.selected.items = new Array();
-            billsAjax.createBills(billsLibId, controller.tree.selected.getID(), -1 , -1);
+            let newNodeId = controller.tree.newNodeID();
+            billsAjax.createBills(billsLibId, newNodeId, -1 , -1, null, function(){
+                controller.insert();
+                controller.tree.selected.jobs = new Array();
+                controller.tree.selected.items = new Array();
+                controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
+            });
         }
         else {
-            var node = controller.tree.selected;
+            let node = controller.tree.selected;
             if(node){
                 var updateId = node.getID(), createpid = node.getParentID(), createnid = node.getNextSiblingID();
-                controller.insert();
-                controller.tree.selected.jobs = new Array();
-                controller.tree.selected.items = new Array();
-                billsAjax.createBills(billsLibId, node.getNextSiblingID(), createpid, createnid, function(){
-                    billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: node.getNextSiblingID()}]);
-                    rechargeController.createRecharge(controller.tree.selected);
+                let newNodeId = controller.tree.newNodeID();
+                let updatePreData = {ID: updateId, NextSiblingID: newNodeId};
+                billsAjax.createBills(billsLibId, newNodeId, createpid, createnid, updatePreData, function(){
+                    controller.insert();
+                    controller.tree.selected.jobs = new Array();
+                    controller.tree.selected.items = new Array();
+                    controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
                 });
             }
             else {
-                var updateNode = controller.tree.roots[controller.tree.roots.length - 1];
-                var updateId = updateNode.getID();
-                controller.insert();
-                controller.tree.selected.jobs = new Array();
-                controller.tree.selected.items = new Array();
-                billsAjax.createBills(billsLibId, updateNode.getNextSiblingID(), -1, -1, function(){
-                    billsAjax.updatePNId(billsLibId, [{ID: updateId, NextSiblingID: updateNode.getNextSiblingID()}]);
-                    rechargeController.createRecharge(controller.tree.selected);
+                let updateNode = controller.tree.roots[controller.tree.roots.length - 1];
+                let updateId = updateNode.getID();
+                let newNodeId = controller.tree.newNodeID();
+                let updatePreData = {ID: updateId, NextSiblingID: newNodeId};
+                billsAjax.createBills(billsLibId, newNodeId, -1, -1, updatePreData, function(){
+                    controller.insert();
+                    controller.tree.selected.jobs = new Array();
+                    controller.tree.selected.items = new Array();
+                    controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
                 });
             }
         }
@@ -49,36 +56,38 @@ var dbController = {
         //node
         if(node){
             if(node.parent){
-                var updateA = {
+                let updateA = {
                     ID: node.getID(),
                     ParentID: node.parent.getParentID(),
                     NextSiblingID: node.parent.getNextSiblingID()
                 };
                 updateData.push(updateA);
                 //parent
-                var updateB = {
+                let updateB = {
                     ID: node.getParentID(),
                     NextSiblingID: node.getID()
                 }
                 updateData.push(updateB);
                 if(node.nextSibling){
                     getNextSibling(node);
-                    var updateC = {
+                    let updateC = {
                         ID: ids,
                         ParentID: node.getID()
                     }
                     updateData.push(updateC);
                 }
                 if(node.preSibling){
-                    var updateD = {
+                    let updateD = {
                         ID: node.preSibling.getID(),
                         NextSibingID: -1
                     }
                     updateData.push(updateD);
                 }
-                billsAjax.updatePNId(billsLibId, updateData);
-                controller.upLevel();
-                rechargeController.createRecharge(controller.tree.selected);
+                billsAjax.updatePNId(billsLibId, updateData, function(){
+                    controller.upLevel();
+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
+                });
+                //rechargeController.createRecharge(controller.tree.selected);
             }
         }
     },
@@ -106,9 +115,11 @@ var dbController = {
                     }
                     updateData.push(updateC);
                 }
-                billsAjax.updatePNId(billsLibId, updateData);
-                controller.downLevel();
-                rechargeController.createRecharge(controller.tree.selected);
+                billsAjax.updatePNId(billsLibId, updateData, function(){
+                    controller.downLevel();
+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
+                });
+                //rechargeController.createRecharge(controller.tree.selected);
             }
         }
     },
@@ -128,67 +139,80 @@ var dbController = {
             }
         };
         getDeleteIds(node);
-        billsAjax.deleteBills(billsLibId, deleteIds, function(){
-            if(node.preSibling){
-                billsAjax.updatePNId(billsLibId, [{ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()}]);
-            }
-        });
-        //controller.delete();
-        tools.delteSheets(controller, totalJobs, totalItems, jobsSpread.getActiveSheet(), itemsSpread.getActiveSheet());
-        //to solve refresh after deleted
-        let jobsSheet = jobsSpread.getActiveSheet();
-        let itemsSheet = itemsSpread.getActiveSheet();
-        if(node){
-            let jobs = controller.tree.selected.jobs;
-            $('#exampleTextarea').val(controller.tree.selected.data.recharge);
-            setSheet.setMaxRowCount(jobsSheet, jobs);
-            if(jobs.length > 0){
-                tools.reshowData(jobsSheet, jobs, jobsSetting, false);
-                orgJobData = jobsSheet.getValue(0, 0);
+        let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null;
+        billsAjax.deleteBills(billsLibId, deleteIds, updateNode, function(){
+            console.log(`entetcb`);
+            controller.delete();
+            //to solve refresh after deleted
+            let jobsSheet = jobsSpread.getActiveSheet();
+            let itemsSheet = itemsSpread.getActiveSheet();
+            let nowNode = controller.tree.selected ;
+            if(nowNode){
+                let jobs = controller.tree.selected.jobs;
+                $('#exampleTextarea').val(controller.tree.selected.data.recharge);
+                setSheet.setMaxRowCount(jobsSheet, jobs);
+                if(jobs.length > 0){
+                    tools.orderReshowData(jobsSheet, jobs, jobsSetting, 'job', false);
+                    orgJobData = jobsSheet.getValue(0, 0);
+                }
+                let items = controller.tree.selected.items;
+                setSheet.setMaxRowCount(itemsSheet, items);
+                if(items.length > 0){
+                    tools.orderReshowData(itemsSheet, items, itemsSetting, 'item', false);
+                    orgItemData = itemsSheet.getValue(0, 0);
+                }
             }
-            sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
-            //
-            let items = controller.tree.selected.items;
-            setSheet.setMaxRowCount(itemsSheet, items);
-            if(items.length > 0){
-                tools.reshowData(itemsSheet, items, itemsSetting, false);
-                orgItemData = itemsSheet.getValue(0, 0);
+            else {
+                tools.clearData(jobsSheet);
+                tools.clearData(itemsSheet);
+                $('#exampleTextarea').val("");
             }
-            sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
-        }
-        else {
-            tools.clearData(jobsSheet);
-            tools.clearData(itemsSheet);
             sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
             sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
-        }
-        //to solve refresh after deleted
+            sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
+            //to solve refresh after deleted
+        });
     },
 
     upMove: function(controller){
         var node = controller.tree.selected;
+        console.log(`nodeId ${node.getID()}`);
+        console.log(`preNode ${node.preSibling.getID()}`);
         var updateData = [];
         if(node){
+            //1 2 5 3 4
             if(node.preSibling){
-                var updateA = {
+                let preNode = node.preSibling,
+                    nextNode = node.nextSibling,
+                    prePreNode;
+                let updateA = {
                     ID: node.preSibling.getID(),
                     NextSiblingID: node.getNextSiblingID()
                 };
-                var updateB = {
+                console.log(`update preNode: ID: ${updateA.ID} NextSiblingID: ${updateA.NextSiblingID}`);
+                let updateB = {
                     ID: node.getID(),
                     NextSiblingID: node.preSibling.getID()
                 };
+                console.log(`update oprNode: ID: ${updateB.ID} NextSiblingID: ${updateB.NextSiblingID}`);
                 updateData.push(updateA);
                 updateData.push(updateB);
                 if(node.preSibling.preSibling){
-                    var updateC = {
+                    prePreNode = node.preSibling.preSibling;
+                    let updateC = {
                         ID: node.preSibling.preSibling.getID(),
                         NextSiblingID: node.getID()
                     }
                     updateData.push(updateC);
-                }
-                billsAjax.updatePNId(billsLibId, updateData);
-                controller.upMove();
+                    console.log(`update prePreNode: ID: ${updateC.ID} NextSiblingID: ${updateC.NextSiblingID}`);
+                }
+                /*billsAjax.updatePNId(billsLibId, updateData, function(){
+                    controller.upMove();
+                });*/
+                billsAjax.upMove(billsLibId, updateData, function(){
+                    controller.upMove();
+                    sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
+                });
             }
         }
     },
@@ -217,6 +241,7 @@ var dbController = {
                 }
                 billsAjax.updatePNId(billsLibId, updateData);
                 controller.downMove();
+                sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
             }
         }
     },
@@ -233,6 +258,7 @@ var dbController = {
                     }
                 });
                 billsAjax.updateBills(billsLibId, updateId, field, args.editingText);
+                sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
             }
             else {
                 args.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).value('');
@@ -390,15 +416,29 @@ var tools = {
     },
     isRepeat: function(arr, field, newData, ref, classify){
         var isRepeat = false;
-        if(arr){
-            arr.forEach(function(item){
-                if(ref === 'reference' && item[classify].data[field] == newData){
-                    isRepeat = true;
-                }
-                else if(ref === 'document' && item[field] === newData){
-                    isRepeat = true;
-                }
-            });
+        if(classify){
+            if(arr){
+                arr.forEach(function(item){
+                    if(ref === 'reference' && item[classify].data[field] == newData){
+                        isRepeat = true;
+                    }
+                    else if(ref === 'document' && item[field] === newData){
+                        isRepeat = true;
+                    }
+                });
+            }
+        }
+        else {
+            if(arr){
+                arr.forEach(function(item){
+                    if(ref === 'reference' && item.data[field] == newData){
+                        isRepeat = true;
+                    }
+                    else if(ref === 'document' && item[field] === newData){
+                        isRepeat = true;
+                    }
+                });
+            }
         }
         return isRepeat;
     },
@@ -450,34 +490,109 @@ var tools = {
 
     },
 
+    getValidDatas: function(sheet, setting, args){
+        let validDatas = [];
+        const colLen = 4;
+        let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
+        let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
+        for(let i=orgRow; i<= maxRow; i++){
+            if(tools.getValidRow(sheet, i)){
+                let validData = {code: '', name: '', unit: '', ruleText: ''};
+                for(var j=0; j<colLen; j++){
+                    let field;
+                    setting.cols.forEach(function(col, colIdx){
+                        if(colIdx === j){
+                            field = col.data.field;
+                        }
+                    });
+                    validData[field] = sheet.getValue(i, j);
+                }
+                validDatas.push(validData);
+            }
+        }
+        return validDatas;
+    },
+
+    getValidRow: function(sheet, rowIdx){
+        const colCount = 4;
+        let isValid = false;
+        for(let i=0; i< colCount; i++){
+            if(sheet.getValue(rowIdx, i, GC.Spread.Sheets.SheetArea.viewport)){
+                isValid = true;
+            }
+        }
+        return isValid;
+    },
+
+    getDelDatas: function(controller, totalJobs, totalItems){
+        let delJobs = controller.tree.selected.jobs,
+            delItems = controller.tree.selected.items,
+            delJobsIds = [], delItemsIds = [];
+        if(delJobs.length > 0){
+            delJobs.forEach()
+        }
+    },
+
+    /*delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
+        var delJobs = controller.tree.selected.jobs;
+        var delItems = controller.tree.selected.items;
+        var delJobsIds = [];
+        var delItemsIds = [];
+        if(delJobs.length > 0){
+            delJobs.forEach(function(obj){
+                obj.job.count --;
+                if(obj.job.count <=0){
+                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1);
+                    delJobsIds.push(obj.job.data.id)
+                }
+            });
+            jobsAjax.deleteJobContent(delJobsIds);
+            tools.clearData(jobsSheet);
+            tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
+        }
+        if(delItems.length > 0){
+            delItems.forEach(function(obj){
+                obj.item.count --;
+                if(obj.item.count <=0){
+                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1);
+                    delItemsIds.push(obj.item.data.id)
+                }
+            });
+            itemsAjax.deleteItemCharacter(delItemsIds);
+            tools.clearData(itemsSheet);
+            tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true);
+        }
+        controller.delete();
+
+    },*/
     delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
         var delJobs = controller.tree.selected.jobs;
         var delItems = controller.tree.selected.items;
         var delJobsIds = [];
         var delItemsIds = [];
         if(delJobs.length > 0){
-            delJobs.forEach(function(job){
-                job.count --;
-                if(job.count <=0){
-                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1);
-                    delJobsIds.push(job.data.id)
+            delJobs.forEach(function(obj){
+                obj.job.count --;
+                if(obj.job.count <=0){
+                    totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(obj), 1);
+                    delJobsIds.push(obj.job.data.id)
                 }
             });
             jobsAjax.deleteJobContent(delJobsIds);
             tools.clearData(jobsSheet);
-            tools.reshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, true);
+            tools.orderReshowData(jobsSheet, controller.tree.selected.jobs, jobsSetting, 'job', true);
         }
         if(delItems.length > 0){
-            delItems.forEach(function(item){
-                item.count --;
-                if(item.count <=0){
-                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1);
-                    delItemsIds.push(item.data.id)
+            delItems.forEach(function(obj){
+                obj.item.count --;
+                if(obj.item.count <=0){
+                    totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(obj), 1);
+                    delItemsIds.push(obj.item.data.id)
                 }
             });
             itemsAjax.deleteItemCharacter(delItemsIds);
             tools.clearData(itemsSheet);
-            tools.reshowData(itemsSheet, controller.tree.selected.items, itemsSetting, true);
+            tools.orderReshowData(itemsSheet, controller.tree.selected.items, itemsSetting, 'item', true);
         }
         controller.delete();
 
@@ -542,6 +657,7 @@ var tools = {
     orderReshowData: function(sheet, arr, setting, classify, isResort){
         tools.clearData(sheet);
         if(arr.length > 0){
+            setSheet.setMaxRowCount(sheet, arr);
             if(isResort){
                 tools.resortSerialNo(arr);
             }
@@ -657,7 +773,7 @@ var tools = {
         return newArr;
     },
 
-    getsheetDatas: function(sheet, classify){
+    getsheetDatas: function(sheet, classify, controller){
         let rowCount = sheet.getRowCount();
         const colIdx = 1;
         let sheetDatas = [];
@@ -677,6 +793,14 @@ var tools = {
                 }
             }
         }
+        else if(classify === 'bills'){
+            for(let i= 0; i< controller.tree.items.length; i++){
+                let code = sheet.getValue(i, 0), name = sheet.getValue(i, 1),
+                    unit = sheet.getValue(i, 2), ruleText = sheet.getValue(i, 3);
+                let data = {code: code, name: name, unit: unit, ruleText: ruleText, rowIdx: i};
+                sheetDatas.push(data);
+            }
+        }
         else{
             for(let i=0; i<rowCount; i++){
                 let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx);
@@ -907,7 +1031,9 @@ var tools = {
         }
         rebuildArr.forEach(function(data){
             if(data.type !== 'CreateT' && data.field === 'content' ){
-                let code = maxJobsNumber ++;
+                console.log(`!=CT&& content content: ${data.data}`);
+                maxJobsNumber++;
+                let code = maxJobsNumber;
                 data.code = code;
             }
         });
@@ -962,7 +1088,8 @@ var tools = {
         }
         rebuildArr.forEach(function(data){
             if(data.type !== 'CreateT' && data.field === 'content' ){
-                let code = maxItemsNumber ++;
+                maxItemsNumber ++;
+                let code = maxItemsNumber;
                 data.code = code;
             }
         });
@@ -1250,9 +1377,11 @@ let pasteController = {
                 }
             }
         }
+        setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
         tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
     },
     pasteItemsFront: function(sheet, totalItems, datas){
+        console.log(`enterFront`);
         const Update = 'Update', CreateT = 'CreateT';
         if(datas.length > 0){
             for(let i=0; i<datas.length; i++){
@@ -1285,6 +1414,7 @@ let pasteController = {
                 }
             }
         }
+        setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
         tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
     },
 
@@ -1779,7 +1909,7 @@ var totalJobsController = {
                     field = col.data.field;
                 }
             });
-            isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference');
+            isRepeat = tools.isRepeat(totalJobs.jobsArr, field, newData, 'reference', null);
             if(!tagId && !isRepeat && newData){//create
                 totalJobsController.createJob(sheet, totalJobs, field, newData, args);
             }
@@ -1800,26 +1930,27 @@ var totalJobsController = {
     createJob: function(sheet, totalJobs, field, newData, args){
         if(field === 'content'){
             maxJobsNumber++;
-            let id = maxJobsNumber;
-            let code = tools.getNewCode(totalJobs, 'jobs');
-            code++;
-            jobsAjax.createJobContent(billsLibId, newData, code, id);
-                var newJobData, newJob;
-                newJobData = {id: id, content: newData, code: code};
+            let code = maxJobsNumber;
+            jobsAjax.createJobContent(billsLibId, newData, code, function(newJobId){
+                let newJobData, newJob;
+                newJobData = {id: newJobId, content: newData, code: code};
                 newJob = createObj.newJob(newJobData);
                 totalJobs.jobsArr.push(newJob);
-                tools.reSetCell(sheet, args.row, 0, code, id);
+                tools.reSetCell(sheet, args.row, 0, code, newJobId);
+                setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
+            });
         }
         else {
             if(typeof newData === 'number'){
                 maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
-                let id = maxJobsNumber;
-                jobsAjax.createJobContent(billsLibId, '', newData, id);
-                    var newJobData, newJob;
-                    newJobData = {id: id, content: '', code: newData};
+                jobsAjax.createJobContent(billsLibId, '', newData, function(newJobId){
+                    let newJobData, newJob;
+                    newJobData = {id: newJobId, content: '', code: newData};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
-                    tools.reSetCell(sheet, args.row, 0, null, id);
+                    tools.reSetCell(sheet, args.row, 0, null, newJobId);
+                    setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
+                });
             }
             else {
                 //编号只能为数字!
@@ -1857,7 +1988,7 @@ var totalItemsController = {
                     console.log('colIdx' + colIdx);
                 }
             });
-            isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference');
+            isRepeat = tools.isRepeat(totalItems.itemsArr, field, newData, 'reference', null);
             if(!tagId && !isRepeat && newData){//create
                 totalItemsController.createItem(sheet, totalItems, field, newData, args);
             }
@@ -1878,28 +2009,29 @@ var totalItemsController = {
     createItem: function(sheet, totalItems, field, newData, args){
         if(field === 'content'){
             maxItemsNumber++;
-            let id = maxItemsNumber;
-            let code = tools.getNewCode(totalItems, 'items');
-            code++;
-            itemsAjax.createItemCharacter(billsLibId, newData, code, id);
+            let code = maxItemsNumber;
+            itemsAjax.createItemCharacter(billsLibId, newData, code, function(newItemId){
                 var newItemData, newItem;
-                newItemData = {id: id, content: newData, code: code, itemValue: []};
+                newItemData = {id: newItemId, content: newData, code: code, itemValue: []};
                 newItem = createObj.newItem(newItemData);
                 totalItems.itemsArr.push(newItem);
-                totalItems.items[totalItems.prefix + id] = newItem;
-                tools.reSetCell(sheet, args.row, 0, code, id);
+                totalItems.items[totalItems.prefix + newItemId] = newItem;
+                tools.reSetCell(sheet, args.row, 0, code, newItemId);
+                setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
+            });
         }
         else {
             if(typeof newData === 'number'){
                 maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
-                let id = maxItemsNumber;
-                itemsAjax.createItemCharacter(billsLibId, '', newData, id);
+                itemsAjax.createItemCharacter(billsLibId, '', newData, function(newItemId){
                     var newItemData, newItem;
-                    newItemData = {id: id, content: '', code: newData, itemValue: []};
+                    newItemData = {id: newItemId, content: '', code: newData, itemValue: []};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
-                     totalItems.items[totalItems.prefix + id] = newItem;
-                    tools.reSetCell(sheet, args.row, 0, null, id);
+                    totalItems.items[totalItems.prefix + newItemId] = newItem;
+                    tools.reSetCell(sheet, args.row, 0, null, newItemId);
+                    setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
+                });
             }
             else {
                 //编号只能为数字

+ 3 - 3
web/maintain/bills_lib/scripts/set_sheets.js

@@ -27,14 +27,14 @@ var setSheet = {
         sheet.options.isProtected = true;
     },
     setMaxRowCount: function(sheet, arr){
-        let rowCount;
         let arrL = arr.length;
-        if(arrL <10){
+        let rowCount = arrL + 10;
+        /*if(arrL <10){
             rowCount = 10;
         }
         else {
             rowCount = arrL + 3;
-        }
+        }*/
         sheet.setRowCount(rowCount, GC.Spread.Sheets.SheetArea.viewport);
     },
     formatter: function(sheet){