Selaa lähdekoodia

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

TonyKang 8 vuotta sitten
vanhempi
commit
bff7828cea

+ 51 - 28
modules/bills_lib/controllers/bills_lib_controllers.js

@@ -2,164 +2,187 @@
  * Created by vian on 2017/3/22.
  */
 
-var billsLibDao = require("./../models/bills_lib_interfaces");
+let billsLibDao = require("./../models/bills_lib_interfaces");
 //----
-var model = require("./../models/bills_lib_model");
+/*let model = require("./../models/bills_lib_model");
 var counter = require("../../../public/counter/counter");
 var StdBillsLib = model.stdBillsLibMod;
 var Bills = model.billsMod;
 var JobContent = model.jobContentMod;
-var ItemCharacter = model.itemCharacterMod;
+var ItemCharacter = model.itemCharacterMod;*/
 //---
 //ͳһ�ص�����
-var callback = function(req, res, err, message, data){
+let callback = function(req, res, err, message, data){
     res.json({error: err, message: message, data: data});
 }
 
 module.exports = {
     getMaxNumber: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getMaxNumber(data, function(err, message, maxNumber){
             callback(req, res, err, message, maxNumber);
         });
     },
     getABillsLib: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getABillsLib(data, function(err, message, data){
             callback(req, res, err, message, data);
         });
     },
     getStdBillsLib: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getStdBillsLib(data, function(err, message, stdBillsLib){
             callback(req, res, err, message, stdBillsLib );
         });
     },
     createStdBillsLib: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
          billsLibDao.createStdBillsLib(data, function(err, message, info){
             callback(req, res, err, message, info);
          });
     },
     deleteStdBillsLib: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.deleteStdBillsLib(data.billsLibId, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     renameStdBillsLib: function(req, res) {
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.renameStdBillsLib(data, function (err, message) {
             callback(req, res, err ,message, null);
         });
     },
     getStdBillsLibName: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getStdBillsLibName(data.billsLibId, function(err, message, info){
             callback(req, res, err, message, info);
         });
     },
+    getCurrentUniqId: function(req, res){
+        billsLibDao.getCurrentUniqId(function(err, message, id){
+            callback(req, res, err, message, id);
+        });
+    },
     getBills: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getBills(data.billsLibId, function(err, message, bills){
             callback(req, res, err, message, bills);
         });
     },
     createBills: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.createBills(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     updatePNId: function (req, res) {
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updatePNId(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     updateBills: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateBills(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     updateBillsArr: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateBillsArr(data, function(err, message){
            callback(req, res, err, message, null);
         });
     },
     pasteBills: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.pasteBills(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     updateRecharge: function(req, res){
-      var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateRecharge(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
+    pasteRel: function(req, res){
+        let data = JSON.parse(req.body.data);
+        billsLibDao.pasteRel(data, function(err, message, datas){
+            callback(req, res, err, message, datas);
+        });
+    },
     deleteBills: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.deleteBills(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     getJobContent: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getJobContent(data, function(err, message, jobs){
             callback(req, res, err, message, jobs);
         });
     },
     createJobContent: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.createJobContent(data, function(err, message, id){
             callback(req, res, err, message, id);
         });
     },
     updateJobContent: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateJobContent(data, function(err, message, id){
             callback(req, res, err, message, id);
         });
     },
     updateValue: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateValue(data, function(err, message){
             callback(req, res, err, message, null);
         })
     },
     deleteJobContent: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.deleteJobContent(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
+    pasteJobs: function (req, res) {
+        let data = JSON.parse(req.body.data);
+        billsLibDao.pasteJobs(data, function(err, message){
+            callback(req, res, err, message, null);
+        });
+    },
     getItemCharacter: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.getItemCharacter(data, function(err, message, items){
             callback(req, res, err, message, items);
         });
     },
     createItemCharacter: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.createItemCharacter(data, function(err, message, id){
             callback(req, res, err, message, id);
         });
     },
     updateItemCharacter: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.updateItemCharacter(data, function(err, message){
             callback(req, res, err, message, null);
         });
     },
     deleteItemCharacter: function(req, res){
-        var data = JSON.parse(req.body.data);
+        let data = JSON.parse(req.body.data);
         billsLibDao.deleteItemCharacter(data, function(err, message){
             callback(req, res, err, message, null);
         });
+    },
+    pasteItems: function(req, res){
+        let data = JSON.parse(req.body.data);
+        billsLibDao.pasteItems(data, function(err, message){
+            callback(req, res, err, message, null);
+        });
     }
 
 }

+ 478 - 124
modules/bills_lib/models/bills_lib_interfaces.js

@@ -1,20 +1,20 @@
 /**
  * Created by vian on 2017/3/20.
  */
-var model = require("./bills_lib_model");
-var counter = require("../../../public/counter/counter");
-var StdBillsLib = model.stdBillsLibMod;
-var Bills = model.billsMod;
-var JobContent = model.jobContentMod;
-var ItemCharacter = model.itemCharacterMod;
+let model = require("./bills_lib_model");
+let counter = require("../../../public/counter/counter");
+let StdBillsLib = model.stdBillsLibMod;
+let Bills = model.billsMod;
+let JobContent = model.jobContentMod;
+let ItemCharacter = model.itemCharacterMod;
 
-var fieldArr = ["code", "name", "unit", "ruleText", "Expression"];
+/*var fieldArr = ["code", "name", "unit", "ruleText", "Expression"];*/
 
