php写流程管理
流程控制即某个人发起一个流程,通过一层一层审核,通过后,完成整个流程,若有一层审核未通过,中断整个流程。即结束!
比如请假流程:
某一员工发起一个请假流程,那么这个流程的节点人员即他的上级,上上级,上上上级......若上级领导未通过,即结束整个流程
1.数据库中的内容:
用户员工表,流程表,用户编写的流程表,还有审核人员
2.新建流程页面,即发起流程页面:
<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>
在把添加节点的按钮加上:
<input type="button" value="添加节点" id="jd" />
图:
按钮点击事件:
$("#jd").click(function(){ var uid = $("#user").val(); //点击添加节点,是要把select里面的value值添加过来,那么我们就要先取出它的value值 $.ajax({ url:"chuli.php", data:{uid:uid}, type:"POST", dataType:"TEXT", success: function(data){ window.location.href="main.php"; //刷新页面即可 } }); })
来处理:
<?php session_start(); //首先要开启session $uid = $_POST["uid"]; if(empty($_SESSION["user"]))//如果节点里面没有内容 需要先建一个数组,然后把uid放到里面 存一下 { $arr = array($uid); $_SESSION["user"] = $arr; } else //如果里面已经有内容了,那么就把数组里面的内容存一下 { $arr = $_SESSION["user"]; array_push($arr,$uid); $_SESSION["user"] = $arr; }
图:
删除按钮的事件
$(".del").click(function(){ var key=$(this).attr("key"); //删除里面取key值写起来是非常方便的 $.ajax({ url:"shanchu.php", data:{key:key}, type:"POST", dataType:"TEXT", success:function(aa) { window.location.href="main.php"; } }) })
来处理:
<?php session_start(); $arr=$_SESSION["user"]; //把之前的节点内容存一下 给$arr $key=$_POST["key"]; //取出索引值 unset($arr[$key]); //把选中的删除 $arr = array_values($arr); //把现有的节点的顺序重新排 $_SESSION["user"]=$arr;
输入流程名称:
<div>请输入流程名称:<input type="text" id="name" /></div><di>input type="button" value="保存" id="save" /></div>
保存按钮的事件:
$("#btn").click(function(){ var nr=$("#nr").val(); $.ajax({ url:"baocun.php", data:{nr:nr}, type:"POST", dataType:"TEXT", success:function(bc){ alert("保存成功"); } }) })
保存流程处理:
<?php session_start(); include("DADB.class.php"); $db=new DADB(); $nr=$_POST["nr"]; $code=time(); $sql="insert into liucheng VALUES ('{$code}','{$nr}')"; //在liucheng表中添加内容 $db->Query($sql,0); //在liucheng表中添加完之后还要保存节点 节点是在flowpath表中的 $arr = $_SESSION["user"]; foreach($arr as $k=>$v) { $sqn="insert into flowpath VALUES ('','{$code}','{$v}','{$k}')"; $db->Query($sqn,0); }
图:
保存成功!
3.登入写过很多,不再一点点敲了:
4.节点人员界面:
<h1>审核页面</h1> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>流程代号</td> <td>发起者</td> <td>发起内容</td> <td>是否结束</td> <td>发起时间</td> <td>操作</td> </tr> <?php session_start(); $uid=$_SESSION["uid"]; echo $uid; include("DADB.class.php"); $db=new DADB(); //查找登录者参与的所有流程 $sql = "select * from userflow where code in(select code from flowpath where uids='{$uid}')"; $arr = $db->Query($sql); //显示在页面 foreach($arr as $v) { $dh=$v[1];//查出代号 $where=$v[6]; //查出流程到哪里了 $sqn="select orders from flowpath where code='{$dh}' and uids='{$uid}'"; $orders=$db->StrQuery($sqn);//查出在流程中的次序 if($where>=$orders) { $caozuo = ""; if($where==$orders) { $caozuo="<a href='tongguo.php?code={$v[0]}'>通过</a>"; } else { $caozuo="<span style='color:white'>已通过</span>"; } echo "<tr> <td>{$v[1]}</td> <td>{$v[2]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td>{$v[5]}</td> <td>{$caozuo}</td> </tr>"; } } ?> </table>
看一下最后点击后的处理页面:
<?php session_start(); include("../fengzhuang/DBDA.class.php"); $db = new DBDA(); //流程往下走 $code = $_GET["code"]; $sql = "update userflow set towhere=towhere+1 where ids='{$code}'"; $db->Query($sql,0); //判断流程是否结束 $sql = "select * from userflow where ids='{$code}'"; $arr = $db->Query($sql); $lcdh = $arr[0][1]; //流程代号 $tw = $arr[0][6]; //流程走到哪 $sql = "select count(*) from flowpath where code='{$lcdh}'"; $count = $db->StrQuery($sql); //该流程节点人数 if($tw>=$count) { $sql = "update userflow set isok=1 where ids='{$code}'"; $db->Query($sql,0); } header("location:shenhe.php");
这个主要是逻辑麻烦,没错!