浏览代码

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

zhangweicheng 6 年之前
父节点
当前提交
5f280d49b2

+ 1 - 1
modules/all_models/block_lib_model.js

@@ -26,7 +26,7 @@ let dataSchema = new Schema({
 let blockLibsSchema = new Schema({
     userID: String,
     compilationID: String,
-    libID: Number,
+    libID: String,
     libName: String,
     datas: [dataSchema],
     share: {}

+ 41 - 14
modules/main/facade/block_lib_facade.js

@@ -4,17 +4,19 @@
 
 let mongoose = require('mongoose');
 let blModel = mongoose.model('blockLibsModel');
+let uuid = require('../../../public/web/uuid');
 
 module.exports = {
     getLibNames: getLibNames,
     getLib: getLib,
     getLibNamesAndFirstLib: getLibNamesAndFirstLib,
+    copyTemplateLib: copyTemplateLib,
     saveBlock: saveBlock
 };
 
 // userID、compilationID
 async function getLibNames(data) {
-    let libNames = await blModel.find({userID: data.userID, compilation: data.compilationID}, ["libID","libName","-_id"]);
+    let libNames = await blModel.find({userID: data.userID, compilationID: data.compilationID}, ["libID","libName","-_id"]);
     return libNames;
 };
 
@@ -27,30 +29,55 @@ async function getLib(data) {
 // userID、compilationID
 async function getLibNamesAndFirstLib(data) {
     let libNames = await getLibNames(data);
-    let firstLib = await getLib(libNames[0]);
-    return {libNames: libNames, firstLib: firstLib};
+    let lib = null;
+    if (libNames.length == 0){
+        lib = await copyTemplateLib(data.userID, data.userName, data.compilationID);
+        libNames.push({libID: lib.libID, libName: lib.libName});
+    }
+    else{
+        lib = await getLib(libNames[0]);
+    }
+    return {libNames: libNames, firstLib: lib};
+};
+
+
+async function copyTemplateLib(userID, userName, compilationID) {
+    let template = await getLib({libID: '00000000'});
+    let newLib = {
+        userID: userID,
+        compilationID: compilationID,
+        libID: uuid.v1(),
+        libName: `${userName}的块模板库`,
+        datas: template.datas,
+        share: template.share
+    };
+    newLib.share.shareName = `共享-${newLib.libName}`;
+    await blModel.create(newLib);
+    console.log(JSON.stringify(newLib));
+    return newLib;
 };
 
 /*------------------------------------------------------------------------------
-data参数示例:
-        {
-            libID: 3,
-            nodeID: 5,
-            create: {node}
-            delete: true
-            update: {nodeName: 'xxx', children: [...]}
-        }
+参数:   {libID: n, nodeID: m, create: {node} | delete: true | update: {A:'xxx', B:'xxx'} }
 说明:   libID、nodeID 必须。 create|update|delete三选一。
-        create属性值是完整的node节点数据。
-        delete属性值是true。
-        update属性值是要修改的属性键值对组成的对象。
+        create属性值:完整的node节点数据。
+        delete属性值:固定为true(false没有实际意义)。
+        update属性值:列出多个要修改的结点属性(键值对组成的对象)。
+示例:   {libID: 3, nodeID: 5, create: {....}}
+        {libID: 3, nodeID: 5, delete: true}
+        {libID: 3, nodeID: 5, update: {nodeName: 'xxx', children: [...]} }
 ------------------------------------------------------------------------------*/
 async function saveBlock(data) {
     if (data.create) {
         await blModel.update({libID: data.libID}, {$addToSet: {datas: data.create}});
     }
     if (data.delete) {
+        console.log(JSON.stringify(data));
+        console.log(data.nodeID);
         await blModel.update({libID: data.libID}, {$pull: {datas: {ID: data.nodeID}}});
+        if (data.delete.nodeType == 1){    // 同步删除所有子结点
+            await blModel.update({libID: data.libID}, {$pull: {datas: {ParentID: data.nodeID}}});
+        }
     }
     else if (data.update){
         let doc = await blModel.findOne({libID: data.libID});

+ 2 - 1
web/building_saas/complementary_ration_lib/js/coe.js

@@ -31,6 +31,7 @@ $(document).ready(function () {
     leftElesObj.right = $('#mainContent');
     let maxEval = `$('#zmhsContent').is(':visible') ? $('#dataRow').width() - $('#zmhsContent').width() - 300 : $('#dataRow').width()  - 300`;
     SlideResize.horizontalSlide(leftElesObj, {min: 300, max: maxEval}, function () {
+        sectionTreeObj.loadRateWidth();
         refreshALlWorkBook();
     });
     SlideResize.loadHorizonWidth(moduleName, [$('#slideResizeLeft')], [$('#leftContent'), $('#mainContent')], function () {
@@ -40,7 +41,6 @@ $(document).ready(function () {
         let surplus = 100 - leftContentWidth - mainContentWidth;
         $('#leftContent').css('width', `${leftContentWidth + surplus / 2}%`);
         $('#mainContent').css('width', `${mainContentWidth + surplus / 2}%`);
-
         refreshALlWorkBook();
     });
     //定额表与子目换算表
@@ -105,6 +105,7 @@ $(document).ready(function () {
         for (let resize of resizes) {
             setResizeWidth(resize);
         }
+        sectionTreeObj.loadRateWidth();
     }
     $('#zmhs').click(function () {
         if(!$(this).hasClass('active')){

+ 1 - 0
web/building_saas/complementary_ration_lib/js/global.js

@@ -27,6 +27,7 @@ function autoFlashHeight(){
     $('#ruleTextShow').height($(window).height()-headerHeight-toolsBar-100);
     typeof loadRationSubSize !== 'undefined' ? loadRationSubSize() : '';
     typeof loadZmhsAdjSize !== 'undefined' ? loadZmhsAdjSize() : '';
+    typeof sectionTreeObj !== 'undefined' ? sectionTreeObj.loadRateWidth() : '';
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/

+ 6 - 28
web/building_saas/complementary_ration_lib/js/section_tree.js

@@ -44,33 +44,6 @@ let pageOprObj = {
     getRationLibInfo: function (rationLibId, callback) {
         CommonAjax.post('api/getRationLib', {rationRepId: rationLibId}, callback);
     },
-    //获取定额库列表
-    /*getRationLibs: function () {
-        let scFunc = function (rstData) {
-            $("#comple_ration_table").empty();
-            for(let i = 0; i < rstData.length; i++){
-                storageUtil.setSessionCache("RationGrp","repositoryID_" + rstData[i].ID, rstData[i].dispName);
-                if(rstData[i].gljLib !== undefined && rstData[i].gljLib && rstData[i].gljLib != -1){
-                    storageUtil.setSessionCache("gljLib","repositoryID_" + rstData[i].ID, rstData[i].gljLib);
-                    let id = rstData[i].ID;
-                    let libName = rstData[i].dispName;
-                    $("#comple_ration_table").append(
-                        "<tr id='tempId'>" +
-                        "<td><a href='/stdGljRepository/glj'>"+libName+"</a></td></tr>"
-                    );
-                    var newHref = "/complementaryRation/ration?repository="+id;
-                    $("#tempId td:first a").attr("href", newHref);
-                    $("#tempId").attr("id", id);
-                }
-            }
-        };
-        let ration_lib = projectInfoObj.projectInfo.engineeringInfo.ration_lib;
-        let ids = [];
-        for(lib of ration_lib){
-            ids.push(parseInt(lib.id));
-        }
-        CommonAjax.post('/complementaryRation/api/getRationLibs', {user_id: userID, ids: ids}, scFunc);
-    }*/
 };
 
 let sectionTreeObj = {
@@ -245,7 +218,11 @@ let sectionTreeObj = {
             });
         }
     },
-
+    loadRateWidth: function () {
+        if (this.workBook) {
+            sheetCommonObj.setColumnWidthByRate($('#sectionSpread').width() - 65, this.workBook, [{rateWidth: 1}]);//65: 列头宽度和垂直滚动条宽度和
+        }
+    },
     getSectionTree: function () {
         let me = sectionTreeObj;
         let url = 'api/getRationTree';
@@ -265,6 +242,7 @@ let sectionTreeObj = {
             me.setColor(me.cache);
             me.sheet.setFormatter(-1, 0, '@');
             me.initSelection(me.tree.selected);
+            me.loadRateWidth();
             //explanatoryOprObj.bindEvents($('#explanationShow'), $('#ruleTextShow'));
         };
         let errFunc = function () {

+ 4 - 3
web/building_saas/main/html/main.html

@@ -434,11 +434,11 @@
                                       </div>
                                       <div class="container-fluid" id="qdjl" role="tabpanel">
                                           <div class="row p-0" style="background: #efefef">
-                                              <div class="col-10 p-0">
+                                              <div class="col-6 p-0">
                                                   <div class="main-data-bottom ovf-hidden" id="elfItems">
                                                   </div>
                                               </div>
-                                              <div class="col-2 p-1">
+                                              <div class="col-6 p-1">
                                                   <p class="mt-3"><a id="elfInsertRation" href="javascript:void(0);" class="btn btn-sm btn-primary">应用选项</a></p>
                                                   <p><a id="elfInsertSingle" href="javascript:void(0)" class="btn btn-sm btn-primary">应用单条</a></p>
                                               </div>
@@ -540,7 +540,8 @@
                                       <div class="side-search-box col-12 p-2" id="billsGuidanceSearchResult" style="display: none;">
                                           <div class="d-flex justify-content-between">
                                               <span id = 'billsGuidanceSearchResultCount'>搜索结果:5</span>
-                                              <a class="btn btn-secondary btn-sm" href="javascript:void(0);" id="nextBillsGuidance">查找下一条</a>
+                                              <a class="btn btn-secondary btn-sm" href="javascript:void(0);" id="preBillsGuidance">上一条</a>
+                                              <a class="btn btn-secondary btn-sm" href="javascript:void(0);" id="nextBillsGuidance">下一条</a>
                                               <a title="关闭搜索" class="btn btn-link btn-sm" href="javascript:void(0);" id="closeSearchBillsGuidance"><i class="fa fa-remove" aria-hidden="true"></i></a>
                                           </div>
                                       </div>

+ 3 - 31
web/building_saas/main/js/views/billsElf.js

@@ -72,8 +72,8 @@ const BillsElf = (function() {
             ]
         },
         headers: [
-            {name: '施工工序', dataCode: 'name', width: 250, rateWidth: 0.5, vAlign: 'center', hAlign: 'center', formatter: '@'},
-            {name: '选项', dataCode: 'options', width: 250, rateWidth: 0.5,  vAlign: 'center', hAlign: 'left', formatter: '@'},
+            {name: '施工工序', dataCode: 'name', width: 180, rateWidth: 0.5, vAlign: 'center', hAlign: 'center', formatter: '@'},
+            {name: '选项', dataCode: 'options', width: 180, rateWidth: 0.5,  vAlign: 'center', hAlign: 'left', formatter: '@'},
         ],
         rowHeaderWidth:25,
         events: {
@@ -205,7 +205,7 @@ const BillsElf = (function() {
             }
             setOptions(elfItem.workBook, options);
             buildHeader(elfItem.workBook.getActiveSheet(), elfItem.headers);
-            setColumnWidthByRate(elfItem.workBook, $('#elfItems').width(), elfItem.headers);
+            //setColumnWidthByRate(elfItem.workBook, $('#elfItems').width(), elfItem.headers);
             bindEvent(elfItem.workBook, elfItem.events);
         }
     }
@@ -247,7 +247,6 @@ const BillsElf = (function() {
                 billsNode.elf.tree.selected = node;
             }
         }
-        refreshInsertSingle();
     }
     //清单焦点变换-清单精灵操作,获取清单前九位编码的标准清单清单精灵选项
     //@param {String}code @return {void}
@@ -255,8 +254,6 @@ const BillsElf = (function() {
         let elfSheet = elfItem.workBook.getActiveSheet();
         cleanData(elfSheet, elfItem.headers, -1);
         if (!code || code === '') {
-            $('#elfInsertRation').addClass('disabled');
-            $('#elfInsertSingle').addClass('disabled');
             return;
         }
         let nineCode = code.substr(0, 9);
@@ -311,7 +308,6 @@ const BillsElf = (function() {
                     setOptionsCellType(node.elf.tree.items);
                     //项目指引初始焦点
                     elfItemInitSel(elfSheet.getActiveRowIndex() ? elfSheet.getActiveRowIndex() : 0);
-                    refreshInsertRation();
                 });
             });
         }
@@ -321,7 +317,6 @@ const BillsElf = (function() {
                 setOptionsCellType(node.elf.tree.items);
                 //项目指引初始焦点
                 elfItemInitSel(elfSheet.getActiveRowIndex() ? elfSheet.getActiveRowIndex() : 0);
-                refreshInsertRation();
             });
         }
     }
@@ -530,8 +525,6 @@ const BillsElf = (function() {
             }
             TREE_SHEET_HELPER.refreshTreeNodeData(elfItem.treeSetting, elfSheet, node.tree.items, false);
             setOptionsCellType(node.tree.items);
-            refreshInsertRation();
-            refreshInsertSingle();
         }
         //获取删除节点
         function getDeleteNodes(node, optionChecked) {
@@ -723,31 +716,10 @@ const BillsElf = (function() {
     function insertRations(addRationDatas){
         if(addRationDatas.length > 0){
             projectObj.project.Ration.addMultiRation(addRationDatas, function () {
-                refreshInsertRation();
                 projectObj.setActiveCell('quantity', true);
             });
         }
     }
-    //更新插入定额按钮有效性
-    function refreshInsertRation(){
-        if (!projectReadOnly) {
-            if (getInsertElfRationData().length > 0) {
-                $('#elfInsertRation').removeClass('disabled');
-            } else {
-                $('#elfInsertRation').addClass('disabled');
-            }
-        }
-    }
-    //更新插入单条按钮有效性
-    function refreshInsertSingle() {
-        if (!projectReadOnly) {
-            if (getInsertElfSingleRation().length > 0) {
-                $('#elfInsertSingle').removeClass('disabled');
-            } else {
-                $('#elfInsertSingle').addClass('disabled');
-            }
-        }
-    }
     //各监听事件
     //@return {void}
     function bindListener(){

+ 5 - 3
web/building_saas/main/js/views/block_lib.js

@@ -72,7 +72,8 @@ var blockLibObj = {
     buildSheet: async function () {
         $.bootstrapLoading.start();
         let me = this;
-        let namesAndLib = await ajaxPost('/blockLib/getLibNamesAndFirstLib', {userID: userID, compilationID: projectInfoObj.projectInfo.compilation});
+        let namesAndLib = await ajaxPost('/blockLib/getLibNamesAndFirstLib',
+            {userID: userID, userName: userName, compilationID: projectInfoObj.projectInfo.compilation});
         function getLibNamesHtml(libsArr) {
             let result = '';
             for (let lib of libsArr) {
@@ -436,10 +437,11 @@ var blockLibObj = {
         // this.mainTreeController.moveTo(parentID);
     },
     delete: async function () {
+        let node = blockLibObj.mainTree.selected;
         let obj = {
             libID: blockLibObj.activeLib.libID,
-            nodeID: blockLibObj.mainTree.selected.data.ID,
-            delete: true
+            nodeID: node.data.ID,
+            delete: {nodeType: node.data.type}
         };
         await ajaxPost('/blockLib/saveBlock', obj);
         this.mainTreeController.delete();

+ 3 - 3
web/building_saas/main/js/views/side_tools.js

@@ -7,7 +7,7 @@ $(window).resize(function() {
     billsGuidance.setColumnWidthByRate(billsGuidance.elfItem.workBook, $('#zy').width(), billsGuidance.elfItem.headers);
     billsGuidance.refreshWorkBook();
     rationLibObj.refreshSpread();
-    BillsElf.setColumnWidthByRate();
+    //BillsElf.setColumnWidthByRate();
     loadSideToolsHeight();
     //刷新主界面与各库中间的拖动条宽度:始终保持为一个宽度(在小窗口打开一个库,再放大窗口后,该拖动条宽度会变大)
     SlideResize.setResizeWidth($('#sideResize'));
@@ -32,7 +32,7 @@ SlideResize.horizontalSlide(sideResizeEles.eleObj, sideResizeEles.limit, functio
    // MaterialController.showReplaceDiv();
     subObj.initGljSubTab();
     pageCCOprObj.resizeWidth();
-    BillsElf.setColumnWidthByRate();
+    //BillsElf.setColumnWidthByRate();
     projectObj.refreshMainSpread();
     refreshSubSpread();
     if (sideResizeEles.eleObj.module === 'stdBillsGuidanceTab') {//清单精灵(规则)
@@ -199,7 +199,7 @@ var sideToolsObj = {
         pageCCOprObj.resizeWidth();
         billsGuidance.refreshWorkBook();
         billsLibObj.refreshBillsSpread();
-        BillsElf.setColumnWidthByRate();
+        //BillsElf.setColumnWidthByRate();
         refreshSubSpread();
         billsLibObj.refreshBillsRelaSpread();
         rationLibObj.refreshSpread();//subSpread、jobSpread、itemSpread显示问题

+ 24 - 3
web/building_saas/main/js/views/std_billsGuidance_lib.js

@@ -719,8 +719,10 @@ const billsGuidance = (function () {
         let billsSheet = bills.workBook.getActiveSheet();
         renderSheetFunc(billsSheet, function () {
             function expParentNode(node){
-                if(node.parent && !node.parent.expanded){
-                    node.parent.setExpanded(true);
+                if(node.parent){
+                    if (!node.parent.expanded) {
+                        node.parent.setExpanded(true);
+                    }
                     expParentNode(node.parent);
                 }
             }
@@ -788,7 +790,7 @@ const billsGuidance = (function () {
                 });
                 //搜索初始定位
                 billsSheet.showRow(result[0].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
-
+                //查找下一条
                 $('#nextBillsGuidance').show();
                 $('#nextBillsGuidance').unbind('click');
                 $('#nextBillsGuidance').bind('click', function () {
@@ -803,12 +805,30 @@ const billsGuidance = (function () {
                         billsSheet.showRow(result[resultIndex + 1].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
                     }
                 });
+                //查找上一条
+                $('#preBillsGuidance').show();
+                $('#preBillsGuidance').unbind('click');
+                $('#preBillsGuidance').bind('click', function () {
+                    let cur = bills.tree.selected, resultIndex = result.indexOf(cur), sel = billsSheet.getSelections();
+                    if (resultIndex === 0) {
+                        bills.controller.setTreeSelected(result[result.length - 1]);
+                        billsSheet.setSelection(result[result.length - 1].serialNo(), sel[0].col, 1, 1);
+                        billsSheet.showRow(result[result.length - 1].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
+                    } else {
+                        bills.controller.setTreeSelected(result[resultIndex - 1]);
+                        billsSheet.setSelection(result[resultIndex - 1].serialNo(), sel[0].col, 1, 1);
+                        billsSheet.showRow(result[resultIndex - 1].serialNo(), GC.Spread.Sheets.VerticalPosition.bottom);
+                    }
+                });
             } else {
                 billsLibObj.clearHighLight(bills.workBook);
                 $('#nextBillsGuidance').hide();
+                $('#preBillsGuidance').hide();
             }
             $('#billsGuidanceSearchResultCount').text('搜索结果:' + result.length);
             $('#billsGuidanceSearchResult').show();
+            autoFlashHeight();
+            refreshWorkBook();
         });
         //搜索框回车
         $('#stdBillsGuidanceSearch>input').bind('keypress', function (event) {
@@ -821,6 +841,7 @@ const billsGuidance = (function () {
         $('#closeSearchBillsGuidance').click(function () {
             $('#billsGuidanceSearchResult').hide();
             billsLibObj.clearHighLight(bills.workBook);
+            autoFlashHeight();
             refreshWorkBook();
         });
     }

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

@@ -723,7 +723,7 @@ function seachRation(){
             resultObj.hide();
             $(".main-data-side-search", resultObj).height(0);
             autoFlashHeight();
-            rationLibObj.refreshSpread();
+            loadSideToolsHeight();
         });
         resultObj.show();
         $(".main-data-side-search", resultObj).height($(window).height() - $(".header").height() - $(".toolsbar").height() - 64);

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

@@ -31,7 +31,12 @@
     <div class="ml-auto navbar-text p-0">
         <ul class="nav navbar-nav">
             <li class="nav-item dropdown">
-                <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>-->
+                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" id="link_userName"></a>
+                <script>
+                    let userName = "<%= sessionUser.real_name === '' ? sessionUser.mobile : sessionUser.real_name %>";
+                    document.getElementById('link_userName').innerHTML = userName;
+                </script>
                 <div class="dropdown-menu dropdown-menu-right">
                     <a class="dropdown-item" href="/user/info" target="_blank">账号资料</a>
                     <a class="dropdown-item" href="/user/buy" target="_blank">产品激活</a>