瀏覽代碼

计算基数:税前工程造价循环计算问题

zhongzewei 7 年之前
父節點
當前提交
2dd937b7fa

+ 3 - 3
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -69,9 +69,9 @@
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 3 - 3
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -482,9 +482,9 @@
                         <div class="col-12" id="gljRadios">
                             <div class="row">
                                 <div class="col-7" style="margin-top: 5px;">
-                                    <input type="radio" class="glj-radio" name="glj" value="allGljs">所有人材机&nbsp;&nbsp;
-                                    <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准人材机&nbsp;&nbsp;
-                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充人材机&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                                 </div>
                                 <div class="input-group col-5" style="margin-bottom: 5px;">
                                     <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 3 - 3
web/building_saas/main/html/main.html

@@ -812,9 +812,9 @@
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
                                         <div class="col-7" style="margin-top: 5px;">
-                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准人材机&nbsp;&nbsp;
-                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充人材机&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准&nbsp;&nbsp;
+                                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充&nbsp;&nbsp;
                                         </div>
                                         <div class="input-group col-5" style="margin-bottom: 5px;">
                                             <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 31 - 16
web/building_saas/main/js/models/calc_base.js

@@ -239,19 +239,15 @@ let cbTools = {
             //根据基数和行引用获取清单ID
             for(let i = 0, len = bases.length; i < len; i++){
                 //基数是跟清单直接关联的
-                /*if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])){
-                    //税前工程造价算法用了分部分项、项目措施、其他项目、规费里的底层价格,相当于引用了4条固定清单,特殊处理
+                if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])){
+                    //税前工程造价算法用了分部分项、项目措施(已排除)、其他项目、规费里的底层价格,相当于引用了4条固定清单,特殊处理
                     if(bases[i]['value'] === '税前工程造价'){
                         let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
-                            measure = cbTools.findBill(calcBase.fixedFlag.MEASURE),
                             other = cbTools.findBill(calcBase.fixedFlag.OTHER),
                             charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
                         if(subEngineering){
                             block.push(subEngineering.ID);
                         }
-                        if(measure){
-                            block.push(measure.ID);
-                        }
                         if(other){
                             block.push(other.ID);
                         }
@@ -262,11 +258,11 @@ let cbTools = {
                     else if(cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                         block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
                     }
-                }*/
-                if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])
+                }
+               /* if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])
                     && cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                     block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
-                }
+                }*/
                 else if(bases[i]['type'] === 'id'){
                     let node = cbTools.getNodeByID(bases[i]['value']);
                     if(cbTools.isDef(node)){
@@ -1164,15 +1160,32 @@ let cbAnalyzer = {
         let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(exp)));
         for(let i = 0, len = figureF.length; i < len; i++){
             let figure = figureF[i];
-            let bill = null;
+            let billsIDs = [];
             if(figure.type === 'base' && cbTools.isDef(baseFigures[figure.value])){
-                bill = cbTools.isDef(baseFigures[figure.value]['fixedBill']) ? baseFigures[figure.value]['fixedBill']['bill'] : null;
+                if(figure.value === '税前工程造价'){
+                    //税前工程造价算法在措施项目已排除自身,税前工程造价与措施项目无会造成循环的引用关系
+                    let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
+                        other = cbTools.findBill(calcBase.fixedFlag.OTHER),
+                        charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
+                    if(subEngineering){
+                        billsIDs.push(subEngineering.ID);
+                    }
+                    if(other){
+                        billsIDs.push(other.ID);
+                    }
+                    if(charge){
+                        billsIDs.push(charge.ID);
+                    }
+                }
+                else {
+                    billsIDs = cbTools.isDef(baseFigures[figure.value]['fixedBill']) ? [baseFigures[figure.value]['fixedBill']['bill']['ID']] : [];
+                }
             }
             else if(figure.type === 'id'){
                 let node = cbTools.getNodeByID(figure.value);
-                bill = cbTools.isDef(node) ? node.data : null;
+                billsIDs = cbTools.isDef(node) ? [node.data.ID] : [];
             }
-            if(cbTools.isDef(bill) && checkStack(getRefStack([bill.ID]), sIDs)){
+            if(cbTools.isDef(billsIDs) && billsIDs.length > 0 && isCycle(billsIDs)){
                 console.log('循环计算');
                 calcBase.errMsg = '表达式出现循环计算';
                 return true;
@@ -1188,16 +1201,18 @@ let cbAnalyzer = {
             }
             return false;
         }
-        function getRefStack(billIDs){
+        function isCycle(billIDs){
             stack = Array.from(new Set(stack.concat(billIDs)));
             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)));
-                    getRefStack(block);
+                    if(checkStack(stack, sIDs)){
+                        return true;
+                    }
+                    return isCycle(block);
                 }
             }
-            return stack;
         }
     },
     //四则运算合法性,控制不允许重复出现运算符,这里再判断一次,控制行引用只能F

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

@@ -741,7 +741,6 @@ var projectObj = {
                 if(projectReadOnly){
                     disableSpread(that.mainSpread);
                 }
-                console.log(decimalObj.decimal());
                 $.bootstrapLoading.end();
             }
             else {
@@ -849,8 +848,6 @@ var projectObj = {
                     newCol = quantityCol;
                 }
             }
