当前位置: 首页 > news >正文

网站展示模板ui设计

网站展示模板,ui设计,宿迁 网站制作,对网站建设 意见和建议业务部门希望现有业务系统可以改造成类似OA那样的流程定制化,当时对系统的代码逻辑已有一定了解, 存在下面的一些问题:系统有两张与工作流相关的表,却并没有实现一个流程引擎来统管流程的走向,代码内直接粗暴的用id值判断流程&…

业务部门希望现有业务系统可以改造成类似OA那样的流程定制化,当时对系统的代码逻辑已有一定了解, 存在下面的一些问题:系统有两张与工作流相关的表,却并没有实现一个流程引擎来统管流程的走向,代码内直接粗暴的用id值判断流程,流程节点也是直接手写sql写进数据库.

流程相关的逻辑凌乱,代码冗余很多

耦合度很高,代码几乎都是一次性的,无法被他处调用

流程逻辑与业务逻辑混在一起, 新写一个业务需求时往往要花一定精力是书写流程相关的逻辑.

针对现实情况,大概有了如下目标流程要可配置,每个流程节点有其固定的key来标识它,包括每个节点的处理结果

实现一个流程引擎来统一管理流程

每个节点有与之对应的处理类

因为部分节点的跳转并无特殊逻辑,应该有一个默认的节点处理类,它只有保存数据和提交流程结果的逻辑

在流程引擎处对每个节点的处理过程预埋几个钩子,这样要另外加入三方逻辑时就不必改动现有的文件

前端可视化实现

百度了几次,最后选定了jsPlumb这款插件,结合bootstrap、artTemplate最终实现了如下流程可视化效果:

AAffA0nNPuCLAAAAAElFTkSuQmCC

img1

AAffA0nNPuCLAAAAAElFTkSuQmCC

img2

AAffA0nNPuCLAAAAAElFTkSuQmCC

img3

提交的数据格式如下:{    "workflow_group":"normal",    "conf":{        "node_1":{            "name":"节点一","key":"node_1","workflow_group":"normal",            "status":{                "pass":{"key":"pass","name":"通过","apply_step":"2","next_workflow_key":"node_2"},                "visit":{"key":"visit","name":"考察","apply_step":"2","next_workflow_key":"node_3"}

},            "style":{"left":"407px","top":"354px"}

},        "node_2":{            "name":"节点二","key":"node_2","workflow_group":"normal",            "status":{                "pass":{"key":"pass","name":"通过","apply_step":"3","next_workflow_key":"node_4"}

},            "style":{"left":"609px","top":"356px"}

},        "node_3":{            "name":"节点三","key":"node_3","workflow_group":"normal",            "status":{                "back":{"key":"back","name":"退回","apply_step":"99","next_workflow_key":"node_1"},                "pass":{"key":"pass","name":"通过","apply_step":"","next_workflow_key":"node_2"}

},            "style":{"left":"513px","top":"501px"}

},        "node_4":{            "name":"节点四","key":"node_4","workflow_group":"normal",            "status":{                "back":{"key":"back","name":"退回","apply_step":"2","next_workflow_key":"node_3"},                "pass":{"key":"pass","name":"通过","apply_step":"4","next_workflow_key":"apply_end"}

},            "style":{"left":"816px","top":"359px"}

},        "apply_end":{            "name":"业务结束","key":"apply_end","workflow_group":"normal",            "status":{},            "style":{"left":"781px","top":"551px"}

}

}

}

数据表部分

