Browse Source

bug fixed

zhangweicheng 7 years ago
parent
commit
d65f4d6b74

+ 1 - 0
modules/fee_rates/facade/fee_rates_facade.js

@@ -388,6 +388,7 @@ async function changeFeeRateFileFromOthers(jdata) {
     let newFeeRateFile = {};
     newFeeRateFile.ID = uuidV1();
     newFeeRateFile.name = data.name;
+    newFeeRateFile.userID = data.userID;
     newFeeRateFile.libName = feeRateFile.libName;
     newFeeRateFile.libID=feeRateFile.libID;
     newFeeRateFile.rootProjectID = data.rootProjectID;

+ 18 - 0
modules/glj/controllers/glj_controller.js

@@ -330,6 +330,24 @@ class GLJController extends BaseController {
 
             // 查找对应单价文件的项目工料机数据
             let unitPriceModel = new UnitPriceModel();
+            if(type ===1){//从其它项目复制,则先复制一份数据。
+                let needCopyList = await unitPriceModel.findDataByCondition({unit_price_file_id: changeUnitPriceId}, null, false);
+                if(needCopyList){
+                    // 过滤mongoose格式
+                    needCopyList = JSON.stringify(needCopyList);
+                    needCopyList = JSON.parse(needCopyList);
+                    let copyList = [];
+                    for(let n of needCopyList){
+                        delete n._id;  // 删除原有id信息
+                        delete n.id;
+                        n.unit_price_file_id = targetUnitPriceFile.id;
+                        copyList.push(n);
+                    }
+                    copyList.length>0 ? await unitPriceModel.add(copyList):'';
+                }
+            }
+
+
             let copyResult = await unitPriceModel.copyNotExist(currentUnitPriceId, targetUnitPriceFile.id,projectId);
             // 复制成功后更改project数据
             if (!copyResult) {

+ 4 - 2
modules/pm/facade/pm_facade.js

@@ -78,7 +78,7 @@ async function copyProject(userID, compilationID,data) {
         createProject(projectMap),
         copyProjectSetting(originalID,newProjectID),
         copyBills(newProjectID,billMap),
-        copyRations(newProjectID,billMap.uuidMaping,rationMap),
+        copyRations(newProjectID,billMap.uuidMaping,rationMap,projectGLJMap.IDMap),
         copyProjectGLJ(projectGLJMap.datas),
         commonCopy(newProjectID,originalProperty.calcProgramFile.ID,calcProgramFileID,calcProgramsModel),
         commonCopy(newProjectID,originalProperty.labourCoeFile.ID,labourCoeFileID,labourCoesModel),
@@ -153,7 +153,7 @@ async function copyBills(newProjectID,billMap) {
     return billMap.datas;
 }
 
-async function copyRations(newProjectID,billsIDMap,rationMap) {
+async function copyRations(newProjectID,billsIDMap,rationMap,projectGLJIDMap) {
     let uuidMaping = rationMap.uuidMaping;
     for(let doc of rationMap.datas){
         doc.projectID = newProjectID;
@@ -161,6 +161,8 @@ async function copyRations(newProjectID,billsIDMap,rationMap) {
         if(doc.billsItemID){
             doc.billsItemID = billsIDMap[doc.billsItemID]?billsIDMap[doc.billsItemID]:-1;
         }
+        //绑定定类型的工料机 项目工料机ID
+        doc.type==3&&doc.projectGLJID&&projectGLJIDMap[doc.projectGLJID]?doc.projectGLJID = projectGLJIDMap[doc.projectGLJID]:'';
     }
     if(rationMap.datas.length > 0){
         await insertMany(rationMap.datas,rationModel);

+ 2 - 2
modules/pm/models/project_model.js

@@ -263,7 +263,7 @@ ProjectsDAO.prototype.udpateUserFiles = async function (userId, datas, callback)
                 }, {$set: {'property.unitPriceFile.name': data.updateData.name}});
             }
             else if (data.updateType === updateType.update && data.fileType === fileType.feeRateFile) {
-                await FeeRateFiles.update({userID: userId, ID: data.updateData.ID}, data.updateData);
+                await FeeRateFiles.update({ID: data.updateData.ID}, data.updateData);
                 await Projects.update({
                     userID: userId,
                     'property.feeFile.id': data.updateData.ID
@@ -279,7 +279,7 @@ ProjectsDAO.prototype.udpateUserFiles = async function (userId, datas, callback)
             }
             else if (data.updateType === updateType.delete && data.fileType === fileType.feeRateFile) {
                 data.updateData.deleteInfo = deleteInfo;
-                await FeeRateFiles.update({userID: userId, ID: data.updateData.ID}, data.updateData);
+                await FeeRateFiles.update({ID: data.updateData.ID}, data.updateData);
             }
             else throw '未知文件类型,删除失败'
         }

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

@@ -12,6 +12,7 @@ var sheetCommonObj = {
         spreadBook.options.showVerticalScrollbar = true;
         spreadBook.options.allowCopyPasteExcelStyle = false;
         spreadBook.options.allowUserDragDrop = true;
+        spreadBook.options. allowUserEditFormula = false;
         return spreadBook;
     },
 

+ 1 - 0
public/web/sheet/sheet_data_helper.js

@@ -53,6 +53,7 @@ var SheetDataHelper = {
         spread.options.allowCopyPasteExcelStyle = false;
         spread.options.allowUserDragDrop = false;
         spread.options.allowUndo = false;//that.mainSpread.commandManager().setShortcutKey(undefined, GC.Spread.Commands.Key.z, true, false, false, false); 屏蔽undo
+        spread.options. allowUserEditFormula = false;
         spread.getActiveSheet().setRowCount(3);
         return spread;
     },

+ 4 - 0
public/web/tree_sheet/tree_sheet_controller.js

@@ -144,6 +144,8 @@ var TREE_SHEET_CONTROLLER = {
                 if (this.tree.selected.upMove()) {
                     TREE_SHEET_HELPER.massOperationSheet(this.sheet, function () {
                         TREE_SHEET_HELPER.refreshTreeNodeData(that.setting, that.sheet, [that.tree.selected, that.tree.selected.nextSibling], true);
+                        TREE_SHEET_HELPER.refreshChildrenVisiable(that.sheet,that.tree,that.tree.selected,that.tree.selected.serialNo());
+                        TREE_SHEET_HELPER.refreshChildrenVisiable(that.sheet,that.tree,that.tree.selected.nextSibling,that.tree.selected.nextSibling.serialNo());
                         that.sheet.setSelection(that.tree.selected.serialNo(), sels[0].col, 1, 1);
                         if (that.event.refreshBaseActn) {
                             that.event.refreshBaseActn(that.tree);
@@ -158,6 +160,8 @@ var TREE_SHEET_CONTROLLER = {
                 if (this.tree.selected.downMove()) {
                     TREE_SHEET_HELPER.massOperationSheet(this.sheet, function () {
                         TREE_SHEET_HELPER.refreshTreeNodeData(that.setting, that.sheet, [that.tree.selected, that.tree.selected.preSibling], true);
+                        TREE_SHEET_HELPER.refreshChildrenVisiable(that.sheet,that.tree,that.tree.selected,that.tree.selected.serialNo());
+                        TREE_SHEET_HELPER.refreshChildrenVisiable(that.sheet,that.tree,that.tree.selected.preSibling,that.tree.selected.preSibling.serialNo());
                         that.sheet.setSelection(that.tree.selected.serialNo(), sels[0].col, 1, 1);
                         if (that.event.refreshBaseActn) {
                             that.event.refreshBaseActn(that.tree);

+ 8 - 0
public/web/tree_sheet/tree_sheet_helper.js

@@ -180,6 +180,14 @@ var TREE_SHEET_HELPER = {
             }
         });
     },
+    refreshChildrenVisiable:function(sheet,tree,node,row){
+        let iCount = node.posterityCount(), i, child;
+        for (i = 0; i < iCount; i++) {
+            child = tree.items[row + i + 1];
+            sheet.setRowVisible(row + i + 1, child.visible, GC.Spread.Sheets.SheetArea.viewport);
+        }
+       sheet.invalidateLayout();
+    },
     showTreeData: function (setting, sheet, tree) {
         let indent = 20;
         let levelIndent = -5;

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

@@ -56,9 +56,9 @@
               <!--造价书-->
               <div class="toolsbar px-1 d-flex justify-content-between">
                   <div class="tools-btn btn-group align-top">
-                    <a href="" class="btn btn-sm" title="复制"><i class="fa fa-files-o" aria-hidden="true"></i></a>
-                    <a href="" class="btn btn-sm" title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
-                    <a href="" class="btn btn-sm" title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-sm" title="复制" ><i class="fa fa-files-o" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-sm" title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-sm" title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>
                  <!--   <a href="javascript:void(0)" class="btn btn-sm" id="insert" title="插入"><i class="fa fa-sign-in" aria-hidden="true"></i></a>-->
                     <a href="javascript:void(0)" class="btn btn-sm" id="delete" title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" class="btn btn-sm" id="upLevel" title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>

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

@@ -546,6 +546,7 @@ var FeeRate = {
                 "projectID": projectID,
                 "feeRateFileID":feeRateFileID,
                 "name":name,
+                "userID":userID,
                 "rootProjectID":me.getActivateFeeRate().rootProjectID
             };
             CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {

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

@@ -10,9 +10,9 @@ var feeRateObject={
     mainFeeRateData:null,
     mainFeeRateSetting:{
         header: [
-            {headerName: "专业名称", headerWidth: 550, dataCode: "name", dataType: "String"},
-            {headerName: "值%", headerWidth: 250, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
-            {headerName: "备注", dataCode: "memo", dataType: "String"}
+            {headerName: "专业名称", headerWidth: 250, dataCode: "name", dataType: "String"},
+            {headerName: "值%", headerWidth: 80, dataCode: "rate", dataType: "Number",hAlign: "right",decimalField:"feeRate"},
+            {headerName: "备注", headerWidth: 150, dataCode: "memo", dataType: "String"}
         ],
         view: {
             lockColumns: [0]

+ 62 - 16
web/building_saas/main/js/views/glj_view.js

@@ -357,7 +357,7 @@ var gljOprObj = {
 
     onClipboardPasting: function (sender, args) {
         var me = gljOprObj;
-        if(args.cellRange.rowCount!=1||args.cellRange.colCount!=1){
+        if(args.sheetName!="quantity_detail"&&(args.cellRange.rowCount!=1||args.cellRange.colCount!=1)){//工程量明细做特殊处理
             args.cancel = true;
         }
     },
@@ -397,7 +397,8 @@ var gljOprObj = {
             me.onEditDetailSheet(args);
         }
     },
-    onEditDetailSheet: function (args) {
+    onEditDetailSheet: function (args,callback) {
+        console.log(args);
         var me = gljOprObj;
         if (args.row > me.detailData.length) {
             return;
@@ -407,14 +408,16 @@ var gljOprObj = {
         }
         var selected = projectObj.project.mainTree.selected;//因为使用了延时方法,所以要先取得选中行;
         var detailList = me.detailData;
-        args.editingText = args.editingText.replace(/(/g, "(");//替换中文左右括号;
-        args.editingText = args.editingText.replace(/)/g, ")");
+        if(args.editingText){
+            args.editingText = args.editingText.replace(/(/g, "(");//替换中文左右括号;
+            args.editingText = args.editingText.replace(/)/g, ")");
+        }
         setTimeout(function () {//这里须用延时执行的办法,不然的弹窗确认窗口会和spreadjs 的事件有冲突,造成定额工料机数据不会根据树结点更新的问题
             if (args.row == detailList.length) {
-                projectObj.project.quantity_detail.saveQuantityDetail(args, me.detailSetting.header[args.col].dataCode, selected);
+                projectObj.project.quantity_detail.saveQuantityDetail(args, me.detailSetting.header[args.col].dataCode, selected,callback);
             }
             if (args.row < detailList.length) {
-                projectObj.project.quantity_detail.updateQuantityDetail(args, me.detailSetting.header[args.col].dataCode, detailList[args.row], selected);
+                projectObj.project.quantity_detail.updateQuantityDetail(args, me.detailSetting.header[args.col].dataCode, detailList[args.row], selected,callback);
             }
         }, 100);
 
@@ -723,21 +726,64 @@ var gljOprObj = {
     },
     onRangeChanged: function (sender, args) {
         var me = gljOprObj;
-        if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
-            args.editingText = null;
-        }else if(args.action == GC.Spread.Sheets.RangeChangedAction.paste){
-            args.editingText = args.sheet.getCell(args.row,args.col).value();
+        console.log(args);
+        if(args.sheetName == 'quantity_detail'){
+            me.batchUpdateQuantityDetail(args);
         }else {
-            return;
+            if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
+                args.editingText = null;
+            }else if(args.action == GC.Spread.Sheets.RangeChangedAction.paste){
+                args.editingText = args.sheet.getCell(args.row,args.col).value();
+            }else {
+                return;
+            }
+            if (args.sheetName == 'ration_glj') {
+                me.onEditGLJSheet(args);
+            }
+            if (args.sheetName == 'ration_ass') {
+                me.updateRationAss(args);
+            }
         }
-        if (args.sheetName == 'ration_glj') {
-            me.onEditGLJSheet(args);
+    },
+
+    batchUpdateQuantityDetail:function (args) {
+        let me = gljOprObj;
+        let updateArray = [];
+        for(let i =0;i<args.changedCells.length;i++){
+            let c = args.changedCells[i];
+            let tem = {
+                row:c.row,
+                col:c.col,
+                editingText:args.sheet.getCell(c.row,c.col).text(),
+                sheet:args.sheet,
+                sheetName:args.sheetName,
+                index:i
+            };
+            updateArray.push(tem);
         }
-        if (args.sheetName == 'ration_ass') {
-            me.updateRationAss(args);
+        console.log(updateArray);
+
+
+    },
+
+    testBatchUpdate:function () {
+        let me=gljOprObj;
+        let temA = [1,2,3];
+        me.b(1,a);
+
+
+        function a(v) {
+            let index = temA.indexOf(v);
+            if(index < temA.length-1){
+               me.b(temA[index+1],a)
+            }
         }
 
     },
+    b:function (g,callback) {
+        console.log(g);
+        callback(g);
+    },
     generateHtmlString: function () {
 //        return "<div id='edit'><div>";
 
@@ -1863,4 +1909,4 @@ function compareRationGLJ(a, b) {
         }
     }
     return false;
-}
+}

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

@@ -625,7 +625,7 @@ $(function () {
 
     $("#unitFile-save-as").on('shown.bs.modal', function () {
         // 获取当前建设项数据
-        $("#save-as-name").val(projectGljObject.usedUnitPriceInfo.name + '(复件)');
+        $("#save-as-name").val(projectGljObject.usedUnitPriceInfo.name + '副本');
     });
 
     // 从其他建设项目中复制 选择建设项目

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

@@ -11,8 +11,8 @@ var subRateObject={
     subRateSheet:null,
     subRateSetting:{
         header: [
-            {headerName: "参数名称", headerWidth: 250, dataCode: "name", dataType: "String"},
-            {headerName: "参数值", headerWidth: 200, dataCode: "optionValue", dataType: "String",getText:'forOption'}
+            {headerName: "参数名称", headerWidth: 110, dataCode: "name", dataType: "String"},
+            {headerName: "参数值", headerWidth: 150, dataCode: "optionValue", dataType: "String",getText:'forOption'}
         ],
         view: {
             lockColumns: [0]