Przeglądaj źródła

项目管理页面图标自动刷新、修改单价文件、费率文件、切换(另存)单价文件、费率文件自动刷新

zhangweicheng 6 lat temu
rodzic
commit
76ef32327e

+ 19 - 1
public/web/socket/connection.js

@@ -3,6 +3,7 @@
  */
 socketObject={
   roomInfo : null,
+  messages:[],
   connect:function (from) {
       // 连接socket服务器
       var hostName = window.location.hostname;
@@ -20,11 +21,17 @@ socketObject={
                   unitFile:me.getUnitFileRoomID()
               };
           }
-
           socket.emit('join', me.roomInfo);
+          if(me.messages.length > 0){//发送缓存消息;
+              for(let m of me.messages){
+                  socket.emit(m.message, m.data);
+              }
+          }
           console.log('连接成功');
       });
 
+      //=========================================================
+      //造价书页面接收消息部分
       socket.on('feeRateChange', function(data) {
           //data = JSON.parse(data);
 
@@ -55,6 +62,17 @@ socketObject={
               $("#notify").show();
           }
       });
+
+
+      //=============================================================================================
+      //项目管理页面接收消息部分
+
+      socket.on('refreshProjectIcon', function (data) {//收到刷新图标消息
+           if(data.projectID && typeof projTreeObj !== 'undefined') projTreeObj.refreshProjectIcon(data.projectID);
+      });
+      socket.on('fileDataChange', function (data) {//收到单价文件、费率文件内容修改、文件切换、另存(暂时能共用,以后有需要可分离)推送消息
+          if(data.projectID && typeof projTreeObj !== 'undefined') projTreeObj.refreshWhenFileDateChange(data.projectID);
+      });
   },
   getFeeRateRoomID:function (){
       return  projectObj.project.FeeRate.getActivateFeeRateFileID();

+ 10 - 0
socket.js

@@ -23,18 +23,28 @@ socketIO.on('connection', function(socket) {
     // 数据更改通知
     socket.on('unitFileChangeNotify', function(data) {
         socket.broadcast.to(roomInfo['unitFile']).emit('unitFileChange', data);
+        if(data.userID) socket.broadcast.to(data.userID).emit('fileDataChange', data);
     });
     socket.on('feeRateChangeNotify', function(data) {
         socket.broadcast.to(roomInfo['feeRate']).emit('feeRateChange', data);
+        if(data.userID) socket.broadcast.to(data.userID).emit('fileDataChange', data);
     });
     socket.on('changeNewRoom', function(data) {
         if(data.projectID){//如果有项目ID,则通知同一个项目在其它地方被打开的页面
             socket.broadcast.to(data.oldRoom).emit('changeFileNotify', data);
+            if(data.userID) socket.broadcast.to(data.userID).emit('fileDataChange', data);
+
         }
         socket.leave(data.oldRoom);
         socket.join(data.newRoom);
         roomInfo[data.name]=data.newRoom;
     });
+    socket.on('removeProjectMark', function(data) {
+        if(data.projectID && data.userID){
+            socket.broadcast.to(data.userID).emit('refreshProjectIcon', data);
+        }
+    });
+
     socket.on('disconnect', function () {
         console.log("client disconnect =========="+JSON.stringify(roomInfo));
     });

+ 25 - 18
web/building_saas/main/js/models/fee_rate.js

@@ -189,6 +189,7 @@ var FeeRate = {
 
         FeeRate.prototype.onFeeRatesChange = function (infos) {//{rateID:'AAAA',value:23}
             let node = project.mainTree.selected;
+            let me = this;
             for(let i of infos){
                 this.refreshCalProgramByRateID(i.rateID,i.value);
                 this.refreshBillsByRateID(i.rateID,i.value);
@@ -199,37 +200,43 @@ var FeeRate = {
                 }
             }
             project.calcProgram.calcAllNodesAndSave(calcAllType.catAll);
-            project.markUpdateProject({projectID:project.ID(),feeRateID:this.getActivateFeeRateFileID()},"feeRate");
-            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
+            project.markUpdateProject({projectID:project.ID(),feeRateID:this.getActivateFeeRateFileID()},"feeRate",function () {
+                socket.emit('feeRateChangeNotify', {projectID:project.ID(),feeRateID:me.getActivateFeeRateFileID(),userID:userID});
+            });
         };
 
 
         FeeRate.prototype.onFeeRateFileChange=function () {//整个费率文件换了,原费率文件内容不变
             this.refreshCalProgramWhenFeeFileChange();
             this.refreshBillsWhenFeeFileChange();
+            let me = this;
             var node = project.mainTree.selected;
             if(node){
                 if (node.sourceType==='ration' && calcProgramObj.sheet) {
                     calcProgramObj.refreshCalcProgram(node, 3);
                 }
             }
-            project.calcProgram.calcAllNodesAndSave(calcAllType.catAll);
-            if(socketObject.roomInfo){
-                //判断费率文件ID是否改变了
-                if(socketObject.roomInfo.feeRate == this.getActivateFeeRateFileID()){//如果没变,则是重选了标准
-                    project.markUpdateProject({projectID:project.ID(),feeRateID:this.getActivateFeeRateFileID()},"feeRate");
-                    socket.emit('feeRateChangeNotify', socketObject.roomInfo.feeRate);
-                }else {
-                    let data ={
-                        projectID:project.ID(),
-                        oldRoom:socketObject.roomInfo.feeRate,
-                        newRoom:this.getActivateFeeRateFileID(),
-                        name:'feeRate'
-                    };
-                    socket.emit('changeNewRoom',data);
-                    socketObject.roomInfo.feeRate = this.getActivateFeeRateFileID();
+            project.calcProgram.calcAllNodesAndSave(calcAllType.catAll,function () {
+                if(socketObject.roomInfo){
+                    //判断费率文件ID是否改变了
+                    if(socketObject.roomInfo.feeRate == me.getActivateFeeRateFileID()){//如果没变,则是重选了标准
+                        project.markUpdateProject({projectID:project.ID(),feeRateID:me.getActivateFeeRateFileID()},"feeRate",function () {
+                            socket.emit('feeRateChangeNotify', {projectID:project.ID(),feeRateID:socketObject.roomInfo.feeRate,userID:userID});
+                        });
+                    }else {
+                        let data ={
+                            projectID:project.ID(),
+                            oldRoom:socketObject.roomInfo.feeRate,
+                            newRoom:me.getActivateFeeRateFileID(),
+                            userID:userID,
+                            name:'feeRate'
+                        };
+                        socket.emit('changeNewRoom',data);
+                        socketObject.roomInfo.feeRate = me.getActivateFeeRateFileID();
+                    }
                 }
-            }
+            });
+
 
         };
 

+ 9 - 3
web/building_saas/main/js/models/project.js

@@ -314,8 +314,8 @@ var PROJECT = {
                 tools.modules[moduleName] = obj;
             }
         };
-        project.prototype.markUpdateProject = function (data,type) {
-            CommonAjax.post("/project/markUpdateProject",{updateInfo:data,type:type});
+        project.prototype.markUpdateProject = function (data,type,callback) {
+            CommonAjax.post("/project/markUpdateProject",{updateInfo:data,type:type},callback);
         };
 
         project.prototype.saveProperty = function (propertyName, propertyValue) {
@@ -323,12 +323,18 @@ var PROJECT = {
         };
 
         project.prototype.projectMarkChecking = function () {
+            let me = this;
             let  changeMark = projectInfoObj.projectInfo.changeMark;
             if(changeMark&&changeMark!=''){
                 this.Bills.getEngineeringCostNode(projectObj.mainController).changed = true;
                 this.calcProgram.calcAllNodesAndSave();
-                CommonAjax.post("/project/removeProjectMark",{projectID:this.ID()},function (data) {
+                CommonAjax.post("/project/removeProjectMark",{projectID:me.ID()},function (data) {
                     delete projectInfoObj.projectInfo.changeMark;
+                    if(socket.connected == true){//如果这时候socket已经连接成功,则发送删除标记广播
+                        socket.emit('removeProjectMark',{projectID:me.ID(),userID:userID});
+                    }else {//如果还没连接成功,则放入消息对象缓存,等socket连接成功后发送
+                        socketObject.messages.push({message:'removeProjectMark',data:{projectID:me.ID(),userID:userID}});
+                    }
                 });
             }
         };

+ 1 - 0
web/building_saas/main/js/views/fee_rate_view.js

@@ -784,6 +784,7 @@ var feeRateObject={
                 projectID:projectObj.project.ID(),
                 oldRoom:socketObject.roomInfo.feeRate,
                 newRoom: FeeRate.getActivateFeeRateFileID(),
+                userID:userID,
                 name:'feeRate'
             };
             socket.emit('changeNewRoom',data);

+ 18 - 13
web/building_saas/main/js/views/project_glj_view.js

@@ -806,8 +806,10 @@ projectGljObject={
         gljOprObj.refreshView();
     },
     onUnitFileChange:function (data) {
-        socket.emit('unitFileChangeNotify', JSON.stringify(data));
-        projectObj.project.markUpdateProject({projectID:projectObj.project.ID(),'unitFileID':socketObject.getUnitFileRoomID()},"unitFile");
+        projectObj.project.markUpdateProject({projectID:projectObj.project.ID(),'unitFileID':socketObject.getUnitFileRoomID()},"unitFile",function(){
+            //socket.emit('unitFileChangeNotify', JSON.stringify(data));
+            socket.emit('unitFileChangeNotify', {projectID:projectObj.project.ID(),userID:userID,'unitFileID':socketObject.getUnitFileRoomID()});
+        });
     },
     deleteMixRatio:function (row) {
         let me = this, deleteRecode = me.mixRatioData[row];
@@ -1001,17 +1003,20 @@ projectGljObject={
         projectGljObject.unitPriceFileInit();
         projectGljObject.refreshDataSheet();
         gljOprObj.refreshView();
-        projectObj.project.calcProgram.calcAllNodesAndSave();
-        if(socketObject.roomInfo){
-            let data ={
-                projectID:projectObj.project.ID(),
-                oldRoom:socketObject.roomInfo.unitFile,
-                newRoom:socketObject.getUnitFileRoomID(),
-                name:'unitFile'
-            };
-            socket.emit('changeNewRoom',data);
-            socketObject.roomInfo.unitFile = socketObject.getUnitFileRoomID();
-        }
+        projectObj.project.calcProgram.calcAllNodesAndSave(calcAllType.catAll,function () {
+            if(socketObject.roomInfo){
+                let data ={
+                    projectID:projectObj.project.ID(),
+                    oldRoom:socketObject.roomInfo.unitFile,
+                    newRoom:socketObject.getUnitFileRoomID(),
+                    userID:userID,
+                    name:'unitFile'
+                };
+                socket.emit('changeNewRoom',data);
+                socketObject.roomInfo.unitFile = socketObject.getUnitFileRoomID();
+            }
+        });
+
     },
     calcPartASupplyFeeByProjectGLJs: function (projectGLJsArr) {
         for (let pGLJ of projectGLJsArr){

+ 28 - 2
web/building_saas/pm/js/pm_newMain.js

@@ -344,7 +344,8 @@ const projTreeObj = {
                     },
                     callback: function (key, opt) {
                         //获取当前节点的建设项目ID
-                        let project = projTreeObj.tree.selected;
+                        projTreeObj.refreshProjectData();
+                      /*  let project = projTreeObj.tree.selected;
                         while (project.data.projType !== projectType.project && project.parent){
                             project = project.parent;
                         }
@@ -356,7 +357,7 @@ const projTreeObj = {
                             }, function () {
                                 $.bootstrapLoading.start();
                             });
-                        }
+                        }*/
                     }
                 }
             }
@@ -1093,6 +1094,31 @@ const projTreeObj = {
             return newNode;
         }
 
+    },
+    refreshProjectData:function (projectID) {
+        //projTreeObj.tree.findNode(4578)
+        //获取当前节点的建设项目ID
+        let project = projectID?projTreeObj.tree.findNode(projectID):projTreeObj.tree.selected;
+        while (project.data.projType !== projectType.project && project.parent){
+            project = project.parent;
+        }
+        if(project && project.data.ID){
+            $.bootstrapLoading.start();
+            CommonAjax.post('/pm/api/getSummaryInfo', {user_id: userID, projectIDs: [project.data.ID]}, function (summaryInfo) {//11-06 zhang 这个接口返回值增加了项目需重新计算标记,项目图标刷新
+                refreshProjSummary(project, summaryInfo);
+                $.bootstrapLoading.end();
+            }, function () {
+                $.bootstrapLoading.start();
+            });
+        }
+    },
+    refreshProjectIcon:function (projectID) {
+        let node = projTreeObj.tree.findNode(projectID);
+        if(node && node.data.changeMark && node.data.changeMark!="") this.refreshProjectData(projectID);
+    },
+    refreshWhenFileDateChange:function(projectID){//当单价文件、费率文件被修改后,刷新页面,共用的项目提示刷新图标
+        //在一次的修改中,同一个建设下,单价文件、费率文件才有共用的情况,而refreshProjectData是传入单位工程ID,刷新整个建设项目,所以,只要传入修改的单位工程ID,刷新建设项目即可
+        this.refreshProjectData(projectID);
     }
 };