Browse Source

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

zhangweicheng 7 years ago
parent
commit
02875bcce3

+ 17 - 7
modules/complementary_glj_lib/controllers/gljController.js

@@ -4,6 +4,7 @@
 import BaseController from "../../common/base/base_controller";
 import stdgljutil  from "../../../public/cache/std_glj_type_util";
 import GljDao from "../models/gljModel";
+import EngineeringLibModel from "../../users/models/engineering_lib_model";
 
 let gljDao = new GljDao();
 let callback = function(req, res, err, message, data){
@@ -11,18 +12,27 @@ let callback = function(req, res, err, message, data){
 };
 
 class GljController extends BaseController{
-    redirectGlj(req, res){
-        let gljLibId;
-        if(typeof req.session.sessionCompilation.ration_valuation[0].glj_lib[0] !== 'undefined'){
-            gljLibId = req.session.sessionCompilation.ration_valuation[0].glj_lib[0].id;
+    async redirectGlj(req, res){
+        let gljLibId = null, engineeringId, sessionCompilation = req.session.sessionCompilation,
+            rationValuation = sessionCompilation.ration_valuation,
+            billValuation = sessionCompilation.bill_valuation,
+            engineeringLibModel = new EngineeringLibModel();
+        if(rationValuation[0]){
+            let engineeringList = rationValuation[0].engineering_list;
+            engineeringId = engineeringList.length > 0 ? engineeringList[0].engineering_id : null;
+            let engineeringInfo = await engineeringLibModel.getEngineering(engineeringId);
+            gljLibId = engineeringInfo.glj_lib.length > 0 && typeof engineeringInfo.glj_lib !== 'undefined' ? engineeringInfo.glj_lib[0].id : null;
         }
-        else if(typeof req.session.sessionCompilation.bill_valuation[0].glj_lib[0] !== 'undefined'){
-            gljLibId = req.session.sessionCompilation.bill_valuation[0].glj_lib[0].id;
+        else if(billValuation[0]){
+            let engineeringList = billValuation[0].engineering_list;
+            engineeringId = engineeringList.length > 0 ? engineeringList[0].engineering_id : null;
+            let engineeringInfo = await engineeringLibModel.getEngineering(engineeringId);
+            gljLibId = engineeringInfo.glj_lib.length > 0 && typeof engineeringInfo.glj_lib !== 'undefined' ? engineeringInfo.glj_lib[0].id : null;
         }
         res.render('building_saas/complementary_glj_lib/html/tools-gongliaoji.html',{
             userID: req.session.sessionUser.ssoId,
             gljLibId: gljLibId,
-            compilationId: req.session.sessionCompilation._id
+            compilationId: sessionCompilation._id
         });
     }
     getGljDistType (req, res) {

+ 3 - 3
modules/glj/models/glj_list_model.js

@@ -20,12 +20,13 @@ import MixRatioModel from "./mix_ratio_model";
 class GLJListModel extends BaseModel {
 
     /**
-     * 材料类型id
+     * 材料、主材、设备类型id
      *
      * @var {Array}
      */
     materialIdList = [GLJTypeConst.GENERAL_MATERIAL, GLJTypeConst.CONCRETE, GLJTypeConst.MORTAR, GLJTypeConst.MIX_RATIO,
-        GLJTypeConst.COMMERCIAL_CONCRETE, GLJTypeConst.COMMERCIAL_MORTAR];
+        GLJTypeConst.COMMERCIAL_CONCRETE, GLJTypeConst.COMMERCIAL_MORTAR, GLJTypeConst.MAIN_MATERIAL,
+        GLJTypeConst.EQUIPMENT];
 
     /**
      * 拥有组成物的工料机类型id
@@ -137,7 +138,6 @@ class GLJListModel extends BaseModel {
                     }
                 }
             }
-
             // 组合单价数据
             this.combineData(gljData, unitPriceList, quantityList, mixRatioData, totalComposition);
 

+ 2 - 1
modules/ration_repository/models/ration_section_tree.js

@@ -15,7 +15,8 @@ var rationChapterTreeSchema = new Schema({//章节树  //生成唯一id改为sec
     NextSiblingID:Number,
     name: String,
     explanation: String,//说明
-    ruleText: String,//计算规则
+    ruleText: String,//计算规则,
+    jobContentSituation: String,//工作内容适用情况,ALL适用本项全部定额,PARTIAL适用本项部分定额
     isDeleted: Boolean
 });
 var rationChapterTreeModel = chapterTreeDb.model("std_ration_lib_ration_chapter_trees", rationChapterTreeSchema, "std_ration_lib_ration_chapter_trees");

+ 14 - 0
modules/reports/controllers/rpt_tpl_controller.js

@@ -15,6 +15,7 @@ let rptTplDef = rpttplDefObj.getUtil();
 
 //import stringUtil from "../../../public/stringUtil";
 import JV from "../rpt_component/jpc_value_define";
+import rttFacade from "../facade/rpt_tpl_tree_node_facade";
 
 //import test_glj_type_util from "../../../public/cache/std_glj_type_util");
 
@@ -36,6 +37,19 @@ let mExport = {
     },
     getRptTplTree: function(req, res) {
         let params = JSON.parse(req.body.params),
+            compilationId = params.compilationId,
+            userId = params.userId,
+            engineerId = params.engineerId;
+        rttFacade.findTplTree(compilationId, engineerId, userId).then(function(result) {
+            if (result) {
+                callback(req,res,false,"", result);
+            } else {
+                callback(req,res, true,"no result", null);
+            }
+        });
+    },
+    getRptTplTree_org: function(req, res) {
+        let params = JSON.parse(req.body.params),
             grpType = params.grpType,
             userId = params.userId,
             tplType = params.tplType;

+ 10 - 10
modules/reports/facade/rpt_tpl_tree_node_facade.js

@@ -11,7 +11,7 @@ const SYSTEM_USER_ID = -100;
 function validate(doc) {
     let rst = true;
     if (doc) {
-        if (!(doc.hasOwnProperty("comilationId") && doc.hasOwnProperty("engineerId") && doc.hasOwnProperty("userId"))) {
+        if (!(doc.hasOwnProperty("compilationId") && doc.hasOwnProperty("engineerId") && doc.hasOwnProperty("userId"))) {
             rst = false;
         }
     } else {
@@ -28,24 +28,24 @@ async function createNewTree(doc) {
     }
 }
 
-async function updateTree(comilationId, engineerId, userId, doc) {
-    let filter = {"comilationId": comilationId, "engineerId": engineerId, "userId": userId};
+async function updateTree(compilationId, engineerId, userId, doc) {
+    let filter = {"compilationId": compilationId, "engineerId": engineerId, "userId": userId};
     return await rpt_tpl_tree_mdl.update(filter, doc);
 }
 
-async function removeTree(comilationId, engineerId, userId, cb) {
-    let filter = {"comilationId": comilationId, "engineerId": engineerId, "userId": userId};
+async function removeTree(compilationId, engineerId, userId, cb) {
+    let filter = {"compilationId": compilationId, "engineerId": engineerId, "userId": userId};
     return await rpt_tpl_tree_mdl.findAndModify(filter, [], { $set: { "isDeleted": true } }, {'new':true}, cb);
 }
 
-async function removeTreePhycically(comilationId, engineerId, userId) {
-    let filter = {"comilationId": comilationId, "engineerId": engineerId, "userId": userId};
+async function removeTreePhycically(compilationId, engineerId, userId) {
+    let filter = {"compilationId": compilationId, "engineerId": engineerId, "userId": userId};
     return await rpt_tpl_tree_mdl.remove(filter);
 }
 
-async function findTplTree(comilationId, engineerIds, userIds) {
-    //let filter = {"comilationId": comilationId, "engineerId": engineerIds, "userId": userIds};
-    let filter = {"comilationId": comilationId, "engineerId": engineerIds, "userId": userIds, "$or": [{"isDeleted": null}, {"isDeleted": false}]};
+async function findTplTree(compilationId, engineerIds, userIds) {
+    //let filter = {"compilationId": compilationId, "engineerId": engineerIds, "userId": userIds};
+    let filter = {"compilationId": compilationId, "engineerId": engineerIds, "userId": userIds, "$or": [{"isDeleted": null}, {"isDeleted": false}]};
     if (engineerIds instanceof Array) {
         filter.engineerId = {$in: engineerIds};
     }

+ 1 - 1
modules/reports/models/tpl_tree_node.js

@@ -26,7 +26,7 @@ let TplNodeSchema = new Schema({
 });
 
 let RptTplTreeSchema = new Schema({
-    comilationId: String,   //编办的ObjectId
+    compilationId: String,  //编办的ObjectId
     engineerId: Number,     //工程专业Id(参考 /modules/common/const/engineering.js)
     userId: Number,         //userId,如果是标准模板,则为-100
     properties: [],         //这是一个预留的属性,假定未来还会有不同的划分细节(如:招标/投标/清单 ... etc)

+ 27 - 5
public/web/ztree_common.js

@@ -3,10 +3,32 @@
  */
 zTreeHelper = {
     createTree: function(sourceData, setting, containerId, caller){
-        var treeArr = tree_Data_Helper.buildTreeNodeDirectly(sourceData);
-        var private_build_parentNodeIds = function(pNodeId, nodesArr){
-            var rst = [];
-            for (var i = 0; i < nodesArr.length; i++) {
+        let me = this, treeArr = tree_Data_Helper.buildTreeNodeDirectly(sourceData);
+        // let private_build_parentNodeIds = function(pNodeId, nodesArr){
+        //     let rst = [];
+        //     for (let i = 0; i < nodesArr.length; i++) {
+        //         if (nodesArr[i].items.length > 0) {
+        //             rst = rst.concat(private_build_parentNodeIds(nodesArr[i].ID, nodesArr[i].items));
+        //         } else {
+        //             rst.push(nodesArr[i].ID);
+        //         }
+        //     }
+        //     if (pNodeId && rst.length > 0) {
+        //         caller.parentNodeIds["_pNodeId_" + pNodeId] = rst;
+        //     }
+        //     return rst;
+        // };
+        // if (caller.parentNodeIds) {
+        //     private_build_parentNodeIds(null, treeArr);
+        // }
+        // caller.treeObj = $.fn.zTree.init($("#" + containerId), setting, treeArr);
+        // caller.treeObj.expandAll(true);
+        me.createTreeDirectly(treeArr, setting, containerId, caller);
+    },
+    createTreeDirectly: function (treeArr, setting, containerId, caller) {
+        let private_build_parentNodeIds = function(pNodeId, nodesArr){
+            let rst = [];
+            for (let i = 0; i < nodesArr.length; i++) {
                 if (nodesArr[i].items.length > 0) {
                     rst = rst.concat(private_build_parentNodeIds(nodesArr[i].ID, nodesArr[i].items));
                 } else {
@@ -24,4 +46,4 @@ zTreeHelper = {
         caller.treeObj = $.fn.zTree.init($("#" + containerId), setting, treeArr);
         caller.treeObj.expandAll(true);
     }
-}
+};

+ 10 - 6
test/unit/reports/rpt_tpl_tree_test.js

@@ -15,7 +15,7 @@ dbm.connect();
 /*
 test('测试 - 创建dummy报表树: ', function (t) {
     let tprTplTree = {};
-    tprTplTree.comilationId = "598d239605cdd825682925d1";
+    tprTplTree.compilationId = "598d239605cdd825682925d1";
     tprTplTree.engineerId = 1;
     tprTplTree.userId = -100;
     tprTplTree.properties = [{"isZhaoBiao": false}, {"isBills": true}];
@@ -39,7 +39,7 @@ test('测试 - 创建dummy报表树: ', function (t) {
 /*
 test('测试 - 创建dummy报表树2: ', function (t) {
     let tprTplTree = {};
-    tprTplTree.comilationId = "598d239605cdd825682925d1";
+    tprTplTree.compilationId = "598d239605cdd825682925d1";
     tprTplTree.engineerId = 2;
     tprTplTree.userId = -100;
     tprTplTree.properties = [{"isZhaoBiao": false}, {"isBills": true}];
@@ -63,7 +63,7 @@ test('测试 - 创建dummy报表树2: ', function (t) {
 /*
 test('测试 - 更新 dummy报表树2: ', function (t) {
     let tprTplTree = {};
-    tprTplTree.comilationId = "598d239605cdd825682925d1";
+    tprTplTree.compilationId = "598d239605cdd825682925d1";
     tprTplTree.engineerId = 2;
     tprTplTree.userId = -100;
     tprTplTree.properties = [{"isZhaoBiao": false}, {"isBills": true}];
@@ -76,7 +76,7 @@ test('测试 - 更新 dummy报表树2: ', function (t) {
     tprTplTree.items.push( {nodeType: 1, refId: -1, name: "【表-09】分部分项工程/施工技术措施项目清单计价表", items: null} );
     tprTplTree.items.push( {nodeType: 1, refId: -1, name: "【表-09-1】分部分项工程/施工技术措施项目清单计价表(一)", items: null} );
 
-    let results = rttFacade.updateTree(tprTplTree.comilationId, tprTplTree.engineerId, tprTplTree.userId, tprTplTree);
+    let results = rttFacade.updateTree(tprTplTree.compilationId, tprTplTree.engineerId, tprTplTree.userId, tprTplTree);
     results.then(function(rst) {
         console.log(rst);
         t.pass('just pass!');
@@ -124,9 +124,13 @@ test('测试 - find dummy 报表树 by ObjectId: ', function (t) {
 
 //*
 test('测试 - find dummy 报表树 ', function (t) {
-    let results = rttFacade.findTplTree("598d239605cdd825682925d1", [1], -100);
+    let results = rttFacade.findTplTree("598d239605cdd825682925d1", [1], [-101]);
     results.then(function(rst) {
-        console.log(rst);
+        if (rst) {
+            console.log('no result');
+        } else {
+            console.log(rst);
+        }
         //mongoose.disconnect();
         t.pass('just pass!');
         t.end();

+ 6 - 6
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -118,24 +118,24 @@
                   <div class="modal-body">
                     <div class="row">
                       <div class="col-4">
-                        <div  class="modal-auto-height">
-                            <div class="print-list">
-                                <div class="form-list" id="componentTreeDiv">
+                        <div  class="modal-auto-height" id="componentTreeDiv" style="overflow: hidden">
+                            <!--<div class="print-list">-->
+                                <div style="width: 100%; height: 100%; overflow: auto">
                                     <ul id="componentTree" class="ztree"></ul>
                                 </div>
-                            </div>
+                            <!--</div>-->
                         </div>
                       </div>
                       <div class="col-8">
                           <div class="row">
-                              <div class="modal-auto-height col-12" id="gljRadios">
+                              <div class="col-12" id="gljRadios">
                                   <input type="radio" class="glj-radio" name="glj" value="allGljs">所有工料机&nbsp;&nbsp;
                                   <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准工料机&nbsp;&nbsp;
                                   <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充工料机&nbsp;&nbsp;
                                   <input type="radio" class="glj-radio" name="glj" value="selectedGljs">已选工料机机&nbsp;&nbsp;
                                  <!-- <div class="form-group"><input id="searchGlj" type="text" class="form-control-sm" placeholder="查询工料机"></div>-->
                               </div>
-                              <div class="modal-auto-height col-12"  id="componentSheet">
+                              <div class="modal-auto-height col-12" style="overflow: hidden" id="componentSheet">
                                <!--   <table class="table table-sm table-bordered m-0">
                                       <thead>
                                       <tr><th></th><th>编码</th><th>名称</th><th>规格型号</th><th>计量单位</th><th>单价</th><th>类型</th></tr>

+ 3 - 11
web/building_saas/complementary_glj_lib/js/components.js

@@ -89,7 +89,7 @@ let componentOprObj = {
         let materialArr = [202, 203, 204];//混凝土、砂浆、配合比, 201普通材料
         let that = repositoryGljObj, me = componentOprObj;
             for(let i = 0; i < gljList.length; i++){
-                if(that.currentGlj.gljType === 3 && gljList[i].gljType === 302 ||
+                if(that.currentGlj.gljType === 301 && gljList[i].gljType === 302 ||
                     materialArr.indexOf(that.currentGlj.gljType) !== -1 && gljList[i].gljType === 201){
                     //去除与已添加的组成物重复的条目
                     let isExist = false;
@@ -248,6 +248,8 @@ let componentOprObj = {
             }
             sheetOpr.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
             sheetOpr.showData(me.workBook.getSheet(0), me.setting, cacheSection, re.distTypeTree);
+            me.workBook.getSheet(0).options.isProtected = true;
+            me.workBook.getSheet(0).setRowCount(cacheSection);
             cacheSection = null;
         }
     },
@@ -280,17 +282,7 @@ let componentTypeTreeOprObj = {
             } else {
                 me.currentCache = me.getCache();
             }
-            //切换分类树时,记住当前分类的选择
-            //me.setComponentChecked(me.workBook.getSheet(0));
         }
         me.showGljItems(me.showGljList, gljTypeId);
-        /*sheetOpr.cleanSheet(that.workBook.getSheet(0), that.setting, 5);
-         that.workBook.getSheet(0).getRange(-1, 0 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
-         that.workBook.getSheet(0).getRange(-1, 4 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
-         re.workBook.getSheet(0).getRange(-1, 6 , -1, 1, GC.Spread.Sheets.SheetArea.viewport).locked(true);*/
-        //that.workBook.getSheet(0).options.isProtected = true;
-
-        //sheetOpr.lockCodeCells(re.workBook.getSheet(0), re.currentCache.length);
-        //re.workBook.getSheet(0).setRowCount(re.currentCache.length);
     }
 }

+ 2 - 4
web/building_saas/complementary_glj_lib/js/gljComponent.js

@@ -61,12 +61,10 @@ let gljComponentOprObj = {
             selector: '#gljComponentSheet',
             build: function($triggerElement, e){
                 //控制允许右键菜单在哪个位置出现
-                let clientX = e.originalEvent.clientX,
-                    clientY = e.originalEvent.clientY;
                 let sheet = me.workBook.getSheet(0);
                 let offset = $("#gljComponentSheet").offset(),
-                    x = clientX - offset.left,
-                    y = clientY - offset.top;
+                    x = e.pageX - offset.left,
+                    y = e.pageY - offset.top;
                 let target = sheet.hitTest(x, y);
                 if(target.hitTestType === 3 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'){//在表格内
                     sheet.setActiveCell(target.row, target.col);

+ 11 - 2
web/building_saas/complementary_glj_lib/js/sheetOpr.js

@@ -7,7 +7,8 @@ let sheetOpr = {
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: SheetCount });
         spreadBook.options.allowCopyPasteExcelStyle = false;
         spreadBook.options.tabStripVisible = false;
-        spreadBook.options.showHorizontalScrollbar = false;
+        spreadBook.options.scrollbarMaxAlign = true;
+        //spreadBook.options.showHorizontalScrollbar = false;
         spreadBook.options.allowUserDragDrop = false;
         return spreadBook;
     },
@@ -21,6 +22,10 @@ let sheetOpr = {
         sheet.setColumnCount(setting.header.length, spreadNS.SheetArea.viewport);
         sheet.options.colHeaderAutoTextIndex = 1;
         sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers;
+        sheet.options.protectionOptions = {
+            allowResizeRows: true,
+            allowResizeColumns: true
+        };
         sheet.showRowOutline(false);
         me.buildHeader(sheet, setting);
         if (rowCount > 0) sheet.setRowCount(rowCount);
@@ -32,7 +37,7 @@ let sheetOpr = {
         var me = this;
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 });
         spreadBook.options.tabStripVisible = false;
-        spreadBook.options.showHorizontalScrollbar = false;
+        //spreadBook.options.showHorizontalScrollbar = false;
         spreadBook.options.scrollbarMaxAlign = true;
         spreadBook.options.allowCopyPasteExcelStyle = false;
         spreadBook.options.allowExtendPasteRange = true;
@@ -46,6 +51,10 @@ let sheetOpr = {
         sheet.setColumnCount(setting.header.length, spreadNS.SheetArea.viewport);
         sheet.options.colHeaderAutoTextIndex = 1;
         sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers;
+        sheet.options.protectionOptions = {
+            allowResizeRows: true,
+            allowResizeColumns: true
+        };
         sheet.showRowOutline(false);
         //setup column header
         me.buildHeader(sheet, setting);

+ 16 - 12
web/building_saas/js/global.js

@@ -14,17 +14,18 @@ function autoFlashHeight(){
     $(".main-data-not").height($(window).height()-headerHeight-1);
     $(".main-data-side-search").height($(window).height()-headerHeight-toolsbarHeight-64);
     $(".side-content").height($(window).height()-headerHeight );
-    $(".poj-list").height($(window).height()-headerHeight-ftoolsbarHeight);
+    $(".poj-list").height($(window).height()-headerHeight-toolsbarHeight);
+    $(".form-view").height($(window).height()-headerHeight-ftoolsbarHeight);
     $(".form-list").height($(window).height()-headerHeight-50 );
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/
 $(function(){
-/*侧滑*/
-$(".open-sidebar").click(function(){
-    $(".slide-sidebar").animate({width:"800"}).addClass("open");
-});
-$("body").click(function(event){
+    /*侧滑*/
+    $(".open-sidebar").click(function(){
+        $(".slide-sidebar").animate({width:"800"}).addClass("open");
+    });
+    $("body").click(function(event){
         var e = event || window.event; //浏览器兼容性
         if(!$(event.target).is('a')) {
             var elem = event.target || e.srcElement;
@@ -38,10 +39,13 @@ $("body").click(function(event){
         }
 
     });
-/*侧滑*/
-/*工具提示*/
-$(function () {
-  $('[data-toggle="tooltip"]').tooltip()
-});
-/*工具提示*/
+    /*侧滑*/
+    /*工具提示*/
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip()
+    });
+    /*工具提示*/
+    $(function () {
+        $('[data-toggle="popover"]').popover()
+    });
 });

+ 3 - 2
web/building_saas/pm/js/pm_main.js

@@ -822,9 +822,10 @@ function GetUpdateData(parent, next, name, property, newId, type) {
     let data = [];
     let updateData = {};
 
-    if(type.projectType== projectType.tender){
+    let rootProjectID = -1;
+    if(type.projectType === projectType.tender){
         let rootProject = parent ? parent.parent : Tree._root;
-        let rootProjectID = rootProject ? rootProject.id() : -1;
+        rootProjectID = rootProject ? rootProject.id() : -1;
         if(property){
             property.rootProjectID=rootProjectID;
         }