浏览代码

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

zhongzewei 7 年之前
父节点
当前提交
8d1f5890d1

+ 38 - 3
modules/main/controllers/calc_program_controller.js

@@ -10,7 +10,9 @@ module.exports = {
     getStdCalcProgram: getStdCalcProgram,
     saveCalcItem: saveCalcItem,
     saveCalcItems: saveCalcItems,
-    updateTemplate: updateTemplate
+    updateTemplate: updateTemplate,
+    addTemplate: addTemplate,
+    deleteTemplate: deleteTemplate
 };
 
 async function getProjectCalcProgram(req, res) {
@@ -67,13 +69,12 @@ async function saveCalcItems(req, res) {
             result.error = 1;
         };
         result.message = msg;
+        res.json(result);
     });
-    res.json(result);
 };
 
 async function updateTemplate(req, res) {
     let result = {};
-
     calcProgramFacade.updateTemplate(req.body.data, function (err, msg) {
         if (err) {
             result.error = 1;
@@ -87,4 +88,38 @@ async function updateTemplate(req, res) {
         res.json(result);
     });
 
+};
+
+async function addTemplate(req, res) {
+    let result = {};
+    calcProgramFacade.addTemplate(req.body.data, function (err, msg) {
+        if (err) {
+            result.error = 1;
+            result.data = 0;
+        }
+        else{
+            result.error = 0;
+            result.data = 1;
+        }
+        result.message = msg;
+        res.json(result);
+    });
+
+};
+
+async function deleteTemplate(req, res) {
+    let result = {};
+    calcProgramFacade.deleteTemplate(req.body.data, function (err, msg) {
+        if (err) {
+            result.error = 1;
+            result.data = 0;
+        }
+        else{
+            result.error = 0;
+            result.data = 1;
+        }
+        result.message = msg;
+        res.json(result);
+    });
+
 };

+ 60 - 7
modules/main/facade/calc_program_facade.js

@@ -20,7 +20,9 @@ module.exports = {
     save: save,
     saveCalcItem: saveCalcItem,
     saveCalcItems: saveCalcItems,
-    updateTemplate: updateTemplate
+    updateTemplate: updateTemplate,
+    addTemplate: addTemplate,
+    deleteTemplate: deleteTemplate
 };
 
 async function newProjectCalcProgramFile(data) {
@@ -155,15 +157,19 @@ function saveCalcItems(datas, callback) {
     });
 };
 
-// {  projectID: 3, templatesID: 5, name: '建筑工程', calcItems: [{},{}] }  其中name可选,calcItems可选,其它必填。
+// {  projectID: 3, ID: 5, name: '建筑工程', custom: true, calcItems: [{},{}] }  其中name、custom、calcItems可选,其它必填。
+// 插入一条计算规则、删除一条计算规则,则整套计算规则整个传入更新,仅calcItems指定值。
+// 修改文件名称,则只传入name。
 function updateTemplate(dataObj, callback) {
     dataObj=JSON.parse(dataObj);
     projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
         if(!err){
             for (let i = 0; i < data.templates.length; i++){
-                if (data.templates[i].ID == dataObj.templatesID){
+                if (data.templates[i].ID == dataObj.ID){
                     if (dataObj.name)
                         data.templates[i].name = dataObj.name;
+                    if (dataObj.custom)
+                        data.templates[i].custom = dataObj.custom;
                     if (dataObj.calcItems)
                         data.templates[i].calcItems = dataObj.calcItems;
                     data.save(function (err) {
@@ -184,8 +190,55 @@ function updateTemplate(dataObj, callback) {
     });
 };
 
+// {  projectID: 1233, ID: 19, name: '建筑工程2', custom: true, calcItems: [{},{}] }
+function addTemplate(dataObj, callback) {
+    dataObj=JSON.parse(dataObj);
+    projectCalcProgramsModel.update({projectID: dataObj.projectID},
+        {
+            $push:{
+                templates:{
+                    "ID": dataObj.ID,
+                    "name": dataObj.name,
+                    "calcItems": dataObj.calcItems,
+                    "custom": dataObj.custom
+                }
+            }
+        },
+        function (err) {
+            if (!err) {
+                callback(0, '计算模板创建成功');
+            }
+            else {
+                callback(1, '计算模板创建失败');
+            }
+        }
+    );
+};
+
+// {  projectID: 1233, ID: 19}
+function deleteTemplate(dataObj, callback) {
+    dataObj=JSON.parse(dataObj);
+    projectCalcProgramsModel.update({projectID: dataObj.projectID},
+        {
+            $pull:{
+                templates:{
+                    "ID": dataObj.ID
+                }
+            }
+        },
+        function (err) {
+            if (!err) {
+                callback(0, '计算模板删除成功');
+            }
+            else {
+                callback(1, '计算模板删除失败');
+            }
+        }
+    );
+};
+
 // for test
-/*let udata = {ID:8, code: '8.8.8', name: '被改成了888', hehe: '增加的属性'};
-saveCalcItem({projectID: 597, templatesID: 4, data: udata}, function (data) {
-    console.log({msg:data.msg, data: data.data});
-})*/
+// let s = '{"projectID":2164,"ID":23,"name":"建筑工程7","custom":true,"calcItems":[]}';
+// addTemplate(s, function(data){console.log('add successfull!')});
+// let s = '{"projectID":2164,"ID":15}';
+// deleteTemplate(s, function(data){console.log('delete successfull!')});

+ 2 - 0
modules/main/routes/calc_program_route.js

@@ -14,6 +14,8 @@ module.exports = function (app) {
     cpRouter.post('/saveCalcItem', cpController.saveCalcItem);
     cpRouter.post('/saveCalcItems', cpController.saveCalcItems);
     cpRouter.post('/updateTemplate', cpController.updateTemplate);
+    cpRouter.post('/addTemplate', cpController.addTemplate);
+    cpRouter.post('/deleteTemplate', cpController.deleteTemplate);
 
     app.use('/calcProgram',cpRouter);
 }

+ 140 - 5
modules/reports/controllers/rpt_controller.js

@@ -9,7 +9,7 @@ import JV from "../rpt_component/jpc_value_define";
 
 let Template = mongoose.model('rpt_templates');
 let rptTplDataFacade = require("../facade/rpt_tpl_data_facade");
-//let fsUtil = require("../../../public/fsUtil");
+let fsUtil = require("../../../public/fsUtil");
 
 import rptTplFacade from "../facade/rpt_template_facade";
 import demoTemplateFacade from "../facade/rpt_tpl_data_demo_facade";
@@ -71,8 +71,143 @@ function getAllPagesCommonOrg(rpt_id, pageSize, option, cb) {
         }
     );
 }
-function setupCustomizeCfg(customizeCfg, rptTpl) {
-    //
+function setupCustomizeCfg(customizeCfg, rptTpl, defProperties) {
+    let tmpObj = {};
+    //1. 字体
+    let newFonts = [];
+    for (let font of defProperties.fonts) {
+        let copyFont = {};
+        copyFont.ID = font.ID;
+        for (let fontProp of JV.FONT_PROPS) {
+            copyFont[fontProp] = font[fontProp];
+        }
+        newFonts.push(copyFont);
+        tmpObj[font.ID] = copyFont;
+    }
+    let private_setup_font = function (propStr, newFont) {
+        if (tmpObj[propStr]) {
+            tmpObj[propStr].Name = newFont.Name;
+            tmpObj[propStr].FontHeight = String(newFont.FontHeight);
+            tmpObj[propStr].FontBold = newFont.FontBold;
+            tmpObj[propStr].FontItalic = newFont.FontItalic;
+            tmpObj[propStr].FontUnderline = newFont.FontUnderline;
+        }
+    };
+    for (let custFont of customizeCfg.fonts) {
+        switch (custFont.CfgDispName) {
+            case "表标题":
+                private_setup_font("ReportTitle_Main", custFont);
+                break;
+            case "列标题":
+                private_setup_font("HeaderColumn", custFont);
+                private_setup_font("FooterColumn", custFont);
+                break;
+            case "正文内容":
+                private_setup_font("Content", custFont);
+                break;
+            case "合计":
+                private_setup_font("GrandTotal", custFont);
+                private_setup_font("SectionTotal", custFont);
+                break;
+            case "表眉/表脚":
+                private_setup_font("Header", custFont);
+                private_setup_font("Footer", custFont);
+                break;
+        }
+    }
+    // 1.1 窄体
+    if (tmpObj["Content_Narrow"]) {
+        if (customizeCfg.isNarrow) {
+            tmpObj["Content_Narrow"].Name = "Arial Narrow";
+        } else {
+            if (tmpObj["Content"]) {
+                tmpObj["Content_Narrow"].Name = tmpObj["Content"].Name;
+            } else {
+                tmpObj["Content_Narrow"].Name = "宋体";
+            }
+            tmpObj["Content_Narrow"].Name = "Arial Narrow";
+        }
+    }
+    defProperties.fonts = newFonts;
+    //2. 页边距
+    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT] = customizeCfg.margins[JV.PROP_LEFT] / 10;
+    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT] = customizeCfg.margins[JV.PROP_RIGHT] / 10;
+    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP] = customizeCfg.margins[JV.PROP_TOP] / 10;
+    rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM] = customizeCfg.margins[JV.PROP_BOTTOM] / 10;
+    //3. 边框竖线
+    if (!(customizeCfg.showVerticalLine)) {
+        let private_copy_border = function (src) {
+            let rst = {};
+            rst.Position = src.Position;
+            rst.LineWeight = src.LineWeight;
+            rst.DashStyle = src.DashStyle;
+            rst.Color = src.Color;
+            return rst;
+        };
+        let newStyles = [];
+        for (let i =0 ; i < defProperties.styles.length; i++) {
+            let style = defProperties.styles[i];
+            newStyles.push(style);
+            if (style.ID === "BORDER_ALL_AROUND") {
+                let newStyle = {};
+                newStyle.ID  = style.ID;
+                newStyle.CfgDispName = style.CfgDispName;
+                newStyle.border_style = [];
+                for (let border of style.border_style) {
+                    let newBorder = private_copy_border(border);
+                    newStyle.border_style.push(newBorder);
+                    if (border.Position === "Left" || border.Position === "Right") {
+                        newBorder.LineWeight = 0;
+                    }
+                }
+                newStyles[newStyles.length - 1] = newStyle;
+            }
+        }
+        defProperties.styles = newStyles;
+    }
+    //4. 补0
+    let private_Setup_Format = function(tabFields) {
+        for (let tabField of tabFields) {
+            if (tabField[JV.PROP_FORMAT]) {
+                tabField[JV.PROP_FORMAT] = tabField[JV.PROP_FORMAT].replace(new RegExp("#","gm"),"0");
+            }
+        }
+    };
+    if (customizeCfg.fillZero) {
+        if (rptTpl.flowTab) {
+            private_Setup_Format(rptTpl.flowTab[JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS]);
+            private_Setup_Format(rptTpl.flowTab[JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS]);
+            private_Setup_Format(rptTpl.flowTab[JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS]);
+            private_Setup_Format(rptTpl.flowTab[JV.NODE_FLOW_GROUP][JV.PROP_SUM_FIELDS]);
+            for (let discrete of rptTpl.flowTab[JV.NODE_DISCRETE_INFO]) {
+                private_Setup_Format(discrete[JV.PROP_DISCRETE_FIELDS]);
+            }
+            if (rptTpl.flowTabEx) {
+                private_Setup_Format(rptTpl.flowTabEx[JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS]);
+                private_Setup_Format(rptTpl.flowTabEx[JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS]);
+                private_Setup_Format(rptTpl.flowTabEx[JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS]);
+                private_Setup_Format(rptTpl.flowTabEx[JV.NODE_FLOW_GROUP][JV.PROP_SUM_FIELDS]);
+                for (let discrete of rptTpl.flowTabEx[JV.NODE_DISCRETE_INFO]) {
+                    private_Setup_Format(discrete[JV.PROP_DISCRETE_FIELDS]);
+                }
+            }
+        } else if (rptTpl.billTab) {
+            private_Setup_Format(rptTpl.billTab[JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS]);
+            for (let discrete of rptTpl.billTab[JV.NODE_DISCRETE_INFO]) {
+                private_Setup_Format(discrete[JV.PROP_DISCRETE_FIELDS]);
+            }
+        } else if (rptTpl.crossTab) {
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_CONTENT][JV.TAB_CROSS_FIELDS]);
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_ROW][JV.TAB_CROSS_FIELDS]);
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_COL][JV.TAB_CROSS_FIELDS]);
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_COL_SUM][JV.TAB_CROSS_FIELDS]);
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_ROW_EXT][JV.TAB_CROSS_FIELDS]);
+            private_Setup_Format(rptTpl.crossTab[JV.NODE_CROSS_ROW_SUM_EXT][JV.TAB_CROSS_FIELDS]);
+            for (let discrete of rptTpl.crossTab[JV.NODE_DISCRETE_INFO]) {
+                private_Setup_Format(discrete[JV.PROP_DISCRETE_FIELDS]);
+            }
+        }
+    }
 }
 function getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, option, cb) {
     let rptTpl = null;
@@ -88,15 +223,15 @@ function getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, custo
                     let printCom = JpcEx.createNew();
                     if (pageSize) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pageSize;
                     if (orientation) rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] = orientation;
