Sfoglia il codice sorgente

用户自定义计算模板文件(第一层)

chenshilong 7 anni fa
parent
commit
94a824584c

+ 39 - 1
modules/main/controllers/calc_program_controller.js

@@ -10,7 +10,9 @@ module.exports = {
     getStdCalcProgram: getStdCalcProgram,
     saveCalcItem: saveCalcItem,
     saveCalcItems: saveCalcItems,
-    updateTemplate: updateTemplate
+    updateTemplate: updateTemplate,
+    addTemplate: addTemplate,
+    deleteTemplate: deleteTemplate
 };
 
 async function getProjectCalcProgram(req, res) {
@@ -87,4 +89,40 @@ async function updateTemplate(req, res) {
         res.json(result);
     });
 
+};
+
+async function addTemplate(req, res) {
+    let result = {};
+
+    calcProgramFacade.addTemplate(req.body.data, function (err, msg) {
+        if (err) {
+            result.error = 1;
+            result.data = 0;
+        }
+        else{
+            result.error = 0;
+            result.data = 1;
+        }
+        result.message = msg;
+        res.json(result);
+    });
+
+};
+
+async function deleteTemplate(req, res) {
+    let result = {};
+
+    calcProgramFacade.deleteTemplate(req.body.data, function (err, msg) {
+        if (err) {
+            result.error = 1;
+            result.data = 0;
+        }
+        else{
+            result.error = 0;
+            result.data = 1;
+        }
+        result.message = msg;
+        res.json(result);
+    });
+
 };

+ 60 - 7
modules/main/facade/calc_program_facade.js

@@ -20,7 +20,9 @@ module.exports = {
     save: save,
     saveCalcItem: saveCalcItem,
     saveCalcItems: saveCalcItems,
-    updateTemplate: updateTemplate
+    updateTemplate: updateTemplate,
+    addTemplate: addTemplate,
+    deleteTemplate: deleteTemplate
 };
 
 async function newProjectCalcProgramFile(data) {
@@ -155,15 +157,19 @@ function saveCalcItems(datas, callback) {
     });
 };
 
