在公司运营中,人员的变动及请假、离职情况都很普遍,这就需要有一个管理系统来系统的做一套流程,可以提升工作效率节省时间。在流程中需要有顺序的进行提交审核,接下来我们做一套简单的新建流程以及提交审核的系统:

首先需要几张表:userss表、liucheng表、jiedian表、userflow表

第一步新建流程,添加节点,这里要将userss表中的性命显示出来,这里可以用单选也可以用下拉,我们用下拉列表显示:

<h1>新建流程</h1>
<div>请选择节点人员:
<select id="user">
<?php
session_start();
require "DBDA.class.php";
$db = new DBDA();
$sql = "select * from userss";
$arr = $db->query($sql);
foreach($arr as $v)
{
echo "<option value='{$v[0]}'>{$v[2]}</option>";//找到人员姓名
}
?>
</select>
<input type="button" value="添加节点" id="addjd" /><!--id为了添加点击事件-->
</div><br />

效果图:

第二步引入jquery包,给节点添加点击事件:

<script>//给节点添加点击事件
$("#addjd").click(function(){
var uid = $("#user").val();
$.ajax({
url:"liuadd.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){
window.location.href="liucheng.php";//刷新页面
}
})
})

liuadd.php处理页面:

<?php
session_start();
$uid = $_POST["uid"];//取用户名 if(empty($_SESSION["jiedian"]))
{
$arr = array($uid);//如果为空,造一个数组
$_SESSION["jiedian"] = $arr;
}
else
{
$arr = $_SESSION["jiedian"];
$arr[] = $uid;//将值添加进去
$_SESSION["jiedian"] = $arr;
}

第三步嵌入php代码,取出session的值,点击添加节点添加到下方:

<div>
<?php
if(empty($_SESSION["jiedian"]))
{
echo "您尚未添加节点人员";
}
else
{
$arr = $_SESSION["jiedian"];
foreach($arr as $k=>$v)
{
$sql = "select name from userss where uid = '{$v}'";
$name = $db->strquery($sql);
echo "<div id='ys'>{$k}--{$name}--<input type='button' value='移除' class='yichu' sy='{$k}' /></div>";//取出索引,姓名并添加移除按钮
}
}
?>
</div><br />

看看效果:

第四步:给移除按钮添加点击事件:

//移除的点击事件
$(".yichu").click(function(){
var sy = $(this).attr("sy");
$.ajax({
url:"yichu.php",
data:{sy:sy},
type:"POST",
dataType:"TEXT",
success: function(data){
window.location.href="liucheng.php";
}
})
})

yichu.php处理页面:

<?php
session_start();
$sy = $_POST["sy"]; $arr = $_SESSION["jiedian"];
unset($arr[$sy]);//从数组中删除sy这一项
$arr = array_values($arr);//重新索引
$_SESSION["jiedian"] = $arr;

第五步:添加流程名称及保存按钮,保存到数据库:

<div>请输入流程名称:
<input type="text" id="name" />
</div><br />
<input type="button" value="保存" id="baocun" />

保存按钮添加点击事件:

//保存的点击事件
$("#baocun").click(function(){
var name = $("#name").val();
$.ajax({
url:"baocun.php",
data:{name:name},
type:"POST",
dataType:"TEXT",
success: function(data){
alert("保存成功");
}
})
})

baocun.php处理页面:

<?php
session_start();
require "DBDA.class.php";
$db = new DBDA();
$name = $_POST["name"];
$code = time();//时间戳生成code $sql = "insert into liucheng values('{$code}','{$name}')";//保存到liucheng里边
$db->query($sql,0);
$arr = $_SESSION["jiedian"];
foreach($arr as $k=>$v)
{ $sql = "insert into jiedian values('','{$code}','{$v}','{$k}')";//保存到jiedian里边。
$db->query($sql,0);
}

实现效果:

数据库:

上边是新建流程及保存流程,下边我们就要进行流程的发起和审核:

发起流程要先登录,所以先建个登录页面:

<h1>登录页面</h1>
<form action="liudengchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>

登录处理页面:

<?php
session_start();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"]; require "DBDA.class.php";//引入封装类
$db = new DBDA();
$sql = "select pwd from userss where uid = '{$uid}'";//通过用户名找密码
$mm = $db->strquery($sql);
if($mm == $pwd && !empty($pwd))//判断密码是否相同且不为空
{
$_SESSION["uid"] = $uid;
header("location:liumain.php");
}

然后做一个主页面,主页面内容非常简单,就是发起流程和审核流程:

<body>
<h1>主页面</h1>
<div><a href="faqi.php">发起流程</a> <a href="shenhe.php">审核流程</a></div>
</body>

建好主页面后开始发起流程页面的设置:

发起流程用下拉列表显示:

<h1>发起流程</h1>
<form action="faqichuli.php" method="post">
<div>请选择发起的流程:
<select name="lc">
<?php
require "DBDA.class.php";
$db = new DBDA();
$sql = "select * from liucheng";
$arr = $db->query($sql);
foreach($arr as $v)
{
echo "<option value='{$v[0]}'>{$v[1]}</option>";//取出流程名称
}
?>
</select>
</div>
<br />
<div>请输入发起的内容:
<textarea name="nr"></textarea>
</div>
<br />
<input type="submit" value="发起" />
</form>

写发起处理页面:

