Browse Source

Merge branch 'master' of http://192.168.1.12:3000/SmartCost/ConstructionCost

TonyKang 7 years atrás
parent
commit
d6485a65ca

+ 2 - 4
public/web/sheet/sheet_common.js

@@ -65,6 +65,7 @@ var sheetCommonObj = {
         var me = this, ch = GC.Spread.Sheets.SheetArea.colHeader;
         for (var i = 0; i < setting.header.length; i++) {
             sheet.setValue(0, i, setting.header[i].headerName, ch);
+            sheet.getCell(0, i, ch).wordWrap(true);
             sheet.setColumnWidth(i, setting.header[i].headerWidth?setting.header[i].headerWidth:100);
             sheet.setColumnVisible(i,setting.header[i].visible === false ? false:true);
         }
@@ -128,9 +129,6 @@ var sheetCommonObj = {
             vAlign = setting.header[col].vAlign?setting.header[col].vAlign:vAlign;
             me.setAreaAlign(sheet.getRange(-1, col, -1, 1), hAlign, vAlign);
             if (setting.header[col].formatter) {
-                //var style = new GC.Spread.Sheets.Style();
-                //style.formatter = setting.header[col].formatter;
-                //sheet.setStyle(row,col,style,GC.Spread.Sheets.SheetArea.viewport);
                 sheet.setFormatter(-1, col, setting.header[col].formatter, GC.Spread.Sheets.SheetArea.viewport);
             }
             if(setting.header[col].cellType === "checkBox"||setting.header[col].cellType === "button"){//clear and reset
@@ -143,7 +141,7 @@ var sheetCommonObj = {
             if(setting.header[col].visible === false){
                 sheet.setColumnVisible(col,false);
             }
-
+            sheet.getCell(0, col, GC.Spread.Sheets.SheetArea.colHeader).wordWrap(true);
         }
         for (var row = 0; row < data.length; row++) {
             //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);

+ 87 - 43
public/web/tree_sheet/tree_sheet_helper.js

@@ -150,10 +150,22 @@ var TREE_SHEET_HELPER = {
                     }
                     return data;
                 };
-                if(colSetting.data.field=="quantity"){
-                    let tag = node.data.quantityEXP?node.data.quantityEXP:'';
-                    sheet.setTag(iRow, iCol,tag);
+                if(sheet.name()=="mainSheet"){
+                    if(colSetting.data.field=="quantity"){
+                        let tag = node.data.quantityEXP?node.data.quantityEXP:'';
+                        sheet.setTag(iRow, iCol,tag);
+                    }
+                    if(colSetting.data.field=="code"){
+                        let tag = node.data.adjustState?node.data.adjustState:'';
+                        sheet.setTag(iRow, iCol,tag);
+                    }
+                    if(colSetting.data.field=="name"){
+                        let tag = node.data.itemCharacterText?node.data.itemCharacterText:'';
+                        sheet.setTag(iRow, iCol,tag);
+                    }
+
                 }
+
                 if (colSetting.data.getText && Object.prototype.toString.apply(colSetting.data.getText) === "[object Function]") {
                     cell.value(colSetting.data.getText(node));
                 } else {
@@ -352,6 +364,22 @@ var TREE_SHEET_HELPER = {
                 hitinfo.sheet.repaint();
             }
         };
+        TreeNodeCellType.prototype.processMouseEnter = function(hitinfo){
+            let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
+            let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col);
+            if(tag){
+                TREE_SHEET_HELPER.showTipsDiv(tag,setting,hitinfo);
+            }
+        };
+        TreeNodeCellType.prototype.processMouseLeave = function (hitinfo) {
+            let me = this;
+            TREE_SHEET_HELPER.tipDiv = 'hide';
+            if (me._toolTipElement) {
+                $(me._toolTipElement).hide();
+                me._toolTipElement = null;
+            };
+            TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理
+        };
 
         let TipCellType = function () {};
         TipCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
@@ -380,52 +408,27 @@ var TREE_SHEET_HELPER = {
             if(hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).wordWrap()==true){
                 return;
             }
-            if(dataField === 'name' || dataField === 'itemCharacterText' || dataField === 'jobContentText' || dataField === 'adjustState'){
+            if(dataField === 'itemCharacterText' || dataField === 'jobContentText' || dataField === 'adjustState'){
                 if((hitinfo.sheet.getParent() === projectObj.mainSpread||hitinfo.sheet.getParent() === tender_obj.tenderSpread) && textLength <= cellWidth)
                  return;
             }
-            if(dataField=="quantity"){
-                text = tag;
-            }else if(tag !== undefined && tag) {
-                text = tag;
-            }
-            if (setting.pos && text && text !== '') {
-                if (!this._toolTipElement) {
-                    let div = $('#autoTip')[0];
-                    if (!div) {
-                        div = document.createElement("div");
-                        $(div).css("position", "absolute")
-                            .css("border", "1px #C0C0C0 solid")
-                            .css("box-shadow", "1px 2px 5px rgba(0,0,0,0.4)")
-                            .css("font", "9pt Arial")
-                            .css("background", "white")
-                            .css("padding", 5)
-                            .attr("id", 'autoTip');
-                        $(div).hide();
-                        document.body.insertBefore(div, null);
-                    }
-                    this._toolTipElement = div;
-                    //实时读取位置信息
-                    if(sheet && sheet.getParent().qo){
-                        setting.pos = SheetDataHelper.getObjPos(sheet.getParent().qo);
-                    }
-                    $(this._toolTipElement).text(text);
-                    //清单指引、清单库做特殊处理
-                    if($(sheet.getParent().qo).attr('id') === 'stdBillsSpread' || $(sheet.getParent().qo).attr('id') === 'billsGuidance_bills'){
-                        $(this._toolTipElement).css('top', '').css('left', '').css('width', '');
-                        let marginLeftMouse;
-                        if($(this._toolTipElement).width() < hitinfo.x){
-                            marginLeftMouse = hitinfo.x - $(this._toolTipElement).width();
-                        }
-                       $(this._toolTipElement).css("top", setting.pos.y + hitinfo.y + 15).css("left", marginLeftMouse ? setting.pos.x + marginLeftMouse : setting.pos.x);
-                    }
-                    else {
-                        $(this._toolTipElement).css("top", setting.pos.y + hitinfo.y + 15).css("left", setting.pos.x + hitinfo.x + 15);
+
+            if(hitinfo.sheet.name()=="mainSheet"){
+                if(dataField=="quantity"){//显示工程量明细
+                    text = tag;
+                }if(dataField=="name"){//项目特征及内容隐藏时,显示特征及内容
+                    if(projectObj.ifItemCharHiden(setting)&&tag!=''){
+                        text = tag;
+                    }else if(textLength <= cellWidth){
+                        return;
                     }
-                    $(this._toolTipElement).show("fast");
-                    TREE_SHEET_HELPER.tipDiv = 'show';//做个标记
+                }
+                else if(tag !== undefined && tag) {
+                    text = tag;
                 }
             }
+
+            TREE_SHEET_HELPER.showTipsDiv(text,setting,hitinfo);
         };
         TipCellType.prototype.processMouseLeave = function (hitinfo) {
             let me = this;
@@ -460,6 +463,47 @@ var TREE_SHEET_HELPER = {
             TREE_SHEET_HELPER.refreshNodesVisible(tree.roots, sheet, true);
         });
     },
+    showTipsDiv:function (text,setting,hitinfo) {
+        if (setting.pos && text && text !== '') {
+            if (!this._toolTipElement) {
+                let div = $('#autoTip')[0];
+                if (!div) {
+                    div = document.createElement("div");
+                    $(div).css("position", "absolute")
+                        .css("border", "1px #C0C0C0 solid")
+                        .css("box-shadow", "1px 2px 5px rgba(0,0,0,0.4)")
+                        .css("font", "9pt Arial")
+                        .css("background", "white")
+                        .css("padding", 5)
+                        .attr("id", 'autoTip');
+                    $(div).hide();
+                    document.body.insertBefore(div, null);
+                }
+                this._toolTipElement = div;
+                //实时读取位置信息
+                if(hitinfo.sheet && hitinfo.sheet.getParent().qo){
+                    setting.pos = SheetDataHelper.getObjPos(hitinfo.sheet.getParent().qo);
+                }
+                $(this._toolTipElement).text(text);
+                //清单指引、清单库做特殊处理
+                if($(hitinfo.sheet.getParent().qo).attr('id') === 'stdBillsSpread' || $(hitinfo.sheet.getParent().qo).attr('id') === 'billsGuidance_bills'){
+                    $(this._toolTipElement).css('top', '').css('left', '').css('width', '');
+                    let marginLeftMouse;
+                    if($(this._toolTipElement).width() < hitinfo.x){
+                        marginLeftMouse = hitinfo.x - $(this._toolTipElement).width();
+                    }
+                    $(this._toolTipElement).css("top", setting.pos.y + hitinfo.y + 15).css("left", marginLeftMouse ? setting.pos.x + marginLeftMouse : setting.pos.x);
+                }
+                else {
+                    $(this._toolTipElement).css("top", setting.pos.y + hitinfo.y + 15).css("left", setting.pos.x + hitinfo.x + 15);
+                }
+                $(this._toolTipElement).show("fast");
+                TREE_SHEET_HELPER.tipDiv = 'show';//做个标记
+            }
+        }
+    },
+
+
     tipDivCheck(){
         setTimeout(function () {
             let tips = $('#autoTip');

+ 2 - 1
web/building_saas/main/js/models/main_consts.js

@@ -169,7 +169,8 @@ const rationType = {
 const rationPrefix = { //定额前缀,补/借
     none: '',
     complementary: '补',
-    borrow: '借'
+    borrow: '借',
+    replace: '换'
 };
 const rationFrom = {
     std: 'std',

+ 15 - 5
web/building_saas/main/js/models/project_glj.js

@@ -177,12 +177,12 @@ ProjectGLJ.prototype.loadCacheData = function (resort) {
     }
 };
 
-ProjectGLJ.prototype.updatePriceFromRG = function (recode, updateField, newval) {
+ProjectGLJ.prototype.updatePriceFromRG = function (recode, updateField, newval,callback) {
     if (updateField == 'marketPrice') {
-        this.updatePrice(recode, "market_price", newval,"rg");
+        this.updatePrice(recode, "market_price", newval,"rg",callback);
     }
     if (updateField == 'basePrice') {
-        this.updatePrice(recode, "base_price", newval,"rg");
+        this.updatePrice(recode, "base_price", newval,"rg",callback);
     }
 };
 
@@ -257,6 +257,15 @@ ProjectGLJ.prototype.updateGLJProperty = function (node, updateField, newval) {
 
 }
 
+ProjectGLJ.prototype.getPriceDecimal = function (glj) {//价格的小数位数,有无组成物,取值不同
+    if(notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0){
+         return getDecimal("glj.unitPriceHasMix");
+    }else {
+        return getDecimal('glj.unitPrice');
+    }
+
+};
+
 ProjectGLJ.prototype.updatePrice = function (recode, updateField, newval,from,cb) {
     let me = this;
     let projectGljs = this.datas.gljList;
@@ -266,6 +275,7 @@ ProjectGLJ.prototype.updatePrice = function (recode, updateField, newval,from,cb
         if(glj.unit_price[updateField] == newval){
             return;
         }
+        newval = scMathUtil.roundForObj(newval,this.getPriceDecimal(glj));
         let data = {id: glj.unit_price.id, field: updateField, newval: newval,project_id:glj.project_id,unit_price_file_id:glj.unit_price.unit_price_file_id};
         let callback = function (data) {
             if (updateField == 'base_price') {
@@ -348,7 +358,6 @@ ProjectGLJ.prototype.batchUpdateGLJProperty = function (updateMap,callback) {
 ProjectGLJ.prototype.batchUpdatePrice = function (changeInfo,sheetName,callback) {
     let me = this;
     let projectGljs = me.datas.gljList;
-    let decimal = getDecimal('glj.unitPrice');
     let updateData = [];
     let newValueMap = {};
     let gljs=[];
@@ -362,9 +371,10 @@ ProjectGLJ.prototype.batchUpdatePrice = function (changeInfo,sheetName,callback)
         let recode = sheetName =="materialTreeSheet"?projectGljObject.materialTree.items[ci.row].data:projectGljObject.projectGljSheetData[ci.row];
         if(dataCode=='basePrice'||dataCode=='marketPrice'){
             let editField = dataCode === 'basePrice'?"base_price":"market_price";
-            let newValue= scMathUtil.roundForObj(ci.value,decimal);
             let glj = _.find(projectGljs, {'id': recode.id});
+            let newValue = ci.value;
             if(glj&&glj.unit_price[editField]!=newValue){
+                newValue= scMathUtil.roundForObj(ci.value,this.getPriceDecimal(glj));
                 updateData.push({unit_price: glj.unit_price, field: editField, newval: newValue,project_id:glj.project_id});
                 newValueMap[glj.id]={field:editField,value:newValue};
                 gljs.push(glj);

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

@@ -541,7 +541,7 @@ var Ration = {
                 })
             }
         };
-        ration.prototype.addNewRation = function (itemQuery,rationType,callback=null) {
+        ration.prototype.addNewRation = function (itemQuery,rationType,callback=null,isEmpty=false) {
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
             let engineering = projectInfoObj.projectInfo.property.engineering;
@@ -572,7 +572,7 @@ var Ration = {
             };
             if(billItemID){
                 let newData =  me.getTempRationData(me.getNewRationID(), billItemID, serialNo, rationType);
-                let calQuantity = optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS, 'rationQuanACToBillsQuan');
+                let calQuantity =  isEmpty===true?false:optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS, 'rationQuanACToBillsQuan');
                 let brUpdate = [];
                 //更新兄弟节点的序列号
                 if (pre) {

+ 1 - 1
web/building_saas/main/js/views/glj_view.js

@@ -737,7 +737,7 @@ var gljOprObj = {
             if (args.editingText == null) {
                 updateField == 'marketPrice' ? newval = 0 : newval = "";
             } else {
-                var decimal = updateField == 'customQuantity' ? getDecimal("glj.quantity") : getDecimal("glj.unitPrice");
+                var decimal = updateField == 'customQuantity' ? getDecimal("glj.quantity") : 6;//对于市场价和定额价,这里只是中间的小数位数,后面更新前会根据有没有组成物再取值
                 newval = number_util.checkNumberValue(args.editingText, decimal);
                 if (newval == null) {
                     me.sheet.getCell(args.row, args.col).value(recode[updateField]);

+ 9 - 2
web/building_saas/main/js/views/main_tree_col.js

@@ -45,11 +45,18 @@ let MainTreeCol = {
             if(!isDef(node)){
                 return '';
             }
+
+            let rst = '';
             if(node.sourceType === projectObj.project.Ration.getSourceType() && node.data.type === rationType.ration
                 && isDef(node.data.code) && isDef(node.data.prefix) && node.data.prefix !== ''){
-                return node.data.prefix + node.data.code.replace(new RegExp(node.data.prefix, 'g'), '');
+                rst = node.data.prefix + node.data.code.replace(new RegExp(node.data.prefix, 'g'), '');
             }
-            return isDef(node.data.code) ? node.data.code : '';
+            else
+                rst = isDef(node.data.code) ? node.data.code : '';
+
+            if (node.data.adjustState && rst != '')
+                rst = rst + rationPrefix.replace;
+            return rst;
         },
         marketPrice:function (node) {
             if((node.sourceType === projectObj.project.Ration.getSourceType()&&node.data.type!=rationType.ration)||node.sourceType==projectObj.project.ration_glj.getSourceType()){

+ 1 - 7
web/building_saas/main/js/views/project_glj_view.js

@@ -67,12 +67,7 @@ projectGljObject={
         this.projectGljSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onProjectGljSelectionChange);
         this.projectGljSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onProjectGljEditStarting);
         this.projectGljSheet.name('projectGljSheet');
-
         this.projectGljSheet.setRowHeight(0, 45, 1);
-        let cell = this.projectGljSheet.getCell(0, 9, GC.Spread.Sheets.SheetArea.colHeader);
-        // console.log(cell.value());
-        cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center).vAlign(GC.Spread.Sheets.VerticalAlign.center).wordWrap(true);
-        // cell.wordWrap(true);
     },
     initMixRatio:function () {
         let me = projectGljObject;
@@ -893,8 +888,7 @@ projectGljObject={
             }
             gljOprObj.refreshView();
         };
-        if(dataCode=='basePrice'||dataCode=='marketPrice'){
-            value= scMathUtil.roundForObj(value,getDecimal('glj.unitPrice'));//修改市场价和修改定额价时需要重新记算很多受影响的树节点,现在改成与定字额工料机那里调相同的方法。
+        if(dataCode=='basePrice'||dataCode=='marketPrice'){//修改市场价和修改定额价时需要重新记算很多受影响的树节点,现在改成与定字额工料机那里调相同的方法。
             let editField = dataCode === 'basePrice'?"base_price":"market_price";
             projectObj.project.projectGLJ.updatePrice(recode,editField,value,'pg',callback);
         }else {

+ 26 - 18
web/building_saas/main/js/views/project_view.js

@@ -527,14 +527,13 @@ var projectObj = {
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
-        let orgV = info.sheet.getValue(info.row, info.col);
-        let newV;
-        if(node && node.sourceType === projectObj.project.Ration.getSourceType() && node.data.type === rationType.ration
-            && isDef(node.data.code) && isDef(node.data.prefix) && node.data.prefix !== rationPrefix.none && fieldName === 'code'){
-            if(node.data.prefix){
-                newV = orgV.replace(new RegExp(node.data.prefix), '');
-            }
-            info.sheet.setValue(info.row, info.col, newV);
+        let value = info.sheet.getValue(info.row, info.col);
+        if(fieldName === 'code' && node && calcTools.isRationItem(node) && isDef(node.data.code)){
+            if (isDef(node.data.prefix) && node.data.prefix !== rationPrefix.none){
+                value = value.replace(new RegExp(node.data.prefix), '');
+            };
+            value = value.replace(new RegExp(rationPrefix.replace), '');
+            info.sheet.setValue(info.row, info.col, value);
         }
         if(node&&fieldName =='quantity'&&(node.data.quantityEXP !==null||node.data.quantityEXP !==undefined)){
             info.sheet.setValue(info.row, info.col, node.data.quantityEXP);
@@ -842,7 +841,7 @@ var projectObj = {
                             newCol = codeCol;
                         }
                         sheet.setActiveCell(newRow, newCol);
-                    });
+                    },true);
                 }
             }
             //在定额/量价/人材机的编码单元格回车,焦点应跳动至本行的工程量单元格
@@ -1029,7 +1028,7 @@ var projectObj = {
                         return !project.Ration.canAdd(project.mainTree.selected);
                     },
                     callback: function (key, opt) {
-                        project.Ration.addNewRation(null,rationType.ration);
+                        project.Ration.addNewRation(null,rationType.ration,null,true);
                        // ProjectController.addRation(project, controller, rationType.ration);
                     }/*,
                     visible: function(key, opt){
@@ -1046,7 +1045,7 @@ var projectObj = {
                         return !project.Ration.canAdd(project.mainTree.selected);
                     },
                     callback: function (key, opt) {
-                        project.Ration.addNewRation(null,rationType.volumePrice);
+                        project.Ration.addNewRation(null,rationType.volumePrice,null,true);
                        // ProjectController.addRation(project, controller, rationType.volumePrice);
                     }/*,
                     visible: function(key, opt){
@@ -1163,10 +1162,11 @@ var projectObj = {
                     name: '编辑工程内容',
                     icon: 'fa-edit',
                     visible: function(key, opt){
-                         return project.Bills.isEngineerEst(project.mainTree.selected);//当焦点行是“专业工程暂估价”时,右键可见并有效。
+                         let  selected = project.mainTree.selected;
+                         return selected.sourceType==ModuleNames.bills&&project.Bills.isEngineerEst(selected);//当焦点行是“专业工程暂估价”时,右键可见并有效。
                     },
                     callback: function () {
-                        let node = project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.ENGINEERING_ESITIMATE);
+                        let node = project.mainTree.selected;//project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.ENGINEERING_ESITIMATE);
                         if(node){
                             projectObj.editContent(node,'engineeringContent');
                         }
@@ -1176,10 +1176,11 @@ var projectObj = {
                     name: '编辑服务内容',
                     icon: 'fa-edit',
                     visible: function(key, opt){
-                        return project.Bills.isTotalService(project.mainTree.selected);//当焦点行是“总承包服务费”时,右键可见并有效。
+                        let  selected = project.mainTree.selected;
+                        return selected.sourceType==ModuleNames.bills&&project.Bills.isTotalService(selected);//当焦点行是“总承包服务费”时,右键可见并有效。
                     },
                     callback: function () {
-                        let node = project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.TURN_KEY_CONTRACT);
+                        let node = project.mainTree.selected;//project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.TURN_KEY_CONTRACT);
                         if(node){
                             projectObj.editContent(node,'serviceContent');
                         }
@@ -1189,10 +1190,11 @@ var projectObj = {
                     name: '编辑签证及索赔依据',
                     icon: 'fa-edit',
                     visible: function(key, opt){
-                        return project.Bills.isClaimVisa(project.mainTree.selected);//当焦点行是“签证及索赔计价”时,右键可见并有效。
+                        let  selected = project.mainTree.selected;
+                        return selected.sourceType==ModuleNames.bills&&project.Bills.isClaimVisa(selected);//当焦点行是“签证及索赔计价”时,右键可见并有效。
                     },
                     callback: function () {
-                        let node = project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.CLAIM_VISA);
+                        let node = project.mainTree.selected;//project.Bills.getNodeByFlag(project.mainTree.selected,fixedFlag.CLAIM_VISA);
                         if(node){
                             projectObj.editContent(node,'claimVisa');
                         }
@@ -1604,7 +1606,13 @@ var projectObj = {
             let newValue = hintBox.value;
             projectObj.updateNodeField(node,newValue,fieldID);
         });
-    }
+    },
+    ifItemCharHiden:function (setting) {//项目特征及内容列是否隐藏
+        let col = _.find(setting.cols,function (item) {
+            return  item.data.field == "itemCharacterText";
+        })
+        return !col.data.visible;
+    },
 
 };
 

+ 3 - 1
web/building_saas/main/js/views/quantity_edit_view.js

@@ -188,11 +188,13 @@ let quantityEditObj = {
     },
     checkingAndUpdate(quantityEXP,node){
         let me = this;
-        quantityEXP = quantityEXP?quantityEXP.toUpperCase():'';//非空判断
         if(quantityEXP === node.data.quantityEXP){ //没有变化,不做任何操作
             projectObj.mainController.refreshTreeNode([node]);
             return true;
         }
+        quantityEXP = quantityEXP?quantityEXP.toUpperCase():'';//非空判断
+        quantityEXP =replaceAll('(','(',quantityEXP);//转换中文左右符号
+        quantityEXP =replaceAll(')',')',quantityEXP);
         let value = me.evalQuantityExp(quantityEXP,node);
         if(value!=='evalError'){
             if(node.data.hasOwnProperty('isFromDetail')&&node.data.isFromDetail==1){