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

GLJ tuning / local storage

TonyKang 8 éve
szülő
commit
7304ba6417

+ 6 - 0
modules/rationRepository/controllers/repositoryGljController.js

@@ -53,6 +53,12 @@ module.exports ={
             });
         }
     },
+    getGljItemsByIds: function(req, res) {
+        var gljIds = JSON.parse(req.body.gljIds);
+        gljRepository.getGljItems(gljIds, function(err, data){
+            callback(req,res,err,'Get Items',data)
+        });
+    },
     mixUpdateGljItems: function(req, res){
         var repId = req.body.repositoryId,
             updateItems = JSON.parse(req.body.updateItems),

+ 7 - 0
modules/rationRepository/models/gljRepository.js

@@ -71,6 +71,13 @@ gljItemDAO.prototype.getGljItem = function(repositoryId, code, callback){
     })
 };
 
+gljItemDAO.prototype.getGljItems = function(gljIds, callback){
+    gljItemModel.find({"ID": {"$in": gljIds}},function(err,data){
+        if(err) callback(true, "")
+        else callback(false, data);
+    })
+};
+
 gljItemDAO.prototype.mixUpdateGljItems = function(repId, updateItems, addItems, rIds, callback) {
     var me = this;
     if (updateItems.length == 0 && rIds.length == 0) {

+ 1 - 0
modules/rationRepository/routes/rationRepRoutes.js

@@ -30,6 +30,7 @@ apiRouter.post("/deleteGljNodes",repositoryGljController.deleteGljNodes);
 apiRouter.post("/getGljTree",repositoryGljController.getGljTree);
 apiRouter.post("/getGljItems",repositoryGljController.getGljItems);
 apiRouter.post("/mixUpdateGljItems",repositoryGljController.mixUpdateGljItems);
+apiRouter.post("/getGljItemsByIds",repositoryGljController.getGljItemsByIds);
 
 
 module.exports = apiRouter;

+ 35 - 0
public/storageUtil.js

@@ -0,0 +1,35 @@
+/**
+ * Created by Tony on 2017/5/15.
+ */
+storageUtil = {
+    localStorage: null,
+    sessionStorage: null,
+    browserFlag: {isIE: false, isFF: false, isChrome: false, isOpera: false, other: false},
+    iniStorage: function() {
+        var me = this;
+        me.browserFlag.isIE = (!!window.ActiveXObject || "ActiveXObject" in window);
+        if (!me.browserFlag.isIE) {
+            if (userAgent.indexOf("Firefox") > -1) {
+                me.browserFlag.isFF = true;
+            } else if (userAgent.indexOf("Chrome") > -1){
+                me.browserFlag.isChrome = true;
+            } else if (userAgent.indexOf("Opera") > -1) {
+                me.browserFlag.isOpera = true;
+            } else {
+                me.browserFlag.other = true;
+            }
+        }
+    },
+    getSessionCache: function(groupKey, itemKey) {
+        //
+    },
+    setSessionCache: function(groupKey, itemKey) {
+        //
+    },
+    getLocalCache: function(groupKey, itemKey) {
+        //
+    },
+    setLocalCache: function(groupKey, itemKey) {
+        //
+    }
+}

+ 2 - 0
web/rationLibEditor/dinge.html

@@ -919,6 +919,8 @@
         pageOprObj.initPage();
         rationOprObj.buildSheet($("#rationItemsSheet")[0]);
         rationGLJOprObj.buildSheet($("#rationGLJSheet")[0]);
+        sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);
+        sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting);
     });
 </script>
 

+ 2 - 1
web/rationLibEditor/js/chapterTree.js

@@ -190,7 +190,8 @@ var zTreeOprObj = {
             rationOprObj.getRationItems(sectionID);
         } else {
             sheetCommonObj.cleanSheet(rationOprObj.workBook.getSheet(0), rationOprObj.setting, -1);
-            sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);
+            sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0));
+            sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0));
         }
     }
 

+ 20 - 1
web/rationLibEditor/js/ration.js

@@ -37,6 +37,20 @@ var rationOprObj = {
         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);