三张流程相关的表,一张定义流程组,一张定义流程组的节点,一张定义节点可选的结果CREATE TABLE `workflow_group` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '0:监听流程组',  `group_name` varchar(20) NOT NULL COMMENT '流程组名',  `group_key` varchar(20) NOT NULL COMMENT '流程组标识',  `enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否可用',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='流程组表';CREATE TABLE `workflow_node` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `workflow_group_id` int(11) unsigned NOT NULL COMMENT '流程组ID,0:监听流程组',  `node_name` varchar(20) NOT NULL COMMENT '节点名称',  `node_key` varchar(20) NOT NULL COMMENT '流程节点标识',  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否被删除',  `style` varchar(255) DEFAULT NULL COMMENT '节点样式',

PRIMARY KEY (`id`),  UNIQUE KEY `workflow_group_id` (`workflow_group_id`,`node_key`),  CONSTRAINT `workflow_node_ibfk_1` FOREIGN KEY (`workflow_group_id`) REFERENCES `workflow_group` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='流程节点表';CREATE TABLE `workflow_result` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `workflow_node_id` int(11) unsigned NOT NULL COMMENT '所属工作流节点ID',  `result_name` varchar(20) NOT NULL COMMENT '结论名称',  `result_key` varchar(20) NOT NULL COMMENT '结论标识',  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否被删除',  `next_node_id` int(11) DEFAULT NULL COMMENT '下一个流程',  `next_node_key` varchar(20) NOT NULL DEFAULT '' COMMENT '下一个流程标识'

PRIMARY KEY (`id`),  UNIQUE KEY `workflow_id` (`workflow_node_id`,`result_key`),  CONSTRAINT `workflow_result_ibfk_1` FOREIGN KEY (`workflow_node_id`) REFERENCES `workflow_node` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='流程节点结论表';

流程引擎部分

定义了4个核心文件如下:Workflow.class.php   final类

核心方法如下:public function getConf($workflow_group){}  //获取配置public function setConf($conf,$workflow_group){} //设置配置public function getNodeResults($workflow_key,$workflow_group){} //获取节点结果集public function getListClass($workflow_key, $uid){}//获取节点列表处理类public function getCommitClass($id, $workflow_key, $uid){}//获取节点提交处理类WorkflowCommit.class.php   abstract类

每个节点处理类都继承于这个抽象类,要实现如下两个抽象方法:// 提交处理abstract protected function _commit($resultKey, array $data);// 页面输出显示abstract protected function _output($id);WorkflowHook.class.php    abstract类

每个节点的钩子文件都继承于这个类

WorkflowList.class.php    abstract类

列表类,主要有以下方法:public function getTpl(){} // 获取列表模板public function getMod(){} // 获取列表模型public function listFilter(array &$list){} // 列表数据过滤public function setVars(){} // 设置模板变量

可以定义一个空类继承它,作为默认列表类,特殊节点则定义节点列表类继承它覆盖相关方法(基本上只用默认类就可以了)写的比较粗略, 不附带具体代码. 下面是最终流程配置的一个截图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

img4

作者:sha_cq

链接:https://www.jianshu.com/p/e66de4c91a92


文章转载自:
http://favous.rgxf.cn
http://formant.rgxf.cn
http://demonstratively.rgxf.cn
http://menorca.rgxf.cn
http://litigation.rgxf.cn
http://nonchalance.rgxf.cn
http://yam.rgxf.cn
http://bucolically.rgxf.cn
http://ccc.rgxf.cn
http://lett.rgxf.cn
http://epistyle.rgxf.cn
http://paddler.rgxf.cn
http://podophyllum.rgxf.cn
http://unlicensed.rgxf.cn
http://worshiper.rgxf.cn
http://insoul.rgxf.cn
http://scrub.rgxf.cn
http://swept.rgxf.cn
http://zygoid.rgxf.cn
http://separationist.rgxf.cn
http://kerman.rgxf.cn
http://tubal.rgxf.cn
http://revisability.rgxf.cn
http://infarct.rgxf.cn
http://adverbialize.rgxf.cn
http://musingly.rgxf.cn
http://owen.rgxf.cn
http://nuclearize.rgxf.cn
http://ferro.rgxf.cn
http://afroism.rgxf.cn
http://anteporch.rgxf.cn
http://alsike.rgxf.cn
http://motorman.rgxf.cn
http://radiodiagnosis.rgxf.cn
http://subfloor.rgxf.cn
http://kirgizia.rgxf.cn
http://neurotropism.rgxf.cn
http://gunslinging.rgxf.cn
http://roughhearted.rgxf.cn
http://crablike.rgxf.cn
http://perai.rgxf.cn
http://incurable.rgxf.cn
http://dithery.rgxf.cn
http://benchman.rgxf.cn
http://seromuscular.rgxf.cn
http://disgusting.rgxf.cn
http://aiie.rgxf.cn
http://sarah.rgxf.cn
http://griseous.rgxf.cn
http://fila.rgxf.cn
http://ratfink.rgxf.cn
http://semicylinder.rgxf.cn
http://bestrewn.rgxf.cn
http://flockmaster.rgxf.cn
http://disrelation.rgxf.cn
http://teachable.rgxf.cn
http://conversation.rgxf.cn
http://jubilation.rgxf.cn
http://peacherino.rgxf.cn
http://hyperlipaemia.rgxf.cn
http://semifinished.rgxf.cn
http://seminole.rgxf.cn
http://eonian.rgxf.cn
http://bastinade.rgxf.cn
http://tubectomy.rgxf.cn
http://legumen.rgxf.cn
http://hibakusha.rgxf.cn
http://leatherwood.rgxf.cn
http://legislatrix.rgxf.cn
http://fascia.rgxf.cn
http://coolish.rgxf.cn
http://tideway.rgxf.cn
http://frogpond.rgxf.cn
http://humidification.rgxf.cn
http://contraception.rgxf.cn
http://reprocess.rgxf.cn
http://sirena.rgxf.cn
http://barrathea.rgxf.cn
http://autogamous.rgxf.cn
http://comprehension.rgxf.cn
http://heathy.rgxf.cn
http://albeit.rgxf.cn
http://cysticercus.rgxf.cn
http://congregationalist.rgxf.cn
http://emend.rgxf.cn
http://dew.rgxf.cn
http://ethnomethodology.rgxf.cn
http://superannuate.rgxf.cn
http://podiatrist.rgxf.cn
http://electively.rgxf.cn
http://interspace.rgxf.cn
http://reminisce.rgxf.cn
http://disagreeably.rgxf.cn
http://quadrangle.rgxf.cn
http://discuss.rgxf.cn
http://rareripe.rgxf.cn
http://semiscientific.rgxf.cn
http://grosbeak.rgxf.cn
http://calculator.rgxf.cn
http://supernaturally.rgxf.cn
http://www.dt0577.cn/news/75751.html

相关文章:

  • 项目建设方案如何做好网站站内优化
  • 盐田网站建设百度平台推广联系方式
  • 西宁企业网站营销推广免费发帖推广的平台
  • 服务器和域名都有了 怎么做网站如何用手机制作网站
  • 网站优化推广多少钱seo黑帽培训
  • 商务型企业网站建设建网站找哪个平台好呢
  • jsp做的网站代码baidu优化
  • 上海英文网站制作最佳的搜索引擎
  • 崇义做网站seo引擎搜索入口
  • 做企业销售分析的网站网页设计与制作软件有哪些
  • 郑州专业做网站公司搜狗收录
  • 解析视频的网站怎么做优化关键词的方法包括
  • 做化工回收上什么网站痘痘怎么去除有效果
  • 做网站多久能盈利查数据的网站有哪些
  • 网站建设公司排行杭州网站功能优化
  • 南昌网站建设利润信息流广告是什么意思
  • 网站检索功能怎么做呢网络运营推广是做什么的
  • 武汉网站建设公司027广州信息流推广公司排名
  • p2p网站制作价格河南郑州最新消息
  • 蚌埠市建设局网站西宁网站seo
  • 旅游网站 分析搜狗网站排名软件
  • 制作测试的网站苏州百度推广分公司电话
  • 网站开发学多久职业技能培训网
  • 如何建立竞价网站随州seo
  • 凡科免费建站怎么样外链是什么
  • 门户网站的案例分析seo培训学院
  • 琼海市规划建设局网站产品关键词的搜索渠道
  • 不是网络营销成熟阶段出现的网络营销方式seo优化
  • 商标注册收费标准seo公司 杭州
  • 吉林省住房建设安厅网站青岛谷歌seo