O2OA API

source

x_component_process_Xform/Sidebar.js

MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
//MWF.require("MWF.widget.Tree", null, false);
/** @class Sidebar 侧边操作条。
 * @o2cn 侧边操作条
 * @example
 * //可以在脚本中获取该组件
 * //方法1:
 * var sidebar = this.form.get("fieldId"); //获取侧边操作条
 * //方法2
 * var sidebar = this.target; //在侧边操作条和操作本身的事件脚本中获取
 * @extends MWF.xApplication.process.Xform.$Module
 * @o2category FormComponents
 * @o2range {Process}
 * @hideconstructor
 */
MWF.xApplication.process.Xform.Sidebar = MWF.APPSidebar =  new Class(
    /** @lends MWF.xApplication.process.Xform.Sidebar# */
{
	Extends: MWF.APP$Module,
        options: {
            /**
             * 组件加载前触发。当前组件的queryLoad事件还没有在form里注册,通过this.form.get("fieldId")不能获取到当前组件,需要用this.target获取当前组件。
             * @event MWF.xApplication.process.Xform.Sidebar#queryLoad
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            /**
             * 组件加载时触发。
             * @event MWF.xApplication.process.Xform.Sidebar#load
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            /**
             * 组件加载后事件.由于加载过程中有异步处理,这个时候操作条有可能还未生成。
             * @event MWF.xApplication.process.Xform.Sidebar#postLoad
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            /**
             * 组件加载后事件。这个时候操作条已生成
             * @event MWF.xApplication.process.Xform.Sidebar#afterLoad
             * @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
             */
            "moduleEvents": ["load", "queryLoad", "postLoad", "afterLoad"]
        },
    _loadUserInterface: function(){
        this.node.setStyles(this.form.css.sidebar);
        this.node.setStyles({
           "min-width":"126px",
           "max-width":"240px",
           "width": "auto"
        });
        // this.node.setStyle("width", this.node.getSize().x+"px");
        this.toolbarNode = this.node.getFirst("div");
        this.toolbarNode.empty();

        if (this.form.businessData.task){
            MWF.require("MWF.widget.Toolbar", function(){
                var toolbars = [];
                //this.form.businessData.task.routeNameList.each(function(route, i){
                //    if (!this.json.defaultTools) this.json.defaultTools = [];
                //    var o= {
                //        "type": "MWFToolBarButton",
                //        "img": "submit.png",
                //        "title": route,
                //        "action": "processWork:"+route,
                //        "text": route,
                //        "id": "action_processWork",
                //        "control": "allowProcessing",
                //        "condition": "",
                //        "read": false
                //    };
                //    toolbars.push(o);
                //}.bind(this));
                ( this.getRouteNameList() || [] ).each(function(route, i){
                    if (!this.json.defaultTools) this.json.defaultTools = [];
                    var o= {
                        "type": "MWFToolBarButton",
                        "img": "submit.png",
                        "title": route.displayName,
                        "action": "processWork:"+route.routeName,
                        "text": route.displayName,
                        "id": "action_processWork",
                        "control": "allowProcessing",
                        "condition": "",
                        "read": false
                    };
                    toolbars.push(o);
                }.bind(this));
                this.json.defaultTools = toolbars.concat(this.json.defaultTools);
                //this.json.defaultTools.unshift(o);

                /**
                 * @summary Toolbar组件,平台使用该组件生成操作条。
                 * @member {o2.widget.Toolbar}
                 * @example
                 *  //可以在脚本中获取该组件
                 * var toolbarWidget = this.form.get("fieldId").toolbarWidget; //获取组件对象
                 */
                this.toolbarWidget = new MWF.widget.Toolbar(this.toolbarNode, {
                    "style": this.json.style,
                    "onPostLoad" : function(){
                        this.fireEvent("afterLoad");
                    }.bind(this)
                }, this);
                //alert(this.readonly)

                if (this.json.hideSystemTools){
                    if (this.json.tools.length){
                        this.setCustomToolbars(this.json.tools, this.toolbarNode);
                        this.toolbarWidget.load();
                    }else{
                        this.toolbarNode.setStyle("display", "none");
                    }
                }else{
                    if (this.json.defaultTools.length || this.json.tools.length){
                        if (this.json.defaultTools){
                            this.setToolbars(this.json.defaultTools, this.toolbarNode, this.readonly);
                            this.setCustomToolbars(this.json.tools, this.toolbarNode);
                            this.toolbarWidget.load();
                        }else{
                            MWF.getJSON(this.form.path+"toolbars.json", function(json){
                                this.setToolbars(json, this.toolbarNode, this.readonly, true);
                                this.setCustomToolbars(this.json.tools, this.toolbarNode);
                                this.toolbarWidget.load();
                            }.bind(this), false);
                        }
                    }else{
                        this.toolbarNode.setStyle("display", "none");
                    }
                }
                if (this.toolbarWidget.children.length){
                    //this.form.app.addEvent("resize", this.loadPosition.bind(this));
                    this.node.setStyle("display", "none");
                    window.setTimeout(this.loadPosition.bind(this), 500);
                    var _self = this;
                    this.form.app.content.getFirst().addEvent("scroll", function(e){
                        _self.loadPosition(this);
                    });
                    this.form.app.addEvent("resize", function(e){
                        _self.loadPosition(this);
                    });
                }else{
                    this.toolbarNode.setStyle("display", "none");
                }
            }.bind(this));
        }else{
            this.node.setStyle("display", "none");
        }
    },
    loadPosition: function(){
        // this.node.setStyle("display", "block");
        // var parent = this.node.getParent();
        // while(parent && (!parent.get("MWFtype"))) parent = parent.getParent();
        //
        // var top = this.json.styles.top;
        // this.sideNode = parent || this.form.node;
        //
        // var size = this.form.app.content.getSize();
        // var scroll = this.form.app.content.getScroll();
        // var sideSize = this.sideNode.getSize();
        //
        // var y = (scroll.y+size.y/2)-sideSize.y/2;
        // var x = 5;
        //
        // var position = "centerRight";
        // var edge = "centerLeft";
        // if (!parent){
        //     edge = "centerRight";
        //     x = 5;
        // }
        //
        // if (this.json.barPosition=="left"){
        //     position = "centerLeft";
        //     edge = "centerRight";
        //     x = -5;
        //     if (!parent){
        //         edge = "centerLeft";
        //         x = 5;
        //     }
        // }
        //
        // this.node.position({
        //     "relativeTo": this.sideNode,
        //     "position": position,
        //     "edge": edge,
        //     "offset" : {"y": y, "x": x}
        // });
        // this.json.styles.top = top;
        // if (top) this.node.setStyle("top", top);

        this.node.setStyle("display", "block");
        var parent = this.node.getParent();
        while(parent && (!parent.get("MWFtype"))) parent = parent.getParent();
        this.sideNode = parent || this.form.node;
        var size = this.form.app.content.getSize();
        //var scroll = this.form.designer.designNode.getScroll();
        var sideSize = this.sideNode.getSize();
        var sidePosition = this.sideNode.getPosition(this.sideNode.getOffsetParent());
        var nodeSize = this.node.getSize();

        if (sideSize.y>size.y){
            var center = (size.y/2-nodeSize.y/2);
            if (center<sidePosition.y){
                this.node.setStyle("top", ""+sidePosition.y+"px");
            }else if (center>(sidePosition.y+sideSize.y)){
                var tmp = (sidePosition.y+sideSize.y)-nodeSize.y;
                this.node.setStyle("top", ""+tmp+"px");
            }else{
                this.node.setStyle("top", ""+center+"px");
            }
        }else{
            var top = sidePosition.y+sideSize.y/2-nodeSize.y/2;
            if (top>size.y){
                if (sidePosition.y+nodeSize.y>size.y){
                    this.node.setStyle("top", ""+sidePosition.y+"px");
                }else{
                    var tmp = size.y-nodeSize.y;
                    this.node.setStyle("top", ""+tmp+"px");
                }
            }else if(top<=0){
                if(sidePosition.y+sideSize.y<nodeSize.y){
                    var tmp = sidePosition.y+sideSize.y-nodeSize.y;
                    this.node.setStyle("top", ""+tmp+"px");
                }else{
                    this.node.setStyle("top", "45px");
                }
            }else{
                this.node.setStyle("top", ""+top+"px");
            }
        }


        //var left = sideSize.x+sidePosition.x+5;
        var x = sidePosition.x+sideSize.x+nodeSize.x;
        var left;
        if( x > size.x ){
            left = size.x - nodeSize.x - 5;
        }else{
            left = sideSize.x+sidePosition.x+5;
        }

        this.node.setStyle("left", ""+left+"px");
        this.node.setStyle("position", "absolute");
        this.node.setStyles({"right": "auto", "bottom": "auto"});

        // this.json.styles = this.node.getStyles(["top", "left", "bottom", "right", "position"]);
        //
        // var p = this.sideNode.getPosition();
        // var s = this.sideNode.getSize();
        // this.sidePosition = {"p": p, "s": s};

    },
    setCustomToolbars: function(tools, node){
        var path = "../x_component_process_FormDesigner/Module/Actionbar/";
        tools.each(function(tool){
            var flag = true;
            if (this.readonly){
                flag = tool.readShow;
            }else{
                flag = tool.editShow;
            }
            if (flag){
                flag = true;
                if (tool.control){
                    flag = this.form.businessData.control[tool.control]
                }
                if (tool.condition){
                    var hideFlag = this.form.Macro.exec(tool.condition, this);
                    flag = !hideFlag;
                }
                if (flag){
                    var actionNode = new Element("div", {
                        "id": tool.id,
                        "MWFnodetype": tool.type,
                        //"MWFButtonImage": this.form.path+""+this.form.options.style+"/actionbar/"+tool.img,
                        "MWFButtonImage": path+(this.form.options.style||"default") +"/custom/"+tool.img,
                        "title": tool.title,
                        "MWFButtonAction": "runCustomAction",
                        "MWFButtonText": tool.text
                    }).inject(node);
                    if (tool.actionScript){
                        actionNode.store("script", tool.actionScript);
                    }
                    if (tool.sub){
                        var subNode = node.getLast();
                        this.setCustomToolbars(tool.sub, subNode);
                    }
                }
            }
        }.bind(this));
    },
    setToolbars: function(tools, node, readonly, noCondition){
        var path = "../x_component_process_FormDesigner/Module/Actionbar/";
        tools.each(function(tool){
            var flag = true;
            if (tool.control){
                flag = this.form.businessData.control[tool.control]
            }
            if (!noCondition) if (tool.condition){
                var hideFlag = this.form.Macro.exec(tool.condition, this);
                flag = !hideFlag;
            }
            if (tool.id == "action_processWork"){
                if (!this.form.businessData.task){
                    flag = false;
                }
            }
            if (readonly) if (!tool.read) flag = false;
            if (flag){
                var actionNode = new Element("div", {
                    "id": tool.id,
                    "MWFnodetype": tool.type,
                    //"MWFButtonImage": this.form.path+""+this.form.options.style+"/actionbar/"+tool.img,
                    "MWFButtonImage": path+(this.form.options.style||"default") +"/tools/default/"+tool.img,
                    "title": tool.title,
                    "MWFButtonAction": tool.action,
                    "MWFButtonText": tool.text
                }).inject(node);
                if (tool.sub){
                    var subNode = node.getLast();
                    this.setToolbars(tool.sub, subNode, readonly, noCondition);
                }
            }
        }.bind(this));
    },
    getRouteNameList: function( routeList ){
        var _self = this;

        var list = [];
        if( !routeList )routeList = this.getRouteDataList();
        routeList.each(function(route, i){
            if( route.hiddenScriptText && this.form && this.form.Macro ){
                if( this.form.Macro.exec(route.hiddenScriptText, this).toString() === "true" )return;
            }
            var routeName = route.name;
            if( route.displayNameScriptText && this.form && this.form.Macro ){
                routeName = this.form.Macro.exec(route.displayNameScriptText, this);
            }

            list.push({
                "routeId" : route.id,
                "displayName" : routeName,
                "routeName" : route.name
            })
        }.bind(this));
        return list;
    },
    getRouteDataList : function(){
        if(this.routeDataList)return this.routeDataList;

        if (this.form && this.form.businessData && this.form.businessData.task && this.form.businessData.task.routeNameDisable){
            this.routeDataList = [{
                "id": o2.uuid(),
                "asyncSupported": false,
                "soleDirect": false,
                "name": "继续流转",
                "alias": "",
                "selectConfigList": []
            }];
            return this.routeDataList;
        }

        if( this.form && this.form.businessData && this.form.businessData.routeList ){
            this.form.businessData.routeList.sort( function(a, b){
                var aIdx = parseInt(a.orderNumber || "9999999");
                var bIdx = parseInt(b.orderNumber || "9999999");
                return aIdx - bIdx;
            }.bind(this));
            this.form.businessData.routeList.each( function(d){
                d.selectConfigList = JSON.parse(d.selectConfig || "[]");
            }.bind(this));
            this.routeDataList = this.form.businessData.routeList;
        }
        if( !this.routeDataList && this.form && this.form.businessData && this.form.businessData.task && this.form.businessData.task ){
            o2.Actions.get("x_processplatform_assemble_surface").listRoute( {"valueList":this.form.businessData.task.routeList} , function( json ){
                json.data.sort(function(a, b){
                    var aIdx = parseInt(a.orderNumber || "9999999");
                    var bIdx = parseInt(b.orderNumber || "9999999");
                    return aIdx - bIdx;
                }.bind(this));
                json.data.each( function(d){
                    d.selectConfigList = JSON.parse( d.selectConfig || "[]" );
                }.bind(this));
                this.routeDataList = json.data;
            }.bind(this), null, false );
        }
        return this.routeDataList;
    },
    isOpinionRequired: function( routeName ){
        var routeList = this.getRouteDataList();
        for( var i=0; i<routeList.length; i++ ){
            if( routeList[i].name === routeName ){
                return routeList[i].opinionRequired;
            }
        }
    },
    getRouteId: function( routeName ){
        var routeList = this.getRouteDataList();
        for( var i=0; i<routeList.length; i++ ){
            if( routeList[i].name === routeName ){
                return routeList[i].id;
            }
        }
    },
    getRouteData : function( routeId ){
        var routeList = this.getRouteDataList();
        for( var i=0; i<routeList.length; i++ ){
            if( routeList[i].id === routeId ){
                return routeList[i];
            }
        }
    },
    getOrgData: function (routeId) {
        var routeList = this.getRouteDataList();
        for (var i = 0; i < routeList.length; i++) {
            if (routeList[i].id === routeId) {
                return routeList[i].selectConfigList;
            }
        }
    },
    getVisableOrgData: function (routeId) {
        var selectConfigList = this.getOrgData(routeId);
        var list = [];
        (selectConfigList || []).each(function (config) {
            if (!this.isOrgHidden(config)) {
                list.push(config);
            }
        }.bind(this));
        return list;
    },
    isOrgHidden: function (d) {
        if (d.hiddenScript && d.hiddenScript.code) { //如果隐藏路由,返回
            var hidden = this.form.Macro.exec(d.hiddenScript.code, this);
            if (hidden && hidden.toString() === "true") return true;
        }
        return false;
    },
    runCustomAction: function(bt){
        var script = bt.node.retrieve("script");
        this.form.Macro.exec(script, this);
    },
    saveWork: function(){
        this.form.saveWork();
    },
    closeWork: function(){
        this.form.closeWork();
    },
    processWork: function(route){
        var opinion = this.form.getOpinion();

        if( !opinion.opinion && !opinion.medias.length && this.isOpinionRequired(route)){
            this.form.notice(MWF.xApplication.process.Work.LP.opinionRequired, "error");
            return false;
        }

        this.form.Macro.environment.form.currentRouteName = route;
        this.form.Macro.environment.form.opinion = opinion.opinion;
        this.form.Macro.environment.form.medias = opinion.medias;

        var routeId = this.getRouteId( route );
        var routeData = this.getRouteData( routeId );
        if (routeData.validationScriptText) {
            var validation = this.form.Macro.exec(routeData.validationScriptText, this);
            if (!validation || validation.toString() !== "true") {
                validation = typeOf(validation) === "string" ? validation : MWF.xApplication.process.Work.LP.routeValidFailure;
                this.form.notice(validation, "error");
                return false;
            }
        }

        if (!this.form.formCustomValidation()){
            this.form.app.content.unmask();
            //    if (callback) callback();
            return false;
        }

        if( this.getVisableOrgData( routeId ).length > 0 ){
            this.form.processWork( routeId );
        }else{
            this.form.submitWork(route, opinion.opinion, opinion.medias)
        }

        // var opinionField = this.json.opinion || "opinion";
        // var data = this.form.getData();
        // var opinion = data[opinionField];
        // data[opinionField] = "";
        // this.form.submitWork(route, opinion, null, null, data);
    },
    resetWork: function(){
        this.form.resetWork();
    },
    retractWork: function(e, ev){
        this.form.retractWork(e, ev);
    },
    rerouteWork: function(e, ev){
        this.form.rerouteWork(e, ev);
    },
    deleteWork: function(){
        this.form.deleteWork();
    },
    printWork: function(){
        this.form.printWork();
    }
}); 

results matching

    No results matching ''