Jelajahi Sumber

清单库路由权限、用户校验

zhongzewei 8 tahun lalu
induk
melakukan
f52778d771

+ 59 - 0
modules/bills_lib/controllers/bills_permissionController.js

@@ -0,0 +1,59 @@
+/**标准清单操作相关
+ * Created by Zhong on 2017/8/2.
+ */
+let billsController = require("./bills_lib_controllers");
+import baseController from "../../common/base/base_controller";
+
+class billsPermContr extends baseController{
+    getCurrentUniqId(req, res){
+        billsController.getCurrentUniqId(req, res);
+    }
+    getBills(req, res){
+        billsController.getBills(req, res);
+    }
+    createBills(req, res){
+        billsController.createBills(req, res);
+    }
+    updatePNId(req, res){
+        billsController.updatePNId(req, res);
+    }
+    upMove(req, res){
+        billsController.upMove(req, res);
+    }
+    downMove(req, res){
+        billsController.downMove(req, res);
+    }
+    upLevel(req, res){
+        billsController.upLevel(req, res);
+    }
+    downLevel(req, res){
+        billsController.downLevel(req, res);
+    }
+    updateBills(req, res){
+        billsController.updateBills(req, res);
+    }
+    updateBillsArr(req, res){
+        billsController.updateBillsArr(req, res);
+    }
+    removeTotal(req, res){
+        billsController.removeTotal(req, res);
+    }
+    updateSerialNo(req, res){
+        billsController.updateSerialNo(req, res);
+    }
+    pasteBills(req, res){
+        billsController.pasteBills(req, res);
+    }
+    updateRecharge(req, res){
+        billsController.updateRecharge(req, res);
+    }
+    pasteRel(req, res){
+        billsController.pasteRel(req, res);
+    }
+    deleteBills(req, res){
+        billsController.deleteBills(req, res);
+    }
+
+}
+
+export default billsPermContr;

+ 39 - 0
modules/bills_lib/controllers/items_permissionController.js

@@ -0,0 +1,39 @@
+/**
+ * Created by Zhong on 2017/8/2.
+ */
+
+let billsController = require("./bills_lib_controllers");
+import baseController from "../../common/base/base_controller";
+
+class itemsPermContr extends baseController{
+
+    getItemCharacter(req, res){
+        billsController.getItemCharacter(req, res);
+    }
+    createItemCharacter(req, res){
+        billsController.createItemCharacter(req, res);
+    }
+    updateItemCharacter(req, res){
+        billsController.updateItemCharacter(req, res);
+    }
+    updateValue(req, res){
+        billsController.updateValue(req, res);
+    }
+    deleteItemCharacter(req, res){
+        billsController.deleteItemCharacter(req, res);
+    }
+    pasteItems(req, res){
+        billsController.pasteItems(req, res);
+    }
+    pasteValues(req, res){
+        billsController.pasteValues(req, res);
+    }
+    edCreateItem(req, res){
+        billsController.edCreateItem(req, res);
+    }
+    edUpdateItem(req, res){
+        billsController.edUpdateItem(req, res);
+    }
+}
+
+export default itemsPermContr;

+ 33 - 0
modules/bills_lib/controllers/jobs_permissionController.js

@@ -0,0 +1,33 @@
+/**
+ * Created by Zhong on 2017/8/2.
+ */
+
+let billsController = require("./bills_lib_controllers");
+import baseController from "../../common/base/base_controller";
+
+class jobsPermContr extends baseController{
+
+    getJobContent(req, res){
+        billsController.getJobContent(req, res);
+    }
+    createJobContent(req, res){
+        billsController.createJobContent(req, res);
+    }
+    updateJobContent(req, res){
+        billsController.updateJobContent(req, res);
+    }
+    deleteJobContent(req, res){
+        billsController.deleteJobContent(req, res);
+    }
+    pasteJobs(req, res){
+        billsController.pasteJobs(req, res);
+    }
+    edCreateJob(req, res){
+        billsController.edCreateJob(req, res);
+    }
+    edUpdateJob(req, res){
+        billsController.edUpdateJob(req, res);
+    }
+}
+
+export default jobsPermContr;