-// {  projectID: 3, templatesID: 5, name: '建筑工程', calcItems: [{},{}] }  其中name可选,calcItems可选,其它必填。
+// {  projectID: 3, ID: 5, name: '建筑工程', custom: true, calcItems: [{},{}] }  其中name、custom、calcItems可选,其它必填。
+// 插入一条计算规则、删除一条计算规则,则整套计算规则整个传入更新,仅calcItems指定值。
+// 修改文件名称,则只传入name。
 function updateTemplate(dataObj, callback) {
     dataObj=JSON.parse(dataObj);
     projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
         if(!err){
             for (let i = 0; i < data.templates.length; i++){
-                if (data.templates[i].ID == dataObj.templatesID){
+                if (data.templates[i].ID == dataObj.ID){
                     if (dataObj.name)
                         data.templates[i].name = dataObj.name;
+                    if (dataObj.custom)
+                        data.templates[i].custom = dataObj.custom;
                     if (dataObj.calcItems)
                         data.templates[i].calcItems = dataObj.calcItems;
                     data.save(function (err) {
@@ -184,8 +190,55 @@ function updateTemplate(dataObj, callback) {
     });
 };
 
+// {  projectID: 1233, ID: 19, name: '建筑工程2', custom: true, calcItems: [{},{}] }
+function addTemplate(dataObj, callback) {
+    dataObj=JSON.parse(dataObj);
+    projectCalcProgramsModel.update({projectID: dataObj.projectID},
+        {
+            $push:{
+                templates:{
+                    "ID": dataObj.ID,
+                    "name": dataObj.name,
+                    "calcItems": dataObj.calcItems,
+                    "custom": dataObj.custom
+                }
+            }
+        },
+        function (err) {
+            if (!err) {
+                callback(0, '计算模板创建成功');
+            }
+            else {
+                callback(1, '计算模板创建失败');
+            }
+        }
+    );
+};
+
+// {  projectID: 1233, ID: 19}
+function deleteTemplate(dataObj, callback) {
+    dataObj=JSON.parse(dataObj);
+    projectCalcProgramsModel.update({projectID: dataObj.projectID},
+        {
+            $pull:{
+                templates:{
+                    "ID": dataObj.ID
+                }
+            }
+        },
+        function (err) {
+            if (!err) {
+                callback(0, '计算模板删除成功');
+            }
+            else {
+                callback(1, '计算模板删除失败');
+            }
+        }
+    );
+};
+
 // for test
-/*let udata = {ID:8, code: '8.8.8', name: '被改成了888', hehe: '增加的属性'};
-saveCalcItem({projectID: 597, templatesID: 4, data: udata}, function (data) {
-    console.log({msg:data.msg, data: data.data});
-})*/
+// let s = '{"projectID":2164,"ID":23,"name":"建筑工程7","custom":true,"calcItems":[]}';
+// addTemplate(s, function(data){console.log('add successfull!')});
+// let s = '{"projectID":2164,"ID":15}';
+// deleteTemplate(s, function(data){console.log('delete successfull!')});

+ 2 - 0
modules/main/routes/calc_program_route.js

@@ -14,6 +14,8 @@ module.exports = function (app) {
     cpRouter.post('/saveCalcItem', cpController.saveCalcItem);
     cpRouter.post('/saveCalcItems', cpController.saveCalcItems);
     cpRouter.post('/updateTemplate', cpController.updateTemplate);
+    cpRouter.post('/addTemplate', cpController.addTemplate);
+    cpRouter.post('/deleteTemplate', cpController.deleteTemplate);
 
     app.use('/calcProgram',cpRouter);
 }

+ 7 - 0
web/building_saas/main/js/models/calc_program.js

@@ -905,6 +905,13 @@ let analyzer = {
         };
         return MaxID;
     },
+    templateNewName: function (name) {
+        let i = 2;
+        while (projectObj.project.calcProgram.compiledTemplateMaps[name + i]) {
+            i++;
+        };
+        return name + i;
+    }
 };
 
 let executeObj = {

+ 61 - 26
web/building_saas/main/js/views/calc_program_manage.js

@@ -138,36 +138,40 @@ let calcProgramManage = {
             },
             items: {
                 "copyTemplate": {
-                    name: "另存为...",
+                    name: "另存为",
                     icon: 'fa-sign-in',
                     callback: function (key, opt) {
+                        $.bootstrapLoading.start();
                         let template = calcProgramManage.getSelectionInfo().template;
                         let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
 
                         let newTemplate = {};
                         newTemplate.ID = analyzer.templateMaxID() + 1;
-                        newTemplate.name = `模板${newTemplate.ID}`;
+                        newTemplate.name = analyzer.templateNewName(template.name);
                         newTemplate.custom = true;
                         newTemplate.calcItems = [];
                         $.extend(true, newTemplate.calcItems, template.calcItems);
-                        let ts = projectObj.project.calcProgram.templates;
-                        ts.push(newTemplate);
-                        calcProgramManage.buildSheet();
 
-                        // let data = {
-                        //     'projectID': projectObj.project.ID(),
-                        //     'templatesID': template.ID,
-                        //     'calcItems': template.calcItems
-                        // };
-                        // calcProgramManage.updateTemplate(data, function (rst) {
-                        //     if (rst){
-                        //         projectObj.project.calcProgram.compileTemplate(template);
-                        //         calcProgramManage.refreshDetailSheet();
-                        //         calcProgramManage.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
-                        //         // projectObj.project.calcProgram.calcAllNodesAndSave();
-                        //         $.bootstrapLoading.end();
-                        //     }
-                        // });
+                        let data = {
+                            'projectID': projectObj.project.ID(),
+                            'ID': newTemplate.ID,
+                            'name': newTemplate.name,
+                            'custom': newTemplate.custom,
+                            'calcItems': template.calcItems
+                        };
+                        calcProgramManage.addTemplate(data, function (rst) {
+                            if (rst){
+                                let ts = projectObj.project.calcProgram.templates;
+                                ts.push(newTemplate);
+                                projectObj.project.calcProgram.compileTemplate(newTemplate);
+                                calcProgramManage.buildSheet();
+                                calcProgramManage.mainSpread.getActiveSheet().setSelection(ts.length - 1, 0, 1, 1);
+                                calcProgramManage.refreshDetailSheet();
+                                // projectObj.project.calcProgram.calcAllNodesAndSave();
+                                $.bootstrapLoading.end();
+                            }
+                            else $.bootstrapLoading.end();
+                        });
                     }
                 },
                 "spr1": '--------',
@@ -180,11 +184,24 @@ let calcProgramManage = {
                         return !canDelete;
                     },
                     callback: function () {
-                        let ts = projectObj.project.calcProgram.templates;
-                        let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
-                        ts.splice(idx, 1);
-                        calcProgramManage.buildSheet();
-
+                        $.bootstrapLoading.start();
+                        let data = {
+                            'projectID': projectObj.project.ID(),
+                            'ID': calcProgramManage.getSelectionInfo().template.ID
+                        };
+                        calcProgramManage.deleteTemplate(data, function (rst) {
+                            if (rst){
+                                let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
+                                projectObj.project.calcProgram.templates.splice(idx, 1);
+                                projectObj.project.calcProgram.compileAllTemps();
+                                calcProgramManage.buildSheet();
+                                calcProgramManage.mainSpread.getActiveSheet().setSelection(idx - 1, 0, 1, 1);
+                                calcProgramManage.refreshDetailSheet();
+                                // projectObj.project.calcProgram.calcAllNodesAndSave();
+                                $.bootstrapLoading.end();
+                            }
+                            else $.bootstrapLoading.end();
+                        });
                     }
                 }
             }
@@ -206,6 +223,7 @@ let calcProgramManage = {
 
                         let newItem = {};
                         newItem.ID = analyzer.calcItemMaxID(template) + 1;
+                        newItem.name = '新建';
                         newItem.memo = '自定义';
                         newItem.custom = true;
                         newItem.expression = '0';
@@ -258,7 +276,6 @@ let calcProgramManage = {
             }
         });
 
-
     },
     saveCalcItem: function (data, callback) {//data
         CommonAjax.post('/calcProgram/saveCalcItem', data,
@@ -269,7 +286,7 @@ let calcProgramManage = {
             }
         );
     },
-    updateTemplate: function (data, callback) {//data
+    updateTemplate: function (data, callback) {
         CommonAjax.post('/calcProgram/updateTemplate', data,
             function (result) {
                 if(callback){
@@ -278,6 +295,24 @@ let calcProgramManage = {
             }
         );
     },
+    addTemplate: function (data, callback) {
+        CommonAjax.post('/calcProgram/addTemplate', data,
+            function (result) {
+                if(callback){
+                    callback(result);
+                }
+            }
+        );
+    },
+    deleteTemplate: function (data, callback) {
+        CommonAjax.post('/calcProgram/deleteTemplate', data,
+            function (result) {
+                if(callback){
+                    callback(result);
+                }
+            }
+        );
+    },
     getSelectionInfo:function () {
         var templateIndex = this.mainSpread.getActiveSheet().getActiveRowIndex();
         var dIndex = this.detailSpread.getActiveSheet().getActiveRowIndex();