Jelajahi Sumber

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

TonyKang 8 tahun lalu
induk
melakukan
44aa7b6e8c

+ 8 - 2
modules/bills_lib/controllers/bills_lib_controllers.js

@@ -108,8 +108,8 @@ module.exports = {
     },
     pasteRel: function(req, res){
         let data = JSON.parse(req.body.data);
-        billsLibDao.pasteRel(data, function(err, message, datas){
-            callback(req, res, err, message, datas);
+        billsLibDao.pasteRel(data, function(err, message){
+            callback(req, res, err, message, null);
         });
     },
     deleteBills: function(req, res){
@@ -183,6 +183,12 @@ module.exports = {
         billsLibDao.pasteItems(data, function(err, message){
             callback(req, res, err, message, null);
         });
+    },
+    pasteValues: function(req, res){
+        let data = JSON.parse(req.body.data);
+        billsLibDao.pasteValues(data, function(err, message){
+            callback(req, res, err, message, null);
+        });
     }
 
 }

+ 88 - 8
modules/bills_lib/models/bills_lib_interfaces.js

@@ -16,7 +16,7 @@ billsLibDao.prototype.getMaxNumber = function(gData, callback){
     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){
+        JobContent.find({billsLibId: billsLibId}).sort({code: -1}).limit(1).exec(function(err, result){
             if(err){
                 callback(1, 'Error', null);
             }
@@ -26,7 +26,7 @@ billsLibDao.prototype.getMaxNumber = function(gData, callback){
         });
     }
     else if(field === 'items'){
-        ItemCharacter.find({billsLibId: billsLibId, deleted: false}).sort({code: -1}).limit(1).exec(function(err, result){
+        ItemCharacter.find({billsLibId: billsLibId}).sort({code: -1}).limit(1).exec(function(err, result){
             if(err){
                 callback(1, 'Error', null);
             }
@@ -425,10 +425,10 @@ billsLibDao.prototype.pasteRel = function (data, callback) {
     let success = true;
     let ueDatas = [], unDatas = [], ceDatas = [], cnDatas = [];
     let frontDatas ;
-    let pasteDatas = data.pasteDatas;
+    //let pasteDatas = data.pasteDatas;
     let field = data.field;
-    let updateDatas = pasteDatas.updateDatas;
-    let createDatas = pasteDatas.createDatas;
+    let updateDatas = data.updateDatas;
+    let createDatas = data.createDatas;
     const Jobs = 'jobs', Items = 'items';
     if(field === Jobs){
         if(updateDatas.length > 0){
@@ -624,6 +624,7 @@ billsLibDao.prototype.pasteRel = function (data, callback) {
         }
 
     }
+    callback(0, '');
 };
 
 billsLibDao.prototype.deleteBills = function(delData, callback){
@@ -715,11 +716,13 @@ billsLibDao.prototype.deleteJobContent = function(data, callback){
     let billsLibId = data.billsLibId;
     let success = true;
     delIds.forEach(function(id){
-        JobContent.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err){
+        JobContent.update({billsLibId: billsLibId, id: id}, {$set: {deleted: true}}, function(err,result){
             if(err){
                 success = false;
                 callback(1, 'Error');
             }
+            else {
+            }
         });
     });
 }
@@ -754,7 +757,6 @@ billsLibDao.prototype.pasteJobs = function (data, callback) {
             let billsLibId = createDatas[i].billsLibId, id = createDatas[i].id,
                 code , content;
             let jobObj;
-
             if(createDatas[i].type === 'CreateT'){
                 jobObj = {
                     billsLibId: billsLibId,
@@ -884,11 +886,13 @@ billsLibDao.prototype.updateValue = function(uData, callback){
             });
         }
         else {
-            ItemCharacter.update({billsLibId: billsLibId, 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,result){
                 if(err){
                     callback(1, 'Error');
                 }
                 else{
+                    console.log(`suc`);
+                    console.log(result);
                     callback(0, '');
                 }
             });
@@ -996,6 +1000,82 @@ billsLibDao.prototype.pasteItems = function (data, callback) {
     }
 
 };
+
+billsLibDao.prototype.pasteValues = function(data, callback) {
+    let pasteDatas = data.pasteDatas;
+    let updateDatas = pasteDatas.updateDatas, createDatas = pasteDatas.createDatas;
+    console.log(`test`);
+    if (updateDatas.length > 0) {
+        for (let i = 0; i < updateDatas.length; i++) {
+            let billsLibId = updateDatas[i].billsLibId, itemId = updateDatas[i].itemId, orgCode = updateDatas[i].orgId;
+            console.log(`i = ${i}`);
+            if (updateDatas[i].type === 'UpdateT') {
+                console.log(`UpdateT`);
+                let valueObj = {code: updateDatas[i].code, value: updateDatas[i].content};
+                ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$pull: {itemValue: {code: orgCode}}}, function (err) {
+                    if (err) {
+                    } else {
+                        ItemCharacter.update({billsLibId: billsLibId, id: itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
+                            if (err) {
+                            }
+                        });
+                    }
+                });
+            }
+            else if (updateDatas[i].type === 'Update' && updateDatas[i].field === 'code') {
+                console.log(`UpdateCode`);
+                ItemCharacter.update({billsLibId: billsLibId, id: itemId, 'itemValue.code': orgCode},
+                    {$set: {'itemValue.$.code': updateDatas[i].data}}, function (err) {
+                            if(err){
+                            }
+                    });
+            }
+            else {
+                console.log(`UpdateValue`);
+                console.log(`billsLibId: ${updateDatas[i].billsLibId} itemId: ${updateDatas[i].itemId} updateCode: ${updateDatas[i].orgId} value: ${updateDatas[i].data}`);
+                ItemCharacter.update({billsLIbId: billsLibId, id: itemId, 'itemValue.code': orgCode}, {$set: {'itemValue.$.value': updateDatas[i].data}}, function(err, result){
+                        if(err){
+                            console.log(`Error`);
+                        }
+                        else {
+                            console.log(`success`);
+                            console.log(result);
+                        }
+                    });
+            }
+        }
+    }
+    if(createDatas.length >0){
+        for(let i=0; i< createDatas.length; i++){
+            let valueObj
+            if(createDatas[i].type === 'CreateT'){
+                console.log(`CreateT`);
+                 valueObj = {code: createDatas[i].code, value: createDatas[i].content};
+                ItemCharacter.update({billsLibId: createDatas[i].billsLibId, id: createDatas[i].itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
+                    if (err) {
+                    }
+                });
+            }
+            else if(createDatas[i].type === 'Create' && createDatas[i].field === 'code'){
+                console.log(`Create code`);
+                valueObj = {code: createDatas[i].data, value: ''};
+                ItemCharacter.update({billsLibId: createDatas[i].billsLibId, id: createDatas[i].itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
+                    if (err) {
+                    }
+                });
+            }
+            else {
+                console.log(`Create value`);
+                valueObj = {code: createDatas[i].code, value: createDatas[i].data};
+                ItemCharacter.update({billsLibId: createDatas[i].billsLibId, id: createDatas[i].itemId}, {$addToSet: {itemValue: valueObj}}, function (err) {
+                    if (err) {
+                    }
+                });
+            }
+        }
+    }
+    callback(0, '');
+};
 //
 
 

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

@@ -33,5 +33,6 @@ billsRouter.post("/updateItemCharacter", billsController.updateItemCharacter);
 billsRouter.post("/updateValue", billsController.updateValue);
 billsRouter.post("/deleteItemCharacter", billsController.deleteItemCharacter);
 billsRouter.post("/pasteItems", billsController.pasteItems);
+billsRouter.post("/pasteValues", billsController.pasteValues);
 
 module.exports = billsRouter;

+ 2 - 0
web/maintain/bills_lib/html/neirong.html

@@ -166,6 +166,7 @@
     </div>
     <!-- JS. -->
     <script 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>
     <script src="/lib/jquery/jquery.min.js"></script>
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
@@ -182,6 +183,7 @@
         let spreadAllJobs = new GC.Spread.Sheets.Workbook($('#spreadAllJobs')[0], {sheetCount: 1});
         let orgJobData;
         let maxJobNumer;
+        let maxJobsNumber;
         let sheetJobsDatas;
         $(document).ready(function(){
             $('#aStdBills').attr('href', function(){

+ 2 - 1
web/maintain/bills_lib/html/qingdan.html

@@ -211,6 +211,7 @@
     </div>
     <!-- JS. -->
     <script 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>
     <script src="/lib/jquery/jquery.min.js"></script>
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
@@ -503,7 +504,7 @@
                     }
                 }
                 let pasteDatas = tools.encapData(uncrossedDatas, crossedDatas, controller, totalJobs);
-                billsAjax.pasteRel(pasteDatas, 'jobs');
+                billsAjax.pasteRel(pasteDatas.updateDatas, pasteDatas.createDatas, 'jobs');
                 pasteController.frontOperator(sheet, setting, controller, totalJobs, pasteDatas);
             }
             else {

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

@@ -167,6 +167,7 @@
     </div>
     <!-- JS. -->
     <script 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>
     <script src="/lib/jquery/jquery.min.js"></script>
     <script src="/lib/tether/tether.min.js"></script>
     <script src="/lib/bootstrap/bootstrap.min.js"></script>
@@ -188,6 +189,7 @@
         let orgItemData;
         let maxItemsNumber;
         let totalItemsDatas;
+        let valueDatas;
   		$(document).ready(function(){
             $('#aStdBills').attr('href', function(){
                 return 'stdBills?billsLibId=' + billsLibId;
@@ -230,6 +232,7 @@
                     myKey.delKey(spreadVal, null, totalItems, eigenValueSetting, 'itemValue');
                     bindSheet(totalItems, spread.getActiveSheet(), spreadVal.getActiveSheet(), totalItemsSetting);
                     pasteItems(spread.getActiveSheet(), totalItems);
+                    pasteValue(spreadVal.getActiveSheet(), totalItems);
                 });
             });
         }
@@ -261,7 +264,9 @@
                     let valueArr = valueController.getValues(totalItems, itemId);
                     tools.clearData(valueSheet);
                     selectedId = itemId;
-                    tools.reshowValue(valueSheet, valueArr, eigenValueSetting, true);
+                    if(valueArr){
+                        tools.reshowValue(valueSheet, valueArr, eigenValueSetting, true);
+                    }
                     orgValue = valueSheet.getValue(0, 0);
                 }
                 else {
@@ -330,6 +335,59 @@
             });
         }
 
+        function pasteValue(sheet, totalItems){
+            //valueDatas = tools.getsheetDatas(sheet, 'total');
+            sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
+                valueDatas = tools.getsheetDatas(sheet, 'total');
+                console.log(valueDatas);
+                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' : 'value';
+                        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;
+                    valueDatas.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.pasteValueFront(sheet, totalItems, uncrossedDatas, crossedDatas);
+            });
+        }
+
   	</SCRIPT>
 </body>
 <script type="text/javascript">

+ 13 - 2
web/maintain/bills_lib/scripts/bills_lib_ajax.js

@@ -246,11 +246,11 @@ var billsAjax = {
             }
         });
     },
-    pasteRel: function (pasteDatas, field, callback) {
+    pasteRel: function (updateDatas, createDatas, field, callback) {
         $.ajax({
             type: 'post',
             url: 'stdBillsEditor/pasteRel',
-            data: {data:JSON.stringify({pasteDatas: pasteDatas, field: field})},
+            data: {data:JSON.stringify({updateDatas: updateDatas, createDatas: createDatas, field: field})},
             dataType: 'json',
             success: function(result){
                 if(!result.error && callback){
@@ -405,6 +405,17 @@ var itemsAjax = {
             }
 
         });
+    },
+    pasteValues: function(pasteDatas){
+        $.ajax({
+            type: 'post',
+            url: 'stdBillsEditor/pasteValues',
+            data: {data: JSON.stringify({pasteDatas: pasteDatas})},
+            dataType: 'json',
+            success: function(result){
+
+            }
+        });
     }
 }
 

+ 228 - 61
web/maintain/bills_lib/scripts/db_controller.js

@@ -366,7 +366,7 @@ var tools = {
     },
 
     reSetCell: function(sheet, rowIdx, colIdx, value, id){
-        if(value && colIdx){
+        if(value && colIdx!== null){
             console.log(`enterResetCell`);
             sheet.getCell(rowIdx, colIdx, GC.Spread.Sheets.SheetArea.viewport).value(value);
         }
@@ -384,6 +384,19 @@ var tools = {
         return index;
     },
 
+    getNewCode: function(totalObj, classify){
+        let arr;
+        if(classify === 'jobs'){
+            arr = totalObj.jobsArr;
+        }
+        else {
+            arr = totalObj.itemsArr;
+        }
+        tools.resort(arr, 'code', false);
+        return arr.length > 0 ? arr[arr.length - 1].data.code : 0;
+
+    },
+
     delteSheets: function(controller, totalJobs, totalItems, jobsSheet, itemsSheet){
         var delJobs = controller.tree.selected.jobs;
         var delItems = controller.tree.selected.items;
@@ -437,8 +450,6 @@ var tools = {
     },
 
     resort: function(arr, attr, isValue){
-        console.log(`enterresort`);
-       //var arr = node.jobs;
        function compare(attr){
            return function (a, b){
                var valA, valB;
@@ -455,9 +466,7 @@ 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}`);
@@ -760,7 +769,7 @@ var tools = {
         };
         return pasteDatas;
     },
-    rebuildArr: function(arr){
+    rebuildArr: function(arr, classify){
         let conformDatas = [];
         let flag = true;
         for(let i=0; i< arr.length; i++){
@@ -769,22 +778,46 @@ var tools = {
                     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'
+                    if(classify === 'create'){
+                        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'
+                            }
                         }
                     }
                     else {
-                        conformData = {
-                            billsLIbId: billsLibId,
-                            code: arr[j].data,
-                            content: arr[i].data,
-                            rowIdx: arr[i].rowIdx,
-                            type: 'CreateT'
+                        if(field === 'code'){
+                            conformData = {
+                                billsLibId: billsLibId,
+                                code: arr[i].data,
+                                content: arr[j].data,
+                                rowIdx: arr[i].rowIdx,
+                                orgId: arr[i].orgId,
+                                type: 'UpdateT'
+                            }
+                        }
+                        else {
+                            conformData = {
+                                billsLIbId: billsLibId,
+                                code: arr[j].data,
+                                content: arr[i].data,
+                                rowIdx: arr[i].rowIdx,
+                                orgId: arr[i].orgId,
+                                type: 'UpdateT'
+                            }
                         }
                     }
                     conformDatas.push(conformData);
@@ -810,10 +843,6 @@ var tools = {
 };
 
 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;
@@ -961,7 +990,7 @@ let pasteController = {
                 }
             }
 
-             rebuildArr = tools.rebuildArr(uncrossedDatas);
+             rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
             function myCompare(a, b){
                 if(a.rowIdx > b.rowIdx)
                     return 1;
@@ -976,18 +1005,20 @@ let pasteController = {
                     maxJobsNumber++;
                     maxJobsNumber = maxJobsNumber >= rebuildArr[i].code ? maxJobsNumber : rebuildArr[i].code;
                     let id = maxJobsNumber;
-                    rebuildArr[i].code = maxJobsNumber;
+                    //rebuildArr[i].code = maxJobsNumber;
                     rebuildArr[i].id = id;
-                    newJobData = {id: id, content: rebuildArr[i].content, code: maxJobsNumber};
+                    newJobData = {id: id, content: rebuildArr[i].content, code: rebuildArr[i].code};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
                 }
                 if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
                     maxJobsNumber++;
                     let id = maxJobsNumber;
+                    let code = tools.getNewCode(totalJobs, 'jobs');
+                    code++;
                     rebuildArr[i].id = id;
-                    rebuildArr[i].code = maxJobsNumber;
-                    newJobData = {id: id, content: rebuildArr[i].data, code: maxJobsNumber};
+                    rebuildArr[i].code = code;
+                    newJobData = {id: id, content: rebuildArr[i].data, code: code};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
                 }
@@ -995,9 +1026,9 @@ let pasteController = {
                     maxJobsNumber++;
                     maxJobsNumber = maxJobsNumber >= rebuildArr[i].data  ? maxJobsNumber : rebuildArr[i].data;
                     let id = maxJobsNumber;
-                    rebuildArr[i].data = maxJobsNumber;
+                   // rebuildArr[i].data = maxJobsNumber;
                     rebuildArr[i].id = id;
-                    newJobData = {id: id, content: '', code: maxJobsNumber};
+                    newJobData = {id: id, content: '', code: rebuildArr[i].data};
                     newJob = createObj.newJob(newJobData);
                     totalJobs.jobsArr.push(newJob);
                 }
@@ -1049,7 +1080,7 @@ let pasteController = {
                     uncrossedDatas.splice(i--, 1);
                 }
             }
-            rebuildArr = tools.rebuildArr(uncrossedDatas);
+            rebuildArr = tools.rebuildArr(uncrossedDatas, 'create');
             function myCompare(a, b){
                 if(a.rowIdx > b.rowIdx)
                     return 1;
@@ -1064,30 +1095,33 @@ let pasteController = {
                     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};
+                    newItemData = {id: id, content: rebuildArr[i].content, code: rebuildArr[i].code, itemValue:[]};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
+                    totalItems.items[totalItems.prefix + id] = newItem;
                 }
                 if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'content'){
                     maxItemsNumber++;
                     let id = maxItemsNumber;
+                    let code = tools.getNewCode(totalItems, 'items');
+                    code++;
                     rebuildArr[i].id = id;
-                    rebuildArr[i].code = maxItemsNumber;
-                    newItemData = {id: id, content: rebuildArr[i].data, code: maxItemsNumber};
+                    rebuildArr[i].code = code;
+                    newItemData = {id: id, content: rebuildArr[i].data, code: code, itemValue:[]};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
+                    totalItems.items[totalItems.prefix + id] = 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};
+                    newItemData = {id: id, content: '', code: rebuildArr[i].data};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
+                    totalItems.items[totalItems.prefix + id] = newItem;
                 }
             }
         }
@@ -1098,6 +1132,121 @@ let pasteController = {
             createDatas: rebuildArr
         };
         itemsAjax.pasteItems(backendDatas);
+    },
+
+    pasteValueFront: function(sheet, totalItems, uncrossedDatas, crossedDatas){
+        let rebuildArr =[];
+        let rebuildUpdateDatas = [];
+        let backendUpdateDatas = [];
+        let valuesArr = valueController.getValues(totalItems, selectedId);
+        function myCompare(a, b){
+            if(a.rowIdx > b.rowIdx)
+                return 1;
+            if(a.rowIdx < b.rowIdx)
+                return -1;
+            return 0;
+        }
+        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(valuesArr, field, data, 'document');
+                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);
+                }
+            }
+            rebuildUpdateDatas = tools.rebuildArr(crossedDatas, 'update');
+            rebuildUpdateDatas.sort(myCompare);
+            for(let i =0; i< rebuildUpdateDatas.length; i++){
+                rebuildUpdateDatas[i].itemId = selectedId;
+                let index;
+                if(rebuildUpdateDatas[i].type === 'UpdateT'){
+                    if(valuesArr){
+                        for(let j=0; j< valuesArr.length; j++){
+                            if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
+                                index = j;
+                                valuesArr.splice(j--, 1);
+                            }
+                        }
+                        let updateEle = {code: rebuildUpdateDatas[i].code, value: rebuildUpdateDatas[i].content};
+                        valuesArr.splice(index, 0, updateEle);
+                    }
+                }
+                if(rebuildUpdateDatas[i].type !== 'UpdateT' && rebuildUpdateDatas[i].field === 'code'){
+                    if(valuesArr){
+                        for(let j=0; j< valuesArr.length; j++){
+                            if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
+                                valuesArr[j].code = rebuildUpdateDatas[i].data;
+                            }
+                        }
+                    }
+                }
+                if(rebuildUpdateDatas[i].type !== 'UpdateT' && rebuildUpdateDatas[i].field === 'value'){
+                    if(valuesArr){
+                        for(let j=0; j< valuesArr.length; j++){
+                            if(rebuildUpdateDatas[i].orgId === valuesArr[j].code){
+                                valuesArr[j].value = rebuildUpdateDatas[i].data
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if(uncrossedDatas.length > 0){
+            for(let i=0; i< uncrossedDatas.length; i++){
+                let field = uncrossedDatas[i].field;
+                let isRepeat = tools.isRepeat(valuesArr, field, uncrossedDatas[i].data, 'document');
+                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, 'create');
+            rebuildArr.sort(myCompare);
+            for(let i=0; i< rebuildArr.length; i++){
+                let newValueData, newValue;
+                let newCode = valueController.getCode(totalItems, selectedId);
+                if(rebuildArr[i].type === 'CreateT'){
+                    rebuildArr[i].itemId = selectedId;
+                    newValueData = {value: rebuildArr[i].content, code: rebuildArr[i].code};
+                    valuesArr.push(newValueData);
+
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'value'){
+                    rebuildArr[i].itemId = selectedId;
+                    rebuildArr[i].code = newCode;
+                    newValueData = {value: rebuildArr[i].data, code: newCode};
+                    valuesArr.push(newValueData);
+                }
+                if(rebuildArr[i].type !== 'CreateT' && rebuildArr[i].field === 'code'){
+                    //newCode = newCode >= rebuildArr[i].data  ? newCode : rebuildArr[i].data;
+                    //rebuildArr[i].data = newCode;
+                    rebuildArr[i].itemId = selectedId;
+                    newValueData = {value: '', code: rebuildArr[i].data};
+                    valuesArr.push(newValueData);
+                }
+            }
+        }
+        tools.reshowValue(sheet, valuesArr, eigenValueSetting, true);
+        //backendOP
+        let backendDatas = {
+            updateDatas: rebuildUpdateDatas,
+            createDatas: rebuildArr
+        };
+        if(rebuildUpdateDatas.length >0 || rebuildArr.length >0){
+            itemsAjax.pasteValues(backendDatas);
+        }
+
     }
 };
 
@@ -1149,9 +1298,12 @@ var jobsController = {
     createNew: function(sheet, controller, totalJobs, field, newData, args, setting){
         if(field === 'content'){
             maxJobsNumber++;
-            jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, maxJobsNumber);
+            let code = tools.getNewCode(totalJobs, 'jobs');
+            code++;
+            console.log(`code:: ${code}`);
+            jobsAjax.createJobContent(billsLibId, newData, code, maxJobsNumber);
             var newJobData, newJob;
-            newJobData = {id: maxJobsNumber, content: newData, code: maxJobsNumber};
+            newJobData = {id: maxJobsNumber, content: newData, code: code};
             newJob = createObj.newJob(newJobData);
             newJob.count = 1;
             totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
@@ -1206,9 +1358,11 @@ var jobsController = {
         else{
             if(field === 'content'){
                 maxJobsNumber++;
-                jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, maxJobsNumber);
+                let code = tools.getNewCode(totalJobs, 'jobs');
+                code++;
+                jobsAjax.createJobContent(billsLibId, newData, code, maxJobsNumber);
                 var newJobData, newJob;
-                newJobData = {id: maxJobsNumber, content: newData, code: maxJobsNumber};
+                newJobData = {id: maxJobsNumber, content: newData, code: code};
                 newJob = createObj.newJob(newJobData);
                 newJob.count = 1;
                 totalJobs.jobs[totalJobs.prefix + maxJobsNumber] = newJob;
@@ -1283,9 +1437,11 @@ var itemsController = {
         if(field === 'content'){
             maxItemsNumber++;
             let id = maxItemsNumber;
-            itemsAjax.createItemCharacter(billsLibId, newData, maxItemsNumber, id);
+            let code = tools.getNewCode(totalItems, 'items');
+            code++;
+            itemsAjax.createItemCharacter(billsLibId, newData, code, id);
             var newItemData, newItem;
-            newItemData = {id: id, content: newData, code: maxItemsNumber};
+            newItemData = {id: id, content: newData, code: code};
             newItem = createObj.newItem(newItemData);
             newItem.count = 1;
             totalItems.items[totalItems.prefix + id] = newItem;
@@ -1350,9 +1506,11 @@ var itemsController = {
             if(field === 'content'){
                 maxItemsNumber++;
                 let newId = maxItemsNumber;
-                itemsAjax.createItemCharacter(billsLibId,newData, maxItemsNumber, newId);
+                let code = tools.getNewCode(totalItems, 'items');
+                code++;
+                itemsAjax.createItemCharacter(billsLibId,newData, code, newId);
                 var newItemData, newItem;
-                newItemData = {id: newId, content: newData, code: maxItemsNumber};
+                newItemData = {id: newId, content: newData, code: code};
                 newItem = createObj.newItem(newItemData);
                 newItem.count = 1;
                 totalItems.items[totalItems.prefix + newId] = newItem;
@@ -1408,15 +1566,11 @@ var valueController = {
             }
         });
     },
-
     createValue: function(sheet, totalItems, id, field, newValue){
         var newData;
         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 {
@@ -1429,6 +1583,8 @@ var valueController = {
                 sheet.getCell(args.row, args.col).value('');
             }
         }
+        console.log(`finItem`);
+        console.log(totalItems.findItem(id).data);
         totalItems.findItem(id).data.itemValue.push(newData);
         itemsAjax.updateValue(billsLibId, id, newData, null, 'create');
     },
@@ -1484,8 +1640,13 @@ var valueController = {
 
     getCode: function(totalItems, id){
         var valArr = totalItems.findItem(id).data.itemValue;
-        tools.resort(valArr, 'code', true);
-        return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1;
+        if(valArr){
+            tools.resort(valArr, 'code', true);
+            return valArr.length > 0 ? valArr[valArr.length - 1].code + 1 : 1;
+        }else {
+            return 1;
+        }
+
     },
 
     isRepeat: function(arr, newValue){
@@ -1533,12 +1694,14 @@ var totalJobsController = {
         if(field === 'content'){
             maxJobsNumber++;
             let id = maxJobsNumber;
-            jobsAjax.createJobContent(billsLibId, newData, maxJobsNumber, id);
+            let code = tools.getNewCode(totalJobs, 'jobs');
+            code++;
+            jobsAjax.createJobContent(billsLibId, newData, code, id);
                 var newJobData, newJob;
-                newJobData = {id: id, content: newData, code: maxJobsNumber};
+                newJobData = {id: id, content: newData, code: code};
                 newJob = createObj.newJob(newJobData);
                 totalJobs.jobsArr.push(newJob);
-                tools.reSetCell(sheet, args.row, 0, maxJobsNumber, id);
+                tools.reSetCell(sheet, args.row, 0, code, id);
         }
         else {
             if(typeof newData === 'number'){
@@ -1608,24 +1771,28 @@ var totalItemsController = {
     createItem: function(sheet, totalItems, field, newData, args){
         if(field === 'content'){
             maxItemsNumber++;
-            itemsAjax.createItemCharacter(billsLibId, newData, maxItemsNumber, function(id){
+            let id = maxItemsNumber;
+            let code = tools.getNewCode(totalItems, 'items');
+            code++;
+            itemsAjax.createItemCharacter(billsLibId, newData, code, id);
                 var newItemData, newItem;
-                newItemData = {id: id, content: newData, code: maxItemsNumber};
+                newItemData = {id: id, content: newData, code: code, itemValue: []};
                 newItem = createObj.newItem(newItemData);
                 totalItems.itemsArr.push(newItem);
-                tools.reSetCell(sheet, args.row, 0, maxItemsNumber, id);
-            });
+                totalItems.items[totalItems.prefix + id] = newItem;
+                tools.reSetCell(sheet, args.row, 0, code, id);
         }
         else {
             if(typeof newData === 'number'){
                 maxItemsNumber = maxItemsNumber >= newData ? maxItemsNumber : newData;
-                itemsAjax.createItemCharacter(billsLibId, '', newData, function(id){
+                let id = maxItemsNumber;
+                itemsAjax.createItemCharacter(billsLibId, '', newData, id);
                     var newItemData, newItem;
-                    newItemData = {id: id, content: '', code: newData};
+                    newItemData = {id: id, content: '', code: newData, itemValue: []};
                     newItem = createObj.newItem(newItemData);
                     totalItems.itemsArr.push(newItem);
+                     totalItems.items[totalItems.prefix + id] = newItem;
                     tools.reSetCell(sheet, args.row, 0, null, id);
-                });
             }
             else {
                 //编号只能为数字