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=' 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)这个及时发起流程的页面了

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

php 审批流程管理的更多相关文章

  1. 熊乐:H3 BPM为加速企业流程管理提供源动力

    近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...

  2. 从国内流程管理软件市场份额看中国BPM行业发展

    随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...

  3. php之 有点复杂的 流程管理

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

  4. php流程管理练习

    今天我们做一个流程管理: 1.流程管理的用法是什么样的? 2.怎么发起想要的流程? 3.审批的人要是怎么审批通过? 4.流程审核是不是要挨个走过? 一. 做这个流程管理肯定要有数据库: 二.数据库结束 ...

  5. FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程

    1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式. ...

  6. php之 常用的 流程管理

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

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

    易协流程管理系统实现将人为控制的业务活动,通过信息化手段实现系统控制,降低人为控制管理的风险以及促进企业的各项决策方针的顺利实施. 系统目标: 实现管理的规范化.制度化.程序化: 帮助企业将内控制度流 ...

  8. java 实现一套流程管理、流转的思路(伪工作流)

    在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提供我的设计思路,知道了思路,实现起来就简单很多了. 首先我 ...

  9. 用svg做流程管理

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

随机推荐

  1. 微软打造了全球最大的Git代码库

    丹棱君有话说:今年 2 月,微软宣布将用 Git 管理 Windows 源代码.随后,Visual Studio 宣布开发 “Git 虚拟文件系统(GVFS)”,并将在终极项目和超大型团队中推行 Gi ...

  2. 内容导出成word

    private void 导出word(string 内容) { string tit = "<html xmlns:v=\"urn:schemas-microsoft-co ...

  3. python3操作excel02(对excel的基础操作,进行简单的封装)3

    #!/usr/bin/env python# -*- coding:UTF-8 -*- import requestsfrom bs4 import BeautifulSoupfrom bs4 imp ...

  4. Python+selenium之窗口截图

    自动化用例是由程序去执行,因此有时候打印的错误信息并不明确,如果在脚本执行错误的时候能对当前窗口截图保存,那么通过图片就可以非常直观的看出出错的原因.webdriver提供了截图函数get_scree ...

  5. COGS 2342. [SCOI2007]kshort

    ★★☆   输入文件:bzoj_1073.in   输出文件:bzoj_1073.out   简单对比时间限制:2 s   内存限制:512 MB [题目描述] 有n个城市和m条单向道路,城市编号为1 ...

  6. k8s1.13.0二进制部署-master节点(三)

    部署apiserver 创建生成CSR的JSON配置文件 [root@k8s-master1 ssl]# vim kubernetes-csr.json { "CN": " ...

  7. 读书笔记-《深入理解Java虚拟机:JVM高级特性与最佳实践》

    目录 概述 第一章: 走进Java 第二章: Java内存区域与内存溢出异常 第三章: 垃圾收集器与内存分配策略 第四章: 虚拟机性能监控与故障处理 第五章: 调优案例分析与实战 第六章: 类文件结构 ...

  8. 利用Python的pyHook包来进行键盘监听

    最近在实习的时候发现一件很蛋疼的事情,那就是我们组的项目因为有后台进程,所有每次运行完以后后台进程都必须要自己手动关闭,每次编译之前忘记关就会有一大堆编译错误,我就想直接弄个可以快捷键直接关闭算了   ...

  9. webgis技术在智慧城市综合治理网格化社会管理平台(综治平台)的应用

      网格化社会管理平台功能:1 实有人口管理人口数据管理按照人口分类进行管理,分为常住人口.流动人口.特殊人群.弱势群体,功能包括人口信息管理.归口负责.人房关联.统计汇总.地图监管服务等功能.人口信 ...

  10. 配置Xcode的Device Orientation、AppIcon、LaunchImage

    以下图片指出的 TARGETS→General 面板的信息. 下面我们讲讲根据 APP 需求配置我们的Xcode: 1.设置 Device Orientation,指定 APP 支持设备的方向 ,我们 ...