Explorar o código

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

chenshilong %!s(int64=7) %!d(string=hai) anos
pai
achega
fc3c08447e

+ 1 - 2
modules/main/controllers/project_controller.js

@@ -28,8 +28,7 @@ module.exports = {
     getData: function (req, res) {
     getData: function (req, res) {
         //add
         //add
         console.log(`------------------------------------------`);
         console.log(`------------------------------------------`);
-        console.log(req.session.sessionUser);
-        console.log(req.session.userAccount);
+        console.log(`${req.session.sessionUser.real_name}--id:${req.session.sessionUser.id}--取getdata数据`);
         console.log(`------------------------------------------`);
         console.log(`------------------------------------------`);
         //add
         //add
         if(typeof req.body.data === 'object'){
         if(typeof req.body.data === 'object'){

+ 3 - 3
modules/main/controllers/ration_controller.js

@@ -15,7 +15,7 @@ let controller = {
         let data = req.body.data;
         let data = req.body.data;
         data = JSON.parse(data);
         data = JSON.parse(data);
         let userID = req.session.sessionUser.id;
         let userID = req.session.sessionUser.id;
-        return await ration_facade.replaceRations(userID,data);
+        return await ration_facade.replaceRations(userID,data,req.session.sessionCompilation);
     },
     },
     addNewRation:async function(req) {
     addNewRation:async function(req) {
         let data = req.body.data;
         let data = req.body.data;
@@ -23,7 +23,7 @@ let controller = {
             data = JSON.stringify(data);
             data = JSON.stringify(data);
         }
         }
         data = JSON.parse(data);
         data = JSON.parse(data);
-        return await ration_facade.addNewRation(data);
+        return await ration_facade.addNewRation(data,req.session.sessionCompilation);
     },
     },
     addMultiRation: async function (req) {
     addMultiRation: async function (req) {
         let data = req.body.data;
         let data = req.body.data;
@@ -31,7 +31,7 @@ let controller = {
             data = JSON.stringify(data);
             data = JSON.stringify(data);
         }
         }
         data = JSON.parse(data);
         data = JSON.parse(data);
-        return await ration_facade.addMultiRation(data.newDatas);
+        return await ration_facade.addMultiRation(data.newDatas,req.session.sessionCompilation);
     }
     }
 };
 };
 
 

+ 50 - 27
modules/main/facade/ration_facade.js

@@ -20,13 +20,14 @@ let coeMolde = mongoose.model('std_ration_lib_coe_list');
 let _= require('lodash');
 let _= require('lodash');
 const projectDao = require('../../pm/models/project_model').project;
 const projectDao = require('../../pm/models/project_model').project;
 let projectModel = mongoose.model('projects');
 let projectModel = mongoose.model('projects');
+const fs = require('fs');
 
 
 module.exports = {
 module.exports = {
     replaceRations: replaceRations,
     replaceRations: replaceRations,
     addNewRation:addNewRation,
     addNewRation:addNewRation,
     addMultiRation: addMultiRation
     addMultiRation: addMultiRation
 };
 };
-async function addNewRation(data) {
+async function addNewRation(data,compilation) {
     let query = data.itemQuery;
     let query = data.itemQuery;
     let stdRation = null;
     let stdRation = null;
     let startTime = +new Date();
     let startTime = +new Date();
@@ -44,16 +45,16 @@ async function addNewRation(data) {
     let addRationGLJTime = +new Date();
     let addRationGLJTime = +new Date();
     console.log("插入新定额时间-------------------------------"+(addRationGLJTime - stdRationTime));
     console.log("插入新定额时间-------------------------------"+(addRationGLJTime - stdRationTime));
     if(stdRation){
     if(stdRation){
-        return await addRationSubList(stdRation,newRation,data.needInstall);
+        return await addRationSubList(stdRation,newRation,data.needInstall,compilation);
     }else {
     }else {
         return {ration:newRation};
         return {ration:newRation};
     }
     }
 }
 }
 
 
-async function addMultiRation(datas) {
+async function addMultiRation(datas,compilation) {
     let rst = [];
     let rst = [];
     for(let data of datas){
     for(let data of datas){
-        let r = await addNewRation(data);
+        let r = await addNewRation(data,compilation);
         rst.push(r);
         rst.push(r);
     }
     }
     return rst;
     return rst;
@@ -120,12 +121,12 @@ async function insertNewRation(newData,defaultLibID,std,calQuantity) {//插入
     return newData;*/
     return newData;*/
 }
 }
 
 
-async function replaceRations(userID,data) {
+async function replaceRations(userID,data,compilation) {
     let searchDao = new SearchDao();
     let searchDao = new SearchDao();
     let recodes = [];
     let recodes = [];
     for(let recode of data.nodeInfo){
     for(let recode of data.nodeInfo){
         let stdRation = await searchDao.getRationItem(userID,data.libIDs,recode.newCode, null);
         let stdRation = await searchDao.getRationItem(userID,data.libIDs,recode.newCode, null);
-        let newRecode = await replaceRation(recode,stdRation,data.defaultLibID,data.projectID,data.calQuantity);
+        let newRecode = await replaceRation(recode,stdRation,data.defaultLibID,data.projectID,data.calQuantity,compilation);
         if(newRecode){
         if(newRecode){
             recodes.push(newRecode);
             recodes.push(newRecode);
         }else {
         }else {
@@ -135,25 +136,25 @@ async function replaceRations(userID,data) {
     return recodes;
     return recodes;
 }
 }
 
 
-async function replaceRation(nodeInfo,stdRation,defaultLibID,projectID,calQuantity) {
+async function replaceRation(nodeInfo,stdRation,defaultLibID,projectID,calQuantity,compilation) {
     if(nodeInfo.newCode == null||nodeInfo.newCode ==""){//说明是删除编号,则要变成一条空定额
     if(nodeInfo.newCode == null||nodeInfo.newCode ==""){//说明是删除编号,则要变成一条空定额
         await deleRationSubRecode(projectID,nodeInfo.ID);//删除定额下挂的各种数据,如定额工料机等
         await deleRationSubRecode(projectID,nodeInfo.ID);//删除定额下挂的各种数据,如定额工料机等
         return await setEmptyRation(projectID,nodeInfo.ID);
         return await setEmptyRation(projectID,nodeInfo.ID);
     }else if(stdRation){
     }else if(stdRation){
         await deleRationSubRecode(projectID,nodeInfo.ID);//删除定额下挂的各种数据,如定额工料机等
         await deleRationSubRecode(projectID,nodeInfo.ID);//删除定额下挂的各种数据,如定额工料机等
         let newRation = await updateRation(stdRation,defaultLibID,nodeInfo.ID,nodeInfo.billsItemID,projectID,calQuantity);//生成并插入新的定额
         let newRation = await updateRation(stdRation,defaultLibID,nodeInfo.ID,nodeInfo.billsItemID,projectID,calQuantity);//生成并插入新的定额
-        return await addRationSubList(stdRation,newRation,nodeInfo.needInstall);
+        return await addRationSubList(stdRation,newRation,nodeInfo.needInstall,compilation);
     }else {
     }else {
         return null;
         return null;
     }
     }
 }
 }
 
 
-async function addRationSubList(stdRation,newRation,needInstall) {
+async function addRationSubList(stdRation,newRation,needInstall,compilation) {
     let startTime = +new Date();
     let startTime = +new Date();
     let ration_gljs = await addRationGLJ(stdRation,newRation);
     let ration_gljs = await addRationGLJ(stdRation,newRation);
     let addRationGLJTime = +new Date();
     let addRationGLJTime = +new Date();
     console.log("添加定额工料机时间-----"+(addRationGLJTime - startTime));
     console.log("添加定额工料机时间-----"+(addRationGLJTime - startTime));
-    let ration_coes = await addRationCoe(stdRation,newRation);
+    let ration_coes = await addRationCoe(stdRation,newRation,compilation);
     let addRationCoeTime = +new Date();
     let addRationCoeTime = +new Date();
     console.log("添加定额coe时间-----"+(addRationCoeTime - addRationGLJTime));
     console.log("添加定额coe时间-----"+(addRationCoeTime - addRationGLJTime));
     let ration_installs = [];
     let ration_installs = [];
@@ -203,7 +204,7 @@ async function addRationInstallFee(std,newRation) {
     return install_fee_list;
     return install_fee_list;
 }
 }
 
 
-async function addRationCoe(std,newRation) {
+async function addRationCoe(std,newRation,compilation) {
     let ration_coe_list = [];
     let ration_coe_list = [];
     let seq = 0;
     let seq = 0;
     if(std.hasOwnProperty('rationCoeList')&&std.rationCoeList.length>0){//添加标准库的工料机
     if(std.hasOwnProperty('rationCoeList')&&std.rationCoeList.length>0){//添加标准库的工料机
@@ -225,33 +226,55 @@ async function addRationCoe(std,newRation) {
             }
             }
         }
         }
     }
     }
+    let lastCoe = await getCustomerCoe(newRation.projectID,newRation.ID,seq,compilation);
+    ration_coe_list.push(lastCoe);
+    await ration_coe.insertMany(ration_coe_list);
+    return ration_coe_list;
+
+}
+
+function getCustomerCoeData() {
+    var coeList = [
+         {amount:1, operator:'*', gljCode:null, coeType:'定额'},
+        { amount:1, operator:'*', gljCode:null, coeType:'人工'},
+        { amount:1, operator:'*', gljCode:null, coeType:'材料'},
+        { amount:1, operator:'*', gljCode:null, coeType:'机械'},
+        { amount:1, operator:'*', gljCode:null, coeType:'主材'},
+        { amount:1, operator:'*', gljCode:null, coeType:'设备'}
+    ];
+    return coeList;
+};
+
+
+async function getCustomerCoe(projectID,rationID,seq,compilation){//取自定义乘系数,根据编办不同,内容可能不同
+    //生成默认的自定义乘系数
     let lastCoe ={
     let lastCoe ={
         coeID:-1,
         coeID:-1,
         name : '自定义系数',
         name : '自定义系数',
         content:'人工×1,材料×1,机械×1,主材×1,设备×1',
         content:'人工×1,材料×1,机械×1,主材×1,设备×1',
         isAdjust:0,
         isAdjust:0,
         seq:seq,
         seq:seq,
-        rationID : newRation.ID,
-        projectID : newRation.projectID
+        rationID : rationID,
+        projectID : projectID
     };
     };
     lastCoe.ID = uuidV1();
     lastCoe.ID = uuidV1();
     lastCoe.coes = getCustomerCoeData();
     lastCoe.coes = getCustomerCoeData();
-    ration_coe_list.push(lastCoe);
-    await ration_coe.insertMany(ration_coe_list);
-    return ration_coe_list;
-
+    try {
+    //查看编办中有没有重写路径
+     if(compilation.overWriteUrl && compilation.overWriteUrl!=""){
+         let overWrite = require("../../.."+compilation.overWriteUrl);
+         if(overWrite.getCusCoeContent) lastCoe.content = overWrite.getCusCoeContent();
+         if(overWrite.getCustomerCoeData) lastCoe.coes = overWrite.getCustomerCoeData();
+     }
+     return lastCoe
+   }catch (err){
+       console.log("读取自定义系数重写文件失败");
+       console.log(err.message);
+       return lastCoe
+   }
 }
 }
 
 
-function getCustomerCoeData() {
-    var coeList = [];
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'定额'});
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'人工'});
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'材料'});
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'机械'});
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'主材'});
-    coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'设备'});
-    return coeList;
-};
+
 
 
 async function addRationGLJ(std,newRation) {
 async function addRationGLJ(std,newRation) {
     let newRationGLJList = [];
     let newRationGLJList = [];

+ 1 - 1
modules/pm/controllers/pm_controller.js

@@ -254,7 +254,7 @@ module.exports = {
             billValuation: JSON.stringify(billValuation),
             billValuation: JSON.stringify(billValuation),
             rationValuation: JSON.stringify(rationValuation),
             rationValuation: JSON.stringify(rationValuation),
             engineeringList: JSON.stringify(engineering.List),
             engineeringList: JSON.stringify(engineering.List),
-            versionName: sessionCompilation.name + '免费版',
+            versionName: sessionCompilation.name + request.session.compilationVersion,
             LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
             LicenseKey:config.getLicenseKey(process.env.NODE_ENV)
         };
         };
 
 

+ 17 - 3
modules/ration_glj/facade/glj_calculate_facade.js

@@ -28,6 +28,15 @@ let stateSeq ={
     cusCoe:6,
     cusCoe:6,
     adjMak:7
     adjMak:7
 };
 };
