Forráskód Böngészése

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

TonyKang 8 éve
szülő
commit
9359ae0ed8

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

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

+ 113 - 2
modules/bills_lib/models/bills_lib_interfaces.js

@@ -489,8 +489,6 @@ billsLibDao.prototype.updatePNId= function(upData, callback){
         console.log(eachDatas.length);
         async.each(eachDatas, function(eachObj, cb){
             let id = eachObj.id, data = eachObj.data;
-            console.log(id);
-            console.log(data);
             if(data.ParentID && data.NextSiblingID){
                 console.log(`enter 1 ${id}`);
                 Bills.update({billsLibId: billsLibId, ID: id, deleted: false}, {$set: {ParentID: data.ParentID, NextSiblingID: data.NextSiblingID}}, function(err){
@@ -602,6 +600,119 @@ billsLibDao.prototype.updateBills = function(ubillsData, callback){
     }
 }
 
+billsLibDao.prototype.removeTotal = function (data, callback) {
+    let billsLibId = data.billsLibId, billsIds = data.billsIds,
+        delIds = data.delIds, field = data.field, functions = [], delArr = [];
+    if(billsIds.length > 0){
+        billsIds.forEach(function (updateId) {
+            delIds.forEach(function (delId) {
+                delArr.push({updateID: updateId, delId: delId});
+            });
+        });
+    }
+    let parallelFucs = {
+        delJobs: function () {
+            return function (cb) {
+                async.each(delIds, function (delJobId, ecb) {
+                    JobContent.update({billsLibId: billsLibId, id: delJobId, deleted: false}, {$set: {deleted: true}}, function (err, result) {
+                        if(err){
+                            ecb(err);
+                        }
+                        else {
+                            ecb(null);
+                        }
+                    });
+                }, function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                });
+            };
+        },
+        delJobsArr: function () {
+            return function (cb) {
+                async.each(delArr, function (delObj, ecb) {
+                    Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted: false}, {$pull: {jobs: {id: delObj.delId}}}, function (err) {
+                        if(err){
+                            ecb(err);
+                        }else{
+                            ecb(null);
+                        }
+                    });
+                }, function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                })
+            };
+        },
+        delItems: function () {
+            return function (cb) {
+                async.each(delIds, function (delItemId, ecb) {
+                    ItemCharacter.update({billsLibId: billsLibId, id: delItemId, deleted: false}, {$set: {deleted: true}}, function (err) {
+                        if(err){
+                            ecb(err);
+                        }
+                        else{
+                            ecb(null);
+                        }
+                    }, function (err) {
+                        if(err){
+                            cb(err);
+                        }
+                        else{
+                            cb(null);
+                        }
+                    });
+                });
+            }
+        },
+        delItemsArr: function () {
+            return function (cb) {
+                async.each(delArr, function (delObj, ecb) {
+                    Bills.update({billsLibId: billsLibId, ID: delObj.updateId, deleted:false}, {$pull: {items: {id: delObj.delId}}}, function(err){
+                        if(err){
+                            ecb(err);
+                        }
+                        else{
+                            ecb(null);
+                        }
+                    });
+                }, function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                });
+            }
+        }
+    };
+    if(field === 'jobs'){
+        functions.push(parallelFucs.delJobs());
+        functions.push(parallelFucs.delJobsArr());
+    }
+    else{
+        functions.push(parallelFucs.delItems());
+        functions.push(parallelFucs.delItemsArr());
+    }
+    async.parallel(functions, function (err) {
+        if(err){
+            callback(1, 'Error');
+        }
+        else{
+            callback(0, '');
+        }
+    });
+};
+
 billsLibDao.prototype.updateBillsArr = function(updateData, callback){
     let billsLibId = updateData.billsLibId;
     let updateId = updateData.updateId;

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

@@ -26,6 +26,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("/downMove", billsController.downMove);
     billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
@@ -39,10 +40,12 @@ module.exports =function (app) {
     billsRouter.post("/downLevel", billsController.downLevel);
     billsRouter.post("/updateBills", billsController.updateBills);
     billsRouter.post("/updateBillsArr", billsController.updateBillsArr);
+    billsRouter.post("/removeTotal", billsController.removeTotal);
     billsRouter.post("/pasteBills", billsController.pasteBills);
     billsRouter.post('/updateRecharge', billsController.updateRecharge);
     billsRouter.post('/pasteRel', billsController.pasteRel);
     billsRouter.post("/deleteBills", billsController.deleteBills);
+
     billsRouter.post("/getJobContent", billsController.getJobContent);
     billsRouter.post("/createJobContent", billsController.createJobContent);
     billsRouter.post("/updateJobContent", billsController.updateJobContent);
@@ -50,6 +53,7 @@ module.exports =function (app) {
     billsRouter.post("/pasteJobs", billsController.pasteJobs);
     billsRouter.post("/edCreateJob", billsController.edCreateJob);
     billsRouter.post("/edUpdateJob", billsController.edUpdateJob);
+
     billsRouter.post("/getItemCharacter", billsController.getItemCharacter);
     billsRouter.post("/createItemCharacter", billsController.createItemCharacter);
     billsRouter.post("/updateItemCharacter", billsController.updateItemCharacter);

+ 13 - 2
modules/ration_repository/controllers/ration_controller.js

@@ -46,12 +46,23 @@ module.exports = {
     },
     updateRationBasePrc: function (req, res) {
         let data = JSON.parse(req.body.data);
-        rationItem.updateRationBasePrc(data, function (err, message, rst) {
+        rationItem.updateRationBasePrc(data, function (err, message) {
             if(err){
                 callback(req, res, err, message, null);
             }
             else{
-                callback(req, res, err, message, rst);
+                callback(req, res, err, message, null);
+            }
+        })
+    },
+    getRationGljIds: function (req, res) {
+        let data = JSON.parse(req.body.data);
+        rationItem.getRationGljIds(data, function (err, message, ids) {
+            if(err){
+                callback(req, res, err, message, null);
+            }
+            else{
+                callback(req, res, err, message, ids);
             }
         })
     }

+ 0 - 1
modules/ration_repository/controllers/repository_glj_controller.js

@@ -89,5 +89,4 @@ module.exports ={
             }
         });
     }
-
 }

+ 1 - 0
modules/ration_repository/models/glj_repository.js

@@ -35,6 +35,7 @@ var gljTypeModel = db.model("std_ration_lib_glj_type",gljClassSchema, "std_ratio
 var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib_glj_list");
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');
+let rationItemDao = require('./ration_item');
 
 var gljItemDAO = function(){};
 gljItemDAO.prototype.getGljTypes = function(rationLibId, callback){

+ 147 - 13
modules/ration_repository/models/ration_item.js

@@ -44,7 +44,7 @@ var rationItemSchema = mongoose.Schema({
 });
 var rationItemModel = db.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items")
 var counter = require('../../../public/counter/counter');
-
+let gljDao = require('./glj_repository');
 var rationItemDAO = function(){};
 
 rationItemDAO.prototype.getRationItemsBySection = function(sectionId,callback){
@@ -179,28 +179,162 @@ rationItemDAO.prototype.updateRationItems = function(rationLibId, sectionId, ite
         callback(err, results);
     });
 };
+//ration round func
+function round(v,e){
+    var t=1;
+    for(;e>0;t*=10,e--);
+    for(;e<0;t/=10,e++);
+    return Math.round(v*t)/t;
+}
 
 rationItemDAO.prototype.updateRationBasePrc = function (data, callback) {
-    let gljId = data.gljId, basePrice = data.basePrice;
-    rationItemModel.find({'rationGljList.gljId': gljId}, function (err, reslut) {
+    let adjGljId = data.gljId, adjBasePrice = data.basePrice, adjGljType = data.gljType;
+    async.waterfall([
+        function (cb) {
+            rationItemModel.find({'rationGljList.gljId': adjGljId}, function (err, result) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null, result);
+                }
+            });
+        },
+        function (result, cb) {
+            async.each(result, function (rationItem, ecb) {
+                let rationGljList = rationItem.rationGljList,
+                    gljIds = [];
+                rationGljList.forEach(function (rationGlj) {
+                    gljIds.push(rationGlj.gljId);
+                });
+                gljDao.getGljItems(gljIds, function(err, gljItems){
+                    if(err){
+                        ecb(err);
+                    }
+                    else{
+                        let gljArr = [];
+                        for(let i=0; i<gljItems.length; i++){
+                            let gljParentType = -1;
+                            if(gljItems[i].ID === adjGljId){
+                                gljItems[i].gljType = adjGljType;
+                            }
+                            if(gljItems[i].gljType <= 3){
+                                gljParentType = gljItems[i].gljType;
+                            }
+                            if(gljItems[i].gljType > 200 && gljItems[i].gljType < 300){
+                                gljParentType = 2;
+                            }
+                            if(gljItems[i].gljType > 300 && gljItems[i].gljType < 400){
+                                gljParentType = 3;
+                            }
+                            if(gljItems[i].ID === adjGljId){
+                                gljArr.push({gljId: gljItems[i].ID, basePrice: adjBasePrice, gljParentType: gljParentType});
+                            }
+                            else {
+                                gljArr.push({gljId: gljItems[i].ID, basePrice: gljItems[i].basePrice, gljParentType: gljParentType});
+                            }
+                        }
+                        gljArr.forEach(function (gljItem) {
+                            rationGljList.forEach(function (rationGlj) {
+                                if(gljItem.gljId === rationGlj.gljId){
+                                    gljItem.consumeAmt = rationGlj.consumeAmt;
+                                }
+                            })
+                        });
+                        //recalculate the price of ration
+                        let labourPrc = [], materialPrc = [], machinePrc = [], singlePrc, updatePrc = {labourPrice: 0, materialPrice: 0, machinePrice: 0, basePrice: 0};
+                        gljArr.forEach(function (gljItem) {
+                            if(gljItem.gljParentType !== -1){
+                                singlePrc = round(gljItem.basePrice * gljItem.consumeAmt, 3);
+                                if(gljItem.gljParentType === 1){
+                                    labourPrc.push(singlePrc);
+                                }
+                                else if(gljItem.gljParentType ===2){
+                                    materialPrc.push(singlePrc);
+                                }
+                                else{
+                                    machinePrc.push(singlePrc);
+                                }
+                            }
+                        });
+                        if(labourPrc.length > 0){
+                            let sumLaP = 0;
+                            for(let i=0; i<labourPrc.length; i++){
+                                sumLaP += labourPrc[i];
+                            }
+                            updatePrc.labourPrice = round(sumLaP, 2);
+                        }
+                        if(materialPrc.length > 0){
+                            let sumMtP = 0;
+                            for(let i= 0; i<materialPrc.length; i++){
+                                sumMtP += materialPrc[i];
+                            }
+                            updatePrc.materialPrice = round(sumMtP, 2);
+                        }
+                        if(machinePrc.length > 0){
+                            let sumMaP = 0;
+                            for(let i =0; i< machinePrc.length; i++){
+                                sumMaP += machinePrc[i];
+                            }
+                            updatePrc.machinePrice = round(sumMaP, 2);
+                        }
+                        updatePrc.basePrice = updatePrc.labourPrice + updatePrc.materialPrice + updatePrc.machinePrice;
+                        //updateDataBase
+                        rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice, materialPrice: updatePrc.materialPrice,
+                            machinePrice: updatePrc.machinePrice, basePrice: updatePrc.basePrice}},
+                            function (err, result) {
+                                if(err){
+                                    ecb(err);
+                                }
+                                else {
+                                    ecb(null);
+                                }
+                            });
+                    }
+                });
+            }, function(err){
+                if(err){
+                    cb(err);
+                }
+                else {
+                    cb(null);
+                }
+            });
+        }
+    ], function (err) {
         if(err){
+            callback(err, 'Error');
+        }
+        else{
+            callback(null, '');
+        }
+    });
+};
 
