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
<?php
session_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
<?php
if ( 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
<?php
session_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
<?php
session_start();  //开启session
include ( "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
<?php
session_start();  //开启session
include ( "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='background-color:green; 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
<?php
include ( "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)这个及时发起流程的页面了

 至此,这个流程管理就结束了。

转载于:https://www.cnblogs.com/cmzhphp2017/p/7920624.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值