+ 33 - 0
modules/bills_lib/controllers/stdBillsLib_permissionController.js

@@ -0,0 +1,33 @@
+/**清单编辑器清单库操作相关
+ * Created by Zhong on 2017/8/2.
+ */
+let billsController = require("./bills_lib_controllers");
+import baseController from "../../common/base/base_controller";
+
+class billsLibPermContr extends baseController{
+    getMaxNumber(req, res){
+        billsController.getMaxNumber(req, res);
+    }
+    getABillsLib(req, res){
+        billsController.getABillsLib(req, res);
+    }
+    getStdBillsLib(req, res){
+        billsController.getStdBillsLib(req, res);
+    }
+    createStdBillsLib(req, res){
+        billsController.createStdBillsLib(req, res);
+    }
+    deleteStdBillsLib(req, res){
+        billsController.deleteStdBillsLib(req, res);
+    }
+    renameStdBillsLib(req, res){
+        billsController.renameStdBillsLib(req, res);
+    }
+    getStdBillsLibName(req, res){
+        billsController.getStdBillsLibName(req, res);
+    }
+
+}
+
+export default billsLibPermContr;
+

+ 24 - 0
modules/bills_lib/controllers/views_permissionController.js

@@ -0,0 +1,24 @@
+/**
+ * 清单编辑器页面权限管理和session校验
+ * Created by Zhong on 2017/8/2.
+ */
+import baseController from "../../common/base/base_controller";
+
+class viewsPermContr extends baseController{
+    redirectStdBillsMain(req, res){
+        res.render("maintain/bills_lib/html/main.html",
+            {userAccount: req.session.managerData.username,
+                userID: req.session.managerData.userID});
+    }
+    redirectStdBills(req, res){
+        res.render("maintain/bills_lib/html/qingdan.html");
+    }
+    redirectStdJobs(req, res){
+        res.render('maintain/bills_lib/html/neirong.html');
+    }
+    redirectStdItems(req, res){
+        res.render('maintain/bills_lib/html/tezheng.html');
+    }
+}
+
+export default viewsPermContr;

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

