浏览代码

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuCost

vian 5 年之前
父节点
当前提交
c475317ac9

文件差异内容过多而无法显示
+ 29 - 1
config/config.js


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

@@ -607,40 +607,6 @@ module.exports = {
             callback(req, res, err, pageRst);
             callback(req, res, err, pageRst);
         });
         });
     },
     },
-    getMultiReports: function (req, res) {
-        //打印预览用
-        let params = JSON.parse(req.body.params),
-            prj_id = params.prj_id,
-            rpt_ids = params.rpt_ids.split(','),
-            pageSize = params.pageSize,
-            orientation = params.orientation,
-            customizeCfg = params.custCfg,
-            option = params.option;
-        let user_id = req.session.sessionUser.id;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let id of rpt_ids) {
-            parallelFunctions.push((function (rpt_id) {
-                return function (cb) {
-                    getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_NORMAL, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        }
-                        else{
-                            cb(null, pageRst);
-                        }
-                    })
-                }
-            })(parseInt(id)));
-        }
-        async.parallel(parallelFunctions, function (err, pageRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                callback(req, res, err, pageRstArray);
-            }
-        })
-    },
     getMultiReportsEx: function (req, res) {
     getMultiReportsEx: function (req, res) {
         //原则说明:把所有报表模板集中获取,统一filter,只读一次数据!
         //原则说明:把所有报表模板集中获取,统一filter,只读一次数据!
         let params = JSON.parse(req.body.params),
         let params = JSON.parse(req.body.params),
@@ -706,18 +672,6 @@ module.exports = {
         });
         });
     },
     },
 
 
-    createSummaryReportFiles: function (req, res) {
-        let params = JSON.parse(req.body.params),
-            rpt_bill_tpl_ids = params.rpt_bill_tpl_ids,
-            rpt_glj_tpl_ids = params.rpt_glj_tpl_ids,
-            prjIds = params.prjIds,
-            pageSize = params.pageSize,
-            orientation = params.orientation,
-            customizeCfg = params.custCfg
-        ;
-        let user_id = req.session.sessionUser.id;
-    },
-
     getReportAllPagesSvg: function (req, res) {
     getReportAllPagesSvg: function (req, res) {
         let params = JSON.parse(req.body.params),
         let params = JSON.parse(req.body.params),
             rpt_id = params.rpt_tpl_id,
             rpt_id = params.rpt_tpl_id,
@@ -733,45 +687,6 @@ module.exports = {
         });
         });
     },
     },
 
 
-    createExcelFilesInOneBook: function (req, res) {
-        let params = JSON.parse(req.body.params),
-            prj_id = params.prj_id,
-            rpt_ids = params.rpt_ids,
-            rptName = params.rptName,
-            pageSize = params.pageSize,
-            orientation = params.orientation,
-            customizeCfg = params.custCfg,
-            option = params.option;
-        let user_id = req.session.sessionUser.id;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let idx = 0; idx < rpt_ids.length; idx++) {
-            let r_id = rpt_ids[idx];
-            parallelFunctions.push((function (rpt_id) {
-                return function (cb) {
-                    getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_EXCEL, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        }
-                        else{
-                            cb(err, pageRst);
-                        }
-                    })
-                }
-            })(parseInt(r_id)));
-        }
-        async.parallel(parallelFunctions, function (err, pageRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                rpt_xl_util.exportExcelInOneBook(pageRstArray, pageSize, rptName, function(uuidName){
-                    let fileRst = {uuid: uuidName, reportName: rptName};
-                    callback(req, res, err, fileRst);
-                });
-            }
-        })
-    },
-
     createExcelFilesInOneBookEx: function (req, res) {
     createExcelFilesInOneBookEx: function (req, res) {
         //采用了优化策略
         //采用了优化策略
         let params = JSON.parse(req.body.params),
         let params = JSON.parse(req.body.params),
@@ -821,47 +736,6 @@ module.exports = {
         }
         }
     },
     },
 
 