+        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.CellClick, me.onCellClcik);
+    },
+    onCellClcik: function(sender, args) {
+        var me = rationOprObj, sheet = rationGLJOprObj.workBook.getSheet(0), setting = rationGLJOprObj.setting;
+        if(args.sheetArea === GC.Spread.Sheets.SheetArea.colHeader || args.sheetArea === GC.Spread.Sheets.SheetArea.corner){
+            sheetCommonObj.cleanSheet(sheet, setting, -1);
+            sheetCommonObj.shieldAllCells(sheet);
+        } else {
+            var cacheSection = me.getCache();
+            if (cacheSection && args.row < cacheSection.length) {
+                rationGLJOprObj.getGljItems(cacheSection[args.row]);
+            }
+            //
+        }
     },
     getCache: function() {
         var me = this, rst = me.currentRations["_SEC_ID_" + me.currentSectionId];
@@ -64,6 +78,7 @@ var rationOprObj = {
                 for (var j = 0; j < cacheSection.length; j++) {
                     if (cacheSection[j][me.setting.header[0].dataCode] == result.data.ops[i][me.setting.header[0].dataCode]) {
                         cacheSection[j]["ID"] = result.data.ops[i]["ID"];
+                        cacheSection[j]["rationGljList"] = result.data.ops[i]["rationGljList"];
                     }
                 }
             }
@@ -208,6 +223,8 @@ var rationOprObj = {
             me.currentSectionId = sectionID;
             if (me.currentRations["_SEC_ID_" + sectionID]) {
                 me.showRationItems(sectionID);
+                sheetCommonObj.unShieldAllCells(me.workBook.getSheet(0));
+                sheetCommonObj.lockCells(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting);
             } else {
                 $.ajax({
                     type:"POST",
@@ -221,8 +238,10 @@ var rationOprObj = {
                             me.currentRations["_SEC_ID_" + sectionID] = result.data;
                             me.showRationItems(sectionID);
                             sheetCommonObj.unShieldAllCells(me.workBook.getSheet(0));
+                            sheetCommonObj.lockCells(rationGLJOprObj.workBook.getSheet(0), rationGLJOprObj.setting);
                         } else {
-                            sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);
+                            sheetCommonObj.shieldAllCells(me.workBook.getSheet(0));
+                            sheetCommonObj.shieldAllCells(rationGLJOprObj.workBook.getSheet(0));
                         }
                     },
                     error:function(err){

+ 69 - 16
web/rationLibEditor/js/rationGLJ.js

@@ -2,30 +2,83 @@
  * Created by Tony on 2017/4/28.
  */
 var rationGLJOprObj = {
-    sheet: null,
+    workBook: null,
+    cache: {},
     setting: {
         header:[
-            {headerName:"编码",headerWidth:160},
-            {headerName:"名称",headerWidth:400},
-            {headerName:"单位",headerWidth:160},
-            {headerName:"单位基价",headerWidth:160, dataType: "Number", precision: 2},
-            {headerName:"定额消耗",headerWidth:160, dataType: "Number", precision: 3},
-            {headerName:"类型",headerWidth:160},
-            {headerName:"操作",headerWidth:130}
+            {headerName:"编码",headerWidth:160,dataCode:"code", dataType: "String", formatter: "@"},
+            {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"},
+            {headerName:"单位",headerWidth:160,dataCode:"unit", dataType: "String"},
+            {headerName:"单位基价",headerWidth:160, dataCode:"basePrice", dataType: "Number", precision: 2},
+            {headerName:"定额消耗",headerWidth:160, dataCode:"consumeAmt", dataType: "Number", precision: 3},
+            {headerName:"类型",headerWidth:160,dataCode:"gljDistType", dataType: "String"},
+            {headerName:"操作",headerWidth:130,dataCode:"code", dataType: "String"}
         ],
         view:{
             comboBox:[],
-            lockedCells:[
-                {row:-1,col:1,rowCount:-1, colCount:1},
-                {row:-1,col:2,rowCount:-1, colCount:1},
-                {row:-1,col:3,rowCount:-1, colCount:1},
-                {row:-1,col:5,rowCount:-1, colCount:1},
-                {row:-1,col:6,rowCount:-1, colCount:1}
-            ]
+            lockColumns:[1,2,3,5,6]
         }
     },
     buildSheet: function(container) {
         var me = this;
-        me.sheet = sheetCommonObj.buildSheet(container, me.setting, 30);
+        me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+    },
+    createRationGljDisplayItem: function(rItem, repGlj) {
+        var rst = {};
+        rst.gljId = rItem.gljId;
+        rst.consumeAmt = rItem.consumeAmt;
+        rst.code = repGlj.code;
+        rst.name = repGlj.name;
+        rst.specs = repGlj.specs;
+        rst.unit = repGlj.unit;
+        rst.basePrice = repGlj.basePrice;
+        rst.gljDistType = repGlj.gljDistType;
+        return rst;
+    },
+    getGljItems: function(rationItem) {
+        var me = this, rationID = rationItem.ID, rationGljList = rationItem.rationGljList;
+        if (me.cache["_GLJ_" + rationID]) {
+            me.showGljItems(rationID);
+            sheetCommonObj.lockCells(me.workBook.getSheet(0), me.setting);
+        } else {
+            var gljIds = [];
+            for (var i = 0; i < rationGljList.length; i++) {
+                gljIds.push(rationGljList[i].gljId);
+            }
+            $.ajax({
+                type:"POST",
+                url:"api/getGljItemsByIds",
+                data:{"gljIds": JSON.stringify(gljIds)},
+                dataType:"json",
+                cache:false,
+                timeout:5000,
+                success:function(result){
+                    sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
+                    if (result) {
+                        var cacheArr = [];
+                        for (var i = 0; i < result.data.length; i++) {
+                            for (var j = 0; j < rationGljList.length; j++) {
+                                if (rationGljList[j].gljId == result.data[i].ID) {
+                                    cacheArr.push(me.createRationGljDisplayItem(rationGljList[j], result.data[i]));
+                                    break;
+                                }
+                            }
+                        }
+                        me.cache["_GLJ_" + rationID] = cacheArr;
+                        me.showGljItems(rationID);
+                    }
+                    sheetCommonObj.lockCells(me.workBook.getSheet(0), me.setting);
+                },
+                error:function(err){
+                    alert(err);
+                }
+            })
+        }
+    },
+    showGljItems: function(rationID) {
+        var me = this;
+        if (me.cache["_GLJ_" + rationID]) {
+            sheetCommonObj.showData(me.workBook.getSheet(0), me.setting, me.cache["_GLJ_" + rationID]);
+        }
     }
 }

+ 1 - 0
web/rationLibEditor/js/repositoryGLJ.js

@@ -18,6 +18,7 @@ var pageOprObj = {
             repositoryGljObj.getGljTree(rationLibName, function(repId){
                 repositoryGljObj.buildSheet(container);
                 repositoryGljObj.getGljItems(repId);
+                sheetCommonObj.shieldAllCells(repositoryGljObj.workBook.getSheet(0), repositoryGljObj.setting);
             });
         }
     }

+ 10 - 1
web/rationLibEditor/js/sheetCommon.js

@@ -121,12 +121,21 @@ var sheetCommonObj = {
         }
         return rst;
     },
-    shieldAllCells: function(sheet, setting) {
+    shieldAllCells: function(sheet) {
         sheet.options.isProtected = true;
     },
     unShieldAllCells: function(sheet) {
         sheet.options.isProtected = false;
     },
+    lockCells: function(sheet, setting){
+        if (setting && setting.view.lockColumns && setting.view.lockColumns.length > 0) {
+            sheet.options.isProtected = true;
+            sheet.getRange(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport).locked(false);
+            for (var i = 0; i < setting.view.lockColumns.length; i++) {
+                sheet.getRange(-1,setting.view.lockColumns[i] , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
+            }
+        }
+    },
     chkIfEmpty: function(rObj, setting) {
         var rst = true;
         if (rObj) {