浏览代码

insert Bills (button & contextMenu & from Standard Bills Lib)

MaiXinRong 8 年之前
父节点
当前提交
b7d2c9fef3

+ 25 - 8
modules/main/models/bills.js

@@ -81,24 +81,41 @@ billsDAO.prototype.AddBillsFromTemplate = function (datas, callback) {
     bills.collection.insert(datas, callback);
 };
 
-billsDAO.prototype.save = function(datas, callback){
+billsDAO.prototype.save = function(user_id, datas, callback){
     var functions = [];
     var data;
 
     function saveOne(doc) {
+/*        switch (doc.type) {
+            case commonConsts.UT_CREATE:
+                return function (callback) {
+                    bills.update({projectID: doc.data.projectID, ID: doc.data.ID}, doc.data, callback);
+                };
+                break;
+            case commonConsts.UT_CREATE:
+                return function (callback) {
+                    bills.create(doc.data, callback);
+                };
+                break;
+            case commonConsts.UT_DELETE:
+                return function (callback) {
+                    doc.data.deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: user_id};
+                    bills.update({projectID: doc.data.projectID, ID: doc.data.ID}, doc.data, callback);
+                }
+                break;
+        }*/
         return function (cb) {
             switch (doc.updateType) {
                 case commonConsts.UT_UPDATE:
-                    bills.update({ID: doc.ID}, doc, cb);
+                    bills.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID}, doc.updateData, cb);
                     break;
                 case commonConsts.UT_CREATE:
-                    bills.create(doc, cb);
+                    bills.create(doc.updateData, cb);
                     break;
                 case commonConsts.UT_DELETE:
-                    /* 假删除
-                    var item = new bills(doc);
-                    item.remove(cb);
-                    */
+                    doc.updateData.deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: user_id};
+                    bills.update({projectID: doc.updateData.projectID, ID: doc.updateData.ID}, doc.updateData, cb);
+                    break;
             }
         }
     }
@@ -123,4 +140,4 @@ billsDAO.prototype.allocIDs = function(IDStep, callback){
     });
 };
 
-module.exports = new billsDAO();
+module.exports = new billsDAO();

+ 3 - 2
modules/main/models/project.js

@@ -21,6 +21,7 @@ Project.prototype.datas = [];
 Project.prototype.prepare = function(data, callback){
     var me = this;
     data.update_data.forEach(function(item){
+        item.user_id = data.user_id;
         me.datas.push(item);
         /*
         to do
@@ -39,7 +40,7 @@ Project.prototype.save = function(datas, callback){
 
     function saveModule(data) {
         return function (cb) {
-            moduleMap[data.moduleName].save(data.data, cb);
+            moduleMap[data.moduleName].save(data.user_id, data.data, cb);
         }
     }
     for (var i = 0; i < me.datas.length; i++){
@@ -83,4 +84,4 @@ Project.prototype.getData = function(projectID, callback){
 
 };
 
-module.exports = new Project();
+module.exports = new Project();

+ 1 - 1
modules/pm/models/project.js

@@ -126,7 +126,7 @@ ProjectsDAO.prototype.copyUserProjects = function (userId, datas, callback) {
                     }
                 });
             } else {
-                haseError = true;
+                hasError = true;
                 callback(1, '提交数据错误', null);
             }
         }

+ 2 - 1
public/web/id_tree.js

@@ -620,5 +620,6 @@ var idTree = {
         };
 
         return new Tree(setting);
-    }
+    },
+    updateType: {update: 'update', new: 'new', delete: 'delete'}
 };

+ 2 - 1
public/web/tree_sheet/tree_sheet_controller.js

@@ -135,6 +135,7 @@ var TREE_SHEET_CONTROLLER = {
     },
     eventName: {
         refreshBaseActn: 'refreshBaseActn',
-        treeSelectedChanged: 'treeSelectedChanged'
+        treeSelectedChanged: 'treeSelectedChanged',
+        cellDoubleClick: 'cellDoubleClick'
     }
 };

+ 27 - 55
web/building_saas/main/html/main.html

@@ -480,6 +480,7 @@
     <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
     <!-- Common -->
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>
+    <script type="text/javascript" src="/public/web/url_util.js"></script>
     <!--报表 zTree -->
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
@@ -495,7 +496,6 @@
 
     <script type="text/javascript" src="/public/web/id_tree.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/cache_tree.js"></script>
-    <script type="text/javascript" src="/test/tmp_data/data_15690.js"></script>
     <!-- Controller -->
     <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_controller.js"></script>
     <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
@@ -505,9 +505,9 @@
     <!-- view -->
     <script type="text/javascript" src="/web/building_saas/main/js/main_ajax.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/main.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/controllers/project_controller.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/std_bills_lib.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/views/std_ration_lib.js"></script>
-    <script type="text/javascript" src="/public/web/url_util.js"></script>
     <SCRIPT type="text/javascript">
   		<!--
   		var setting = {
@@ -604,7 +604,7 @@
             data.flags.push({fieldName: 'isPartGather', flag: false});
         });*/
 
-        project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), null/* to do: userID*/);
+        project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), userID);
         project.loadDatas(function (err) {
             if (!err) {
                 controller = TREE_SHEET_CONTROLLER.createNew(project.mainTree, billsSpread.getActiveSheet(), BillsGridSetting);
@@ -646,6 +646,9 @@
                     icon: 'fa-sign-in',
                     disabled: function () {
                         return project.mainTree.selected ? project.mainTree.selected.sourceType !== project.Bills.getSourceType() : false;
+                    },
+                    callback: function (key, opt) {
+                        ProjectController.addBills(project, billsSpread);
                     }
                 },
                 "insertRation": {
@@ -679,72 +682,41 @@
                             return true;
                         }
                     }
+                },
+                "spr1": '--------',
+                "delete": {
+                    name: '删除',
+                    icon: 'fa-remove',
+                    disabled: function () {
+                        var selected = project.mainTree.selected;
+                        return !selected;
+                    },
+                    callback: function () {
+                        var selected = controller.tree.selected;
+                        if (selected) {
+                            if (selected.sourceType === project.Bills.getSourceType()) {
+                                project.Bills.deleteBills(selected.source);
+                                controller.delete();
+                            };
+                        }
+
+                    }
                 }
             }
         });
 
