用svg做流程管理

说起流程管理这个功能,如果没有个动态图配合显示,简直就是太没有客户体验感了。就比如说请假流程吧,流程走到哪一步了,流程走向过程中都那些人审批的,审批的结果等等,如果就来个列表,也不是说不行,就是觉得太不人道主义了。

曾经在上海做过流程管理,采用的IBM研发的FileNet,是一个很大型的工具,安装复杂,而且还是付费的。而现在要开发流程管理,想必是不用考虑让公司去购买FileNet的了,原因就不必多说了。

重要的是,即使什么都没有,也是可以开发流程管理的,那就是svg,对于svg我是真的爱到无法自拔的了,之前的配电室监控、场景监控用的都是svg技术,用的是一个叫raphael.js前端插件,其实也就是封装的对svg元素的操作。

下面来讲讲这个开发思路,首先,肯定是要录入流程图的,根据不同的流程,创建不同的流程图。

流程图怎么创建?总不至于要手写svg代码吧?庆幸的是不用,很多工具可以画流程图,然后导出svg文件,懒得安装也懒得找,记得之前正好有用过网上一个免费的在线画图的网址(https://processon.com),就是这个了,免费、好用、免安装,画图还好看,还有什么可挑剔的,总之我是很喜欢,下面奉上一个画好的请假流程图

下载成svg文件就可以使用了

动态呢用js就可以控制啦,比如下面这个门使用能导航的功能

首先把svg弄到页面中,放在body里就可以了

然后在浏览器中打开这个页面

右键检查自己想要控制的方块

就能看到自己想要控制的这个svg元素了,这里需要控制的是这个path节点,获取这个节点的id,配置到json中,由于id的前缀都是一样的,只要记录后面的数字就可以了,比如这里的id(ProcessOnPath1030),只要记录(1030)就可以了,下面上代码:

var DOOR_FLOW_CHART_DATA = {
    ‘1029‘: {‘path‘: ‘1030‘, ‘url‘: ‘https://www.baidu.com/?tn=39042058_18_oem_dg‘},
    ‘1067‘: {‘path‘: ‘1068‘, ‘url‘: ‘http://fanyi.baidu.com/‘},
    /* ‘1038‘: {path: ‘1039‘, url: ‘/accesscontrol/SystemDeviceInfo‘}, */
    /* ‘1059‘: {path: ‘1060‘, url: ‘/accesscontrol/SystemDeviceInfo‘}, */
    /* 添加门禁所使用的通讯服务ProcessOnG1033 */
    ‘1033‘: {path: ‘1034‘, url: ‘/runtime/SystemProxyService‘},
    /* 添加卡类型ProcessOnG1055 */
    ‘1055‘: {path: ‘1056‘, url: ‘/card/ecardtype‘},
    /* 人员发卡ProcessOnG1063 */
    ‘1063‘: {path: ‘1064‘, url: ‘/card/cardinfo‘},
    /* 添加门禁时间组ProcessOnG1075 */
    ‘1075‘: {path: ‘1076‘, url: ‘/accesscontrol/accesscontrolsegion‘},
    /* 设置门禁联动事件及视频联动ProcessOnG1099 */
    ‘1099‘: {path: ‘1100‘, url: ‘/gangcontrol/accessVideoControl‘},
    /* 使用门禁监控功能ProcessOnG1104 */
    ‘1104‘: {path: ‘1105‘, url: ‘/supervise/supervise-only-door‘, target: ‘门禁实时监控‘},
    /* 门禁授权ProcessOnG1118 */
    ‘1118‘: {path: ‘1119‘, url: ‘/accesscontrol/impowerdoor‘}
};

只要配置好这个,所有的流程图就是统一的一个操作了,就是根据这个配置,获取svg节点,然后绑定事件,这里加了mouseover、mouseout和点击事件,见代码:

window.onload = function () {
    for (var i in DOOR_FLOW_CHART_DATA) {
        var data = DOOR_FLOW_CHART_DATA[i];
        var path = $(‘#ProcessOnPath‘ + data.path)[0];

        Node_Color[data.path] = Node_Color[data.path] || {};
        var oldcolor = path.attributes["fill"].value;
        Node_Color[data.path].mouseout = oldcolor;
        Node_Color[data.path].mouseover = color2darker(oldcolor);

        (function(D, P){
            $(‘#ProcessOnG‘ + i).on(‘mouseover‘, function(){
                P.attributes["stroke-width"].value = 3;  //#FFEB3B
                P.attributes["fill"].value = Node_Color[D.path].mouseover;
            }).on(‘mouseout‘, function(){
                P.attributes["stroke-width"].value = 2;
                P.attributes["fill"].value = Node_Color[D.path].mouseout;
            }).on(‘click‘, function(){
                window.open(D.url, ‘_blank‘);
            }).css({‘cursor‘: ‘pointer‘});
        })(data, path);

    }

    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
};
color2darker方法是干嘛的呢?

是为了让鼠标移动到节点上的时候,节点颜色加深,颜色如何加深?见代码:
var Hex_Reduce = {
    0: "0",
    1: "0",
    2: "0",
    3: "1",
    4: "2",
    5: "3",
    6: "4",
    7: "5",
    8: "6",
    9: "7",
    a: "8",
    b: "9",
    c: "a",
    d: "b",
    e: "c",
    f: "d"
};

/**
 * 亮度计算公式
 * RGB计算色彩知觉亮度的公式
 * Y = ((R*299)+(G*587)+(B*114))/1000
 * 比如这个值:#ffcccc,ff cc cc 分别对应R G B 的值,那么只要这三个值都变小了,自然颜色就深了
 * 下面这个方法,让每位值都减小2,这样就可以达到颜色变深的目的啦
 */
function color2darker(str){
    var arr = str.split("");
    return arr[0] + Hex_Reduce[arr[1]] + Hex_Reduce[arr[2]]
        + Hex_Reduce[arr[3]] + Hex_Reduce[arr[4]] + Hex_Reduce[arr[5]] + Hex_Reduce[arr[6]];
}

懒得写十进制和十六进制的转换,就搞了个上面的代码,下面见见效果图吧

鼠标移动上去会根据原有的颜色让颜色变得更深显示,这样就做了一个动态的效果



原文地址:https://www.cnblogs.com/LcxSummer/p/9343269.html

时间: 2024-11-07 21:24:23

用svg做流程管理的相关文章

据说,情商高的人,都这样做流程管理……

都说流程人是处女座.细节控.强迫症......其实他们不止有这些优(毛)点(病),他们还思想先进,有变革之心,有大局观念,人际交往能力强--总之,情商高啊!! 不信?看看下面这个流程冲突,你就知道能搞定一个公司流程的人是有多牛逼! 在一次高管会议上,领导们又在为一个重要产品的缺货情况争执不休: 总经理: xx产品为什么又出现市场缺货同时仓库爆仓的情况?爆仓为什么还缺货! 财务总监:有些库存已经积压一年了,我们的现金流快要出问题了. 供应链/采购总监:销售部和市场部根本没有把他们的产品需求告诉我们

流程管理软件(BPM)功能简介

易协流程管理系统实现将人为控制的业务活动,通过信息化手段实现系统控制,降低人为控制管理的风险以及促进企业的各项决策方针的顺利实施. 系统目标: 实现管理的规范化.制度化.程序化: 帮助企业将内控制度流程化与优化和持续完善,实现流转的自动化: 避免有流程,无执行,流程与实际运做脱节: 实现流程监督.分析与统计,减少人为因素,加快业务响应速度: 加强业务过程管理并建立量化考核体系: 强化岗位职责避免相互推诿,帮助管理层考核工作质量: 强化督办预警,实现业务提醒.催办.督办的人工智能: 实现业务流程管

项目流程管理&&架构总结

1 项目背景 所在业务在早期没有营销费用,买家购买商品的折扣优惠是由卖家提供的,所有订单的最终价格是由卖家和业务方确定的,整个购买流程很简单. 现在此业务收受到公司重视,业务团队能申请到营销费用,业务团队能主动补贴折扣优惠.一件东西进行促销时,用户购买此物品后,由业务方出钱补贴折扣的费用,而卖家不需要考虑优惠折扣.实现这种营销需求需要和第三方的团队合作,例如商家营销团队.账务团队. 2 项目管理 团队协作 项目开始的时候,我方向这2个团体介绍业务背景,提产品需求,开头很顺利:业务边界范围的界定.

万字干货:手把手教你做需求管理

通过这篇文章,总结自己在工作实践中需求管理的方法论--普拉姆方法.总结这个方法论的特点是,用最轻量化的投入,与他人协作,并管理需求,推动需求上线.这套方法论组合了项目管理.敏捷开发的知识,希望能对大家有所帮助.本文适合0-2岁产品经理阅读,产品大牛.敏捷管理大师请绕过. 本文大纲如下: 1. 为什么要做需求管理? 1.1 我们的工作是否像救火 1.2 需求管理是什么? 1.3 宗旨是什么? 1.4 结尾 2. 需求管理中的干系人和角色 2.1 什么是干系人 2.2 需求管理中的角色 2.3 如何

中国南车戚墅堰所 ——流程管理信息化建设

一:项目简介 1.客户介绍 中国南车戚墅堰机车车辆工艺研究所有限公司(以下简称"中国南车戚墅堰所")是中国南车股份有限公司旗下的一级子公司,始建于1959年.五十多年来,中国南车戚墅堰所始终与中国轨道交通装备事业发展同行,致力于轨道交通装备现代化.目前公司不仅服务于我国干线铁路运输和城市轨道交通,还利用轨道交通装备专有技术向延伸产业发展,已经进入了汽车零部件.工程机械.风力发电等市场领域.中国南车戚墅堰所坚持走"科研支撑产业,产业反哺科研"的良性发展道路,持续加大科

流程管理制度示例

第一章 总则 第一条 为加强某某连锁经营有限公司(以下简称"某")流程管理工作,建立和完善流程管理体系,规范流程制定程序,特制定本制度. 第二条 流程管理的原则 (一) 根据效率优先.兼顾风险的原则,让合适的人.在合适的时间.在适当的风险下做合适的事,从而更好地为公司创造价值: (二) 以部门为主体,推动部门发挥创新能力. 第三条 流程的管理模式 根据某组织结构及运营管理模式,管理流程主要实行公司级和部门级两级管理模式: (一) 跨部门间的流程由战略企划部负责组织建立和管理(该类流程以

实施流程管理

当今,企业面临很多苦恼的问题,随着企业的做大做强,企业运行的流程,需要进行规范管理.但往往力不从心,我该如何去管理?通过选择流程管理产品来管理吗?我该选择什么样的产品才能适合自己企业?各种疑问,往往存在这样现象,很多人选择了某一流程管理产品,结果发现好像没有起到作用,往往被放置一边. 其实管理并不复杂,有时候改变一个观念,就会让企业节省一大笔开支.如果有计划有步骤地梳理企业运行流程,把不必要的环节清除,那么将会更加彰显管理的作用和意义. 流程管理的实施,精简了员工数量,节省了工作环节,大大降低了

工作流程管理的重要性

对成长企业来说,"成长的关键不是经济环境,也不是市场条件,而是企业自身的管理条件",从单纯的业务流程升级为管理流程是提升企业水平的重要一步.管理流程的制定水平成为影响成长型企业生存的关键要素.好的管理在于好的流程,好的流程在于好的执行. 企业发展到一定规模后,由企业一把手管理全部业务的局面难以为继,然而由于缺乏组织上的准备,没有系统地计划及在关键岗位上培养对象,管理团队薄弱,业务流程模糊,领导人长期事必躬亲,其他员工难以分担职责,严重影响企业发展后劲. 从另一个角度来看.企业发展靠两条

企业流程管理的作用

企业流程管理的作用 --摘自<公司开了,你该这样管理>作者:张国祥 流程管理的作用 阿基米德说:给我一个支点,我可以撬动地球!企业管理是不是也有支点呢?如果有支点,它应该是什么呢?支点一定是可以让人省事省力,即使没有四两拔千斤之效,也应该有事半功倍之能.结果,我们发现流程对于企业管理而言有快速增效之功,有让组织快速蜕变之力.流程就是企业管理的支点! 要改变珍珠的价值,就必须把一组珍珠串起来变成项链.项链中的单粒珍珠价值没有什么改变,但作为珍珠团队--项链的价值却比每一粒珍珠价值之和增值了很多,