+rationItemDAO.prototype.getRationGljIds = function (data, callback) {
+    let repId = data.repId;
+    rationItemModel.find({rationRepId: repId}, function (err, result) {
+        if(err){
+            callback(err, 'Error', null);
         }
         else{
-            async.each(reslut, function (rationItem, cb) {
-                let rationBasePrc = rationItem.basePrice,
-                    gljList = rationItem.gljList, gljPrcObj;
-                for(let i=0; i< gljList.length; i++){
-                    if(gljList[i].gljId === gljId){
-                        gljPrcObj = gljList[i];
-                        break;
-                    }
+            let rstIds = [], newRst = [];
+            result.forEach(function (data) {
+                if(data.rationGljList.length >0){
+                    data.rationGljList.forEach(function (gljObj) {
+                        rstIds.push(gljObj.gljId);
+                    })
                 }
-
             });
+            for(let i= 0; i< rstIds.length; i++){
+                if(newRst.indexOf(rstIds[i]) === -1){
+                    newRst.push(rstIds[i]);
+                }
+            }
+            callback(null, '', newRst);
         }
     });
-};
+}
 
 module.exports = new rationItemDAO()
 

+ 1 - 0
modules/ration_repository/routes/ration_rep_routes.js

@@ -60,6 +60,7 @@ module.exports =  function (app) {
     apiRouter.post("/getRationItems",rationController.getRationItemsBySection);
     apiRouter.post("/mixUpdateRationItems",rationController.mixUpdateRationItems);
     apiRouter.post("/updateRationBasePrc",rationController.updateRationBasePrc);
+    apiRouter.post("/getRationGljIds",rationController.getRationGljIds);
 
     apiRouter.post("/createNewGljTypeNode",repositoryGljController.createNewGljTypeNode);
     apiRouter.post("/updateGljNodes",repositoryGljController.updateGljNodes);

+ 4 - 2
public/web/sheet/sheet_common.js

@@ -157,7 +157,9 @@ var sheetCommonObj = {
                 items.forEach(function(item){
                     if(sheet.getValue(row, col) === item.text){
                         rst[setting.header[col].dataCode] = item.value;
-                        rst.shortName = repositoryGljObj.distTypeTree.distTypes[repositoryGljObj.distTypeTree.prefix + item.value].data.shortName;
+                        if(repositoryGljObj){
+                            rst.shortName = repositoryGljObj.distTypeTree.distTypes[repositoryGljObj.distTypeTree.prefix + item.value].data.shortName;
+                        }
                     }
                 });
             }
@@ -238,7 +240,7 @@ var sheetCommonObj = {
         var rst = true;
         if (rObj) {
             for (var i = 0; i < setting.header.length; i++) {
-                if (rObj[setting.header[i]]) {
+                if (rObj[setting.header[i].dataCode]) {
                     rst = false;
                     break;
                 }

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

@@ -196,7 +196,7 @@
             buildAllJobs(spreadAllJobs, totalJobsSetting);
         });
         function buildAllJobs(spreadAllJobs, setting){
-            setSheet.initSheet(spreadAllJobs, setting, false);
+            setSheet.initSheet(spreadAllJobs, setting, true);
             myKey.downKey(spreadAllJobs);
             myKey.enterKey(spreadAllJobs);
             TREE_SHEET_HELPER.loadSheetHeader(setting, spreadAllJobs.getActiveSheet());

+ 66 - 40
web/maintain/bills_lib/html/qingdan.html

@@ -43,22 +43,22 @@
                   <div class="collapse navbar-collapse" id="navbarNav">
                       <ul class="navbar-nav">
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id="insert" href="javascript: void(0);"><i class="fa fa-share" aria-hidden="true"></i>插入</a>
+                              <a class="nav-link text-primary" doing="false" fcsOnBills="true" id="insert" href="javascript: void(0);"><i class="fa fa-share" aria-hidden="true"></i>插入</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id ="delete" href="javascript:void (0)"><i class="fa fa-remove" aria-hidden="true"></i>删除</a>
+                              <a class="nav-link text-primary" doin="false" fcsOnBills="true" id ="delete" href="javascript:void (0)"><i class="fa fa-remove" aria-hidden="true"></i>删除</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id="upLevel"  href="javascript: void(0);"><i class="fa fa-arrow-left" aria-hidden="true"></i>升级</a>
+                              <a class="nav-link text-primary" doing="false" fcsOnBills="true" id="upLevel"  href="javascript: void(0);"><i class="fa fa-arrow-left" aria-hidden="true"></i>升级</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id="downLevel" href="javascript: void(0);"><i class="fa fa-arrow-right" aria-hidden="true"></i>降级</a>
+                              <a class="nav-link text-primary" doing="false" fcsOnBills="true" id="downLevel" href="javascript: void(0);"><i class="fa fa-arrow-right" aria-hidden="true"></i>降级</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id="upMove" href="javascript: void(0);"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
+                              <a class="nav-link text-primary" doing="false" fcsOnBills="true" id="upMove" href="javascript: void(0);"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
                           </li>
                           <li class="nav-item">
-                              <a class="nav-link text-primary" id="downMove" href="javascript: void(0);"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
+                              <a class="nav-link text-primary" doing="false" fcsOnBills="true" id="downMove" href="javascript: void(0);"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
                           </li>
                       </ul>
                   </div>
@@ -265,43 +265,36 @@
         let btnDownMove = $('#downMove');
         dbController.editData(controller);
         btnInsert.click(function(){
-            if(!btnInsert.attr('focusOnBills')){
+            if(btnInsert.attr('doing') === 'false' && btnInsert.attr('fcsOnBills') === 'true'){
                 dbController.insert(controller, btnInsert);
                 tools.clearData(jobsSpread.getActiveSheet());
                 tools.clearData(itemsSpread.getActiveSheet());
             }
         });
         btnDelete.click(function(){
-            if(!btnDelete.attr('focusOnBills')){
+            if(btnDelete.attr('doing') === 'false' && btnDelete.attr('fcsOnBills') === 'true'){
                 dbController.delete(controller, btnDelete, totalJobs, totalItems);
             }
-            //controller.delete();
         });
         btnUpLevel.click(function(){
-            if(!btnUpLevel.attr('focusOnBills')){
+            if(btnUpLevel.attr('doing') === 'false' && btnUpLevel.attr('fcsOnBills') === 'true'){
                 dbController.upLevel(controller, btnUpLevel);
             }
-            //controller.upLevel();
         });
         btnDownLevel.click(function(){
-            if(!btnDownLevel.attr('focusOnBills')){
+            if(btnDownLevel.attr('doing') === 'false' && btnDownLevel.attr('fcsOnBills') === 'true'){
                 dbController.downLevel(controller, btnDownLevel);
             }
-            //controller.downLevel();
         });
         btnUpMove.click(function(){
-            if(!btnUpMove.attr('focusOnBills')){
+            if(btnUpMove.attr('doing') === 'false' && btnUpMove.attr('fcsOnBills') === 'true'){
                 dbController.upMove(controller, btnUpMove);
             }
-            if(btnUpMove.attr('focusOnJobs')){
-            }
-            //controller.upMove();
         });
         btnDownMove.click(function(){
-            if(!btnDownMove.attr('focusOnBills')){
+            if(btnDownMove.attr('doing') === 'false' && btnDownMove.attr('fcsOnBills') === 'true'){
                 dbController.downMove(controller, btnDownMove);
             }
-            //controller.downMove();
         });
     }
 
@@ -326,6 +319,8 @@
         bindPasteBills(controller, billsSpread.getActiveSheet(), setting);
         //补注内容改变
         rechargeChange(controller);
+        //焦点控制
+        switchFcs(controller, controller.sheet, jobsSheet, itemsSheet);
         //jobs
         jobOperation(controller, jobsSheet, function(totalJobs){
             //------关联表粘贴复制
@@ -339,6 +334,44 @@
         });
     }
 
+    function switchFcs(controller, billsSheet, jobsSheet, itemsSheet){
+        billsSheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
+            $('#insert').attr('fcsOnBills', 'true');
+            $('#delete').attr('fcsOnBills', 'true');
+            $('#upLevel').attr('fcsOnBills', 'true');
+            $('#downLevel').attr('fcsOnBills', 'true');
+            jobsSheet.clearSelection();
+            itemsSheet.clearSelection();
+        });
+        jobsSheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
+            $('#insert').attr('fcsOnBills', 'false');
+            $('#delete').attr('fcsOnBills', 'false');
+            $('#upLevel').attr('fcsOnBills', 'false');
+            $('#downLevel').attr('fcsOnBills', 'false');
+            let selected;
+            if(controller.tree.selected){
+                 selected = controller.tree.selected.jobs[args.row];
+            }
+            if(tools.canUpMove(selected, controller.tree.selected.jobs)){
+            }
+            itemsSheet.clearSelection();
+            itemsSheet.options.isProtected = true;
+            jobsSheet.options.isProtected = false;
+        });
+        itemsSheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
+            $('#insert').attr('fcsOnBills', 'false');
+            $('#delete').attr('fcsOnBills', 'false');
+            $('#upLevel').attr('fcsOnBills', 'false');
+            $('#downLevel').attr('fcsOnBills', 'false');
+            if(controller.tree.selected){
+                let selected = controller.tree.selected.items[args.row];
+            }
+            jobsSheet.clearSelection();
+            jobsSheet.options.isProtected = true;
+            itemsSheet.options.isProtected = false;
+        })
+    };
+
     function setTagID(controller, setting){
         if(controller.tree.items.length > 0){
             let length = controller.tree.items.length;
@@ -358,12 +391,14 @@
                 tools.btnAction($('#insert'), 'focusOnBills');
                 if (show) {
                     //btn.show();
-                    btn.css("opacity", "");
-                    btn.removeClass("disabled");
+                    tools.btnAction(btn, 'doing');
+                    /*btn.css("opacity", "");
+                    btn.removeClass("disabled");*/
                 } else {
                     //btn.hide();
-                    btn.css("opacity", "0.2");
-                    btn.addClass("disabled");
+                    /*btn.css("opacity", "0.2");
+                    btn.addClass("disabled");*/
+                    tools.btnClose(btn, 'doing');
                 }
             };
             showButton(tree.selected && tree.selected.canUpLevel(), $('#upLevel'));
@@ -384,13 +419,6 @@
     }
 
     function jobOperation(controller, jobsSheet, callback){
-        //add
-        /*jobsSheet.bind(GC.Spread.Sheets.Events.CellClick, function (sender, args) {
-            controller.setTreeSelected(null);
-            tools.btnClose($('#insert'), 'focusOnBills');
-            tools.btnAction($('#upMove'), 'focusOnJobs');
-        });*/
-        //add
         mainAjax.getMaxNumber(billsLibId, 'jobs', function(result){
             if(result.length === 0){
                 maxJobsNumber = 0;
@@ -413,12 +441,6 @@
     }
 
     function itemOperation(controller, itemsSheet, callback){
-        //add
-        /*itemsSheet.bind(GC.Spread.Sheets.Events.CellClick, function(sender, args){
-            controller.setTreeSelected(null);
-            tools.btnClose($('#insert'), 'focusOnBills');
-        });*/
-        //add
         mainAjax.getMaxNumber(billsLibId, 'items', function(result){
             if(result.length === 0){
                 maxItemsNumber = 0;
@@ -532,7 +554,8 @@
     function bindPasteRel(sheet, controller, totalJobs, setting){
         sheetDatas = tools.getsheetDatas(sheet, 'jobs');
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
-            sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+          //  sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+           // sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
             if(controller.tree.selected){
                 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;
@@ -587,7 +610,8 @@
     function bindPasteItemsRel(sheet, controller, totalItems, setting){
         sheetItemsDatas = tools.getsheetDatas(sheet, 'items');
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
-            sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+            //sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+           // sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
             if(controller.tree.selected){
                 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;
@@ -644,16 +668,18 @@
 
 
     function buildJobs(jobsSpread, setting){
-        setSheet.initSheet(jobsSpread, setting, false);
+        setSheet.initSheet(jobsSpread, setting, true);
        // setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
+        jobsSpread.getActiveSheet().clearSelection();
         myKey.downKey(jobsSpread);
         myKey.enterKey(jobsSpread);
         TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
     }
 
     function buildItems(itemsSpread, setting){
-        setSheet.initSheet(itemsSpread, setting, false);
+        setSheet.initSheet(itemsSpread, setting, true);
        // setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
+        itemsSpread.getActiveSheet().clearSelection();
         myKey.downKey(itemsSpread);
         myKey.enterKey(itemsSpread);
         TREE_SHEET_HELPER.loadSheetHeader(itemsSetting, itemsSpread.getActiveSheet());

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

@@ -203,7 +203,7 @@
             buildEigenvalue(spreadVal, eigenValueSetting);
   		});
         function buildAllItems(spread, setting){
-            setSheet.initSheet(spread, setting, false);
+            setSheet.initSheet(spread, setting, true);
             myKey.downKey(spread);
             myKey.enterKey(spread);
             TREE_SHEET_HELPER.loadSheetHeader(setting, spread.getActiveSheet());
@@ -371,11 +371,7 @@
                         }
                     }
                 }
-                console.log(`pasteDatas`);
-                console.log(pasteDatas);
                 let uniqDatas = tools.uniqObjArr(pasteDatas);
-                console.log(`uniqDatas`);
-                console.log(uniqDatas);
                 for(let i=0; i< uniqDatas.length; i++){
                     let crossedData;
                     let flag = true;
@@ -403,8 +399,6 @@
                 let encapDatas = tools.encapValues(sheet, totalItems, uncrossedDatas, crossedDatas);
                 if(encapDatas.updateDatas.length > 0 || encapDatas.createDatas.length > 0){
                     itemsAjax.pasteValues(encapDatas, function(datas){
-                        console.log(datas);
-                        console.log(`enterCb`);
                         pasteController.pasteValueFront(sheet, totalItems, datas);
                     });
                 }

+ 11 - 0
web/maintain/bills_lib/scripts/bills_lib_ajax.js

@@ -273,6 +273,17 @@ var billsAjax = {
             }
         });
     },
+    removeTotal: function (billsLibId, billsIds, delIds, field) {
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/removeTotal',
+            data: {data: JSON.stringify({billsLibId: billsLibId, billsIds: billsIds, delIds: delIds, field: field})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        })
+    },
     updateBillsArr: function(billsLibId, updateId, orgId, newId, type, classify, callback){
         $.ajax({
             type: 'post',

+ 1 - 1
web/maintain/bills_lib/scripts/bills_lib_setting.js

@@ -74,7 +74,7 @@ var billsLibSetting = {
     ],
     headRows: 1,
     headRowHeight: [47],
-    emptyRows: 3,
+    emptyRows: 0,
     treeCol: 0
 };
 

+ 72 - 59
web/maintain/bills_lib/scripts/db_controller.js

@@ -3,7 +3,7 @@
  */
 var dbController = {
     insert: function(controller, btn){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         if(controller.tree.items.length === 0){
             controller.tree.maxNodeID(0);
             let newNodeId = controller.tree.newNodeID();
@@ -12,7 +12,7 @@ var dbController = {
                 controller.tree.selected.jobs = new Array();
                 controller.tree.selected.items = new Array();
                 controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
-                tools.btnAction(btn, 'focusOnBills');
+                tools.btnAction(btn, 'doing');
             });
         }
         else {
@@ -27,7 +27,7 @@ var dbController = {
                     controller.tree.selected.items = new Array();
                     controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn, 'focusOnBills');
+                     tools.btnAction(btn, 'doing');
                 });
             }
             else {
@@ -41,14 +41,14 @@ var dbController = {
                     controller.tree.selected.items = new Array();
                     controller.sheet.setTag(controller.tree.selected.serialNo(), 0, newNodeId);
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn, 'focusOnBills');
+                    tools.btnAction(btn, 'doing');
                 });
             }
         }
     },
 
     upLevel: function(controller, btn){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         var node = controller.tree.selected;
         var ids = [];
         var updateData = [];
@@ -94,9 +94,9 @@ var dbController = {
                 }
                 billsAjax.upLevel(billsLibId, updateData, function(){
                     console.log(`enter upL`);
+                    tools.btnAction(btn, 'doing');
                     controller.upLevel();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn, 'focusOnBills');
                 });
                 //rechargeController.createRecharge(controller.tree.selected);
             }
@@ -104,7 +104,7 @@ var dbController = {
     },
 
     downLevel: function(controller, btn){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -131,9 +131,9 @@ var dbController = {
                     updateData.push(updateC);
                 }
                 billsAjax.downLevel(billsLibId, updateData, function(){
+                    tools.btnAction(btn, 'doing');
                     controller.downLevel();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn, 'focusOnBills');
                 });
                 //rechargeController.createRecharge(controller.tree.selected);
             }
@@ -141,7 +141,7 @@ var dbController = {
     },
 
     delete: function(controller, btn, totalJobs, totalItems){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         var node = controller.tree.selected;
         if(node){
             var deleteIds = [];
@@ -159,6 +159,7 @@ var dbController = {
             getDeleteIds(node);
             let updateNode = node.preSibling ? {ID: node.preSibling.getID(), NextSiblingID: node.getNextSiblingID()} : null;
             billsAjax.deleteBills(billsLibId, deleteIds, updateNode, function(){
+                tools.btnAction(btn, 'doing');
                 controller.delete();
                 //to solve refresh after deleted
                 let jobsSheet = jobsSpread.getActiveSheet();
@@ -187,14 +188,13 @@ var dbController = {
                 sheetDatas = tools.getsheetDatas(jobsSheet, 'jobs');
                 sheetItemsDatas = tools.getsheetDatas(itemsSheet, 'items');
                 sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                tools.btnAction(btn, 'focusOnBills');
                 //to solve refresh after deleted
             });
         }
     },
 
     upMove: function(controller, btn){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -217,16 +217,16 @@ var dbController = {
                     updateData.push(updateC);
                 }
                 billsAjax.upMove(billsLibId, updateData, function(){
+                    tools.btnAction(btn, 'doing');
                     controller.upMove();
                     sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                    tools.btnAction(btn, 'focusOnBills');
                 });
             }
         }
     },
 
     downMove: function(controller, btn){
-        tools.btnClose(btn, 'focusOnBills');
+        tools.btnClose(btn, 'doing');
         var node = controller.tree.selected;
         var updateData = [];
         if(node){
@@ -252,9 +252,9 @@ var dbController = {
                     updateData.push(updateC);
                 }
                 billsAjax.downMove(billsLibId, updateData);
+                tools.btnAction(btn, 'doing');
                 controller.downMove();
                 sheetBillsDatas = tools.getsheetDatas(controller.sheet, 'bills', controller);
-                tools.btnAction(btn, 'focusOnBills');
             }
         }
     },
@@ -269,7 +269,6 @@ var dbController = {
                         field = col.data.field;
                         node.data[field] = args.editingText;
                         sheetBillsDatas.datasIdx['rowIdx'+ args.row][field] = args.editingText;
-                        console.log(sheetBillsDatas);
                     }
                 });
                 billsAjax.updateBills(billsLibId, updateId, field, args.editingText);
@@ -313,16 +312,6 @@ var createObj = {
             if(nodes){
                 nodes.forEach(function(node){
                     node.jobs = new Array();
-                    /*node.data.jobs.forEach(function(jobId){
-                        if(me.jobs[me.prefix + jobId]){
-                            node.jobs.push(me.jobs[me.prefix + jobId]);
-                            me.jobs[me.prefix + jobId].count ++;
-                        }
-                        else {
-                            node.data.jobs.splice(node.data.jobs.indexOf(jobId), 1);
-                        }
-                    });*/
-                    //update
                     node.data.jobs.forEach(function(obj){
                         if(me.jobs[me.prefix + obj.id]){
                             node.jobs.push({job: me.jobs[me.prefix + obj.id], serialNo: obj.serialNo});
@@ -380,15 +369,6 @@ var createObj = {
             if(nodes){
                 nodes.forEach(function(node){
                     node.items = new Array();
-                    /*node.data.items.forEach(function(itemID){
-                        if(me.items[me.prefix + itemID]){
-                            node.items.push(me.items[me.prefix + itemID]);
-                            me.items[me.prefix + itemID].count ++;
-                        }
-                        else {
-                            node.data.items.splice(node.data.items.indexOf(itemID), 1);
-                        }
-                    });*/
                     node.data.items.forEach(function(obj){
                         if(me.items[me.prefix + obj.id]){
                             node.items.push({item: me.items[me.prefix + obj.id], serialNo: obj.serialNo});
@@ -418,15 +398,22 @@ var createObj = {
 };
 
 var tools = {
-    btnClose: function (btn, attr) {
+    //ref sheet up&down Move
+    canUpMove: function (selected, arr) {
+        return selected && arr.indexOf(selected) > 0 && arr.indexOf(selected) !== -1 ? true: false;
+    },
+    canDownMove: function (selected, arr) {
+        return selected && arr.indexOf(selected) < arr.length -1 && arr.indexOf(selected) !== -1 ? true: false;
+    },
+    btnClose: function (btn) {
         btn.css("opacity", "0.2");
         btn.addClass("disabled");
-        btn.attr(attr, true);
+        //btn.attr(attr, 'true');
     },
-    btnAction: function (btn, attr) {
+    btnAction: function (btn) {
         btn.css("opacity", "");
         btn.removeClass("disabled");
-        btn.removeAttr(attr);
+        //btn.attr(attr, 'false');
     },
     isExist: function (totalArr, field, newData, orgData){
         var isExist = false;
@@ -678,8 +665,11 @@ var tools = {
     },
     //update--
     orderReshowData: function(sheet, arr, setting, classify, isResort){
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
         tools.clearData(sheet);
         if(arr.length > 0){
+            sheet.suspendPaint();
             setSheet.setMaxRowCount(sheet, arr);
             if(isResort){
                 tools.resortSerialNo(arr);
@@ -696,15 +686,19 @@ var tools = {
                     }
                 });
             }
+            sheet.resumePaint();
         }
     },
 
     reshowData: function(sheet, arr, setting, isResort){
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
         tools.clearData(sheet);
         if(isResort){
             tools.resort(arr, 'code', false);
         }
         if(arr.length > 0){
+            sheet.suspendPaint();
             var length = arr.length;
             for(var i=0; i<length; i++){
                 setting.cols.forEach(function(col, colIdx){
@@ -717,11 +711,14 @@ var tools = {
                     }
                 });
             }
+            sheet.resumePaint();
         }
     },
 
     reshowValue: function(sheet, arr, setting, isResort){
         tools.clearData(sheet);
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+        sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.colHeader);
         if(isResort){
             //tools.resort(arr, 'code', true);
             function myCompareCode(a, b){
@@ -732,6 +729,7 @@ var tools = {
             arr.sort(myCompareCode);
         }
         if(arr.length > 0){
+            sheet.suspendPaint();
             var length = arr.length;
             for(var i=0; i<length; i++){
                 setting.cols.forEach(function(col, colIdx){
@@ -744,6 +742,7 @@ var tools = {
                     }
                 });
             }
+            sheet.resumePaint();
         }
     },
 
@@ -1102,9 +1101,17 @@ var tools = {
             }
             if(rebuildArr.length > 0){
                 rebuildArr.sort(myCompareCode);
-                maxJobsNumber = maxJobsNumber + 1 > rebuildArr[0].code ? maxJobsNumber  : rebuildArr[0].code;
+                console.log(`rebuiArr`);
+                console.log(rebuildArr);
+                if(rebuildArr[0].code){
+                    maxJobsNumber = maxJobsNumber + 1 > rebuildArr[0].code ? maxJobsNumber  : rebuildArr[0].code;
+                    console.log(`maxJobs`);
+                    console.log(maxJobsNumber);
+                }
                 rebuildArr.forEach(function(data){
                     if(data.type !== 'CreateT' && data.field === 'content' ){
+                        console.log(`!CT&&Content`);
+                        console.log(data);
                         maxJobsNumber++;
                         let code = maxJobsNumber;
                         data.code = code;
@@ -1171,7 +1178,11 @@ var tools = {
             //rebuildArr.sort(myCompare);
             if(rebuildArr.length > 0){
                 rebuildArr.sort(myCompareCode);
-                maxItemsNumber = maxItemsNumber + 1 > rebuildArr[0].code ? maxItemsNumber  : rebuildArr[0].code;
+                if(rebuildArr[0].code){
+                    maxItemsNumber = maxItemsNumber + 1 > rebuildArr[0].code ? maxItemsNumber  : rebuildArr[0].code;
+                    console.log(`maxJobs`);
+                    console.log(maxItemsNumber);
+                }
                 rebuildArr.forEach(function(data){
                     if(data.type !== 'CreateT' && data.field === 'content' ){
                         maxItemsNumber ++;
@@ -1241,10 +1252,10 @@ var tools = {
                 return valB- valA;
             }
             rebuildArr.sort(myCompareCode);
-            console.log(`rebuildArr`);
-            console.log(rebuildArr);
             let newCode = valueController.getCode(totalItems, selectedId);
-            newCode = newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1;
+            if(rebuildArr[0].code){
+                newCode = newCode > rebuildArr[0].code ? newCode : rebuildArr[0].code + 1;
+            }
             for(let i=0; i< rebuildArr.length; i++){
                 rebuildArr[i].itemId = selectedId;
                 if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value'){
@@ -1456,8 +1467,8 @@ let pasteController = {
                     });
                 }
                 if(datas[i].type === CreateT){
-                    maxJobsNumber++;
-                    maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
+                    //maxJobsNumber++;
+                   // maxJobsNumber = maxJobsNumber >= datas[i].code ? maxJobsNumber : datas[i].code;
                     newJobData = {id: datas[i].newJobId, content: datas[i].content, code: datas[i].code};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
@@ -1468,8 +1479,8 @@ let pasteController = {
                     totalJobs.jobsArr.push(newJob);
                 }
                 if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){
-                    maxJobsNumber++;
-                    maxJobsNumber = maxJobsNumber >= datas[i].data  ? maxJobsNumber : datas[i].data;
+                  //  maxJobsNumber++;
+                   // maxJobsNumber = maxJobsNumber >= datas[i].data  ? maxJobsNumber : datas[i].data;
                     newJobData = {id: datas[i].newJobId, content: '', code: datas[i].data};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
@@ -1480,7 +1491,6 @@ let pasteController = {
         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++){
@@ -1493,8 +1503,8 @@ let pasteController = {
                     });
                 }
                 if(datas[i].type === CreateT){
-                    maxItemsNumber++;
-                    maxItemsNumber = maxItemsNumber >= datas[i].code ? maxItemsNumber : datas[i].code;
+                    //maxItemsNumber++;
+                    //maxItemsNumber = maxItemsNumber >= datas[i].code ? maxItemsNumber : datas[i].code;
                     newItemData = {id: datas[i].newItemId, content: datas[i].content, code: datas[i].code};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
@@ -1507,8 +1517,8 @@ let pasteController = {
                     totalItems.items[totalItems.prefix + datas[i].newItemId] = newItem;
                 }
                 if(datas[i].type !== 'CreateT' && datas[i].field === 'code'){
-                    maxItemsNumber++;
-                    maxItemsNumber = maxItemsNumber >= datas[i].data  ? maxItemsNumber : datas[i].data;
+                    //maxItemsNumber++;
+                    //maxItemsNumber = maxItemsNumber >= datas[i].data  ? maxItemsNumber : datas[i].data;
                     newItemData = {id: datas[i].newItemId, content: '', code: datas[i].data};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
@@ -1625,9 +1635,7 @@ var jobsController = {
             maxJobsNumber++;
             //update--
             let serialNo = tools.getSerialNo(controller.tree.selected.jobs);
-            console.log(`serialNo: ${serialNo}`);
             //--
-            console.log(`billsLibId: ${billsLibId} billsId: ${controller.tree.selected.getID()} content: ${newData} code: ${maxJobsNumber}`);
             jobsAjax.edCreateJob(billsLibId, controller.tree.selected.getID(), newData, maxJobsNumber, serialNo, function(newJobId){
                 var newJobData, newJob;
                 newJobData = {id: newJobId, content: newData, code: maxJobsNumber};
@@ -1636,7 +1644,6 @@ var jobsController = {
                 totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
                 totalJobs.jobsArr.push(newJob);
                 controller.tree.selected.jobs.push({job: newJob, serialNo: serialNo});//update--
-                //tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);//update--
                 tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true)//update--
             });
         }
@@ -2031,6 +2038,8 @@ var totalJobsController = {
 
     createJob: function(sheet, totalJobs, field, newData, args){
         if(field === 'content'){
+            console.log(`editMaJ`);
+            console.log(maxJobsNumber);
             maxJobsNumber++;
             let code = maxJobsNumber;
             jobsAjax.createJobContent(billsLibId, newData, code, function(newJobId){
@@ -2038,7 +2047,8 @@ var totalJobsController = {
                 newJobData = {id: newJobId, content: newData, code: code};
                 newJob = createObj.newJob(newJobData);
                 totalJobs.jobsArr.push(newJob);
-                tools.reSetCell(sheet, args.row, 0, code, newJobId);
+                //tools.reSetCell(sheet, args.row, 0, code, newJobId);
+                tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
                 setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
             });
         }
@@ -2050,7 +2060,8 @@ var totalJobsController = {
                     newJobData = {id: newJobId, content: '', code: newData};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
-                    tools.reSetCell(sheet, args.row, 0, null, newJobId);
+                    //tools.reSetCell(sheet, args.row, 0, null, newJobId);
+                    tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
                     setSheet.setMaxRowCount(sheet, totalJobs.jobsArr);
                 });
             }
@@ -2117,7 +2128,8 @@ var totalItemsController = {
                 newItem = createObj.newItem(newItemData);
                 totalItems.itemsArr.push(newItem);
                 totalItems.items[totalItems.prefix + newItemId] = newItem;
-                tools.reSetCell(sheet, args.row, 0, code, newItemId);
+                //tools.reSetCell(sheet, args.row, 0, code, newItemId);
+                tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
                 setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
             });
         }
@@ -2130,7 +2142,8 @@ var totalItemsController = {
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
                     totalItems.items[totalItems.prefix + newItemId] = newItem;
-                    tools.reSetCell(sheet, args.row, 0, null, newItemId);
+                    //tools.reSetCell(sheet, args.row, 0, null, newItemId);
+                    tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
                     setSheet.setMaxRowCount(sheet, totalItems.itemsArr);
                 });
             }

+ 6 - 10
web/maintain/bills_lib/scripts/set_sheets.js

@@ -64,11 +64,10 @@ var myKey = {
             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");
+                sheet.getRange(rowCount, -1, 1, -1).font("Arial");
             }
         });
         spread.commandManager().setShortcutKey("myEnter", GC.Spread.Commands.Key.enter, false, false, false, false);
@@ -82,11 +81,10 @@ var myKey = {
             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.getRange(rowCount, -1, 1, -1).font("Arial");
                 sheet.resumePaint();
             }
         });
@@ -177,10 +175,9 @@ var myKey = {
                         return valB- valA;
                     }
                     totalJobs.jobsArr.sort(myCompareCode);
-                    maxJobsNumber = totalJobs.jobsArr[0].data.code;
+                    maxJobsNumber = totalJobs.jobsArr.length > 0 ? totalJobs.jobsArr[0].data.code : 0;
                     tools.reshowData(sheet, totalJobs.jobsArr, setting, true);
-                    jobsAjax.deleteJobContent(billsLibId, ids);
-                    billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'jobs');
+                    billsAjax.removeTotal(billsLibId, billsIds, ids, 'jobs');
                 }
                 spread.resumeEvent();
             });
@@ -204,10 +201,9 @@ var myKey = {
                         return valB- valA;
                     }
                     totalItems.itemsArr.sort(myCompareCode);
-                    maxItemsNumber = totalItems.itemsArr[0].data.code;
+                    maxItemsNumber = totalItems.itemsArr.length > 0 ? totalItems.itemsArr[0].code : 0;
                     tools.reshowData(sheet, totalItems.itemsArr, setting, true);
-                    itemsAjax.deleteItemCharacter(billsLibId, ids);
-                    billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'items');
+                    billsAjax.removeTotal(billsLibId, billsIds, ids, 'items');
                     //reshowVal
                     if(totalItems.itemsArr.length > 0){
                         selectedId = totalItems.itemsArr[0].data.id;

+ 0 - 8
web/maintain/ration_repository/dinge.html

@@ -501,14 +501,6 @@
                 }
             };
             $(document).ready(function(){
-                /*function round(v,e){
-                    var t=1;
-                    for(;e>0;t*=10,e--);
-                    for(;e<0;t/=10,e++);
-                    return Math.round(v*t)/t;
-                }
-                let a = 10.003, b = 20;
-                console.log(a+b);*/
                 pageOprObj.initPage();
                 rationOprObj.buildSheet($("#rationItemsSheet")[0]);
                 sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);

+ 1 - 1
web/maintain/ration_repository/gongliao.html

@@ -180,7 +180,7 @@
                     </button>
                 </div>
                 <div class="modal-body">
-                    <h5 class="text-danger">还有值未输入,确认是否取消新增工料机?</h5>
+                    <h5 class="text-danger">编号和类型不可为空!是否取消操作?</h5>
                 </div>
                 <div class="modal-footer">
                     <button type="button" class="btn btn-secondary" id="aleCanceBtn" data-dismiss="modal">取消</button>

+ 0 - 2
web/maintain/ration_repository/js/ration.js

@@ -61,8 +61,6 @@ var rationOprObj = {
 
         if(!(args.sheetArea === GC.Spread.Sheets.SheetArea.colHeader || args.sheetArea === GC.Spread.Sheets.SheetArea.corner)){
             var cacheSection = me.getCache();
-            console.log(`cache`);
-            console.log(cacheSection);
             if (cacheSection && args.row < cacheSection.length) {
                 rationGLJOprObj.getGljItems(cacheSection[args.row]);
                 rationCoeOprObj.getCoeItems(cacheSection[args.row]);

+ 0 - 4
web/maintain/ration_repository/js/ration_glj.js

@@ -281,10 +281,6 @@ var rationGLJOprObj = {
             me.currentRationItem.machinePrice = price.machinePrice;
             me.currentRationItem.basePrice = price.rationBasePrc;
             updateArr.push(me.currentRationItem);
-            console.log(`me.cache`);
-            console.log(me.cache['_GLJ_' + me.currentRationItem.ID]);
-            console.log(`updateArr`);
-            console.log(updateArr);
             rationOprObj.mixUpdateRequest(updateArr, [], []);
         }
     },

+ 171 - 44
web/maintain/ration_repository/js/repository_glj.js

@@ -21,6 +21,7 @@ var pageOprObj = {
             $("#rationname")[0].outerHTML = html;
             me.rationLibName = rationLibName;
             repositoryGljObj.buildSheet(container);
+            repositoryGljObj.getRationGljIds(rationLibId);
             repositoryGljObj.getGljDistType(function () {
                 repositoryGljObj.currentRepositoryId = parseInt(rationLibId);
                 repositoryGljObj.getGljTree(rationLibId);
@@ -232,7 +233,14 @@ var pageOprObj = {
                          me.workBook.getSheet(0).options.isProtected = false;
                          me.addGljObj = null;
                          for(let col=0; col<me.setting.header.length; col++){
-                             me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value('');
+                             let field = me.setting.header[col].dataCode;
+                             if(field === 'gljType'){
+                                 me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value(
+                                     me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj[field]].data.fullName);
+                             }
+                             else{
+                                 me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value(me.currentEditingGlj[me.setting.header[col].dataCode]);
+                             }
                          }
                          me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, 0);
                      });
@@ -241,9 +249,11 @@ var pageOprObj = {
          }
      },
     onCellEditStart: function(sender, args) {
+        console.log(`enterEditStart`);
         var me = repositoryGljObj;
         var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingGlj = rObj;
+        console.log(me.currentEditingGlj);
         me.orgCode = me.workBook.getSheet(0).getValue(args.row, 0);
         var cacheSection = me.gljList;
         if (cacheSection) {
@@ -259,20 +269,27 @@ var pageOprObj = {
     onCellEditEnd: function(sender, args) {
         var me = repositoryGljObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row, me),
             updateArr = [], addArr = [];
+        console.log(`me.currentE`);
+        console.log(me.currentEditingGlj);
         me.editingRowIdx = args.row;
+        console.log(`editEnd_obj`);
+        console.log(rObj);
         if (me.currentEditingGlj["ID"]) {
             rObj["ID"] = me.currentEditingGlj["ID"];
             rObj.gljClass = me.currentEditingGlj.gljClass;
             for(let col =0; col< me.setting.header.length; col++){
                 if(me.currentEditingGlj[me.setting.header[col].dataCode] !== rObj[me.setting.header[col].dataCode]){
-                    updateArr.push(rObj);
-                    break;
+                    me.addGljObj = rObj;
+                    if(rObj[me.setting.header[0].dataCode] && rObj[me.setting.header[5].dataCode]){
+                        updateArr.push(rObj);
+                        break;
+                    }
                 }
             }
-            //update basePrice of ration when editting basePrice of glj
             if(me.currentEditingGlj.basePrice !== rObj.basePrice){
-                let gljTypeParent = me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj.gljType],
-                    gljType = -1;
+                //update basePrice of ration when editting basePrice of glj
+                let gljType = -1;
+                let gljTypeParent = me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj.gljType].parent;
                 if(gljTypeParent && gljTypeParent.data.ID <=3){
                     gljType = gljTypeParent.data.ID;
                 }
@@ -281,9 +298,14 @@ var pageOprObj = {
                 }
                 let gljBasePrcObj = {gljId: me.currentEditingGlj.ID, gljType: gljType, basePrice: rObj.basePrice};
                 if(gljBasePrcObj.gljType !== -1){
-                    //me.updateRationBasePrcRq(gljBasePrcObj);
+                    me.updateRationBasePrcRq(gljBasePrcObj);
                 }
             }
+            //update basePrice of ration when editting gljType of glj
+            if(me.currentEditingGlj.gljType !== rObj.gljType){
+               let gljTypeObj = {gljId: me.currentEditingGlj.ID, gljType: rObj.gljType, basePrice: rObj.basePrice};
+                me.updateRationBasePrcRq(gljTypeObj);
+            }
         } else {
             me.addGljObj = rObj;
             let isCanSav = true;
@@ -298,41 +320,130 @@ var pageOprObj = {
         if(me.gljCurTypeId !== 1){
             rObj.gljClass = me.gljCurTypeId;
         }
-        me.currentEditingGlj = null;
         if(updateArr.length >0 || addArr.length >0){
-           me.mixUpdateRequest(updateArr, addArr, []);
-        }
-    },
-    onRangeChanged: function(sender, args) {
-        if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
-            var me = repositoryGljObj, updateArr = [], removeArr = [];
-            var cacheSection = me.currentCache;
-            if (cacheSection) {
-                for (var i = 0; i < args.rowCount; i++) {
-                    var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
-                        isEmpty = sheetCommonObj.chkIfEmpty(rObj, me.setting);
-                    for (var j = 0; j < cacheSection.length; j++) {
-                        if (cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
-                            rObj["ID"] = cacheSection[j]["ID"];
-                            hasUpdate = true;
-                            break;
-                        }
-                    }
-                    if (hasUpdate) {
-                        if (isEmpty) {
-                            removeArr.push(rObj["ID"]);
-                        } else updateArr.push(rObj);
-                    } else if (isEmpty) {
-                        if (args.row + i < cacheSection.length) {
-                            rObj["ID"] = cacheSection[args.row + i]["ID"];
-                            removeArr.push(rObj["ID"]);
-                        }
-                    }
-                }
-                me.mixUpdateRequest(updateArr, [], removeArr);
-            }
+            me.currentEditingGlj = null;
+            me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
+     onRangeChanged: function(sender, args) {
+         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
+             var me = repositoryGljObj, updateArr = [], removeArr = [], cancelArr = [], isMisCode = true;
+             var cacheSection = me.currentCache;
+             if (cacheSection) {
+                 for (var i = 0; i < args.rowCount; i++) {
+                     var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
+                         isEmpty = sheetCommonObj.chkIfEmpty(rObj, me.setting);
+                     if(isEmpty){
+                         if(args.row + i < cacheSection.length){
+                             rObj.ID = cacheSection[args.row + i].ID
+                             removeArr.push(rObj.ID);
+                         }
+                     }
+                     else {
+                         if(!rObj.code){
+                             cancelArr.push(args.row + i);
+                         }
+                         else if(!rObj.gljType){
+                             isMisCode = false;
+                             cancelArr.push(args.row + i);
+                         }
+                         else{
+                             rObj.gljClass = me.gljCurTypeId;
+                             updateArr.push(rObj);
+                         }
+                     }
+                 }
+                 //reshow datas
+                 function resetDatas(args, repositoryGljObj, cancelArr){
+                     args.sheet.options.isProtected = false;
+                     args.sheet.suspendPaint();
+                     for(let i =0; i <cancelArr.length; i++){
+                         for(let col =args.col; col< repositoryGljObj.setting.header.length; col++){
+                             let value = repositoryGljObj.setting.header[col].dataCode === 'gljType' ?
+                                 repositoryGljObj.distTypeTree.distTypes[repositoryGljObj.distTypeTree.prefix + cacheSection[cancelArr[i]].gljType].data.fullName :
+                                 cacheSection[cancelArr[i]][repositoryGljObj.setting.header[col].dataCode];
+                             args.sheet.setValue(args.row + i, col, value);
+                         }
+                     }
+                     args.sheet.resumePaint();
+                     args.sheet.setActiveCell(args.row, 0);
+                 }
+                 if(cancelArr.length > 0){
+                     let text = isMisCode === true ? "编号不可为空,编辑失败!": "类型不可为空,编辑失败!"
+                     $('#alertText').text(text);
+                     $('#codeAlertBtn').click();
+                     args.sheet.options.isProtected = true;
+                     $('#codAleConfBtn').click(function () {
+                         resetDatas(args, me, cancelArr);
+                     });
+                     $('#codAleClose').click(function () {
+                         resetDatas(args, me, cancelArr);
+                     });
+                 }
+                 let refGljIds = [], refGljCodes = [], alertText;
+                 if(removeArr.length > 0){
+                     for(let i =0; i <removeArr.length; i++){
+                         if(me.rationGljIds.indexOf(removeArr[i]) !== -1){
+                             refGljIds.push(removeArr[i]);
+                             removeArr.splice(i--, 1);
+                         }
+                     }
+                     for(let i =0; i< me.currentCache.length; i++){
+                         for(let j=0; j< refGljIds.length; j++){
+                             if(me.currentCache[i].ID === refGljIds[j]){
+                                 refGljCodes.push(me.currentCache[i].code);
+                             }
+                         }
+                     }
+                 }
+                 if(refGljIds.length > 0){
+                     if(refGljCodes.length > 3){
+                         alertText = "编号:" + refGljCodes[0]+" " + refGljCodes[1] + " " + refGljCodes[2] + "...等工料机已有定额引用,删除失败!";
+                     }
+                     else {
+                         let alertCode = " ";
+                         for(let i=0; i< refGljCodes.length; i++){
+                             alertCode += refGljCodes[i] + " ";
+                         }
+                         alertText = "编号:" + alertCode + "工料机已有定额引用,删除失败!"
+                     }
+                     $('#alertText').text(alertText);
+                     $('#codeAlertBtn').click();
+                     args.sheet.options.isProtected = true;
+                     $('#codAleConfBtn').click(function () {
+                         if(removeArr.length > 0){
+                             me.mixUpdateRequest(updateArr, [], removeArr);
+                         }
+                         else{
+                             let resetArr = [];
+                             for(let i=0; i<args.rowCount; i++){
+                                 resetArr.push(args.row + i);
+                             }
+                             resetDatas(args, me, resetArr);
+                         }
+                     });
+                     $('#codAleClose').click(function () {
+                         if(removeArr.length > 0){
+                             me.mixUpdateRequest(updateArr, [], removeArr);
+                         }
+                         else{
+                             let resetArr = [];
+                             for(let i=0; i<args.rowCount; i++){
+                                 resetArr.push(args.row + i);
+                             }
+                             resetDatas(args, me, resetArr);
+                         }
+                     });
+                 }
+                 else if(refGljIds.length === 0 && removeArr.length > 0){
+                     me.mixUpdateRequest(updateArr, [], removeArr);
+                 }
+                 if(updateArr.length > 0){
+                     me.mixUpdateRequest(updateArr, [], removeArr);
+                 }
+             }
+         }
+     },
     onClipboardPasting: function(sender, args) {
         var me = repositoryGljObj;
         if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
@@ -363,17 +474,33 @@ var pageOprObj = {
             me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
-    updateRationBasePrcRq: function (gljBasePrcObj) {
+    updateRationBasePrcRq: function (gljObj) {
         $.ajax({
             type: 'post',
             url: 'api/updateRationBasePrc',
-            data:{data: JSON.stringify({gljId: gljBasePrcObj.gljId, basePrice: gljBasePrcObj.basePrice})},
+            data:{data: JSON.stringify({gljId: gljObj.gljId, basePrice: gljObj.basePrice, gljType: gljObj.gljType})},
             dataType: 'json',
             success: function (result) {
-
+                if(result.error){
+                    alert("计算定额基价失败");
+                }
             }
         });
     },
+    getRationGljIds: function (repId) {
+        let me = repositoryGljObj;
+        $.ajax({
+            type: 'post',
+            url: 'api/getRationGljIds',
+            data: {data: JSON.stringify({repId: repId})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error){
+                    me.rationGljIds = result.data;
+                }
+            }
+        });
+     },
     mixUpdateRequest: function(updateArr, addArr, removeIds) {
         var me = repositoryGljObj;
         $.ajax({
@@ -388,12 +515,11 @@ var pageOprObj = {
                     alert(result.message);
                     me.getRationItems(me.currentRepositoryId);
                 } else {
+                    console.log(`enterSc`);
                     me.updateCache(addArr, updateArr, removeIds, result);
                     me.sortGlj();
                     me.currentCache = me.getCache();
                     me.showGljItems(me.gljList, me.gljCurTypeId);
-                    console.log(`me.cC`);
-                    console.log(me.currentCache);
                 }
             },
             error:function(err){
@@ -464,6 +590,7 @@ var gljTypeTreeOprObj = {
         me.gljCurTypeId = treeNode.ID;
         me.currentCache = me.getCache();
         me.showGljItems(me.gljList, gljTypeId);
+        console.log(me.gljCurTypeId);
         if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
             sheetCommonObj.lockCodeCells(me.workBook.getSheet(0), me.gljList.length);
             //sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);