php 审批流程管理
1.流程管理的用法是什么样的?
2.怎么发起想要的流程?
3.审批的人要是怎么审批通过?
4.流程审核是不是要挨个走过?
一、要有数据库的内容的
肯定会有表的,首先就是用户表了,然后就是流程表,用户编写的流程表,还有审核人员的表

二、数据库结束后,就是新建流程的页面,这页面会有审核人员,还有流程的名字还有提交的按钮
(1)添加节点的人员,这个是要遍历数据库来查看都什么管理人员
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<div> 请选择节点人员: <?php session_start(); //开启session include("DBDA.class.php"); //调用封装好的数据库 $db = new DBDA(); //造新对象 $suser = "select * from users"; //查询用户表中的所有值 $auser = $db->Query($suser); //执行查询语句 foreach($auser as $v) { echo "<input class='ck' type='radio' value='{$v[0]}' name='ck' />{$v[2]} "; //输出单选按钮,数组中的索引2,也就是用户名,但是它的值是代号 } ?></div> |
查看一下显示结果:

(2)既然后选择审核人员,那么就是有添加的按钮
|
1
|
<input type="button" value="添加节点" id="insert" /> //起个名字,便于给它添加单击按钮 |

(3)对这个按钮添加点击事件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$("#insert").click(function(){ var ck = $(".ck"); //找到项 var uid = ""; for(var i=0;i<ck.length;i++) { if(ck.eq(i).prop("checked")) //单选按钮的选中状态 { uid = ck.eq(i).val(); //单选按钮的值 } } $.ajax({ url:"addjd.php", //添加节点的处理页面 data:{uid:uid}, //将单选按钮的值传过去 type:"POST", //传值方式 dataType:"TEXT", //值的返回状态 success: function(data){ window.location.href="liucheng_gaunli.php"; //执行处理页面成功后会刷新页面 } });}) |
(4)添加节点的处理页面
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?phpsession_start(); //开启session$uid = $_POST["uid"]; //接收传过来的值if(empty($_SESSION["jiedian"])){ $attr = array($uid); //定义一个数组放用户 $_SESSION["jiedian"] = $attr; //将第一个用户放入数组中}else{ $attr = $_SESSION["jiedian"]; //数组中有值 $attr[] = $uid; //放入数组中值 $_SESSION["jiedian"] = $attr; //将值再交给session} |
(5)在主页面中显示添加的这些节点
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?phpif(empty($_SESSION["jiedian"])) //如果没有节点值{ echo "<div>还没有添加节点</div>"; //输出这句话}else{ $attr = $_SESSION["jiedian"]; //数组中有了值 foreach($attr as $k=>$v) //循环遍历,$v只是名字,还有有所以所以用$k { $sname = "select name from users where uid='{$v}'"; //编写查询语句 $name = $db->StrQuery($sname); //执行查询语句<br> //输出索引号还有名字,加一个删除按钮吧,可以吧这个节点删除 echo "<div>{$k}--{$name}--<input type='button' value='删除' sy='{$k}' class='sc' /></div>"; }}?> |
添加节点看下效果:
1.还没有添加节点的效果图:

2.随便添加几个审核人员:人员已经显示出来了

(6)这样之后就是对其的删除按钮添加单击事件了
|
1
2
3
4
5
6
7
8
9
10
11
12
|
$(".sc").click(function(){ var sy = $(this).attr("sy"); //点击这个按钮,选中这个的索引号 $.ajax({ url:"shanchu.php", //删除按钮的处理页面 data:{sy:sy}, //把索引号传到处理页面 type:"POST", //传值方式 dataType:"TEXT", success:function(data){ window.location.href="liucheng_gaunli.php"; //执行处理页面成功后会刷新页面 } });}) |
(7)删除按钮的处理页面
|
1
2
3
4
5
6
7
8
|
<?phpsession_start(); //开启session$attr = $_SESSION["jiedian"]; //节点的数组$sy = $_POST["sy"]; //接收穿过来的索引号unset($attr[$sy]); //删除数据$attr = array_values($attr); //重新索引$_SESSION["jiedian"] = $attr; |
查看下删除节点的效果
1.没有删除之前

2.删除一个节点之后

(8)节点的操作已经结束之后,那么就是流程的名称了,这个简单,写名称的文本框:重要的就是对这个流程的保存了,那么也要有保存按钮
|
1
|
<div>请输入流程名称:<input type="text" id="name" /></div> //起个名字,下面保存的写个单击事件有用 |
|
1
|
<div><input type="button" value="保存" id="save" /></div> //保存按钮要有单击事件的 |
这样整体的效果图就出来了:

(9)最后就是保存按钮的单击事件了
|
1
2
3
4
5
6
7
8
9
10
11
|
$("#save").click(function(){ var name = $("#name").val(); //取到文本框的值 $.ajax({ url:"baocun.php", //保存的处理页面 data:{name:name}, //将文本框的值传到处理页面 type:"POST", //传值方式 dataType:"TEXT", success: function(data){ alert("添加成功!"); //执行处理页面成功后会弹出提示框 } });<br>}) |
(10)保存流程的处理页面
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?phpsession_start(); //开启sessioninclude("DBDA.class.php"); //调用封装的数据库类$db = new DBDA(); //造新对象$name = $_POST["name"]; //接收传过来的值$code = time(); //代号是时间$sflow = "insert into flow values('{$code}','{$name}')"; //修改流程表中的值:代号和名字$db->Query($sflow,0); //执行语句$attr = $_SESSION["jiedian"]; foreach($attr as $k=>$v){ $spath = "insert into flowpath values('','{$code}','{$v}','{$k}')"; //修改流程节点的数值 $db->Query($spath,0); //执行语句} |
看下保存效果:

看下数据库,内容也保存数据库了

三、新建流程页面已经结束了,那么就是用户登录页面了,这个页面写了很多遍了,不多说了,直接上代码
(1)登录的基本显示:都是些基本语句
|
1
2
3
4
|
<h1>用户登录</h1><div>账号:<input type="text" id="uid" /></div><div>密码:<input type="password" id="pwd" /></div><div><input type="button" value="登录" id="btn" /></div> |
(2)这里登录,我们也用ajax进行登录吧
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$("#btn").click(function(){ //对登录按钮添加单击事件 var uid=$("#uid").val(); //获取用户的值 var pwd=$("#pwd").val(); //获取密码的值 $.ajax({ url:"logincl.php", //编写登录的处理页面 data:{uid:uid,pwd:pwd}, //将用户和密码传到处理页面 type:"POST", dataType:"text", success: function(data) { if(data.trim()=="OK") { window.location.href="main.php"; //处理页面执行成功后,跳转到主页面 } else { alert("用户名密码输入错误"); //否则就提示错误 } } }) }) |
(3)看下处理页面的编写
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?phpsession_start(); //开启sessioninclude("DBDA.class.php"); //调用封装的类$db = new DBDA(); //造新对象//传过来的值$uid = $_POST["uid"];$pwd = $_POST["pwd"];<br>//查询语句$sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";//执行语句$attr = $db->Query($sql);if(!empty($pwd) && !empty($attr) && $attr[0][0]==$pwd){ $_SESSION["uid"] = $uid; //session接收用户值 echo "OK";}else{ echo "ON";}?> |
最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误

四、节点用户的审核处理界面了(对于这个审核界面有很多需要注意的地方)
(1)登录成功界面的显示部分:并不是每个人登录成功界面是一样的,还有就是如果这个人员不参与审核的话,也应该是没有信息的才对
想要显示的表头,也就是一行:我们可以用表来显示
|
1
2
3
4
5
6
7
8
|
<tr> <td>流程代号</td> <td>发起者</td> <td>发起内容</td> <td>是否结束</td> <td>发起时间</td> <td>操作</td></tr> |
先看下表头的显示:

(2)开启一下session这样登录者的信息就会保存下来
|
1
2
3
4
5
6
7
8
9
10
11
12
|
session_start();include("DBDA.class.php"); //会用到数据库,所以可以调用一下数据库的类$db = new DBDA(); //造新对象$uid = "";if(empty($_SESSION["uid"])) //判断保存的session值是不是为空{ header("location:login.php"); //为空就返回登录页面}else{ $uid = $_SESSION["uid"]; //不为空就输保存一下用户} |
(3)接下来就是用户这是不是和流程有关系?流程走到哪了(分情况)?还有就是有没有通过
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//查询登录者参与的所有流程$su_flow = "select * from userflow where code in(select code from flowpath where uids='{$uid}')";$au_flow = $db->Query($su_flow); //执行查询语句 foreach($au_flow as $vu_flow){ $towhere = $vu_flow[6]; //流程走到哪里了 //找到登录者在该流程中的位置 $s_weizhi = "select orders from flowpath where code='{$vu_flow[1]}' and uids='{$uid}'"; $wezhi = $db->StrQuery($s_weizhi); //该人员在流程中的位置 if($towhere>=$wezhi) { $caozuo = ""; if($towhere==$wezhi) { //流程正好走到登录者位置 $caozuo="<a href='tongguo.php?ids={$vu_flow[0]}'>通过</a>"; //get方式传过处理页面 } else { //流程走过登录者 $caozuo = "<span style=' color:white'>已通过</span>"; } echo "<tr><td>{$vu_flow[1]}</td><td>{$vu_flow[2]}</td><td>{$vu_flow[3]}</td><td>{$vu_flow[4]}</td><td>{$vu_flow[5]}</td><td>{$caozuo}</td></tr>"; } else<br> { //流程未走到登录者 }} |
(4)通过的处理页面
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?phpinclude("DBDA.class.php"); //调用封装好的数据库类$db = new DBDA(); //造新对象<br>$ids = $_GET["ids"]; //将代号传过来$sql = "update userflow set towhere=towhere+1 where ids='{$ids}'"; //修改towhere的值看已经执行到哪了$db->Query($sql,0); //执行修改语句$swhere = "select * from userflow where ids='{$ids}'"; $attr = $db->Query($swhere);$towhere = $attr[0][6]; //走到哪了$code = $attr[0][1]; //流程代号$ssl = "select count(*) from flowpath where code='{$code}'"; //查询总数$pcount = $db->StrQuery($ssl); //该流程节点人员数量if($towhere>=$pcount){<br> $sql = "update userflow set isok=true where ids='{$ids}'"; //修改是不是已经通过了 $db->Query($sql,0);}header("location:main.php"); |
因为还没有写发起流程界面,那么先从数据库中添加几条数据看看:
(1)我们先要新建个流程,这是第一个页面,我们就用新建流程
看下结点还有流程名称
来看下数据库中结点的表 
根据这些我们在流程表中自己先添加信息吧,等后来再通过发起流程添加,现在只看下效果

登录审核人员的账号看下:
第一个人是李四:

我们点击通过,继续往下走
第二个人是马七,我们不点通过,看下下一个人员(王五)有没有这个通过的操作:是没有这个操作的

我们让马七通过审核,再看下王五的界面
王五的界面就是:
就发现有了这个操作,继续下去,我们看下最后这个通过会不会变成1
最后审核人员张三 
看下结果是否会结束:
再看下数据库中towhere中的数值是不是已经结束了:
这个就剩下发起流程的步骤了,可以先看下效果:
(1)发起流程有个链接页面,单击这个,可以链接到发起流程页面

(2)这个及时发起流程的页面了

至此,这个流程管理就结束了。
php 审批流程管理的更多相关文章
- 熊乐:H3 BPM为加速企业流程管理提供源动力
近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...
- 从国内流程管理软件市场份额看中国BPM行业发展
随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...
- php之 有点复杂的 流程管理
1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一.还是要有数据库的内容的 肯定会有表的,首先就是用户表了,然后就是流程表,用 ...
- php流程管理练习
今天我们做一个流程管理: 1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一. 做这个流程管理肯定要有数据库: 二.数据库结束 ...
- FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程
1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式. ...
- php之 常用的 流程管理
1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一.要有数据库的内容的 肯定会有表的,首先就是用户表了,然后就是流程表,用户编 ...
- 流程管理软件(BPM)功能简介
易协流程管理系统实现将人为控制的业务活动,通过信息化手段实现系统控制,降低人为控制管理的风险以及促进企业的各项决策方针的顺利实施. 系统目标: 实现管理的规范化.制度化.程序化: 帮助企业将内控制度流 ...
- java 实现一套流程管理、流转的思路(伪工作流)
在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提供我的设计思路,知道了思路,实现起来就简单很多了. 首先我 ...
- 用svg做流程管理
说起流程管理这个功能,如果没有个动态图配合显示,简直就是太没有客户体验感了.就比如说请假流程吧,流程走到哪一步了,流程走向过程中都那些人审批的,审批的结果等等,如果就来个列表,也不是说不行,就是觉得太 ...
随机推荐
- SQLAlchemy的基本使用
一.介绍 SQLAlchemy是一种ORM(Object-Relational Mapping)框架,用来将关系型数据库映射到对象上.该框架建立在DB API之上,将类和对象转化成SQL,然后使用AP ...
- iOS消息体系架构详解-融云即时通讯云
iOS SDK 体系架构 本文档将详细介绍融云的 SDK 产品架构和消息体系,以便于您更深入的了解融云并更快速的开发自己的产品. 融云 SDK 系统架构 IMKit IMKit 的功能主要是封装各种界 ...
- ListView适配器Adapter介绍与优化
一.ListView与Adapter的关系 ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来.一般而言,一个ListView由以下三个元素组成: 1.View ...
- 【胎教】做AI的基础,开始学习。
昨天,找了博导,他给我聊了一下暑假任务.现总结如下: 1. 周志华, 机器学习: 2. GoodFellow,深度学习: 3. 曾更生,*****医学图像处理: 4. cs231n,公式推导,课后习题 ...
- 【0624课外作业】将一个double类型的小数,四舍五入保留两位小数
package com.work0624; /** * 课外作业 *将一个double类型的小数,四舍五入保留两位小数 * @author L * */ import java.util.Scanne ...
- C++利用偏移量对文件操作
对输入流操作:seekg()与tellg()对输出流操作:seekp()与tellp()下面以输入流函数为例介绍用法: seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基 ...
- Eclipse:Win10中设置Courier New字体
问题:在Eclipse中设置字体的时候,没有找到Courier New字体.系统为Win10. 解决:Eclipse使用的字体为系统字体.在系统字体中有一部分是隐藏的.Courier New已经在系统 ...
- linux命令行调试邮件服务器
linux命令行调试邮件服务器 1. Linux客户端调试邮件过程 [root@mxtest ~]# telnet mail.xx.com 25 Trying 172.16.236.103... Co ...
- 简单的C++ DLL注入
今天呢,我们来讨论一下用C++实现DLL注入的简单方法. 环境: Visual Studio 2015及以上 Windows 7及以上 入门需要了解的: DLL是什么:DLL_360百科 DLL是Dy ...
- 【线性基】bzoj2844: albus就是要第一个出场
线性基求可重rank 题目描述 给定 n 个数 $\{ a_i \}$ ,以及数 $x$. 将 $\{ a_i \}$ 的所有子集(包括空集)的异或值从小到大排序,得到 $\{ b_i \} $. ...