-        /*CommonAjax.post('/bills/getBills', {}, function (bills) {
-            project.Bills.loadDatas(bills);
-            project.Ration.loadDatas([]);
-            //project.Rations.loadDatas(drawing_data);
-            project.loadMainTree();
-
-            controller = TREE_SHEET_CONTROLLER.createNew(project.mainTree, billsSpread.getActiveSheet(), BillsGridSetting);
-            //controller = TREE_SHEET_CONTROLLER.createNew(project.Bills.tree, billsSpread.getActiveSheet(), BillsGridSetting);
-
-            controller.showTreeData();
-            controller.bind('refreshBaseActn', function (tree) {
-                var showButton = function (show, btn) {
-                    if (show) {
-                        btn.show();
-                    } else {
-                        btn.hide();
-                    }
-                };
-                showButton(tree.selected && tree.selected.canUpLevel(), $('#upLevel'));
-                showButton(tree.selected && tree.selected.canDownLevel(), $('#downLevel'));
-                showButton(tree.selected && tree.selected.canUpMove(), $('#upMove'));
-                showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
-                showButton(tree.selected ? true : false, $('#delete'));
-            });
-        });*/
-
         $('#insert').click(function () {
             var selected = controller.tree.selected;
-            var newSource = null, newNode = null, sels = billsSpread.getActiveSheet().getSelections();
 
             if (!selected || selected.sourceType === project.Bills.getSourceType()) {
-                newSource = project.Bills.tree.insert(selected ? selected.source.getParentID() : -1, selected ? selected.source.getNextSiblingID() : -1);
-                newNode = project.mainTree.insert(selected.getParentID(), selected.getNextSiblingID());
-            } else if (selected.sourceType === project.Ration.getSourceType()) {
-
-            } else if (selected.sourceType === project.GLJ.getSourceType()) {
-
-            }
-
-            if (newNode) {
-                newNode.source = newSource;
-                newNode.sourceType = selected ? selected.sourceType : project.Bills.getSourceType();
-                if (newNode.sourceType === project.Bills.getSourceType()) {
-                    newNode.data = newSource.data;
-                } else {
-                    newNode.data = newSource;
-                }
-
-                TREE_SHEET_HELPER.massOperationSheet(controller.sheet, function () {
-                    controller.sheet.addRows(newNode.serialNo(), 1);
-                    TREE_SHEET_HELPER.refreshTreeNodeData(controller.setting, controller.sheet, [newNode], false);
-                    controller.setTreeSelected(newNode);
-                    controller.sheet.setSelection(newNode.serialNo(), sels[0].col, 1, 1);
-                    controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center)
-                });
+                ProjectController.addBills(project, billsSpread);
             }
         });
         $('#delete').click(function () {
             var selected = controller.tree.selected;
             if (selected) {
                 if (selected.sourceType === project.Bills.getSourceType()) {
-                    project.Bills.delete(selected.source.getID());
+                    project.Bills.deleteBills(selected.source);
                     controller.delete();
                 } else if (selected.sourceType === project.Rations.getSourceType()) {
                     project.Ration.delete(selected.source);

+ 33 - 0
web/building_saas/main/js/controllers/project_controller.js

@@ -0,0 +1,33 @@
+/**
+ * Created by Mai on 2017/6/1.
+ */
+
+ProjectController = {
+    addBills: function (project, mainSpread, std) {
+        if (!project || !mainSpread) { return null; }
+
+        var target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
+        var newSource = null, newNode = null, sels = billsSpread.getActiveSheet().getSelections();
+
+        if (std) {
+            newSource = project.Bills.insertStdBills(target ? target.source.getParentID() : project.Bills.tree.setting.rootId, target ? target.source.getNextSiblingID() : project.Bills.tree.setting.rootId, std.data);
+        } else {
+            newSource = project.Bills.insertBills(target ? target.source.getParentID() : project.mainTree.setting.rootId, target ? target.source.getNextSiblingID() : project.mainTree.setting.rootId);
+        }
+        newNode = project.mainTree.insert(target.getParentID(), target.getNextSiblingID());
+
+        if (newNode) {
+            newNode.source = newSource;
+            newNode.sourceType = project.Bills.getSourceType();
+            newNode.data = newSource.data;
+
+            TREE_SHEET_HELPER.massOperationSheet(controller.sheet, function () {
+                controller.sheet.addRows(newNode.serialNo(), 1);
+                TREE_SHEET_HELPER.refreshTreeNodeData(controller.setting, controller.sheet, [newNode], false);
+                controller.setTreeSelected(newNode);
+                controller.sheet.setSelection(newNode.serialNo(), sels[0].col, 1, 1);
+                controller.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center)
+            });
+        };
+    }
+}

+ 7 - 26
web/building_saas/main/js/main.js

@@ -2,38 +2,19 @@
  * Created by Mai on 2017/3/10.
  */
 
-var Project;
-
-var GetQueryString = function (name) {
-    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-    var r = window.location.search.substr(1).match(reg);
-    if (r != null) return unescape(r[2]); return null;
-};
-
-var LoadData = function () {
-    var loadFullPathHtml = function (proj) {
+$(function () {
+    var getFullPathHtml = function (proj) {
         var fullPath = [], i, pm = '<a href="/pm">项目管理</a>', angleRight = '<i class="fa fa-angle-right fa-fw"></i>';
         fullPath.push(pm);
         for (i = 0; i < proj.fullFolder.length; i++) {
             fullPath.push(angleRight, proj.fullFolder[i]);
         }
-        fullPath.push(angleRight, proj.name)
+        fullPath.push(angleRight, proj.name);
         return fullPath.join('');
     };
-    /*$.post('/getProject', {'data': JSON.stringify({"user_id": userID, "proj_id": GetQueryString('project')})},  function (result) {
-        if (result.error === 0) {
-            Project = result.data;
-            $('#fullpath').html(loadFullPathHtml(Project));
-        } else {
-            alert('error: ' + result.message);
-        };
-    });*/
-    GetProject(GetQueryString('project'), function (data) {
-        Project = data;
-        if (Project) {
-            $('#fullpath').html(loadFullPathHtml(Project));
+    CommonAjax.post('/pm/api/getProject', {"user_id": userID, "proj_id": scUrlUtil.GetQueryString('project')}, function (data) {
+        if (data) {
+            $('#fullpath').html(getFullPathHtml(data));
         }
     });
-};
-
-LoadData();
+});

+ 61 - 1
web/building_saas/main/js/models/bills.js

@@ -13,7 +13,26 @@ var Bills = {
         };
 
         // 用户定义private方法
-        var tools = {};
+        var tools = {
+            coverseTreeUpdateData: function (datas) {
+                var updateDatas = [];
+                datas.forEach(function (data) {
+                    var updateData = {};
+                    if (data.type === idTree.updateType.new) {
+                        updateData.updateType = 'ut_create';
+                        updateData.updateData = data.data;
+                    } else if (data.type === idTree.updateType.update) {
+                        updateData.updateType = 'ut_update';
+                        updateData.updateData = data.data;
+                    } else if (data.type === idTree.updateType.delete) {
+                        updateData.updateType = 'ut_delete';
+                        updateData.updateData = data.data;
+                    }
+                    updateDatas.push(updateData);
+                });
+                return updateDatas;
+            }
+        };
 
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
         var bills = function (proj) {
@@ -73,6 +92,47 @@ var Bills = {
             // to do
         };
 
+        bills.prototype.insertBills = function (parentId, nextSiblingId) {
+            var insertData = this.tree.getInsertData(parentId, nextSiblingId);
+            var that = this;
+            insertData.forEach(function (data) {
+                data.data.projectID = that.project.ID();
+                if (data.type === idTree.updateType.new) {
+                    that.datas.push(data.data);
+                }
+            })
+            project.pushNow('insertBills', ModuleNames.bills, tools.coverseTreeUpdateData(insertData));
+
+            return this.tree.insert(parentId, nextSiblingId);
+        };
+
+        bills.prototype.insertStdBills = function (parentId, nextSiblingId, stdBillsData) {
+            var insertData = this.tree.getInsertData(parentId, nextSiblingId);
+            var newData = null, that = this;
+            insertData.forEach(function (data) {
+                data.data.projectID = that.project.ID();
+                if (data.type === idTree.updateType.new) {
+                    data.data.code = stdBillsData.code;
+                    data.data.name = stdBillsData.name;
+                    data.data.unit = stdBillsData.unit;
+                    that.datas.push(data.data);
+                    newData = data.data;
+                }
+            });
+            project.pushNow('insertStdBills', ModuleNames.bills, tools.coverseTreeUpdateData(insertData));
+
+            return this.tree.insertByData(newData, parentId, nextSiblingId);
+        }
+
+        bills.prototype.deleteBills = function (node) {
+            var deleteData = this.tree.getDeleteData(node);
+            project.beginUpdate('deleteBills');
+            project.push(ModuleNames.bills, tools.coverseTreeUpdateData(deleteData, project.ID()));
+            project.endUpdate();
+
+            return this.tree.delete(node);
+        }
+
         return new bills(project);
     }
 };

+ 17 - 2
web/building_saas/main/js/models/project.js

@@ -94,6 +94,14 @@ var PROJECT = {
             this.mainTree.sortTreeItems();
         };
 
+        project.prototype.getParentTarget = function (node, targetField, targetValue) {
+            var parent = node;
+            while (parent && parent[targetField] !== targetValue) {
+                parent = parent.parent;
+            }
+            return parent;
+        };
+
         // 提供给各模块调用的统一从后台获取数据的方法
         /*project.prototype.pullData = function (url, data, successCallback, errorCallback) {
             $.ajax({
@@ -119,7 +127,8 @@ var PROJECT = {
                 type: "POST",
                 url: '/project/getData',
                 data: {'data': JSON.stringify({
-                    "project_id": tools._ID
+                    "project_id": tools._ID,
+                    "user_id": tools._userID
                 })},
                 dataType: 'json',
                 cache: false,
@@ -191,6 +200,12 @@ var PROJECT = {
             tools.updateData.push(moduleData);
         };
 
+        project.prototype.pushNow = function (operation, moduleName, data) {
+            this.beginUpdate(operation);
+            this.push(moduleName, data);
+            this.endUpdate();
+        }
+
         project.prototype.registerModule = function(moduleName, obj){
             if (!tools.modules.hasOwnProperty(moduleName)){
                 tools.modules[moduleName] = obj;
@@ -199,4 +214,4 @@ var PROJECT = {
 
         return new project();
     }
-};
+};

+ 7 - 3
web/building_saas/main/js/views/std_bills_lib.js

@@ -188,7 +188,7 @@ var LoadStdBills = (function () {
         "defaultRowHeight": 21,
         "cols":[{
             "width":150,
-            "readOnly":null,
+            "readOnly": true,
             "head":{
                 "titleNames":["项目编码"],
                 "spanCols":[1],
@@ -205,7 +205,7 @@ var LoadStdBills = (function () {
             }
         }, {
             "width":120,
-            "readOnly":null,
+            "readOnly": true,
             "head":{
                 "titleNames":["项目名称"],
                 "spanCols":[1],
@@ -222,7 +222,7 @@ var LoadStdBills = (function () {
             }
         }, {
             "width":40,
-            "readOnly":null,
+            "readOnly": true,
             "head":{
                 "titleNames":["计量单位"],
                 "spanCols":[1],
@@ -396,6 +396,10 @@ var LoadStdBills = (function () {
         });
     };
 
+    stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
+        ProjectController.addBills(project, billsSpread, stdBillsTree.items[args.row]);
+    });
+
     return LoadData;
 })();