-    createExcelFiles: function (req, res) {
-        let params = JSON.parse(req.body.params),
-            prj_id = params.prj_id,
-            rpt_ids = params.rpt_ids,
-            rpt_names = params.rpt_names,
-            pageSize = params.pageSize,
-            orientation = params.orientation,
-            isOneSheet = params.isOneSheet,
-            customizeCfg = params.custCfg,
-            option = params.option;
-        let user_id = req.session.sessionUser.id;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let idx = 0; idx < rpt_ids.length; idx++) {
-            let r_id = rpt_ids[idx];
-            let r_name = rpt_names[idx];
-            parallelFunctions.push((function (rpt_id, rpt_name) {
-                return function (cb) {
-                    getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_EXCEL, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        } else {
-                            rpt_xl_util.exportExcel(pageRst, pageSize, rpt_name, isOneSheet, null, null, function(uuidName){
-                                let fileRst = {uuid: uuidName, reportName: rpt_name};
-                                cb(err, fileRst);
-                            })
-                        }
-                    })
-                }
-            })(parseInt(r_id), r_name));
-        }
-        async.parallel(parallelFunctions, function (err, fileRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                // console.log(err);
-                callback(req, res, err, fileRstArray);
-            }
-        })
-    },
-
     createExcelFilesEx: function (req, res) {
     createExcelFilesEx: function (req, res) {
         let params = JSON.parse(req.body.params),
         let params = JSON.parse(req.body.params),
             prj_id = params.prj_id,
             prj_id = params.prj_id,
@@ -1029,46 +903,6 @@ module.exports = {
             }
             }
         })
         })
     },
     },
-    createPdfFiles: function (req, res) {
-        let params = JSON.parse(req.body.params),
-            prj_id = params.prj_id,
-            rpt_ids = params.rpt_ids,
-            rpt_names = params.rpt_names,
-            pageSize = params.pageSize,
-            orientation = params.orientation,
-            customizeCfg = params.custCfg,
-            option = params.option;
-        let user_id = req.session.sessionUser.id;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let idx = 0; idx < rpt_ids.length; idx++) {
-            let r_id = rpt_ids[idx];
-            let r_name = rpt_names[idx];
-            parallelFunctions.push((function (rpt_id, rpt_name) {
-                return function (cb) {
-                    getAllPagesCommon(user_id, prj_id, rpt_id, pageSize, orientation, customizeCfg, dftOption, JV.OUTPUT_TYPE_PDF, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        }
-                        else{
-                            rpt_pdf_util.export_pdf_file(pageRst, pageSize, rpt_name, function(uuidName){
-                                let fileRst = {uuid: uuidName, reportName: rpt_name};
-                                cb(err, fileRst);
-                            })
-                        }
-                    })
-                }
-            })(parseInt(r_id), r_name));
-        }
-        async.parallel(parallelFunctions, function (err, fileRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                // console.log(err);
-                callback(req, res, err, fileRstArray);
-            }
-        })
-    },
     createPdfFilesEx: function (req, res) {
     createPdfFilesEx: function (req, res) {
         let params = JSON.parse(req.body.params),
         let params = JSON.parse(req.body.params),
             prj_id = params.prj_id,
             prj_id = params.prj_id,
@@ -1169,104 +1003,6 @@ module.exports = {
 
 
         })
         })
 
 