+//自定义乘系数与定额工料机类型映射表
+let coeTypeMap = {
+    "人工":1,
+    "材料":2,
+    "机械":3,
+    "施工机具":3,
+    "主材":4,
+    "设备":5
+};
 
 
 
 
 async function calculateQuantity(query,noNeedCal,refreshRationName = false){
 async function calculateQuantity(query,noNeedCal,refreshRationName = false){
@@ -299,7 +308,7 @@ function everyCoe(quantity,coe,glj) {
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
             } else if(coe.coes[i].coeType=='定额'){
             } else if(coe.coes[i].coeType=='定额'){
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
-            }else if(coe.coes[i].coeType==getGLJTypeByID(glj.type)){
+            }else if(coeTypeMap[coe.coes[i].coeType]==getRootGLJType(glj.type).ID){
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
             }
             }
         }
         }
@@ -314,7 +323,7 @@ function calculateQuantityByCustomerCoes(quantify,coe,glj) {
         return getCalculateResult(quantify, coe.coes[0])
         return getCalculateResult(quantify, coe.coes[0])
     }else {
     }else {
         for(let i=1;i<coe.coes.length;i++){
         for(let i=1;i<coe.coes.length;i++){
-            if(coe.coes[i].coeType.search(getGLJTypeByID(glj.type))!=-1){
+            if(coeTypeMap[coe.coes[i].coeType]==getRootGLJType(glj.type).ID){
                 return getCalculateResult(quantify,coe.coes[i])
                 return getCalculateResult(quantify,coe.coes[i])
             }
             }
         }
         }
@@ -344,10 +353,15 @@ function getCalculateResult(quantify,c) {
     return q;
     return q;
 }
 }
 
 
