Эх сурвалжийг харах

表单性能优化的一些改动

huqi 5 жил өмнө
parent
commit
111b761e61

+ 2 - 0
gulpfile.js

@@ -460,6 +460,8 @@ function build_concat_xform(){
         'o2web/source/' + path + '/DatagridPC.js',
         'o2web/source/' + path + '/Textfield.js',
         'o2web/source/' + path + '/Personfield.js',
+        'o2web/source/' + path + '/Button.js',
+        'o2web/source/' + path + '/ViewSelector.js',
         'o2web/source/' + path + '/*.js',
         'o2web/source/x_component_process_Work/Processor.js',
         '!o2web/source/' + path + '/Office.js'

+ 2 - 0
o2web/gulpfile.js

@@ -154,6 +154,8 @@ function createXFormConcatTask(path, isMin, thisOptions) {
             'source/' + path + '/DatagridPC.js',
             'source/' + path + '/Textfield.js',
             'source/' + path + '/Personfield.js',
+            'source/' + path + '/Button.js',
+            'source/' + path + '/ViewSelector.js',
             'source/' + path + '/*.js',
             'source/x_component_process_Work/Processor.js',
             '!source/' + path + '/Office.js'

+ 14 - 5
o2web/source/o2_core/o2.js

@@ -1481,15 +1481,24 @@
         return arr;
     }
     Date.implement({
-        "getFromServer": function(){
+        // "getFromServer": function(){
+        //     var d;
+        //     o2.Actions.get("x_program_center").echo(function(json){
+        //         d = Date.parse(json.data.serverTime);
+        //     }, null, false);
+        //     return d;
+        // }
+        "getFromServer": function(callback){
+            var async = !!callback;
             var d;
-            o2.Actions.get("x_program_center").echo(function(json){
+            var r = o2.Actions.get("x_program_center").echo(function(json){
                 d = Date.parse(json.data.serverTime);
-            }, null, false);
-            return d;
+                if (callback) callback(d);
+            }, null, async);
+            return d || r;
         }
-    });
 
+    });
 })();
 o2.core = true;
 

+ 39 - 14
o2web/source/x_component_process_Work/Main.js

