基于图形化的组织架构设计器

Posted coolalam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于图形化的组织架构设计器相关的知识,希望对你有一定的参考价值。

企业管理中,组织架构是最基础的数据,平时一般都是通过树形结构或列表平面化展示,但这样不够直观,领导在批准组织架构调整中,往往希望更接近组织架构图的形式展现,利用前面讲述的设计器课程思路,我设计了一个组织架构设计器:

技术图片

 

如上图,可以实现公司、部门、岗位、员工的设计,为了方便扩展,我把它设计成了一个JQuery插件,很容易初始化:

<script>
    $(function()
        $("#btn").on("click",function()
            var url=$("#containerCanvas")[0].toDataURL();
        )
        var data=
                    data:[
                        typeName:"公司",title:"深圳华为技术股份有限公司","abbr":"华为技术",status:1,id:"123",pid:"",reportsTo:"",
                        typeName:"公司",title:"nonamed","abbr":"华为海思",status:1,id:"1678",pid:"",reportsTo:"",
                        typeName:"公司",title:"子公司名1","abbr":"手机事业务",status:1,id:"def",pid:"123",ptype:"公司",reportsTo:"",
                        typeName:"部门",title:"部门名1","abbr":"研发部",status:1,id:"abf",pid:"def",ptype:"公司",reportsTo:"",
                        typeName:"部门",title:"部门名","abbr":"总经办",status:1,id:"abc",pid:"123",ptype:"公司",reportsTo:"",
                        typeName:"岗位",title:"岗位名","abbr":"董事长",status:1,id:"456",pid:"abc",ptype:"部门",reportsTo:"",
                        typeName:"岗位",title:"岗位名1","abbr":"董事",status:1,id:"455",pid:"abc",ptype:"部门",reportsTo:"",
                        typeName:"员工",title:"员工名","abbr":"徐直军",status:1,id:"789",pid:"455",ptype:"岗位",reportsTo:"",
                        typeName:"员工",title:"员工名2","abbr":"余承东",status:1,id:"787",pid:"455",ptype:"岗位",reportsTo:"",
                        typeName:"员工",title:"员工名1","abbr":"任正非",createdate:"2019/06/19",status:1,id:"788",pid:"456",ptype:"岗位",reportsTo:""

                    ],
                    layout:null
                ;
        $("#container").organizationDesigner(
            readonly: false,
            lineType: "折线",
            height: "500px",
            width: "100%",
            title: "title",//显示标题使用的字段值。
            customTypes: //属性页中自定义显示
                employee: 
                    html: function (elemId, name, value, meta)  // 自定义的页面绘制元素
                        return ‘<span id="txtInitiator"></span>‘ +
                            ‘<button id="selectPositionIcon">选择角色</button>‘;
                    ,
                    init: function (onchange)  //在html绘制到页上后,需绑定的事件处理
                        var onchange = onchange;
                        $("#selectPositionIcon").on("click",function () 
                            $.cfSelectPositions("selectPositionIcon", "", "", false, function (ids,names) 
                                $("#txtInitiator").text(names);
                                $("#txtInitiator").attr("data-value", ids);
                                debugger;
                                if (onchange && typeof onchange === "function")
                                    onchange("reportsTo",ids); //自定义类型时,一旦选择了数据,回调第一个参数为meta中的字段名,第二个参数为选择的值
                            );
                        )
                    ,
                    valueFn: function ()  return  $("#txtInitiator").attr("data-value");  //显示时返回数据
                
            ,
            metadata:  //在属性页中显示的可修改的数据,
                title:  group: ‘数据‘, name: ‘名称‘ ,
                abbr:  group: ‘数据‘, name: ‘名称缩写‘ ,description:"中文名称的缩写或英文缩写",
                reportsTo:  group: ‘数据‘, name: ‘Report to‘ ,type: ‘employee‘
            ,
            onOpen:function(callback)
            
                callback(data.data,data.layout)
            ,
            onSave:function(content)
            
                data=content;
            ,
            onPrint:function(url)
            
               $.cfDialog("图片预览","<img src=\\""+url+"\\"></img>","SIZE_LARGE",[
                    id: ‘import_btn-1‘,
                    label: ‘关闭‘,
                    cssClass: "btn-primary",
                    action: function (dialog) 
                        dialog.close();
                    
                ]);
            ,
            onLoad:function()
            
                return data;
            
        );
    )
</script>

页面上定一个<div id="container">的div,重绘控件时,如果需要加载一些数据,可以在onLoad方法里返回加载的数据,保存数据在onSave里可以获得页面上的数据,并且数据状态通过status来识别1:未改变,0:新增加,2:已修改。

也可以在onPrint获得设计画布的图片,是base64编码的DataUrl形式。

设计器支持代码数据的查看和修改。

属性页是自已参考easyui 的propertyGrid写的组件,支持扩展属性显示,比如显示员工的对话框等。

这里面对数据的自动排列(刷子图标)我花了一点时间写了一个算法,感觉有点小成就 :P

一些对齐之类的功能就很普通了。

你可以从www.creativeflow.cn/home/demodesigner查看一下示例(IE目前不支持)。

感谢支持,有啥问题可以给我留言。

本文为原创,转载请注明出处。

以上是关于基于图形化的组织架构设计器的主要内容,如果未能解决你的问题,请参考以下文章

图表即代码:以代码化的方式构建新一代图形库 —— Feakin

图表即代码:以代码化的方式构建新一代图形库 —— Feakin

图表即代码:以代码化的方式构建新一代图形库 —— Feakin

面向简单的基于着色器的 GL 程序的 OO 架构

CPU微架构设计利用Verilog设计基于饱和计数器和BTB的分支预测器

Haydn解决方案数字化平台助力架构师1小时完成架构设计(实操篇)