浏览代码

项目管理bug

1.例题初始化报错
2.按钮防止多次点击
vian 6 年之前
父节点
当前提交
28f1da88cb

+ 5 - 1
modules/complementary_ration_lib/models/sectionTreeModel.js

@@ -13,6 +13,10 @@ const sectionTemplateModel = mongoose.model('complementary_ration_section_templa
 class SectionTreeDao {
     //从补充定额章节树模板中拷贝数据到用户的补充定额章节树中
     async copyDataFromTemplate(userId, compilationId){
+        const count = await compleRationSectionTreeModel.count({userId, compilationId});
+        if (count > 0) {
+            return;
+        }
         let templateData = await sectionTemplateModel.find({compilationId: compilationId});
         if (templateData.length > 0) {
             let insertDatas = [],
@@ -143,4 +147,4 @@ class SectionTreeDao {
     }
 }
 
-export default SectionTreeDao;
+export default SectionTreeDao;

+ 3 - 2
modules/pm/controllers/pm_controller.js

@@ -324,7 +324,8 @@ module.exports = {
             await pm_facade.prepareInitialData(request.session.sessionUser.id, sessionCompilation._id, sessionCompilation.example);
             callback(request, response, 0, 'success', null);
         } catch(err) {
-            callback(request, response, 1, err, null);
+            console.log(err);
+            callback(request, response, 1, err.message, null);
         }
     },
     // 获取单价文件列表
@@ -754,4 +755,4 @@ async function redirectToImportServer(data,action,req) {
     };
     console.log("post import data to:"+options.uri);
     return await rp.post(options);
-}
+}

+ 5 - 1
modules/pm/facade/pm_facade.js

