Bladeren bron

ration paste update

TonyKang 8 jaren geleden
bovenliggende
commit
ad325f87cb

+ 24 - 0
modules/rationRepository/controllers/rationController.js

@@ -0,0 +1,24 @@
+/**
+ * Created by Tony on 2017/5/2.
+ */
+
+var rationItem = require('../models/rationItem');
+var callback = function(req, res, err, message, data){
+    res.json({error: err, message: message, data: data});
+};
+
+module.exports = {
+    getRationItemsBySection: function(req, res){
+        var sectionId = req.body.sectionID;
+        rationItem.getRationItemsBySection(sectionId, function(err, message, rst){
+            if (err) {
+                callback(req, res, err, message, null);
+            } else {
+                callback(req, res, err, message, rst);
+            }
+        });
+    },
+    updateRationItems: function(req, res){
+        //
+    }
+}

+ 52 - 2
modules/rationRepository/models/rationItem.js

@@ -7,9 +7,9 @@ var db = dbm.getCfgConnection("rationRepository")
 //var async = require("async");
 var Schema = mongoose.Schema;
 
-var rationChapterTreeSchema = mongoose.Schema({
+var rationItemSchema = mongoose.Schema({
     ID:Number,
-    //ÒÔÏÂÊÇ»ùÓÚÒÑÓÐaccess¿â
+    //以下是基于已有access库
     code: String,
     name: String,
     unit: String,
@@ -18,4 +18,54 @@ var rationChapterTreeSchema = mongoose.Schema({
     caption: String,
     feeType: Number
 });
+var rationItemModel = db.model("rationItems",rationItemSchema, "rationItems")
+var counter = require('../../../public/counter/counter');
+
+var rationItemDAO = function(){};
+
+rationItemDAO.prototype.getRationItemsBySection = function(sectionId,callback){
+    rationItemModel.find({"sectionId": sectionId, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
+        if(err) callback(true, "获�定�错误�", "")
+        else callback(false,"获�定�", data);
+    })
+};
+rationItemDAO.prototype.updateRationItems = function(updateItems, addItems, callback){
+    var me = this;
+    if (!(updateItems) || updateItems.length == 0) {
+        me.addRationItems(addItems, callback);
+    }
+};
+
+rationItemDAO.prototype.getRationItemsByCode = function(code,callback){
+    //
+};
+
+rationItemDAO.prototype.addRationItems = function(items,callback){
+    if (items && items.length > 0) {
+        counter.counterDAO.getIDAfterCount(counter.moduleName.ration, items.length, function(err, result){
+            var maxId = result.value.sequence_value;
+            var arr = [];
+            for (var i = 0; i < items.length; i++) {
+                var obj = new rationItemModel(items[i]);
+                obj.ID = (maxId - (items.length - 1) + i);
+                arr.push(obj);
+            }
+            rationItemModel.collection.insert(arr, null, function(err, docs){
+                if (err) {
+                    callback(true, "�存定�错误�", false);
+                } else {
+                    callback(false, "�存定��功�", docs);
+                }
+            })
+        });
+    } else {
+        callback(true, "定�数��错误�", false);
+    }
+};
+
+rationItemDAO.prototype.updateRationItems = function(items,callback){
+    //
+};
+
+module.exports = new rationItemDAO()
 

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

@@ -7,6 +7,7 @@ var _rootDir = __dirname;
 
 var rationRepositoryController = require("../controllers/rationRepositoryController");
 var rationChapterTreeController = require("../controllers/rationChapterTreeController");
+var rationController = require("../controllers/rationController");
 
 apiRouter.post("/getRationDisplayNames",rationRepositoryController.getDisPlayRationLibs);
 apiRouter.post("/editRationLibs",rationRepositoryController.updateRationRepositoryName);
@@ -19,4 +20,7 @@ apiRouter.post("/createNewNode",rationChapterTreeController.createNewNode);
 apiRouter.post("/updateNodes",rationChapterTreeController.updateNodes);
 apiRouter.post("/deleteNodes",rationChapterTreeController.deleteNodes);
 
+apiRouter.post("/getRationItems",rationController.getRationItemsBySection);
+apiRouter.post("/updateRationItems",rationController.updateRationItems);
+
 module.exports = apiRouter;

+ 2 - 20
web/rationLibEditor/dinge.html

@@ -885,26 +885,11 @@
     <SCRIPT type="text/javascript">
 /*var rationName = getQueryString("rationname");*/
 var treeObj;
-var zNodes =[
-    { id:1, pId:-1,nId:2, name:"第一章 土石方工程",isParent:true, items:[]},
-    { id:2, pId:-1,nId:3, name:"第二章 挡墙、护坡工程",isParent:true,items:[]},
-    { id:3, pId:-1,nId:4, name:"第三章 基础工程",isParent:true,items:[]},
-    { id:4, pId:-1,nId:5, name:"第四章 脚手架工程",isParent:true,items:[]},
-    { id:5, pId:-1,nId:6, name:"第五章 砌筑工程",isParent:true,items:[]},
-    { id:6, pId:-1,nId:7, name:"第六章 混凝土及钢筋混凝土工程",isParent:true,items:[]},
-    { id:7, pId:-1,nId:8, name:"第七章 金属工程",isParent:true,items:[]},
-    { id:8, pId:-1,nId:9, name:"第八章 门窗、木结构",isParent:true,items:[]},
-    { id:9, pId:-1,nId:10, name:"第九章 楼地面工程",isParent:true,items:[]},
-    { id:10, pId:-1,nId:11, name:"第十章 层面工程",isParent:true,items:[]},
-    { id:11, pId:-1,nId:12, name:"第十一章 防腐隔热保温工程",isParent:true,items:[]},
-    { id:12, pId:-1,nId:13, name:"第十二章 装饰工程",isParent:true,items:[]},
-    { id:13, pId:-1,nId:-1, name:"第十三章 其他工程",isParent:true,items:[]},
-];
 var setting = {
     view: {
         //	showIcon: showIconForTree,//已存在*/
         addHoverDom: zTreeOprObj.addHoverDom,
-        removeHoverDom: removeHoverDom,
+        removeHoverDom: zTreeOprObj.removeHoverDom,
         expandSpeed: "",
         selectedMulti: false
     },
@@ -930,7 +915,7 @@ var setting = {
         }
     },
     callback:{
-        //onClick:SectionClick,
+        onClick: zTreeOprObj.onClick,
         beforeDrag: zTreeOprObj.beforeDrag,
         beforeRename: zTreeOprObj.beforeRename,
         beforeRemove: zTreeOprObj.onBeforeRemove,
@@ -948,9 +933,6 @@ function SectionClick(event,treeId,treeNode){
     getRationItems(sectionID);
 }
 
-function removeHoverDom(treeId, treeNode) {
-    $("#addBtn_"+treeNode.tId).unbind().remove();
-};
 function selectAll() {
     var zTree = $.fn.zTree.getZTreeObj("rationChapterTree");
     zTree.setting.edit.editNameSelectAll =  $("#selectAll").attr("checked");

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

@@ -103,9 +103,17 @@ var zTreeOprObj = {
         if (preNode) {
             preNodeId = preNode.ID;
         }
+        private_fetchAllSubItems = function(pItem){
+            nodeIds.push(pItem.ID);
+            if (pItem.items && pItem.items.length > 0) {
+                for (var i = 0; i < pItem.items.length; i++) {
+                    private_fetchAllSubItems(pItem.items[i]);
+                }
+            }
+        };
         nodeIds.push(treeNode.ID);
         for (var i = 0; i < treeNode.items.length; i++) {
-            nodeIds.push(treeNode.items[i].ID);
+            private_fetchAllSubItems(treeNode.items[i]);
         }
         $.ajax({
             type:"POST",
@@ -190,5 +198,15 @@ var zTreeOprObj = {
                 }
             });
         });
+    },
+    removeHoverDom: function(treeId, treeNode) {
+        $("#addBtn_"+treeNode.tId).unbind().remove();
+    },
+    onClick: function(event,treeId,treeNode) {
+        var sectionID = treeNode.ID;
+        if (treeNode.items && treeNode.items.length > 0) {
+            rationOprObj.getRationItems(sectionID)
+        }
     }
+
 };

+ 95 - 5
web/rationLibEditor/js/ration.js

@@ -10,14 +10,16 @@ $("#gongliao").click(function(){
 });
 
 var rationOprObj = {
-    sheet: null,
+    workBook: null,
+    currentRations: {},
+    currentSectionId: -1,
     setting: {
         header:[
-            {headerName:"编码",headerWidth:120,data:"rationCode"},
-            {headerName:"名称",headerWidth:400,data:"rationName"},
+            {headerName:"编码",headerWidth:120,data:"code"},
+            {headerName:"名称",headerWidth:300,data:"name"},
             {headerName:"单位",headerWidth:120,data:"unit"},
             {headerName:"基价",headerWidth:120,data:"basePrice"},
-            {headerName:"显示名称(以%s表示参数)",headerWidth:450,data:"caption"},
+            {headerName:"显示名称(以%s表示参数)",headerWidth:350,data:"caption"},
             {headerName:"取费专业",headerWidth:120,data:"feeType"}
         ],
         view:{
@@ -31,6 +33,94 @@ var rationOprObj = {
     },
     buildSheet: function(container) {
         var me = this;
-        me.sheet = sheetCommonObj.buildSheet(container, me.setting);
+        me.workBook = sheetCommonObj.buildSheet(container, me.setting);
+        me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
+        me.workBook.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
+    },
+    onClipboardPasting: function(sender, args) {
+        var me = rationOprObj;
+        if (args.cellRange.colCount != me.setting.header.length) {
+            args.cancel = true;
+        }
+    },
+    onClipboardPasted: function(e, info) {
+        var me = rationOprObj;
+        var cacheSection = me.currentRations["_SEC_ID_" + me.currentSectionId];
+        var updateArr = [], addArr = [];
+        var private_createRationItems = function() {
+            var rst = [], propId = 0, preStrIdx = 0, itemObj = {};
+            for (var i = 0; i < info.pasteData.text.length; i++) {
+                if (info.pasteData.text[i] === "\n") {
+                    propId = 0;
+                    preStrIdx = i + 1;
+                    rst.push(itemObj);
+                    if (i < info.pasteData.text.length - 1) {
+                        itemObj = {};
+                    }
+                } else if (info.pasteData.text[i] === "\t" || info.pasteData.text[i] === "\r") {
+                    itemObj[me.setting.header[propId].data] = info.pasteData.text.slice(preStrIdx, i);
+                    propId++;
+                    preStrIdx = i + 1;
+                } else if (i == info.pasteData.text.length - 1) {
+                    itemObj[me.setting.header[propId].data] = info.pasteData.text.slice(preStrIdx);
+                    rst.push(itemObj);
+                }
+            }
+            return rst;
+        };
+        var items = private_createRationItems();
+        for (var i = 0; i < items.length; i++) {
+            if (cacheSection) {
+                var hasCacheItem = false;
+                for (var j = 0; j < cacheSection.length; j++) {
+                    if (cacheSection[j][me.setting.header[0].data] == items[i][me.setting.header[0].data]) {
+                        hasCacheItem = true;
+                        break;
+                    }
+                }
+                if (hasCacheItem) addArr.push(items[i])
+                else updateArr.push(items[i])
+            } else {
+                addArr.push(items[i])
+            }
+        };
+    },
+    getRationItems: function(sectionID){
+        if (sectionID != -1) {
+            var me = rationOprObj;
+            me.currentSectionId = sectionID;
+            if (me.currentRations["_SEC_ID_" + sectionID]) {
+                me.showRationItems(sectionID);
+            } else {
+                $.ajax({
+                    type:"POST",
+                    url:"api/getRationItems",
+                    data:{"sectionID": sectionID},
+                    dataType:"json",
+                    cache:false,
+                    timeout:1000,
+                    success:function(result){
+                        if (result) {
+                            me.currentRations["_SEC_ID_" + sectionID] = result.data;
+                            me.showRationItems(sectionID);
+                        }
+
+                    },
+                    error:function(){
+                    }
+                })
+            }
+        }
+    },
+    showRationItems: function(sectionID){
+        var me = rationOprObj;
+        if (me.workBook) {
+            if (me.currentRations && me.currentRations["_SEC_ID_" + sectionID] && me.currentRations["_SEC_ID_" + sectionID].length > 0) {
+                //
+            } else {
+                //清除ration数据及工料机数据
+                sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, 3);
+            }
+        }
     }
 }

+ 9 - 5
web/rationLibEditor/js/sheetCommon.js

@@ -4,11 +4,11 @@
 var sheetCommonObj = {
     buildSheet: function(container, setting) {
         var me = this;
-        var spread = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 });
-        spread.options.tabStripVisible = false;
-        spread.options.showHorizontalScrollbar = false;
+        var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 });
+        spreadBook.options.tabStripVisible = false;
+        spreadBook.options.showHorizontalScrollbar = false;
         var spreadNS = GC.Spread.Sheets;
-        var sheet = spread.getSheet(0);
+        var sheet = spreadBook.getSheet(0);
         sheet.suspendPaint();
         sheet.suspendEvent();
         //Set rowHeader count and columnHeader count.
@@ -23,7 +23,7 @@ var sheetCommonObj = {
         sheet.setRowCount(5);
         sheet.resumeEvent();
         sheet.resumePaint();
-        return sheet;
+        return spreadBook;
     },
     buildHeader: function(sheet, setting){
         var me = this, ch = GC.Spread.Sheets.SheetArea.colHeader;
@@ -31,5 +31,9 @@ var sheetCommonObj = {
             sheet.setValue(0, i, setting.header[i].headerName, ch);
             sheet.setColumnWidth(i, setting.header[i].headerWidth?setting.header[i].headerWidth:100);
         }
+    },
+    cleanSheet: function(sheet, setting, rowCount) {
+        sheet.clear(-1, 0, -1, setting.header.length, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
+        sheet.setRowCount(rowCount);
     }
 }