-var billsLibDao = function(){};
+let billsLibDao = function(){};
 
 billsLibDao.prototype.getMaxNumber = function(gData, callback){
-    var billsLibId = gData.billsLibId;
-    var field = gData.field;
+    let billsLibId = gData.billsLibId;
+    let field = gData.field;
     if(field === 'jobs'){
         JobContent.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
             if(err){
@@ -38,7 +38,7 @@ billsLibDao.prototype.getMaxNumber = function(gData, callback){
 };
 //----------StdBillsLib-------------------
 billsLibDao.prototype.getABillsLib = function(data, callback){
-    var billsLibId = data.billsLibId;
+    let billsLibId = data.billsLibId;
     StdBillsLib.find({billsLibId: billsLibId, deleted: false}, function(err, data){
         if(err){
             callback(1, 'Error', null);
@@ -50,7 +50,7 @@ billsLibDao.prototype.getABillsLib = function(data, callback){
 };
 
 billsLibDao.prototype.getStdBillsLib = function(data, callback){
-    var userId = data.userId;
+    let userId = data.userId;
     StdBillsLib.find({userId: userId, deleted: false}, "-_id", function(err, data){
         if(err){
             callback(1, "Error", null);
@@ -63,11 +63,11 @@ billsLibDao.prototype.getStdBillsLib = function(data, callback){
 
 billsLibDao.prototype.createStdBillsLib = function(clibData, callback){
     counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
-        var billsLibId = result.value.sequence_value;
-        var userId = clibData.userId;
-        var billsLibName = clibData.name;
-        var createDate = Date.now();
-        var newStdBillsLib = {
+        let billsLibId = result.value.sequence_value;
+        let userId = clibData.userId;
+        let billsLibName = clibData.name;
+        let createDate = Date.now();
+        let newStdBillsLib = {
             userId: userId,
             billsLibId: billsLibId,
             billsLibName: billsLibName,
@@ -104,8 +104,8 @@ billsLibDao.prototype.deleteStdBillsLib = function(billsLibId, callback){
 };
 
 billsLibDao.prototype.renameStdBillsLib = function(renameData, callback){
-    var billsLibId = renameData.id;
-    var renameVal = renameData.value;
+    let billsLibId = renameData.id;
+    let renameVal = renameData.value;
     StdBillsLib.update({billsLibId: billsLibId}, {$set:{billsLibName: renameVal}}, function(err){
         if(err){
             callback(1, "Error");
@@ -125,6 +125,21 @@ billsLibDao.prototype.getStdBillsLibName = function(billsLibId, callback){
             callback(0, "", data);
         }
     });
+};
+
+billsLibDao.prototype.getCurrentUniqId = function(callback){
+    counter.counterDAO.getCurrentID(counter.moduleName.billsLib, function(result, err){
+        let id = result.sequence_value;
+        if(err){
+            console.log(`enter1`);
+            callback(1, 'Error', null);
+        }
+        else{
+            console.log(`enter2: ${result}`);
+            console.log(`enter2-id: ${id}`);
+            callback(0, '', id);
+        }
+    });
 }
 //----------------------------Bills---------------------
 billsLibDao.prototype.getBills = function (billsLibId, callback) {
@@ -139,11 +154,11 @@ billsLibDao.prototype.getBills = function (billsLibId, callback) {
 }
 
 billsLibDao.prototype.createBills = function(cbillsData, callback){
-    var newId = cbillsData.newId;
-    var pid = cbillsData.ParentID;
-    var nid = cbillsData.NextSiblingID;
-    var billsLibId = cbillsData.billsLibId;
-    var newBills = {
+    let newId = cbillsData.newId;
+    let pid = cbillsData.ParentID;
+    let nid = cbillsData.NextSiblingID;
+    let billsLibId = cbillsData.billsLibId;
+    let newBills = {
         ID: newId,
         ParentID: pid,
         NextSiblingID: nid,
@@ -168,9 +183,9 @@ billsLibDao.prototype.createBills = function(cbillsData, callback){
 
 
 billsLibDao.prototype.updatePNId= function(upData, callback){
-    var billsLibId = upData.billsLibId;
-    var updateDatas = upData.updateData;
-    var success = true;
+    let billsLibId = upData.billsLibId;
+    let updateDatas = upData.updateData;
+    let success = true;
     if(updateDatas.length > 0){
         updateDatas.forEach(function(data){
             if(data.ID.length >1){
@@ -235,10 +250,10 @@ billsLibDao.prototype.updatePNId= function(upData, callback){
 }
 
 billsLibDao.prototype.updateBills = function(ubillsData, callback){
-    var billsLibId = ubillsData.billsLibId;
-    var updateId = ubillsData.updateId;
-    var updateField = ubillsData.field;
-    var updateData = ubillsData.data;
+    let billsLibId = ubillsData.billsLibId;
+    let updateId = ubillsData.updateId;
+    let updateField = ubillsData.field;
+    let updateData = ubillsData.data;
     if(updateField === "code"){
         Bills.update({billsLibId: billsLibId, ID: updateId}, {$set: {code: updateData}}, function(err){
             if(err){
@@ -302,13 +317,13 @@ billsLibDao.prototype.updateBills = function(ubillsData, callback){
 }
 
 billsLibDao.prototype.updateBillsArr = function(updateData, callback){
-    var billsLibId = updateData.billsLibId;
-    var updateId = updateData.updateId;
-    var orgId = updateData.orgId;
-    var newId = updateData.newId;
-    var classify = updateData.classify;
-    var type = updateData.type;
-    var success = true;
+    let billsLibId = updateData.billsLibId;
+    let updateId = updateData.updateId;
+    let orgId = updateData.orgId;
+    let newId = updateData.newId;
+    let classify = updateData.classify;
+    let type = updateData.type;
+    let success = true;
     if(classify === 'jobs'){
         if(orgId && newId && type === 'update'){
             Bills.update({billsLibId: billsLibId, ID: updateId, jobs: orgId}, {$set: {'jobs.$': newId}}, function(err){
@@ -377,7 +392,7 @@ billsLibDao.prototype.updateBillsArr = function(updateData, callback){
 };
 
 billsLibDao.prototype.pasteBills = function(pData, callback){
-    var datas = pData.datas;
+    let datas = pData.datas;
     datas.forEach(function(data){
         Bills.update({billsLibId: data.billsLibId, ID: data.ID}, {$set: {code: data.code, name: data.name, unit: data.unit, ruleText: data.ruleText}}, function(err){
             if(err){
@@ -388,10 +403,10 @@ billsLibDao.prototype.pasteBills = function(pData, callback){
 }
 
 billsLibDao.prototype.updateRecharge = function(uData, callback){
-    var billsLibId = uData.billsLibId;
-    var updateIds = uData.updateIds;
-    var data = uData.data;
-    var success = true;
+    let billsLibId = uData.billsLibId;
+    let updateIds = uData.updateIds;
+    let data = uData.data;
+    let success = true;
     updateIds.forEach(function(id){
         Bills.update({billsLibId: billsLibId, ID: id}, {$set: {recharge: data}}, function(err){
             if(err){
@@ -405,10 +420,216 @@ billsLibDao.prototype.updateRecharge = function(uData, callback){
     }
 };
 
+billsLibDao.prototype.pasteRel = function (data, callback) {
+    const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
+    let success = true;
+    let ueDatas = [], unDatas = [], ceDatas = [], cnDatas = [];
+    let frontDatas ;
+    let pasteDatas = data.pasteDatas;
+    let field = data.field;
+    let updateDatas = pasteDatas.updateDatas;
+    let createDatas = pasteDatas.createDatas;
+    const Jobs = 'jobs', Items = 'items';
+    if(field === Jobs){
+        if(updateDatas.length > 0){
+            for(let i=0; i<updateDatas.length; i++){
+                if(updateDatas[i].type === UpdateExist){
+                    let orgJobId = updateDatas[i].orgJobId, newJobId = updateDatas[i].newJobId,
+                        nodeId = updateDatas[i].nodeId, billsLibId = updateDatas[i].billsLibId, newData = updateDatas[i].newData;
+                    if(orgJobId && newJobId && nodeId && billsLibId){
+                        Bills.update({billsLibId: billsLibId, ID: nodeId, jobs: orgJobId}, {$set: {'jobs.$': newJobId}}, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                            }
+                        });
+                    }
+
+                }
+                if(updateDatas[i].type === UpdateNew){
+                    let billsLibId = updateDatas[i].billsLibId, nodeId = updateDatas[i].nodeId, newData = updateDatas[i].newData,
+                        orgJobId = updateDatas[i].orgJobId, code = updateDatas[i].code, id = updateDatas[i].newJobId;
+                    if(billsLibId && nodeId && newData && orgJobId && code && id){
+                        let newJobContent;
+                        newJobContent = {
+                            id: id,
+                            billsLibId: billsLibId,
+                            code: code,
+                            content: newData,
+                            deleted: false
+                        }
+                        JobContent.create(newJobContent, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                                Bills.update({billsLibId: billsLibId, ID: nodeId, jobs: orgJobId}, {$set: {'jobs.$': id}}, function(err){
+                                    if(err){
+                                        success = false;
+                                    }
+                                    else{
+                                    }
+                                });
+                            }
+                        });
+                    }
+
+                }
+            }
+        }
+        if(createDatas.length > 0){
+            for(let i=0; i<createDatas.length; i++){
+                if(createDatas[i].type === CreateExist){
+                    let billsLibId = createDatas[i].billsLibId, newData = createDatas[i].newData,
+                        nodeId = createDatas[i].nodeId, jobId = createDatas[i].jobId;
+                    if(billsLibId && newData && nodeId && jobId){
+                        Bills.update({billsLibId: billsLibId, ID: nodeId}, {$addToSet: {jobs: jobId}}, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else {
+                            }
+                        });
+                    }
+                }
+                if(createDatas[i].type === CreateNew){
+                    let billsLibId = createDatas[i].billsLibId, newData = createDatas[i].newData,
+                        code = createDatas[i].code, nodeId = createDatas[i].nodeId, id = createDatas[i].id;
+                    if(billsLibId && newData && code && id){
+                        let newJobContent;
+                        newJobContent = {
+                            id: id,
+                            billsLibId: billsLibId,
+                            code: code,
+                            content: newData,
+                            deleted: false
+                        }
+                        JobContent.create(newJobContent, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                                Bills.update({billsLibId: billsLibId, ID: nodeId}, {$addToSet: {jobs: id}}, function(err){
+                                    if(err){
+                                        success = false;
+                                    }
+                                    else {
+
+                                    }
+                                });
+                            }
+                        });
+
+                    }
+                }
+            }
+        }
+
+    }
+    if(field === Items){
+        if(updateDatas.length > 0){
+            for(let i=0; i<updateDatas.length; i++){
+                if(updateDatas[i].type === UpdateExist){
+                    let orgItemId = updateDatas[i].orgItemId, newItemId = updateDatas[i].newItemId,
+                        nodeId = updateDatas[i].nodeId, billsLibId = updateDatas[i].billsLibId, newData = updateDatas[i].newData;
+                    if(orgItemId && newItemId && nodeId && billsLibId){
+                        Bills.update({billsLibId: billsLibId, ID: nodeId, items: orgItemId}, {$set: {'items.$': newItemId}}, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                            }
+                        });
+                    }
+
+                }
+                if(updateDatas[i].type === UpdateNew){
+                    let billsLibId = updateDatas[i].billsLibId, nodeId = updateDatas[i].nodeId, newData = updateDatas[i].newData,
+                        orgItemId = updateDatas[i].orgItemId, code = updateDatas[i].code, id = updateDatas[i].newItemId;
+                    if(billsLibId && nodeId && newData && orgItemId && code && id){
+                        let newItemContent;
+                        newItemContent = {
+                            id: id,
+                            billsLibId: billsLibId,
+                            code: code,
+                            content: newData,
+                            deleted: false
+                        }
+                        ItemCharacter.create(newItemContent, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                                Bills.update({billsLibId: billsLibId, ID: nodeId, items: orgItemId}, {$set: {'items.$': id}}, function(err){
+                                    if(err){
+                                        success = false;
+                                    }
+                                    else{
+                                    }
+                                });
+                            }
+                        });
+                    }
+
+                }
+            }
+        }
+        if(createDatas.length > 0){
+            for(let i=0; i<createDatas.length; i++){
+                if(createDatas[i].type === CreateExist){
+                    let billsLibId = createDatas[i].billsLibId, newData = createDatas[i].newData,
+                        nodeId = createDatas[i].nodeId, itemId = createDatas[i].itemId;
+                    if(billsLibId && newData && nodeId && itemId){
+                        Bills.update({billsLibId: billsLibId, ID: nodeId}, {$addToSet: {items: itemId}}, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else {
+                            }
+                        });
+                    }
+                }
+                if(createDatas[i].type === CreateNew){
+                    let billsLibId = createDatas[i].billsLibId, newData = createDatas[i].newData,
+                        code = createDatas[i].code, nodeId = createDatas[i].nodeId, id = createDatas[i].id;
+                    if(billsLibId && newData && code && id){
+                        let newItemContent;
+                        newItemContent = {
+                            id: id,
+                            billsLibId: billsLibId,
+                            code: code,
+                            content: newData,
+                            deleted: false
+                        }
+                        ItemCharacter.create(newItemContent, function(err){
+                            if(err){
+                                success = false;
+                            }
+                            else{
+                                Bills.update({billsLibId: billsLibId, ID: nodeId}, {$addToSet: {items: id}}, function(err){
+                                    if(err){
+                                        success = false;
+                                    }
+                                    else {
+
+                                    }
+                                });
+                            }
+                        });
+
+                    }
+                }
+            }
+        }
+
+    }
+};
+
 billsLibDao.prototype.deleteBills = function(delData, callback){
-    var deleteIds = delData.deleteIds;
-    var billsLibId = delData.billsLibId;
-    var success = true;
+    let deleteIds = delData.deleteIds;
+    let billsLibId = delData.billsLibId;
+    let success = true;
     if(deleteIds){
         deleteIds.forEach(function(delId){
             Bills.update({billsLibId: billsLibId, ID: delId}, {$set: {deleted: true}}, function(err){
@@ -427,7 +648,7 @@ billsLibDao.prototype.deleteBills = function(delData, callback){
 //--------------JobContent------------------
 
 billsLibDao.prototype.getJobContent = function(gJobData, callback){
-    var billsLibId = gJobData.billsLibId;
+    let billsLibId = gJobData.billsLibId;
     JobContent.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
         if(err){
             callback(1, 'Error', null);
@@ -439,37 +660,36 @@ billsLibDao.prototype.getJobContent = function(gJobData, callback){
 }
 
 billsLibDao.prototype.createJobContent = function(cJobData, callback){
-    var field = cJobData.field;
-    var data = cJobData.data;
-    var billsLibId = cJobData.billsLibId;
-    var serialNo = cJobData.serialNo;
-    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
-        var id = result.value.sequence_value;
-        var newJobContent;
-            newJobContent = {
-                id: id,
-                billsLibId: billsLibId,
-                code: serialNo,
-                content: data,
-                deleted: false
-            }
-        JobContent.create(newJobContent, function(err){
-            if(err){
-                callback(1, "Error", null);
-            }
-            else{
-                callback(0, "", id);
-            }
-        });
+    let data = cJobData.data;
+    let billsLibId = cJobData.billsLibId;
+    let serialNo = cJobData.serialNo;
+    let id = cJobData.id;
+    let newJobContent;
+    newJobContent = {
+        id: id,
+        billsLibId: billsLibId,
+        code: serialNo,
+        content: data,
+        deleted: false
+    }
+    JobContent.create(newJobContent, function(err){
+        if(err){
+            callback(1, "Error", null);
+        }
+        else{
+            callback(0, "", id);
+        }
     });
-}
+
+};
 
 billsLibDao.prototype.updateJobContent = function(uJobData, callback){
-    var field = uJobData.field;
-    var updateData = uJobData.data;
-    var updateid = uJobData.updateId;
+    let billsLibId = uJobData.billsLibId;
+    let field = uJobData.field;
+    let updateData = uJobData.data;
+    let updateid = uJobData.updateId;
     if(field == "code"){
-        JobContent.update({id: updateid}, {$set: {code: updateData}}, function(err){
+        JobContent.update({billsLibId: billsLibId, id: updateid}, {$set: {code: updateData}}, function(err){
             if(err){
                 callback(1, "Error");
             }
@@ -479,7 +699,7 @@ billsLibDao.prototype.updateJobContent = function(uJobData, callback){
         });
     }
     else if(field == "content"){
-        JobContent.update({id: updateid}, {$set: {content: updateData}}, function(err){
+        JobContent.update({billsLibId: billsLibId, id: updateid}, {$set: {content: updateData}}, function(err){
             if(err){
                 callback(1, "Error");
             }
@@ -488,18 +708,14 @@ billsLibDao.prototype.updateJobContent = function(uJobData, callback){
             }
         });
     }
-}
+};
 
 billsLibDao.prototype.deleteJobContent = function(data, callback){
-    var delIds = data.ids;
-    var success = true;
+    let delIds = data.ids;
+    let billsLibId = data.billsLibId;
+    let success = true;
     delIds.forEach(function(id){
-        /*JobContent.remove({id: id}, function(err){
-            if(err){
-                callback(1, "Error");
-            }
-        });*/
-        JobContent.update({id: id}, {$set: {deleted: true}}, function(err){
+        JobContent.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
             if(err){
                 success = false;
                 callback(1, 'Error');
@@ -508,10 +724,78 @@ billsLibDao.prototype.deleteJobContent = function(data, callback){
     });
 }
 
+billsLibDao.prototype.pasteJobs = function (data, callback) {
+    let pasteDatas = data.pasteDatas;
+    let updateDatas = pasteDatas.updateDatas,
+        createDatas = pasteDatas.createDatas;
+    if(updateDatas.length > 0){
+        for(let i=0; i<updateDatas.length; i++){
+            let updateId = updateDatas[i].orgId,
+                field = updateDatas[i].field,
+                updateData = updateDatas[i].data, billsLibId = updateDatas[i].billsLibId;
+            if(field === 'code'){
+                JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
+                    if(err){
+
+                    }
+                });
+            }
+            else{
+                JobContent.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
+                    if(err){
 
+                    }
+                });
+            }
+        }
+    }
+    if(createDatas.length > 0){
+        for(let i =0; i<createDatas.length; i++){
+            let billsLibId = createDatas[i].billsLibId, id = createDatas[i].id,
+                code , content;
+            let jobObj;
+
+            if(createDatas[i].type === 'CreateT'){
+                jobObj = {
+                    billsLibId: billsLibId,
+                    id: id,
+                    code: createDatas[i].code,
+                    content: createDatas[i].content,
+                    deleted: false
+                }
+            }
+            else{
+                if(createDatas[i].field === 'code'){
+                    jobObj = {
+                        billsLibId: billsLibId,
+                        id: id,
+                        code: createDatas[i].data,
+                        content: '',
+                        deleted: false
+                    }
+                }
+                else {
+                    jobObj = {
+                        billsLibId: billsLibId,
+                        id: id,
+                        code: createDatas[i].code,
+                        content: createDatas[i].data,
+                        deleted: false
+                    }
+                }
+            }
+            JobContent.create(jobObj, function(err){
+                if(err){
+
+                }
+            });
+        }
+    }
+
+}
 //----------------------ItemCharacter---------------------
 billsLibDao.prototype.getItemCharacter = function(gdata, callback){
-    var billsLibId = gdata.billsLibId;
+    let billsLibId = gdata.billsLibId;
     ItemCharacter.find({billsLibId: billsLibId, deleted: false}, '-_id').sort({code: 1}).exec(function(err, result){
         if(err){
             callback(1, 'Error', null);
@@ -523,37 +807,35 @@ billsLibDao.prototype.getItemCharacter = function(gdata, callback){
 }
 
 billsLibDao.prototype.createItemCharacter = function(cItemData, callback){
-    var field = cItemData.field;
-    var data = cItemData.data;
-    var billsLibId = cItemData.billsLibId;
-    var serialNo = cItemData.serialNo;
-    var newItemCharacter;
-    counter.counterDAO.getIDAfterCount(counter.moduleName.billsLib, 1, function(err, result){
-        var id = result.value.sequence_value;
-            newItemCharacter = {
-                id: id,
-                billsLibId: billsLibId,
-                content: data,
-                code: serialNo,
-                deleted: false
-            }
-        ItemCharacter.create(newItemCharacter, function(err){
-            if(err){
-                callback(1, "Error", null);
-            }
-            else{
-                callback(0, "", id);
-            }
-        });
+    let data = cItemData.data;
+    let billsLibId = cItemData.billsLibId;
+    let serialNo = cItemData.serialNo;
+    let newItemCharacter;
+    let id = cItemData.id;
+    newItemCharacter = {
+        id: id,
+        billsLibId: billsLibId,
+        content: data,
+        code: serialNo,
+        deleted: false
+    }
+    ItemCharacter.create(newItemCharacter, function(err){
+        if(err){
+            callback(1, "Error", null);
+        }
+        else{
+            callback(0, "", id);
+        }
     });
-}
+};
 
 billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
-    var field = uItemData.field;
-    var updateData = uItemData.data;
-    var id = uItemData.updateId;
+    let field = uItemData.field;
+    let updateData = uItemData.data;
+    let id = uItemData.updateId;
+    let billsLibId = uItemData.billsLibId;
     if(field === "code"){
-        ItemCharacter.update({id: id}, {$set: {code: updateData}}, function(err){
+        ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {code: updateData}}, function(err){
             if(err){
                 callback(1, "Error");
             }
@@ -563,7 +845,7 @@ billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
         });
     }
     else if(field === "content"){
-        ItemCharacter.update({id: id}, {$set: {content: updateData}}, function(err){
+        ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {content: updateData}}, function(err){
             if(err){
                 callback(1, "Error");
             }
@@ -575,12 +857,13 @@ billsLibDao.prototype.updateItemCharacter = function(uItemData, callback){
 };
 
 billsLibDao.prototype.updateValue = function(uData, callback){
-    var type = uData.type;
-    var updateId = uData.updateId;
-    var data = uData.data;
-    var deleteCodes = uData.deleteCodes;
+    let type = uData.type;
+    let updateId = uData.updateId;
+    let data = uData.data;
+    let deleteCodes = uData.deleteCodes;
+    let billsLibId = uData.billsLibId;
     if(type === 'create'){
-        ItemCharacter.update({id: updateId}, {$addToSet: {itemValue: data}}, function(err){
+        ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$addToSet: {itemValue: data}}, function(err){
             if(err){
                 callback(1, 'Error');
             }
@@ -591,7 +874,7 @@ billsLibDao.prototype.updateValue = function(uData, callback){
     }
     else if(type === 'update'){
         if(data.field === 'code'){
-            ItemCharacter.update({id: updateId,  'itemValue.code': data.code}, {$set: {'itemValue.$.code': data.newData}}, function(err){
+            ItemCharacter.update({billsLibId: billsLibId, id: updateId,  'itemValue.code': data.code}, {$set: {'itemValue.$.code': data.newData}}, function(err){
                 if(err){
                     callback(1, 'Error');
                 }
@@ -601,7 +884,7 @@ billsLibDao.prototype.updateValue = function(uData, callback){
             });
         }
         else {
-            ItemCharacter.update({id: updateId,  'itemValue.code': data.code}, {$set: {'itemValue.$.value': data.newData}}, function(err){
+            ItemCharacter.update({billsLibId: billsLibId, id: updateId,  'itemValue.code': data.code}, {$set: {'itemValue.$.value': data.newData}}, function(err){
                 if(err){
                     callback(1, 'Error');
                 }
@@ -615,7 +898,7 @@ billsLibDao.prototype.updateValue = function(uData, callback){
     else {
         if(deleteCodes.length > 0){
             deleteCodes.forEach(function(code){
-                ItemCharacter.update({id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){
+                ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$pull: {itemValue: {code: code}}}, function(err){
                     if(err){
                         callback(1, 'Error');
                     }
@@ -626,15 +909,16 @@ billsLibDao.prototype.updateValue = function(uData, callback){
 };
 
 billsLibDao.prototype.deleteItemCharacter = function(data, callback){
-    var delIds = data.ids;
-    var success = true;
+    let delIds = data.ids;
+    let success = true;
+    let billsLibId = data.billsLibId;
     delIds.forEach(function(id){
         /*ItemCharacter.remove({id: id}, function(err){
             if(err){
                 callback(1, "Error");
             }
         });*/
-        ItemCharacter.update({id: id}, {$set: {deleted: true}}, function(err){
+        ItemCharacter.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
             if(err){
                 success = false;
                 callback(1, 'Error');
@@ -642,6 +926,76 @@ billsLibDao.prototype.deleteItemCharacter = function(data, callback){
         });
     });
 }
+
+billsLibDao.prototype.pasteItems = function (data, callback) {
+    let pasteDatas = data.pasteDatas;
+    let updateDatas = pasteDatas.updateDatas,
+        createDatas = pasteDatas.createDatas;
+    if(updateDatas.length > 0){
+        for(let i=0; i<updateDatas.length; i++){
+            let updateId = updateDatas[i].orgId,
+                field = updateDatas[i].field,
+                updateData = updateDatas[i].data, billsLibId = updateDatas[i].billsLibId;
+            if(field === 'code'){
+                ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {code: updateData}}, function(err){
+                    if(err){
+
+                    }
+                });
+            }
+            else{
+                ItemCharacter.update({billsLibId: billsLibId, id: updateId}, {$set: {content: updateData}}, function(err){
+                    if(err){
+
+                    }
+                });
+            }
+        }
+    }
+    if(createDatas.length > 0){
+        for(let i =0; i<createDatas.length; i++){
+            let billsLibId = createDatas[i].billsLibId, id = createDatas[i].id,
+                code , content;
+            let itemObj;
+
+            if(createDatas[i].type === 'CreateT'){
+                itemObj = {
+                    billsLibId: billsLibId,
+                    id: id,
+                    code: createDatas[i].code,
+                    content: createDatas[i].content,
+                    deleted: false
+                }
+            }
+            else{
+                if(createDatas[i].field === 'code'){
+                    itemObj = {
+                        billsLibId: billsLibId,
+                        id: id,
+                        code: createDatas[i].data,
+                        content: '',
+                        deleted: false
+                    }
+                }
+                else {
+                    itemObj = {
+                        billsLibId: billsLibId,
+                        id: id,
+                        code: createDatas[i].code,
+                        content: createDatas[i].data,
+                        deleted: false
+                    }
+                }
+            }
+            ItemCharacter.create(itemObj, function(err){
+                if(err){
+
+                }
+            });
+        }
+    }
+
+};
 //
 
 

+ 8 - 7
modules/bills_lib/models/bills_lib_model.js

@@ -1,14 +1,15 @@
 /**
  * Created by vian on 2017/3/17.
  */
-var dbm = require("../../../config/db/db_manager");
-var schemas = require("./bills_lib_schemas.js");
+let dbm = require("../../../config/db/db_manager");
+let schemas = require("./bills_lib_schemas.js");
 //var db = dbm.getLocalConnection("stdBillsEditor");
-var db = dbm.getCfgConnection("stdBillsEditor");
-var stdBillsLibMod = db.model("stdBillsLib", schemas.stdBillsLibSchema);
-var billsMod = db.model("billsLib", schemas.billsSchema);
-var jobContentMod = db.model("jobContent", schemas.jobContentSchema);
-var itemCharacterMod = db.model("itemCharacter", schemas.itemCharacterSchema);
+let db = dbm.getCfgConnection("scConstruct");
+//let db = dbm.getLocalConnection("stdBillsEditor");
+let stdBillsLibMod = db.model("std_bills_lib_list", schemas.stdBillsLibSchema);
+let billsMod = db.model("std_bills_lib_bills", schemas.billsSchema);
+let jobContentMod = db.model("std_bills_lib_jobContent", schemas.jobContentSchema);
+let itemCharacterMod = db.model("std_bills_lib_itemCharacter", schemas.itemCharacterSchema);
 
 module.exports = {
     stdBillsLibMod: stdBillsLibMod,

+ 5 - 5
modules/bills_lib/models/bills_lib_schemas.js

@@ -1,6 +1,6 @@
-var mongoose = require('mongoose');
+let mongoose = require('mongoose');
 
-var stdBillsLibSchema =mongoose.Schema({
+let stdBillsLibSchema =mongoose.Schema({
     userId: Number,
     billsLibId: Number,
     billsLibName: String,
@@ -10,7 +10,7 @@ var stdBillsLibSchema =mongoose.Schema({
     {versionKey: false}
 );
 
-var billsSchema = mongoose.Schema({
+let billsSchema = mongoose.Schema({
     ID: Number,
     ParentID: Number,
     NextSiblingID: Number,
@@ -28,7 +28,7 @@ var billsSchema = mongoose.Schema({
     {versionKey: false}
 );
 
-var jobContentSchema = mongoose.Schema({
+let jobContentSchema = mongoose.Schema({
     id: Number,
     code: Number,
     content: String,
@@ -38,7 +38,7 @@ var jobContentSchema = mongoose.Schema({
     {versionKey: false}
 );
 
-var itemCharacterSchema = mongoose.Schema({
+let itemCharacterSchema = mongoose.Schema({
     id: Number,
     code: Number,
     content: String,

+ 7 - 3
modules/bills_lib/routes/bills_lib_routes.js

@@ -1,9 +1,9 @@
 /**
  * Created by vian on 2017/3/17.
  */
-var express = require("express");
-var billsController = require("./../controllers/bills_lib_controllers");
-var billsRouter =express.Router();
+let express = require("express");
+let billsController = require("./../controllers/bills_lib_controllers");
+let billsRouter =express.Router();
 
 billsRouter.post('/getMaxNumber', billsController.getMaxNumber);
 billsRouter.post('/getABillsLib', billsController.getABillsLib);
@@ -12,6 +12,7 @@ billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
 billsRouter.post("/deleteStdBillsLib", billsController.deleteStdBillsLib);
 billsRouter.post("/renameStdBillsLib", billsController.renameStdBillsLib);
 billsRouter.post("/getStdBillsLibName", billsController.getStdBillsLibName);
+billsRouter.post("/getCurrentUniqId", billsController.getCurrentUniqId);
 billsRouter.post("/getBills", billsController.getBills);
 billsRouter.post("/createBills", billsController.createBills);
 billsRouter.post("/updatePNId", billsController.updatePNId);
@@ -19,15 +20,18 @@ billsRouter.post("/updateBills", billsController.updateBills);
 billsRouter.post("/updateBillsArr", billsController.updateBillsArr);
 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);
 billsRouter.post("/deleteJobContent", billsController.deleteJobContent);
+billsRouter.post("/pasteJobs", billsController.pasteJobs);
 billsRouter.post("/getItemCharacter", billsController.getItemCharacter);
 billsRouter.post("/createItemCharacter", billsController.createItemCharacter);
 billsRouter.post("/updateItemCharacter", billsController.updateItemCharacter);
 billsRouter.post("/updateValue", billsController.updateValue);
 billsRouter.post("/deleteItemCharacter", billsController.deleteItemCharacter);
+billsRouter.post("/pasteItems", billsController.pasteItems);
 
 module.exports = billsRouter;

+ 1 - 1
modules/ration_repository/models/coe.js

@@ -11,7 +11,7 @@ var counter = require('../../../public/counter/counter');
 var coeSchema = mongoose.Schema({
     coeType: String,                // 系数类型,指作用范围:
                                     // 单个(如:111量0.001)、人工类、材料类、机械类、全部(如:定额×0.925)。
-    gljID: Number,                  // 要调整的工料机ID(当coeType=0时有效)
+    gljCode: String,                  // 要调整的工料机Code(当coeType=0时有效)
     operator: String,               // 运算符(*、+、-、=)
     amount: String,                 // 调整的量
     _id: false

+ 21 - 0
operation.js

@@ -112,6 +112,27 @@ app.get('/rationRepository/coeList', function(req, res) {
 
 app.use("/rationRepository/api",rationRepository_Router);
 
+app.get("/stdBillsmain", function(req, res){
+    if(!req.session.userAccount){
+        res.redirect('/login');
+    }
+    else {
+        res.render("maintain/bills_lib/html/main.html",
+            {userAccount: req.session.userAccount,
+                userID: req.session.userID});
+    }
+});
+app.get("/stdBills", function(req, res){
+    res.render("maintain/bills_lib/html/qingdan.html");
+});
+app.get('/stdJobs', function(req, res){
+    res.render('maintain/bills_lib/html/neirong.html');
+});
+app.get('/stdItems', function(req, res){
+    res.render('maintain/bills_lib/html/tezheng.html');
+});
+let billsLibRouter = require("./modules/bills_lib/routes/bills_lib_routes");
+app.use("/stdBillsEditor", billsLibRouter);
 
 app.use(function(req, res, next) {
     res.status(404).send('404 Error');

+ 10 - 9
web/maintain/bills_lib/html/main.html

@@ -120,7 +120,7 @@
     <script src="/lib/jquery/jquery.min.js"></script>
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
-    <script src="/web/maintain/js/global.js"></script>
+    <script src="/web/maintain/bills_lib/scripts/global.js"></script>
     <script src="/web/maintain/bills_lib/scripts/bills_lib_ajax.js"></script>
     <script src="/web/maintain/bills_lib/scripts/tools.js"></script>
 
@@ -129,13 +129,13 @@
     autoFlashHeight();
 </script>
 <script>
-    var userId = '<%= userID %>';
-    var userAccount = '<%= userAccount %>';
+    let userId = '<%= userID %>';
+    let userAccount = '<%= userAccount %>';
     mainAjax.getStdBillsLib(userId);
     $(document).ready(function(){
         //main 增删改
         $("#createA").click(function(){
-            var billsLibName = $("#createText").val();
+            let billsLibName = $("#createText").val();
             if(billsLibName){
                 mainAjax.createStdBillsLib(userId, billsLibName);
                 $("#createText").val("");
@@ -146,23 +146,23 @@
         });
 
        $("#showArea").on("click", "[data-target = '#del']", function(){
-            var deleteId = $(this).parent().parent().attr("id")
+           let deleteId = $(this).parent().parent().attr("id");
            $("#deleteA").attr("deleteId", deleteId);
        });
         $("#deleteA").click(function(){
-            var deleteId = $(this).attr("deleteId");
+            let deleteId = $(this).attr("deleteId");
             mainAjax.deleteStdBillsLib(deleteId);
         });
 
        $("#showArea").on("click", "[data-target = '#edit']", function(){
-           var renameId = $(this).parent().parent().attr("id");
+           let renameId = $(this).parent().parent().attr("id");
            $("#renameA").attr("renameId", renameId);
 
        });
 
         $("#renameA").click(function(){
-            var newName = $("#renameText").val();
-            var renameId = $(this).attr("renameId");
+            let newName = $("#renameText").val();
+            let renameId = $(this).attr("renameId");
             if(newName){
                 mainAjax.renameStdBillsLib(renameId, newName);
                 $("#renameText").val("");
@@ -171,6 +171,7 @@
                 alert("请输入名称!");
             }
         });
+        //test es6
     });
 </script>
 

+ 59 - 6
web/maintain/bills_lib/html/neirong.html

@@ -177,11 +177,12 @@
     <script src="/web/maintain/bills_lib/scripts/bills_lib_setting.js"></script>
     <script src="/web/maintain/bills_lib/scripts/db_controller.js"></script>
     <SCRIPT type="text/javascript">
-        var billsLibId = getQueryString("billsLibId");
+        let billsLibId = getQueryString("billsLibId");
         tools.redirect(billsLibId, 'stdBillsmain');
-        var spreadAllJobs = new GC.Spread.Sheets.Workbook($('#spreadAllJobs')[0], {sheetCount: 1});
-        var orgJobData;
-        var maxJobNumer;
+        let spreadAllJobs = new GC.Spread.Sheets.Workbook($('#spreadAllJobs')[0], {sheetCount: 1});
+        let orgJobData;
+        let maxJobNumer;
+        let sheetJobsDatas;
         $(document).ready(function(){
             $('#aStdBills').attr('href', function(){
                 return 'stdBills?billsLibId=' + billsLibId;
@@ -199,7 +200,7 @@
             TREE_SHEET_HELPER.loadSheetHeader(setting, spreadAllJobs.getActiveSheet());
             jobsAjax.getJobContent(billsLibId, function(datas){
                 spreadAllJobs.getActiveSheet().suspendPaint();
-                var len = datas.length;
+                let len = datas.length;
                 for(var i=0; i<len; i++){
                     setting.cols.forEach(function(col, colIdx){
                         spreadAllJobs.getActiveSheet().setTag(i, colIdx, datas[i].id, GC.Spread.Sheets.SheetArea.viewport);
@@ -212,11 +213,12 @@
                     });
                 }
                 spreadAllJobs.getActiveSheet().resumePaint();
-                var totalJobs = createObj.newJobs();
+                let totalJobs = createObj.newJobs();
                 totalJobs.loadJobs(null, datas);
                 tools.getBillsIds(function(ids){
                     myKey.delKey(spreadAllJobs, ids, totalJobs, setting, 'totalJobs');
                     bindSheet(totalJobs, spreadAllJobs.getActiveSheet(), setting);
+                    pasteJobs(spreadAllJobs.getActiveSheet(), totalJobs);
                 });
             });
         }
@@ -233,6 +235,57 @@
             });
         }
 
+        function pasteJobs(sheet, totalJobs){
+            sheetJobsDatas = tools.getsheetDatas(sheet, 'total');
+            sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
+                const colIdx = 1;
+                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 pasteDatas = [], uncrossedDatas = [], crossedDatas = [];
+                for(let i = orgRow; i<= maxRow; i++){
+                    for(let j =0; j<=1; j++){
+                        let filed = j === 0 ? 'code' : 'content';
+                        if(sheet.getCell(i, j).value()){
+                            let unitData = {
+                                billsLibId: billsLibId,
+                                rowIdx: i,
+                                colIdx: j,
+                                field: filed,
+                                data: sheet.getCell(i, j).value(),
+                                type:  'Create'
+                            };
+                            pasteDatas.push(unitData);
+                        }
+                    }
+                }
+                for(let i=0; i< pasteDatas.length; i++){
+                    let crossedData;
+                    let flag = true;
+                    sheetJobsDatas.forEach(function(orgData){
+                        if(pasteDatas[i].rowIdx === orgData.rowIdx && pasteDatas[i].colIdx === orgData.colIdx){
+                            flag = false;
+                            crossedData = {
+                                billsLibId: billsLibId,
+                                rowIdx: pasteDatas[i].rowIdx,
+                                colIdx: pasteDatas[i].colIdx,
+                                field: pasteDatas[i].field,
+                                orgId: orgData.id,
+                                data: pasteDatas[i].data,
+                                type: 'Update'
+                            }
+                        }
+                    });
+                    if(flag){
+                        uncrossedDatas.push(pasteDatas[i]);
+                    }
+                    else{
+                        crossedDatas.push(crossedData);
+                    }
+                }
+                pasteController.pasteJobsFront(sheet, totalJobs, uncrossedDatas, crossedDatas);
+            });
+        }
+
 
   	</SCRIPT>
 </body>

+ 124 - 34
web/maintain/bills_lib/html/qingdan.html

@@ -223,21 +223,22 @@
     <script src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
     <script src="/web/maintain/bills_lib/scripts/bills_lib_setting.js"></script>
     <script src="/web/maintain/bills_lib/scripts/bills_lib_tree.js"></script>
-    <script src="/test/tmp_data/bills_grid_setting.js"></script>
     <script src="/web/maintain/bills_lib/scripts/db_controller.js"></script>
     <script src="/web/maintain/bills_lib/scripts/tools.js"></script>
 </body>
 <script type="text/javascript">
     autoFlashHeight();
-    var maxJobsNumber;
-    var maxItemsNumber;
-    var orgJobData;
-    var orgItemData;
-    var billsTree = billsLibTree.createBillsTree();
-    var billsLibId = getQueryString("billsLibId");
+    let maxJobsNumber;
+    let maxItemsNumber;
+    let orgJobData;
+    let orgItemData;
+    let billsTree = billsLibTree.createBillsTree();
+    let billsLibId = getQueryString("billsLibId");
+    let sheetDatas;
+    let sheetItemsDatas;
     tools.redirect(billsLibId, 'stdBillsmain');
-    var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
-    var itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
+    let jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
+    let itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
     $(document).ready(function(){
         $("#aStdJobs").attr('href', function(){
             return 'stdJobs?billsLibId=' + billsLibId;
@@ -279,13 +280,13 @@
 
 
     function showBillsSheet(datas, jobsSheet, itemsSheet, setting) {
-        var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
+        let billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
         setSheet.initSheet(billsSpread, setting);
         myKey.delKey(billsSpread);
         billsTree.loadDatas(datas);
         //粘贴事件
         bindPasteBills(billsSpread.getActiveSheet(), setting);
-        var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
+        let controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
         controller.showTreeData();
         //setTagId
         setTagID(controller, setting);
@@ -299,8 +300,11 @@
         rechargeChange(controller);
         //jobs
         jobOperation(controller, jobsSheet, function(totalJobs){
+            //------关联表粘贴复制
+            bindPasteRel(jobsSheet, controller, totalJobs, jobsSetting);
             //items
             itemOperation(controller, itemsSheet, function(totalItems){
+                bindPasteItemsRel(itemsSheet, controller, totalItems, itemsSetting);
                 //节点操作
                 nodeOpration(controller, totalJobs, totalItems);
             });
@@ -309,7 +313,7 @@
 
     function setTagID(controller, setting){
         if(controller.tree.items.length > 0){
-            var length = controller.tree.items.length;
+            let length = controller.tree.items.length;
             for(var i=0; i<length; i++){
                 setting.cols.forEach(function(col, colIdx){
                     if(controller.tree.items[i].data.ID){
@@ -322,7 +326,7 @@
 
     function refreshBtn(controller){
         controller.bind('refreshBaseActn', function (tree) {
-            var showButton = function (show, btn) {
+            let showButton = function (show, btn) {
                 if (show) {
                     btn.show();
                 } else {
@@ -339,7 +343,7 @@
 
     function rechargeChange(controller){
         $('#exampleTextarea').bind('change', function(){
-            var newData = $('#exampleTextarea').val();
+            let newData = $('#exampleTextarea').val();
             if(controller.tree.selected){
                 rechargeController.updateRechar(controller.tree.selected, newData);
             }
@@ -355,7 +359,7 @@
                 maxJobsNumber = result[0].code;
             }
             jobsAjax.getJobContent(billsLibId, function(datas){
-                var totalJobs = createObj.newJobs();
+                let totalJobs = createObj.newJobs();
                 totalJobs.loadJobs(controller.tree.items, datas);
                 initData(controller, jobsSheet, jobsSetting, 'jobs');
                 myKey.delKey(jobsSpread, controller, totalJobs, jobsSetting, 'jobs');
@@ -377,7 +381,7 @@
                 maxItemsNumber = result[0].code;
             }
             itemsAjax.getItemCharacter(billsLibId, function(datas){
-                var totalItems = createObj.newItems();
+                let totalItems = createObj.newItems();
                 totalItems.loadItems(controller.tree.items, datas);
                 initData(controller, itemsSheet, itemsSetting, 'items');
                 myKey.delKey(itemsSpread, controller, totalItems, itemsSetting, 'items');
@@ -393,8 +397,9 @@
     //初始焦点工作表和项目表绑定数据
     function initData(controller, sheet, setting, classify){
         if(controller.tree.selected){
-            var arr = controller.tree.selected[classify];
-            var recharge = controller.tree.selected.data.recharge;
+            let arr = controller.tree.selected[classify];
+            let recharge = controller.tree.selected.data.recharge;
+            setSheet.setMaxRowCount(sheet, arr);
             if(arr.length > 0){
                 tools.reshowData(sheet, arr, setting, true);
             }
@@ -411,16 +416,18 @@
                 $('#exampleTextarea').val(controller.tree.selected.data.recharge);
                 tools.clearData(sheet);
                 if(field === 'jobs'){
-                    var jobs = controller.tree.selected.jobs;
+                    let jobs = controller.tree.selected.jobs;
+                    setSheet.setMaxRowCount(sheet, jobs);
                     if(jobs.length > 0){
-                        tools.reshowData(sheet, jobs, setting, true);
+                        tools.reshowData(sheet, jobs, setting, false);
                         orgJobData = sheet.getValue(0, 0);
                     }
                 }
                 if(field === 'items'){
-                    var items = controller.tree.selected.items;
+                    let items = controller.tree.selected.items;
+                    setSheet.setMaxRowCount(sheet, items);
                     if(items.length > 0){
-                        tools.reshowData(sheet, items, setting, true);
+                        tools.reshowData(sheet, items, setting, false);
                         orgItemData = sheet.getValue(0, 0);
                     }
                 }
@@ -434,14 +441,14 @@
 
     function bindPasteBills(sheet, setting){
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
-            var datas = [], field;
-            var orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
-            var maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
+            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;
             for(var i=orgRow; i<= maxRow; i++){
-                var id =  sheet.getTag(i, 0, GC.Spread.Sheets.SheetArea.viewport);
+                let id =  sheet.getTag(i, 0, GC.Spread.Sheets.SheetArea.viewport);
                 if(id){
-                    var pasteJson = {billsLibId: billsLibId, ID: id, code: null, name: null, unit: null, ruleText: null};
-                    var colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
+                    let pasteJson = {billsLibId: billsLibId, ID: id, code: null, name: null, unit: null, ruleText: null};
+                    let colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
                     for(var j=0; j<colLen; j++){
                         setting.cols.forEach(function(col, colIdx){
                             if(colIdx === j){
@@ -459,18 +466,101 @@
             billsAjax.pasteBills(datas);
         });
     }
-
-    function bindPasteRel(sheet, setting){
+    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);
+            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;
+                let pasteArr = [];
+                let crossedDatas = [];
+                let uncrossedDatas = [];
+                const colIdx = 1;
+                for(let i=orgRow; i<=maxRow; i++){
+                    if(sheet.getCell(i, colIdx).value()){
+                        pasteArr.push(sheet.getCell(i, colIdx).value());
+                    }
+                }
+                let uniqPasteArr = tools.uniqArr(pasteArr);
+                for(let i =orgRow, j=0; i<=uniqPasteArr.length+orgRow-1; i++, j++ ){
+                    let flag = true;
+                    let crossedData;
+                    sheetDatas.forEach(function(rowData){
+                        if(rowData.rowIdx === i && rowData.data !== uniqPasteArr[j]){
+                            flag = false;
+                            crossedData = {
+                                orgId: rowData.id,
+                                newData: uniqPasteArr[j]
+                            };
+                        }
+                    });
+                    if(flag){
+                        uncrossedDatas.push(uniqPasteArr[j]);
+                    }
+                    else {
+                        crossedDatas.push(crossedData);
+                    }
+                }
+                let pasteDatas = tools.encapData(uncrossedDatas, crossedDatas, controller, totalJobs);
+                billsAjax.pasteRel(pasteDatas, 'jobs');
+                pasteController.frontOperator(sheet, setting, controller, totalJobs, pasteDatas);
+            }
+            else {
+                tools.clearData(sheet);
+            }
+        });
+    }
+    function bindPasteItemsRel(sheet, controller, totalItems, setting){
+        sheetItemsDatas = tools.getsheetDatas(sheet, 'items');
         sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
-            var orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
-            var maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
+            sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
+            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;
+                let pasteArr = [];
+                let crossedDatas = [];
+                let uncrossedDatas = [];
+                const colIdx = 1;
+                for(let i=orgRow; i<=maxRow; i++){
+                    if(sheet.getCell(i, colIdx).value()){
+                        pasteArr.push(sheet.getCell(i, colIdx).value());
+                    }
+                }
+                let uniqPasteArr = tools.uniqArr(pasteArr);
+                for(let i =orgRow, j=0; i<=uniqPasteArr.length+orgRow-1; i++, j++ ){
+                    let flag = true;
+                    let crossedData;
+                    sheetItemsDatas.forEach(function(rowData){
+                        if(rowData.rowIdx === i && rowData.data !== uniqPasteArr[j]){
+                            flag = false;
+                            crossedData = {
+                                orgId: rowData.id,
+                                newData: uniqPasteArr[j]
+                            };
+                        }
+                    });
+                    if(flag){
+                        uncrossedDatas.push(uniqPasteArr[j]);
+                    }
+                    else {
+                        crossedDatas.push(crossedData);
+                    }
+                }
+                let pasteDatas = tools.encapItemsData(uncrossedDatas, crossedDatas, controller, totalItems);
+                billsAjax.pasteRel(pasteDatas, 'items');
+                pasteController.frontItemsRelOperator(sheet, setting, controller, totalItems, pasteDatas);
+            }
+            else {
+                tools.clearData(sheet);
+            }
         });
     }
 
 
     function buildJobs(jobsSpread, setting){
         setSheet.initSheet(jobsSpread, setting);
-        setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
+       // setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
         myKey.downKey(jobsSpread);
         myKey.enterKey(jobsSpread);
         TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
@@ -478,7 +568,7 @@
 
     function buildItems(itemsSpread, setting){
         setSheet.initSheet(itemsSpread, setting);
-        setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
+       // setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
         myKey.downKey(itemsSpread);
         myKey.enterKey(itemsSpread);
         TREE_SHEET_HELPER.loadSheetHeader(itemsSetting, itemsSpread.getActiveSheet());

+ 64 - 14
web/maintain/bills_lib/html/tezheng.html

@@ -179,14 +179,15 @@
     <script src="/web/maintain/bills_lib/scripts/bills_lib_setting.js"></script>
     <script src="/web/maintain/bills_lib/scripts/db_controller.js"></script>
     <SCRIPT type="text/javascript">
-        var spread = new GC.Spread.Sheets.Workbook($('#spreadAllItems')[0], {sheetCount: 1});
-        var spreadVal = new GC.Spread.Sheets.Workbook($('#spreadEigenvalue')[0], {sheetCount: 1});
-        var billsLibId = getQueryString('billsLibId');
+        let spread = new GC.Spread.Sheets.Workbook($('#spreadAllItems')[0], {sheetCount: 1});
+        let spreadVal = new GC.Spread.Sheets.Workbook($('#spreadEigenvalue')[0], {sheetCount: 1});
+        let billsLibId = getQueryString('billsLibId');
         tools.redirect(billsLibId, 'stdBillsmain');
-        var selectedId;
-        var orgValue;
-        var orgItemData;
-        var maxItemsNumber;
+        let selectedId;
+        let orgValue;
+        let orgItemData;
+        let maxItemsNumber;
+        let totalItemsDatas;
   		$(document).ready(function(){
             $('#aStdBills').attr('href', function(){
                 return 'stdBills?billsLibId=' + billsLibId;
@@ -205,8 +206,7 @@
             myKey.enterKey(spread);
             TREE_SHEET_HELPER.loadSheetHeader(setting, spread.getActiveSheet());
             itemsAjax.getItemCharacter(billsLibId, function(datas){
-                spread.getActiveSheet().suspendPaint();
-                var len = datas.length;
+                let len = datas.length;
                 for(var i=0; i<len; i++){
                     if(datas[0].id){
                         selectedId = datas[0].id;
@@ -229,9 +229,8 @@
                     myKey.delKey(spread, ids, totalItems, totalItemsSetting, 'totalItems');
                     myKey.delKey(spreadVal, null, totalItems, eigenValueSetting, 'itemValue');
                     bindSheet(totalItems, spread.getActiveSheet(), spreadVal.getActiveSheet(), totalItemsSetting);
+                    pasteItems(spread.getActiveSheet(), totalItems);
                 });
-                //
-                spread.getActiveSheet().resumePaint();
             });
         }
 
@@ -257,9 +256,9 @@
             });
             valueController.editData(totalItems, valueSheet, eigenValueSetting);
             itemSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function(sender, args){
-                var itemId = itemSheet.getTag(args.newSelections[0].row, args.newSelections[0].col, GC.Spread.Sheets.SheetArea.viewport);
+                let itemId = itemSheet.getTag(args.newSelections[0].row, args.newSelections[0].col, GC.Spread.Sheets.SheetArea.viewport);
                 if(itemId && args.oldSelections[0].row !== args.newSelections[0].row|| itemId && args.oldSelections[0].row === 0){
-                    var valueArr = valueController.getValues(totalItems, itemId);
+                    let valueArr = valueController.getValues(totalItems, itemId);
                     tools.clearData(valueSheet);
                     selectedId = itemId;
                     tools.reshowValue(valueSheet, valueArr, eigenValueSetting, true);
@@ -273,13 +272,64 @@
 
         function initValue(sheet, totalItems, setting){
             if(selectedId){
-                var valueArr = valueController.getValues(totalItems, selectedId);
+                let valueArr = valueController.getValues(totalItems, selectedId);
                 if(valueArr.length > 0){
                     tools.reshowValue(sheet, valueArr, setting, true);
                 }
             }
         }
 
+        function pasteItems(sheet, totalItems){
+            totalItemsDatas = tools.getsheetDatas(sheet, 'total');
+            sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
+                const colIdx = 1;
+                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 pasteDatas = [], uncrossedDatas = [], crossedDatas = [];
+                for(let i = orgRow; i<= maxRow; i++){
+                    for(let j =0; j<=1; j++){
+                        let filed = j === 0 ? 'code' : 'content';
+                        if(sheet.getCell(i, j).value()){
+                            let unitData = {
+                                billsLibId: billsLibId,
+                                rowIdx: i,
+                                colIdx: j,
+                                field: filed,
+                                data: sheet.getCell(i, j).value(),
+                                type:  'Create'
+                            };
+                            pasteDatas.push(unitData);
+                        }
+                    }
+                }
+                for(let i=0; i< pasteDatas.length; i++){
+                    let crossedData;
+                    let flag = true;
+                    totalItemsDatas.forEach(function(orgData){
+                        if(pasteDatas[i].rowIdx === orgData.rowIdx && pasteDatas[i].colIdx === orgData.colIdx){
+                            flag = false;
+                            crossedData = {
+                                billsLibId: billsLibId,
+                                rowIdx: pasteDatas[i].rowIdx,
+                                colIdx: pasteDatas[i].colIdx,
+                                field: pasteDatas[i].field,
+                                orgId: orgData.id,
+                                data: pasteDatas[i].data,
+                                type: 'Update'
+                            }
+                        }
+                    });
+                    if(flag){
+                        uncrossedDatas.push(pasteDatas[i]);
+                    }
+                    else{
+                        crossedDatas.push(crossedData);
+                    }
+                }
+                pasteController.pasteItemsFront(sheet, totalItems, uncrossedDatas, crossedDatas);
+            });
+        }
+
   	</SCRIPT>
 </body>
 <script type="text/javascript">

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

@@ -111,6 +111,18 @@ var mainAjax = {
                 }
             }
         });
+    },
+    getCurrentUniqId: function (callback) {
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/getCurrentUniqId',
+            dataType: 'json',
+            success: function(result){
+                if(!result.error && callback){
+                    callback(result.data);
+                }
+            }
+        });
     }
 }
 
@@ -233,8 +245,21 @@ var billsAjax = {
 
             }
         });
+    },
+    pasteRel: function (pasteDatas, field, callback) {
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/pasteRel',
+            data: {data:JSON.stringify({pasteDatas: pasteDatas, field: field})},
+            dataType: 'json',
+            success: function(result){
+                if(!result.error && callback){
+                    callback(result.data);
+                }
+            }
+        });
     }
-}
+};
 
 var jobsAjax = {
     getJobContent: function(billsLidId, callback){
@@ -263,42 +288,50 @@ var jobsAjax = {
             }
         });
     },
-    createJobContent: function(billsLibId, field, data, serialNo, callback){
+    createJobContent: function(billsLibId, data, serialNo, id){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/createJobContent',
-            data: {data: JSON.stringify({billsLibId: billsLibId, field: field, data: data, serialNo: serialNo })},
+            data: {data: JSON.stringify({billsLibId: billsLibId, data: data, serialNo: serialNo, id: id })},
             dataType: 'json',
             success: function(result){
-                if(!result.error){
-                    if(callback){
-                        callback(result.data);
-                    }
-                }
+
             }
         });
     },
-    updateJobContent: function(id, field, data){
+    updateJobContent: function(billsLibId, id, field, data){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/updateJobContent',
-            data: {data: JSON.stringify({updateId: id, field: field, data: data })},
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateId: id, field: field, data: data })},
             dataType: 'json',
             success: function(result){
 
             }
         });
     },
-    deleteJobContent: function(ids){
+    deleteJobContent: function(billsLibId, ids){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/deleteJobContent',
-            data: {data: JSON.stringify({ids: ids})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, ids: ids})},
             dataType: 'json',
             success: function(result){
 
             }
         });
+    },
+    pasteJobs: function(pasteDatas){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/pasteJobs',
+            data: {data: JSON.stringify({pasteDatas: pasteDatas})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+
+        });
     }
 }
 
@@ -318,53 +351,60 @@ var itemsAjax = {
             }
         });
     },
-    createItemCharacter: function(billsLibId, field, data, serialNo, callback){
+    createItemCharacter: function(billsLibId,  data, serialNo, id){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/createItemCharacter',
-            data: {data: JSON.stringify({billsLibId: billsLibId, field: field, data: data, serialNo: serialNo})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, data: data, serialNo: serialNo, id: id})},
             dataType: 'json',
             success: function(result){
-                if(!result.error){
-                    if(callback){
-                        callback(result.data);
-                    }
-                }
             }
         });
     },
-    updateItemCharacter: function(id, field, data){
+    updateItemCharacter: function(billsLibId, id, field, data){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/updateItemCharacter',
-            data: {data: JSON.stringify({updateId: id, field: field, data: data })},
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateId: id, field: field, data: data })},
             dataType: 'json',
             success: function(result){
 
             }
         });
     },
-    updateValue: function(id, data, deleteCodes, type){
+    updateValue: function(billsLibId, id, data, deleteCodes, type){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/updateValue',
-            data: {data: JSON.stringify({updateId: id, data: data, type: type, deleteCodes: deleteCodes})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, updateId: id, data: data, type: type, deleteCodes: deleteCodes})},
             dataType: 'json',
             success: function(reslut){
 
             }
         });
     },
-    deleteItemCharacter: function(ids){
+    deleteItemCharacter: function(billsLibId, ids){
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/deleteItemCharacter',
-            data: {data: JSON.stringify({ids: ids})},
+            data: {data: JSON.stringify({billsLibId: billsLibId, ids: ids})},
             dataType: 'json',
             success: function(result){
 
             }
         });
+    },
+    pasteItems: function(pasteDatas){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/pasteItems',
+            data: {data: JSON.stringify({pasteDatas: pasteDatas})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+
+        });
     }
 }
 

+ 635 - 69
web/maintain/bills_lib/scripts/db_controller.js

@@ -344,7 +344,9 @@ var tools = {
     },
     isRepeat: function(arr, field, newData, ref){
         var isRepeat = false;
+        console.log(`enterIsR`);
         if(arr){
+            console.log(`enter ifArr`);
             arr.forEach(function(item){
                 if(ref === 'reference' && item.data[field] == newData){
                     isRepeat = true;
@@ -365,6 +367,7 @@ var tools = {
 
     reSetCell: function(sheet, rowIdx, colIdx, value, id){
         if(value && colIdx){
+            console.log(`enterResetCell`);
             sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
         }
         sheet.setTag(rowIdx, 0, id);
@@ -434,6 +437,7 @@ var tools = {
     },
 
     resort: function(arr, attr, isValue){
+        console.log(`enterresort`);
        //var arr = node.jobs;
        function compare(attr){
            return function (a, b){
@@ -451,7 +455,12 @@ var tools = {
        }
        arr.sort(compare(attr));
     },
+    resortArr: function(arr, attr){
+
+    },
     reshowData: function(sheet, arr, setting, isResort){
+        let time = new Date().getTime();
+        console.log(`enterreshowData ${time}`);
         tools.clearData(sheet);
         if(isResort){
             tools.resort(arr, 'code', false);
@@ -536,9 +545,561 @@ var tools = {
                 window.location.href = newHref;
             }
         });
+    },
+
+    uniqArr: function (arr) {
+        let newArr = [];
+        for(let i=0; i<arr.length; i++){
+            if(newArr.indexOf(arr[i]) === -1){
+                newArr.push(arr[i]);
+            }
+        }
+        return newArr;
+    },
+
+    getsheetDatas: function(sheet, classify){
+        let rowCount = sheet.getRowCount();
+        const colIdx = 1;
+        let sheetDatas = [];
+        if(classify === 'total'){
+            for(let i=0; i<rowCount; i++){
+                for(let j=0; j<= 1; j++){
+                    let data = sheet.getCell(i, j).value, id = sheet.getTag(i, j);
+                    if(data && id){
+                        let unitData ={
+                            rowIdx: i,
+                            colIdx: j,
+                            data: data,
+                            id: id
+                        };
+                        sheetDatas.push(unitData);
+                    }
+                }
+            }
+        }
+        else{
+            for(let i=0; i<rowCount; i++){
+                let data = sheet.getCell(i, colIdx).value(), id = sheet.getTag(i, colIdx);
+                if(data && id){
+                    let rowData = {
+                        rowIdx: i,
+                        data: data,
+                        id: id
+                    }
+                    sheetDatas.push(rowData);
+                }
+            }
+        }
+        return sheetDatas;
+    },
+
+    encapData: function(uncrossedDatas, crossedDatas, controller, totalJobs){
+        const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
+        let updateDatas = [];
+        let createDatas = [];
+        let createNewData = [];
+        let createExData = [];
+        let updateNewData = [];
+        let updateExData = [];
+        let nodeId = controller.tree.selected.getID();
+        uncrossedDatas.forEach(data => {
+            let cnDataObj, ceDataObj, content, jobId;
+            let isExisit = tools.isExist(totalJobs.jobsArr, 'content', data, null);
+            let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', data, 'reference');
+            if(isExisit && !isRepeat){
+                totalJobs.jobsArr.forEach(job => {
+                   if(data === job.data.content){
+                       jobId = job.data.id;
+                   }
+                });
+                ceDataObj= {
+                    newData: data,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    jobId: jobId,
+                    type: CreateExist
+                };
+                createDatas.push(ceDataObj);
+            }
+            if(!isExisit){
+                maxJobsNumber++;
+                //currentCountId++;
+                cnDataObj = {
+                    id: maxJobsNumber,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newData: data,
+                    code: maxJobsNumber,
+                    type: CreateNew
+                };
+                createDatas.push(cnDataObj);
+            }
+        });
+        crossedDatas.forEach(cData => {
+            let ueObj, unObj,  newJobId;
+            let isExisit = tools.isExist(totalJobs.jobsArr, 'content', cData.newData, null);
+            let isRepeat = tools.isRepeat(controller.tree.selected.jobs, 'content', cData.newData, 'reference');
+            if(isExisit && !isRepeat){
+                totalJobs.jobsArr.forEach(job => {
+                   if(cData.newData === job.data.content){
+                       newJobId = job.data.id;
+                   }
+                });
+                ueObj = {
+                    newData: cData.newData,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newJobId: newJobId,
+                    orgJobId: cData.orgId,
+                    type: UpdateExist
+                };
+                updateDatas.push(ueObj);
+            }
+            if(!isExisit && !isRepeat){
+                maxJobsNumber++;
+                //currentCountId++;
+                unObj = {
+                    newJobId: maxJobsNumber,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newData: cData.newData,
+                    orgJobId: cData.orgId,
+                    code: maxJobsNumber,
+                    type: UpdateNew
+                };
+                updateDatas.push(unObj);
+            }
+        });
+        let pasteDatas = {
+            updateDatas: updateDatas,
+            createDatas: createDatas
+        };
+        return pasteDatas;
+    },
+    encapItemsData: function(uncrossedDatas, crossedDatas, controller, totalItems){
+        const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
+        let updateDatas = [];
+        let createDatas = [];
+        let createNewData = [];
+        let createExData = [];
+        let updateNewData = [];
+        let updateExData = [];
+        let nodeId = controller.tree.selected.getID();
+        uncrossedDatas.forEach(data => {
+            let cnDataObj, ceDataObj, content,itemId;
+            let isExisit = tools.isExist(totalItems.itemsArr, 'content', data, null);
+            let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', data, 'reference');
+            if(isExisit && !isRepeat){
+                totalItems.itemsArr.forEach(item => {
+                    if(data === item.data.content){
+                        itemId = item.data.id;
+                    }
+                });
+                ceDataObj= {
+                    newData: data,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    itemId: itemId,
+                    type: CreateExist
+                };
+                createDatas.push(ceDataObj);
+            }
+            if(!isExisit){
+                maxItemsNumber++;
+                //currentCountId++;
+                cnDataObj = {
+                    id: maxItemsNumber,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newData: data,
+                    code: maxItemsNumber,
+                    type: CreateNew
+                };
+                createDatas.push(cnDataObj);
+            }
+        });
+
+        crossedDatas.forEach(cData => {
+            let ueObj, unObj,  newItemId;
+            let isExisit = tools.isExist(totalItems.itemsArr, 'content', cData.newData, null);
+            let isRepeat = tools.isRepeat(controller.tree.selected.items, 'content', cData.newData, 'reference');
+            if(isExisit && !isRepeat){
+                totalItems.itemsArr.forEach(item => {
+                    if(cData.newData === item.data.content){
+                        newItemId = item.data.id;
+                    }
+                });
+                ueObj = {
+                    newData: cData.newData,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newItemId: newItemId,
+                    orgItemId: cData.orgId,
+                    type: UpdateExist
+                };
+                updateDatas.push(ueObj);
+            }
+            if(!isExisit && !isRepeat){
+                maxItemsNumber++;
+                //currentCountId++;
+                unObj = {
+                    newItemId: maxItemsNumber,
+                    billsLibId: billsLibId,
+                    nodeId: nodeId,
+                    newData: cData.newData,
+                    orgItemId: cData.orgId,
+                    code: maxItemsNumber,
+                    type: UpdateNew
+                };
+                updateDatas.push(unObj);
+            }
+        });
+        let pasteDatas = {
+            updateDatas: updateDatas,
+            createDatas: createDatas
+        };
+        return pasteDatas;
+    },
+    rebuildArr: function(arr){
+        let conformDatas = [];
+        let flag = true;
+        for(let i=0; i< arr.length; i++){
+            for(let j=i+1; j<arr.length; j++){
+                if(arr[i].rowIdx === arr[j].rowIdx){
+                    flag = false;
+                    let field = arr[i].field;
+                    let conformData;
+                    if(field === 'code'){
+                        conformData = {
+                            billsLibId: billsLibId,
+                            code: arr[i].data,
+                            content: arr[j].data,
+                            rowIdx: arr[i].rowIdx,
+                            type: 'CreateT'
+                        }
+                    }
+                    else {
+                        conformData = {
+                            billsLIbId: billsLibId,
+                            code: arr[j].data,
+                            content: arr[i].data,
+                            rowIdx: arr[i].rowIdx,
+                            type: 'CreateT'
+                        }
+                    }
+                    conformDatas.push(conformData);
+                }
+            }
+
+        }
+        for(let i =0; i< arr.length; i++){
+            let flag = true;
+            for(let j=0; j<arr.length; j++){
+                if(arr[i].rowIdx === arr[j].rowIdx && arr[i].field !== arr[j].field){
+                    flag = false;
+                }
+            }
+            if(flag){
+
+                conformDatas.push(arr[i]);
+            }
+        }
+        return conformDatas;
     }
 
-}
+};
+
+let pasteController = {
+    frontController: function(sheet){
+
+    },
+
+    frontOperator: function(sheet, setting, controller, totalJobs, pasteDatas){
+        const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
+        let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
+        for(let i =0; i< updateDatas.length; i++){
+            if(updateDatas[i].type === UpdateExist){
+                totalJobs.jobsArr.forEach(job => {
+                    if(job.data.content === updateDatas[i].newData){
+                        let index = tools.getIndex(controller.tree.selected.jobs, updateDatas[i].orgJobId);
+                        job.count ++;
+                        controller.tree.selected.jobs.splice(index, 1);
+                        controller.tree.selected.jobs.splice(index, 0, job);
+                    }
+                });
+            }
+            if(updateDatas[i].type === UpdateNew){
+                let newJobData, newJob;
+                let newJobId = updateDatas[i].newJobId;
+                newJobData = {id: newJobId, content: updateDatas[i].newData, code: updateDatas[i].code};
+                newJob = createObj.newJob(newJobData);
+                newJob.count = 1;
+                totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
+                totalJobs.jobsArr.push(newJob);
+                var index = tools.getIndex(controller.tree.selected.jobs, updateDatas[i].orgJobId);
+                controller.tree.selected.jobs.splice(index, 1);
+                controller.tree.selected.jobs.splice(index, 0, newJob);
+            }
+        }
+        for(let i=0; i< createDatas.length; i++){
+            if(createDatas[i].type === CreateExist){
+                totalJobs.jobsArr.forEach(job => {
+                    if(job.data.content === createDatas[i].newData){
+                        job.count ++;
+                        controller.tree.selected.jobs.push(job);
+                    }
+
+                });
+            }
+            if(createDatas[i].type === CreateNew){
+                let newJobId = createDatas[i].id;
+                let newJobData, newJob;
+                newJobData = {id: newJobId, content: createDatas[i].newData, code: createDatas[i].code};
+                newJob = createObj.newJob(newJobData);
+                newJob.count = 1;
+                totalJobs.jobs[totalJobs.prefix + newJobId] = newJob;
+                totalJobs.jobsArr.push(newJob);
+                controller.tree.selected.jobs.push(newJob);
+            }
+        }
+        //resort&reshow
+        let time = new Date().getTime();
+        tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
+        sheetDatas = tools.getsheetDatas(sheet);
+
+    },
+    frontItemsRelOperator: function(sheet, setting, controller, totalItems, pasteDatas){
+        const UpdateExist = 'updateExist', UpdateNew = 'updateNew', CreateExist = 'createExist', CreateNew = 'createNew';
+        let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
+        for(let i =0; i< updateDatas.length; i++){
+            if(updateDatas[i].type === UpdateExist){
+                totalItems.itemsArr.forEach(item => {
+                    if(item.data.content === updateDatas[i].newData){
+                        let index = tools.getIndex(controller.tree.selected.items, updateDatas[i].orgItemId);
+                        item.count ++;
+                        controller.tree.selected.items.splice(index, 1);
+                        controller.tree.selected.items.splice(index, 0, item);
+                    }
+                });
+            }
+            if(updateDatas[i].type === UpdateNew){
+                let newItemData, newItem;
+                let newItemId = updateDatas[i].newItemId;
+                newItemData = {id: newItemId, content: updateDatas[i].newData, code: updateDatas[i].code};
+                newItem = createObj.newItem(newItemData);
+                newItem.count = 1;
+                totalItems.items[totalItems.prefix + newItemId] = newItem;
+                totalItems.itemsArr.push(newItem);
+                var index = tools.getIndex(controller.tree.selected.items, updateDatas[i].orgItemId);
+                controller.tree.selected.items.splice(index, 1);
+                controller.tree.selected.items.splice(index, 0, newItem);
+            }
+        }
+        for(let i=0; i< createDatas.length; i++){
+            if(createDatas[i].type === CreateExist){
+                totalItems.itemsArr.forEach(item => {
+                    if(item.data.content === createDatas[i].newData){
+                        item.count ++;
+                        controller.tree.selected.jobs.push(item);
+                    }
+
+                });
+            }
+            if(createDatas[i].type === CreateNew){
+                let newItemId = createDatas[i].id;
+                let newItemData, newItem;
+                newItemData = {id: newItemId, content: createDatas[i].newData, code: createDatas[i].code};
+                newItem = createObj.newItem(newItemData);
+                newItem.count = 1;
+                totalItems.items[totalItems.prefix + newItemId] = newItem;
+                totalItems.itemsArr.push(newItem);
+                controller.tree.selected.items.push(newItem);
+            }
+        }
+        //resort&reshow
+        tools.reshowData(sheet, controller.tree.selected.items, setting, true);
+        sheetItemsDatas = tools.getsheetDatas(sheet);
+
+    },
+    pasteJobsFront: function(sheet, totalJobs, uncrossedDatas, crossedDatas){
+        let rebuildArr =[];
+        if(crossedDatas.length > 0){
+            for(let i=0; i< crossedDatas.length; i++){
+                let field = crossedDatas[i].field, data = crossedDatas[i].data;
+                let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, data, 'reference');
+                if(isRepeat){
+                    crossedDatas.splice(i--, 1);
+                }
+            }
+            for(let i=0; i< crossedDatas.length; i++){
+                let field = crossedDatas[i].field, data = crossedDatas[i].data;
+                if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
+                    crossedDatas.splice(i--, 1);
+                }
+                else {
+                    totalJobs.jobsArr.forEach(job => {
+                        if(job.data.id === crossedDatas[i].orgId){
+                            job.data[field] = crossedDatas[i].data;
+                        }
+                    });
+                }
+            }
+        }
+        if(uncrossedDatas.length > 0){
+            for(let i=0; i< uncrossedDatas.length; i++){
+                let field = uncrossedDatas[i].field;
+                let isRepeat = tools.isRepeat(totalJobs.jobsArr, field, uncrossedDatas[i].data, 'reference');
+                if(isRepeat){
+                    uncrossedDatas.splice(i--, 1);
+                }
+            }
+            for(let i=0; i< uncrossedDatas.length; i++){
+                let field = uncrossedDatas[i].field;
+                if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
+                    uncrossedDatas.splice(i--, 1);
+
+                }
+            }
+
+             rebuildArr = tools.rebuildArr(uncrossedDatas);
+            function myCompare(a, b){
+                if(a.rowIdx > b.rowIdx)
+                    return 1;
+                if(a.rowIdx < b.rowIdx)
+                    return -1;
+                return 0;
+            }
+            rebuildArr.sort(myCompare);
+            for(let i=0; i< rebuildArr.length; i++){
+                let newJobData, newJob;
+                if(rebuildArr[i].type === 'CreateT'){
+                    maxJobsNumber++;
+                    maxJobsNumber = maxJobsNumber >= rebuildArr[i].code ? maxJobsNumber : rebuildArr[i].code;
+                    let id = maxJobsNumber;
+                    rebuildArr[i].code = maxJobsNumber;
+                    rebuildArr[i].id = id;
+                    newJobData = {id: id, content: rebuildArr[i].content, code: maxJobsNumber};
+                    newJob = createObj.newJob(newJobData);
+                    totalJobs.jobsArr.push(newJob);
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
+                    maxJobsNumber++;
+                    let id = maxJobsNumber;
+                    rebuildArr[i].id = id;
+                    rebuildArr[i].code = maxJobsNumber;
+                    newJobData = {id: id, content: rebuildArr[i].data, code: maxJobsNumber};
+                    newJob = createObj.newJob(newJobData);
+                    totalJobs.jobsArr.push(newJob);
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
+                    maxJobsNumber++;
+                    maxJobsNumber = maxJobsNumber >= rebuildArr[i].data  ? maxJobsNumber : rebuildArr[i].data;
+                    let id = maxJobsNumber;
+                    rebuildArr[i].data = maxJobsNumber;
+                    rebuildArr[i].id = id;
+                    newJobData = {id: id, content: '', code: maxJobsNumber};
+                    newJob = createObj.newJob(newJobData);
+                    totalJobs.jobsArr.push(newJob);
+                }
+            }
+        }
+        tools.reshowData(sheet, totalJobs.jobsArr, totalJobsSetting, true);
+        //backendOP
+        let backendDatas = {
+            updateDatas: crossedDatas,
+            createDatas: rebuildArr
+        };
+        jobsAjax.pasteJobs(backendDatas);
+    },
+    pasteItemsFront: function(sheet, totalItems, uncrossedDatas, crossedDatas){
+        let rebuildArr =[];
+        if(crossedDatas.length > 0){
+            for(let i=0; i< crossedDatas.length; i++){
+                let field = crossedDatas[i].field, data = crossedDatas[i].data;
+                let isRepeat = tools.isRepeat(totalItems.itemsArr, field, data, 'reference');
+                if(isRepeat){
+                    crossedDatas.splice(i--, 1);
+                }
+            }
+            for(let i=0; i< crossedDatas.length; i++){
+                let field = crossedDatas[i].field, data = crossedDatas[i].data;
+                if(crossedDatas[i].field === 'code' && typeof data !== 'number' ){
+                    crossedDatas.splice(i--, 1);
+                }
+                else {
+                    totalItems.itemsArr.forEach(item => {
+                        if(item.data.id === crossedDatas[i].orgId){
+                            item.data[field] = crossedDatas[i].data;
+                        }
+                    });
+                }
+            }
+        }
+        if(uncrossedDatas.length > 0){
+            for(let i=0; i< uncrossedDatas.length; i++){
+                let field = uncrossedDatas[i].field;
+                let isRepeat = tools.isRepeat(totalItems.itemsArr, field, uncrossedDatas[i].data, 'reference');
+                if(isRepeat){
+                    uncrossedDatas.splice(i--, 1);
+                }
+            }
+            for(let i=0; i< uncrossedDatas.length; i++){
+                let field = uncrossedDatas[i].field;
+                if(uncrossedDatas[i].field === 'code' && typeof uncrossedDatas[i].data !== 'number' ){
+                    uncrossedDatas.splice(i--, 1);
+                }
+            }
+            rebuildArr = tools.rebuildArr(uncrossedDatas);
+            function myCompare(a, b){
+                if(a.rowIdx > b.rowIdx)
+                    return 1;
+                if(a.rowIdx < b.rowIdx)
+                    return -1;
+                return 0;
+            }
+            rebuildArr.sort(myCompare);
+            for(let i=0; i< rebuildArr.length; i++){
+                let newItemData, newItem;
+                if(rebuildArr[i].type === 'CreateT'){
+                    maxItemsNumber++;
+                    maxItemsNumber = maxItemsNumber >= rebuildArr[i].code ? maxItemsNumber : rebuildArr[i].code;
+                    let id = maxItemsNumber;
+                    rebuildArr[i].code = maxItemsNumber;
+                    rebuildArr[i].id = id;
+                    newItemData = {id: id, content: rebuildArr[i].content, code: maxItemsNumber};
+                    newItem = createObj.newItem(newItemData);
+                    totalItems.itemsArr.push(newItem);
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
+                    maxItemsNumber++;
+                    let id = maxItemsNumber;
+                    rebuildArr[i].id = id;
+                    rebuildArr[i].code = maxItemsNumber;
+                    newItemData = {id: id, content: rebuildArr[i].data, code: maxItemsNumber};
+                    newItem = createObj.newItem(newItemData);
+                    totalItems.itemsArr.push(newItem);
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
+                    maxItemsNumber++;
+                    maxItemsNumber = maxItemsNumber >= rebuildArr[i].data  ? maxItemsNumber : rebuildArr[i].data;
+                    let id = maxItemsNumber;
+                    rebuildArr[i].data = maxItemsNumber;
+                    rebuildArr[i].id = id;
+                    newItemData = {id: id, content: '', code: maxItemsNumber};
+                    newItem = createObj.newItem(newItemData);
+                    totalItems.itemsArr.push(newItem);
+                }
+            }
+        }
+        tools.reshowData(sheet, totalItems.itemsArr, totalItemsSetting, true);
+        //backendOP
+        let backendDatas = {
+            updateDatas: crossedDatas,
+            createDatas: rebuildArr
+        };
+        itemsAjax.pasteItems(backendDatas);
+    }
+};
 
 var jobsController = {
     editData: function(controller, sheet, totalJobs, setting){
@@ -584,20 +1145,21 @@ var jobsController = {
         });
     },
 
+
     createNew: function(sheet, controller, totalJobs, field, newData, args, setting){
         if(field === 'content'){
             maxJobsNumber++;
-            jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(id){
-                var newJobData, newJob;
-                newJobData = {id: id, content: newData, code: maxJobsNumber};
-                newJob = createObj.newJob(newJobData);
-                newJob.count = 1;
-                totalJobs.jobs[totalJobs.prefix + id] = newJob;
-                totalJobs.jobsArr.push(newJob);
-                billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', id);
-                controller.tree.selected.jobs.push(newJob);
-                tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
-            });
+            jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, maxJobsNumber);
+            var newJobData, newJob;
+            newJobData = {id: maxJobsNumber, content: newData, code: maxJobsNumber};
+            newJob = createObj.newJob(newJobData);
+            newJob.count = 1;
+            totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
+            totalJobs.jobsArr.push(newJob);
+            billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'jobs', maxJobsNumber);
+            controller.tree.selected.jobs.push(newJob);
+            tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
+
         }
         else {
             sheet.getCell(args.row, args.col).value('');
@@ -620,7 +1182,6 @@ var jobsController = {
             }
         });
     },
-
     update: function(sheet, controller, totalJobs, field, newData, id, isExist, args, setting){
         if(isExist){
             totalJobs.jobsArr.forEach(function(job){
@@ -645,19 +1206,18 @@ var jobsController = {
         else{
             if(field === 'content'){
                 maxJobsNumber++;
-                jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(newId){
-                    var newJobData, newJob;
-                    newJobData = {id: newId, content: newData, code: maxJobsNumber};
-                    newJob = createObj.newJob(newJobData);
-                    newJob.count = 1;
-                    totalJobs.jobs[totalJobs.prefix + newId] = newJob;
-                    totalJobs.jobsArr.push(newJob);
-                    billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'jobs');
-                    var index = tools.getIndex(controller.tree.selected.jobs, id);
-                    controller.tree.selected.jobs.splice(index, 1);
-                    controller.tree.selected.jobs.splice(index, 0, newJob);
-                    tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
-                });
+                jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, maxJobsNumber);
+                var newJobData, newJob;
+                newJobData = {id: maxJobsNumber, content: newData, code: maxJobsNumber};
+                newJob = createObj.newJob(newJobData);
+                newJob.count = 1;
+                totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
+                totalJobs.jobsArr.push(newJob);
+                billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, maxJobsNumber, 'update', 'jobs');
+                var index = tools.getIndex(controller.tree.selected.jobs, id);
+                controller.tree.selected.jobs.splice(index, 1);
+                controller.tree.selected.jobs.splice(index, 0, newJob);
+                tools.reshowData(sheet, controller.tree.selected.jobs, setting, true);
             }
             else {
                 //todo: 提示窗口
@@ -666,6 +1226,7 @@ var jobsController = {
                 }
                 else {
                   //编号只能是数字
+                    sheet.getCell(args.row, args.col).value('');
                 }
             }
         }
@@ -721,17 +1282,17 @@ var itemsController = {
     createNew: function(sheet, controller, totalItems, field, newData, args, setting){
         if(field === 'content'){
             maxItemsNumber++;
-            itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(id){
-                var newItemData, newItem;
-                newItemData = {id: id, content: newData, code: maxItemsNumber};
-                newItem = createObj.newItem(newItemData);
-                newItem.count = 1;
-                totalItems.items[totalItems.prefix + id] = newItem;
-                totalItems.itemsArr.push(newItem);
-                billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', id);
-                controller.tree.selected.items.push(newItem);
-                tools.reshowData(sheet, controller.tree.selected.items, setting, true);
-            });
+            let id = maxItemsNumber;
+            itemsAjax.createItemCharacter(billsLibId, newData, maxItemsNumber, id);
+            var newItemData, newItem;
+            newItemData = {id: id, content: newData, code: maxItemsNumber};
+            newItem = createObj.newItem(newItemData);
+            newItem.count = 1;
+            totalItems.items[totalItems.prefix + id] = newItem;
+            totalItems.itemsArr.push(newItem);
+            billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', id);
+            controller.tree.selected.items.push(newItem);
+            tools.reshowData(sheet, controller.tree.selected.items, setting, true);
         }
         else {
             if(typeof newData === 'number'){
@@ -739,6 +1300,7 @@ var itemsController = {
             }
             else {
                 //编号只能为数字
+                sheet.getCell(args.row, args.col).value('');
             }
         }
     },
@@ -749,8 +1311,6 @@ var itemsController = {
             if(field === 'content'&& newData === item.data.content){
                 //isExist = true;
                 billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
-                //整合
-                //tools.addAttr(controller.tree.selected.items);
                 item.count++;
                 controller.tree.selected.items.push(item);
                 tools.reshowData(sheet, controller.tree.selected.items, setting, true);
@@ -758,7 +1318,6 @@ var itemsController = {
             else if(field == 'code' && newData == item.data.code){
                 //isExist = true;
                 billsAjax.updateBills(billsLibId, controller.tree.selected.getID(), 'items', item.data.id);
-               // tools.addAttr(controller.tree.selected.items);
                 item.count++;
                 controller.tree.selected.items.push(item);
                 tools.reshowData(sheet, controller.tree.selected.items, setting, true);
@@ -774,7 +1333,6 @@ var itemsController = {
                     item.count++;
                     controller.tree.selected.items.splice(index, 1);
                     controller.tree.selected.items.splice(index, 0, item);
-                    //var newItemData = {id: item.data.id, code: newData, content: item.data.content}
                     billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
                     tools.reshowData(sheet, controller.tree.selected.items, setting, true);
                 }
@@ -783,7 +1341,6 @@ var itemsController = {
                     item.count++;
                     controller.tree.selected.items.splice(index, 1);
                     controller.tree.selected.items.splice(index, 0, item);
-                    //var newItemData = {id: item.data.id, code: item.data.code, content: newData}
                     billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, item.data.id, 'update', 'items');
                     tools.reshowData(sheet, controller.tree.selected.items, setting, true);
                 }
@@ -792,20 +1349,19 @@ var itemsController = {
         else{
             if(field === 'content'){
                 maxItemsNumber++;
-                itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(newId){
-                    var newItemData, newItem;
-                    newItemData = {id: newId, content: newData, code: maxItemsNumber};
-                    newItem = createObj.newItem(newItemData);
-                    newItem.count = 1;
-                    totalItems.items[totalItems.prefix + newId] = newItem;
-                    totalItems.itemsArr.push(newItem);
-                    billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'items');
-                 //   tools.addAttr(controller.tree.selected.items);
-                    var index = tools.getIndex(controller.tree.selected.items, id);
-                    controller.tree.selected.items.splice(index, 1);
-                    controller.tree.selected.items.splice(index, 0, newItem);
-                    tools.reshowData(sheet, controller.tree.selected.items, setting, true);
-                });
+                let newId = maxItemsNumber;
+                itemsAjax.createItemCharacter(billsLibId,newData, maxItemsNumber, newId);
+                var newItemData, newItem;
+                newItemData = {id: newId, content: newData, code: maxItemsNumber};
+                newItem = createObj.newItem(newItemData);
+                newItem.count = 1;
+                totalItems.items[totalItems.prefix + newId] = newItem;
+                totalItems.itemsArr.push(newItem);
+                billsAjax.updateBillsArr(billsLibId, controller.tree.selected.getID(), id, newId, 'update', 'items');
+                var index = tools.getIndex(controller.tree.selected.items, id);
+                controller.tree.selected.items.splice(index, 1);
+                controller.tree.selected.items.splice(index, 0, newItem);
+                tools.reshowData(sheet, controller.tree.selected.items, setting, true);
             }
             else {
                 if(typeof newData === 'number'){
@@ -813,6 +1369,7 @@ var itemsController = {
                 }
                 else {
                     //编号只能为数字
+                    sheet.getCell(args.row, args.col).value('');
                 }
             }
         }
@@ -857,6 +1414,9 @@ var valueController = {
         if(field === 'value'){
             var newCode = valueController.getCode(totalItems, id);
             newData = {code: newCode, value: newValue};
+            console.log(`newCode: ${newCode}`);
+            console.log(`id: ${id}`);
+            console.log(sheet.getActiveRowIndex());
             tools.reSetCell(sheet, sheet.getActiveRowIndex(), 0, newCode, newCode);
         }
         else {
@@ -866,10 +1426,11 @@ var valueController = {
             }
             else {
                 //编号只能为数字!
+                sheet.getCell(args.row, args.col).value('');
             }
         }
         totalItems.findItem(id).data.itemValue.push(newData);
-        itemsAjax.updateValue(id, newData, null, 'create');
+        itemsAjax.updateValue(billsLibId, id, newData, null, 'create');
     },
 
     updateValue: function(totalItems, tagId, newData, field){
@@ -887,7 +1448,7 @@ var valueController = {
                 });
                 itemVals.splice(index, 0, updateEle);
             }
-            itemsAjax.updateValue(selectedId, updateData, null, 'update');
+            itemsAjax.updateValue(billsLibId, selectedId, updateData, null, 'update');
         }
         else {
             if(typeof newData === 'number'){
@@ -903,10 +1464,11 @@ var valueController = {
                     });
                     itemVals.splice(index, 0, updateEle);
                 }
-                itemsAjax.updateValue(selectedId, updateData, null, 'update');
+                itemsAjax.updateValue(billsLibId, selectedId, updateData, null, 'update');
             }
             else {
                 //编号只能为数字!
+                sheet.getCell(args.row, args.col).value('');
             }
         }
     },
@@ -970,27 +1532,28 @@ var totalJobsController = {
     createJob: function(sheet, totalJobs, field, newData, args){
         if(field === 'content'){
             maxJobsNumber++;
-            jobsAjax.createJobContent(billsLibId, field, newData, maxJobsNumber, function(id){
+            let id = maxJobsNumber;
+            jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, id);
                 var newJobData, newJob;
                 newJobData = {id: id, content: newData, code: maxJobsNumber};
                 newJob = createObj.newJob(newJobData);
                 totalJobs.jobsArr.push(newJob);
                 tools.reSetCell(sheet, args.row, 0, maxJobsNumber, id);
-            });
         }
         else {
             if(typeof newData === 'number'){
                 maxJobsNumber = maxJobsNumber >= newData ? maxJobsNumber : newData;
-                jobsAjax.createJobContent(billsLibId, field, '', newData, function(id){
+                let id = maxJobsNumber;
+                jobsAjax.createJobContent(billsLibId, '', newData, id);
                     var newJobData, newJob;
                     newJobData = {id: id, content: '', code: newData};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
                     tools.reSetCell(sheet, args.row, 0, null, id);
-                });
             }
             else {
                 //编号只能为数字!
+                sheet.getCell(args.row, args.col).value("");
             }
         }
     },
@@ -1000,12 +1563,13 @@ var totalJobsController = {
             //编号只能为数字
         }
         else {
+            console.log(`enterupdate id: ${id}`);
             totalJobs.jobsArr.forEach(function(job){
-                if(job.data[field] === newData){
+                if(job.data.id === id){
                     job.data[field] = newData;
                 }
             });
-            jobsAjax.updateJobContent(id, field, newData);
+            jobsAjax.updateJobContent(billsLibId, id, field, newData);
         }
     }
 };
@@ -1044,7 +1608,7 @@ var totalItemsController = {
     createItem: function(sheet, totalItems, field, newData, args){
         if(field === 'content'){
             maxItemsNumber++;
-            itemsAjax.createItemCharacter(billsLibId, field, newData, maxItemsNumber, function(id){
+            itemsAjax.createItemCharacter(billsLibId, newData, maxItemsNumber, function(id){
                 var newItemData, newItem;
                 newItemData = {id: id, content: newData, code: maxItemsNumber};
                 newItem = createObj.newItem(newItemData);
@@ -1055,7 +1619,7 @@ var totalItemsController = {
         else {
             if(typeof newData === 'number'){
                 maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
-                itemsAjax.createItemCharacter(billsLibId, field, '', newData, function(id){
+                itemsAjax.createItemCharacter(billsLibId, '', newData, function(id){
                     var newItemData, newItem;
                     newItemData = {id: id, content: '', code: newData};
                     newItem = createObj.newItem(newItemData);
@@ -1065,6 +1629,7 @@ var totalItemsController = {
             }
             else {
                 //编号只能为数字
+                sheet.getCell(args.row, args.col).value("");
             }
         }
     },
@@ -1072,14 +1637,15 @@ var totalItemsController = {
     updateItem: function(totalItems, id, field, newData){
         if(field === 'code' && typeof newData !== 'number'){
             //编号只能为数字
+            sheet.getCell(args.row, args.col).value('');
         }
         else {
             totalItems.itemsArr.forEach(function(item){
-                if(item.data[field] === newData){
+                if(item.data.id === id){
                     item.data[field] = newData;
                 }
             });
-            itemsAjax.updateItemCharacter(id, field, newData);
+            itemsAjax.updateItemCharacter(billsLibId, id, field, newData);
         }
     }
 };

+ 13 - 5
web/maintain/bills_lib/scripts/set_sheets.js

@@ -9,6 +9,7 @@ var setSheet = {
         spread.options.showVerticalScrollbar =false;
         spread.options.tabStripVisible = false;
         spread.options.scrollbarMaxAlign = true;
+        spread.options.allowExtendPasteRange = true;
         sheet.showRowOutline(false);
         sheet.defaults.rowHeight = 30;
         setting.cols.forEach(function(col, colIdx){
@@ -24,7 +25,15 @@ var setSheet = {
         sheet.setStyle(-1, colIdx, style);
         sheet.options.isProtected = true;
     },
-    setMaxRowCount: function(sheet, rowCount){
+    setMaxRowCount: function(sheet, arr){
+        let rowCount;
+        let arrL = arr.length;
+        if(arrL <10){
+            rowCount = 10;
+        }
+        else {
+            rowCount = arrL + 3;
+        }
         sheet.setRowCount(rowCount, GC.Spread.Sheets.SheetArea.viewport);
     }
 }
@@ -103,7 +112,6 @@ var myKey = {
             spread.commandManager().register('myDelete', function(){
                 spread.suspendEvent();
                 var ids = tools.delIds(sheet);
-                console.log(ids);
                 tools.deleteELes(controller.tree.selected[classify], ids, function(result){
                     //deleteFrontData
                     tools.reshowData(sheet, controller.tree.selected[classify], setting, true);
@@ -152,7 +160,7 @@ var myKey = {
                         totalJobs.jobsArr.splice(totalJobs.jobsArr.indexOf(job), 1);
                     });
                     tools.reshowData(sheet, totalJobs.jobsArr, setting, true);
-                    jobsAjax.deleteJobContent(ids);
+                    jobsAjax.deleteJobContent(billsLibId, ids);
                     billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'jobs');
                 }
                 spread.resumeEvent();
@@ -172,7 +180,7 @@ var myKey = {
                         totalItems.itemsArr.splice(totalItems.itemsArr.indexOf(item), 1);
                     });
                     tools.reshowData(sheet, totalItems.itemsArr, setting, true);
-                    itemsAjax.deleteItemCharacter(ids);
+                    itemsAjax.deleteItemCharacter(billsLibId, ids);
                     billsAjax.updateBillsArr(billsLibId, billsIds, ids, null, 'deleteAll', 'items');
                     //reshowVal
                     if(totalItems.itemsArr.length > 0){
@@ -205,7 +213,7 @@ var myKey = {
                 });
                 tools.reshowValue(sheet, valsArr, setting, true);
                 //deleteDb
-                itemsAjax.updateValue(selectedId, null, ids, 'delete');
+                itemsAjax.updateValue(billsLibId, selectedId, null, ids, 'delete');
                 spread.resumeEvent();
             });
             spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);

+ 4 - 4
web/maintain/ration_repository/js/coe.js

@@ -38,7 +38,7 @@ var coeList = {
     ],
     colDefContent: [
         {name: "coeType", displayName: "类型", size: 100, hAlign: "center"},
-        {name: "gljID", displayName: "工料机ID", size: 100, hAlign: "center",formatter: "00000000"},
+        {name: "gljCode", displayName: "工料机编号", size: 100, hAlign: "center",formatter: "00000000"},
         {name: "operator", displayName: "操作符", size: 60, hAlign: "center"},
         {name: "amount", displayName: "数量", size: 80, hAlign: "right"}
     ],
@@ -51,7 +51,7 @@ var coeList = {
         me.detailSpread = sheetObj.create($('#contentSpread')[0], me.colDefContent, me.datas[0].coes);
 
         var coeType = new GC.Spread.Sheets.CellTypes.ComboBox();
-        coeType.items(["单个","全部","人工类","材料类","机械类"]);
+        coeType.items(["单个","定额","人工","材料","机械"]);
         me.detailSpread.getSheet(0).getRange(-1, 0, -1, 1).cellType(coeType);
 
         var operType = new GC.Spread.Sheets.CellTypes.ComboBox();
@@ -139,7 +139,7 @@ var coeList = {
             obj.ID = me.tempID;
             if (obj.name == undefined){obj.name = '';};     // 生成属性,令属性存储顺序一致
             if (obj.content == undefined){obj.content = '';};
-            obj.coes = [{coeType:"全部", operator:"*", amount: "0"}];
+            obj.coes = [{coeType:"定额", operator:"*", amount: "0"}];
             me.datas[row] = obj;
 
             me.save([obj],[],[]);
@@ -178,7 +178,7 @@ var coeList = {
             var curType = curDetailData.coeType;
             if (curType !== '单个'){
                 me.detailSpread.suspendPaint();
-                curDetailData.gljID = null;
+                curDetailData.gljCode = null;
                 me.detailSpread.resumePaint();
             };
 

web/maintain/templates/css/main.css → web/maintain/report/css/templates/css/main.css


+ 4 - 4
web/maintain/templates/html/bills.html

@@ -6,7 +6,7 @@
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>模板清单-Smartcost</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/web/maintain/templates/css/main.css">
+    <link rel="stylesheet" href="/web/maintain/report/css/templates/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <!--SpreadJs-->
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
@@ -87,7 +87,7 @@
 <script src="/lib/jquery/jquery.min.js"></script>
 <script src="/lib/tether/tether.min.js"></script>
 <script src="/lib/bootstrap/bootstrap.min.js"></script>
-<script src="/web/maintain/templates/js/global.js"></script>
+<script src="/web/maintain/report/css/templates/js/global.js"></script>
 <!-- SpreadJs -->
 <script type="text/javascript" src="/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
 <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
@@ -97,8 +97,8 @@
 <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_controller.js"></script>
 <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
 <!-- service -->
-<script type="text/javascript" src="/web/maintain/templates/js/bills.js"></script>
-<script type="text/javascript" src="/web/maintain/templates/js/tp_bills_setting.js"></script>
+<script type="text/javascript" src="/web/maintain/report/css/templates/js/bills.js"></script>
+<script type="text/javascript" src="/web/maintain/report/css/templates/js/tp_bills_setting.js"></script>
 <script type="text/javascript" src="/public/web/common_ajax.js"></script>
 <script>
     autoFlashHeight();

web/maintain/templates/js/bills.js → web/maintain/report/css/templates/js/bills.js


web/maintain/templates/js/global.js → web/maintain/report/css/templates/js/global.js


web/maintain/templates/js/tp_bills_setting.js → web/maintain/report/css/templates/js/tp_bills_setting.js