@@ -133,7 +133,7 @@ async function copyExample(userID, compilation, projIDs){
             parentBulks.push({insertOne: {document: newData}});
         } else {
             //拷贝单位工程
-            let rootProjectID = projMapping[data.ParentID];
+            let rootProjectID = projMapping[data.ParentID].ID;
             let projectMap = {
                 copy: {
                     document: {userID: userID, ID: orgID, NextSiblingID: data.NextSiblingID, ParentID: data.ParentID, name: data.name, shareInfo: [],
@@ -990,6 +990,10 @@ async function copyForSectionError(compilation) {
 
 //拷贝补充人材机分类树
 async function copyCompleGljSection(userId, compilationId) {
+    const count = await compleGljSectionModel.count({userId, compilationId});
+    if (count > 0) {
+        return;
+    }
     let templateData = await compleGljSectionTModel.find({compilationId: compilationId});
     if (templateData.length > 0) {
         let insertDatas = [],

+ 1 - 1
public/web/PerfectLoad.js

@@ -27,7 +27,7 @@ jQuery.bootstrapLoading = {
             //提示颜色
             delayTime: 500,
             //页面加载完成后,加载页面渐出速度
-            zindex: 999,
+            zindex: 2000,
             //loading页面层次
             sleep: 0
             //设置挂起,等于0时则无需挂起

+ 8 - 2
web/building_saas/pm/js/pm_ajax.js

@@ -24,7 +24,7 @@ var GetAllProjectData = function (callback) {
     });
 }
 // 更新数据到服务器
-var UpdateProjectData = function (updateData, callback) {
+var UpdateProjectData = function (updateData, callback, errCB) {
     $.ajax({
         type:"POST",
         url: '/pm/api/updateProjects',
@@ -36,10 +36,16 @@ var UpdateProjectData = function (updateData, callback) {
             if (result.error === 0) {
                 callback(result.data);
             } else {
+                if (errCB) {
+                    errCB();
+                }
                 alert('error: ' + result.message);
             }
         },
         error: function(jqXHR, textStatus, errorThrown){
+            if (errCB) {
+                errCB();
+            }
             alert('error ' + textStatus + " " + errorThrown);
         }
     });
@@ -90,4 +96,4 @@ var BeforeOpenProject = function (projId, updateData, callback) {
 
 function moveProjects(data,callback) {
     CommonAjax.post( '/pm/api/moveProject',data,callback)
-}
+}

+ 15 - 3
web/building_saas/pm/js/pm_gc.js

@@ -584,7 +584,6 @@ function gc_init(){
         gcTreeObj.initSelection(initSel);
         autoFlashHeight();
         gcTreeObj.workBook.refresh();
-        $.bootstrapLoading.end();
     });
 }
 
@@ -891,6 +890,7 @@ function m_project(node){
 //点击单价文件、费率文件下的恢复操作(确认)
 function e_recFiles(btn){
     btn.bind('click', function () {
+        $.bootstrapLoading.start();
         decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
         let recObjs = m_getFilesObjs($('[name = "fileItems"]:checked'));
         let recIds = [];
@@ -932,6 +932,7 @@ function e_recFiles(btn){
 //点击单价、费率文件的清除操作(确认)
 function e_delFiles(btn){
     btn.bind('click', function () {
+        $.bootstrapLoading.start();
         let selected = gcTreeObj.tree.selected;//project
         let delObjs = m_getFilesObjs($('[name = "fileItems"]:checked'));
         let type = $('[name = "fileItems"]:checked').attr('fileType');
@@ -965,6 +966,7 @@ function e_delFiles(btn){
 //点击项目下的恢复操作(确认)
 function e_recProj(btn){
     btn.bind('click', function () {
+        $.bootstrapLoading.start();
         let selected = gcTreeObj.tree.selected;
         //backend
         let updateObj = m_getRecDatas(selected);
@@ -990,6 +992,7 @@ function e_recProj(btn){
 
 function e_delProj(btn){
     btn.bind('click', function () {
+        $.bootstrapLoading.start();
         let selected  = gcTreeObj.tree.selected;
         //backend
         let delDatas = m_getDelDatas(selected);
@@ -1009,6 +1012,9 @@ function a_getGC(callback){
         if(callback){
             callback(rstData);
         }
+        $.bootstrapLoading.end();
+    }, function () {
+        $.bootstrapLoading.end();
     });
 }
 
@@ -1017,6 +1023,9 @@ function a_rec(nodes, callback){
         if(callback){
             callback();
         }
+        $.bootstrapLoading.end();
+    }, function () {
+        $.bootstrapLoading.end();
     });
 }
 
@@ -1025,7 +1034,10 @@ function a_delGC(delDatas, callback){
         if(callback){
             callback();
         }
-    })
+        $.bootstrapLoading.end();
+    }, function () {
+        $.bootstrapLoading.end();
+    });
 }
 
 //去除重名,回收站不处理重名,只保证恢复到项目管理中不出现重名
@@ -1205,4 +1217,4 @@ function getUpdateFiles(tenders, project){
     rst = rst.concat(deWeightName(rstUF));
     rst = rst.concat(deWeightName(rstFF));
     return rst;
-}
+}

+ 111 - 29
web/building_saas/pm/js/pm_newMain.js

@@ -50,7 +50,14 @@ function delayKeyup(callback) {
         }
     }, delayTime);
 }
-
+//操作状态
+const STATE = {
+    addingTender: false,
+    addingProject: false,
+    addingFolder: false,
+    deleting: false,
+    importing: false
+};
 const projTreeObj = {
     tree: null,
     workBook: null,
@@ -1654,7 +1661,14 @@ $(document).ready(function() {
 
     // 新增建设项目操作
     $('#addProjOk').click(function () {
-        AddProject();
+        if (STATE.addingProject) {
+            return;
+        }
+        STATE.addingProject = true;
+        let suc = AddProject();
+        if (suc === false) {
+            STATE.addingProject = false;
+        }
     });
 
     // 选择计价方式
@@ -1806,15 +1820,26 @@ $(document).ready(function() {
 
     // 新增单位工程
     $("#add-tender-confirm").click(function() {
+        if (STATE.addingTender) {
+            return;
+        }
+        STATE.addingTender = true;
         let suc = AddTender();
         if(suc === false){
-            $('#add-tender-confirm').removeClass('disabled');
+            STATE.addingTender = false;
         }
     });
 
     // 新增文件夹操作
     $("#add-folder-confirm").click(function() {
-        AddFolder();
+        if (STATE.addingFolder) {
+            return;
+        }
+        STATE.addingFolder = true;
+        let suc = AddFolder();
+        if (suc === false) {
+            STATE.addingFolder = false;
+        }
     });
 
     // 删除时文字替换
@@ -1853,9 +1878,14 @@ $(document).ready(function() {
 
     // 删除操作
     $('#delete-confirm').click(function () {
+        if (STATE.deleting) {
+            return;
+        }
+        STATE.deleting = true;
         let updateData = null;
         let dialog = $('#del');
         if (projTreeObj.tree) {
+            $.bootstrapLoading.start();
             updateData = GetDeleteUpdateData(projTreeObj.tree.selected);
             UpdateProjectData(updateData, function () {
                 dialog.modal('hide');
@@ -1872,6 +1902,16 @@ $(document).ready(function() {
                 if(selected.data.projType == projectType.tender||selected.data.projType == projectType.engineering){
                     projTreeObj.refreshNodeData(refreshNodes);//刷新工程造价信息
                 }
+                $.bootstrapLoading.end();
+                //快速点击时,第一个项目删除成功了,可能会删除多项目
+                setTimeout(function () {
+                    STATE.deleting = false;
+                }, 500);
+            }, function () {
+                $.bootstrapLoading.end();
+                setTimeout(function () {
+                    STATE.deleting = false;
+                }, 500);
             });
         }
     });
@@ -2221,13 +2261,26 @@ function AddProject() {
         setDangerInfo($('#project-name-info'), '请填写建设项目名称');
         return false;
     }
+    $.bootstrapLoading.start();
     let existCallback = function () {
         setDangerInfo($('#project-name-info'), `已存在“${$("#project-name").val()}”`);
+        STATE.addingProject = false;
+        $.bootstrapLoading.end();
     };
     let sucCallback = function () {
         $('#add-project-dialog').modal('hide');
         $('#project-name').val('');
         setDangerInfo($('#project-name-info'), '', false);
+        $.bootstrapLoading.end();
+        setTimeout(function () {
+            STATE.addingProject = false;
+        }, 500);
+    };
+    let errCB = function () {
+        $.bootstrapLoading.end();
+        setTimeout(function () {
+            STATE.addingProject = false;
+        }, 500);
     };
     let selectedItem = projTreeObj.tree.selected;
 
@@ -2238,18 +2291,18 @@ function AddProject() {
      (4)、当前定位在单项工程或单位工程,新建项目为当前所属建设项目的后兄弟。
      * */
     if(!selectedItem){
-        AddSiblingsItem(selectedItem, name, null, projectType.project, existCallback, sucCallback);
+        AddSiblingsItem(selectedItem, name, null, projectType.project, existCallback, sucCallback, errCB);
     }
     else {
         if(selectedItem.data.projType === projectType.project){
-            AddSiblingsItem(selectedItem, name, null, projectType.project, existCallback, sucCallback);
+            AddSiblingsItem(selectedItem, name, null, projectType.project, existCallback, sucCallback, errCB);
         }
         else if(selectedItem.data.projType === projectType.tender){
             let proj = selectedItem.parent;
-            AddSiblingsItem(proj, name, null, projectType.project, existCallback, sucCallback);
+            AddSiblingsItem(proj, name, null, projectType.project, existCallback, sucCallback, errCB);
         }
         else if(selectedItem.data.projType === projectType.folder){
-            AddChildrenItem(selectedItem, name, null, projectType.project, existCallback, sucCallback);
+            AddChildrenItem(selectedItem, name, null, projectType.project, existCallback, sucCallback, errCB);
         }
     }
 }
@@ -2329,7 +2382,7 @@ function setInitSummaryData(data) {
     data.totalCost = 0;
 }
 
-function AddTenderItems(selected, projName, tenderName, property, callback){
+function AddTenderItems(selected, projName, tenderName, property, callback, errCB){
     const addPath = {p_t: 'p_t', t: 't'};
     let path, updateDatas = [];
     let tempProjs = getProjs(selected);
@@ -2383,8 +2436,8 @@ function AddTenderItems(selected, projName, tenderName, property, callback){
                 let pojNode = projTreeObj.insert(projData, parent, next);
                 let tenderNode = projTreeObj.insert(tenderData, pojNode, null);
                 callback();
-            });
-        });
+            }, errCB);
+        }, errCB);
     }
     else if(path === addPath.t){
         GetNewProjectId(1, function (IDs) {
@@ -2408,8 +2461,8 @@ function AddTenderItems(selected, projName, tenderName, property, callback){
                     }
                 });
                 callback();
-            })
-        });
+            }, errCB)
+        }, errCB);
     }
 }
 
@@ -2421,7 +2474,7 @@ function AddTenderItems(selected, projName, tenderName, property, callback){
  * @param {function} callback
  * @return {void}
  */
-function AddChildrenItem(selected, name, property, type, existCallback, sucCallback) {
+function AddChildrenItem(selected, name, property, type, existCallback, sucCallback, errCB) {
     if(!selected){
         selected = projTreeObj.tree.selected;
     }
@@ -2448,8 +2501,8 @@ function AddChildrenItem(selected, name, property, type, existCallback, sucCallb
                     }
                 });
                 sucCallback();
-            });
-        });
+            }, errCB);
+        }, errCB);
     }
 }
 