-function getGLJTypeByID(id) {
+function getRootGLJType(id){
     let glj_type_object = glj_type_util.getStdGljTypeCacheObj();
     let glj_type_object = glj_type_util.getStdGljTypeCacheObj();
     let topTypeId = glj_type_object.getTopParentIdByItemId(id);
     let topTypeId = glj_type_object.getTopParentIdByItemId(id);
     let type = glj_type_object.getItemById(topTypeId);
     let type = glj_type_object.getItemById(topTypeId);
+    return type;
+}
+
+function getGLJTypeByID(id) {
+    let type = getRootGLJType(id);
     if(type!=undefined){
     if(type!=undefined){
         return type.fullName;
         return type.fullName;
     }else {
     }else {

+ 5 - 1
modules/users/controllers/boot_controller.js

@@ -24,11 +24,15 @@ class BootController extends BaseController {
         let sessionUser = request.session.sessionUser;
         let sessionUser = request.session.sessionUser;
         let compilationId = request.params.compilation;
         let compilationId = request.params.compilation;
         let sessionCompilation = request.session.sessionCompilation;
         let sessionCompilation = request.session.sessionCompilation;
+        let compilationVersion = request.session.compilationVersion;
 
 
         // 判断是否有存入编办信息
         // 判断是否有存入编办信息
         if (sessionCompilation === undefined && compilationId !== '') {
         if (sessionCompilation === undefined && compilationId !== '') {
             let compilationModel = new CompilationModel();
             let compilationModel = new CompilationModel();
             let compilationData = await compilationModel.getCompilationById(compilationId);
             let compilationData = await compilationModel.getCompilationById(compilationId);
+            // 判断当前用户的是使用免费版还是专业版
+            compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, compilationId);
+            request.session.compilationVersion = compilationVersion;
             request.session.sessionCompilation = compilationData;
             request.session.sessionCompilation = compilationData;
             if(sessionUser.latest_used !== compilationId) userModel.updateLatestUsed(sessionUser.id,compilationId);
             if(sessionUser.latest_used !== compilationId) userModel.updateLatestUsed(sessionUser.id,compilationId);
         }
         }
@@ -44,7 +48,7 @@ class BootController extends BaseController {
             companyTypeList: userModel.companyType,
             companyTypeList: userModel.companyType,
             companyScaleList: userModel.companyScale,
             companyScaleList: userModel.companyScale,
             compilation: request.params.compilation,
             compilation: request.params.compilation,
-            versionName: request.session.sessionCompilation.name + '免费版'
+            versionName: request.session.sessionCompilation.name + request.session.compilationVersion
         };
         };
         response.render('users/html/login-infoinput', renderData);
         response.render('users/html/login-infoinput', renderData);
     }
     }

+ 4 - 0
modules/users/controllers/login_controller.js

@@ -89,6 +89,9 @@ class LoginController {
             if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
             if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
                 preferenceSetting.select_version !== '') {
                 preferenceSetting.select_version !== '') {
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
+                // 判断当前用户的是使用免费版还是专业版
+                let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
+                request.session.compilationVersion = compilationVersion;
                 request.session.sessionCompilation = compilationData;
                 request.session.sessionCompilation = compilationData;
                 if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
                 if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
             }
             }
@@ -97,6 +100,7 @@ class LoginController {
             console.log(error);
             console.log(error);
             return response.json({error: 1, msg: error});
             return response.json({error: 1, msg: error});
         }
         }
+        console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
         response.json({
         response.json({
             error: 0,
             error: 0,
             msg: '',
             msg: '',

+ 49 - 4
modules/users/controllers/user_controller.js

@@ -38,7 +38,7 @@ class UserController extends BaseController {
             provinceList: userModel.province,
             provinceList: userModel.province,
             companyTypeList: userModel.companyType,
             companyTypeList: userModel.companyType,
             companyScaleList: userModel.companyScale,
             companyScaleList: userModel.companyScale,
-            versionName: request.session.sessionCompilation.name + '免费版'
+            versionName: request.session.sessionCompilation.name + request.session.compilationVersion
         };
         };
         response.render('users/html/user-info', renderData);
         response.render('users/html/user-info', renderData);
     }
     }
@@ -119,12 +119,54 @@ class UserController extends BaseController {
             userData: userData,
             userData: userData,
             logList: logList,
             logList: logList,
             pages: pageData,
             pages: pageData,
-            versionName: request.session.sessionCompilation.name + '免费版'
+            versionName: request.session.sessionCompilation.name + request.session.compilationVersion
         };
         };
         response.render('users/html/user-safe', renderData);
         response.render('users/html/user-safe', renderData);
     }
     }
 
 
     /**
     /**
+     * 产品激活页面
+     *
+     * @param request
+     * @param response
+     * @return {void}
+     */
+    async buy(request, response) {
+        let userData = [];
+        let compilationList = [];
+        try {
+            // 获取编办信息
+            let compilationModel = new CompilationModel();
+            compilationList = await compilationModel.getList();
+
+            // 获取当前用户信息
+            let sessionUser = request.session.sessionUser;
+            let userModel = new UserModel();
+            userData = await userModel.findDataBySsoId(sessionUser.ssoId);
+            if (userData.upgrade_list !== undefined) {
+                let userUpgradeList = userData.upgrade_list;
+                for (let index in userUpgradeList) {
+                    let oneCompilationIndex = compilationList.findIndex(function (item) {
+                        return item.id === userUpgradeList[index].compilationID;
+                    });
+                    if (oneCompilationIndex !== -1) {
+                        compilationList[oneCompilationIndex].isUpgrade = userUpgradeList[index].isUpgrade;
+                    }
+                }
+            }
+        } catch(error) {
+            console.log(error);
+        }
+
+        let renderData = {
+            userData: userData,
+            compilationList: compilationList,
+            versionName: request.session.sessionCompilation.name + request.session.compilationVersion
+        };
+        response.render('users/html/user-buy', renderData);
+    }
+
+    /**
      * 偏好设置页面
      * 偏好设置页面
      *
      *
      * @param {object} request
      * @param {object} request
@@ -151,7 +193,7 @@ class UserController extends BaseController {
         let renderData = {
         let renderData = {
             preferenceSetting: preferenceSetting,
             preferenceSetting: preferenceSetting,
             compilationList: compilationList,
             compilationList: compilationList,
-            versionName: request.session.sessionCompilation.name + '免费版'
+            versionName: request.session.sessionCompilation.name + request.session.compilationVersion
         };
         };
         response.render('users/html/user-set', renderData);
         response.render('users/html/user-set', renderData);
     }
     }
@@ -185,7 +227,10 @@ class UserController extends BaseController {
                 // 查找对应编办
                 // 查找对应编办
                 let compilationModel = new CompilationModel();
                 let compilationModel = new CompilationModel();
                 let compilationData = await compilationModel.getCompilationById(selectVersion);
                 let compilationData = await compilationModel.getCompilationById(selectVersion);
-
+                // 判断当前用户的是使用免费版还是专业版
+                let userModel = new UserModel();
+                let compilationVersion = await userModel.getVersionFromUpgrade(sessionUserData.ssoId, compilationData._id);
+                request.session.compilationVersion = compilationVersion;
                 request.session.sessionCompilation = compilationData;
                 request.session.sessionCompilation = compilationData;
             }
             }
         } catch (error) {
         } catch (error) {

+ 21 - 0
modules/users/models/user_model.js

@@ -228,6 +228,27 @@ class UserModel extends BaseModel {
         return await this.db.findOneAndUpdate({_id: userObjId}, {$pull: {versionInfo: {compilationId: compilationId}}});
         return await this.db.findOneAndUpdate({_id: userObjId}, {$pull: {versionInfo: {compilationId: compilationId}}});
     }
     }
 
 
+    /**
+     * 判断用户使用免费版还是专业版
+     *
+     * @param ssoId
+     * @param compilationId
+     * @return {version}
+     */
+    async getVersionFromUpgrade(ssoId, compilationId){
+        let version = '免费版';
+        let userData = await this.findDataBySsoId(ssoId);
+        if (userData.upgrade_list !== undefined) {
+            let compilationInfo = userData.upgrade_list.find(function (item) {
+                return item.compilationID === compilationId;
+            });
+            if (compilationInfo !== undefined && compilationInfo.isUpgrade === true) {
+                version = '专业版';
+            }
+        }
+        return version;
+    }
+
 }
 }
 
 
 export default UserModel;
 export default UserModel;

+ 1 - 0
modules/users/routes/user_route.js

@@ -16,6 +16,7 @@ module.exports = function (app) {
 // action定义区域
 // action定义区域
     router.get('/info', userController.init, userController.info);
     router.get('/info', userController.init, userController.info);
     router.get('/safe', userController.init, userController.safe);
     router.get('/safe', userController.init, userController.safe);
+    router.get('/buy', userController.init, userController.buy);
     router.get('/preferences', userController.init, userController.preferences);
     router.get('/preferences', userController.init, userController.preferences);
     router.post('/save-preferences', userController.init, userController.savePreferences);
     router.post('/save-preferences', userController.init, userController.savePreferences);
     router.post('/info', userController.init, userController.saveData);
     router.post('/info', userController.init, userController.saveData);

+ 13 - 0
public/web/sheet/sheet_common.js

@@ -335,6 +335,19 @@ var sheetCommonObj = {
         };
         };
         return new CustomerCoeCellType();
         return new CustomerCoeCellType();
     },
     },