-                    if (customizeCfg) setupCustomizeCfg(customizeCfg, rptTpl);
                     let defProperties = rptUtil.getReportDefaultCache();
+                    if (customizeCfg) setupCustomizeCfg(customizeCfg, rptTpl, defProperties);
                     let dftOption = option||JV.PAGING_OPTION_NORMAL;
                     printCom.initialize(rptTpl);
                     printCom.analyzeData(rptTpl, tplData, defProperties, dftOption);
                     let maxPages = printCom.totalPages;
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
-                        //fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.jsp");
+                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.jsp");
                         cb(null, pageRst);
                     } else {
                         cb('Have errors while on going...', null);

+ 11 - 4
modules/users/models/log_model.js

@@ -63,7 +63,7 @@ class LogModel extends BaseModel {
         ip = ip.split(':');
         ip = ip[3] === undefined ? '' : ip[3];
 
-        let ipInfo = await this.getIpInfoFromApi(ip);
+        let ipInfo = '127.0.0.1';//await this.getIpInfoFromApi(ip);
 
         let userAgentObject = new UAParser(request.headers['user-agent']);
         let osInfo = userAgentObject.getOS();
@@ -127,15 +127,22 @@ class LogModel extends BaseModel {
                 // 请求接口
                 Request.get(getData, function (err, getResponse, body) {
                     if (err) {
-                        throw '请求错误';
+                        //throw '请求错误';
+                        resolve("请求错误");
+                        return;
                     }
                     if (getResponse.statusCode !== 200) {
-                        throw '获取数据失败!';
+                        resolve("获取数据失败!");
+                        return;
+                        //throw '获取数据失败!';
                     }
                     let responseData = JSON.parse(body);
                     let ipData = responseData.data !== undefined ? responseData.data : [];
                     if (ipData.ip === undefined) {
-                        throw '接口数据有误';
+                        resolve("接口数据有误,ip数据为空!");
+                        console.log(ipData);
+                        return;
+                        //throw '接口数据有误';
                     }
                     resolve(ipData.region + ipData.city + ' ' + ipData.isp);
                 });

+ 19 - 5
public/web/tree_sheet/tree_sheet_helper.js

@@ -357,7 +357,6 @@ var TREE_SHEET_HELPER = {
                 if(hitinfo.sheet.getParent() === projectObj.mainSpread && textLength <= cellWidth)
                  return;
             }
-
             if(dataField=="quantity"){
                 text = tag;
             }else if(tag !== undefined && tag) {
@@ -381,14 +380,18 @@ var TREE_SHEET_HELPER = {
                     this._toolTipElement = div;
                     $(this._toolTipElement).text(text).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';//做个标记
                 }
             }
         };
         TipCellType.prototype.processMouseLeave = function (hitinfo) {
-            if (this._toolTipElement) {
-                $(this._toolTipElement).hide();
-                this._toolTipElement = null;
-            }
+            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一直存在,所以设置一个超时处理
         }
 
         TREE_SHEET_HELPER.protectdSheet(sheet);
@@ -410,5 +413,16 @@ var TREE_SHEET_HELPER = {
             TREE_SHEET_HELPER.refreshTreeNodeData(setting, sheet, tree.roots, true);
             TREE_SHEET_HELPER.refreshNodesVisible(tree.roots, sheet, true);
         });
+    },
+    tipDivCheck(){
+        setTimeout(function () {
+            let tips = $('#autoTip');
+            if(TREE_SHEET_HELPER.tipDiv == 'show'){
+                return;
+            } else if(TREE_SHEET_HELPER.tipDiv == 'hide'&&tips){
+                tips.hide();
+                TREE_SHEET_HELPER._toolTipElement = null;
+            }
+        },600)
     }
 };