<?php
session_start();
$code =$_POST["lc"];
$nr = $_POST["nr"];
$uid = $_SESSION["uid"];
$time = date("Y-m-d H:i:s",time());//将时间戳替换为格式化的时间 require "DBDA.class.php";
$db = new DBDA();
$sql = "insert into userflow values('','{$code}','{$uid}','{$nr}',0,'{$time}',0)";
$db->query($sql,0);
header("location:liumain.php");//跳回主页面

发起后要进行审核,审核是一级级的审,下级没有通过的时候上级是不会看到的:

<h1>审核页面</h1>
<?php
session_start();
$uid = $_SESSION["uid"];//存储的用户名 require "DBDA.class.php";
$db = new DBDA(); $sql = "select * from userflow a where code in(select code from jiedian where uid='{$uid}') and towhere >=(select orders from jiedian b where b.code=a.code and b.uid='{$uid}' )" ;//这里用到了相关子查询,流程顺序是否已经到达该用户或已经被该用户审核过 $arr = $db->query($sql);
echo "<table width='100%' border='1' cellpadding='0' cellspacing='0'>
<tr>
<td>流程代号</td>
<td>发起者</td>
<td>发起内容</td>
<td>是否结束</td>
<td>发起时间</td>
<td>操作</td>
</tr>
";
foreach($arr as $v)
{
$zt = "<a href='liutongguo.php? code={$v[0]}'>通过</a>";
$sql = "select orders from jiedian where code='{$v[1]}' and uid='{$uid}'";//通过用户名和代号找出顺序
$wz = $db->strquery($sql);
if($v[6]>$wz)
{
$zt = "<span style='color:green'>已通过</span>";
}
//显示表中内容
echo "<tr>
<td>{$v[1]}</td>
<td>{$v[2]}</td>
<td>{$v[3]}</td>
<td>{$v[4]}</td>
<td>{$v[5]}</td>
<td>{$zt}</td>
</tr>";
}
echo "</table>";
?>

最后是通过处理页面:

<?php
$ids = $_GET["code"];
require "DBDA.class.php";
$db = new DBDA();
//让流程往下走
$sql = "update userflow set towhere = towhere+1 where ids='{$ids}'";//审核通过后顺序加一,给到下一个人
$db->query($sql,0); //判断流程是否结束
$sql = "select max(orders) from jiedian where code=( select code from userflow where ids='{$ids}')";//找出顺序中最大的数
$maxsx = $db->strquery($sql); $sql = "select towhere from userflow where ids='{$ids}'";
$towhere = $db->strquery($sql); if($towhere>$maxsx)
{
//如果结束了,修改状态
$sql = "update userflow set isok = 1 where ids='{$ids}'";
$db->query($sql,0);
} header("location:shenhe.php");

看一下效果:

审核人登录:

点击通过:

最终审核人:

通过后是否结束显示为1:

php审核流程详解的更多相关文章

  1. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  2. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

  3. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  4. Linux启动流程详解【转载】

    在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...

  5. iOS 组件化流程详解(git创建流程)

    [链接]组件化流程详解(一)https://www.jianshu.com/p/2deca619ff7e

  6. git概念及工作流程详解

    git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...

  7. Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)

    一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...

  8. JPEG图像压缩算法流程详解

    JPEG图像压缩算法流程详解 JPEG代表Joint Photographic Experts Group(联合图像专家小组).此团队创立于1986年,1992年发布了JPEG的标准而在1994年获得 ...

  9. unity3d-配置Android环境,打包发布Apk流程详解

    31:unity3d-配置Android环境,打包发布Apk流程详解 作者 阿西纳尼 关注 2016.08.28 22:52 字数 498 阅读 1806评论 0喜欢 5 Unity配置Android ...

随机推荐

  1. LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)

    108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...

  2. 【SpringBoot】SpringBoot日志框架(四)

    日志框架介绍 在开发过程中,我们经常使用到日志来进行排查问题,我们使用的日志框架都是由2部分组成(日志API + 日志实现) 日志API(及日志抽象层)有:SLF4j(Simple Logging F ...

  3. object literal对象字面量

    <JavaScript高级程序设计(第3版)>有个陌生的新词:对象字面量,无法理解.看了一下英文原版,英文是object literal ,还是不太理解.后来想明白了,主要是literal ...

  4. LeetCode_485. Max Consecutive Ones

    485. Max Consecutive Ones Easy Given a binary array, find the maximum number of consecutive 1s in th ...

  5. LeetCode_455. Assign Cookies

    455. Assign Cookies Easy Assume you are an awesome parent and want to give your children some cookie ...

  6. [INet] 借助 HTTP Cache 加速应用响应

    背景: GET 访问一个应用的时候,内容一般都不会时刻在变,如何让下一个人请求时极速获取响应过的内容,并且在内容发生变更时能够识别出来. 在应用层做 Cache 是一种方法,但是依旧要响应整个 Bod ...

  7. 史上最全的中高级Java面试题汇总

    原文链接:https://blog.csdn.net/shengqianfeng/article/details/102572691 memcache的分布式原理 memcached 虽然称为 “ 分 ...

  8. ifcopenshell在VS2015下的编译

    源起 今天使用 IfcOpenShell的IfcConvert ,因为是开源的所以就想自己编译下,编译过程中遇到不少问题,因此记录下来 什么是IfcOpenShell? IfcOpenShell是一个 ...

  9. jquery关于on click事件的理解

    jquery关于on click事件的理解 <pre><a style="min-width:60px; margin-left:6px;" wenzhangid ...

  10. Linux字符设备驱动实例—globalmem驱动

    1.globalmem虚拟设备实例 globalmem为“全局内存”的意思,在globalmem字符设备中会分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间,并在驱动中提供对这片内存的读 ...