-
-
         }
         //设置焦点
         sheet.setActiveCell(newRow, newCol);
@@ -865,32 +862,6 @@ var projectObj = {
         let me = this;
         let sheet = workBook.getActiveSheet();
         workBook.commandManager().register(registerName, operation);
-       /* workBook.commandManager().register(registerName, function(){
-            operation();
-           /!* let orgRow = sheet.getActiveRowIndex();
-            let orgCol = sheet.getActiveColumnIndex();
-            if(sheet.isEditing()){
-                sheet.endEdit();
-            }
-            let code = sheet.getValue(orgRow, 0);
-            let newRow, newCol;
-            if(!me.currentCache[orgRow] && code !== undefined && code !== null && orgCol !== me.setting.header.length - 1){
-                newRow = orgRow;
-                newCol = orgCol + 1;
-                sheet.setActiveCell(newRow, newCol);
-            }
-            else{
-                newRow = orgRow + 1;
-                newCol = me.currentCache[orgRow + 1] ? orgCol : 0;
-                sheet.setActiveCell(newRow, newCol);
-            }*!/
-            //触发事件
-            /!*me.onLeaveCell({type: 'LeaveCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: orgRow, col: orgCol});
-            me.onEnterCell({type: 'EnterCell'}, {sheet: sheet, sheetName: sheet.name(), cancel: false, row: newRow, col: newCol});
-            let newSels = [{row: newRow, rowCount: 1, col: newCol, colCount: 1}];
-            let oldSels = [{row: orgRow, rowCount: 1, col: orgRow, colCount: 1}];
-            me.onSelectionChanged({type: 'SelectionChanged'}, {sheet: sheet, sheetName: sheet.name(), newSelections: newSels, oldSelections: oldSels});*!/
-        });*/
         workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.enter, false, false, false, false);
         workBook.commandManager().setShortcutKey(registerName, GC.Spread.Commands.Key.enter, false, false, false, false);
     },

+ 38 - 3
web/building_saas/pm/js/pm_newMain.js

@@ -276,6 +276,38 @@ const projTreeObj = {
                         $('#allowCopyHint').hide();
                     }
                 },
+                "spr3": '--------',
+                "manageFiles": {
+                    name: "管理相关文件",
+                    icon: 'fa-list',
+                    disabled: function () {
+                        let selectedItem = projTreeObj.tree.selected;
+                        return !(selectedItem && selectedItem.data.projType !== projectType.folder);
+                    },
+                    callback: function (key, opt) {
+                        setDataToSideBar();
+                        $(".slide-sidebar").animate({width:"440"}).addClass("open");
+                        setTimeout(function () {
+                            $("body").bind('click', function (event) {
+                                var e = event || window.event; //浏览器兼容性
+                                if (!$(event.target).is('a')) {
+                                    var elem = event.target || e.srcElement;
+                                    while (elem) { //循环判断至跟节点,防止点击的是div子元素
+                                        if (elem.className == "open-sidebar" || elem.className == 'slide-sidebar open') {
+                                            return false;
+                                        }
+                                        if($(elem).attr('id') && $(elem).attr('id') === 'del-wj'){
+                                            return false;
+                                        }
+                                        elem = elem.parentNode;
+                                    }
+                                    $(".slide-sidebar").animate({width: "0"}).removeClass("open")// 关闭处理
+                                    $('body').unbind('click');
+                                }
+                            });
+                        }, 500);
+                    }
+                }
             }
         });
     },
@@ -711,7 +743,7 @@ const projTreeObj = {
             }
             if(hitinfo.sheet.name() != "copyToSheet"){//如果是复制到sheet,不用执行
                 //建设项目,侧滑汇总
-                if(node.data.projType === projectType.project && withingClickArea() && !$('.slide-sidebar').hasClass('open')){
+                /*if(node.data.projType === projectType.project && withingClickArea() && !$('.slide-sidebar').hasClass('open')){
                     setDataToSideBar();
                     $(".slide-sidebar").animate({width:"440"}).addClass("open");
                     setTimeout(function () {
@@ -733,9 +765,9 @@ const projTreeObj = {
                             }
                         });
                     }, 500);
-                }
+                }*/
                 //单项文件,进入造价书界面
-                else if(node.data.projType === projectType.tender && withingClickArea()){
+                 if(node.data.projType === projectType.tender && withingClickArea()){
                     let timeoutTime = 200;
                     if($('.slide-sidebar').hasClass('open')){
                         timeoutTime = 500;
@@ -2694,6 +2726,9 @@ function setDataToSideBar() {
     // 获取当前点击的数据
     let that = projTreeObj;
     let selectedItem = that.tree.selected;
+    while ([projectType.tender, projectType.engineering].includes(selectedItem.data.projType) && selectedItem.parent){
+        selectedItem = selectedItem.parent;
+    }
     let name = selectedItem.data.name;
     let target = selectedItem.data.projType === projectType.project ? '#summary-project' : '#summary-engineering';
     $(".side-content .p-3").hide();