+ 38 - 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;
@@ -905,6 +920,27 @@ let analyzer = {
         };
         return MaxID;
     },
+    templateNewName: function (name) {
+        let i = 2;
+        while (projectObj.project.calcProgram.compiledTemplateMaps[name + i]) {
+            i++;
+        };
+        return name + i;
+    },
+    templateNameIsExist: function (name) {
+        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;
+    }
 };
 
 let executeObj = {

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

@@ -268,7 +268,17 @@ const cpFeeTypes = [
     {type: 'adjustLabour', name: '调整人工费'},
     {type: 'adjustMachineLabour', name: '调整机上人工费'},
     {type: 'estimate', name: '暂估费'},
-    {type: 'common', name: '工程造价'}
+    {type: 'common', name: '工程造价'},
+    {type: 'fee1', name: '费用1'}//,
+    // {type: 'fee2', name: '费用2'},
+    // {type: 'fee3', name: '费用3'},
+    // {type: 'fee4', name: '费用4'},
+    // {type: 'fee5', name: '费用5'},
+    // {type: 'fee6', name: '费用6'},
+    // {type: 'fee7', name: '费用7'},
+    // {type: 'fee8', name: '费用8'},
+    // {type: 'fee9', name: '费用9'}
+
 ];
 
 const engineeringType = {

+ 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(),

+ 125 - 38
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({
@@ -138,36 +138,85 @@ let calcProgramManage = {
             },
             items: {
                 "copyTemplate": {
-                    name: "另存为...",
-                    icon: 'fa-sign-in',
+                    name: "另存为",
+                    icon: 'copy',
                     callback: function (key, opt) {
+                        $.bootstrapLoading.start();
                         let template = calcProgramManage.getSelectionInfo().template;
                         let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
 
                         let newTemplate = {};
                         newTemplate.ID = analyzer.templateMaxID() + 1;
-                        newTemplate.name = `模板${newTemplate.ID}`;
+                        newTemplate.name = analyzer.templateNewName(template.name);
                         newTemplate.custom = true;
                         newTemplate.calcItems = [];
                         $.extend(true, newTemplate.calcItems, template.calcItems);
-                        let ts = projectObj.project.calcProgram.templates;
-                        ts.push(newTemplate);
-                        calcProgramManage.buildSheet();
 
-                        // let data = {
-                        //     'projectID': projectObj.project.ID(),
-                        //     'templatesID': template.ID,
-                        //     'calcItems': template.calcItems
-                        // };
-                        // calcProgramManage.updateTemplate(data, function (rst) {
-                        //     if (rst){
-                        //         projectObj.project.calcProgram.compileTemplate(template);
-                        //         calcProgramManage.refreshDetailSheet();
-                        //         calcProgramManage.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
-                        //         // projectObj.project.calcProgram.calcAllNodesAndSave();
-                        //         $.bootstrapLoading.end();
-                        //     }
-                        // });
+                        let data = {
+                            'projectID': projectObj.project.ID(),
+                            'ID': newTemplate.ID,
+                            'name': newTemplate.name,
+                            'custom': newTemplate.custom,
+                            'calcItems': template.calcItems
+                        };
+                        calcProgramManage.addTemplate(data, function (rst) {
+                            if (rst){
+                                let ts = projectObj.project.calcProgram.templates;
+                                ts.push(newTemplate);
+                                projectObj.project.calcProgram.compileTemplate(newTemplate);
+                                calcProgramManage.buildSheet();
+                                calcProgramManage.mainSpread.getActiveSheet().setSelection(ts.length - 1, 0, 1, 1);
+                                calcProgramManage.refreshDetailSheet();
+                                $.bootstrapLoading.end();
+                            }
+                            else $.bootstrapLoading.end();
+                        });
+                    }
+                },
+                "reNameTemplate": {
+                    name: "重命名...",
+                    icon: 'edit',
+                    disabled: function () {
+                        let custom = calcProgramManage.getSelectionInfo().template.custom;
+                        let canReName = custom ? custom : false;
+                        return !canReName;
+                    },
+                    callback: function (key, opt) {
+                        $.bootstrapLoading.start();
+                        let template = calcProgramManage.getSelectionInfo().template;
+                        let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
+
+                        let newName = prompt("请输入新的模板名称:", template.name);
+                        if (!newName || (newName && newName == template.name)) {
+                            $.bootstrapLoading.end();
+                            return;
+                        };
+
+                        while (analyzer.templateNameIsExist(newName)){
+                            alert(`“${newName}”已存在,请重新输入!`);
+                            newName = prompt("请输入新的模板名称:", template.name);
+                        };
+
+                        if (!newName || (newName && newName == template.name)) {
+                            $.bootstrapLoading.end();
+                            return;
+                        };
+
+                        template.name = newName;
+
+                        let data = {
+                            'projectID': projectObj.project.ID(),
+                            'ID': template.ID,
+                            'name': template.name
+                        };
+                        calcProgramManage.updateTemplate(data, function (rst) {
+                            if (rst){
+                                projectObj.project.calcProgram.compileTemplate(template);
+                                sheetCommonObj.showData(calcProgramManage.mainSpread.getSheet(0), calcProgramManage.mainSetting, calcProgramManage.datas);
+                                $.bootstrapLoading.end();
+                            }
+                            else $.bootstrapLoading.end();
+                        });
                     }
                 },
                 "spr1": '--------',
@@ -180,11 +229,29 @@ let calcProgramManage = {
                         return !canDelete;
                     },
                     callback: function () {
-                        let ts = projectObj.project.calcProgram.templates;
-                        let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
-                        ts.splice(idx, 1);
-                        calcProgramManage.buildSheet();
-
+                        $.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': template.ID
+                        };
+                        calcProgramManage.deleteTemplate(data, function (rst) {
+                            if (rst){
+                                let idx = calcProgramManage.mainSpread.getActiveSheet().getActiveRowIndex();
+                                projectObj.project.calcProgram.templates.splice(idx, 1);
+                                projectObj.project.calcProgram.compileAllTemps();
+                                calcProgramManage.buildSheet();
+                                calcProgramManage.mainSpread.getActiveSheet().setSelection(idx - 1, 0, 1, 1);
+                                calcProgramManage.refreshDetailSheet();
+                                $.bootstrapLoading.end();
+                            }
+                            else $.bootstrapLoading.end();
+                        });
                     }
                 }
             }
@@ -206,13 +273,14 @@ let calcProgramManage = {
 
                         let newItem = {};
                         newItem.ID = analyzer.calcItemMaxID(template) + 1;
+                        // newItem.name = '新建';
                         newItem.memo = '自定义';
                         newItem.custom = true;
                         newItem.expression = '0';
                         template.calcItems.splice(idx + 1, 0, newItem);
                         let data = {
                             'projectID': projectObj.project.ID(),
-                            'templatesID': template.ID,
+                            'ID': template.ID,
                             'calcItems': template.calcItems
                         };
                         calcProgramManage.updateTemplate(data, function (rst) {
@@ -220,12 +288,13 @@ 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();
                             }
                         });
                     }
                 },