-    },
-
-    getTestReportAllPages: function(req, res){
-        let rpt_id = req.body.ID;
-        let pageSize = req.body.pageSize;
-        getAllPagesCommonOrg(rpt_id, pageSize, JV.PAGING_OPTION_NORMAL, function(err, pageRst){
-            //fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
-            callback(req, res, err, pageRst);
-        })
-    },
-    getTestExcel: function(req, res) {
-        let rpt_id = req.params.id,
-            pageSize = req.params.size,
-            rptName = req.params.rptName,
-            isOneSheet = req.params.isOneSheet,
-            option = req.params.option;
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        getAllPagesCommonOrg(rpt_id, pageSize, dftOption, function(err, pageRst){
-            fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
-            try {
-                rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, null, null, function(uuidName){
-                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + uuidName + '.xlsx');
-                    filestream.on('data', function(chunk) {
-                        res.write(chunk);
-                    });
-                    filestream.on('end', function() {
-                        res.end();
-                    });
-                });
-            } catch (e) {
-                console.log(e);
-            }
-        })
-    },
-    getTestExcelInOneBook: function(req, res) {
-        let rpt_ids = req.params.ids.split(','),
-            pageSize = req.params.size,
-            rptName = req.params.rptName,
-            option = req.params.option;
-        let parallelFunctions = [];
-        let dftOption = option||JV.PAGING_OPTION_NORMAL;
-        for (let id of rpt_ids) {
-            parallelFunctions.push((function (rpt_id) {
-                return function (cb) {
-                    getAllPagesCommonOrg(rpt_id, pageSize, dftOption, function (err, pageRst) {
-                        if(err){
-                            cb(err);
-                        }
-                        else{
-                            cb(null, pageRst);
-                        }
-                    })
-                }
-            })(parseInt(id)));
-        }
-        async.parallel(parallelFunctions, function (err, pageRstArray) {
-            if (err) {
-                callback(req, res, '数据有误', null);
-            } else {
-                rpt_xl_util.exportExcelInOneBook(pageRstArray, pageSize, rptName, function(tmpFilePath){
-                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + tmpFilePath + '.xlsx');
-                    filestream.on('data', function(chunk) {
-                        res.write(chunk);
-                    });
-                    filestream.on('end', function() {
-                        res.end();
-                    });
-                });
-                //callback(req, res, false, '', {compilation: rst, gljLibs: gljLibsRst});
-            }
-        })
-    },
-    getTestPDF:function (req, res) {
-        let rpt_id = req.params.id,
-            pageSize = req.params.size,
-            rptName = req.params.rptName;
-
-        getAllPagesCommonOrg(rpt_id, pageSize, JV.PAGING_OPTION_NORMAL, function(err, pageRst){
-            rpt_pdf_util.export_pdf_file(pageRst, pageSize, rptName,function (uuidName) {
-                res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                // res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".pdf");
-                let rptNameURI = encodeURI(rptName);
-                res.setHeader("Content-Disposition", "attachment; filename=\"" + rptNameURI + ".pdf\"; filename*=utf-8''" + rptNameURI + ".pdf"  );
-
-                let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + uuidName + '.pdf');
-                filestream.on('data', function(chunk) {
-                    res.write(chunk);
-                });
-                filestream.on('end', function() {
-                    res.end();
-                });
-            })
-
-        })
-
     }
     }
+
 };
 };

+ 0 - 5
modules/reports/routes/report_router.js

@@ -18,11 +18,6 @@ module.exports =function (app) {
         }
         }
     });
     });
 
 
-    //test
-    rptRouter.post('/getTestReport', reportController.getTestReportAllPages);
-    rptRouter.get('/getTestExcel/:id/:size/:rptName/:isOneSheet/:option', reportController.getTestExcel);
-    rptRouter.get('/getTestExcelInOneBook/:ids/:size/:rptName/:option', reportController.getTestExcelInOneBook);
-    rptRouter.get('/getTestPDF/:id/:size/:rptName', reportController.getTestPDF);
     //now is the real:
     //now is the real:
     rptRouter.post('/getReport', reportController.getReportAllPages);
     rptRouter.post('/getReport', reportController.getReportAllPages);
     rptRouter.post('/getReportSvg', reportController.getReportAllPagesSvg);
     rptRouter.post('/getReportSvg', reportController.getReportAllPagesSvg);

+ 1 - 1
modules/reports/util/rpt_tmp_file_sweep.js