@@ -146,17 +146,27 @@ MWF.xApplication.process.Work.Main = new Class({
         //var getWorkLogMothed = (this.options.worklogType.toLowerCase()==="worklog") ? "getWorkLog" : "getRecordLog";
         var loadFormFlag = false;
         var loadWorkFlag = false;
+        var loadModuleFlag = false;
 
         var json_work, json_log, json_control, json_form;
 
         var check = function(){
-            if (loadWorkFlag && loadFormFlag){
+            if (loadWorkFlag && loadFormFlag && loadModuleFlag){
                 if (json_work && json_control && json_form && json_log){
                     this.parseData(json_work.data, json_control.data, json_form.data, json_log.data, json_work.data.recordList, json_work.data.attachmentList);
                     if (this.mask) this.mask.hide();
                     //if (layout.mobile) this.loadMobileActions();
-                    this.openWork();
-                    this.unLoading();
+                    if (layout.session && layout.session.user){
+                        this.openWork();
+                        this.unLoading();
+                    }else{
+                        if (layout.sessionPromise){
+                            layout.sessionPromise.then(function(){
+                                this.openWork();
+                                this.unLoading();
+                            }.bind(this));
+                        }
+                    }
                 } else{
                     if (this.options.jobId || this.options.jobid || this.options.job){
                         delete this.options.workCompletedId;
@@ -196,14 +206,24 @@ MWF.xApplication.process.Work.Main = new Class({
                     loadFormFlag = true;
                     check();
                 }else{
-                    this.action[((layout.mobile) ? "getFormV2Mobile": "getFormV2")](formId, function(formJson){
-                        json_form = formJson;
-                        loadFormFlag = true;
-                        check();
-                    }, function(){
-                        loadFormFlag = true;
-                        check();
-                    });
+                    //临时查看效果
+                    // if (formId=="4f8b4fde-d963-468c-b6c9-9e7b919f0bd0"){
+                    //     o2.JSON.get("../x_desktop/res/form/4f8b4fde-d963-468c-b6c9-9e7b919f0bd0.json", function(formJson){
+                    //         json_form = formJson;
+                    //         loadFormFlag = true;
+                    //         check();
+                    //     });
+                    // }else{
+                        this.action[((layout.mobile) ? "getFormV2Mobile": "getFormV2")](formId, function(formJson){
+                            json_form = formJson;
+                            loadFormFlag = true;
+                            check();
+                        }, function(){
+                            loadFormFlag = true;
+                            check();
+                        });
+                    // }
+
                 }
 
             }.bind(this), function(){
@@ -225,6 +245,11 @@ MWF.xApplication.process.Work.Main = new Class({
                     }.bind(this)}, id
             );
         }
+        var cl = "$all";
+        MWF.xDesktop.requireApp("process.Xform", cl, function(){
+            loadModuleFlag = true;
+            check();
+        });
 
         // if (this.options.form && this.options.form.id && this.options.form.app){
         //     o2.Actions.invokeAsync([
@@ -646,8 +671,8 @@ MWF.xApplication.process.Work.Main = new Class({
             this.formNode.setStyles(this.css.formNode);
             var uri = window.location.href;
             //var cl = (uri.indexOf("$all")!=-1) ? "$all" : "Form";
-            var cl = "$all";
-            MWF.xDesktop.requireApp("process.Xform", cl, function(){
+           // var cl = "$all";
+           // MWF.xDesktop.requireApp("process.Xform", cl, function(){
             //MWF.xDesktop.requireApp("process.Xform", "Form", function(){
                 this.appForm = new MWF.APPForm(this.formNode, this.form, {});
                 this.appForm.businessData = {
@@ -700,7 +725,7 @@ debugger;
                     this.fireEvent("postLoadForm");
 
                 }.bind(this));
-            }.bind(this));
+            //}.bind(this));
         }
     },
 

BIN
o2web/source/x_desktop/font/alfont.eot


BIN
o2web/source/x_desktop/font/alfont.otf


BIN
o2web/source/x_desktop/font/alfont.ttf


BIN
o2web/source/x_desktop/font/alfont.woff


+ 12 - 1
o2web/source/x_desktop/js/app.js

@@ -26,6 +26,17 @@ layout.addReady(function(){
             }
             layout.openApplication(null, appName, option||{}, m_status);
         };
-        _load();
+
+        if (layout.session && layout.session.user){
+            _load();
+        }else{
+            if (layout.sessionPromise){
+                layout.sessionPromise.then(function(){
+                    _load();
+                });
+            }
+        }
+
+        //_load();
     })(layout);
 });

+ 134 - 32
o2web/source/x_desktop/js/base.js

@@ -420,18 +420,43 @@ o2.addReady(function () {
         }
     };
 
+    var _setLayoutService = function(service, center){
+        layout.serviceAddressList = service;
+        layout.centerServer = center;
+        layout.desktop.serviceAddressList = service;
+        layout.desktop.centerServer = center;
+    };
     var _getDistribute = function (callback) {
+        debugger;
         if (layout.config.app_protocol === "auto") {
             layout.config.app_protocol = window.location.protocol;
         }
-        o2.xDesktop.getServiceAddress(layout.config, function (service, center) {
-            layout.serviceAddressList = service;
-            layout.centerServer = center;
-            layout.desktop.serviceAddressList = service;
-            layout.desktop.centerServer = center;
-            _loadProgressBar();
-            if (callback) callback();
-        }.bind(this));
+
+        if (layout.config.configMapping && layout.config.configMapping[window.location.host]){
+            var mapping = layout.config.configMapping[window.location.host];
+            if (mapping.servers){
+                layout.serviceAddressList = mapping.servers;
+                layout.desktop.serviceAddressList = mapping.servers;
+                if (mapping.center) center = (o2.typeOf(mapping.center)==="array") ? mapping.center[0] : mapping.center;
+                layout.centerServer = center;
+                layout.desktop.centerServer = center;
+                if (callback) callback();
+            }else{
+                if (mapping.center) layout.config.center = (o2.typeOf(mapping.center)==="array") ? mapping.center : [mapping.center];
+                o2.xDesktop.getServiceAddress(layout.config, function (service, center) {
+                    _setLayoutService(service, center);
+                    _loadProgressBar();
+                    if (callback) callback();
+                }.bind(this));
+            }
+        }else{
+            o2.xDesktop.getServiceAddress(layout.config, function (service, center) {
+                _setLayoutService(service, center);
+                _loadProgressBar();
+                if (callback) callback();
+            }.bind(this));
+        }
+
     };
 
     var _load = function () {
@@ -447,6 +472,7 @@ o2.addReady(function () {
 
             _loadProgressBar(true);
             while (layout.readys && layout.readys.length) {
+                console.log("load app ...")
                 layout.readys.shift().apply(window);
             }
         };
@@ -458,36 +484,71 @@ o2.addReady(function () {
             Cookie.write("x-token", options["x-token"]);
         }
 
-        _loadApp();
+        layout.sessionPromise = {
+            "resolveList": [],
+            "rejectList": [],
+            "init": function(resolve, reject){
+                if (resolve) this.resolveList.push(resolve);
+                if (reject) this.rejectList.push(reject);
+                this.status = "pending";
+                this.resolveReturn = this;
+
+                //先判断用户是否登录
+                o2.Actions.get("x_organization_assemble_authentication").getAuthentication(function (json) {
+                    this.status = "fulfilled";
+                    this.resolveReturn = json.data;
+                    this.runResolve(this.resolveReturn);
+                }.bind(this), function (xhr, text, error) {
+                    this.status = "rejected";
+                    this.resolveReturn = {"xhr": xhr, "text": text, "error": error};
+                    this.runReject(this.resolveReturn);
+                }.bind(this));
+            },
+            "runResolve": function(json){
+                while (this.resolveList.length){
+                    var r = this.resolveList.shift()(this.resolveReturn);
+                    if (r) this.resolveReturn = r;
+                }
+            },
+            "runReject": function(json){
+                while (this.rejectList.length){
+                    var r = this.rejectList.shift()(json);
+                    if (r) this.resolveReturn = r;
+                }
+            },
+            "then": function(resolve, reject){
+                if (resolve) this.resolveList.push(resolve);
+                if (reject) this.rejectList.push(reject);
+                switch (this.status){
+                    case "fulfilled":
+                        this.runResolve();
+                        break;
+                    case "rejected":
+                        this.runReject();
+                        break;
+                    default:
+                    //nothing
+                }
+                return this;
+            }
+        }
 
-        //先判断用户是否登录
-        o2.Actions.get("x_organization_assemble_authentication").getAuthentication(function (json) {
+        layout.sessionPromise.init(function(data){
             //已经登录
-            //_loadProgressBar();
-
-            layout.user = json.data;
+            layout.user = data;
             layout.session = layout.session || {};
-            layout.session.user = json.data;
-            layout.session.token = json.data.token;
+            layout.session.user = data;
+            layout.session.token = data.token;
             layout.desktop.session = layout.session;
-
-            //_loadApp(json);
-        }.bind(this), function (json) {
-            //_loadProgressBar();
+        }, function(){
             //允许匿名访问
             if (layout.anonymous) {
-                //_loadProgressBar(true);
-                // _loadApp({
-                //     data : {
-                //         user: "anonymous",
-                //         session: {
-                //             user: {
-                //                 name: "anonymous",
-                //                 roleList: []
-                //             }
-                //         }
-                //     }
-                // });
+                var data = { user: "anonymous", session: { user: { name: "anonymous", roleList: [] } } };
+                layout.user = data;
+                layout.session = layout.session || {};
+                layout.session.user = data;
+                layout.session.token = data.token;
+                layout.desktop.session = layout.session;
             } else {
                 _loadProgressBar(true);
                 if (layout.yqwx) {
@@ -497,6 +558,47 @@ o2.addReady(function () {
                 }
             }
         });
+        _loadApp();
+
+        // //先判断用户是否登录
+        // o2.Actions.get("x_organization_assemble_authentication").getAuthentication(function (json) {
+        //     //已经登录
+        //     //_loadProgressBar();
+        //
+        //     layout.user = json.data;
+        //     layout.session = layout.session || {};
+        //     layout.session.user = json.data;
+        //     layout.session.token = json.data.token;
+        //     layout.desktop.session = layout.session;
+        //
+        //     //_loadApp(json);
+        // }.bind(this), function (json) {
+        //     //_loadProgressBar();
+        //     //允许匿名访问
+        //     if (layout.anonymous) {
+        //         //_loadProgressBar(true);
+        //         // _loadApp({
+        //         //     data : {
+        //         //         user: "anonymous",
+        //         //         session: {
+        //         //             user: {
+        //         //                 name: "anonymous",
+        //         //                 roleList: []
+        //         //             }
+        //         //         }
+        //         //     }
+        //         // });
+        //     } else {
+        //         _loadProgressBar(true);
+        //         if (layout.yqwx) {
+        //             layout.openLoginQywx();
+        //         } else {
+        //             layout.openLogin();
+        //         }
+        //     }
+        // });
+
+
 
         layout.openLogin = function () {
             layout.authentication = new o2.xDesktop.Authentication({

+ 11 - 2
o2web/source/x_desktop/js/portal.js

@@ -29,10 +29,19 @@ layout.addReady(function(){
 
             layout.openApplication(null, appName, option||{}, m_status);
         };
-        _load();
+
+        if (layout.session && layout.session.user){
+            _load();
+        }else{
+            if (layout.sessionPromise){
+                layout.sessionPromise.then(function(){
+                    _load();
+                });
+            }
+        }
+        //_load();
 
         window.addEventListener('popstate', function (event) {
-            debugger
             uri = new URI(document.location.href);
             id = uri.getData("id");
             page = uri.getData("page");

+ 10 - 2
o2web/source/x_desktop/js/printCMSDoc.js

@@ -31,6 +31,14 @@ layout.addReady(function(){
             layout.openApplication(null, appName, option||{}, m_status);
 
         };
-        _load();
+        if (layout.session && layout.session.user){
+            _load();
+        }else{
+            if (layout.sessionPromise){
+                layout.sessionPromise.then(function(){
+                    _load();
+                });
+            }
+        }
     })(layout);
-});
+});

+ 11 - 2
o2web/source/x_desktop/js/printWork.js

@@ -117,6 +117,15 @@ layout.addReady(function(){
                 layout.openApplication(null, appName, option||{}, m_status);
             }
         };
-        _load();
+
+        if (layout.session && layout.session.user){
+            _load();
+        }else{
+            if (layout.sessionPromise){
+                layout.sessionPromise.then(function(){
+                    _load();
+                });
+            }
+        }
     })(layout);
-});
+});

+ 36 - 24
o2web/source/x_desktop/js/x.js

@@ -7,33 +7,45 @@ layout.addReady(function(){
         layout.desktop.type = "layout";
         var loadingNode = $("browser_loading");
 
-        MWF.xDesktop.getUserLayout(function(){
-            layout.userLayout = layout.userLayout || {};
-            var uri = new URI(window.location.href);
-            var viewMode = uri.getData("view");
-            var flatStyle = uri.getData("style");
-            if (flatStyle) layout.userLayout.flatStyle = flatStyle;
-            if (!viewMode) viewMode = (layout.userLayout && layout.userLayout.viewMode) ? layout.userLayout.viewMode : "homepage";
-            viewMode = viewMode.toLowerCase();
-            //viewMode = (["flat", "home", "homepage", "default"].indexOf(viewMode)!==-1) ? "Default" : "Layout";
-            viewMode = (["layout", "desktop"].indexOf(viewMode)!==-1) ? "Layout" : "Default";
-            layout.viewMode = viewMode.capitalize();
-
-            //var layoutClass = "Homepage";
-            $("appContent").destroy();
-            MWF.require("MWF.xDesktop."+layout.viewMode, function(){
-                layout.desktop = new MWF.xDesktop[layout.viewMode]("layout_main", {});
-                layout.desktop.load();
-                if (!layout.desktop.openApplication) layout.desktop.openApplication = layout.openApplication;
-                if (!layout.desktop.refreshApp) layout.desktop.refreshApp = layout.refreshApp;
+        var _load = function(){
+            MWF.xDesktop.getUserLayout(function(){
+                layout.userLayout = layout.userLayout || {};
+                var uri = new URI(window.location.href);
+                var viewMode = uri.getData("view");
+                var flatStyle = uri.getData("style");
+                if (flatStyle) layout.userLayout.flatStyle = flatStyle;
+                if (!viewMode) viewMode = (layout.userLayout && layout.userLayout.viewMode) ? layout.userLayout.viewMode : "homepage";
+                viewMode = viewMode.toLowerCase();
+                //viewMode = (["flat", "home", "homepage", "default"].indexOf(viewMode)!==-1) ? "Default" : "Layout";
+                viewMode = (["layout", "desktop"].indexOf(viewMode)!==-1) ? "Layout" : "Default";
+                layout.viewMode = viewMode.capitalize();
+
+                //var layoutClass = "Homepage";
+                $("appContent").destroy();
+                MWF.require("MWF.xDesktop."+layout.viewMode, function(){
+                    layout.desktop = new MWF.xDesktop[layout.viewMode]("layout_main", {});
+                    layout.desktop.load();
+                    if (!layout.desktop.openApplication) layout.desktop.openApplication = layout.openApplication;
+                    if (!layout.desktop.refreshApp) layout.desktop.refreshApp = layout.refreshApp;
+                });
+                if (loadingNode){
+                    new Fx.Tween(loadingNode).start("opacity", 0).chain(function(){
+                        loadingNode.destroy();
+                        loadingNode = null;
+                    });
+                }
             });
-            if (loadingNode){
-                new Fx.Tween(loadingNode).start("opacity", 0).chain(function(){
-                    loadingNode.destroy();
-                    loadingNode = null;
+        };
+
+        if (layout.session && layout.session.user){
+            _load();
+        }else{
+            if (layout.sessionPromise){
+                layout.sessionPromise.then(function(){
+                    _load();
                 });
             }
-        });
+        }
     })(layout);
 });
 

+ 1 - 1
o2web/source/x_desktop/work.html

@@ -3,7 +3,7 @@
     <head>
         <meta http-equiv="X-UA-Compatible" content="IE=edge" />
         <link rel="stylesheet" type="text/css" href="css/style_all.css" charset="UTF-8" />
-
+        <link rel="icon" href="data:;">
         <title>WORK</title>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     </head>

+ 7 - 7
o2web/source/x_desktop/workmobile.html

@@ -7,13 +7,6 @@
         <link rel="stylesheet" href="css/mBoxTooltip.css" charset="UTF-8" />
         <link rel="icon" href="data:;">
 
-        <script src="../o2_core/o2.min.js"></script>
-        <script src="js/base_work.min.js"></script>
-        <script src="js/o2m.api.js"></script>
-        <script src="js/work.min.js"></script>
-        <script src="../o2_lib/Decimal.js"></script>
-        <script>layout.mobile = true;</script>
-
         <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
         <meta content="yes" name="apple-mobile-web-app-capable" />
         <meta content="black" name="apple-mobile-web-app-status-bar-style" />
@@ -27,5 +20,12 @@
             <div id="loaddingArea" style="overflow: hidden;width:0px; height:2px; background-color:#4e82bd; position: absolute; top: 0; z-index: 100"></div>
             <div id="layout" style="overflow: hidden; -webkit-transform: translateZ(0); "></div>
         </div>
+
+        <script src="../o2_core/o2.min.js"></script>
+        <script src="js/base_work.min.js"></script>
+        <script src="js/o2m.api.js"></script>
+        <script src="js/work.min.js"></script>
+        <script src="../o2_lib/Decimal.js"></script>
+        <script>layout.mobile = true;</script>
     </body>
 </html>

+ 6 - 7
o2web/source/x_desktop/workmobilewithaction.html

@@ -8,13 +8,6 @@
     <link rel="stylesheet" href="css/mBoxTooltip.css" charset="UTF-8" />
     <link rel="icon" href="data:;">
 
-    <script src="../o2_core/o2.min.js"></script>
-    <script src="js/base_work.min.js"></script>
-    <script src="js/o2m.api.js"></script>
-    <script src="js/work.min.js"></script>
-    <script src="../o2_lib/Decimal.js"></script>
-    <script>layout.mobile = true;</script>
-
     <meta content="width=device-width, initial-scale=1.0,user-scalable=0" name="viewport" />
     <meta content="yes" name="apple-mobile-web-app-capable" />
     <meta content="black" name="apple-mobile-web-app-status-bar-style" />
@@ -37,6 +30,12 @@
 
     </div>
 
+    <script src="../o2_core/o2.min.js"></script>
+    <script src="js/base_work.min.js"></script>
+    <script src="js/o2m.api.js"></script>
+    <script src="js/work.min.js"></script>
+    <script src="../o2_lib/Decimal.js"></script>
+    <script>layout.mobile = true;</script>
     <script type="text/javascript" src="../o2_lib/wechat/jweixin-1.6.0.js"></script>
 </body>