+                "spr1": '--------',
                 "deleteCalcItem": {
                     name: '删除行',
                     icon: 'fa-remove',
@@ -242,13 +311,14 @@ let calcProgramManage = {
                             template.calcItems.splice(idx, 1);
                             let data = {
                                 'projectID': projectObj.project.ID(),
-                                'templatesID': template.ID,
+                                'ID': template.ID,
                                 'calcItems': template.calcItems
                             };
                             calcProgramManage.updateTemplate(data, function (rst) {
                                 if (rst){
                                     projectObj.project.calcProgram.compileTemplate(template);
                                     calcProgramManage.refreshDetailSheet();
+                                    projectObj.project.calcProgram.calcAllNodesAndSave();
                                     $.bootstrapLoading.end();
                                 }
                             });
@@ -258,7 +328,6 @@ let calcProgramManage = {
             }
         });
 
-
     },
     saveCalcItem: function (data, callback) {//data
         CommonAjax.post('/calcProgram/saveCalcItem', data,
@@ -269,7 +338,7 @@ let calcProgramManage = {
             }
         );
     },
-    updateTemplate: function (data, callback) {//data
+    updateTemplate: function (data, callback) {
         CommonAjax.post('/calcProgram/updateTemplate', data,
             function (result) {
                 if(callback){
@@ -278,6 +347,24 @@ let calcProgramManage = {
             }
         );
     },
+    addTemplate: function (data, callback) {
+        CommonAjax.post('/calcProgram/addTemplate', data,
+            function (result) {
+                if(callback){
+                    callback(result);
+                }
+            }
+        );
+    },
+    deleteTemplate: function (data, callback) {
+        CommonAjax.post('/calcProgram/deleteTemplate', data,
+            function (result) {
+                if(callback){
+                    callback(result);
+                }
+            }
+        );
+    },
     getSelectionInfo:function () {
         var templateIndex = this.mainSpread.getActiveSheet().getActiveRowIndex();
         var dIndex = this.detailSpread.getActiveSheet().getActiveRowIndex();

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

@@ -84,7 +84,7 @@ let MainTreeCol = {
             return node.data.subType != 201 && node.data.subType != 4 && node.data.subType != 5
         },
         commonUnitFee: function (node) {
-            return !calcTools.isNullBill(node);
+            return true;//!calcTools.isNullBill(node); 设置为只读,有新需求再修改
         },
         //根据节点、父节点类型判断是否可用计算基数
         calcBaseType: function (node) {

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

@@ -99,7 +99,7 @@
                                 </div>
                                 <a href="javascript:void(0);" class="btn btn-sm" id="rename-btn">重命名</a>
                                 <a href="javascript:void(0);" class="btn btn-sm" id="del-btn">删除</a>
-                                <a href="javascript:void(0);" class="btn btn-sm" id="move-to-btn">移动到...</a>
+                               <!-- <a href="javascript:void(0);" class="btn btn-sm" id="move-to-btn">移动到...</a>-->
                                 <a href="javascript:void(0);" class="btn btn-sm" id="copy-to-btn">复制到...</a>
                                 <a href="" class="btn btn-sm" id="share-btn">共享</a>
                                 <a href="" class="btn btn-sm" id="cooperate-btn">协同</a>

+ 79 - 80
web/building_saas/pm/js/pm_newMain.js

@@ -176,7 +176,7 @@ const projTreeObj = {
     onDragDropBlock : function (sender,args) {//拖动移动项目位置
         let selected = projTreeObj.tree.selected;
         let targetNode = projTreeObj.tree.items[args.toRow];
-        let projectMap = {},feeRateMap={},unitPriceMap = {},parent=null,next = null;
+        let projectMap = {},feeRateMap={},unitPriceMap = {},parent=null,next = null,oldProject=null;
         let rootProjectID = null;//记录建设项目ID
         //let updateObj = {project:[],feeRateFile:[],unitPriceFile:[]};
         args.cancel = true;//首先取消填充的动作
@@ -185,6 +185,7 @@ const projTreeObj = {
         }
 
         if(selected.data.projType=="Tender"){//移动单位工程
+            oldProject = selected.parent.parent;//记录原来的建设项目
             if(targetNode.data.projType=="Tender"||targetNode.data.projType=="Engineering"){//只能移动到这两个地方
                 if(targetNode.data.projType=="Tender"){//移动到单位工程后面
                     [parent,next] = getMoveUpdateData(selected,targetNode,projectMap,true);
@@ -201,6 +202,7 @@ const projTreeObj = {
             }
         }
         if(selected.data.projType=="Engineering"){//移动的是单项工程
+            oldProject = selected.parent;//记录原来的建设项目
             if(targetNode.data.projType=="Engineering"||targetNode.data.projType=="Project"){//目标位置是单项工程和建设项目
                 if(targetNode.data.projType=="Engineering"){
                     [parent,next] = getMoveUpdateData(selected,targetNode,projectMap,true);
@@ -245,7 +247,7 @@ const projTreeObj = {
                     }
                 }
             }
-            projTreeObj.moveTo(selected,targetNode,parent,next);
+            projTreeObj.moveTo(selected,targetNode,parent,next,oldProject);
             $.bootstrapLoading.end();
         });
         function getMoveUpdateData(sel,target,projectMap,sameLevel) {
@@ -591,8 +593,8 @@ const projTreeObj = {
         let dataCode = this.setting.header[col]['dataCode'];
         let value = '';
         if(dataCode === 'engineeringCost'){
-            if(node.data.projType === projectType.tender){
-                value =  node.data.engineeringCost ? node.data.engineeringCost : 0;
+            if(node.data.projType !== projectType.folder){//显示除了文件夹节点的工程造价结果 -- vincent
+                value =  node.data.engineeringCost ? node.data.engineeringCost : '0.00';
             }
         }
         else if(dataCode === 'unitPriceFile'){
@@ -633,16 +635,67 @@ const projTreeObj = {
         };
         me.renderSheetFuc(sheet, fuc);
     },
-    refreshNodeData: function (node) {
+    refreshNodeData: function (nodes) {
         let me = this;
         let sheet = me.workBook.getActiveSheet();
         let header = me.setting.header;
-        let rIdx = me.tree.items.indexOf(node);
         me.renderSheetFuc(sheet, function () {
-            for(let i = 0; i < header.length; i++){
-                me.setCellValue({row: rIdx, col: i}, node);
+
+            if(_.isArray(nodes)){
+                for(let t of nodes){
+                    setSheetCellData(t);
+                }
+            }else {
+                setSheetCellData(nodes);
             }
         });
+        function setSheetCellData(n) {
+            let rIdx = me.tree.items.indexOf(n);
+            for(let i = 0; i < header.length; i++){
+                me.setCellValue({row: rIdx, col: i}, n);
+            }
+        }
+
+    },
+    sumEngineeringCost:function(){
+        let projectNodes = _.filter(projTreeObj.tree.items,function (item) {
+            return item.data.projType == projectType.project;
+        })
+        for(let p of projectNodes){
+            this.calEngineeringCost(p);
+        }
+    },
+    calEngineeringCost:function (node) {
+        let projectNode = null;//建设项目节点
+        let refreshNodes = [];
+        if(node.data.projType == projectType.project){
+            projectNode = node;
+        }
+        if(node.data.projType == projectType.engineering){
+            projectNode = node.parent;
+        }
+        if(node.data.projType == projectType.tender){
+            projectNode = node.parent&&node.parent.parent?node.parent.parent:null;
+        }
+        if(projectNode){
+            calNode(projectNode);
+        }
+        let children = projectNode.children;
+        refreshNodes.push(projectNode);
+        return  refreshNodes.concat(children);
+        function calNode(node) {
+            let tem_sum = 0;
+            if(node.data.projType == projectType.tender){
+                return;
+            }
+            for(let t of node.children){
+                calNode(t);
+                let temP = scMathUtil.roundForObj(t.data.engineeringCost,2);
+                tem_sum = scMathUtil.roundForObj(temP+tem_sum,2);
+            }
+            node.data.engineeringCost =  scMathUtil.roundToString(tem_sum,2);
+        }
+
     },
     insert: function (data, parent, next) {
         let node = this.tree.addNodeData(data, parent, next);
@@ -682,29 +735,34 @@ const projTreeObj = {
         this.workBook.getActiveSheet().deleteRows(orgRow, 1);
         this.addRow(this.tree.items[newRow]);
     },
-    moveTo : function(select,target,parent,next){
+    moveTo : function(select,target,parent,next,oldProject){
         let me = this;
         let fromRow = select.serialNo();
         let rCout = select.posterityCount() + 1;//删除的行数
-        let toRow = target.serialNo();
         let sheet = me.workBook.getActiveSheet();
+        let refreshNodes = [];
         me.tree.removeNode(select);//删除旧节点
         let newNode  = addNewNodes(select, parent, next);
+        if(oldProject){
+            refreshNodes = refreshNodes.concat(me.calEngineeringCost(oldProject));
+            refreshNodes = refreshNodes.concat(me.calEngineeringCost(parent));
+        }
        // projTreeObj.remove(sheet, fromRow, rCout);
 
         me.renderSheetFuc(sheet, function () {
             sheet.deleteRows(fromRow, rCout);
             sheet.addRows(newNode.serialNo(),rCout);
             let oldSelection = sheet.getSelections()[0];
-            let newSelection = {row: newNode.serialNo(), rowCount: 1,col:oldSelection.col,colCount:oldSelection.colCount};
             me.initSelection({row: newNode.serialNo(), rowCount: oldSelection.rowCount}, oldSelection);
             sheet.setSelection(newNode.serialNo(),oldSelection.col,oldSelection.rowCount,oldSelection.colCount);
             let children = newNode.getAllChildren();
             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);
         });
 
         function addNewNodes(node,parent,next) {
@@ -964,14 +1022,19 @@ $(document).ready(function() {
             updateData = GetDeleteUpdateData(projTreeObj.tree.selected);
             UpdateProjectData(updateData, function () {
                 dialog.modal('hide');
+                let selected = projTreeObj.tree.selected;
                 //删除行号
-                let rIdx = projTreeObj.tree.items.indexOf(projTreeObj.tree.selected);
+                let rIdx = projTreeObj.tree.items.indexOf(selected);
                 //删除行数
-                let rCout = projTreeObj.tree.selected.posterityCount() + 1;
-                projTreeObj.tree.removeNode(projTreeObj.tree.selected);
+                let rCout = selected.posterityCount() + 1;
+                projTreeObj.tree.removeNode(selected);
+                let refreshNodes = projTreeObj.calEngineeringCost(selected);
                 //delete view
                 let sheet = projTreeObj.workBook.getActiveSheet();
                 projTreeObj.remove(sheet, rIdx, rCout);
+                if(selected.data.projType == projectType.tender||selected.data.projType == projectType.engineering){
+                    projTreeObj.refreshNodeData(refreshNodes);//刷新工程造价信息
+                }
             });
         }
     });
@@ -1011,71 +1074,6 @@ $(document).ready(function() {
         });
     });
 
-    // 移动到按钮点击
-    $('#move-to-btn').click(function () {
-        if (projTreeObj.tree && projTreeObj.tree.selected) {
-            $('#move-to-dialog').modal('show');
-        }
-    });
-
-    // 移动到窗口内容重组
-    $('#move-to-dialog').on('show.bs.modal', function () {
-        movetoZTree = ConvertTreeToZtree(projTreeObj.tree, $('#treeDemo'), projTreeObj.tree.selected);
-    });
-
-    // 移动到操作
-    $('#move-to-confirm').click(function () {
-        let updateData = null;
-        let dialog = $('#move-to-dialog');
-        let target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo'));
-        let cur = projTreeObj.tree.selected;
-
-        if (!target) {
-            dialog.modal('hide');
-            return false;
-        }
-        if (target.data.projType !== projectType.engineering) {
-            alert("请移动到单项工程中!");
-            return false;
-        }
-        // 判断同级是否有同名
-        if (target.children.length > 0) {
-            for (let tmp in target.children) {
-                if (tmp === 0) {
-                    continue;
-                }
-                if (target.children[tmp].data.name === cur.data.name) {
-                    alert("对应单项工程中存在同名数据!");
-                    return false;
-                }
-            }
-        }
-
-        let parent = target;
-        let next = target.firstChild();
-        if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
-            let typeInfo = {
-                updateType: 'update',
-                projectType: null
-            };
-            updateData = GetUpdateData(null, parent, next, '', null, projTreeObj.tree.selected.id(), typeInfo);
-            //维护cur pre
-            let curPre = cur.preSibling();
-            if(curPre){
-                updateData.push({updateType: 'update', updateData: {ID: curPre.id(), NextSiblingID: cur.nid()}});
-            }
-            UpdateProjectData(updateData, function (data) {
-                dialog.modal('hide');
-                let orgRow = projTreeObj.tree.items.indexOf(projTreeObj.tree.selected);
-                projTreeObj.tree.move(projTreeObj.tree.selected, parent, next);
-                let newRow = projTreeObj.tree.items.indexOf(projTreeObj.tree.selected);
-                //view move
-                projTreeObj.move(orgRow, newRow);
-            });
-        } else {
-            dialog.modal('hide');
-        }
-    });
 
     // 复制到按钮点击
     $('#copy-to-btn').click(function () {
@@ -1215,6 +1213,7 @@ function init() {
         projTreeObj.tree = pmTree.createNew(projTreeObj.setting, datas);
         projTreeObj.tree.selected = projTreeObj.tree.items[0];
         projTreeObj.buildSheet();
+        projTreeObj.sumEngineeringCost();
         projTreeObj.showTreeData(projTreeObj.tree.items, projTreeObj.setting.header);
         //初始选择
         let initSel = projTreeObj.workBook.getSheet(0).getSelections()[0] ? projTreeObj.workBook.getSheet(0).getSelections()[0] : {row: 0, rowCount: 1};

+ 23 - 23
web/building_saas/report/html/rpt_content_format.html

@@ -26,18 +26,18 @@
                 </div>
                 <div class="row mb-1">
                     <div class="col-3">
-                        表栏
+                        表栏
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontName_column" value="宋体" onchange="rptControlObj.changeFontMain('表栏头', 'Name', this)" onkeyup="rptControlObj.changeFontMain('表栏头', 'Name', this)">
+                        <input class="form-control input-sm" id="fontName_column" value="宋体" onchange="rptControlObj.changeFontMain('列标题', 'Name', this)" onkeyup="rptControlObj.changeFontMain('列标题', 'Name', this)">
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontHeight_column" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('表栏头', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('表栏头', 'FontHeight', this)">
+                        <input class="form-control input-sm" id="fontHeight_column" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('列标题', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('列标题', 'FontHeight', this)">
                     </div>
                     <div class="col-3">
-                        <a id="font_bold_column" class="btn btn-sm btn-outline-secondary active" title="加粗" onclick="rptControlObj.changeFontAdhoc('表栏头', 'FontBold', this)"><i class="fa fa-bold"></i></a>
-                        <a id="font_italic_column" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('表栏头', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
-                        <a id="font_underline_column" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('表栏头', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
+                        <a id="font_bold_column" class="btn btn-sm btn-outline-secondary active" title="加粗" onclick="rptControlObj.changeFontAdhoc('列标题', 'FontBold', this)"><i class="fa fa-bold"></i></a>
+                        <a id="font_italic_column" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('列标题', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
+                        <a id="font_underline_column" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('列标题', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
                     </div>
                 </div>
                 <div class="row mb-1">
@@ -45,15 +45,15 @@
                         表正文
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontName_content" value="宋体" onchange="rptControlObj.changeFontMain('正文', 'Name', this)" onkeyup="rptControlObj.changeFontMain('正文', 'Name', this)">
+                        <input class="form-control input-sm" id="fontName_content" value="宋体" onchange="rptControlObj.changeFontMain('正文内容', 'Name', this)" onkeyup="rptControlObj.changeFontMain('正文内容', 'Name', this)">
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontHeight_content" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('正文', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('正文', 'FontHeight', this)">
+                        <input class="form-control input-sm" id="fontHeight_content" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('正文内容', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('正文内容', 'FontHeight', this)">
                     </div>
                     <div class="col-3">
-                        <a id="font_bold_content" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('正文', 'FontBold', this)"><i class="fa fa-bold"></i></a>
-                        <a id="font_italic_content" class="btn btn-sm btn-outline-secondary active" title="斜体" onclick="rptControlObj.changeFontAdhoc('正文', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
-                        <a id="font_underline_content" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('正文', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
+                        <a id="font_bold_content" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('正文内容', 'FontBold', this)"><i class="fa fa-bold"></i></a>
+                        <a id="font_italic_content" class="btn btn-sm btn-outline-secondary active" title="斜体" onclick="rptControlObj.changeFontAdhoc('正文内容', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
+                        <a id="font_underline_content" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('正文内容', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
                     </div>
                 </div>
                 <div class="row mb-1">
@@ -61,15 +61,15 @@
                         表合计
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontName_summary" value="宋体" onchange="rptControlObj.changeFontMain('合计', 'Name', this)" onkeyup="rptControlObj.changeFontMain('合计', 'Name', this)">
+                        <input class="form-control input-sm" id="fontName_summary" value="宋体" onchange="rptControlObj.changeFontMain('合计', 'Name', this)" onkeyup="rptControlObj.changeFontMain('合计', 'Name', this)">
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontHeight_summary" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('合计', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('合计', 'FontHeight', this)">
+                        <input class="form-control input-sm" id="fontHeight_summary" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('合计', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('合计', 'FontHeight', this)">
                     </div>
                     <div class="col-3">
-                        <a id="font_bold_summary" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('合计', 'FontBold', this)"><i class="fa fa-bold"></i></a>
-                        <a id="font_italic_summary" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('合计', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
-                        <a id="font_underline_summary" class="btn btn-sm btn-outline-secondary active" title="下划线" onclick="rptControlObj.changeFontAdhoc('合计', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
+                        <a id="font_bold_summary" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('合计', 'FontBold', this)"><i class="fa fa-bold"></i></a>
+                        <a id="font_italic_summary" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('合计', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
+                        <a id="font_underline_summary" class="btn btn-sm btn-outline-secondary active" title="下划线" onclick="rptControlObj.changeFontAdhoc('合计', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
                     </div>
                 </div>
                 <div class="row mb-1">
@@ -77,15 +77,15 @@
                         表眉表脚
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontName_header_footer" value="宋体" onchange="rptControlObj.changeFontMain('表眉表脚', 'Name', this)" onkeyup="rptControlObj.changeFontMain('表眉表脚', 'Name', this)">
+                        <input class="form-control input-sm" id="fontName_header_footer" value="宋体" onchange="rptControlObj.changeFontMain('表眉/表脚', 'Name', this)" onkeyup="rptControlObj.changeFontMain('表眉/表脚', 'Name', this)">
                     </div>
                     <div class="col-3">
-                        <input class="form-control input-sm" id="fontHeight_header_footer" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('表眉表脚', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('表眉表脚', 'FontHeight', this)">
+                        <input class="form-control input-sm" id="fontHeight_header_footer" type="number" value="10" step="1" min="6" max="66" onchange="rptControlObj.changeFontMain('表眉/表脚', 'FontHeight', this)" onkeyup="rptControlObj.changeFontMain('表眉/表脚', 'FontHeight', this)">
                     </div>
                     <div class="col-3">
-                        <a id="font_bold_header_footer" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('表眉表脚', 'FontBold', this)"><i class="fa fa-bold"></i></a>
-                        <a id="font_italic_header_footer" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('表眉表脚', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
-                        <a id="font_underline_header_footer" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('表眉表脚', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
+                        <a id="font_bold_header_footer" class="btn btn-sm btn-outline-secondary" title="加粗" onclick="rptControlObj.changeFontAdhoc('表眉/表脚', 'FontBold', this)"><i class="fa fa-bold"></i></a>
+                        <a id="font_italic_header_footer" class="btn btn-sm btn-outline-secondary" title="斜体" onclick="rptControlObj.changeFontAdhoc('表眉/表脚', 'FontItalic', this)"><i class="fa fa-italic"></i></a>
+                        <a id="font_underline_header_footer" class="btn btn-sm btn-outline-secondary" title="下划线" onclick="rptControlObj.changeFontAdhoc('表眉/表脚', 'FontUnderline', this)"><i class="fa fa-underline"></i></a>
                     </div>
                 </div>
                 <div class="row mb-1"></div>
@@ -117,9 +117,9 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-link float-left" data-dismiss="modal">恢复默认值</button>
+                <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a href="" class="btn btn-primary">确定</a>
+                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
             </div>
         </div>
     </div>

+ 1 - 1
web/building_saas/report/html/rpt_margins.html

@@ -30,7 +30,7 @@
             <div class="modal-footer">
                 <button type="button" class="btn btn-link float-left" data-dismiss="modal" onclick="rptControlObj.saveCustCfg()">存为默认值</button>
                 <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-                <a href="" class="btn btn-primary">确定</a>
+                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</button>
             </div>
         </div>
     </div>

+ 15 - 0
web/building_saas/report/js/rpt_main.js

@@ -108,6 +108,7 @@ let zTreeOprObj = {
             params.pageSize = pageSize;
             params.rpt_tpl_id = treeNode.refId;
             params.prj_id = projectInfoObj.projectInfo.ID;
+            params.custCfg = me.reportPageCfg;
             me.currentNode = treeNode;
             me.requestReport(params);
         }
@@ -330,5 +331,19 @@ let rptControlObj = {
                 alert("Save successfully!");
             }, null, null
         );
+    },
+    confirmCfgChange: function() {
+        // let me = zTreeOprObj;
+        let treeNode = zTreeOprObj.currentNode;
+        if (treeNode.nodeType === TPL_TYPE_TEMPLATE && treeNode.refId > 0) {
+            let params = {};
+            let pageSize = rptControlObj.getCurrentPageSize();
+            params.pageSize = pageSize;
+            params.rpt_tpl_id = treeNode.refId;
+            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.custCfg = zTreeOprObj.reportPageCfg;
+            zTreeOprObj.requestReport(params);
+        }
+
     }
 };