@@ -16,7 +16,7 @@ function chkIsRemoveType(file) {
     return rst;
     return rst;
 }
 }
 let jobObj = {
 let jobObj = {
-    createJob: function (rule, rootPath) {
+    createJob(rule, rootPath) {
         let localRule = rule;
         let localRule = rule;
         if (!localRule) {
         if (!localRule) {
             // setup schedule rule
             // setup schedule rule

+ 1 - 1
socket.js

@@ -10,7 +10,7 @@ const config = require("./config/config.js");
 const moment = require('moment');
 const moment = require('moment');
 const { PageTarget } = require('./public/common_constants');
 const { PageTarget } = require('./public/common_constants');
 let socketPort = config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:5500; 
 let socketPort = config[process.env.NODE_ENV].socketPort?config[process.env.NODE_ENV].socketPort:5500; 
-
+console.log(socketPort)
 const socketIO = socket(socketPort);
 const socketIO = socket(socketPort);
 
 
 const userCache = {};
 const userCache = {};

+ 1 - 0
web/building_saas/main/js/models/calc_program.js

@@ -1779,6 +1779,7 @@
 
 
    // 只计算treeNode自身。changedArr: 外部传来的一个数组,专门存储发生变动的节点。
    // 只计算treeNode自身。changedArr: 外部传来的一个数组,专门存储发生变动的节点。
    innerCalc(treeNode, changedArr, tenderType) {
    innerCalc(treeNode, changedArr, tenderType) {
+     if (treeNode.data.lockUnitPrice == true) return;
      if (treeNode.sourceType === ModuleNames.ration_glj) return; // 仅用作树节点显示的工料机不能参与计算。
      if (treeNode.sourceType === ModuleNames.ration_glj) return; // 仅用作树节点显示的工料机不能参与计算。
 
 
      let me = this;
      let me = this;

+ 1 - 1
web/building_saas/pm/js/pm_newMain.js

@@ -337,7 +337,7 @@ const projTreeObj = {
             name: '导入接口文件',
             name: '导入接口文件',
             icon: 'fa-cloud-upload',
             icon: 'fa-cloud-upload',
             visible: function () {
             visible: function () {
-                const names = ['全国公路(2018)'];
+                const names = ['公路造价(2018)'];
                 return compilationData && names.includes(compilationData.name);
                 return compilationData && names.includes(compilationData.name);
             },
             },
             callback: function () {
             callback: function () {

+ 14 - 3
web/building_saas/report/js/rpt_preview_common.js

@@ -43,7 +43,7 @@ function loading() {
 
 
 function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation, orgPixelSize) {
 function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation, orgPixelSize) {
     let orgHeight = 793, orgWidth = 1122;
     let orgHeight = 793, orgWidth = 1122;
-    let DFT_MARGIN = 5;
+    let DFT_MARGIN = 2;
     if (pageSize === 'A3') {
     if (pageSize === 'A3') {
         orgHeight = 1122;
         orgHeight = 1122;
         orgWidth = 793 * 2;
         orgWidth = 793 * 2;
@@ -60,17 +60,28 @@ function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation,
 
 
     for (let i = 0; i < svgArr.length; i++) {
     for (let i = 0; i < svgArr.length; i++) {
         let offsetHeight = 0, offsetWidth = 0;
         let offsetHeight = 0, offsetWidth = 0;
+        let paddingStr = '';
         if (actAreaArr) {
         if (actAreaArr) {
+            paddingStr = `padding: ${actAreaArr[i].Top}px 0px 0px ${actAreaArr[i].Left}px`;
+            if (actAreaArr[i].Right > actAreaArr[i].Bottom) {
+                //横向,需要重新调整padding
+                paddingStr = `padding: ${actAreaArr[i].Left}px 0px 0px ${orgHeight - actAreaArr[i].Bottom}px`;
+            }
+
             offsetWidth = actAreaArr[i].Left + (pageWidth - actAreaArr[i].Right) - DFT_MARGIN;
             offsetWidth = actAreaArr[i].Left + (pageWidth - actAreaArr[i].Right) - DFT_MARGIN;
             offsetHeight = actAreaArr[i].Top + (pageHeight - actAreaArr[i].Bottom) - DFT_MARGIN;
             offsetHeight = actAreaArr[i].Top + (pageHeight - actAreaArr[i].Bottom) - DFT_MARGIN;
             if (orgPixelSize[0] > orgPixelSize[1]) {
             if (orgPixelSize[0] > orgPixelSize[1]) {
                 //横向强制改纵向(系统是以纵向为准),那么计算offset的方式会有所不同
                 //横向强制改纵向(系统是以纵向为准),那么计算offset的方式会有所不同
                 offsetWidth = actAreaArr[i].Top + (pageWidth - actAreaArr[i].Bottom) - DFT_MARGIN;
                 offsetWidth = actAreaArr[i].Top + (pageWidth - actAreaArr[i].Bottom) - DFT_MARGIN;
                 //横向转纵向时,还得考虑左上角转右上角的Left与Top之间的差,否则坐标还是会有偏差
                 //横向转纵向时,还得考虑左上角转右上角的Left与Top之间的差,否则坐标还是会有偏差
-                offsetHeight = actAreaArr[i].Left + (pageHeight - actAreaArr[i].Right) - (actAreaArr[i].Left - actAreaArr[i].Top) - DFT_MARGIN;
+                //offsetHeight = actAreaArr[i].Left + (pageHeight - actAreaArr[i].Right) - (actAreaArr[i].Left - actAreaArr[i].Top) - DFT_MARGIN;
+                //新方式下,没那么复杂了
+                offsetHeight = actAreaArr[i].Left + (pageHeight - actAreaArr[i].Right) - DFT_MARGIN;
             }
             }
         }
         }
-        let div = $('<div class="pageBreak"></div>');
+        // let div = $('<div class="pageBreak"></div>');
+        let div = $(`<div class="pageBreak" style="${paddingStr}"></div>`);
+        // style="margin-left: 2cm; margin-top: 2cm;"
         div.append($(svgArr[i].join("")));
         div.append($(svgArr[i].join("")));
         $(div).find("svg").each(function(cIdx,elementSvg){
         $(div).find("svg").each(function(cIdx,elementSvg){
             elementSvg.setAttribute('height', pageHeight - offsetHeight);
             elementSvg.setAttribute('height', pageHeight - offsetHeight);

+ 7 - 4
web/building_saas/report/js/rpt_print.js

@@ -73,10 +73,13 @@ let rptPrintHelper = {
                 actAreaOffsetX = actAreaArr[idx].Left;
                 actAreaOffsetX = actAreaArr[idx].Left;
                 actAreaOffsetY = actAreaArr[idx].Top;
                 actAreaOffsetY = actAreaArr[idx].Top;
                 if (pixelSize[0] > pixelSize[1]) {
                 if (pixelSize[0] > pixelSize[1]) {
+                    //引用了padding,这里要处理下了
                 }
                 }
+                // console.log('actAreaOffsetX: ' + actAreaOffsetX);
+                // console.log('actAreaOffsetY: ' + actAreaOffsetY);
             }
             }
             let svgPageArr = [];
             let svgPageArr = [];
-            console.log(pixelSize);
+            // console.log(pixelSize);
             svgPageArr.push("<svg width='" + pixelSize[0] + "' height='" + pixelSize[1] + "'>");
             svgPageArr.push("<svg width='" + pixelSize[0] + "' height='" + pixelSize[1] + "'>");
             // let adjustY = 0.5 * ((idx + 1) % 2);
             // let adjustY = 0.5 * ((idx + 1) % 2);
             let adjustY = 0.5;
             let adjustY = 0.5;
@@ -132,9 +135,9 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
     ;
     ;
     let HtoVStr = "";
     let HtoVStr = "";
     if (isHtoV) {
     if (isHtoV) {
-        //HtoVStr = ` transform="translate(`+ pixelSize[1] + `,0) rotate(90)"`;
-        // HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,0) rotate(90)"`;
-        HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,` + (actArea.Left - actArea.Top ) + `) rotate(90)"`;
+        // HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,` + (actArea.Left - actArea.Top ) + `) rotate(90)"`;
+        //引用了padding后,top坐标不用考虑offset了
+        HtoVStr = ` transform="translate(${(actArea.Bottom - actArea.Top)},0) rotate(90)"`;
         //console.log(actArea);
         //console.log(actArea);
     }
     }
     if (style) {
     if (style) {

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

@@ -71,7 +71,11 @@
                     <a class="dropdown-item" href="http://doc.zhzdwd.com/docs/yanghuUpdate" target="_blank">升级说明</a>
                     <a class="dropdown-item" href="http://doc.zhzdwd.com/docs/yanghuUpdate" target="_blank">升级说明</a>
                     <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
                     <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
                     <!--  <a class="dropdown-item" href="#">动画教程</a>-->
                     <!--  <a class="dropdown-item" href="#">动画教程</a>-->
+                    <% if (compilationName === '公路造价(2018)') { %>
+                    <a class="dropdown-item" href="https://smartcost.com.cn/contact2" target="_blank">联系客服</a>
+                    <% } else { %>
                     <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
                     <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
+                    <% } %>
                     <!--  <a class="dropdown-item" href="#">关于</a>-->
                     <!--  <a class="dropdown-item" href="#">关于</a>-->
                 </div>
                 </div>
             </li>
             </li>
@@ -115,7 +119,11 @@
                         <button class="dropdown-item dropdown-toggle" type="button" data-toggle="dropdown">帮助</button>
                         <button class="dropdown-item dropdown-toggle" type="button" data-toggle="dropdown">帮助</button>
                         <div class="dropdown-menu">
                         <div class="dropdown-menu">
                             <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
                             <a class="dropdown-item" href="https://smartcost.com.cn/" target="_blank">纵横官网</a>
+                            <% if (compilationName === '公路造价(2018)') { %>
+                            <a class="dropdown-item" href="https://smartcost.com.cn/contact2" target="_blank">联系客服</a>
+                            <% } else { %>
                             <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
                             <a id="customerService" class="dropdown-item" href="javascript:void(0);">联系客服</a>
+                            <% } %>
                         </div>
                         </div>
                     </div>
                     </div>
                 </div>
                 </div>

+ 8 - 0
web/users/html/user-buy.html

@@ -106,10 +106,18 @@
                                             </div>
                                             </div>
                                             <div class="ml-auto text-right">
                                             <div class="ml-auto text-right">
                                                 <% if (compilation.isUpgrade === undefined || compilation.isUpgrade !== true) { %>
                                                 <% if (compilation.isUpgrade === undefined || compilation.isUpgrade !== true) { %>
+                                                <% if (compilationName === '公路造价(2018)') { %>
+                                                <a href="https://smartcost.com.cn/contact2" target="_blank" class="btn btn-primary btn-sm">立即激活</a>
+                                                <% } else { %>
                                                 <a href="javascript:void(0);" class="btn btn-primary btn-sm getcategory" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>">立即激活</a>
                                                 <a href="javascript:void(0);" class="btn btn-primary btn-sm getcategory" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>">立即激活</a>
+                                                <% } %>
                                                 <% if (compilation.deadline !== undefined && compilation.deadline !== '') { %><span class="d-block text-danger">已到期:<%= compilation.deadline %></span><% } %>
                                                 <% if (compilation.deadline !== undefined && compilation.deadline !== '') { %><span class="d-block text-danger">已到期:<%= compilation.deadline %></span><% } %>
                                                 <% } else { %>
                                                 <% } else { %>
+                                                <% if (compilationName === '公路造价(2018)') { %>
+                                                <a href="https://smartcost.com.cn/contact2" target="_blank" class="btn btn-outline-secondary btn-sm"><i class="fa fa-check"></i> 已激活</a>
+                                                <% } else { %>
                                                 <a href="javascript:void(0);" class="btn btn-outline-secondary btn-sm getcategory" data-title="<%= compilation.name %>" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>"><i class="fa fa-check"></i> 已激活</a>
                                                 <a href="javascript:void(0);" class="btn btn-outline-secondary btn-sm getcategory" data-title="<%= compilation.name %>" data-upgrade="<%= compilation.isUpgrade %>" data-category="<%= compilation.categoryID %>"><i class="fa fa-check"></i> 已激活</a>
+                                                <% } %>
                                                 <% if (compilation.deadline !== undefined && compilation.deadline !== '') { %><span class="d-block text-muted">限期:<%= compilation.deadline %></span><% } %>
                                                 <% if (compilation.deadline !== undefined && compilation.deadline !== '') { %><span class="d-block text-muted">限期:<%= compilation.deadline %></span><% } %>
                                                 <% } %>
                                                 <% } %>
                                             </div>
                                             </div>