@@ -51,8 +51,8 @@ billsLibDao.prototype.getABillsLib = function(data, callback){
 
 
 billsLibDao.prototype.getStdBillsLib = function(data, callback){
-    let userId = data.userId;
-    StdBillsLib.find({userId: userId, deleted: false}, "-_id", function(err, data){
+   // let userId = data.userId;
+    StdBillsLib.find({deleted: false}, "-_id", function(err, data){
         if(err){
             callback(1, "Error", null);
         }

+ 3 - 0
modules/bills_lib/models/bills_lib_schemas.js

@@ -2,8 +2,11 @@ let mongoose = require('mongoose');
 
 let stdBillsLibSchema =mongoose.Schema({
     userId: String,
+    creator: String,
+    lastOperator: String,
     billsLibId: Number,
     billsLibName: String,
+    lastOperateDate: Date,
     createDate: Date,
     localeType: Number,
     deleted: Boolean

+ 54 - 55
modules/bills_lib/routes/bills_lib_routes.js

@@ -2,68 +2,67 @@
  * Created by vian on 2017/3/17.
  */
 let express = require("express");
-let billsController = require("./../controllers/bills_lib_controllers");
 let billsRouter =express.Router();
+import ViewsPermContr from "../controllers/views_permissionController";
+import BillsLibPermContr from "../controllers/stdBillsLib_permissionController";
+import BillsPermContr from "../controllers/bills_permissionController";
+import JobsPermContr from "../controllers/jobs_permissionController";
+import ItemsPermContr from "../controllers/items_permissionController";
+let viewsContr = new ViewsPermContr();
+let billsLibContr = new BillsLibPermContr();
+let billsContr = new BillsPermContr();
+let jobsContr = new JobsPermContr();
+let itemsContr = new ItemsPermContr();
 
-module.exports =function (app) {
 
-    app.get("/stdBillsmain", function(req, res){
-        res.render("maintain/bills_lib/html/main.html",
-            {userAccount: req.session.managerData.username,
-                userID: req.session.managerData.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');
-    });
+module.exports =function (app) {
+    app.get("/stdBillsmain", viewsContr.auth, viewsContr.init, viewsContr.redirectStdBillsMain);
+     app.get("/stdBills", viewsContr.auth, viewsContr.init, viewsContr.redirectStdBills);
+     app.get('/stdJobs', viewsContr.auth, viewsContr.init, viewsContr.redirectStdJobs);
+     app.get('/stdItems', viewsContr.auth, viewsContr.init, viewsContr.redirectStdItems);
 
-    billsRouter.post('/getMaxNumber', billsController.getMaxNumber);
-    billsRouter.post('/getABillsLib', billsController.getABillsLib);
-    billsRouter.post("/getStdBillsLib", billsController.getStdBillsLib);
-    billsRouter.post("/createStdBillsLib", billsController.createStdBillsLib);
+     billsRouter.post('/getMaxNumber', billsLibContr.auth, billsLibContr.init, billsLibContr.getMaxNumber);
+     billsRouter.post('/getABillsLib', billsLibContr.auth, billsLibContr.init, billsLibContr.getABillsLib);
+     billsRouter.post("/getStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.getStdBillsLib);
+     billsRouter.post("/createStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.createStdBillsLib);
+    billsRouter.post("/deleteStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.deleteStdBillsLib);
+    billsRouter.post("/renameStdBillsLib", billsLibContr.auth, billsLibContr.init, billsLibContr.renameStdBillsLib);
+    billsRouter.post("/getStdBillsLibName", billsLibContr.auth, billsLibContr.init, billsLibContr.getStdBillsLibName);
 
-    billsRouter.post("/upMove", billsController.upMove);
-    billsRouter.post("/downMove", billsController.downMove);
-    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);
-    billsRouter.post("/upLevel", billsController.upLevel);
-    billsRouter.post("/downLevel", billsController.downLevel);
-    billsRouter.post("/updateBills", billsController.updateBills);
-    billsRouter.post("/updateBillsArr", billsController.updateBillsArr);
-    billsRouter.post("/removeTotal", billsController.removeTotal);
-    billsRouter.post("/updateSerialNo", billsController.updateSerialNo);
-    billsRouter.post("/pasteBills", billsController.pasteBills);
-    billsRouter.post('/updateRecharge', billsController.updateRecharge);
-    billsRouter.post('/pasteRel', billsController.pasteRel);
-    billsRouter.post("/deleteBills", billsController.deleteBills);
+    billsRouter.post("/upMove", billsContr.auth, billsContr.init, billsContr.upMove);
+    billsRouter.post("/downMove", billsContr.auth, billsContr.init, billsContr.downMove);
+     billsRouter.post("/getCurrentUniqId", billsContr.auth, billsContr.init, billsContr.getCurrentUniqId);
+     billsRouter.post("/getBills", billsContr.auth, billsContr.init, billsContr.getBills);
+     billsRouter.post("/createBills", billsContr.auth, billsContr.init, billsContr.createBills);
+     billsRouter.post("/updatePNId", billsContr.auth, billsContr.init, billsContr.updatePNId);
+     billsRouter.post("/upLevel", billsContr.auth, billsContr.init, billsContr.upLevel);
+     billsRouter.post("/downLevel", billsContr.auth, billsContr.init, billsContr.downLevel);
+     billsRouter.post("/updateBills", billsContr.auth, billsContr.init, billsContr.updateBills);
+     billsRouter.post("/updateBillsArr", billsContr.auth, billsContr.init, billsContr.updateBillsArr);
+     billsRouter.post("/removeTotal", billsContr.auth, billsContr.init, billsContr.removeTotal);
+     billsRouter.post("/updateSerialNo", billsContr.auth, billsContr.init, billsContr.updateSerialNo);
+     billsRouter.post("/pasteBills", billsContr.auth, billsContr.init, billsContr.pasteBills);
+     billsRouter.post('/updateRecharge', billsContr.auth, billsContr.init, billsContr.updateRecharge);
+     billsRouter.post('/pasteRel', billsContr.auth, billsContr.init, billsContr.pasteRel);
+     billsRouter.post("/deleteBills", billsContr.auth, billsContr.init, billsContr.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("/edCreateJob", billsController.edCreateJob);
-    billsRouter.post("/edUpdateJob", billsController.edUpdateJob);
+     billsRouter.post("/getJobContent", jobsContr.auth, jobsContr.init, jobsContr.getJobContent);
+     billsRouter.post("/createJobContent", jobsContr.auth, jobsContr.init, jobsContr.createJobContent);
+     billsRouter.post("/updateJobContent", jobsContr.auth, jobsContr.init, jobsContr.updateJobContent);
+     billsRouter.post("/deleteJobContent", jobsContr.auth, jobsContr.init, jobsContr.deleteJobContent);
+     billsRouter.post("/pasteJobs", jobsContr.auth, jobsContr.init, jobsContr.pasteJobs);
+     billsRouter.post("/edCreateJob", jobsContr.auth, jobsContr.init, jobsContr.edCreateJob);
+     billsRouter.post("/edUpdateJob", jobsContr.auth, jobsContr.init, jobsContr.edUpdateJob);
 
-    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);
-    billsRouter.post("/pasteValues", billsController.pasteValues);
-    billsRouter.post("/edCreateItem", billsController.edCreateItem);
-    billsRouter.post("/edUpdateItem", billsController.edUpdateItem);
+     billsRouter.post("/getItemCharacter", itemsContr.auth, itemsContr.init, itemsContr.getItemCharacter);
+     billsRouter.post("/createItemCharacter", itemsContr.auth, itemsContr.init, itemsContr.createItemCharacter);
+     billsRouter.post("/updateItemCharacter", itemsContr.auth, itemsContr.init, itemsContr.updateItemCharacter);
+     billsRouter.post("/updateValue", itemsContr.auth, itemsContr.init, itemsContr.updateValue);
+     billsRouter.post("/deleteItemCharacter", itemsContr.auth, itemsContr.init, itemsContr.deleteItemCharacter);
+     billsRouter.post("/pasteItems", itemsContr.auth, itemsContr.init, itemsContr.pasteItems);
+     billsRouter.post("/pasteValues", itemsContr.auth, itemsContr.init, itemsContr.pasteValues);
+     billsRouter.post("/edCreateItem", itemsContr.auth, itemsContr.init, itemsContr.edCreateItem);
+     billsRouter.post("/edUpdateItem", itemsContr.auth, itemsContr.init, itemsContr.edUpdateItem);
 
     app.use("/stdBillsEditor", billsRouter);
 

+ 11 - 0
modules/ration_repository/controllers/ration_controller.js

@@ -65,5 +65,16 @@ module.exports = {
                 callback(req, res, err, message, ids);
             }
         })
+    },
+    getRationsCodes: function (req, res) {
+        let data = JSON.parse(req.body.data);
+        rationItem.getRationsCodes(data, function (err, message, codes) {
+            if(err){
+                callback(req, res, err, message, null);
+            }
+            else{
+                callback(req, res, err, message, codes);
+            }
+        })
     }
 }

+ 17 - 1
modules/ration_repository/models/ration_item.js

@@ -334,7 +334,23 @@ rationItemDAO.prototype.getRationGljIds = function (data, callback) {
             callback(null, '', newRst);
         }
     });
-}
+};
+
+rationItemDAO.prototype.getRationsCodes = function (data, callback) {
+    let repId = data.repId;
+    rationItemModel.find({rationRepId: repId}, function (err, result) {
+        if(err){
+            callback(err, 'Error', null);
+        }
+        else{
+            let rstCodes = [];
+            result.forEach(function (rationItem) {
+                rstCodes.push(rationItem.code);
+            });
+            callback(null, 'get all rationCodes success', rstCodes);
+        }
+    })
+};
 
 module.exports = new rationItemDAO()
 

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

@@ -11,7 +11,7 @@ var RepositoryMapSchema = new Schema({
     "ID": Number,
     "dispName" : String,
     "appType" : String, //如:"建筑" / "公路"
-    "localeType": String, //如 各个省份 / 部颁
+    "localeType": Number, //如 各个省份 / 部颁
     "descr" : String,
     "deleted": Boolean
 });

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

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

+ 1 - 0
public/web/sheet/sheet_common.js

@@ -33,6 +33,7 @@ var sheetCommonObj = {
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 });
         spreadBook.options.tabStripVisible = false;
         spreadBook.options.showHorizontalScrollbar = false;
+        spreadBook.options.scrollbarMaxAlign = true;
         var spreadNS = GC.Spread.Sheets;
         var sheet = spreadBook.getSheet(0);
         sheet.suspendPaint();

+ 0 - 1
web/maintain/bills_lib/html/main.html

@@ -130,7 +130,6 @@
 </script>
 <script>
     let userId = '<%= userID %>';
-    console.log(`userID: ${userId}`);
     //let userAccount = '<%= userAccount %>';
     mainAjax.getStdBillsLib(userId);
     $(document).ready(function(){

+ 1 - 0
web/maintain/bills_lib/scripts/set_sheets.js

@@ -11,6 +11,7 @@ var setSheet = {
         spread.options.scrollbarMaxAlign = true;
         spread.options.allowCopyPasteExcelStyle = false;
         spread.options.allowExtendPasteRange = isExtendPaste? true : false;
+        spread.getActiveSheet().options.allowCellOverflow = false;
         sheet.showRowOutline(false);
        // sheet.defaults.rowHeight = 30;
         setting.cols.forEach(function(col, colIdx){

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

@@ -440,6 +440,27 @@
             </div>
         </div>
         <!--弹出警告窗-->
+        <button id="rationAlertBtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#rationAlert" style="display: none"></button>
+        <div class="modal fade" id="rationAlert" data-backdrop="static" style="display: none;" aria-hidden="true">
+            <input type="hidden" id="gdid" value="123">
+            <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title">取消确认</h5>
+                        <button type="button" id="rationAlertCls" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">×</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <h5 class="text-danger" id="alertRationTxt">编号不可为空!是否取消操作?</h5>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-secondary" id="rationAlertCac" data-dismiss="modal">取消</button>
+                        <a href="javascript: void(0);" id="rationAlertCof" class="btn btn-danger" data-dismiss="modal">确认</a>
+                    </div>
+                </div>
+            </div>
+        </div>
         <button id="alertModalBtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#alertModal" style="display: none"></button>
         <div class="modal fade" id="alertModal" data-backdrop="static" style="display: none;" aria-hidden="true">
             <input type="hidden" id="codedid" value="123">

+ 103 - 20
web/maintain/ration_repository/js/ration.js

@@ -15,6 +15,7 @@ var rationOprObj = {
     currentRations: {},
     currentEditingRation: null,
     currentSectionId: -1,
+    rationsCodes: [],
     setting: {
         header:[
             {headerName:"编码",headerWidth:120,dataCode:"code", dataType: "String", formatter: "@"},
@@ -40,11 +41,15 @@ var rationOprObj = {
         }
     },
     buildSheet: function(container) {
+        let rationRepId = getQueryString("repository");
         var me = rationOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        me.workBook.options.showHorizontalScrollbar = true;
+        me.getRationsCodes(rationRepId);
         me.rationDelOpr();
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
         //me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
@@ -121,15 +126,12 @@ var rationOprObj = {
         return cacheSection;
     },
     rationDelOpr: function () {
+        console.log(`rebuildDelete`);
         let me = rationOprObj;
         me.workBook.commandManager().register('rationDelete', function () {
             let rationSheet = me.workBook.getActiveSheet();
             let sels = rationSheet.getSelections(), updateArr = [], removeArr = [], lockCols = me.setting.view.lockColumns;
             let cacheSection = me.getCache();
-            console.log(`sels`);
-            console.log(sels);
-            console.log(`cache`);
-            console.log(cacheSection);
             if(sels.length > 0){
                 for(let sel = 0; sel < sels.length; sel++){
                     if(sels[sel].colCount === me.setting.header.length){
@@ -137,6 +139,9 @@ var rationOprObj = {
                             for(let i = 0; i < sels[sel].rowCount; i++){
                                 if(sels[sel].row + i < cacheSection.length){
                                     removeArr.push(cacheSection[sels[sel].row + i].ID);
+                                    me.rationsCodes.splice(me.rationsCodes.indexOf(cacheSection[sels[sel].row + i].code), 1);
+                                    console.log(`me.rationsCodes`);
+                                    console.log(me.rationsCodes);
                                 }
                             }
                         }
@@ -157,7 +162,7 @@ var rationOprObj = {
                             if(cacheSection){
                                 for(let i =0; i < sels[sel].rowCount; i++){
                                     if(sels[sel].row + i < cacheSection.length){
-                                        for(let col = sels[sel].col; col < sels[sel].col + sels[sel].colCount - 1; col++){
+                                        for(let col = sels[sel].col; col <= sels[sel].col + sels[sel].colCount - 1; col++){
                                             if(lockCols.indexOf(col) === -1){
                                                 cacheSection[sels[sel].row + i][me.setting.header[col].dataCode] = '';
                                             }
@@ -170,12 +175,8 @@ var rationOprObj = {
                     }
                 }
             }
-            console.log(`updateArr`);
-            console.log(updateArr);
-            console.log(`removeArr`);
-            console.log(removeArr);
             if(updateArr.length > 0 || removeArr.length > 0){
-                //me.mixUpdateRequest(updateArr, [], removeArr);
+                me.mixUpdateRequest(updateArr, [], removeArr);
             }
 
         });
@@ -187,10 +188,6 @@ var rationOprObj = {
         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
             var me = rationOprObj, updateArr = [], removeArr = [];
             var cacheSection = me.getCache();
-            console.log(`cacheSection`);
-            console.log(cacheSection);
-            console.log(`args`);
-            console.log(args);
             if (cacheSection) {
                 for (var i = 0; i < args.rowCount; i++) {
                     //var hasUpdate = false, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row + i),
@@ -229,13 +226,51 @@ var rationOprObj = {
             }
         }
     },
+    onEnterCell: function (sender, args) {
+        let me = rationOprObj;
+        me.cellRowIdx = args.row;
+        let isHasData = false;
+        if(me.addRationItem){
+            for(let i=0; i<me.setting.header.length; i++){
+                if(me.addRationItem[me.setting.header[i].dataCode]){
+                    isHasData = true;
+                    break;
+                }
+            }
+        }
+        if(isHasData){
+            if(me.editingRowIdx !== me.cellRowIdx) {
+                let focusToCol = !me.addRationItem.code ? 0 : -1;
+             //   else {
+                if(focusToCol !== -1){
+                    $('#rationAlertBtn').click();
+                    me.workBook.getSheet(0).options.isProtected = true;
+                    $('#rationAlertCac').click(function () {
+                        me.workBook.getSheet(0).options.isProtected = false;
+                        me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
+                    });
+                    $('#rationAlertCls').click(function () {
+                        me.workBook.getSheet(0).options.isProtected = false;
+                        me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, focusToCol);
+                    });
+                    $('#rationAlertCof').click(function () {
+                        me.workBook.getSheet(0).options.isProtected = false;
+                        me.addRationItem = null;
+                        for(let col=0; col<me.setting.header.length; col++){
+                            me.workBook.getSheet(0).getCell(me.editingRowIdx, col).value(me.currentEditingRation[me.setting.header[col].dataCode]);
+                        }
+                        me.workBook.getSheet(0).setActiveCell(me.editingRowIdx, 0);
+                    });
+                }
+               // }
+            }
+        }
+    },
     onCellEditStart: function(sender, args) {
         var me = rationOprObj;
         //var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
         var rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingRation = rObj;
-        console.log(`currentEditingRation`);
-        console.log(me.currentEditingRation);
         var cacheSection = me.getCache();
         if (cacheSection) {
             for (var j = 0; j < cacheSection.length; j++) {
@@ -251,16 +286,50 @@ var rationOprObj = {
         var me = rationOprObj, rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row),
             updateArr = [], addArr = [];
         let dataCode = me.setting.header[args.col].dataCode;
-        if (me.currentEditingRation["ID"] && me.currentEditingRation[dataCode] !== args.editingText) {
+        me.editingRowIdx = args.row;
+        if (me.currentEditingRation["ID"]) {
             rObj["ID"] = me.currentEditingRation["ID"];
-            updateArr.push(rObj);
+            //updateArr.push(rObj);
+            for(let col =0; col< me.setting.header.length; col++){
+                if(me.currentEditingRation[me.setting.header[col].dataCode] !== rObj[me.setting.header[col].dataCode]){
+                    me.addRationItem = rObj;
+                    if(rObj[me.setting.header[0].dataCode]){
+                        updateArr.push(rObj);
+                        break;
+                    }
+                }
+            }
         } else if(!me.currentEditingRation["ID"]) {
             if (!sheetCommonObj.chkIfEmpty(rObj, me.setting)) {
-                addArr.push(rObj);
+                //addArr.push(rObj);
+                me.addRationItem = rObj;
+                if(rObj.code){
+                    if(me.rationsCodes.indexOf(rObj.code) === -1){
+                        addArr.push(rObj);
+                        me.rationsCodes.push(rObj.code);
+                        me.addRationItem = null;
+                    }
+                    else{
+                        $('#alertModalBtn').click();
+                        me.workBook.getSheet(0).options.isProtected = true;
+                        $('#alertModalCls').click(function () {
+                            me.workBook.getSheet(0).options.isProtected = false;
+                            me.addRationItem.code = '';
+                            me.workBook.getSheet(0).setValue(args.row, args.col, '');
+                            me.workBook.getSheet(0).setActiveCell(args.row, args.col);
+                        });
+                        $('#alertModalCof').click(function () {
+                            me.workBook.getSheet(0).options.isProtected = false;
+                            me.addRationItem.code = '';
+                            me.workBook.getSheet(0).setValue(args.row, args.col, '');
+                            me.workBook.getSheet(0).setActiveCell(args.row, args.col);
+                        });
+                    }
+                }
             }
         }
-        me.currentEditingRation = null;
         if (updateArr.length > 0 || addArr.length > 0) {
+            me.currentEditingRation = null;
             me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
@@ -312,6 +381,20 @@ var rationOprObj = {
             //me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
+    getRationsCodes: function (repId) {
+        let me = rationOprObj;
+        $.ajax({
+            type: 'post',
+            url: 'api/getRationsCodes',
+            data: {data: JSON.stringify({repId: repId})},
+            dataType: 'json',
+            success: function (result) {
+                if(!result.error){
+                    me.rationsCodes = result.data;
+                }
+            }
+        })
+    },
     mixUpdateRequest: function(updateArr, addArr, removeIds) {
         var me = rationOprObj;
         $.ajax({