zhongzewei 6 лет назад
Родитель
Сommit
bc808cbef9

+ 1 - 2
modules/reports/controllers/rpt_controller.js

@@ -22,8 +22,7 @@ import rpt_pdf_util from "../util/rpt_pdf_util";
 import rpt_svg_util from "../util/rpt_svg_util";
 import rpt_svg_util from "../util/rpt_svg_util";
 import fs from "fs";
 import fs from "fs";
 import strUtil from "../../../public/stringUtil";
 import strUtil from "../../../public/stringUtil";
-import rptDataExtractor from "../util/rpt_yanghu_data_util";
-
+import rptDataExtractor from "../util/rpt_construct_data_util";
 //统一回调函数
 //统一回调函数
 let callback = function(req, res, err, data){
 let callback = function(req, res, err, data){
     if(err){
     if(err){

+ 7 - 0
web/building_saas/main/html/main.html

@@ -798,6 +798,7 @@
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-decimal" role="tab" id="tab_poj-settings-decimal">小数位数</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-decimal" role="tab" id="tab_poj-settings-decimal">小数位数</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-6" role="tab" id="tab_poj-settings-6">人工单价调整</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-6" role="tab" id="tab_poj-settings-6">人工单价调整</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#display-setting" role="tab" id="tab_display_setting">呈现选项</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#display-setting" role="tab" id="tab_display_setting">呈现选项</a></li>
+                                <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#compilationIllustration" role="tab" id="tab_compilation_illustration">编制说明</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#system-setting" role="tab" id="tab_system_setting">系统选项</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#system-setting" role="tab" id="tab_system_setting">系统选项</a></li>
                             </ul>
                             </ul>
                         </div>
                         </div>
@@ -1023,6 +1024,12 @@
                                         <div><a style="margin-left: 5px;" class="btn btn-sm" id="recColSetting" href="javascript:void(0);">恢复默认列设置</a></div>
                                         <div><a style="margin-left: 5px;" class="btn btn-sm" id="recColSetting" href="javascript:void(0);">恢复默认列设置</a></div>
                                     </div>
                                     </div>
                                 </div>
                                 </div>
+                                <!--编制说明-->
+                                <div class="tab-pane fade" id="compilationIllustration" role="tabpanel">
+                                    <div class="modal-auto-height">
+                                        <textarea class="form-control" rows="15"></textarea>
+                                    </div>
+                                </div>
                                 <!--系统选项-->
                                 <!--系统选项-->
                                 <div class="tab-pane fade" id="system-setting" role="tabpanel">
                                 <div class="tab-pane fade" id="system-setting" role="tabpanel">
                                     <div class="modal-auto-height" style="overflow: hidden">
                                     <div class="modal-auto-height" style="overflow: hidden">

+ 27 - 7
web/building_saas/main/js/models/calc_base.js

@@ -1106,6 +1106,7 @@ let cbAnalyzer = {
         if(fArr.length !== rArr.length){
         if(fArr.length !== rArr.length){
             return false;
             return false;
         }
         }
+        rArr = Array.from(new Set(rArr));
         //判断合法性和存在性
         //判断合法性和存在性
         for(let i = 0, len = rArr.length; i < len; i++){
         for(let i = 0, len = rArr.length; i < len; i++){
             let idx = rArr[i] - 1;
             let idx = rArr[i] - 1;
@@ -1167,9 +1168,27 @@ let cbAnalyzer = {
         }
         }
         function isCycle(billIDs){
         function isCycle(billIDs){
             stack = Array.from(new Set(stack.concat(billIDs)));
             stack = Array.from(new Set(stack.concat(billIDs)));
-            /*if (checkStack(stack, sIDs)) {
+            if (checkStack(stack, sIDs)) {
                 return true;
                 return true;
-            }*/
+            }
+            for(let i = 0, len = billIDs.length; i < len; i++){
+                let block = cbTools.getStackBlock(billIDs[i]);
+                if(block.length > 0){
+                    stack = Array.from(new Set(stack.concat(block)));
+                    let cycleFlag = isCycle(block);
+                    if (cycleFlag === true) {
+                        return cycleFlag;
+                    }
+                    //return isCycle(block);
+                }
+            }
+            return false;
+        }
+        /*function isCycle(billIDs){
+            stack = Array.from(new Set(stack.concat(billIDs)));
+            /!*if (checkStack(stack, sIDs)) {
+                return true;
+            }*!/
             for(let i = 0, len = billIDs.length; i < len; i++){
             for(let i = 0, len = billIDs.length; i < len; i++){
                 let block = cbTools.getStackBlock(billIDs[i]);
                 let block = cbTools.getStackBlock(billIDs[i]);
                 if(block.length > 0){
                 if(block.length > 0){
@@ -1180,7 +1199,7 @@ let cbAnalyzer = {
                     return isCycle(block);
                     return isCycle(block);
                 }
                 }
             }
             }
-        }
+        }*/
     },
     },
     //四则运算合法性,控制不允许重复出现运算符,这里再判断一次,控制行引用只能F
     //四则运算合法性,控制不允许重复出现运算符,这里再判断一次,控制行引用只能F
     arithmeticLegal: function (exp) {
     arithmeticLegal: function (exp) {
@@ -1226,7 +1245,7 @@ let cbParser = {
     },
     },
     //获取行引用 eg: F10
     //获取行引用 eg: F10
     getFArr: function (exp) {
     getFArr: function (exp) {
-        let fRex = /F\d+/g;
+        let fRex = /F\d+\b/g;
         let fArr = exp.match(fRex);
         let fArr = exp.match(fRex);
         return cbTools.isDef(fArr) ? fArr : [];
         return cbTools.isDef(fArr) ? fArr : [];
     },
     },
@@ -1237,8 +1256,9 @@ let cbParser = {
         for(let i = 0, len = arr.length; i < len; i++){
         for(let i = 0, len = arr.length; i < len; i++){
             tempArr = tempArr.concat(arr[i].match(rRex));
             tempArr = tempArr.concat(arr[i].match(rRex));
         }
         }
-        let rArr = Array.from(new Set(tempArr));
-        return rArr;
+        return tempArr;
+        /*let rArr = Array.from(new Set(tempArr));
+        return rArr;*/
     },
     },
     //获取uuid
     //获取uuid
     getUID: function (arr) {
     getUID: function (arr) {
@@ -1438,7 +1458,7 @@ let cbParser = {
         //去{}
         //去{}
         v = v.replace(/[{, },]/g, '');
         v = v.replace(/[{, },]/g, '');
         //行引用
         //行引用
-        let fidArr = this.getFIDArr(v);
+        let fidArr = _.uniq(this.getFIDArr(v));
         let fExps = [];
         let fExps = [];
         for(let i = 0, len = fidArr.length; i < len; i++){
         for(let i = 0, len = fidArr.length; i < len; i++){
             let fExp = Object.create(null);
             let fExp = Object.create(null);

+ 14 - 0
web/building_saas/main/js/views/project_view.js

@@ -2202,6 +2202,8 @@ $('#displayZD').click(function () {
 });
 });
 
 
 $('#poj-set').on('show.bs.modal', function () {
 $('#poj-set').on('show.bs.modal', function () {
+    let compilationIV = projectObj.project.property.compilationIllustration ? projectObj.project.property.compilationIllustration : '';
+    $('#compilationIllustration textarea').val(compilationIV);
     let setCalcFlag = function (obj, val, curFlag) {
     let setCalcFlag = function (obj, val, curFlag) {
         obj.val(val);
         obj.val(val);
         if (val === curFlag) {
         if (val === curFlag) {
@@ -2312,6 +2314,10 @@ $('#property_default').click(function () {
         window.location.href = `/main?project=${projectID}`;
         window.location.href = `/main?project=${projectID}`;
     });
     });
 });
 });
+$('#tab_compilation_illustration').on('show.bs.tab', function () {
+    let v = projectObj.project.property.compilationIllustration ? projectObj.project.property.compilationIllustration : '';
+    $('#compilationIllustration textarea').val(v);
+});
 $('#property_ok').click(function () {
 $('#property_ok').click(function () {
     let project = projectObj.project,
     let project = projectObj.project,
         projectID = project.ID(),
         projectID = project.ID(),
@@ -2386,6 +2392,12 @@ $('#property_ok').click(function () {
     if(colSettingObj.dataChanged()){
     if(colSettingObj.dataChanged()){
         colSettingObj.updateColSetting();
         colSettingObj.updateColSetting();
     }
     }
+    //编制说明
+    let compilationIllustration = $('#compilationIllustration textarea').val();
+    if (compilationIllustration !== project.property.compilationIllustration) {
+        properties['property.compilationIllustration'] = compilationIllustration;
+        project.property.compilationIllustration = compilationIllustration;
+    }
     //系统选项
     //系统选项
     if(optionsOprObj.needToSaveGeneralOpts()){
     if(optionsOprObj.needToSaveGeneralOpts()){
         let v1 = optionsOprObj.rationQuanACToBillsQuan.prop('checked'),
         let v1 = optionsOprObj.rationQuanACToBillsQuan.prop('checked'),
@@ -3086,6 +3098,8 @@ function disableTools(){
     //呈现选项
     //呈现选项
     $('#display-setting').find('input').prop('disabled', 'disabled');
     $('#display-setting').find('input').prop('disabled', 'disabled');
     $('#recColSetting').remove();
     $('#recColSetting').remove();
+    //编制说明
+    $('#compilationIllustration textarea').prop('readOnly', true);
     //项目属性恢复默认系统设置
     //项目属性恢复默认系统设置
     $('#property_default').addClass('disabled');
     $('#property_default').addClass('disabled');
     //项目属性确定
     //项目属性确定