Prechádzať zdrojové kódy

解析公式说明。

chenshilong 7 rokov pred
rodič
commit
685167c891

+ 26 - 2
web/building_saas/main/js/models/calc_program.js

@@ -847,9 +847,8 @@ let analyzer = {
         return rst;
     },
     getCompiledExpr: function (expression, labourCoe) {   // labourCoe 是 str 类型
-        let me = analyzer;
         let rst = expression;
-        let atIDArr = me.getAtIDArr(rst);
+        let atIDArr = analyzer.getAtIDArr(rst);
         let IDArr = atIDArr.map(function (atID) {
             return atID.slice(1);
         });
@@ -863,6 +862,22 @@ let analyzer = {
         rst = rst.replace(/L/g, labourCoe);
         return rst;
     },
+    getStatement: function (expression, template) {
+        let rst = expression;
+        let atIDArr = analyzer.getAtIDArr(rst);
+        let IDArr = atIDArr.map(function (atID) {
+            return atID.slice(1);
+        });
+        for (var i = 0; i < atIDArr.length; i++) {
+            let patt = new RegExp(atIDArr[i]);
+            let val = projectObj.project.calcProgram.compiledTemplates[template.ID].compiledCalcItems[IDArr[i]].name;
+            rst = rst.replace(patt, val);
+        };
+        rst = rst.replace(/\[/g, "");
+        rst = rst.replace(/\]/g, "");
+        rst = rst.replace(/L/g, '人工系数');
+        return rst;
+    },
 
     calcItemMaxID: function(template){
         let MaxID = 0;
@@ -916,6 +931,15 @@ let analyzer = {
         if (projectObj.project.calcProgram.compiledTemplateMaps[name])
             return true
         else return false;
+    },
+    templateIsUsed: function (ID){
+        let nodes = projectObj.project.mainTree.items;
+        for (let node of nodes){
+              if (node.data && node.data.programID && node.data.programID == ID) {
+                  return true;
+              }
+        };
+        return false;
     }
 };
 

+ 5 - 0
web/building_saas/main/js/views/calc_base_view.js

@@ -192,6 +192,10 @@ let calcBaseView = {
             let calcItem = calcProgramManage.getSelectionInfo().calcItem;
             if (calcItem.dispExprUser) {
                 me.inputExpr.val(calcItem.dispExpr);
+                if (calcItem.dispExpr == '0'){
+                    me.inputExpr.focus();
+                    me.inputExpr.select();
+                }
             }
             let bnArr = Object.keys(rationCalcBases);
             let baseArr = [];
@@ -286,6 +290,7 @@ let calcBaseView = {
                         calcItem.dispExprUser = analyzer.getDispExprUser(expr, lc);
                         calcItem.expression = analyzer.getExpression(expr, template);
                         calcItem.compiledExpr = analyzer.getCompiledExpr(calcItem.expression, lc);
+                        calcItem.statement = analyzer.getStatement(calcItem.expression, template);
 
                         let data = {
                             'projectID': projectObj.project.ID(),

+ 18 - 13
web/building_saas/main/js/views/calc_program_manage.js

@@ -121,14 +121,14 @@ let calcProgramManage = {
         }
     },
     onEnterCell: function (sender, args) {
-        let t = calcProgramManage.getSelectionInfo().template;
-        let c = calcProgramManage.getSelectionInfo().calcItem;
-        let lc = analyzer.calcItemLabourCoe(c);
-        c.dispExpr = analyzer.getDispExpr(c.expression, t);
-        c.dispExprUser = analyzer.getDispExprUser(c.dispExpr, lc);
-        c.compiledExpr = analyzer.getCompiledExpr(c.expression, lc);
-        let e = `ID:${c.ID} ${c.expression} ${c.dispExpr} ${c.dispExprUser} ${c.compiledExpr} ${c.custom}`;
-        projectObj.testDisplay('', e);
+        // let t = calcProgramManage.getSelectionInfo().template;
+        // let c = calcProgramManage.getSelectionInfo().calcItem;
+        // let lc = analyzer.calcItemLabourCoe(c);
+        // c.dispExpr = analyzer.getDispExpr(c.expression, t);
+        // c.dispExprUser = analyzer.getDispExprUser(c.dispExpr, lc);
+        // c.compiledExpr = analyzer.getCompiledExpr(c.expression, lc);
+        // let e = `ID:${c.ID} ${c.expression} ${c.dispExpr} ${c.dispExprUser} ${c.compiledExpr} ${c.custom}`;
+        // projectObj.testDisplay('', e);
     },
     loadMainContextMenu: function () {
         $.contextMenu({
@@ -167,7 +167,6 @@ let calcProgramManage = {
                                 calcProgramManage.buildSheet();
                                 calcProgramManage.mainSpread.getActiveSheet().setSelection(ts.length - 1, 0, 1, 1);
                                 calcProgramManage.refreshDetailSheet();
-                                // projectObj.project.calcProgram.calcAllNodesAndSave();
                                 $.bootstrapLoading.end();
                             }
                             else $.bootstrapLoading.end();
@@ -231,9 +230,15 @@ let calcProgramManage = {
                     },
                     callback: function () {
                         $.bootstrapLoading.start();
+                        let template = calcProgramManage.getSelectionInfo().template;
+                        if (analyzer.templateIsUsed(template.ID)) {
+                            $.bootstrapLoading.end();
+                            alert(`计算模板“${template.name}”已被使用,不允许删除!`);
+                            return;
+                        }
                         let data = {
                             'projectID': projectObj.project.ID(),
-                            'ID': calcProgramManage.getSelectionInfo().template.ID
+                            'ID': template.ID
                         };
                         calcProgramManage.deleteTemplate(data, function (rst) {
                             if (rst){
@@ -243,7 +248,6 @@ let calcProgramManage = {
                                 calcProgramManage.buildSheet();
                                 calcProgramManage.mainSpread.getActiveSheet().setSelection(idx - 1, 0, 1, 1);
                                 calcProgramManage.refreshDetailSheet();
-                                // projectObj.project.calcProgram.calcAllNodesAndSave();
                                 $.bootstrapLoading.end();
                             }
                             else $.bootstrapLoading.end();
@@ -269,7 +273,7 @@ let calcProgramManage = {
 
                         let newItem = {};
                         newItem.ID = analyzer.calcItemMaxID(template) + 1;
-                        newItem.name = '新建';
+                        // newItem.name = '新建';
                         newItem.memo = '自定义';
                         newItem.custom = true;
                         newItem.expression = '0';
@@ -284,7 +288,7 @@ let calcProgramManage = {
                                 projectObj.project.calcProgram.compileTemplate(template);
                                 calcProgramManage.refreshDetailSheet();
                                 calcProgramManage.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
-                                // projectObj.project.calcProgram.calcAllNodesAndSave();
+                                projectObj.project.calcProgram.calcAllNodesAndSave();
                                 $.bootstrapLoading.end();
                             }
                         });
@@ -314,6 +318,7 @@ let calcProgramManage = {
                                 if (rst){
                                     projectObj.project.calcProgram.compileTemplate(template);
                                     calcProgramManage.refreshDetailSheet();
+                                    projectObj.project.calcProgram.calcAllNodesAndSave();
                                     $.bootstrapLoading.end();
                                 }
                             });