+    scrollSheetForOption:function (sheet,cxt,cellRect,row,options){
+        let topRow = sheet.getViewportTopRow(1);
+        if(row == topRow) return;//已经是最顶行了
+        let length = options&&options.length>0?options.length:1;
+        let height = cxt.canvas.height;
+        let startY = cellRect.y+cellRect.height;//下拉框的起始显示位置
+        let endY =  startY + length * cellRect.height;//下拉框的结束显示位置
+        if(endY <= height) return;  //如果没有超出显示位置,直接返回
+        let overRow =  Math.ceil((endY - height)/cellRect.height);//超出的行数
+        let showRow = topRow + overRow > row?row:topRow + overRow;
+        sheet.showRow(showRow, GC.Spread.Sheets.VerticalPosition.top);
+
+    },
     setSelectButton(row,col,sheet,header){
     setSelectButton(row,col,sheet,header){
         let getSelectButton = function (cellWidth=100) {
         let getSelectButton = function (cellWidth=100) {
             function moreButton() {
             function moreButton() {

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

@@ -498,8 +498,8 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="modal-footer">
             <div class="modal-footer">
-                <button type="button"  class="btn btn-secondary" data-dismiss="modal">取消</button>
                 <a href="javascript:void(0);" id="gljSelY" class="btn btn-primary">确定</a>
                 <a href="javascript:void(0);" id="gljSelY" class="btn btn-primary">确定</a>
+                <button type="button"  class="btn btn-secondary" data-dismiss="modal">取消</button>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>

+ 11 - 0
web/building_saas/css/custom.css

@@ -134,4 +134,15 @@ legend.legend{
 
 
 .menu ul :hover ul :hover ul {
 .menu ul :hover ul :hover ul {
     visibility: visible;
     visibility: visible;
+}
+
+.ui-datepicker-next, .ui-datepicker-next:hover{
+    background-image: url("/lib/jquery-ui/images/ui-icons_444444_256x240.png");
+    background-repeat: no-repeat;
+    background-position: -28px -12px;
+}
+.ui-datepicker-prev, .ui-datepicker-prev:hover{
+    background-image: url("/lib/jquery-ui/images/ui-icons_444444_256x240.png");
+    background-repeat: no-repeat;
+    background-position: -90px -12px;
 }
 }

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

@@ -990,7 +990,7 @@
                     </ul>
                     </ul>
                     <div class="tab-content">
                     <div class="tab-content">
                         <div class="tab-pane active" id="m-js" role="tabpanel">
                         <div class="tab-pane active" id="m-js" role="tabpanel">
-                            <div class="form-group">
+                            <div class="form-group" id="expArea">
                                 <input class="form-control" id="calcBaseExp" value="">
                                 <input class="form-control" id="calcBaseExp" value="">
                                 <p class="form-text">
                                 <p class="form-text">
                                     <button class="btn btn-secondary btn-sm" id="addOpr">+</button>
                                     <button class="btn btn-secondary btn-sm" id="addOpr">+</button>

+ 2 - 2
web/building_saas/main/js/views/calc_base_view.js

@@ -175,6 +175,7 @@ let calcBaseView = {
     initCalctor: function (type) {//type = bills、ration
     initCalctor: function (type) {//type = bills、ration
         let me = calcBaseView;
         let me = calcBaseView;
         let showDatas;
         let showDatas;
+        me.inputExpr = $('#calcBaseExp');
         me.curType = type;
         me.curType = type;
         if (type === me.type.bills) {
         if (type === me.type.bills) {
             //锁定的清单不显示
             //锁定的清单不显示
@@ -202,7 +203,6 @@ let calcBaseView = {
             //$('#qd-jsjs .modal-content').css('width', '');
             //$('#qd-jsjs .modal-content').css('width', '');
             $('#cbRowDiv').removeClass('row');
             $('#cbRowDiv').removeClass('row');
             $('#billsBaseSpread').removeClass('col-9');
             $('#billsBaseSpread').removeClass('col-9');
-            console.log(calcProgramManage.getSelectionInfo());
             let calcItem = calcProgramManage.getSelectionInfo().calcItem;
             let calcItem = calcProgramManage.getSelectionInfo().calcItem;
             if (calcItem.dispExprUser) {
             if (calcItem.dispExprUser) {
                 me.inputExpr.val(calcItem.dispExpr);
                 me.inputExpr.val(calcItem.dispExpr);
@@ -295,7 +295,7 @@ let calcBaseView = {
             if(me.curType === me.type.bills){
             if(me.curType === me.type.bills){
                 let selected = projectObj.project.mainTree.selected;
                 let selected = projectObj.project.mainTree.selected;
                 projectObj.updateCellValue(selected, me.getInputExpr(), {data: {field: 'calcBase'}});
                 projectObj.updateCellValue(selected, me.getInputExpr(), {data: {field: 'calcBase'}});
-                if(projectObj.project.calcBase.success){
+                if(projectObj.project.calcBase.success || selected.data.calcBase === me.getInputExpr()){
                     //$('#qd-jsjs').modal('hide');
                     //$('#qd-jsjs').modal('hide');
                     $('#calcBaseFeeRate').modal('hide');
                     $('#calcBaseFeeRate').modal('hide');
                 }
                 }

+ 11 - 4
web/building_saas/main/js/views/glj_view.js

@@ -404,6 +404,7 @@ var gljOprObj = {
     rationGLJEditCheck:function (args) {//true 可以编辑,false 不能编辑
     rationGLJEditCheck:function (args) {//true 可以编辑,false 不能编辑
         var me = gljOprObj;
         var me = gljOprObj;
         var header = me.setting.header;
         var header = me.setting.header;
+        if(me.sheet.getTag(args.row,args.col)=="locked") return false;//如果是双击树节点编号里设置了锁定标记,不能编辑
         if (_.includes(me.setting.view.lockColumns, args.col))  return false;//如果是锁定的列,不能编辑
         if (_.includes(me.setting.view.lockColumns, args.col))  return false;//如果是锁定的列,不能编辑
         if(me.sheetData[args.row] != undefined){
         if(me.sheetData[args.row] != undefined){
             if(me.sheetData[args.row].isMixRatio){//对于组成物列
             if(me.sheetData[args.row].isMixRatio){//对于组成物列
@@ -1277,6 +1278,7 @@ var gljOprObj = {
         let margin = 3;
         let margin = 3;
 
 
         function TreeNodeCellType() {
         function TreeNodeCellType() {
+            this.ctx = null;
         }
         }
         function drowRect(ctx, x, y, w, h) {
         function drowRect(ctx, x, y, w, h) {
             ctx.save();
             ctx.save();
@@ -1328,9 +1330,9 @@ var gljOprObj = {
             ctx.restore();
             ctx.restore();
             return offset;
             return offset;
         }
         }
-
         TreeNodeCellType.prototype =  comboboxOptions?sheetCommonObj.getDynamicCombo():new ns.CellTypes.Text();
         TreeNodeCellType.prototype =  comboboxOptions?sheetCommonObj.getDynamicCombo():new ns.CellTypes.Text();
         TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
         TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
+            this.ctx= ctx;
             if (style.backColor) {//先画背景色
             if (style.backColor) {//先画背景色
                 ctx.save();
                 ctx.save();
                 ctx.fillStyle = style.backColor;
                 ctx.fillStyle = style.backColor;
@@ -1387,8 +1389,13 @@ var gljOprObj = {
                     return;
                     return;
                 }
                 }
             }
             }
-            GC.Spread.Sheets.CellTypes.ComboBox.prototype.processMouseDown.apply(this, arguments);
-           // GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
+            if(comboboxOptions&&hitinfo.x > hitinfo.cellRect.x+hitinfo.cellRect.width -15){//点击了下拉框按钮,这里要判断下拉框是否会被挡住,从而决定是否自动调整滚动条
+                hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,"");
+                sheetCommonObj.scrollSheetForOption(hitinfo.sheet,this.ctx,hitinfo.cellRect,hitinfo.row,comboboxOptions);//下拉框超出显示后自动调整滚动条
+                GC.Spread.Sheets.CellTypes.ComboBox.prototype.processMouseDown.apply(this, arguments);
+            }else {
+                hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,"locked")//通过这个来控制除了点击下拉框的三角形,点击其它地方不充许进入编辑状态,不然不好控制下拉框超出页面后调整滚动条
+            }
         };
         };
         let cellType = new TreeNodeCellType();
         let cellType = new TreeNodeCellType();
         if(comboboxOptions){
         if(comboboxOptions){
@@ -1409,7 +1416,7 @@ var gljOprObj = {
     locateZTree: function(ID) {
     locateZTree: function(ID) {
         let zTree = $.fn.zTree.getZTreeObj("gljTree");
         let zTree = $.fn.zTree.getZTreeObj("gljTree");
         let node = null;
         let node = null;
-        if (ID) node = zTree.getNodesByParam('ID', ID, null)[0]
+        if (ID) node = zTree.getNodesByParam('ID', ID, null)[0];
         if (!node) node = zTree.getNodeByTId('gljTree_1');
         if (!node) node = zTree.getNodeByTId('gljTree_1');
         zTree.selectNode(node);
         zTree.selectNode(node);
         gljOprObj.gljCurTypeId = ID;
         gljOprObj.gljCurTypeId = ID;

+ 32 - 2
web/building_saas/main/js/views/project_view.js

@@ -582,15 +582,33 @@ var projectObj = {
         }
         }
         if(node.sourceType == ModuleNames.ration){ //在定额编码中双击,如果右侧定额库没有展开,则自动展开。
         if(node.sourceType == ModuleNames.ration){ //在定额编码中双击,如果右侧定额库没有展开,则自动展开。
             if(!rationLibObj.tree){
             if(!rationLibObj.tree){
+                sessionStorage.setItem('stdRationLib', node.data.libID);
                 rationLibObj.doAfterGetRationTree = function () {
                 rationLibObj.doAfterGetRationTree = function () {
-                    this.locateAtRation(code);
+                    this.locateAtRation(node.data.libID, code);
                     this.doAfterGetRationTree = null;
                     this.doAfterGetRationTree = null;
                 };
                 };
             }
             }
             else {
             else {
-                rationLibObj.locateAtRation(code);
+                if($('#stdRationLibSelect').select().val() != node.data.libID){
+                    let libOpts = $('#stdRationLibSelect').find('option');
+                    for(let libOpt of libOpts){
+                        if($(libOpt).val() == node.data.libID){
+                            $(libOpt).prop('selected', 'selected');
+                            break;
+                        }
+                    }
+                    $('#stdRationLibSelect').change();
+                    rationLibObj.doAfterGetRationTree = function () {
+                        this.locateAtRation(node.data.libID, code);
+                        this.doAfterGetRationTree = null;
+                    };
+                }
+                else {
+                    rationLibObj.locateAtRation(node.data.libID, code);
+                }
             }
             }
             if(!$("#de").is(":visible"))  $('#stdRationTab').click();
             if(!$("#de").is(":visible"))  $('#stdRationTab').click();
+            console.log($('#stdRationLibSelect').select().val());
         }
         }
 
 
     },
     },
@@ -2837,6 +2855,9 @@ function changeCalcBaseFeeRate(toggle) {
         $('#calcBaseFeeRate').find('.modal-title').text('计算基数选择').show();
         $('#calcBaseFeeRate').find('.modal-title').text('计算基数选择').show();
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').hide();
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').hide();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').hide();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').hide();
+        $('#calcBaseExp').remove();
+        let $input = $('<input>').attr('id', 'calcBaseExp').addClass('form-control');
+        $('#expArea').prepend($input);
     }
     }
     else if(toggle === 'feeRate'){
     else if(toggle === 'feeRate'){
         $('#calcBaseFeeRate').find('.modal-header').show();
         $('#calcBaseFeeRate').find('.modal-header').show();
@@ -2848,6 +2869,9 @@ function changeCalcBaseFeeRate(toggle) {
         $('#calcBaseFeeRate').find('.modal-header').hide();
         $('#calcBaseFeeRate').find('.modal-header').hide();
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').show();
         $('#calcBaseFeeRate').find('.modal-body').find('button:first').show();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').show();
         $('#calcBaseFeeRate').find('.modal-body').find('ul:first').show();
+        $('#calcBaseExp').remove();
+        let $textarea = $('<textarea>').attr('id', 'calcBaseExp').prop('rows', 3).addClass('form-control').css('resize', 'none');
+        $('#expArea').prepend($textarea);
     }
     }
 }
 }
 //综合合价弹出计算基数费率确认
 //综合合价弹出计算基数费率确认
@@ -2868,10 +2892,16 @@ $('#calcBaseFeeRateConf').click(function () {
     if(validateFeeRate){
     if(validateFeeRate){
         feeRateObject.submitFeeRateFromBill();
         feeRateObject.submitFeeRateFromBill();
     }
     }
+    else {
+        if(calcBaseValue === calcBaseValue){
+            $('#calcBaseFeeRate').modal('hide');
+        }
+    }
     if(!projectObj.project.calcBase.success){
     if(!projectObj.project.calcBase.success){
         return;
         return;
     }
     }
     else if((!validateFeeRate || selected.data.feeRateID === parseInt(feeRateObject.feeRateSelection.ID)) && needToSave) {
     else if((!validateFeeRate || selected.data.feeRateID === parseInt(feeRateObject.feeRateSelection.ID)) && needToSave) {
         projectObj.project.calcProgram.calcAndSave(selected);
         projectObj.project.calcProgram.calcAndSave(selected);
+        $('#calcBaseFeeRate').modal('hide');
     }
     }
 });
 });

+ 2 - 2
web/building_saas/main/js/views/std_ration_lib.js

@@ -233,14 +233,14 @@ var rationLibObj = {
         let sectionNode = me.tree.items[row] || null;
         let sectionNode = me.tree.items[row] || null;
         me.loadSectionRations(sectionNode && sectionNode.children.length === 0 ? sectionNode.data.ID : null);
         me.loadSectionRations(sectionNode && sectionNode.children.length === 0 ? sectionNode.data.ID : null);
     },
     },
-    locateAtRation: function(code){
+    locateAtRation: function(libID, code){
         let me = rationLibObj;
         let me = rationLibObj;
         //查找定额,以确定定额所在章节节点
         //查找定额,以确定定额所在章节节点
         let firstLibID = projectInfoObj.projectInfo.engineeringInfo.ration_lib.length > 0 ?
         let firstLibID = projectInfoObj.projectInfo.engineeringInfo.ration_lib.length > 0 ?
                         projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id : null;
                         projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id : null;
         let locateRow = 0,
         let locateRow = 0,
             locateSubRow = 0;
             locateSubRow = 0;
-        CommonAjax.post('/complementaryRation/api/getRationItem', {rationRepIds: [firstLibID], code: code}, function (ration) {
+        CommonAjax.post('/complementaryRation/api/getRationItem', {rationRepIds: [libID], code: code}, function (ration) {
             if(ration && ration.sectionId){
             if(ration && ration.sectionId){
                 let sectionNode = me.tree.findNode(ration.sectionId);
                 let sectionNode = me.tree.findNode(ration.sectionId);
                 if(sectionNode){
                 if(sectionNode){

+ 54 - 68
web/building_saas/main/js/views/zmhs_view.js

@@ -116,12 +116,15 @@ let zmhs_obj = {
         let me = zmhs_obj;
         let me = zmhs_obj;
         if(me.coeSheetData[context.row]){
         if(me.coeSheetData[context.row]){
             let data = me.coeSheetData[context.row];
             let data = me.coeSheetData[context.row];
-            $('#coe_ration').val(data.coes[0].amount);
+            for(let c of data.coes){
+                $("#"+ c.coeType).val(c.amount);
+            }
+            /*$('#coe_ration').val(data.coes[0].amount);
             $('#manual').val(data.coes[1].amount);
             $('#manual').val(data.coes[1].amount);
             $('#material').val(data.coes[2].amount);
             $('#material').val(data.coes[2].amount);
             $('#manchine').val(data.coes[3].amount);
             $('#manchine').val(data.coes[3].amount);
             $('#mainM').val(data.coes[4].amount);
             $('#mainM').val(data.coes[4].amount);
-            $('#equipment').val(data.coes[5].amount);
+            $('#equipment').val(data.coes[5].amount);*/
         }
         }
     },
     },
     updateCusCoeAfterEditor:function(){
     updateCusCoeAfterEditor:function(){
@@ -135,70 +138,53 @@ let zmhs_obj = {
         var coe = _.find(zmhs_obj.coeSheetData, function (c) {
         var coe = _.find(zmhs_obj.coeSheetData, function (c) {
             return c.coeID == -1;
             return c.coeID == -1;
         });
         });
-        var newValue = zmhs_obj.numberValueChecking($('#' + id).val());
-        if (newValue) {
-            newValue = _.round(newValue, 2);
-            if (newValue == coe.coes[name].amount) return;
-            if (id == 'coe_ration') {
-                $('#coe_ration').val(newValue);
-                $('#manual').val(newValue);
-                $('#material').val(newValue);
-                $('#manchine').val(newValue);
-                $('#mainM').val(newValue);
-                $('#equipment').val(newValue);
+        if(coe){
+            let newValue = zmhs_obj.numberValueChecking($('#' + id).val());
+            if (newValue) {
+                newValue = _.round(newValue, 2);
+                if (newValue == coe.coes[name].amount) return;
+                if (id == '定额') {
+                    for(let c of coe.coes){
+                        $('#'+c.coeType).val(newValue)
+                    }
+                    /*$('#coe_ration').val(newValue);
+                    $('#manual').val(newValue);
+                    $('#material').val(newValue);
+                    $('#manchine').val(newValue);
+                    $('#mainM').val(newValue);
+                    $('#equipment').val(newValue);*/
+                } else {
+                    $('#' + id).val(newValue);
+                }
             } else {
             } else {
-                $('#' + id).val(newValue);
+                $('#' + id).val(coe.coes[name].amount);
             }
             }
-        } else {
-            $('#' + id).val(coe.coes[name].amount);
         }
         }
+
     },
     },
     checkIfNeedUpdate(){
     checkIfNeedUpdate(){
-        var data = _.find(zmhs_obj.coeSheetData, function (c) {
+        let data = _.find(zmhs_obj.coeSheetData, function (c) {
             return c.coeID == -1;
             return c.coeID == -1;
         });
         });
-        var result = {
-            isNeed: false
-        }
-        var coe_ration = $('#coe_ration').val();
-        var manual = $('#manual').val();
-        var material = $('#material').val();
-        var manchine = $('#manchine').val();
-        var mainM = $('#mainM').val();
-        var equipment = $('#equipment').val();
-        if (coe_ration != data.coes[0].amount) {
-            result.isNeed = true;
-            data.coes[0].amount = coe_ration;
-        }
-        if (manual != data.coes[1].amount) {
-            result.isNeed = true;
-            data.coes[1].amount = manual;
-        }
-        if (material != data.coes[2].amount) {
-            result.isNeed = true;
-            data.coes[2].amount = material;
-        }
-        if (manchine != data.coes[3].amount) {
-            result.isNeed = true;
-            data.coes[3].amount = manchine;
-        }
-        if (mainM != data.coes[4].amount) {
-            result.isNeed = true;
-            data.coes[4].amount = mainM;
-        }
-        if (equipment != data.coes[5].amount) {
-            result.isNeed = true;
-            data.coes[5].amount = equipment;
-        }
-        if (result.isNeed) {
-            result.doc = {
-                coes: data.coes
-            };
-            result.query = {
-                projectID: data.projectID,
-                ID: data.ID,
-                rationID: data.rationID
-            };
+        let result = {isNeed: false};
+        if(data){
+            for(let c of data.coes){
+                let amount = $("#"+c.coeType).val();
+                if(amount!=c.amount){
+                    result.isNeed = true;
+                    c.amount = amount;
+                }
+            }
+            if (result.isNeed) {
+                result.doc = {
+                    coes: data.coes
+                };
+                result.query = {
+                    projectID: data.projectID,
+                    ID: data.ID,
+                    rationID: data.rationID
+                };
+            }
         }
         }
         return result;
         return result;
 
 
@@ -229,22 +215,22 @@ let zmhs_obj = {
         let recode = me.coeSheetData[args.row];
         let recode = me.coeSheetData[args.row];
         projectObj.project.ration_coe.adjustCoeClick(recode, newval);
         projectObj.project.ration_coe.adjustCoeClick(recode, newval);
     },
     },
-    generateHtmlString: function (context,cellRect) {
+    generateHtmlString: function (context,cellRect) {//这里要改成动态的了,根据自定义系数内容生成对应的输入框
         let me = zmhs_obj;
         let me = zmhs_obj;
         let height = cellRect.height;
         let height = cellRect.height;
         let newString = "<div style='height:"+ height+"px'><div onclick='zmhs_obj.coeSheet.endEdit()' style='margin:-1px 1px 0px'>自定义系数</div></div><form style='margin-top:1px' ><table  width='100%'  cellpadding='0'  border='1px' bordercolor='#CCCCCC' cellspacing='0px' style='border-collapse:collapse;font-size: 10px;'>";
         let newString = "<div style='height:"+ height+"px'><div onclick='zmhs_obj.coeSheet.endEdit()' style='margin:-1px 1px 0px'>自定义系数</div></div><form style='margin-top:1px' ><table  width='100%'  cellpadding='0'  border='1px' bordercolor='#CCCCCC' cellspacing='0px' style='border-collapse:collapse;font-size: 10px;'>";
-        newString += me.getOneRow('定额', 0, 'coe_ration',height);
-        newString += me.getOneRow('人工', 1, 'manual',height);
-        newString += me.getOneRow('材料', 2, 'material',height);
-        newString += me.getOneRow('机械', 3, 'manchine',height);
-        newString += me.getOneRow('主材', 4, 'mainM',height);
-        newString += me.getOneRow('设备', 5, 'equipment',height);
+        let cus_coe =  me.coeSheetData[context.row];
+        if(cus_coe){
+            for(let i =0;i< cus_coe.coes.length;i++){
+                newString += me.getOneRow(cus_coe.coes[i].coeType, i, cus_coe.coes[i].coeType,height)
+            }
+        }
         newString += "</table></form>";
         newString += "</table></form>";
         return newString;
         return newString;
     },
     },
     getOneRow: function (text, name, id,inputHeight) {
     getOneRow: function (text, name, id,inputHeight) {
-        var rowstr = "<tr ><td style='width: 40%'>" + text
-            + ":</td><td style='width: 60%' align='right'><input type='text' value='1' name=" + name
+        var rowstr = "<tr ><td style='width: 50%'>" + text
+            + ":</td><td style='width: 50%' align='right'><input type='text' value='1' name=" + name
             + " style='width:40px;border:0;height:"+ inputHeight+"px;' align='right' id=" + id + " onchange='zmhs_obj.onInputChange(this.id,this.name)' autocomplete='off'></td></tr>";
             + " style='width:40px;border:0;height:"+ inputHeight+"px;' align='right' id=" + id + " onchange='zmhs_obj.onInputChange(this.id,this.name)' autocomplete='off'></td></tr>";
         return rowstr;
         return rowstr;
 
 

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

@@ -406,7 +406,7 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">单价文件</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">单价文件</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select  custom-select-sm" id="unit-price">
+                            <select class="form-control  form-control-sm" id="unit-price">
                                 <option value="">新建单价文件</option>
                                 <option value="">新建单价文件</option>
                             </select>
                             </select>
                         </div>
                         </div>
@@ -414,7 +414,7 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">费率文件</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">费率文件</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select  custom-select-sm" id="tender-fee-rate">
+                            <select class="form-control  form-control-sm" id="tender-fee-rate">
                                 <option value="">新建费率文件</option>
                                 <option value="">新建费率文件</option>
                             </select>
                             </select>
                         </div>
                         </div>
@@ -435,7 +435,7 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计价规则</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计价规则</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select custom-select-sm" id="valuation">
+                            <select class="form-control  form-control-sm" id="valuation">
                             </select>
                             </select>
                         </div>
                         </div>
                     </div>
                     </div>
@@ -443,7 +443,7 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">工程专业</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">工程专业</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select custom-select-sm" id="tender-engineering">
+                            <select class="form-control  form-control-sm" id="tender-engineering">
                             </select>
                             </select>
                         </div>
                         </div>
                     </div>
                     </div>
@@ -451,14 +451,14 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">费用标准</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">费用标准</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select custom-sm" id="tender-feeStandard"></select>
+                            <select class="form-control  form-control-sm" id="tender-feeStandard"></select>
                         </div>
                         </div>
                     </div>
                     </div>
                     <span class="form-text text-danger" id="feeStandard-info" style="display: none;">请选择费用标准</span>
                     <span class="form-text text-danger" id="feeStandard-info" style="display: none;">请选择费用标准</span>
                     <div class="form-group row" id="taxType_div">
                     <div class="form-group row" id="taxType_div">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计税方式</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计税方式</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select  custom-select-sm" id="taxType">
+                            <select class="form-control  form-control-sm" id="taxType">
                                 &lt;!&ndash;<option value="1">一般计税</option>
                                 &lt;!&ndash;<option value="1">一般计税</option>
                                 <option value="2">简易计税</option>&ndash;&gt;
                                 <option value="2">简易计税</option>&ndash;&gt;
                             </select>
                             </select>
@@ -467,7 +467,7 @@
                     <div class="form-group row">
                     <div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计算程序</label>
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计算程序</label>
                         <div class="col">
                         <div class="col">
-                            <select class="custom-select  custom-select-sm" id="tender-calcProgram">
+                            <select class="form-control  form-control-sm" id="tender-calcProgram">
                             </select>
                             </select>
                         </div>
                         </div>
                     </div>
                     </div>

+ 1 - 1
web/common/html/header.html

@@ -27,7 +27,7 @@
                 <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"><%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %></a>
                 <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown"><%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %></a>
                 <div class="dropdown-menu dropdown-menu-right">
                 <div class="dropdown-menu dropdown-menu-right">
                     <a class="dropdown-item" href="/user/info" target="_blank">账号资料</a>
                     <a class="dropdown-item" href="/user/info" target="_blank">账号资料</a>
-                    <a class="dropdown-item" href="user-buy.html" target="_blank">产品购买</a>
+                    <a class="dropdown-item" href="/user/buy" target="_blank">产品激活</a>
                     <a class="dropdown-item" href="/user/preferences" target="_blank">登录设置</a>
                     <a class="dropdown-item" href="/user/preferences" target="_blank">登录设置</a>
                     <div class="dropdown-divider"></div>
                     <div class="dropdown-divider"></div>
                     <a class="dropdown-item" href="/logout">退出登录</a>
                     <a class="dropdown-item" href="/logout">退出登录</a>

+ 42 - 10
web/over_write/js/chongqing_2018.js

@@ -47,13 +47,17 @@ if(typeof materialComponent !== 'undefined'){
 
 
 // CSL, 2018-08-21 计算程序、基数 的覆盖。---------------------------------------------------------------------------------
 // CSL, 2018-08-21 计算程序、基数 的覆盖。---------------------------------------------------------------------------------
 let isCQ2018 = true;
 let isCQ2018 = true;
-baseMaterialTypes.push(gljType.OTHER_MATERIAL);
-allMaterialTypes.delete(gljType.EQUIPMENT);
-baseMachineTypes.delete(gljType.MACHINE_COMPOSITION);
-baseMachineTypes.push(gljType.INSTRUMENT, gljType.FUEL_POWER_FEE, gljType.DEPRECIATION_FEE,
-    gljType.INSPECTION_FEE, gljType.MAINTENANCE, gljType.DISMANTLING_FREIGHT_FEE,
-    gljType.VERIFICATION_FEE, gljType.OTHER_FEE, gljType.OTHER_MACHINE_USED);
-baseMachineMasterTypes.push(gljType.INSTRUMENT);
+
+if(typeof baseMaterialTypes !== 'undefined'){
+    baseMaterialTypes.push(gljType.OTHER_MATERIAL);
+    allMaterialTypes.delete(gljType.EQUIPMENT);
+    baseMachineTypes.delete(gljType.MACHINE_COMPOSITION);
+    baseMachineTypes.push(gljType.INSTRUMENT, gljType.FUEL_POWER_FEE, gljType.DEPRECIATION_FEE,
+        gljType.INSPECTION_FEE, gljType.MAINTENANCE, gljType.DISMANTLING_FREIGHT_FEE,
+        gljType.VERIFICATION_FEE, gljType.OTHER_FEE, gljType.OTHER_MACHINE_USED);
+    baseMachineMasterTypes.push(gljType.INSTRUMENT);
+}
+
 
 
 function overwriteRationCalcBases (taxType){
 function overwriteRationCalcBases (taxType){
     if (rationCalcBases){
     if (rationCalcBases){
@@ -198,8 +202,12 @@ var cpFeeTypes2018 = [
     {type: 'environmentTax', name: '环境保护税'},
     {type: 'environmentTax', name: '环境保护税'},
     {type: 'common', name: '工程造价'}
     {type: 'common', name: '工程造价'}
 ];
 ];
-cpFeeTypes.splice(0, cpFeeTypes.length);
-for (let e of cpFeeTypes2018) cpFeeTypes.push(e);
+
+if(typeof cpFeeTypes !== 'undefined'){
+    cpFeeTypes.splice(0, cpFeeTypes.length);
+    for (let e of cpFeeTypes2018) cpFeeTypes.push(e);
+}
+
 
 
 
 
 //清单计算基数相关
 //清单计算基数相关
@@ -278,8 +286,32 @@ if(typeof figureClassTemplate !== 'undefined'){
     figureClassTemplate['ADDED_VALUE_TAX'] = {flag: fixedFlag.ADDED_VALUE_TAX, filter: ['SJ', 'ZZS', 'SQGCZJ']}
     figureClassTemplate['ADDED_VALUE_TAX'] = {flag: fixedFlag.ADDED_VALUE_TAX, filter: ['SJ', 'ZZS', 'SQGCZJ']}
 };
 };
 //去除分类分包费
 //去除分类分包费
-if($('#cbClassList')){
+if(typeof $ !== 'undefined' && $('#cbClassList')){
     $('#cbClassList').find('li:eq(5)').remove();
     $('#cbClassList').find('li:eq(5)').remove();
 }
 }
 
 
 
 
+
+
+//这个文档浏览器库和服务器端共用,所以这个文件中用到的变量都要记得做undefined判断,不然后端读取时会有问题
+//=================================================== 前后端分割线 ======================================================================
+if(typeof module !== 'undefined'){
+    module.exports = {
+        getCusCoeContent: getCusCoeContent,
+        getCustomerCoeData: getCustomerCoeData
+    };
+}
+
+function getCusCoeContent() {
+    return '人工×1,材料×1,施工机具×1,主材×1'
+}
+
+function getCustomerCoeData() {
+    return [
+        {amount:1, operator:'*', gljCode:null, coeType:'定额'},
+        { amount:1, operator:'*', gljCode:null, coeType:'人工'},
+        { amount:1, operator:'*', gljCode:null, coeType:'材料'},
+        { amount:1, operator:'*', gljCode:null, coeType:'施工机具'},
+        { amount:1, operator:'*', gljCode:null, coeType:'主材'}
+    ]
+}

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

@@ -0,0 +1,302 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>产品激活-纵横云计价</title>
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+</head>
+
+<body>
+  <div class="header">
+      <%include ../../common/html/header.html %>
+  </div>
+    <div class="main">
+        <div class="poj-manage container-fluid">
+            <div class="row">
+                <div class="col-lg-2">
+                    <div class="mt-3">
+                        <ul class="nav nav-pills flex-column">
+                            <li class="nav-item">
+                                <a class="nav-link" href="/user/info">账号资料</a>
+                            </li>
+                            <li class="nav-item">
+                                <a class="nav-link" href="/user/safe">账号安全</a>
+                            </li>
+                            <li class="nav-item">
+                                <a class="nav-link active" href="/user/buy">产品激活</a>
+                            </li>
+                            <li class="nav-item">
+                                <a class="nav-link" href="/user/preferences">登录设置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </div>
+                <div class="col-lg-10 side-content">
+                    <div class="col-lg-12 my-3">
+                        <!-- <legend>购买企业版</legend>
+                        <div class="card card-body mb-5">
+                            <h3 class="card-title">Smartcost 企业版</h3>
+                            <p class="card-text">简介</p>
+                            <a class="btn btn-primary" href="#">了解企业版</a>
+                        </div> -->
+                        <legend class=" mb-4">激活专业版</legend>
+                        <div class="row">
+                            <div class="col-sm-4 mb-5">
+                                <div class="card">
+                                  <div class=" card-body">
+                                    <h3 class="card-title">免费版 </h3>
+                                      <p class="card-text">
+                                      <ul class="pl-3">
+                                          <li>只可创建 50 个单位工程</li>
+                                          <li>报表带水印</li>
+                                      </ul>
+                                      </p>
+                                  </div>
+                                    <ul class="list-group list-group-flush">
+                                        <% if (compilationList.length > 0) {%>
+                                        <% compilationList.forEach(function(compilation) { %>
+                                        <% if (compilation.is_release === true) { %>
+                                        <li class="list-group-item d-flex justify-content-between">
+                                            <%= compilation.name %>
+                                            <a class="btn disabled btn-sm"><i class="fa fa-check"></i> 已激活</a>
+                                        </li>
+                                        <% } %>
+                                        <% }) %>
+                                        <% } %>
+                                    </ul>
+                                </div>
+                            </div>
+                            <div class="col-sm-4 mb-5">
+                                <div class="card">
+                                  <div class=" card-body">
+                                    <h3 class="card-title">专业版</h3>
+                                      <p class="card-text">
+                                      <ul class="pl-3">
+                                          <li>创建单位工程无限制</li>
+                                          <li>报表无水印</li>
+                                      </ul>
+                                      </p>
+                                  </div>
+                                    <ul class="list-group list-group-flush">
+                                        <% if (compilationList.length > 0) {%>
+                                        <% compilationList.forEach(function(compilation) { %>
+                                        <li class="list-group-item d-flex justify-content-between">
+                                            <%= compilation.name %>
+                                            <% if (compilation.isUpgrade === undefined || compilation.isUpgrade !== true) { %>
+                                            <a class="btn btn-primary btn-sm" href="activ" data-toggle="modal" data-target="#activ">立即激活</a>
+                                            <% } else { %>
+                                            <a class="btn btn-outline-secondary btn-sm" href="activ2" data-toggle="modal" data-target="#activ2"><i class="fa fa-check"></i> 已激活</a>
+                                            <% } %>
+                                        </li>
+                                        <% }) %>
+                                        <% } %>
+                                        <!--<li class="list-group-item d-flex justify-content-between">-->
+                                        <!--重庆(2015)-->
+                                        <!--<a class="btn btn-outline-secondary btn-sm" href="activ2" data-toggle="modal" data-target="#activ2"><i class="fa fa-check"></i> 已激活</a>-->
+                                        <!--</li>-->
+                                    </ul>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--激活产品-->
+    <div class="modal fade" id="activ" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <div class="modal-dialog modal-lg" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                  <h5 class="modal-title">联系销售代表激活</h5>
+                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span>
+                  </button>
+                </div>
+                <div class="modal-body">
+                  <div class="row px-3">
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">刘飞</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">姜栋</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">冯娟</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">何耀</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">杨克松</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">黄俊杰</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">广东办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <div class="modal-footer">
+                  <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--售后服务-->
+    <div class="modal fade" id="activ2" data-backdrop="static" style="display: none;" aria-hidden="true">
+        <div class="modal-dialog modal-lg" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                  <h5 class="modal-title">重庆(2015)售后服务</h5>
+                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span>
+                  </button>
+                </div>
+                <div class="modal-body">
+                  <div class="row px-3">
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">王星植</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">重庆办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">张文远</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">重庆办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">李清学</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">重庆办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">周洪波</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">重庆办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                    <div class="col-4 mb-4">
+                      <div class="card">
+                        <div class="card-body">
+                          <h4 class="card-title">邹芝达</h4>
+                          <h6 class="card-subtitle mb-2 text-muted">重庆办</h6>
+                        </div>
+                        <ul class="list-group list-group-flush">
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="腾讯QQ"><i class="fa fa-qq"></i> 914630468</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="手机号码"><i class="fa fa-tablet"></i> 15812644017</li>
+                          <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="固定电话"><i class="fa fa-phone"></i> 0756-3850891</li>
+                        </ul>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <div class="modal-footer">
+                  <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- JS. -->
+  <script src="/web/building_saas/js/global.js"></script>
+  <script src="/web/users/js/user.js"></script>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

+ 1 - 1
web/users/html/user-info.html

@@ -28,7 +28,7 @@
                             <a class="nav-link" href="/user/safe">账号安全</a>
                             <a class="nav-link" href="/user/safe">账号安全</a>
                         </li>
                         </li>
                         <li class="nav-item">
                         <li class="nav-item">
-                            <a class="nav-link" href="/user/buy">产品购买</a>
+                            <a class="nav-link" href="/user/buy">产品激活</a>
                         </li>
                         </li>
                         <li class="nav-item">
                         <li class="nav-item">
                             <a class="nav-link" href="/user/preferences">登录设置</a>
                             <a class="nav-link" href="/user/preferences">登录设置</a>

+ 1 - 1
web/users/html/user-safe.html

@@ -31,7 +31,7 @@
                             <a class="nav-link active" href="/user/safe">账号安全</a>
                             <a class="nav-link active" href="/user/safe">账号安全</a>
                         </li>
                         </li>
                         <li class="nav-item">
                         <li class="nav-item">
-                            <a class="nav-link" href="/user/buy">产品购买</a>
+                            <a class="nav-link" href="/user/buy">产品激活</a>
                         </li>
                         </li>
                         <li class="nav-item">
                         <li class="nav-item">
                             <a class="nav-link" href="/user/preferences">登录设置</a>
                             <a class="nav-link" href="/user/preferences">登录设置</a>

+ 1 - 1
web/users/html/user-set.html

@@ -29,7 +29,7 @@
                                 <a class="nav-link" href="/user/safe">账号安全</a>
                                 <a class="nav-link" href="/user/safe">账号安全</a>
                             </li>
                             </li>
                             <li class="nav-item">
                             <li class="nav-item">
-                                <a class="nav-link" href="/user/buy">产品购买</a>
+                                <a class="nav-link" href="/user/buy">产品激活</a>
                             </li>
                             </li>
                             <li class="nav-item">
                             <li class="nav-item">
                                 <a class="nav-link active" href="/user/preferences">登录设置</a>
                                 <a class="nav-link active" href="/user/preferences">登录设置</a>