@@ -2461,7 +2514,7 @@ function AddChildrenItem(selected, name, property, type, existCallback, sucCallb
  * @param {function} callback
  * @return {void}
  */
-function AddSiblingsItem(selected, name, property, type, existCallback, sucCallback) {
+function AddSiblingsItem(selected, name, property, type, existCallback, sucCallback, errCB) {
     if(!selected){
         selected = projTreeObj.tree.selected;
     }
@@ -2488,8 +2541,8 @@ function AddSiblingsItem(selected, name, property, type, existCallback, sucCallb
                     }
                 });
                 sucCallback();
-            });
-        });
+            }, errCB);
+        }, errCB);
     }
 }
 
@@ -2701,7 +2754,6 @@ function setDangerInfo(area, info, show = true){
  */
 function AddTender() {
     try {
-        $('#add-tender-confirm').addClass('disabled');
         let projName = $("#poj-name").val().trim();
         if(projName === ''){
             replaceClass($('#poj-name-info'), 'text-info', 'text-danger');
@@ -2773,7 +2825,7 @@ function AddTender() {
         let libs = getEngineeringLib(engineeringName + feeName, engineeringList);
         if(!libs){
             alert('数据错误,无法确定工程专业库!');
-            return;
+            return false;
         }
         // 一个项目里面,这两个文件必须得有,而界面又没有像费率、单价文件那样给出可选项。所以这里给出提示。
         if (!libs.artificial_lib)  throw '编办没有绑定人工系数标准文件';
@@ -2790,8 +2842,8 @@ function AddTender() {
 
         let calcProgramName = $('#tender-calcProgram').children("option:selected").text();
         //let newTab = window.open('about:blank');
+        $.bootstrapLoading.start();
         let callback = function(tenderNode) {
-            $('#add-tender-confirm').removeClass('disabled');
             $("#add-tender-dialog").modal("hide");
             $('#tender-name').val('');
             $("#tender-fee-rate").children("option").removeAttr("selected");
@@ -2799,6 +2851,16 @@ function AddTender() {
             $("#tender-calcProgram").children("option").removeAttr("selected");
             $("#poj-name").val('');
             $("#poj-name-info").hide();
+            $.bootstrapLoading.end();
+            setTimeout(function () {
+                STATE.addingTender = false;
+            }, 500);
+        };
+        let errCB = function () {
+            $.bootstrapLoading.end();
+            setTimeout(function () {
+                STATE.addingTender = false;
+            }, 500);
         };
         let selectedItem = projTreeObj.tree.selected;
         //地区
@@ -2823,7 +2885,7 @@ function AddTender() {
             progressiveLibID:progressiveLibID,
             region: region
         };
-        AddTenderItems(selectedItem, projName, tenderName, tenderInfo, callback);
+        AddTenderItems(selectedItem, projName, tenderName, tenderInfo, callback, errCB);
 
     } catch (error) {
         alert(error);
@@ -2875,13 +2937,26 @@ function AddFolder() {
     }
 
     let selectedItem = projTreeObj.tree.selected;
+    $.bootstrapLoading.start();
     let existCallback = function () {
         setDangerInfo($('#folder-name-info'), `已存在“${$("#folder-name").val()}”`);
+        STATE.addingFolder = false;
+        $.bootstrapLoading.end();
     };
     let sucCallback = function () {
         $('#add-folder-dialog').modal('hide');
         $('#folder-name').val('');
         setDangerInfo($('#folder-name-info'), '', false);
+        $.bootstrapLoading.end();
+        setTimeout(function () {
+            STATE.addingFolder = false;
+        }, 500);
+    };
+    let errCB = function () {
+        $.bootstrapLoading.end();
+        setTimeout(function () {
+            STATE.addingFolder = false;
+        }, 500);
     };
     if (selectedItem) {
         // 判断是否超过3层
@@ -2890,14 +2965,14 @@ function AddFolder() {
             return false;
         }
         if(selectedItem.data.projType === projectType.folder || selectedItem.data.projType === projectType.project){
-            AddSiblingsItem(null, name, null, projectType.folder, existCallback, sucCallback);
+            AddSiblingsItem(null, name, null, projectType.folder, existCallback, sucCallback, errCB);
         }
         else if(selectedItem.data.projType === projectType.tender){
             let proj = selectedItem.parent;
-            AddSiblingsItem(proj, name, null, projectType.folder, existCallback, sucCallback);
+            AddSiblingsItem(proj, name, null, projectType.folder, existCallback, sucCallback, errCB);
         }
     } else {
-        AddSiblingsItem(null, name, null, projectType.folder, existCallback, sucCallback);
+        AddSiblingsItem(null, name, null, projectType.folder, existCallback, sucCallback, errCB);
     }
 }
 
@@ -3068,10 +3143,10 @@ function GetNeedUpdatePreNode(parent, next) {
  * @param {function} callback
  * @return {void}
  */
-function GetNewProjectId(count, callback) {
+function GetNewProjectId(count, callback, errCB) {
     CommonAjax.post('/pm/api/getNewProjectID', {count: count}, function(data) {
         callback(data);
-    });
+    }, errCB);
 }
 
 /**
@@ -3706,6 +3781,10 @@ $('#shareToConfirm').click(function () {
 
 $("#confirm-import").click(function() {
     //$.bootstrapLoading.start();
+    if (STATE.importing) {
+        return;
+    }
+    STATE.importing = true;
     const self = $(this);
     try {
         let formData = new FormData();
@@ -3731,6 +3810,7 @@ $("#confirm-import").click(function() {
                 self.text('上传中...');
             },
             success: function(response){
+                STATE.importing = false;
                 self.text('确定导入');
                 $.bootstrapLoading.progressEnd();
                 if(response.error == 1){
@@ -3744,6 +3824,7 @@ $("#confirm-import").click(function() {
 
             },
             error: function(){
+                STATE.importing = false;
                 setTimeout(function () {
                     self.text('确定导入');
                     $.bootstrapLoading.progressEnd();
@@ -3752,6 +3833,7 @@ $("#confirm-import").click(function() {
             }
         });
     } catch(error) {
+        STATE.importing = false;
         alert(error);
         $.bootstrapLoading.end();
     }
@@ -3922,4 +4004,4 @@ function refreshProjSummary(project, summaryInfo) {
         }
     }
     projTreeObj.refreshNodeData(refreshNodes);
-}
+}