ソースを参照

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

chenshilong 7 年 前
コミット
dc57290a57

+ 1 - 0
config/gulpConfig.js

@@ -14,6 +14,7 @@ module.exports = {
         'public/web/gljUtil.js',
         'public/web/PerfectLoad.js',
         'lib/lodash/lodash.js',
+        'public/web/commonAlert.js'
     ],
     common_css:[
         'lib/bootstrap/css/bootstrap.min.css',

+ 15 - 0
public/web/commonAlert.js

@@ -0,0 +1,15 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Zhong
+ * @date 2018/6/15
+ * @version
+ */
+
+window.alert = function(str) {
+    $('#commonAlert').find('p').text(str);
+    $('#commonAlert').modal('show');
+};
+

+ 0 - 2
public/web/tree_sheet/tree_sheet_helper.js

@@ -323,8 +323,6 @@ var TREE_SHEET_HELPER = {
             let centerX = hitinfo.cellRect.x + offset + node.depth() * indent + node.depth() * levelIndent + indent / 2;
             let centerY = (hitinfo.cellRect.y + offset + (hitinfo.cellRect.y + offset + hitinfo.cellRect.height)) / 2;
             if (hitinfo.x > centerX - halfBoxLength && hitinfo.x < centerX + halfBoxLength && hitinfo.y > centerY - halfBoxLength && hitinfo.y < centerY + halfBoxLength) {
-                console.log(`hitinfo.sheet.name()`);
-                console.log(hitinfo.sheet.name());
                 node.setExpanded(!node.expanded);
                 let sheetName = hitinfo.sheet.name();
                 if(sheetName === 'stdBillsLib_bills'){

+ 10 - 0
web/building_saas/complementary_ration_lib/js/ration_glj.js

@@ -583,6 +583,16 @@ var rationGLJOprObj = {
         var me = this;
         if (me.cache["_GLJ_" + rationID]) {
             sheetCommonObj.cleanData(me.sheet, me.setting, -1);
+            me.cache["_GLJ_" + rationID].sort(function (a, b) {
+                let rst = 0;
+                if(a.code > b.code){
+                    rst = 1;
+                }
+                else if(a.code < b.code){
+                    rst = -1;
+                }
+                return rst;
+            });
             sheetsOprObj.showData(me.sheet, me.setting, me.cache["_GLJ_" + rationID], me.distTypeTree);
         }
     }

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

@@ -793,7 +793,7 @@
         <div class="modal-dialog" role="document">
             <div class="modal-content" style="width:670px;">
                 <div class="modal-header">
-                    <h5 class="modal-title">计算基选择</h5>
+                    <h5 class="modal-title">计算基选择</h5>
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                         <span aria-hidden="true">&times;</span>
                     </button>

+ 4 - 4
web/building_saas/main/js/models/ration.js

@@ -550,14 +550,14 @@ var Ration = {
             let needInstall = false;
             if (selected === null) { return; }
             if (selected.sourceType === project.Bills.getSourceType() && selected.depth() > 0) {
-                if (selected.source.children.length > 0) {
+                if(selected.data.type === billType.FB){
+                    return;
+                }
+                else if (selected.source.children.length > 0) {
                     alert('当前清单已有清单子项,不能套用定额。');
                 } else if (selected.data.calcBase&&selected.data.calcBase!="") {
                     alert('当前有基数计算不能插入定额/量价/工料机。');
                 } else {
-                    if(selected.data.type === billType.FB){
-                        return;
-                    }
                     billItemID = selected.source.getID();
                     nextID = selected.tree.rootID();
                     br = this.getBillsSortRation(billItemID);

+ 70 - 55
web/building_saas/main/js/views/character_content_view.js

@@ -29,6 +29,7 @@ let contentOprObj = {
         sheet.bind(EVENTS.ClipboardPasting, me.onClipboardPasting);
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
         sheet.bind(EVENTS.SelectionChanged, me.onSelectionChanged);
+        workBook.bind(EVENTS.RangeChanged, me.onRangeChanged);
         me.bindTools();
     },
     bindTools: function () {
@@ -202,6 +203,24 @@ let contentOprObj = {
             args.sheet.setValue(args.row, args.col, 0);
         }
     },
+    onRangeChanged: function (sender, args) {
+        let me = contentOprObj;
+        let rangeCell = isDef(args.changedCells[0]) ? args.changedCells[0] : null;
+        if(!rangeCell){
+            return;
+        }
+        let rangeData = isDef(me.currentCache[rangeCell.row]) ? me.currentCache[rangeCell.row] : null;
+        if(!rangeData){
+            return;
+        }
+        if(rangeCell.col === 0){//工作内容
+            me.updateContent(rangeData, '');
+        }
+        else if(rangeCell.col === 1){//输出
+            rangeData.isChecked = false;
+            me.save();
+        }
+    },
     //复制粘贴
     onClipboardPasting: function (sender, args) {
         if(projectInfoObj.projectInfo.property.lockBills){
@@ -232,6 +251,7 @@ let contentOprObj = {
     initSelection: function (row) {
         let me = contentOprObj;
         let disObj = {jobAdd: false, jobInsert: true, jobDel: true, jobUp: true, jobDown: true};
+        disObj.jobAdd = !pageCCOprObj.canAddType();
         if(projectInfoObj.projectInfo.property.lockBills){
             disObj.jobAdd = true;
             disObj.jobInsert = true;
@@ -286,7 +306,7 @@ let contentOprObj = {
                 //控制允许右键菜单在哪个位置出现
                 let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
                 let sheet = me.workBook.getSheet(0);
-                let addDis = pageCCOprObj.isBillsType() ? false : true,  insertDis = false, delDis = false, upDis = false, downDis = false;
+                let addDis = pageCCOprObj.canAddType() ? false : true,  insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                     //清单锁定,不可用
                     if(projectInfoObj.projectInfo.property.lockBills){
@@ -581,27 +601,32 @@ let characterOprObj = {
     },
     updateCharacter: function (item, character, value) {
         let me = characterOprObj;
-        if(character){
+        if(character !== null){
             item.character = character;
         }
-        if(value){
-            let isExist = false;
-            for(let i = 0, len = item.eigenvalue.length; i < len; i++){
-                if(item.eigenvalue[i].value === value){
-                    isExist = true;
-                    break;
+        if(value !== null){
+            if(value !== ''){
+                let isExist = false;
+                for(let i = 0, len = item.eigenvalue.length; i < len; i++){
+                    if(item.eigenvalue[i].value === value){
+                        isExist = true;
+                        break;
+                    }
+                }
+                //不存在,新增进eigenvalue,自动打勾输出
+                if(!isExist){
+                    //更新selected
+                    me.insertValue(item, value);
+                    item.isChecked = true;
+                }
+                //存在,选择特征值,自动打勾输出
+                else{
+                    me.changeSelected(item, value);
+                    item.isChecked = true;
                 }
             }
-            //不存在,新增进eigenvalue,自动打勾输出
-            if(!isExist){
-                //更新selected
-                me.insertValue(item, value);
-                item.isChecked = true;
-            }
-            //存在,选择特征值,自动打勾输出
-            else{
-                me.changeSelected(item, value);
-                item.isChecked = true;
+            else {
+                me.unsetSelected(item);
             }
         }
         me.save();
@@ -633,33 +658,15 @@ let characterOprObj = {
     onEditEnded: function (sender, args) {
         let me = characterOprObj, characterTxt;
         let preObj = me.currentCache.length > 0 ?  me.currentCache[me.currentCache.length - 1] : null;
-        if(args.editingText && args.editingText.toString().trim().length > 0){
-            //更新
-            if(args.row < me.currentCache.length){
-                let thisCha = me.currentCache[args.row];
-                if(args.col === 0){//特征
-                   me.updateCharacter(thisCha, args.editingText, null);
-                }
-                else if(args.col === 1){//特征值
-                    me.updateCharacter(thisCha, null, args.editingText);
-                }
-            }
-            /*//新增
-            else{
-                if(args.col === 0){//特征
-                    me.insertCharacter(args.editingText, null);
-                }
-                else if(args.col === 1){//特征值
-                    me.insertCharacter(null, args.editingText);
-                }
-            }*/
-        }
-        else{//恢复
-            if(args.col === 0){
-                args.sheet.setValue(args.row, args.col, me.currentCache.length > args.row ? me.currentCache[args.row].character + '' : '');
+        args.editingText = args.editingText ? args.editingText : '';
+        //更新
+        if(args.row < me.currentCache.length){
+            let thisCha = me.currentCache[args.row];
+            if(args.col === 0){//特征
+                me.updateCharacter(thisCha, args.editingText, null);
             }
-            else if(args.col === 1){
-                args.sheet.setValue(args.row, args.col, me.currentSelectedValue ? me.currentSelectedValue + '' : '');
+            else if(args.col === 1){//特征值
+                me.updateCharacter(thisCha, null, args.editingText);
             }
         }
     },
@@ -696,13 +703,23 @@ let characterOprObj = {
         if(!rangeData){
             return;
         }
-        if(rangeCell.col === 1){//特征值
+        if(rangeCell.col === 0){//特征
+            me.updateCharacter(rangeData, '', null);
+        }
+        else if(rangeCell.col === 1){//特征值
+            me.updateCharacter(rangeData, null, '');
+        }
+        else if(rangeCell.col === 2){
+            rangeData.isChecked = false;
+            me.save();
+        }
+        /*if(rangeCell.col === 1){//特征值
             rangeData.isChecked = false;
             for(let value of rangeData.eigenvalue){
                 value.isSelected = false;
             }
-        }
-        me.save();
+        }*/
+        //me.save();
     },
     //复选框控制输出
     onButtonClicked: function (sender, args) {
@@ -731,12 +748,9 @@ let characterOprObj = {
         }
     },
     initSelection: function (row) {
-        console.log('enter');
         let me = characterOprObj;
         let disObj = {itemAdd: false, itemInsert: true, itemDel: true, itemUp: true, itemDown: true};
-        if(projectObj.project.mainTree.selected.sourceType !== projectObj.project.Bills.getSourceType()){
-            disObj.itemAdd = true;
-        }
+        disObj.itemAdd = !pageCCOprObj.canAddType();
         //清单锁定,不可用
         if(projectInfoObj.projectInfo.property.lockBills){
             disObj.itemAdd = true;
@@ -780,7 +794,7 @@ let characterOprObj = {
                 //控制允许右键菜单在哪个位置出现
                 let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
                 let sheet = me.workBook.getSheet(0);
-                let addDis = pageCCOprObj.isBillsType() ? false : true, insertDis = false, delDis = false, upDis = false, downDis = false;
+                let addDis = pageCCOprObj.canAddType() ? false : true, insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                     //清单锁定,则不可用
                     if(projectInfoObj.projectInfo.property.lockBills){
@@ -866,11 +880,12 @@ let pageCCOprObj = {
             item.serialNo = count++;
         }
     },
-    //获得造价书当前焦点行的类型:清单、定额
-    isBillsType: function () {
+    //可以添加的类型:分项、补项、清单
+    canAddType: function () {
         let rst = false;
         let selectedNode = projectObj.mainController.tree.selected;
-        if(selectedNode && selectedNode.sourceType === projectObj.project.Bills.getSourceType()){//为清单
+        if(selectedNode && selectedNode.sourceType === projectObj.project.Bills.getSourceType() &&
+            (selectedNode.data.type === billType.FX || selectedNode.data.type === billType.BX || selectedNode.data.type === billType.BILL)){//为清单
             rst = true
         }
         return rst;

+ 2 - 0
web/building_saas/main/js/views/std_bills_lib.js

@@ -274,9 +274,11 @@ var billsLibObj = {
                     if (resultIndex === result.length - 1) {
                         stdBillsTreeController.setTreeSelected(result[0]);
                         billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[0].serialNo(), sel[0].col, 1, 1);
+                        billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.top);
                     } else {
                         stdBillsTreeController.setTreeSelected(result[resultIndex + 1]);
                         billsLibObj.stdBillsSpread.getActiveSheet().setSelection(result[resultIndex + 1].serialNo(), sel[0].col, 1, 1);
+                        billsLibObj.stdBillsSpread.getActiveSheet().showRow(result[resultIndex + 1].serialNo(), GC.Spread.Sheets.VerticalPosition.top);
                     }
                 });
             } else {

+ 53 - 14
web/building_saas/main/js/views/tender_price_view.js

@@ -13,7 +13,7 @@ let tender_obj={
             {headerName: "类别", headerWidth: 50, dataCode: "subType", hAlign: "center", dataType: "String",spanRows: [2],getText:'getText.subType'},
             {headerName: "项目名称", headerWidth: 200, dataCode: "name",showHint:true, hAlign: "left", dataType: "String",spanRows: [2]},
             {headerName: "计量\n单位", headerWidth: 60, dataCode: "unit", hAlign: "center", dataType: "String",spanRows: [2]},
-            {headerName: "工程量", headerWidth: 120, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number",spanRows: [2]},
+            {headerName: "工程量", headerWidth: 120, dataCode: "quantity", hAlign: "right", dataType: "Number",validator:"number",spanRows: [2],getText:'getText.quantity'},
             {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", hAlign: "center", cellType : "checkBox",dataType: "Number",spanRows: [2]},
             {headerName: ["初始报价","综合单价"], headerWidth: 80, dataCode: "feesIndex.common.unitFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [2,1]},
             {headerName: ["","综合合价"], headerWidth: 80, dataCode: "feesIndex.common.totalFee", hAlign: "right", dataType: "Number",validator:"number",spanCols : [0,1]},
@@ -113,8 +113,6 @@ let tender_obj={
             value = scMathUtil.roundForObj(value,getDecimal('process'));
             me.updateChildrenValue(node,dataCode,value,datas,nodes);
         }
-
-
         //在目标造价综合单价中输入数值,按项目属性中的清单单价精度取舍,并清空当前行的目标造价综合合价
         if(dataCode == 'targetUnitFee'){
             value = scMathUtil.roundForObj(value,getDecimal('unitPrice',node));
@@ -167,6 +165,15 @@ let tender_obj={
         scMathUtil.isDef(node.data.targetTotalFee)?updateData.data["targetTotalFee"] = null:'';
         return updateData;
     },
+    cleanTenderPrice:function (updateData,node) {//清空调整后报价
+        if(node.data.fees){
+            for(let i =0; i< node.data.fees.length; i++){
+                node.data.fees[i].tenderUnitFee?updateData.data["fees."+i+'.tenderUnitFee'] = 0:'';
+                node.data.fees[i].tenderTotalFee?updateData.data["fees."+i+'.tenderTotalFee'] = 0:'';
+            }
+        }
+    },
+
     calcOptionsChecking:function (option) {//调整选项检查,返回需要更新的数组
         let datas = [];
         let me = tender_obj;
@@ -206,7 +213,7 @@ let tender_obj={
                         if(key == 'ID' || key == 'id'){
                             continue;
                         }
-                        _.set(temObj,key,d.data[key]);
+                        me.setValue(temObj,key,d.data[key])
                     }
                 }
             }
@@ -214,6 +221,32 @@ let tender_obj={
             $.bootstrapLoading.end();
         })
     },
+    setValue:function (obj,key,value) {
+        let keyArray = key.split('.');
+        t_set(obj,value,keyArray,0);
+        function t_set(obj,value,arr,index) {
+            let nextIndex = index + 1;
+            let tkey = arr[index];
+            if(nextIndex < arr.length){
+                t_set(obj[tkey],value,arr,nextIndex)
+            }else if(nextIndex == arr.length){
+                obj[tkey] = value;
+            }
+        }
+
+    },
+    refreshTenderTreeByDatas:function (datas) {
+        let me = this;
+        let nodes = [];
+        for(let d of datas){
+            if(d.type == ModuleNames.bills || d.type == ModuleNames.ration){
+                let node = me.tenderTree.getNodeByID(d.data.ID);
+                node?nodes.push(node):'';
+            }
+        }
+        me.tenderController.refreshTreeNode(nodes);
+        me.initPageContent();
+    },
     treeSelectedChanged:function (node) {
         let me = tender_obj;
         //设置选中行底色和恢复前选中行底色
@@ -302,7 +335,21 @@ $(function () {
     });
 
     $('#cleanTender').bind('click',function () {
-       console.log("clean tender")
+        let me = tender_obj,datas = [];
+        for(let node of me.tenderTree.items){
+            let tem_updateData = {type:node.sourceType,data:{}};
+            me.cleanTargetPrice(tem_updateData,node);
+            me.cleanTenderCoe(tem_updateData,node);
+            me.cleanTenderPrice(tem_updateData,node);
+            if(!_.isEmpty(tem_updateData.data)){//如果需要更新
+                tem_updateData.data.ID = node.data.ID;
+                datas.push(tem_updateData);
+            }
+        }
+        datas.push({type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.tenderSetting.gljPriceTenderCoe':1}});//恢复人材机单价调整系数为1。
+        me.updateTenderData(datas,function () {
+            me.refreshTenderTreeByDatas(datas);
+        });
     });
 
     $('#calcPriceOption').change(function(){
@@ -312,15 +359,7 @@ $(function () {
         let updateData = {type:ModuleNames.project,data:{'ID' : projectObj.project.ID(),'property.tenderSetting.calcPriceOption':newVal}};
         datas.push(updateData);
         me.updateTenderData(datas,function () {
-            let nodes = [];
-            for(let d of datas){
-                if(d.type == ModuleNames.bills || d.type == ModuleNames.ration){
-                    let node = me.tenderTree.getNodeByID(d.data.ID);
-                    node?nodes.push(node):'';
-                }
-            }
-            me.tenderController.refreshTreeNode(nodes);
-            me.initPageContent();
+            me.refreshTenderTreeByDatas(datas);
         });
     });
 

+ 1 - 1
web/building_saas/pm/html/project-management-Recycle.html

@@ -1,5 +1,5 @@
 <div class="toolsbar">
-    <legend class="m-0 pb-1">全部</legend>
+    <legend class="m-0 pb-1">回收站</legend>
 </div>
 <div class="top-content">
   <!--  <div class="main-data-top" id="gc_waiting">

+ 4 - 2
web/building_saas/pm/js/pm_newMain.js

@@ -950,7 +950,7 @@ const projTreeObj = {
             refreshNodes = refreshNodes.concat(me.calEngineeringCost(oldProject));
             refreshNodes = refreshNodes.concat(me.calEngineeringCost(parent));
         }
-       // projTreeObj.remove(sheet, fromRow, rCout);
+        // projTreeObj.remove(sheet, fromRow, rCout);
 
         me.renderSheetFuc(sheet, function () {
             sheet.deleteRows(fromRow, rCout);
@@ -962,7 +962,7 @@ const projTreeObj = {
             children.push(newNode);
             for(let c of children){
                 sheet.getCell(c.serialNo(), 0).cellType(me.getTreeNodeCell(me.tree));
-               // me.refreshNodeData(c);
+                // me.refreshNodeData(c);
             }
             refreshNodes = refreshNodes.concat(children);
             me.refreshNodeData(refreshNodes);
@@ -2008,6 +2008,7 @@ function AddEngineering() {
  */
 function AddTender() {
     try {
+        $('#add-tender-confirm').addClass('disabled');
         let projName = $("#poj-name").val().trim();
         if(projName === ''){
             replaceClass($('#poj-name-info'), 'text-info', 'text-danger');
@@ -2073,6 +2074,7 @@ function AddTender() {
         let engineeringName = $('#tender-engineering').children("option:selected").text();
 
         let callback = function() {
+            $('#add-tender-confirm').removeClass('disabled');
             $("#add-tender-dialog").modal("hide");
             $('#tender-name').val('');
             $("#tender-fee-rate").children("option").removeAttr("selected");

+ 15 - 0
web/common/html/header.html

@@ -87,6 +87,20 @@
         </div>
     </div>
 </div>
+<!--弹出警告-->
+<div style="z-index: 1080;" class="modal fade" id="commonAlert" data-backdrop="false" style="display: none;" aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content" style="box-shadow: 0px 0px 5px #888888; width: 450px; height: 140px; left: 50%; transform: translate(-50%, 0%); top: -15px;">
+            <div class="modal-body">
+                <h5 style="margin-left: 10px;">提示</h5>
+                <p style="margin-top: 20px; margin-left: 10px; color: #757575; font-size: 14px"></p>
+                <div style="margin-top: 10px; margin-left: 350px">
+                    <button style="width: 65px; height: 30px; border-radius: 0.2rem; background: #4285F4; color: White; border: hidden; cursor:pointer" href="javascript: void(0);" data-dismiss="modal">确认</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
 <!-- inject:js -->
 <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/moment.min.js"></script>
@@ -95,4 +109,5 @@
 <script type="text/javascript" src="/public/web/gljUtil.js"></script>
 <script type="text/javascript" src="/public/web/PerfectLoad.js"></script>
 <script type="text/javascript" src="/lib/lodash/lodash.js"></script>
+<script type="text/javascript" src="/public/web/commonAlert.js"></script>
 <!-- endinject -->